@inf-monkeys-tech/monkeys-design 0.4.51 → 0.4.52
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/LICENSE +21 -21
- package/README.md +335 -335
- package/dist/components/base/index.js +1 -1
- package/dist/components/base/index.js.map +1 -1
- package/dist/components/base/index.mjs +1 -1
- package/dist/components/base/index.mjs.map +1 -1
- package/dist/components/data-explorer/index.js.map +1 -1
- package/dist/components/data-explorer/index.mjs.map +1 -1
- package/dist/components/layout/index.js +1 -1
- package/dist/components/layout/index.js.map +1 -1
- package/dist/components/layout/index.mjs +1 -1
- package/dist/components/layout/index.mjs.map +1 -1
- package/dist/components/login/index.js.map +1 -1
- package/dist/components/login/index.mjs.map +1 -1
- package/dist/components/toast/index.js.map +1 -1
- package/dist/components/toast/index.mjs.map +1 -1
- package/dist/components/toolbar/index.js.map +1 -1
- package/dist/components/toolbar/index.mjs.map +1 -1
- package/dist/components/workbench/index.js +1 -1
- package/dist/components/workbench/index.js.map +1 -1
- package/dist/components/workbench/index.mjs +1 -1
- package/dist/components/workbench/index.mjs.map +1 -1
- package/dist/icons/oauth/index.js.map +1 -1
- package/dist/icons/oauth/index.mjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/palette/index.js.map +1 -1
- package/dist/palette/index.mjs.map +1 -1
- package/dist/registry/index.js.map +1 -1
- package/dist/registry/index.mjs.map +1 -1
- package/dist/styles/global.scss +21 -21
- package/dist/styles/login-page.scss +518 -518
- package/dist/styles/workflow-board.scss +440 -440
- package/dist/styles/workflow-nodes.css +340 -340
- package/dist/theme-system/index.js +1 -1
- package/dist/theme-system/index.js.map +1 -1
- package/dist/theme-system/index.mjs +1 -1
- package/dist/theme-system/index.mjs.map +1 -1
- package/dist/themes/artist/index.js.map +1 -1
- package/dist/themes/artist/index.mjs.map +1 -1
- package/dist/themes/bsd/index.js.map +1 -1
- package/dist/themes/bsd/index.mjs.map +1 -1
- package/dist/themes/concept/index.js.map +1 -1
- package/dist/themes/concept/index.mjs.map +1 -1
- package/dist/themes/default/index.js.map +1 -1
- package/dist/themes/default/index.mjs.map +1 -1
- package/package.json +151 -151
package/README.md
CHANGED
|
@@ -1,335 +1,335 @@
|
|
|
1
|
-
# @inf-monkeys-tech/monkeys-design
|
|
2
|
-
|
|
3
|
-
Monkeys Design 是一个独立的 React 组件库,提供可复用的基础组件、数据展示组件、主题工具和样式资源。
|
|
4
|
-
|
|
5
|
-
## 安装
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
yarn add @inf-monkeys-tech/monkeys-design
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
或:
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
npm install @inf-monkeys-tech/monkeys-design
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
## 使用
|
|
18
|
-
|
|
19
|
-
从主入口导入通用能力:
|
|
20
|
-
|
|
21
|
-
```tsx
|
|
22
|
-
import {
|
|
23
|
-
applyMonkeysTheme,
|
|
24
|
-
resolveMonkeysTheme,
|
|
25
|
-
} from '@inf-monkeys-tech/monkeys-design';
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
从子路径导入组件:
|
|
29
|
-
|
|
30
|
-
```tsx
|
|
31
|
-
import {
|
|
32
|
-
BaseButton,
|
|
33
|
-
BasePanel,
|
|
34
|
-
type BaseAppearance,
|
|
35
|
-
} from '@inf-monkeys-tech/monkeys-design/components/base';
|
|
36
|
-
|
|
37
|
-
const appearance: BaseAppearance = {
|
|
38
|
-
preset: 'admin',
|
|
39
|
-
radius: 'lg',
|
|
40
|
-
border: 'subtle',
|
|
41
|
-
background: 'soft',
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
export function Example() {
|
|
45
|
-
return (
|
|
46
|
-
<BasePanel
|
|
47
|
-
appearance={appearance}
|
|
48
|
-
title="Design System"
|
|
49
|
-
description="Composable UI primitives for Monkeys products."
|
|
50
|
-
footer={<BaseButton appearance={appearance} label="Refresh" />}
|
|
51
|
-
>
|
|
52
|
-
Content stays in the consuming application.
|
|
53
|
-
</BasePanel>
|
|
54
|
-
);
|
|
55
|
-
}
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
## 包入口
|
|
59
|
-
|
|
60
|
-
| 路径 | 内容 |
|
|
61
|
-
|------|------|
|
|
62
|
-
| `@inf-monkeys-tech/monkeys-design` | 主入口,导出注册表、主题工具和公共类型 |
|
|
63
|
-
| `@inf-monkeys-tech/monkeys-design/components/base` | 基础组件 |
|
|
64
|
-
| `@inf-monkeys-tech/monkeys-design/components/data-explorer` | 数据展示与页面组合组件 |
|
|
65
|
-
| `@inf-monkeys-tech/monkeys-design/components/login` | 登录相关 UI 组件 |
|
|
66
|
-
| `@inf-monkeys-tech/monkeys-design/components/layout` | 布局组件 |
|
|
67
|
-
| `@inf-monkeys-tech/monkeys-design/components/toolbar` | 工具栏组件 |
|
|
68
|
-
| `@inf-monkeys-tech/monkeys-design/palette` | palette 工具 |
|
|
69
|
-
| `@inf-monkeys-tech/monkeys-design/theme-system` | 主题解析与应用工具 |
|
|
70
|
-
|
|
71
|
-
## LoginPage
|
|
72
|
-
|
|
73
|
-
`LoginPage` 是通用登录页 UI 组件。组件库只负责页面结构和样式契约,不包含登录请求、OAuth、路由、租户判断、i18n 初始化或租户定制样式。
|
|
74
|
-
|
|
75
|
-
```tsx
|
|
76
|
-
import {
|
|
77
|
-
LoginPage,
|
|
78
|
-
type LoginPageMethodConfig,
|
|
79
|
-
} from '@inf-monkeys-tech/monkeys-design/components/login';
|
|
80
|
-
import '@inf-monkeys-tech/monkeys-design/styles/login-page.scss';
|
|
81
|
-
|
|
82
|
-
const methods: LoginPageMethodConfig[] = [
|
|
83
|
-
{
|
|
84
|
-
id: 'email',
|
|
85
|
-
label: 'Email',
|
|
86
|
-
fields: [],
|
|
87
|
-
submitLabel: 'Login',
|
|
88
|
-
onSubmit: (event) => event.preventDefault(),
|
|
89
|
-
},
|
|
90
|
-
];
|
|
91
|
-
|
|
92
|
-
export function Example() {
|
|
93
|
-
return (
|
|
94
|
-
<LoginPage
|
|
95
|
-
background={{ imageUrl: '', gradient: '' }}
|
|
96
|
-
logo={{ url: '', position: 'bottom', scale: 1 }}
|
|
97
|
-
primaryColor="#4D8F9D"
|
|
98
|
-
radius="12px"
|
|
99
|
-
toolbar={<div />}
|
|
100
|
-
title="Welcome"
|
|
101
|
-
methods={methods}
|
|
102
|
-
/>
|
|
103
|
-
);
|
|
104
|
-
}
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
默认背景规则:
|
|
108
|
-
|
|
109
|
-
- 配置了 `background.imageUrl` 或 `background.gradient` 时,使用配置背景。
|
|
110
|
-
- 未配置背景时,浅色模式使用白色和主题色渐变。
|
|
111
|
-
- 未配置背景时,`.dark` 深色模式使用黑色和主题色渐变。
|
|
112
|
-
|
|
113
|
-
Logo 规则:
|
|
114
|
-
|
|
115
|
-
- `logo.url` 是兼容旧配置的通用 Logo。
|
|
116
|
-
- `logo.lightUrl` / `logo.darkUrl` 分别用于浅色 / 深色模式;未配置时回退 `logo.url`。
|
|
117
|
-
- 宿主应用负责在登录页未单独配置 Logo 时,把品牌资产的浅色 / 深色 Logo 传入 `logo.lightUrl` / `logo.darkUrl`。
|
|
118
|
-
|
|
119
|
-
宿主应用负责把全局主题传入 `primaryColor` 和 `radius`,组件会把它们作为 `--login-page-theme-primary-color` 和 `--login-page-theme-radius` 默认来源;页面级 `customCss` 仍可通过公开的 `--login-page-*` 变量做租户级覆盖。深浅色切换、语言切换等应用级控件通过 `toolbar` 传入。
|
|
120
|
-
|
|
121
|
-
### LoginPage CSS 契约
|
|
122
|
-
|
|
123
|
-
页面级自定义样式只能依赖 `data-login-page`、`data-login-part` 和公开 CSS 变量。不要依赖租户 id,不要新增登录页代码分支。
|
|
124
|
-
|
|
125
|
-
推荐优先覆盖变量:
|
|
126
|
-
|
|
127
|
-
```css
|
|
128
|
-
[data-login-page] {
|
|
129
|
-
--login-page-panel-bg: rgb(255 255 255 / 0.92);
|
|
130
|
-
--login-page-panel-border: rgb(17 17 17 / 0.08);
|
|
131
|
-
--login-page-panel-shadow: 0 24px 60px rgb(0 0 0 / 0.08);
|
|
132
|
-
--login-page-control-bg: #ffffff;
|
|
133
|
-
--login-page-control-border: rgb(17 17 17 / 0.12);
|
|
134
|
-
--login-page-control-text: #111111;
|
|
135
|
-
--login-page-control-placeholder: #9f9fa9;
|
|
136
|
-
--login-page-form-width: 500px;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
.dark [data-login-page] {
|
|
140
|
-
--login-page-panel-bg: rgb(12 12 12 / 0.9);
|
|
141
|
-
--login-page-control-bg: #111111;
|
|
142
|
-
}
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
公开部件:
|
|
146
|
-
|
|
147
|
-
```css
|
|
148
|
-
[data-login-part='root'] {}
|
|
149
|
-
[data-login-part='background'] {}
|
|
150
|
-
[data-login-part='toolbar'] {}
|
|
151
|
-
[data-login-part='logo'] {}
|
|
152
|
-
[data-login-part='logo-image'] {}
|
|
153
|
-
[data-login-part='panel'] {}
|
|
154
|
-
[data-login-part='back'] {}
|
|
155
|
-
[data-login-part='back-icon'] {}
|
|
156
|
-
[data-login-part='title'] {}
|
|
157
|
-
[data-login-part='tabs'] {}
|
|
158
|
-
[data-login-part='tab'] {}
|
|
159
|
-
[data-login-part='tab-icon'] {}
|
|
160
|
-
[data-login-part='form'] {}
|
|
161
|
-
[data-login-part='field'] {}
|
|
162
|
-
[data-login-part='input'] {}
|
|
163
|
-
[data-login-part='checkbox-label'] {}
|
|
164
|
-
[data-login-part='checkbox'] {}
|
|
165
|
-
[data-login-part='method-footer'] {}
|
|
166
|
-
[data-login-part='method-footer-action'] {}
|
|
167
|
-
[data-login-part='submit-button'] {}
|
|
168
|
-
[data-login-part='callout'] {}
|
|
169
|
-
[data-login-part='callout-title'] {}
|
|
170
|
-
[data-login-part='callout-description'] {}
|
|
171
|
-
[data-login-part='callout-detail'] {}
|
|
172
|
-
[data-login-part='callout-action'] {}
|
|
173
|
-
[data-login-part='external-methods'] {}
|
|
174
|
-
[data-login-part='external-label'] {}
|
|
175
|
-
[data-login-part='external-list'] {}
|
|
176
|
-
[data-login-part='external-button'] {}
|
|
177
|
-
[data-login-part='external-icon'] {}
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
## 基础组件
|
|
181
|
-
|
|
182
|
-
基础组件从 `components/base` 子路径导入:
|
|
183
|
-
|
|
184
|
-
```tsx
|
|
185
|
-
import {
|
|
186
|
-
BaseButton,
|
|
187
|
-
BaseContextMenu,
|
|
188
|
-
BaseContextMenuContent,
|
|
189
|
-
BaseContextMenuItem,
|
|
190
|
-
BaseContextMenuTrigger,
|
|
191
|
-
BasePanel,
|
|
192
|
-
type BaseAppearance,
|
|
193
|
-
} from '@inf-monkeys-tech/monkeys-design/components/base';
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
当前包含:
|
|
197
|
-
|
|
198
|
-
- `BaseButton`
|
|
199
|
-
- `BaseBadge`
|
|
200
|
-
- `BasePanel`
|
|
201
|
-
- `BaseEmptyState`
|
|
202
|
-
- `BaseLoadingState`
|
|
203
|
-
- `BaseField`
|
|
204
|
-
- `BaseInput`
|
|
205
|
-
- `BaseTextarea`
|
|
206
|
-
- `BaseSelect`
|
|
207
|
-
- `BaseLayout`
|
|
208
|
-
- `BaseLayoutPane`
|
|
209
|
-
- `BaseLayoutSplit`
|
|
210
|
-
- `BaseLayoutResizeHandle`
|
|
211
|
-
- `BaseSwitch`
|
|
212
|
-
- `BaseCheckbox`
|
|
213
|
-
- `BaseRadioGroup`
|
|
214
|
-
- `BaseDialog`
|
|
215
|
-
- `BaseDropdownMenu`
|
|
216
|
-
- `BaseTooltip`
|
|
217
|
-
- `BaseTable`
|
|
218
|
-
- `BaseTableFooterBar`
|
|
219
|
-
- `BaseNotice`
|
|
220
|
-
- `BaseDivider`
|
|
221
|
-
- `BaseSectionHeader`
|
|
222
|
-
- `BaseTabs`
|
|
223
|
-
- `BaseSegmentedControl`
|
|
224
|
-
- `BaseProgress`
|
|
225
|
-
- `BaseSkeleton`
|
|
226
|
-
- `BaseAvatar`
|
|
227
|
-
- `BaseToolbar`
|
|
228
|
-
- `BaseBreadcrumb`
|
|
229
|
-
- `BasePagination`
|
|
230
|
-
- `BaseDescriptionList`
|
|
231
|
-
- `BaseAccordion`
|
|
232
|
-
- `BaseContextMenu`
|
|
233
|
-
|
|
234
|
-
`BaseAppearance` 用于控制 preset、density、radius、border、background、slot className 和 inline style 覆盖。
|
|
235
|
-
|
|
236
|
-
`BaseLayout` 提供中立布局 primitives:`BaseLayout` 管 header/sidebar/main/aside/footer 区域,`BaseLayoutPane` 管主题化区域表面,`BaseLayoutSplit` 管固定或可调的左右/上下分割。`gap` 可显式控制区域间距,number 按 px,string 原样作为 CSS 长度;不传时继续使用 `BaseAppearance` 的主题间距。可调分割支持 `defaultSize`、受控 `size`、`minSize`、`maxSize` 和 `onSizeChange`;尺寸是否持久化仍由使用方控制。
|
|
237
|
-
|
|
238
|
-
## Data Explorer
|
|
239
|
-
|
|
240
|
-
`components/data-explorer` 提供面向数据密集页面的组合组件。组件库负责可复用的控制、展示、预览、详情和布局结构;数据请求、权限、路由、弹窗和业务动作由使用方控制。
|
|
241
|
-
|
|
242
|
-
```tsx
|
|
243
|
-
import {
|
|
244
|
-
DataExplorerView,
|
|
245
|
-
type DataExplorerViewDefinition,
|
|
246
|
-
} from '@inf-monkeys-tech/monkeys-design/components/data-explorer';
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
常用组件包括:
|
|
250
|
-
|
|
251
|
-
- `DataExplorerView`
|
|
252
|
-
- `DataExplorerViewCollection`
|
|
253
|
-
- `DataExplorerDisplayCard`
|
|
254
|
-
- `DataExplorerDisplayCollectionView`
|
|
255
|
-
- `DataExplorerDisplayActionMenu`
|
|
256
|
-
- `DataExplorerDetailShell`
|
|
257
|
-
- `DataExplorerImagePreview`
|
|
258
|
-
- `DataExplorerToolbarShell`
|
|
259
|
-
- `DataExplorerActionBar`
|
|
260
|
-
- `DataExplorerTree`
|
|
261
|
-
- `DataExplorerPage`
|
|
262
|
-
|
|
263
|
-
## 主题系统
|
|
264
|
-
|
|
265
|
-
`theme-system` 提供主题配置解析和 DOM 应用入口,用于统一处理品牌信息、palette tokens、基础组件外观和 Data Explorer 外观。
|
|
266
|
-
|
|
267
|
-
```tsx
|
|
268
|
-
import {
|
|
269
|
-
applyMonkeysTheme,
|
|
270
|
-
resolveMonkeysTheme,
|
|
271
|
-
} from '@inf-monkeys-tech/monkeys-design/theme-system';
|
|
272
|
-
|
|
273
|
-
const theme = resolveMonkeysTheme(config);
|
|
274
|
-
|
|
275
|
-
applyMonkeysTheme(theme);
|
|
276
|
-
|
|
277
|
-
<BasePanel appearance={theme.appearances.base.input} />;
|
|
278
|
-
```
|
|
279
|
-
|
|
280
|
-
支持的配置包括 `tokens`、`brand`、`appearances.base` 和 `appearances.dataExplorer`。也兼容 `colors.primaryColor`、`themeMode`、`roundedSize`、`logo`、`favicon` 等常见配置形态。
|
|
281
|
-
|
|
282
|
-
## 样式资源
|
|
283
|
-
|
|
284
|
-
可从包内直接引用样式文件:
|
|
285
|
-
|
|
286
|
-
```ts
|
|
287
|
-
import '@inf-monkeys-tech/monkeys-design/styles/global.scss';
|
|
288
|
-
import '@inf-monkeys-tech/monkeys-design/styles/workflow-nodes.css';
|
|
289
|
-
```
|
|
290
|
-
|
|
291
|
-
## Storybook
|
|
292
|
-
|
|
293
|
-
本仓库内置 Storybook,用于预览和调试组件:
|
|
294
|
-
|
|
295
|
-
```bash
|
|
296
|
-
npm run storybook
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
构建静态 Storybook:
|
|
300
|
-
|
|
301
|
-
```bash
|
|
302
|
-
npm run storybook:build
|
|
303
|
-
```
|
|
304
|
-
|
|
305
|
-
## 开发
|
|
306
|
-
|
|
307
|
-
```bash
|
|
308
|
-
# 安装依赖
|
|
309
|
-
npm install
|
|
310
|
-
|
|
311
|
-
# 开发模式
|
|
312
|
-
npm run dev
|
|
313
|
-
|
|
314
|
-
# 构建生产产物
|
|
315
|
-
npm run build
|
|
316
|
-
|
|
317
|
-
# 类型检查
|
|
318
|
-
npm run typecheck
|
|
319
|
-
|
|
320
|
-
# 代码检查
|
|
321
|
-
npm run lint
|
|
322
|
-
```
|
|
323
|
-
|
|
324
|
-
## 发布
|
|
325
|
-
|
|
326
|
-
> 需要 npmjs 账号拥有 `@inf-monkeys-tech` scope 的发布权限。
|
|
327
|
-
|
|
328
|
-
```bash
|
|
329
|
-
npm login --registry=https://registry.npmjs.org/
|
|
330
|
-
npm version patch
|
|
331
|
-
npm run build
|
|
332
|
-
npm publish --registry=https://registry.npmjs.org/ --access public
|
|
333
|
-
```
|
|
334
|
-
|
|
335
|
-
如果账号启用了浏览器钥匙串或 passkey,npm CLI 会给出一个浏览器验证链接。完成验证后发布会继续。
|
|
1
|
+
# @inf-monkeys-tech/monkeys-design
|
|
2
|
+
|
|
3
|
+
Monkeys Design 是一个独立的 React 组件库,提供可复用的基础组件、数据展示组件、主题工具和样式资源。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
yarn add @inf-monkeys-tech/monkeys-design
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
或:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install @inf-monkeys-tech/monkeys-design
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## 使用
|
|
18
|
+
|
|
19
|
+
从主入口导入通用能力:
|
|
20
|
+
|
|
21
|
+
```tsx
|
|
22
|
+
import {
|
|
23
|
+
applyMonkeysTheme,
|
|
24
|
+
resolveMonkeysTheme,
|
|
25
|
+
} from '@inf-monkeys-tech/monkeys-design';
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
从子路径导入组件:
|
|
29
|
+
|
|
30
|
+
```tsx
|
|
31
|
+
import {
|
|
32
|
+
BaseButton,
|
|
33
|
+
BasePanel,
|
|
34
|
+
type BaseAppearance,
|
|
35
|
+
} from '@inf-monkeys-tech/monkeys-design/components/base';
|
|
36
|
+
|
|
37
|
+
const appearance: BaseAppearance = {
|
|
38
|
+
preset: 'admin',
|
|
39
|
+
radius: 'lg',
|
|
40
|
+
border: 'subtle',
|
|
41
|
+
background: 'soft',
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export function Example() {
|
|
45
|
+
return (
|
|
46
|
+
<BasePanel
|
|
47
|
+
appearance={appearance}
|
|
48
|
+
title="Design System"
|
|
49
|
+
description="Composable UI primitives for Monkeys products."
|
|
50
|
+
footer={<BaseButton appearance={appearance} label="Refresh" />}
|
|
51
|
+
>
|
|
52
|
+
Content stays in the consuming application.
|
|
53
|
+
</BasePanel>
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## 包入口
|
|
59
|
+
|
|
60
|
+
| 路径 | 内容 |
|
|
61
|
+
|------|------|
|
|
62
|
+
| `@inf-monkeys-tech/monkeys-design` | 主入口,导出注册表、主题工具和公共类型 |
|
|
63
|
+
| `@inf-monkeys-tech/monkeys-design/components/base` | 基础组件 |
|
|
64
|
+
| `@inf-monkeys-tech/monkeys-design/components/data-explorer` | 数据展示与页面组合组件 |
|
|
65
|
+
| `@inf-monkeys-tech/monkeys-design/components/login` | 登录相关 UI 组件 |
|
|
66
|
+
| `@inf-monkeys-tech/monkeys-design/components/layout` | 布局组件 |
|
|
67
|
+
| `@inf-monkeys-tech/monkeys-design/components/toolbar` | 工具栏组件 |
|
|
68
|
+
| `@inf-monkeys-tech/monkeys-design/palette` | palette 工具 |
|
|
69
|
+
| `@inf-monkeys-tech/monkeys-design/theme-system` | 主题解析与应用工具 |
|
|
70
|
+
|
|
71
|
+
## LoginPage
|
|
72
|
+
|
|
73
|
+
`LoginPage` 是通用登录页 UI 组件。组件库只负责页面结构和样式契约,不包含登录请求、OAuth、路由、租户判断、i18n 初始化或租户定制样式。
|
|
74
|
+
|
|
75
|
+
```tsx
|
|
76
|
+
import {
|
|
77
|
+
LoginPage,
|
|
78
|
+
type LoginPageMethodConfig,
|
|
79
|
+
} from '@inf-monkeys-tech/monkeys-design/components/login';
|
|
80
|
+
import '@inf-monkeys-tech/monkeys-design/styles/login-page.scss';
|
|
81
|
+
|
|
82
|
+
const methods: LoginPageMethodConfig[] = [
|
|
83
|
+
{
|
|
84
|
+
id: 'email',
|
|
85
|
+
label: 'Email',
|
|
86
|
+
fields: [],
|
|
87
|
+
submitLabel: 'Login',
|
|
88
|
+
onSubmit: (event) => event.preventDefault(),
|
|
89
|
+
},
|
|
90
|
+
];
|
|
91
|
+
|
|
92
|
+
export function Example() {
|
|
93
|
+
return (
|
|
94
|
+
<LoginPage
|
|
95
|
+
background={{ imageUrl: '', gradient: '' }}
|
|
96
|
+
logo={{ url: '', position: 'bottom', scale: 1 }}
|
|
97
|
+
primaryColor="#4D8F9D"
|
|
98
|
+
radius="12px"
|
|
99
|
+
toolbar={<div />}
|
|
100
|
+
title="Welcome"
|
|
101
|
+
methods={methods}
|
|
102
|
+
/>
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
默认背景规则:
|
|
108
|
+
|
|
109
|
+
- 配置了 `background.imageUrl` 或 `background.gradient` 时,使用配置背景。
|
|
110
|
+
- 未配置背景时,浅色模式使用白色和主题色渐变。
|
|
111
|
+
- 未配置背景时,`.dark` 深色模式使用黑色和主题色渐变。
|
|
112
|
+
|
|
113
|
+
Logo 规则:
|
|
114
|
+
|
|
115
|
+
- `logo.url` 是兼容旧配置的通用 Logo。
|
|
116
|
+
- `logo.lightUrl` / `logo.darkUrl` 分别用于浅色 / 深色模式;未配置时回退 `logo.url`。
|
|
117
|
+
- 宿主应用负责在登录页未单独配置 Logo 时,把品牌资产的浅色 / 深色 Logo 传入 `logo.lightUrl` / `logo.darkUrl`。
|
|
118
|
+
|
|
119
|
+
宿主应用负责把全局主题传入 `primaryColor` 和 `radius`,组件会把它们作为 `--login-page-theme-primary-color` 和 `--login-page-theme-radius` 默认来源;页面级 `customCss` 仍可通过公开的 `--login-page-*` 变量做租户级覆盖。深浅色切换、语言切换等应用级控件通过 `toolbar` 传入。
|
|
120
|
+
|
|
121
|
+
### LoginPage CSS 契约
|
|
122
|
+
|
|
123
|
+
页面级自定义样式只能依赖 `data-login-page`、`data-login-part` 和公开 CSS 变量。不要依赖租户 id,不要新增登录页代码分支。
|
|
124
|
+
|
|
125
|
+
推荐优先覆盖变量:
|
|
126
|
+
|
|
127
|
+
```css
|
|
128
|
+
[data-login-page] {
|
|
129
|
+
--login-page-panel-bg: rgb(255 255 255 / 0.92);
|
|
130
|
+
--login-page-panel-border: rgb(17 17 17 / 0.08);
|
|
131
|
+
--login-page-panel-shadow: 0 24px 60px rgb(0 0 0 / 0.08);
|
|
132
|
+
--login-page-control-bg: #ffffff;
|
|
133
|
+
--login-page-control-border: rgb(17 17 17 / 0.12);
|
|
134
|
+
--login-page-control-text: #111111;
|
|
135
|
+
--login-page-control-placeholder: #9f9fa9;
|
|
136
|
+
--login-page-form-width: 500px;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.dark [data-login-page] {
|
|
140
|
+
--login-page-panel-bg: rgb(12 12 12 / 0.9);
|
|
141
|
+
--login-page-control-bg: #111111;
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
公开部件:
|
|
146
|
+
|
|
147
|
+
```css
|
|
148
|
+
[data-login-part='root'] {}
|
|
149
|
+
[data-login-part='background'] {}
|
|
150
|
+
[data-login-part='toolbar'] {}
|
|
151
|
+
[data-login-part='logo'] {}
|
|
152
|
+
[data-login-part='logo-image'] {}
|
|
153
|
+
[data-login-part='panel'] {}
|
|
154
|
+
[data-login-part='back'] {}
|
|
155
|
+
[data-login-part='back-icon'] {}
|
|
156
|
+
[data-login-part='title'] {}
|
|
157
|
+
[data-login-part='tabs'] {}
|
|
158
|
+
[data-login-part='tab'] {}
|
|
159
|
+
[data-login-part='tab-icon'] {}
|
|
160
|
+
[data-login-part='form'] {}
|
|
161
|
+
[data-login-part='field'] {}
|
|
162
|
+
[data-login-part='input'] {}
|
|
163
|
+
[data-login-part='checkbox-label'] {}
|
|
164
|
+
[data-login-part='checkbox'] {}
|
|
165
|
+
[data-login-part='method-footer'] {}
|
|
166
|
+
[data-login-part='method-footer-action'] {}
|
|
167
|
+
[data-login-part='submit-button'] {}
|
|
168
|
+
[data-login-part='callout'] {}
|
|
169
|
+
[data-login-part='callout-title'] {}
|
|
170
|
+
[data-login-part='callout-description'] {}
|
|
171
|
+
[data-login-part='callout-detail'] {}
|
|
172
|
+
[data-login-part='callout-action'] {}
|
|
173
|
+
[data-login-part='external-methods'] {}
|
|
174
|
+
[data-login-part='external-label'] {}
|
|
175
|
+
[data-login-part='external-list'] {}
|
|
176
|
+
[data-login-part='external-button'] {}
|
|
177
|
+
[data-login-part='external-icon'] {}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## 基础组件
|
|
181
|
+
|
|
182
|
+
基础组件从 `components/base` 子路径导入:
|
|
183
|
+
|
|
184
|
+
```tsx
|
|
185
|
+
import {
|
|
186
|
+
BaseButton,
|
|
187
|
+
BaseContextMenu,
|
|
188
|
+
BaseContextMenuContent,
|
|
189
|
+
BaseContextMenuItem,
|
|
190
|
+
BaseContextMenuTrigger,
|
|
191
|
+
BasePanel,
|
|
192
|
+
type BaseAppearance,
|
|
193
|
+
} from '@inf-monkeys-tech/monkeys-design/components/base';
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
当前包含:
|
|
197
|
+
|
|
198
|
+
- `BaseButton`
|
|
199
|
+
- `BaseBadge`
|
|
200
|
+
- `BasePanel`
|
|
201
|
+
- `BaseEmptyState`
|
|
202
|
+
- `BaseLoadingState`
|
|
203
|
+
- `BaseField`
|
|
204
|
+
- `BaseInput`
|
|
205
|
+
- `BaseTextarea`
|
|
206
|
+
- `BaseSelect`
|
|
207
|
+
- `BaseLayout`
|
|
208
|
+
- `BaseLayoutPane`
|
|
209
|
+
- `BaseLayoutSplit`
|
|
210
|
+
- `BaseLayoutResizeHandle`
|
|
211
|
+
- `BaseSwitch`
|
|
212
|
+
- `BaseCheckbox`
|
|
213
|
+
- `BaseRadioGroup`
|
|
214
|
+
- `BaseDialog`
|
|
215
|
+
- `BaseDropdownMenu`
|
|
216
|
+
- `BaseTooltip`
|
|
217
|
+
- `BaseTable`
|
|
218
|
+
- `BaseTableFooterBar`
|
|
219
|
+
- `BaseNotice`
|
|
220
|
+
- `BaseDivider`
|
|
221
|
+
- `BaseSectionHeader`
|
|
222
|
+
- `BaseTabs`
|
|
223
|
+
- `BaseSegmentedControl`
|
|
224
|
+
- `BaseProgress`
|
|
225
|
+
- `BaseSkeleton`
|
|
226
|
+
- `BaseAvatar`
|
|
227
|
+
- `BaseToolbar`
|
|
228
|
+
- `BaseBreadcrumb`
|
|
229
|
+
- `BasePagination`
|
|
230
|
+
- `BaseDescriptionList`
|
|
231
|
+
- `BaseAccordion`
|
|
232
|
+
- `BaseContextMenu`
|
|
233
|
+
|
|
234
|
+
`BaseAppearance` 用于控制 preset、density、radius、border、background、slot className 和 inline style 覆盖。
|
|
235
|
+
|
|
236
|
+
`BaseLayout` 提供中立布局 primitives:`BaseLayout` 管 header/sidebar/main/aside/footer 区域,`BaseLayoutPane` 管主题化区域表面,`BaseLayoutSplit` 管固定或可调的左右/上下分割。`gap` 可显式控制区域间距,number 按 px,string 原样作为 CSS 长度;不传时继续使用 `BaseAppearance` 的主题间距。可调分割支持 `defaultSize`、受控 `size`、`minSize`、`maxSize` 和 `onSizeChange`;尺寸是否持久化仍由使用方控制。
|
|
237
|
+
|
|
238
|
+
## Data Explorer
|
|
239
|
+
|
|
240
|
+
`components/data-explorer` 提供面向数据密集页面的组合组件。组件库负责可复用的控制、展示、预览、详情和布局结构;数据请求、权限、路由、弹窗和业务动作由使用方控制。
|
|
241
|
+
|
|
242
|
+
```tsx
|
|
243
|
+
import {
|
|
244
|
+
DataExplorerView,
|
|
245
|
+
type DataExplorerViewDefinition,
|
|
246
|
+
} from '@inf-monkeys-tech/monkeys-design/components/data-explorer';
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
常用组件包括:
|
|
250
|
+
|
|
251
|
+
- `DataExplorerView`
|
|
252
|
+
- `DataExplorerViewCollection`
|
|
253
|
+
- `DataExplorerDisplayCard`
|
|
254
|
+
- `DataExplorerDisplayCollectionView`
|
|
255
|
+
- `DataExplorerDisplayActionMenu`
|
|
256
|
+
- `DataExplorerDetailShell`
|
|
257
|
+
- `DataExplorerImagePreview`
|
|
258
|
+
- `DataExplorerToolbarShell`
|
|
259
|
+
- `DataExplorerActionBar`
|
|
260
|
+
- `DataExplorerTree`
|
|
261
|
+
- `DataExplorerPage`
|
|
262
|
+
|
|
263
|
+
## 主题系统
|
|
264
|
+
|
|
265
|
+
`theme-system` 提供主题配置解析和 DOM 应用入口,用于统一处理品牌信息、palette tokens、基础组件外观和 Data Explorer 外观。
|
|
266
|
+
|
|
267
|
+
```tsx
|
|
268
|
+
import {
|
|
269
|
+
applyMonkeysTheme,
|
|
270
|
+
resolveMonkeysTheme,
|
|
271
|
+
} from '@inf-monkeys-tech/monkeys-design/theme-system';
|
|
272
|
+
|
|
273
|
+
const theme = resolveMonkeysTheme(config);
|
|
274
|
+
|
|
275
|
+
applyMonkeysTheme(theme);
|
|
276
|
+
|
|
277
|
+
<BasePanel appearance={theme.appearances.base.input} />;
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
支持的配置包括 `tokens`、`brand`、`appearances.base` 和 `appearances.dataExplorer`。也兼容 `colors.primaryColor`、`themeMode`、`roundedSize`、`logo`、`favicon` 等常见配置形态。
|
|
281
|
+
|
|
282
|
+
## 样式资源
|
|
283
|
+
|
|
284
|
+
可从包内直接引用样式文件:
|
|
285
|
+
|
|
286
|
+
```ts
|
|
287
|
+
import '@inf-monkeys-tech/monkeys-design/styles/global.scss';
|
|
288
|
+
import '@inf-monkeys-tech/monkeys-design/styles/workflow-nodes.css';
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
## Storybook
|
|
292
|
+
|
|
293
|
+
本仓库内置 Storybook,用于预览和调试组件:
|
|
294
|
+
|
|
295
|
+
```bash
|
|
296
|
+
npm run storybook
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
构建静态 Storybook:
|
|
300
|
+
|
|
301
|
+
```bash
|
|
302
|
+
npm run storybook:build
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
## 开发
|
|
306
|
+
|
|
307
|
+
```bash
|
|
308
|
+
# 安装依赖
|
|
309
|
+
npm install
|
|
310
|
+
|
|
311
|
+
# 开发模式
|
|
312
|
+
npm run dev
|
|
313
|
+
|
|
314
|
+
# 构建生产产物
|
|
315
|
+
npm run build
|
|
316
|
+
|
|
317
|
+
# 类型检查
|
|
318
|
+
npm run typecheck
|
|
319
|
+
|
|
320
|
+
# 代码检查
|
|
321
|
+
npm run lint
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
## 发布
|
|
325
|
+
|
|
326
|
+
> 需要 npmjs 账号拥有 `@inf-monkeys-tech` scope 的发布权限。
|
|
327
|
+
|
|
328
|
+
```bash
|
|
329
|
+
npm login --registry=https://registry.npmjs.org/
|
|
330
|
+
npm version patch
|
|
331
|
+
npm run build
|
|
332
|
+
npm publish --registry=https://registry.npmjs.org/ --access public
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
如果账号启用了浏览器钥匙串或 passkey,npm CLI 会给出一个浏览器验证链接。完成验证后发布会继续。
|
|
@@ -334,7 +334,7 @@ var baseSlots = {
|
|
|
334
334
|
tableContainerFooterAttached: "!rounded-b-none !shadow-none",
|
|
335
335
|
tableRoot: "w-full caption-bottom border-collapse text-sm text-foreground",
|
|
336
336
|
tableCaption: "mt-3 text-sm text-muted-foreground",
|
|
337
|
-
tableHeader: "border-b border-border/70 bg-muted/35",
|
|
337
|
+
tableHeader: "border-b border-border/70 bg-muted/35 [&_tr]:bg-inherit [&_th]:bg-inherit",
|
|
338
338
|
tableBody: "[&_tr:last-child]:border-0",
|
|
339
339
|
tableFooter: "border-t border-border/70 bg-muted/30 font-medium",
|
|
340
340
|
tableFooterBar: cn(
|