@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.
- package/dist/@ecme/assets/styles/app.css +15 -0
- package/dist/@ecme/assets/styles/tailwind/index.css +15 -0
- package/dist/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.js +31 -6
- package/dist/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.js.map +1 -1
- package/dist/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.stories.js +234 -0
- package/dist/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.stories.js.map +1 -0
- package/dist/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.js +18 -40
- package/dist/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.js.map +1 -1
- package/dist/@ecme/components/ui/Button/Button.stories.js +17 -0
- package/dist/@ecme/components/ui/Button/Button.stories.js.map +1 -0
- package/dist/@types/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.d.ts +3 -3
- package/dist/@types/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.d.ts.map +1 -1
- package/dist/@types/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.d.ts +3 -3
- package/dist/@types/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.d.ts.map +1 -1
- package/dist/@types/@ecme/components/ui/Button/Button.stories.d.ts +9 -0
- package/dist/@types/@ecme/components/ui/Button/Button.stories.d.ts.map +1 -0
- package/dist/base/assets/styles/init.css +15 -0
- package/lib/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.stories.tsx +244 -0
- package/lib/@ecme/components/template/VerticalMenuContent/VerticalMenuContent.tsx +203 -172
- package/lib/@ecme/components/template/VerticalMenuContent/VerticalSingleMenuItem.tsx +135 -157
- package/lib/@ecme/components/ui/Button/Button.stories.tsx +22 -0
- package/package.json +9 -1
|
@@ -1,179 +1,157 @@
|
|
|
1
|
-
import Tooltip from
|
|
2
|
-
import Menu from
|
|
3
|
-
import
|
|
4
|
-
import VerticalMenuIcon from
|
|
5
|
-
import { Link } from
|
|
6
|
-
import
|
|
7
|
-
import type {
|
|
8
|
-
import type {
|
|
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
|
-
|
|
15
|
-
|
|
16
|
-
) => React.ReactNode
|
|
13
|
+
nav: NavigationTree,
|
|
14
|
+
children: React.ReactNode,
|
|
15
|
+
) => React.ReactNode
|
|
17
16
|
|
|
18
17
|
interface CollapsedItemProps extends CommonProps {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
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
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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
|
-
|
|
114
|
-
|
|
115
|
-
|
|
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
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
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
|
-
|
|
144
|
-
|
|
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
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
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
|
-
|
|
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.
|
|
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
|
}
|