@orbe-agro/client-core 5.6.123 → 5.6.124

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 (22) hide show
  1. package/dist/@ecme/assets/styles/app.css +15 -0
  2. package/dist/@ecme/assets/styles/tailwind/index.css +15 -0
  3. package/dist/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.js +31 -6
  4. package/dist/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.js.map +1 -1
  5. package/dist/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.stories.js +234 -0
  6. package/dist/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.stories.js.map +1 -0
  7. package/dist/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.js +18 -40
  8. package/dist/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.js.map +1 -1
  9. package/dist/@ecme/components/ui/Button/Button.stories.js +17 -0
  10. package/dist/@ecme/components/ui/Button/Button.stories.js.map +1 -0
  11. package/dist/@types/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.d.ts +3 -3
  12. package/dist/@types/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.d.ts.map +1 -1
  13. package/dist/@types/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.d.ts +3 -3
  14. package/dist/@types/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.d.ts.map +1 -1
  15. package/dist/@types/@ecme/components/ui/Button/Button.stories.d.ts +9 -0
  16. package/dist/@types/@ecme/components/ui/Button/Button.stories.d.ts.map +1 -0
  17. package/dist/base/assets/styles/init.css +15 -0
  18. package/lib/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.stories.tsx +244 -0
  19. package/lib/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.tsx +203 -172
  20. package/lib/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.tsx +135 -157
  21. package/lib/@ecme/components/ui/Button/Button.stories.tsx +22 -0
  22. package/package.json +9 -1
@@ -1,179 +1,157 @@
1
- import Tooltip from "@/components/ui/Tooltip";
2
- import Menu from "@/components/ui/Menu";
3
- import AuthorityCheck from "@/components/shared/AuthorityCheck";
4
- import VerticalMenuIcon from "./VerticalMenuIcon";
5
- import { Link } from "react-router-dom";
6
- import Dropdown from "@/components/ui/Dropdown";
7
- import type { CommonProps } from "@/@types/common";
8
- import type { Direction } from "@/@types/theme";
9
- import type { NavigationTree } from "@/@types/navigation";
1
+ import Tooltip from '@/components/ui/Tooltip'
2
+ import Menu from '@/components/ui/Menu'
3
+ import ScrollBar from '@/components/ui/ScrollBar'
4
+ import VerticalMenuIcon from './VerticalMenuIcon'
5
+ import { Link } from 'react-router-dom'
6
+ import type { CommonProps } from '@/@types/common'
7
+ import type { Direction } from '@/@types/theme'
8
+ import type { NavigationTree } from '@/@types/navigation'
10
9
 
11
- const { MenuItem } = Menu;
10
+ const { MenuItem } = Menu
12
11
 
13
12
  type LinkRenderer = (
14
- nav: NavigationTree,
15
- children: React.ReactNode
16
- ) => React.ReactNode;
13
+ nav: NavigationTree,
14
+ children: React.ReactNode,
15
+ ) => React.ReactNode
17
16
 
18
17
  interface CollapsedItemProps extends CommonProps {
19
- nav: NavigationTree;
20
- direction?: Direction;
21
- linkRenderer?: LinkRenderer;
22
- onLinkClick?: (link: { key: string; title: string; path: string }) => void;
23
- t: (
24
- key: string,
25
- fallback?: string | Record<string, string | number>
26
- ) => string;
27
- renderAsIcon?: boolean;
28
- userAuthority: string[];
29
- currentKey?: string;
30
- parentKeys?: string[];
18
+ nav: NavigationTree
19
+ direction?: Direction
20
+ linkRenderer?: LinkRenderer
21
+ onLinkClick?: (link: { key: string; title: string; path: string }) => void
22
+ t: (
23
+ key: string,
24
+ fallback?: string | Record<string, string | number>,
25
+ ) => string
26
+ renderAsIcon?: boolean
27
+ userAuthority: string[]
28
+ currentKey?: string
29
+ parentKeys?: string[]
31
30
  }
32
31
 
33
32
  interface DefaultItemProps {
34
- nav: NavigationTree;
35
- onLinkClick?: (link: { key: string; title: string; path: string }) => void;
36
- sideCollapsed?: boolean;
37
- t: (
38
- key: string,
39
- fallback?: string | Record<string, string | number>
40
- ) => string;
41
- indent?: boolean;
42
- userAuthority: string[];
43
- showIcon?: boolean;
44
- showTitle?: boolean;
45
- linkRenderer?: LinkRenderer;
33
+ nav: NavigationTree
34
+ onLinkClick?: (link: { key: string; title: string; path: string }) => void
35
+ sideCollapsed?: boolean
36
+ t: (
37
+ key: string,
38
+ fallback?: string | Record<string, string | number>,
39
+ ) => string
40
+ indent?: boolean
41
+ userAuthority: string[]
42
+ showIcon?: boolean
43
+ showTitle?: boolean
44
+ linkRenderer?: LinkRenderer
46
45
  }
47
46
 
48
47
  interface VerticalMenuItemProps extends CollapsedItemProps, DefaultItemProps {}
49
48
 
50
- const CollapsedItem = ({
51
- nav,
52
- children,
53
- direction,
54
- renderAsIcon,
55
- onLinkClick,
56
- userAuthority,
57
- t,
58
- currentKey,
59
- linkRenderer,
60
- }: CollapsedItemProps) => {
61
- const linkContent = <span>{t(nav.translateKey, nav.title)}</span>;
62
-
63
- const renderLink = () => {
64
- if (linkRenderer) {
65
- return linkRenderer(nav, linkContent);
66
- }
67
-
68
- return (
69
- <Link
70
- id={nav.path}
71
- className="flex h-full w-full items-center outline-none"
72
- to={nav.path}
73
- target={nav.isExternalLink ? "_blank" : ""}
74
- onClick={() =>
75
- onLinkClick?.({
76
- key: nav.key,
77
- title: nav.title,
78
- path: nav.path,
79
- })
80
- }
81
- >
82
- {linkContent}
83
- </Link>
84
- );
85
- };
86
-
87
- return (
88
- <Dropdown.Item active={currentKey === nav.key}>
89
- {nav.path ? renderLink() : <span>{t(nav.translateKey, nav.title)}</span>}
90
- </Dropdown.Item>
91
- );
92
- };
93
-
94
49
  const DefaultItem = (props: DefaultItemProps) => {
95
- const {
96
- nav,
97
- onLinkClick,
98
- showTitle,
99
- indent,
100
- showIcon = true,
101
- userAuthority,
102
- t,
103
- linkRenderer,
104
- } = props;
105
-
106
- const linkContent = (
107
- <>
108
- {showIcon && <VerticalMenuIcon icon={nav.icon} />}
109
- {showTitle && <span>{t(nav.translateKey, nav.title)}</span>}
110
- </>
111
- );
50
+ const {
51
+ nav,
52
+ onLinkClick,
53
+ showTitle,
54
+ indent,
55
+ showIcon = true,
56
+ t,
57
+ linkRenderer,
58
+ } = props
59
+
60
+ const translatedTitle = t(nav.translateKey, nav.title)
61
+
62
+ const renderItemContent = (titleClassName?: string) => (
63
+ <>
64
+ {showIcon && <VerticalMenuIcon icon={nav.icon} />}
65
+ {showTitle && (
66
+ <span className={titleClassName}>{translatedTitle}</span>
67
+ )}
68
+ </>
69
+ )
70
+
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
+ const renderLink = () => {
92
+ if (linkRenderer) {
93
+ return linkRenderer(nav, linkContent)
94
+ }
112
95
 
113
- const renderLink = () => {
114
- if (linkRenderer) {
115
- return linkRenderer(nav, linkContent);
96
+ return (
97
+ <Link
98
+ to={nav.path}
99
+ className="group/item relative flex w-full min-w-0 items-center gap-2"
100
+ target={nav.isExternalLink ? '_blank' : ''}
101
+ onClick={() =>
102
+ onLinkClick?.({
103
+ key: nav.key,
104
+ title: nav.title,
105
+ path: nav.path,
106
+ })
107
+ }
108
+ >
109
+ {linkContent}
110
+ </Link>
111
+ )
116
112
  }
117
113
 
118
114
  return (
119
- <Link
120
- to={nav.path}
121
- className="flex h-full w-full items-center gap-2"
122
- target={nav.isExternalLink ? "_blank" : ""}
123
- onClick={() =>
124
- onLinkClick?.({
125
- key: nav.key,
126
- title: nav.title,
127
- path: nav.path,
128
- })
129
- }
130
- >
131
- {linkContent}
132
- </Link>
133
- );
134
- };
135
-
136
- return (
137
- <MenuItem key={nav.key} eventKey={nav.key} dotIndent={indent}>
138
- {renderLink()}
139
- </MenuItem>
140
- );
141
- };
115
+ <MenuItem key={nav.key} eventKey={nav.key} dotIndent={indent}>
116
+ {renderLink()}
117
+ </MenuItem>
118
+ )
119
+ }
142
120
  const VerticalSingleMenuItem = (props: VerticalMenuItemProps) => {
143
- const { sideCollapsed, nav, t, userAuthority, onLinkClick, linkRenderer } =
144
- props;
121
+ const { sideCollapsed, nav, t, userAuthority, onLinkClick, linkRenderer } =
122
+ props
123
+
124
+ if (sideCollapsed) {
125
+ return (
126
+ <Tooltip
127
+ title={t(nav.translateKey, nav.title)}
128
+ placement={props.direction === 'rtl' ? 'left' : 'right'}
129
+ >
130
+ <DefaultItem
131
+ nav={nav}
132
+ onLinkClick={onLinkClick}
133
+ t={t}
134
+ userAuthority={userAuthority}
135
+ linkRenderer={linkRenderer}
136
+ showIcon={true}
137
+ showTitle={false}
138
+ indent={props.indent}
139
+ />
140
+ </Tooltip>
141
+ )
142
+ }
145
143
 
146
- if (sideCollapsed) {
147
144
  return (
148
- <Tooltip
149
- title={t(nav.translateKey, nav.title)}
150
- placement={props.direction === "rtl" ? "left" : "right"}
151
- >
152
145
  <DefaultItem
153
- nav={nav}
154
- onLinkClick={onLinkClick}
155
- t={t}
156
- userAuthority={userAuthority}
157
- linkRenderer={linkRenderer}
158
- showIcon={true}
159
- showTitle={false}
160
- indent={props.indent}
146
+ nav={nav}
147
+ onLinkClick={onLinkClick}
148
+ t={t}
149
+ userAuthority={userAuthority}
150
+ linkRenderer={linkRenderer}
151
+ showIcon={true}
152
+ showTitle={true}
153
+ indent={props.indent}
161
154
  />
162
- </Tooltip>
163
- );
164
- }
165
-
166
- return (
167
- <DefaultItem
168
- nav={nav}
169
- onLinkClick={onLinkClick}
170
- t={t}
171
- userAuthority={userAuthority}
172
- linkRenderer={linkRenderer}
173
- showIcon={true}
174
- showTitle={true}
175
- indent={props.indent}
176
- />
177
- );
178
- };
179
- export default VerticalSingleMenuItem;
155
+ )
156
+ }
157
+ export default VerticalSingleMenuItem
@@ -0,0 +1,22 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite'
2
+ import Button from '../Button'
3
+
4
+ // Define os metadados utilizados pelo Storybook para expor o componente na lista de componentes
5
+ // e garante que o objeto esteja de acordo com a tipagem esperada pelo Storybook.
6
+ const meta = {
7
+ title: '@ecme/Components/Button',
8
+ component: Button,
9
+ } satisfies Meta<typeof Button>
10
+
11
+ // Exporta para o Storybook identificar o novo story.
12
+ export default meta
13
+
14
+ // Tipo do Story baseado no tipo do meta, garantindo que os argumentos estejam de acordo com as props do componente.
15
+ type TStory = StoryObj<typeof meta>
16
+
17
+ export const Sandbox: TStory = {
18
+ args: {
19
+ children: 'Click Me',
20
+ disabled: false,
21
+ },
22
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orbe-agro/client-core",
3
- "version": "5.6.123",
3
+ "version": "5.6.124",
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",
@@ -123,6 +123,11 @@
123
123
  },
124
124
  "devDependencies": {
125
125
  "@arethetypeswrong/cli": "^0.18.1",
126
+ "@storybook/addon-links": "^10.4.4",
127
+ "@storybook/addon-onboarding": "^10.4.4",
128
+ "@storybook/addon-styling-webpack": "^3.0.2",
129
+ "@storybook/react": "^10.4.4",
130
+ "@storybook/react-vite": "^10.4.4",
126
131
  "@tailwindcss/typography": "^0.5.15",
127
132
  "@types/d3-fetch": "^3.0.7",
128
133
  "@types/d3-scale": "^4.0.8",
@@ -146,6 +151,7 @@
146
151
  "postcss": "^8.4.45",
147
152
  "postcss-nesting": "^13.0.0",
148
153
  "prettier": "^3.3.3",
154
+ "storybook": "^10.4.4",
149
155
  "tailwindcss": "^3.4.10",
150
156
  "tw-colors": "^3.3.2",
151
157
  "typescript": "^5.7.2",
@@ -181,6 +187,8 @@
181
187
  "dev": "vite",
182
188
  "build:dev": "tsc -b ./tsconfig.lib.json && vite build --mode development",
183
189
  "build:lib": "tsc -b ./tsconfig.lib.json && vite build --mode production",
190
+ "storybook": "storybook dev -p 6006",
191
+ "storybook:build": "storybook build",
184
192
  "lint": "oxlint .",
185
193
  "bump": "pnpm version patch --git-tag-version false"
186
194
  }