@orbe-agro/client-core 5.6.145 → 5.6.147

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 (71) hide show
  1. package/dist/@ecme/components/layouts/PostLoginLayout/components/CollapsibleSide.stories.js +25 -0
  2. package/dist/@ecme/components/layouts/PostLoginLayout/components/CollapsibleSide.stories.js.map +1 -0
  3. package/dist/@ecme/components/layouts/PostLoginLayout/components/ContentOverlay.stories.js +22 -0
  4. package/dist/@ecme/components/layouts/PostLoginLayout/components/ContentOverlay.stories.js.map +1 -0
  5. package/dist/@ecme/components/layouts/PostLoginLayout/components/FrameLessSide.stories.js +22 -0
  6. package/dist/@ecme/components/layouts/PostLoginLayout/components/FrameLessSide.stories.js.map +1 -0
  7. package/dist/@ecme/components/layouts/PostLoginLayout/components/StackedSide.stories.js +25 -0
  8. package/dist/@ecme/components/layouts/PostLoginLayout/components/StackedSide.stories.js.map +1 -0
  9. package/dist/@ecme/components/layouts/PostLoginLayout/components/TopBarClassic.stories.js +25 -0
  10. package/dist/@ecme/components/layouts/PostLoginLayout/components/TopBarClassic.stories.js.map +1 -0
  11. package/dist/@ecme/components/template/Footer.js +1 -1
  12. package/dist/@ecme/components/template/Header.stories.js +42 -0
  13. package/dist/@ecme/components/template/Header.stories.js.map +1 -0
  14. package/dist/@ecme/components/template/Search.js +32 -2
  15. package/dist/@ecme/components/template/Search.js.map +1 -1
  16. package/dist/@ecme/components/template/Search.stories.js +61 -0
  17. package/dist/@ecme/components/template/Search.stories.js.map +1 -0
  18. package/dist/@ecme/index.js +3 -0
  19. package/dist/@ecme/index.js.map +1 -1
  20. package/dist/@ecme/locales/index.js +4 -1
  21. package/dist/@ecme/locales/index.js.map +1 -1
  22. package/dist/@ecme/locales/initAll.js +26 -0
  23. package/dist/@ecme/locales/initAll.js.map +1 -0
  24. package/dist/@ecme/locales/lang/en/common.js +43 -0
  25. package/dist/@ecme/locales/lang/en/common.js.map +1 -1
  26. package/dist/@ecme/locales/lang/en/index.js +3 -1
  27. package/dist/@ecme/locales/lang/en/index.js.map +1 -1
  28. package/dist/@ecme/locales/lang/ptBR/common.js +43 -0
  29. package/dist/@ecme/locales/lang/ptBR/common.js.map +1 -1
  30. package/dist/@ecme/locales/lang/ptBR/index.js +3 -1
  31. package/dist/@ecme/locales/lang/ptBR/index.js.map +1 -1
  32. package/dist/@ecme/locales/lang/ptBR/nav.js +307 -4
  33. package/dist/@ecme/locales/lang/ptBR/nav.js.map +1 -1
  34. package/dist/@ecme/views/auth/lang/index.js +2 -2
  35. package/dist/@ecme/views/auth/lang/index.js.map +1 -1
  36. package/dist/@types/@ecme/components/template/Search.d.ts.map +1 -1
  37. package/dist/@types/@ecme/locales/index.d.ts +1 -0
  38. package/dist/@types/@ecme/locales/index.d.ts.map +1 -1
  39. package/dist/@types/@ecme/locales/initAll.d.ts +3 -0
  40. package/dist/@types/@ecme/locales/initAll.d.ts.map +1 -0
  41. package/dist/@types/@ecme/locales/lang/en/common.d.ts +43 -0
  42. package/dist/@types/@ecme/locales/lang/en/common.d.ts.map +1 -1
  43. package/dist/@types/@ecme/locales/lang/en/index.d.ts +98 -0
  44. package/dist/@types/@ecme/locales/lang/en/index.d.ts.map +1 -1
  45. package/dist/@types/@ecme/locales/lang/ptBR/common.d.ts.map +1 -1
  46. package/dist/@types/@ecme/locales/lang/ptBR/index.d.ts +98 -0
  47. package/dist/@types/@ecme/locales/lang/ptBR/index.d.ts.map +1 -1
  48. package/dist/@types/@ecme/locales/lang/ptBR/nav.d.ts.map +1 -1
  49. package/dist/@types/base/@types/models/ativos/documentacao.d.ts +4 -3
  50. package/dist/@types/base/@types/models/ativos/documentacao.d.ts.map +1 -1
  51. package/dist/base/locales/index.js +2 -2
  52. package/dist/base/locales/index.js.map +1 -1
  53. package/lib/@ecme/components/layouts/PostLoginLayout/components/CollapsibleSide.stories.tsx +38 -0
  54. package/lib/@ecme/components/layouts/PostLoginLayout/components/ContentOverlay.stories.tsx +35 -0
  55. package/lib/@ecme/components/layouts/PostLoginLayout/components/FrameLessSide.stories.tsx +35 -0
  56. package/lib/@ecme/components/layouts/PostLoginLayout/components/StackedSide.stories.tsx +38 -0
  57. package/lib/@ecme/components/layouts/PostLoginLayout/components/TopBarClassic.stories.tsx +38 -0
  58. package/lib/@ecme/components/template/Header.stories.tsx +46 -0
  59. package/lib/@ecme/components/template/Search.stories.tsx +79 -0
  60. package/lib/@ecme/components/template/Search.tsx +41 -14
  61. package/lib/@ecme/locales/index.ts +4 -0
  62. package/lib/@ecme/locales/initAll.ts +25 -0
  63. package/lib/@ecme/locales/lang/en/common.ts +43 -0
  64. package/lib/@ecme/locales/lang/en/index.ts +2 -0
  65. package/lib/@ecme/locales/lang/ptBR/common.ts +44 -1
  66. package/lib/@ecme/locales/lang/ptBR/index.ts +2 -0
  67. package/lib/@ecme/locales/lang/ptBR/nav.ts +308 -5
  68. package/lib/@ecme/views/auth/lang/index.ts +2 -2
  69. package/lib/base/@types/models/ativos/documentacao.ts +4 -3
  70. package/lib/base/locales/index.ts +2 -2
  71. package/package.json +1 -1
@@ -0,0 +1,25 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { BrowserRouter } from "react-router-dom";
3
+ import CollapsibleSide from "./CollapsibleSide.js";
4
+ const meta = {
5
+ title: "@ecme/Layouts/PostLogin/CollapsibleSide",
6
+ component: CollapsibleSide,
7
+ parameters: {
8
+ layout: "fullscreen"
9
+ },
10
+ tags: ["autodocs"],
11
+ decorators: [
12
+ (Story) => /* @__PURE__ */ jsx(BrowserRouter, { children: /* @__PURE__ */ jsx(Story, {}) })
13
+ ]
14
+ };
15
+ const Default = {
16
+ args: {
17
+ pageTitle: "Dashboard"
18
+ },
19
+ render: (args) => /* @__PURE__ */ jsx(CollapsibleSide, { ...args, children: /* @__PURE__ */ jsx("div", { className: "p-4", children: /* @__PURE__ */ jsx("div", { className: "rounded border border-gray-200 p-4", children: "Conteudo da pagina" }) }) })
20
+ };
21
+ export {
22
+ Default,
23
+ meta as default
24
+ };
25
+ //# sourceMappingURL=CollapsibleSide.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollapsibleSide.stories.js","sources":["../../../../../../lib/@ecme/components/layouts/PostLoginLayout/components/CollapsibleSide.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from '@storybook/react'\nimport { BrowserRouter } from 'react-router-dom'\nimport CollapsibleSide from './CollapsibleSide'\n\nconst meta = {\n title: '@ecme/Layouts/PostLogin/CollapsibleSide',\n component: CollapsibleSide,\n parameters: {\n layout: 'fullscreen',\n },\n tags: ['autodocs'],\n decorators: [\n (Story) => (\n <BrowserRouter>\n <Story />\n </BrowserRouter>\n ),\n ],\n} satisfies Meta<typeof CollapsibleSide>\n\nexport default meta\n\ntype TStory = StoryObj<typeof meta>\n\nexport const Default: TStory = {\n args: {\n pageTitle: 'Dashboard',\n },\n render: (args) => (\n <CollapsibleSide {...args}>\n <div className=\"p-4\">\n <div className=\"rounded border border-gray-200 p-4\">\n Conteudo da pagina\n </div>\n </div>\n </CollapsibleSide>\n ),\n}\n"],"names":[],"mappings":";;;AAIA,MAAM,OAAO;AAAA,EACT,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;AAGZ;AAMO,MAAM,UAAkB;AAAA,EAC3B,MAAM;AAAA,IACF,WAAW;AAAA,EAAA;AAAA,EAEf,QAAQ,CAAC,SACL,oBAAC,iBAAA,EAAiB,GAAG,MACjB,UAAA,oBAAC,OAAA,EAAI,WAAU,OACX,UAAA,oBAAC,OAAA,EAAI,WAAU,sCAAqC,UAAA,sBAEpD,GACJ,EAAA,CACJ;AAER;"}
@@ -0,0 +1,22 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { BrowserRouter } from "react-router-dom";
3
+ import ContentOverlay from "./ContentOverlay.js";
4
+ const meta = {
5
+ title: "@ecme/Layouts/PostLogin/ContentOverlay",
6
+ component: ContentOverlay,
7
+ parameters: {
8
+ layout: "fullscreen"
9
+ },
10
+ tags: ["autodocs"],
11
+ decorators: [
12
+ (Story) => /* @__PURE__ */ jsx(BrowserRouter, { children: /* @__PURE__ */ jsx(Story, {}) })
13
+ ]
14
+ };
15
+ const Default = {
16
+ render: () => /* @__PURE__ */ jsx(ContentOverlay, { children: /* @__PURE__ */ jsx("div", { className: "p-4", children: /* @__PURE__ */ jsx("div", { className: "rounded border border-gray-200 bg-white p-4 dark:bg-gray-900", children: "Conteudo da pagina" }) }) })
17
+ };
18
+ export {
19
+ Default,
20
+ meta as default
21
+ };
22
+ //# sourceMappingURL=ContentOverlay.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContentOverlay.stories.js","sources":["../../../../../../lib/@ecme/components/layouts/PostLoginLayout/components/ContentOverlay.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from '@storybook/react'\nimport { BrowserRouter } from 'react-router-dom'\nimport ContentOverlay from './ContentOverlay'\n\nconst meta = {\n title: '@ecme/Layouts/PostLogin/ContentOverlay',\n component: ContentOverlay,\n parameters: {\n layout: 'fullscreen',\n },\n tags: ['autodocs'],\n decorators: [\n (Story) => (\n <BrowserRouter>\n <Story />\n </BrowserRouter>\n ),\n ],\n} satisfies Meta<typeof ContentOverlay>\n\nexport default meta\n\ntype TStory = StoryObj<typeof meta>\n\nexport const Default: TStory = {\n render: () => (\n <ContentOverlay>\n <div className=\"p-4\">\n <div className=\"rounded border border-gray-200 bg-white p-4 dark:bg-gray-900\">\n Conteudo da pagina\n </div>\n </div>\n </ContentOverlay>\n ),\n}\n"],"names":[],"mappings":";;;AAIA,MAAM,OAAO;AAAA,EACT,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;AAGZ;AAMO,MAAM,UAAkB;AAAA,EAC3B,QAAQ,MACJ,oBAAC,gBAAA,EACG,8BAAC,OAAA,EAAI,WAAU,OACX,UAAA,oBAAC,OAAA,EAAI,WAAU,gEAA+D,UAAA,sBAE9E,GACJ,EAAA,CACJ;AAER;"}
@@ -0,0 +1,22 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { BrowserRouter } from "react-router-dom";
3
+ import FrameLessSide from "./FrameLessSide.js";
4
+ const meta = {
5
+ title: "@ecme/Layouts/PostLogin/FrameLessSide",
6
+ component: FrameLessSide,
7
+ parameters: {
8
+ layout: "fullscreen"
9
+ },
10
+ tags: ["autodocs"],
11
+ decorators: [
12
+ (Story) => /* @__PURE__ */ jsx(BrowserRouter, { children: /* @__PURE__ */ jsx(Story, {}) })
13
+ ]
14
+ };
15
+ const Default = {
16
+ render: () => /* @__PURE__ */ jsx(FrameLessSide, { children: /* @__PURE__ */ jsx("div", { className: "p-4", children: /* @__PURE__ */ jsx("div", { className: "rounded border border-gray-200 bg-white p-4 dark:bg-gray-900", children: "Conteudo da pagina" }) }) })
17
+ };
18
+ export {
19
+ Default,
20
+ meta as default
21
+ };
22
+ //# sourceMappingURL=FrameLessSide.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FrameLessSide.stories.js","sources":["../../../../../../lib/@ecme/components/layouts/PostLoginLayout/components/FrameLessSide.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from '@storybook/react'\nimport { BrowserRouter } from 'react-router-dom'\nimport FrameLessSide from './FrameLessSide'\n\nconst meta = {\n title: '@ecme/Layouts/PostLogin/FrameLessSide',\n component: FrameLessSide,\n parameters: {\n layout: 'fullscreen',\n },\n tags: ['autodocs'],\n decorators: [\n (Story) => (\n <BrowserRouter>\n <Story />\n </BrowserRouter>\n ),\n ],\n} satisfies Meta<typeof FrameLessSide>\n\nexport default meta\n\ntype TStory = StoryObj<typeof meta>\n\nexport const Default: TStory = {\n render: () => (\n <FrameLessSide>\n <div className=\"p-4\">\n <div className=\"rounded border border-gray-200 bg-white p-4 dark:bg-gray-900\">\n Conteudo da pagina\n </div>\n </div>\n </FrameLessSide>\n ),\n}\n"],"names":[],"mappings":";;;AAIA,MAAM,OAAO;AAAA,EACT,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;AAGZ;AAMO,MAAM,UAAkB;AAAA,EAC3B,QAAQ,MACJ,oBAAC,eAAA,EACG,8BAAC,OAAA,EAAI,WAAU,OACX,UAAA,oBAAC,OAAA,EAAI,WAAU,gEAA+D,UAAA,sBAE9E,GACJ,EAAA,CACJ;AAER;"}
@@ -0,0 +1,25 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { BrowserRouter } from "react-router-dom";
3
+ import StackedSide from "./StackedSide.js";
4
+ const meta = {
5
+ title: "@ecme/Layouts/PostLogin/StackedSide",
6
+ component: StackedSide,
7
+ parameters: {
8
+ layout: "fullscreen"
9
+ },
10
+ tags: ["autodocs"],
11
+ decorators: [
12
+ (Story) => /* @__PURE__ */ jsx(BrowserRouter, { children: /* @__PURE__ */ jsx(Story, {}) })
13
+ ]
14
+ };
15
+ const Default = {
16
+ args: {
17
+ pageTitle: "Dashboard"
18
+ },
19
+ render: (args) => /* @__PURE__ */ jsx(StackedSide, { ...args, children: /* @__PURE__ */ jsx("div", { className: "p-4", children: /* @__PURE__ */ jsx("div", { className: "rounded border border-gray-200 p-4", children: "Conteudo da pagina" }) }) })
20
+ };
21
+ export {
22
+ Default,
23
+ meta as default
24
+ };
25
+ //# sourceMappingURL=StackedSide.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StackedSide.stories.js","sources":["../../../../../../lib/@ecme/components/layouts/PostLoginLayout/components/StackedSide.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from '@storybook/react'\nimport { BrowserRouter } from 'react-router-dom'\nimport StackedSide from './StackedSide'\n\nconst meta = {\n title: '@ecme/Layouts/PostLogin/StackedSide',\n component: StackedSide,\n parameters: {\n layout: 'fullscreen',\n },\n tags: ['autodocs'],\n decorators: [\n (Story) => (\n <BrowserRouter>\n <Story />\n </BrowserRouter>\n ),\n ],\n} satisfies Meta<typeof StackedSide>\n\nexport default meta\n\ntype TStory = StoryObj<typeof meta>\n\nexport const Default: TStory = {\n args: {\n pageTitle: 'Dashboard',\n },\n render: (args) => (\n <StackedSide {...args}>\n <div className=\"p-4\">\n <div className=\"rounded border border-gray-200 p-4\">\n Conteudo da pagina\n </div>\n </div>\n </StackedSide>\n ),\n}\n"],"names":[],"mappings":";;;AAIA,MAAM,OAAO;AAAA,EACT,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;AAGZ;AAMO,MAAM,UAAkB;AAAA,EAC3B,MAAM;AAAA,IACF,WAAW;AAAA,EAAA;AAAA,EAEf,QAAQ,CAAC,SACL,oBAAC,aAAA,EAAa,GAAG,MACb,UAAA,oBAAC,OAAA,EAAI,WAAU,OACX,UAAA,oBAAC,OAAA,EAAI,WAAU,sCAAqC,UAAA,sBAEpD,GACJ,EAAA,CACJ;AAER;"}
@@ -0,0 +1,25 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { BrowserRouter } from "react-router-dom";
3
+ import TopBarClassic from "./TopBarClassic.js";
4
+ const meta = {
5
+ title: "@ecme/Layouts/PostLogin/TopBarClassic",
6
+ component: TopBarClassic,
7
+ parameters: {
8
+ layout: "fullscreen"
9
+ },
10
+ tags: ["autodocs"],
11
+ decorators: [
12
+ (Story) => /* @__PURE__ */ jsx(BrowserRouter, { children: /* @__PURE__ */ jsx(Story, {}) })
13
+ ]
14
+ };
15
+ const Default = {
16
+ args: {
17
+ pageTitle: "Dashboard"
18
+ },
19
+ render: (args) => /* @__PURE__ */ jsx(TopBarClassic, { ...args, children: /* @__PURE__ */ jsx("div", { className: "p-4", children: /* @__PURE__ */ jsx("div", { className: "rounded border border-gray-200 p-4", children: "Conteudo da pagina" }) }) })
20
+ };
21
+ export {
22
+ Default,
23
+ meta as default
24
+ };
25
+ //# sourceMappingURL=TopBarClassic.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TopBarClassic.stories.js","sources":["../../../../../../lib/@ecme/components/layouts/PostLoginLayout/components/TopBarClassic.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from '@storybook/react'\nimport { BrowserRouter } from 'react-router-dom'\nimport TopBarClassic from './TopBarClassic'\n\nconst meta = {\n title: '@ecme/Layouts/PostLogin/TopBarClassic',\n component: TopBarClassic,\n parameters: {\n layout: 'fullscreen',\n },\n tags: ['autodocs'],\n decorators: [\n (Story) => (\n <BrowserRouter>\n <Story />\n </BrowserRouter>\n ),\n ],\n} satisfies Meta<typeof TopBarClassic>\n\nexport default meta\n\ntype TStory = StoryObj<typeof meta>\n\nexport const Default: TStory = {\n args: {\n pageTitle: 'Dashboard',\n },\n render: (args) => (\n <TopBarClassic {...args}>\n <div className=\"p-4\">\n <div className=\"rounded border border-gray-200 p-4\">\n Conteudo da pagina\n </div>\n </div>\n </TopBarClassic>\n ),\n}\n"],"names":[],"mappings":";;;AAIA,MAAM,OAAO;AAAA,EACT,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;AAGZ;AAMO,MAAM,UAAkB;AAAA,EAC3B,MAAM;AAAA,IACF,WAAW;AAAA,EAAA;AAAA,EAEf,QAAQ,CAAC,SACL,oBAAC,eAAA,EAAe,GAAG,MACf,UAAA,oBAAC,OAAA,EAAI,WAAU,OACX,UAAA,oBAAC,OAAA,EAAI,WAAU,sCAAqC,UAAA,sBAEpD,GACJ,EAAA,CACJ;AAER;"}
@@ -3,7 +3,7 @@ import Container from "../shared/Container.js";
3
3
  import classNames from "../../utils/classNames.js";
4
4
  import { APP_NAME } from "../../constants/app.constant.js";
5
5
  import { PAGE_CONTAINER_GUTTER_X } from "../../constants/theme.constant.js";
6
- const version = true ? "5.6.145" : "0.0.0";
6
+ const version = true ? "5.6.147" : "0.0.0";
7
7
  const FooterContent = () => {
8
8
  return /* @__PURE__ */ jsxs("div", { className: "flex w-full flex-auto items-center justify-between", children: [
9
9
  /* @__PURE__ */ jsxs("span", { children: [
@@ -0,0 +1,42 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import Header from "./Header.js";
3
+ const meta = {
4
+ title: "@ecme/Template/Header",
5
+ component: Header,
6
+ parameters: {
7
+ layout: "fullscreen"
8
+ },
9
+ tags: ["autodocs"],
10
+ argTypes: {
11
+ container: {
12
+ control: "boolean"
13
+ },
14
+ className: {
15
+ control: "text"
16
+ },
17
+ wrapperClass: {
18
+ control: "text"
19
+ }
20
+ }
21
+ };
22
+ const Default = {
23
+ args: {
24
+ container: false,
25
+ className: "",
26
+ wrapperClass: ""
27
+ },
28
+ render: (args) => /* @__PURE__ */ jsx(
29
+ Header,
30
+ {
31
+ ...args,
32
+ headerStart: /* @__PURE__ */ jsx("div", { className: "px-4 text-sm font-semibold", children: "Minha Marca" }),
33
+ headerMiddle: /* @__PURE__ */ jsx("div", { className: "text-sm", children: "Área central" }),
34
+ headerEnd: /* @__PURE__ */ jsx("div", { className: "px-4 text-sm text-gray-600", children: "Usuário" })
35
+ }
36
+ )
37
+ };
38
+ export {
39
+ Default,
40
+ meta as default
41
+ };
42
+ //# sourceMappingURL=Header.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Header.stories.js","sources":["../../../../lib/@ecme/components/template/Header.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from '@storybook/react'\nimport Header from './Header'\n\nconst meta = {\n title: '@ecme/Template/Header',\n component: Header,\n parameters: {\n layout: 'fullscreen',\n },\n tags: ['autodocs'],\n argTypes: {\n container: {\n control: 'boolean',\n },\n className: {\n control: 'text',\n },\n wrapperClass: {\n control: 'text',\n },\n },\n} satisfies Meta<typeof Header>\n\nexport default meta\n\ntype TStory = StoryObj<typeof meta>\n\nexport const Default: TStory = {\n args: {\n container: false,\n className: '',\n wrapperClass: '',\n },\n render: (args) => (\n <Header\n {...args}\n headerStart={\n <div className=\"px-4 text-sm font-semibold\">Minha Marca</div>\n }\n headerMiddle={<div className=\"text-sm\">Área central</div>}\n headerEnd={\n <div className=\"px-4 text-sm text-gray-600\">Usuário</div>\n }\n />\n ),\n}\n"],"names":[],"mappings":";;AAGA,MAAM,OAAO;AAAA,EACT,OAAO;AAAA,EACP,WAAW;AAAA,EACX,YAAY;AAAA,IACR,QAAQ;AAAA,EAAA;AAAA,EAEZ,MAAM,CAAC,UAAU;AAAA,EACjB,UAAU;AAAA,IACN,WAAW;AAAA,MACP,SAAS;AAAA,IAAA;AAAA,IAEb,WAAW;AAAA,MACP,SAAS;AAAA,IAAA;AAAA,IAEb,cAAc;AAAA,MACV,SAAS;AAAA,IAAA;AAAA,EACb;AAER;AAMO,MAAM,UAAkB;AAAA,EAC3B,MAAM;AAAA,IACF,WAAW;AAAA,IACX,WAAW;AAAA,IACX,cAAc;AAAA,EAAA;AAAA,EAElB,QAAQ,CAAC,SACL;AAAA,IAAC;AAAA,IAAA;AAAA,MACI,GAAG;AAAA,MACJ,aACI,oBAAC,OAAA,EAAI,WAAU,8BAA6B,UAAA,eAAW;AAAA,MAE3D,cAAc,oBAAC,OAAA,EAAI,WAAU,WAAU,UAAA,gBAAY;AAAA,MACnD,WACI,oBAAC,OAAA,EAAI,WAAU,8BAA6B,UAAA,UAAA,CAAO;AAAA,IAAA;AAAA,EAAA;AAInE;"}
@@ -4,6 +4,7 @@ import "../ui/Dialog/index.js";
4
4
  import "../ui/ScrollBar/index.js";
5
5
  import navigationConfig from "../../configs/navigation.config/index.js";
6
6
  import { NAV_ITEM_TYPE_ITEM } from "../../constants/navigation.constant.js";
7
+ import { useSessionUser } from "../../store/authStore.js";
7
8
  import classNames from "../../utils/classNames.js";
8
9
  import withHeaderItem from "../../utils/hoc/withHeaderItem.js";
9
10
  import debounce from "lodash/debounce";
@@ -18,6 +19,30 @@ import Dialog from "../ui/Dialog/Dialog.js";
18
19
  import Button from "../ui/Button/Button.js";
19
20
  import Spinner from "../ui/Spinner/Spinner.js";
20
21
  import ScrollBar from "../ui/ScrollBar/ScrollBar.js";
22
+ const filterNavigationByAuthority = (navTree, userAuthority) => {
23
+ return navTree.reduce((acc, nav) => {
24
+ if (nav.excludeWhenHasPaths && nav.excludeWhenHasPaths.length > 0) {
25
+ const shouldExclude = nav.excludeWhenHasPaths.some(
26
+ (path) => userAuthority.includes(path)
27
+ );
28
+ if (shouldExclude) {
29
+ return acc;
30
+ }
31
+ }
32
+ if (nav.subMenu && nav.subMenu.length > 0) {
33
+ const filteredSubMenu = filterNavigationByAuthority(
34
+ nav.subMenu,
35
+ userAuthority
36
+ );
37
+ if (filteredSubMenu.length > 0) {
38
+ acc.push({ ...nav, subMenu: filteredSubMenu });
39
+ }
40
+ } else if (nav.path && userAuthority.includes(nav.path) || !nav.path) {
41
+ acc.push(nav);
42
+ }
43
+ return acc;
44
+ }, []);
45
+ };
21
46
  const ListItem = (props) => {
22
47
  const { icon, label, url = "", keyWord, onNavigate, breadcrumbs } = props;
23
48
  const makeBreadcrumbs = (breadcrumbs2) => {
@@ -53,6 +78,7 @@ const _Search = ({ className }) => {
53
78
  const [searchDialogOpen, setSearchDialogOpen] = useState(false);
54
79
  const [searchResult, setSearchResult] = useState([]);
55
80
  const [noResult, setNoResult] = useState(false);
81
+ const userAuthority = useSessionUser((state) => state.user.authority);
56
82
  const inputRef = useRef(null);
57
83
  const handleReset = () => {
58
84
  setNoResult(false);
@@ -69,6 +95,10 @@ const _Search = ({ className }) => {
69
95
  const { t } = useTranslation();
70
96
  const flatNavTree = useMemo(() => {
71
97
  const arr = [];
98
+ const filteredNavigationTree = filterNavigationByAuthority(
99
+ navigationConfig,
100
+ userAuthority || []
101
+ );
72
102
  const makeflat = (item, parents) => {
73
103
  if (Array.isArray(item.subMenu) && item.subMenu.length > 0) {
74
104
  item.subMenu.forEach(
@@ -77,11 +107,11 @@ const _Search = ({ className }) => {
77
107
  }
78
108
  arr.push({ ...item, parents });
79
109
  };
80
- navigationConfig.forEach(function f(item) {
110
+ filteredNavigationTree.forEach(function f(item) {
81
111
  makeflat(item, [t(item.translateKey)]);
82
112
  });
83
113
  return arr;
84
- }, [navigationConfig, t]);
114
+ }, [userAuthority, t]);
85
115
  const filterNavigationTreeFlat = (text, tree) => {
86
116
  const results = tree.filter(
87
117
  (item) => item.type === NAV_ITEM_TYPE_ITEM && item.parents.join().toUpperCase().includes(text.toUpperCase())
@@ -1 +1 @@
1
- {"version":3,"file":"Search.js","sources":["../../../../lib/@ecme/components/template/Search.tsx"],"sourcesContent":["import { NavigationTree } from '@/@types/navigation'\nimport Button from '@/components/ui/Button'\nimport Dialog from '@/components/ui/Dialog'\nimport ScrollBar from '@/components/ui/ScrollBar'\nimport navigationIcon from '@/configs/navigation-icon.config'\nimport navigationConfig from '@/configs/navigation.config'\nimport { NAV_ITEM_TYPE_ITEM } from '@/constants/navigation.constant'\nimport {\n GUIDE_PREFIX_PATH,\n UI_COMPONENTS_PREFIX_PATH,\n} from '@/constants/route.constant'\nimport classNames from '@/utils/classNames'\nimport withHeaderItem from '@/utils/hoc/withHeaderItem'\nimport {\n filterDeep,\n findDeep,\n findPathDeep,\n findValueDeep,\n} from 'deepdash-es/standalone'\nimport { flatten, flattenDeep } from 'lodash'\nimport debounce from 'lodash/debounce'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport Highlighter from 'react-highlight-words'\nimport { useTranslation } from 'react-i18next'\nimport { HiChevronRight, HiOutlineSearch } from 'react-icons/hi'\nimport { PiMagnifyingGlassDuotone } from 'react-icons/pi'\nimport { Link } from 'react-router-dom'\nimport { Spinner } from '../ui'\n\ntype SearchData = {\n key: string\n path: string\n title: string\n icon: string\n category: string\n categoryTitle: string\n breadcrumbs: string[]\n}\n\ntype SearchResult = {\n title: string\n data: SearchData[]\n}\n\nconst ListItem = (props: {\n icon: string\n label: string\n url: string\n isLast?: boolean\n keyWord: string\n breadcrumbs: string[]\n onNavigate: () => void\n}) => {\n const { icon, label, url = '', keyWord, onNavigate, breadcrumbs } = props\n\n const makeBreadcrumbs = (breadcrumbs: string[]) => {\n return breadcrumbs.join(' / ')\n }\n\n return (\n <Link to={url} onClick={onNavigate}>\n <div\n className={classNames(\n 'flex items-center justify-between rounded-xl p-3 cursor-pointer user-select',\n 'hover:bg-gray-100 dark:hover:bg-gray-700',\n )}\n >\n <div className=\"flex items-center gap-2\">\n {/* <div\n className={classNames(\n 'rounded-lg border-2 border-gray-200 shadow-sm text-xl group-hover:shadow h-10 w-10 flex items-center justify-center bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100',\n )}\n >\n {icon && navigationIcon[icon]}\n </div> */}\n <div className=\"text-gray-900 dark:text-gray-300\">\n <Highlighter\n autoEscape\n highlightClassName={classNames(\n 'text-primary',\n 'underline bg-transparent font-semibold dark:text-white',\n )}\n searchWords={[keyWord]}\n textToHighlight={makeBreadcrumbs(breadcrumbs)}\n />\n </div>\n </div>\n <HiChevronRight className=\"text-lg\" />\n </div>\n </Link>\n )\n}\n\ntype NavigationTreeFlat = NavigationTree & { parents: string[] }\n\nconst _Search = ({ className }: { className?: string }) => {\n const [loading, setLoading] = useState(false)\n const [searchDialogOpen, setSearchDialogOpen] = useState(false)\n const [searchResult, setSearchResult] = useState<SearchResult[]>([])\n const [noResult, setNoResult] = useState(false)\n\n const inputRef = useRef<HTMLInputElement>(null)\n\n const handleReset = () => {\n setNoResult(false)\n setSearchResult([])\n }\n\n const handleSearchOpen = () => {\n setSearchDialogOpen(true)\n }\n\n const handleSearchClose = () => {\n setSearchDialogOpen(false)\n handleReset()\n }\n\n const debounceFn = debounce(handleDebounceFn, 750)\n\n const { t } = useTranslation()\n\n const flatNavTree = useMemo(() => {\n const arr: NavigationTreeFlat[] = []\n\n const makeflat = (item: NavigationTree, parents: string[]) => {\n if (Array.isArray(item.subMenu) && item.subMenu.length > 0) {\n item.subMenu.forEach((item) =>\n makeflat(item, [...parents, t(item.translateKey)]),\n )\n }\n arr.push({ ...item, parents })\n }\n\n navigationConfig.forEach(function f(item) {\n makeflat(item, [t(item.translateKey)])\n })\n return arr\n }, [navigationConfig, t])\n\n const filterNavigationTreeFlat = (\n text: string,\n tree: NavigationTreeFlat[],\n ): NavigationTreeFlat[] => {\n const results = tree.filter(\n (item) =>\n item.type === NAV_ITEM_TYPE_ITEM &&\n item.parents.join().toUpperCase().includes(text.toUpperCase()),\n )\n\n return results\n }\n\n function navTreeFlatToSearchResult(\n tree: NavigationTreeFlat[],\n ): SearchResult[] {\n const navTreeSearchResult: SearchResult = {\n title: t('base.layout.search.results.navTree'),\n data: [],\n }\n tree.forEach((item) => {\n navTreeSearchResult.data.push({\n category: item.path,\n categoryTitle: item.title,\n icon: item.icon,\n key: item.key,\n path: item.path,\n title: t(item.translateKey, item.title),\n breadcrumbs: item.parents,\n })\n })\n return [navTreeSearchResult]\n }\n\n async function handleDebounceFn(query: string) {\n if (!query) {\n setLoading(false)\n setSearchResult([])\n return\n }\n\n if (noResult) {\n setNoResult(false)\n }\n\n const res = await filterNavigationTreeFlat(query, flatNavTree)\n\n if (res) {\n if (res.length === 0) {\n setNoResult(true)\n setSearchResult([])\n } else {\n setSearchResult(navTreeFlatToSearchResult(res))\n }\n }\n\n setLoading(false)\n }\n\n const handleSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n setLoading(true)\n debounceFn(e.target.value)\n }\n\n useEffect(() => {\n if (searchDialogOpen) {\n const timeout = setTimeout(() => inputRef.current?.focus(), 100)\n return () => {\n clearTimeout(timeout)\n }\n }\n }, [searchDialogOpen])\n\n const handleNavigate = () => {\n handleSearchClose()\n }\n\n return (\n <>\n <div\n className={classNames(className, 'text-2xl')}\n onClick={handleSearchOpen}\n >\n <PiMagnifyingGlassDuotone />\n </div>\n <Dialog\n contentClassName=\"p-0\"\n isOpen={searchDialogOpen}\n closable={false}\n onRequestClose={handleSearchClose}\n >\n <div>\n <div className=\"flex items-center justify-between border-b border-gray-200 px-4 dark:border-gray-600\">\n <div className=\"flex items-center\">\n <HiOutlineSearch className=\"text-xl\" />\n <input\n ref={inputRef}\n className=\"block w-full bg-transparent p-4 text-base text-gray-900 outline-none ring-0 dark:text-gray-100\"\n placeholder={t('common.input.placeholder.search')}\n onChange={handleSearch}\n />\n </div>\n <Button size=\"xs\" onClick={handleSearchClose}>\n Esc\n </Button>\n </div>\n <div className=\"px-5 py-6\">\n {loading ? (\n <div\n className={classNames(\n 'flex items-center justify-center',\n )}\n >\n <Spinner size={40} />\n </div>\n ) : (\n <>\n <ScrollBar className=\"max-h-[350px] overflow-y-auto\">\n {searchResult.map((result) => (\n <div\n key={result.title}\n className=\"mb-4\"\n >\n <h6 className=\"mb-3\">\n {result.title}\n </h6>\n {result.data.map((data, index) => (\n <ListItem\n key={data.title + index}\n icon={data.icon}\n breadcrumbs={\n data.breadcrumbs\n }\n label={data.title}\n url={data.path}\n keyWord={\n inputRef.current\n ?.value || ''\n }\n onNavigate={handleNavigate}\n />\n ))}\n </div>\n ))}\n {searchResult.length === 0 && noResult && (\n <div className=\"my-10 text-center text-lg\">\n <span className=\"pr-1\">\n {t(\n 'common.status.noResultsFor',\n )}\n </span>\n <span className=\"heading-text\">\n {`'`}\n {inputRef.current?.value}\n {`'`}\n </span>\n </div>\n )}\n </ScrollBar>\n </>\n )}\n </div>\n </div>\n </Dialog>\n </>\n )\n}\n\nconst Search = withHeaderItem(_Search)\n\nexport default Search\n"],"names":["breadcrumbs","item"],"mappings":"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"}
1
+ {"version":3,"file":"Search.js","sources":["../../../../lib/@ecme/components/template/Search.tsx"],"sourcesContent":["import { NavigationTree } from '@/@types/navigation'\nimport Button from '@/components/ui/Button'\nimport Dialog from '@/components/ui/Dialog'\nimport ScrollBar from '@/components/ui/ScrollBar'\nimport navigationConfig from '@/configs/navigation.config'\nimport { NAV_ITEM_TYPE_ITEM } from '@/constants/navigation.constant'\nimport { useSessionUser } from '@/store/authStore'\nimport classNames from '@/utils/classNames'\nimport withHeaderItem from '@/utils/hoc/withHeaderItem'\nimport debounce from 'lodash/debounce'\nimport { useEffect, useMemo, useRef, useState } from 'react'\nimport Highlighter from 'react-highlight-words'\nimport { useTranslation } from 'react-i18next'\nimport { HiChevronRight, HiOutlineSearch } from 'react-icons/hi'\nimport { PiMagnifyingGlassDuotone } from 'react-icons/pi'\nimport { Link } from 'react-router-dom'\nimport { Spinner } from '../ui'\n\ntype SearchData = {\n key: string\n path: string\n title: string\n icon: string\n category: string\n categoryTitle: string\n breadcrumbs: string[]\n}\n\ntype SearchResult = {\n title: string\n data: SearchData[]\n}\n\nconst filterNavigationByAuthority = (\n navTree: NavigationTree[],\n userAuthority: string[],\n): NavigationTree[] => {\n return navTree.reduce((acc: NavigationTree[], nav) => {\n if (nav.excludeWhenHasPaths && nav.excludeWhenHasPaths.length > 0) {\n const shouldExclude = nav.excludeWhenHasPaths.some((path) =>\n userAuthority.includes(path),\n )\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\n if (filteredSubMenu.length > 0) {\n acc.push({ ...nav, subMenu: filteredSubMenu })\n }\n } else if ((nav.path && userAuthority.includes(nav.path)) || !nav.path) {\n acc.push(nav)\n }\n\n return acc\n }, [])\n}\n\nconst ListItem = (props: {\n icon: string\n label: string\n url: string\n isLast?: boolean\n keyWord: string\n breadcrumbs: string[]\n onNavigate: () => void\n}) => {\n const { icon, label, url = '', keyWord, onNavigate, breadcrumbs } = props\n\n const makeBreadcrumbs = (breadcrumbs: string[]) => {\n return breadcrumbs.join(' / ')\n }\n\n return (\n <Link to={url} onClick={onNavigate}>\n <div\n className={classNames(\n 'flex items-center justify-between rounded-xl p-3 cursor-pointer user-select',\n 'hover:bg-gray-100 dark:hover:bg-gray-700',\n )}\n >\n <div className=\"flex items-center gap-2\">\n {/* <div\n className={classNames(\n 'rounded-lg border-2 border-gray-200 shadow-sm text-xl group-hover:shadow h-10 w-10 flex items-center justify-center bg-white dark:bg-gray-700 text-gray-900 dark:text-gray-100',\n )}\n >\n {icon && navigationIcon[icon]}\n </div> */}\n <div className=\"text-gray-900 dark:text-gray-300\">\n <Highlighter\n autoEscape\n highlightClassName={classNames(\n 'text-primary',\n 'underline bg-transparent font-semibold dark:text-white',\n )}\n searchWords={[keyWord]}\n textToHighlight={makeBreadcrumbs(breadcrumbs)}\n />\n </div>\n </div>\n <HiChevronRight className=\"text-lg\" />\n </div>\n </Link>\n )\n}\n\ntype NavigationTreeFlat = NavigationTree & { parents: string[] }\n\nconst _Search = ({ className }: { className?: string }) => {\n const [loading, setLoading] = useState(false)\n const [searchDialogOpen, setSearchDialogOpen] = useState(false)\n const [searchResult, setSearchResult] = useState<SearchResult[]>([])\n const [noResult, setNoResult] = useState(false)\n const userAuthority = useSessionUser((state) => state.user.authority)\n\n const inputRef = useRef<HTMLInputElement>(null)\n\n const handleReset = () => {\n setNoResult(false)\n setSearchResult([])\n }\n\n const handleSearchOpen = () => {\n setSearchDialogOpen(true)\n }\n\n const handleSearchClose = () => {\n setSearchDialogOpen(false)\n handleReset()\n }\n\n const debounceFn = debounce(handleDebounceFn, 750)\n\n const { t } = useTranslation()\n\n const flatNavTree = useMemo(() => {\n const arr: NavigationTreeFlat[] = []\n const filteredNavigationTree = filterNavigationByAuthority(\n navigationConfig,\n userAuthority || [],\n )\n\n const makeflat = (item: NavigationTree, parents: string[]) => {\n if (Array.isArray(item.subMenu) && item.subMenu.length > 0) {\n item.subMenu.forEach((item) =>\n makeflat(item, [...parents, t(item.translateKey)]),\n )\n }\n arr.push({ ...item, parents })\n }\n\n filteredNavigationTree.forEach(function f(item) {\n makeflat(item, [t(item.translateKey)])\n })\n\n return arr\n }, [userAuthority, t])\n\n const filterNavigationTreeFlat = (\n text: string,\n tree: NavigationTreeFlat[],\n ): NavigationTreeFlat[] => {\n const results = tree.filter(\n (item) =>\n item.type === NAV_ITEM_TYPE_ITEM &&\n item.parents.join().toUpperCase().includes(text.toUpperCase()),\n )\n\n return results\n }\n\n function navTreeFlatToSearchResult(\n tree: NavigationTreeFlat[],\n ): SearchResult[] {\n const navTreeSearchResult: SearchResult = {\n title: t('base.layout.search.results.navTree'),\n data: [],\n }\n tree.forEach((item) => {\n navTreeSearchResult.data.push({\n category: item.path,\n categoryTitle: item.title,\n icon: item.icon,\n key: item.key,\n path: item.path,\n title: t(item.translateKey, item.title),\n breadcrumbs: item.parents,\n })\n })\n return [navTreeSearchResult]\n }\n\n async function handleDebounceFn(query: string) {\n if (!query) {\n setLoading(false)\n setSearchResult([])\n return\n }\n\n if (noResult) {\n setNoResult(false)\n }\n\n const res = await filterNavigationTreeFlat(query, flatNavTree)\n\n if (res) {\n if (res.length === 0) {\n setNoResult(true)\n setSearchResult([])\n } else {\n setSearchResult(navTreeFlatToSearchResult(res))\n }\n }\n\n setLoading(false)\n }\n\n const handleSearch = (e: React.ChangeEvent<HTMLInputElement>) => {\n setLoading(true)\n debounceFn(e.target.value)\n }\n\n useEffect(() => {\n if (searchDialogOpen) {\n const timeout = setTimeout(() => inputRef.current?.focus(), 100)\n return () => {\n clearTimeout(timeout)\n }\n }\n }, [searchDialogOpen])\n\n const handleNavigate = () => {\n handleSearchClose()\n }\n\n return (\n <>\n <div\n className={classNames(className, 'text-2xl')}\n onClick={handleSearchOpen}\n >\n <PiMagnifyingGlassDuotone />\n </div>\n <Dialog\n contentClassName=\"p-0\"\n isOpen={searchDialogOpen}\n closable={false}\n onRequestClose={handleSearchClose}\n >\n <div>\n <div className=\"flex items-center justify-between border-b border-gray-200 px-4 dark:border-gray-600\">\n <div className=\"flex items-center\">\n <HiOutlineSearch className=\"text-xl\" />\n <input\n ref={inputRef}\n className=\"block w-full bg-transparent p-4 text-base text-gray-900 outline-none ring-0 dark:text-gray-100\"\n placeholder={t('common.input.placeholder.search')}\n onChange={handleSearch}\n />\n </div>\n <Button size=\"xs\" onClick={handleSearchClose}>\n Esc\n </Button>\n </div>\n <div className=\"px-5 py-6\">\n {loading ? (\n <div\n className={classNames(\n 'flex items-center justify-center',\n )}\n >\n <Spinner size={40} />\n </div>\n ) : (\n <>\n <ScrollBar className=\"max-h-[350px] overflow-y-auto\">\n {searchResult.map((result) => (\n <div\n key={result.title}\n className=\"mb-4\"\n >\n <h6 className=\"mb-3\">\n {result.title}\n </h6>\n {result.data.map((data, index) => (\n <ListItem\n key={data.title + index}\n icon={data.icon}\n breadcrumbs={\n data.breadcrumbs\n }\n label={data.title}\n url={data.path}\n keyWord={\n inputRef.current\n ?.value || ''\n }\n onNavigate={handleNavigate}\n />\n ))}\n </div>\n ))}\n {searchResult.length === 0 && noResult && (\n <div className=\"my-10 text-center text-lg\">\n <span className=\"pr-1\">\n {t(\n 'common.status.noResultsFor',\n )}\n </span>\n <span className=\"heading-text\">\n {`'`}\n {inputRef.current?.value}\n {`'`}\n </span>\n </div>\n )}\n </ScrollBar>\n </>\n )}\n </div>\n </div>\n </Dialog>\n </>\n )\n}\n\nconst Search = withHeaderItem(_Search)\n\nexport default Search\n"],"names":["breadcrumbs","item"],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ import { jsx, Fragment } from "react/jsx-runtime";
2
+ import { useEffect } from "react";
3
+ import { BrowserRouter } from "react-router-dom";
4
+ import navigationConfig from "../../configs/navigation.config/index.js";
5
+ import { useSessionUser } from "../../store/authStore.js";
6
+ import Search from "./Search.js";
7
+ const collectAuthorityPaths = (navTree) => {
8
+ return navTree.reduce((acc, node) => {
9
+ if (node.path) {
10
+ acc.push(node.path);
11
+ }
12
+ if (node.subMenu?.length) {
13
+ acc.push(...collectAuthorityPaths(node.subMenu));
14
+ }
15
+ return acc;
16
+ }, []);
17
+ };
18
+ const allAuthority = Array.from(new Set(collectAuthorityPaths(navigationConfig)));
19
+ const WithSimulatedAuthorities = ({
20
+ children
21
+ }) => {
22
+ useEffect(() => {
23
+ const previousUser = useSessionUser.getState().user;
24
+ useSessionUser.setState({
25
+ user: {
26
+ ...previousUser,
27
+ authority: allAuthority
28
+ }
29
+ });
30
+ return () => {
31
+ useSessionUser.setState({ user: previousUser });
32
+ };
33
+ }, []);
34
+ return /* @__PURE__ */ jsx(Fragment, { children });
35
+ };
36
+ const meta = {
37
+ title: "@ecme/Template/Search",
38
+ component: Search,
39
+ parameters: {
40
+ layout: "padded"
41
+ },
42
+ tags: ["autodocs"],
43
+ decorators: [
44
+ (Story) => /* @__PURE__ */ jsx(BrowserRouter, { children: /* @__PURE__ */ jsx(WithSimulatedAuthorities, { children: /* @__PURE__ */ jsx(Story, {}) }) })
45
+ ],
46
+ argTypes: {
47
+ className: {
48
+ control: "text"
49
+ }
50
+ }
51
+ };
52
+ const Default = {
53
+ args: {
54
+ className: ""
55
+ }
56
+ };
57
+ export {
58
+ Default,
59
+ meta as default
60
+ };
61
+ //# sourceMappingURL=Search.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Search.stories.js","sources":["../../../../lib/@ecme/components/template/Search.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from '@storybook/react'\nimport { useEffect } from 'react'\nimport { BrowserRouter } from 'react-router-dom'\nimport navigationConfig from '@/configs/navigation.config'\nimport type { NavigationTree } from '@/@types/navigation'\nimport { useSessionUser } from '@/store/authStore'\nimport Search from './Search'\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(new Set(collectAuthorityPaths(navigationConfig)))\n\nconst WithSimulatedAuthorities = ({\n children,\n}: {\n children: React.ReactNode\n}) => {\n useEffect(() => {\n const previousUser = useSessionUser.getState().user\n\n useSessionUser.setState({\n user: {\n ...previousUser,\n authority: allAuthority,\n },\n })\n\n return () => {\n useSessionUser.setState({ user: previousUser })\n }\n }, [])\n\n return <>{children}</>\n}\n\nconst meta = {\n title: '@ecme/Template/Search',\n component: Search,\n parameters: {\n layout: 'padded',\n },\n tags: ['autodocs'],\n decorators: [\n (Story) => (\n <BrowserRouter>\n <WithSimulatedAuthorities>\n <Story />\n </WithSimulatedAuthorities>\n </BrowserRouter>\n ),\n ],\n argTypes: {\n className: {\n control: 'text',\n },\n },\n} satisfies Meta<typeof Search>\n\nexport default meta\n\ntype TStory = StoryObj<typeof meta>\n\nexport const Default: TStory = {\n args: {\n className: '',\n },\n}\n"],"names":[],"mappings":";;;;;;AAQA,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,KAAK,IAAI,IAAI,sBAAsB,gBAAgB,CAAC,CAAC;AAEhF,MAAM,2BAA2B,CAAC;AAAA,EAC9B;AACJ,MAEM;AACF,YAAU,MAAM;AACZ,UAAM,eAAe,eAAe,SAAA,EAAW;AAE/C,mBAAe,SAAS;AAAA,MACpB,MAAM;AAAA,QACF,GAAG;AAAA,QACH,WAAW;AAAA,MAAA;AAAA,IACf,CACH;AAED,WAAO,MAAM;AACT,qBAAe,SAAS,EAAE,MAAM,aAAA,CAAc;AAAA,IAClD;AAAA,EACJ,GAAG,CAAA,CAAE;AAEL,yCAAU,UAAS;AACvB;AAEA,MAAM,OAAO;AAAA,EACT,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,8BAAC,0BAAA,EACG,UAAA,oBAAC,OAAA,CAAA,CAAM,EAAA,CACX,EAAA,CACJ;AAAA,EAAA;AAAA,EAGR,UAAU;AAAA,IACN,WAAW;AAAA,MACP,SAAS;AAAA,IAAA;AAAA,EACb;AAER;AAMO,MAAM,UAAkB;AAAA,EAC3B,MAAM;AAAA,IACF,WAAW;AAAA,EAAA;AAEnB;"}
@@ -164,6 +164,7 @@ import { countryList } from "./constants/countries.constant.js";
164
164
  import { dashboardsPlaceholder } from "./views/dashboards/index.js";
165
165
  import { dateLocales } from "./locales/locales.js";
166
166
  import { docsStyles } from "./assets/styles/docs/index.js";
167
+ import { ensureAppLocaleResourcesLoaded, initAllAppLocaleResources } from "./locales/initAll.js";
167
168
  import { default as default108 } from "./utils/fileSizeUnit.js";
168
169
  import { default as default109 } from "./configs/firebase.config.js";
169
170
  import { guidePlaceholder } from "./views/guide/index.js";
@@ -437,10 +438,12 @@ export {
437
438
  dashboardsPlaceholder,
438
439
  dateLocales,
439
440
  docsStyles,
441
+ ensureAppLocaleResourcesLoaded,
440
442
  default108 as fileSizeUnit,
441
443
  default109 as firebaseConfig,
442
444
  guidePlaceholder,
443
445
  default110 as hooks,
446
+ initAllAppLocaleResources,
444
447
  default111 as isLastChild,
445
448
  default112 as navigationIconConfig,
446
449
  othersPlaceholder,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,8 +1,11 @@
1
1
  import { dateLocales } from "./locales.js";
2
+ import { ensureAppLocaleResourcesLoaded, initAllAppLocaleResources } from "./initAll.js";
2
3
  import i18n from "i18next";
3
4
  import { default as default2 } from "i18next";
4
5
  export {
5
6
  dateLocales,
6
- default2 as default
7
+ default2 as default,
8
+ ensureAppLocaleResourcesLoaded,
9
+ initAllAppLocaleResources
7
10
  };
8
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
@@ -0,0 +1,26 @@
1
+ import "./locales.js";
2
+ import { addBaseLocaleResources } from "../../base/locales/index.js";
3
+ import { addPageLocaleResources } from "../views/auth/lang/index.js";
4
+ import i18n from "i18next";
5
+ function initAllAppLocaleResources() {
6
+ addBaseLocaleResources();
7
+ addPageLocaleResources();
8
+ }
9
+ async function ensureAppLocaleResourcesLoaded() {
10
+ initAllAppLocaleResources();
11
+ if (i18n.isInitialized) {
12
+ return;
13
+ }
14
+ await new Promise((resolve) => {
15
+ const handleInitialized = () => {
16
+ i18n.off("initialized", handleInitialized);
17
+ resolve();
18
+ };
19
+ i18n.on("initialized", handleInitialized);
20
+ });
21
+ }
22
+ export {
23
+ ensureAppLocaleResourcesLoaded,
24
+ initAllAppLocaleResources
25
+ };
26
+ //# sourceMappingURL=initAll.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initAll.js","sources":["../../../lib/@ecme/locales/initAll.ts"],"sourcesContent":["import i18n from './locales'\nimport { addBaseLocaleResources } from '@base/locales'\nimport { addPageLocaleResources } from '@/views/auth/lang'\n\nexport function initAllAppLocaleResources() {\n addBaseLocaleResources()\n addPageLocaleResources()\n}\n\nexport async function ensureAppLocaleResourcesLoaded() {\n initAllAppLocaleResources()\n\n if (i18n.isInitialized) {\n return\n }\n\n await new Promise<void>((resolve) => {\n const handleInitialized = () => {\n i18n.off('initialized', handleInitialized)\n resolve()\n }\n\n i18n.on('initialized', handleInitialized)\n })\n}"],"names":[],"mappings":";;;;AAIO,SAAS,4BAA4B;AACxC,yBAAA;AACA,yBAAA;AACJ;AAEA,eAAsB,iCAAiC;AACnD,4BAAA;AAEA,MAAI,KAAK,eAAe;AACpB;AAAA,EACJ;AAEA,QAAM,IAAI,QAAc,CAAC,YAAY;AACjC,UAAM,oBAAoB,MAAM;AAC5B,WAAK,IAAI,eAAe,iBAAiB;AACzC,cAAA;AAAA,IACJ;AAEA,SAAK,GAAG,eAAe,iBAAiB;AAAA,EAC5C,CAAC;AACL;"}
@@ -87,6 +87,49 @@ const common = {
87
87
  of: "of",
88
88
  all: "All"
89
89
  },
90
+ layout: {
91
+ search: {
92
+ results: {
93
+ navTree: "Navigation"
94
+ }
95
+ },
96
+ profile: {
97
+ dropdown: {
98
+ options: {
99
+ profile: "Profile",
100
+ settings: "Settings",
101
+ activity: "Activity",
102
+ signOut: "Sign Out"
103
+ }
104
+ }
105
+ },
106
+ themeConfig: {
107
+ title: "Theme Configuration",
108
+ options: {
109
+ darkMode: "Dark mode",
110
+ darkModeDesc: "Toggle between light and dark theme",
111
+ direction: "Direction",
112
+ directionDesc: "User interface direction",
113
+ theme: "Theme",
114
+ layout: "Layout",
115
+ layoutCollapsible: "Collapsible",
116
+ layoutStacked: "Stacked",
117
+ layoutTopbar: "Topbar",
118
+ layoutFrameless: "Frameless",
119
+ layoutOverlay: "Overlay",
120
+ layoutBlank: "Blank"
121
+ },
122
+ buttons: {
123
+ copyConfig: "Copy config"
124
+ }
125
+ },
126
+ notifications: {
127
+ title: "Notifications",
128
+ actions: {
129
+ readAll: "Mark all as read"
130
+ }
131
+ }
132
+ },
90
133
  ...EnModulesCommon
91
134
  }
92
135
  };
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sources":["../../../../../lib/@ecme/locales/lang/en/common.ts"],"sourcesContent":["import EnModulesCommon from '@base/locales/lang/en/modules/modules.common'\n\nexport default {\n common: {\n actions: {\n save: 'Save',\n cancel: 'Cancel',\n new: 'New',\n delete: 'Delete',\n edit: 'Edit',\n filter: 'Filter',\n search: 'Search',\n back: 'Back',\n continue: 'Continue',\n reset: 'Reset',\n clear: 'Clear',\n close: 'Close',\n confirm: 'Confirm',\n signIn: 'Sign In',\n signOut: 'Sign Out',\n signUp: 'Sign Up',\n recover: 'Recover',\n send: 'Send',\n done: 'Done',\n add: 'Add',\n remove: 'Remove',\n yes: 'Yes',\n no: 'No',\n accept: 'Accept',\n reject: 'Reject',\n approve: 'Approve',\n rejectAll: 'Reject All',\n approveAll: 'Approve All',\n rejectSelected: 'Reject Selected',\n approveSelected: 'Approve Selected',\n rejectAllSelected: 'Reject All Selected',\n approveAllSelected: 'Approve All Selected',\n selectAll: 'Select All',\n deselectAll: 'Deselect All',\n select: 'Select',\n deselect: 'Deselect',\n download: 'Download',\n upload: 'Upload',\n finish: 'Finish'\n },\n validation: {\n required: 'This field is required',\n invalidEmail: 'Invalid email',\n invalidPassword: 'Invalid password',\n invalidDate: 'Invalid date',\n invalidTime: 'Invalid time',\n invalidDateTime: 'Invalid date time',\n invalidPhone: 'Invalid phone',\n invalidCPF: 'Invalid CPF',\n invalidCNPJ: 'Invalid CNPJ',\n invalidFormat: 'Invalid format',\n invalidLength: 'Invalid length',\n invalidURL: 'Invalid URL',\n invalidNumber: 'Invalid number',\n atLeastOne: 'Select at least one',\n minLength: 'Minimum length is {{min}}',\n maxLength: 'Maximum length is {{max}}',\n },\n status: {\n submitting: 'Submitting...',\n loading: 'Loading...',\n noResultsFor: 'No results for',\n },\n input: {\n placeholder: {\n search: 'Search...',\n searchBy: 'Search by...',\n select: 'Select...',\n },\n },\n button: {\n actions: 'Actions',\n },\n table: {\n noData: 'No data',\n noResults: 'No results',\n noResultsFound: 'No results found',\n noDataFound: 'No data found',\n loading: 'Loading...',\n rowsPerPage: 'Rows per page',\n page: 'page',\n pageAbbr: 'pg.',\n of: 'of',\n all: 'All',\n },\n ...EnModulesCommon,\n },\n}\n"],"names":[],"mappings":";AAEA,MAAA,SAAe;AAAA,EACX,QAAQ;AAAA,IACJ,SAAS;AAAA,MACL,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAM;AAAA,MACN,MAAM;AAAA,MACN,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,KAAK;AAAA,MACL,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,iBAAiB;AAAA,MACjB,mBAAmB;AAAA,MACnB,oBAAoB;AAAA,MACpB,WAAW;AAAA,MACX,aAAa;AAAA,MACb,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,QAAQ;AAAA,IAAA;AAAA,IAEZ,YAAY;AAAA,MACR,UAAU;AAAA,MACV,cAAc;AAAA,MACd,iBAAiB;AAAA,MACjB,aAAa;AAAA,MACb,aAAa;AAAA,MACb,iBAAiB;AAAA,MACjB,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,eAAe;AAAA,MACf,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,WAAW;AAAA,IAAA;AAAA,IAEf,QAAQ;AAAA,MACJ,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,cAAc;AAAA,IAAA;AAAA,IAElB,OAAO;AAAA,MACH,aAAa;AAAA,QACT,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,QAAQ;AAAA,MAAA;AAAA,IACZ;AAAA,IAEJ,QAAQ;AAAA,MACJ,SAAS;AAAA,IAAA;AAAA,IAEb,OAAO;AAAA,MACH,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,SAAS;AAAA,MACT,aAAa;AAAA,MACb,MAAM;AAAA,MACN,UAAU;AAAA,MACV,IAAI;AAAA,MACJ,KAAK;AAAA,IAAA;AAAA,IAET,GAAG;AAAA,EAAA;AAEX;"}
1
+ {"version":3,"file":"common.js","sources":["../../../../../lib/@ecme/locales/lang/en/common.ts"],"sourcesContent":["import EnModulesCommon from '@base/locales/lang/en/modules/modules.common'\n\nexport default {\n common: {\n actions: {\n save: 'Save',\n cancel: 'Cancel',\n new: 'New',\n delete: 'Delete',\n edit: 'Edit',\n filter: 'Filter',\n search: 'Search',\n back: 'Back',\n continue: 'Continue',\n reset: 'Reset',\n clear: 'Clear',\n close: 'Close',\n confirm: 'Confirm',\n signIn: 'Sign In',\n signOut: 'Sign Out',\n signUp: 'Sign Up',\n recover: 'Recover',\n send: 'Send',\n done: 'Done',\n add: 'Add',\n remove: 'Remove',\n yes: 'Yes',\n no: 'No',\n accept: 'Accept',\n reject: 'Reject',\n approve: 'Approve',\n rejectAll: 'Reject All',\n approveAll: 'Approve All',\n rejectSelected: 'Reject Selected',\n approveSelected: 'Approve Selected',\n rejectAllSelected: 'Reject All Selected',\n approveAllSelected: 'Approve All Selected',\n selectAll: 'Select All',\n deselectAll: 'Deselect All',\n select: 'Select',\n deselect: 'Deselect',\n download: 'Download',\n upload: 'Upload',\n finish: 'Finish'\n },\n validation: {\n required: 'This field is required',\n invalidEmail: 'Invalid email',\n invalidPassword: 'Invalid password',\n invalidDate: 'Invalid date',\n invalidTime: 'Invalid time',\n invalidDateTime: 'Invalid date time',\n invalidPhone: 'Invalid phone',\n invalidCPF: 'Invalid CPF',\n invalidCNPJ: 'Invalid CNPJ',\n invalidFormat: 'Invalid format',\n invalidLength: 'Invalid length',\n invalidURL: 'Invalid URL',\n invalidNumber: 'Invalid number',\n atLeastOne: 'Select at least one',\n minLength: 'Minimum length is {{min}}',\n maxLength: 'Maximum length is {{max}}',\n },\n status: {\n submitting: 'Submitting...',\n loading: 'Loading...',\n noResultsFor: 'No results for',\n },\n input: {\n placeholder: {\n search: 'Search...',\n searchBy: 'Search by...',\n select: 'Select...',\n },\n },\n button: {\n actions: 'Actions',\n },\n table: {\n noData: 'No data',\n noResults: 'No results',\n noResultsFound: 'No results found',\n noDataFound: 'No data found',\n loading: 'Loading...',\n rowsPerPage: 'Rows per page',\n page: 'page',\n pageAbbr: 'pg.',\n of: 'of',\n all: 'All',\n },\n layout: {\n search: {\n results: {\n navTree: 'Navigation',\n },\n },\n profile: {\n dropdown: {\n options: {\n profile: 'Profile',\n settings: 'Settings',\n activity: 'Activity',\n signOut: 'Sign Out',\n },\n },\n },\n themeConfig: {\n title: 'Theme Configuration',\n options: {\n darkMode: 'Dark mode',\n darkModeDesc: 'Toggle between light and dark theme',\n direction: 'Direction',\n directionDesc: 'User interface direction',\n theme: 'Theme',\n layout: 'Layout',\n layoutCollapsible: 'Collapsible',\n layoutStacked: 'Stacked',\n layoutTopbar: 'Topbar',\n layoutFrameless: 'Frameless',\n layoutOverlay: 'Overlay',\n layoutBlank: 'Blank',\n },\n buttons: {\n copyConfig: 'Copy config',\n },\n },\n notifications: {\n title: 'Notifications',\n actions: {\n readAll: 'Mark all as read',\n },\n },\n },\n ...EnModulesCommon,\n },\n}\n"],"names":[],"mappings":";AAEA,MAAA,SAAe;AAAA,EACX,QAAQ;AAAA,IACJ,SAAS;AAAA,MACL,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,UAAU;AAAA,MACV,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,MAAM;AAAA,MACN,MAAM;AAAA,MACN,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,KAAK;AAAA,MACL,IAAI;AAAA,MACJ,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,WAAW;AAAA,MACX,YAAY;AAAA,MACZ,gBAAgB;AAAA,MAChB,iBAAiB;AAAA,MACjB,mBAAmB;AAAA,MACnB,oBAAoB;AAAA,MACpB,WAAW;AAAA,MACX,aAAa;AAAA,MACb,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,QAAQ;AAAA,IAAA;AAAA,IAEZ,YAAY;AAAA,MACR,UAAU;AAAA,MACV,cAAc;AAAA,MACd,iBAAiB;AAAA,MACjB,aAAa;AAAA,MACb,aAAa;AAAA,MACb,iBAAiB;AAAA,MACjB,cAAc;AAAA,MACd,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,eAAe;AAAA,MACf,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,WAAW;AAAA,IAAA;AAAA,IAEf,QAAQ;AAAA,MACJ,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,cAAc;AAAA,IAAA;AAAA,IAElB,OAAO;AAAA,MACH,aAAa;AAAA,QACT,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,QAAQ;AAAA,MAAA;AAAA,IACZ;AAAA,IAEJ,QAAQ;AAAA,MACJ,SAAS;AAAA,IAAA;AAAA,IAEb,OAAO;AAAA,MACH,QAAQ;AAAA,MACR,WAAW;AAAA,MACX,gBAAgB;AAAA,MAChB,aAAa;AAAA,MACb,SAAS;AAAA,MACT,aAAa;AAAA,MACb,MAAM;AAAA,MACN,UAAU;AAAA,MACV,IAAI;AAAA,MACJ,KAAK;AAAA,IAAA;AAAA,IAET,QAAQ;AAAA,MACJ,QAAQ;AAAA,QACJ,SAAS;AAAA,UACL,SAAS;AAAA,QAAA;AAAA,MACb;AAAA,MAEJ,SAAS;AAAA,QACL,UAAU;AAAA,UACN,SAAS;AAAA,YACL,SAAS;AAAA,YACT,UAAU;AAAA,YACV,UAAU;AAAA,YACV,SAAS;AAAA,UAAA;AAAA,QACb;AAAA,MACJ;AAAA,MAEJ,aAAa;AAAA,QACT,OAAO;AAAA,QACP,SAAS;AAAA,UACL,UAAU;AAAA,UACV,cAAc;AAAA,UACd,WAAW;AAAA,UACX,eAAe;AAAA,UACf,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,mBAAmB;AAAA,UACnB,eAAe;AAAA,UACf,cAAc;AAAA,UACd,iBAAiB;AAAA,UACjB,eAAe;AAAA,UACf,aAAa;AAAA,QAAA;AAAA,QAEjB,SAAS;AAAA,UACL,YAAY;AAAA,QAAA;AAAA,MAChB;AAAA,MAEJ,eAAe;AAAA,QACX,OAAO;AAAA,QACP,SAAS;AAAA,UACL,SAAS;AAAA,QAAA;AAAA,MACb;AAAA,IACJ;AAAA,IAEJ,GAAG;AAAA,EAAA;AAEX;"}
@@ -1,10 +1,12 @@
1
1
  import common from "./common.js";
2
2
  import nav from "./nav.js";
3
3
  import pages from "./pages.js";
4
+ import en$1 from "../../../../base/locales/lang/en/index.js";
4
5
  const en = {
5
6
  ...nav,
6
7
  ...common,
7
- ...pages
8
+ ...pages,
9
+ ...en$1
8
10
  };
9
11
  export {
10
12
  en as default
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../lib/@ecme/locales/lang/en/index.ts"],"sourcesContent":["import common from './common'\nimport nav from './nav'\nimport pages from './pages'\n\nexport default {\n ...nav,\n ...common,\n ...pages,\n}\n"],"names":[],"mappings":";;;AAIA,MAAA,KAAe;AAAA,EACX,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACP;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../lib/@ecme/locales/lang/en/index.ts"],"sourcesContent":["import common from './common'\nimport nav from './nav'\nimport pages from './pages'\nimport base from '@base/locales/lang/en'\n\nexport default {\n ...nav,\n ...common,\n ...pages,\n ...base,\n}\n"],"names":["base"],"mappings":";;;;AAKA,MAAA,KAAe;AAAA,EACX,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAGA;AACP;"}