weifuwu 0.90.0 → 0.91.0
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/README.md +4 -2
- package/dist/client/components/WordCloud/WordCloud.d.ts +79 -0
- package/dist/client/components/index.d.ts +2 -0
- package/dist/client/components/index.js +33 -33
- package/dist/client/components/style.css +95 -1
- package/dist/client/layout/weifuwu-layout.css +19 -0
- package/dist/client/vdom/core/v2/diff.d.ts +2 -2
- package/dist/client/vdom/hooks/env.d.ts +20 -0
- package/dist/client/vdom/index.js +3 -3
- package/dist/client/vdom/testing.js +2 -2
- package/dist/server/ai/approvals.d.ts +24 -0
- package/dist/server/ai/assemble.d.ts +19 -0
- package/dist/server/ai/client.d.ts +22 -0
- package/dist/server/ai/contracts.d.ts +67 -2
- package/dist/server/ai/index.d.ts +14 -43
- package/dist/server/ai/memory-server.d.ts +50 -0
- package/dist/server/ai/memory.d.ts +46 -0
- package/dist/server/ai/multimodal.d.ts +52 -0
- package/dist/server/ai/openai.d.ts +16 -0
- package/dist/server/db/body.d.ts +31 -0
- package/dist/server/db/consistency.d.ts +28 -0
- package/dist/server/db/contracts.d.ts +3 -27
- package/dist/server/db/filter.d.ts +24 -0
- package/dist/server/db/gql-from-shape.d.ts +42 -0
- package/dist/server/db/http.d.ts +38 -0
- package/dist/server/db/memory-sql.d.ts +66 -8
- package/dist/server/db/ops.d.ts +70 -0
- package/dist/server/db/orm.d.ts +110 -0
- package/dist/server/db/query-builder.d.ts +4 -2
- package/dist/server/db/query.d.ts +90 -32
- package/dist/server/db/rest-from-shape.d.ts +56 -0
- package/dist/server/db/schema.d.ts +78 -0
- package/dist/server/db/server.d.ts +0 -2
- package/dist/server/db/shape.d.ts +131 -0
- package/dist/server/db/typed-query.d.ts +113 -0
- package/dist/server/email/api.d.ts +15 -0
- package/dist/server/email/contracts.d.ts +8 -3
- package/dist/server/email/index.d.ts +23 -30
- package/dist/server/email/memory-email-server.d.ts +43 -0
- package/dist/server/email/memory-email.d.ts +30 -0
- package/dist/server/index.d.ts +33 -10
- package/dist/server/index.js +9843 -4133
- package/dist/server/messager/index.d.ts +133 -12
- package/dist/server/postgres/client.d.ts +4 -4
- package/dist/server/postgres/types.d.ts +33 -13
- package/dist/server/redis/types.d.ts +2 -0
- package/dist/server/response.d.ts +3 -3
- package/dist/server/types.d.ts +2 -5
- package/dist/server/user/app-auth.d.ts +74 -0
- package/dist/server/user/index.d.ts +277 -5
- package/dist/server/workflow/contracts.d.ts +202 -0
- package/dist/server/workflow/expression.d.ts +89 -0
- package/dist/server/workflow/index.d.ts +70 -0
- package/dist/server/workflow/index.js +2476 -0
- package/dist/server/workflow/runner.d.ts +19 -0
- package/dist/server/workflow/std.d.ts +27 -0
- package/dist/server/workflow/steps.d.ts +12 -0
- package/dist/server/workflow/store.d.ts +19 -0
- package/dist/server/workflow/tojs.d.ts +28 -0
- package/dist/server/workflow/validate.d.ts +23 -0
- package/dist/server/workflow/views.d.ts +66 -0
- package/dist/server/workflow/wfjs.d.ts +27 -0
- package/dist/server/workflows/cron.d.ts +16 -0
- package/dist/server/workflows/index.d.ts +267 -0
- package/dist/shared/zod.d.ts +351 -0
- package/docs/client.md +6 -0
- package/docs/server.md +455 -11
- package/package.json +9 -3
- package/dist/server/db/postgres-server.d.ts +0 -39
- package/dist/server/db/sql-parser.d.ts +0 -24
- package/dist/server/db/test-servers.d.ts +0 -21
- package/dist/server/email/smtp.d.ts +0 -34
|
@@ -697,6 +697,7 @@ pre, code {
|
|
|
697
697
|
font-size: var(--wf-font-size-sm);
|
|
698
698
|
}
|
|
699
699
|
|
|
700
|
+
|
|
700
701
|
pre {
|
|
701
702
|
background: var(--wf-color-bg-secondary);
|
|
702
703
|
border: var(--wf-border-width) solid var(--wf-color-border);
|
|
@@ -866,6 +867,15 @@ body.wf-dragging {
|
|
|
866
867
|
min-width: 0;
|
|
867
868
|
min-height: 0;
|
|
868
869
|
}
|
|
870
|
+
|
|
871
|
+
/* 链接行 hover 强调(列表/导航行——整行可点视觉反馈) */
|
|
872
|
+
.wf-fill-hover {
|
|
873
|
+
border-radius: var(--wf-radius-sm);
|
|
874
|
+
padding: 2px 4px;
|
|
875
|
+
margin: -2px -4px;
|
|
876
|
+
transition: background 0.15s ease;
|
|
877
|
+
}
|
|
878
|
+
.wf-fill-hover:hover { background: var(--wf-color-bg-secondary); }
|
|
869
879
|
}
|
|
870
880
|
|
|
871
881
|
@layer layout {
|
|
@@ -1253,6 +1263,11 @@ body.wf-dragging {
|
|
|
1253
1263
|
border: var(--wf-border-width) solid var(--wf-color-border-light);
|
|
1254
1264
|
border-bottom-left-radius: var(--wf-radius-sm);
|
|
1255
1265
|
}
|
|
1266
|
+
|
|
1267
|
+
/* 圆角/描边类(card 视觉——消费侧欠账 2027-09 补定义) */
|
|
1268
|
+
.wf-rounded-sm { border-radius: var(--wf-radius-sm); }
|
|
1269
|
+
.wf-rounded-md { border-radius: var(--wf-radius-md); }
|
|
1270
|
+
.wf-card-outline { border: 1px solid var(--wf-color-border); }
|
|
1256
1271
|
}
|
|
1257
1272
|
|
|
1258
1273
|
@layer utilities {
|
|
@@ -1296,9 +1311,13 @@ body.wf-dragging {
|
|
|
1296
1311
|
/* ── 文字色(语义唯一名——随 token 用 error;浅底可读 700 级) ── */
|
|
1297
1312
|
.wf-text-secondary { color: var(--wf-color-text-secondary); }
|
|
1298
1313
|
.wf-text-tertiary { color: var(--wf-color-text-tertiary); }
|
|
1314
|
+
.wf-text-danger { color: var(--wf-color-error-text); }
|
|
1315
|
+
.wf-text-warning { color: var(--wf-color-warning-text); }
|
|
1316
|
+
.wf-font-mono { font-family: var(--wf-font-mono); }
|
|
1299
1317
|
.wf-text-primary { color: var(--wf-color-primary-text); }
|
|
1300
1318
|
.wf-text-success { color: var(--wf-color-success-text); }
|
|
1301
1319
|
.wf-text-warning { color: var(--wf-color-warning-text); }
|
|
1320
|
+
.wf-font-mono { font-family: var(--wf-font-mono); }
|
|
1302
1321
|
.wf-text-error { color: var(--wf-color-error-text); }
|
|
1303
1322
|
|
|
1304
1323
|
/* ── 填充上的文字色(实心品牌/警告底——对比度保障) ── */
|
|
@@ -3437,12 +3456,18 @@ body.wf-dragging {
|
|
|
3437
3456
|
}
|
|
3438
3457
|
.wf-codeeditor-area {
|
|
3439
3458
|
width: 100%;
|
|
3440
|
-
color:
|
|
3459
|
+
color: transparent; /* 视觉层由 wf-codeeditor-hl 渲染(选中态仍可见——selection 背景独立) */
|
|
3460
|
+
caret-color: var(--wf-color-text);
|
|
3441
3461
|
}
|
|
3462
|
+
.wf-codeeditor-area::placeholder { color: var(--wf-color-text-tertiary); }
|
|
3442
3463
|
.wf-codeeditor-gutter {
|
|
3443
3464
|
border-right: 1px solid var(--wf-color-border);
|
|
3444
3465
|
background: var(--wf-color-bg-secondary);
|
|
3445
3466
|
}
|
|
3467
|
+
.wf-codeeditor-body {
|
|
3468
|
+
position: relative;
|
|
3469
|
+
min-width: 0;
|
|
3470
|
+
}
|
|
3446
3471
|
|
|
3447
3472
|
/* weifuwu/components — Collapse */
|
|
3448
3473
|
|
|
@@ -12122,4 +12147,73 @@ body.wf-dragging {
|
|
|
12122
12147
|
}
|
|
12123
12148
|
}
|
|
12124
12149
|
|
|
12150
|
+
/* weifuwu/components — WordCloud */
|
|
12151
|
+
|
|
12152
|
+
.wf-wordcloud {
|
|
12153
|
+
position: relative;
|
|
12154
|
+
max-width: 100%;
|
|
12155
|
+
}
|
|
12156
|
+
|
|
12157
|
+
.wf-wordcloud svg {
|
|
12158
|
+
display: block;
|
|
12159
|
+
}
|
|
12160
|
+
|
|
12161
|
+
.wf-wordcloud text {
|
|
12162
|
+
cursor: default;
|
|
12163
|
+
transition: opacity var(--wf-dur-fast) var(--wf-ease-out);
|
|
12164
|
+
}
|
|
12165
|
+
|
|
12166
|
+
/* 可交互态(onWordClick 提供时)——hover/键盘焦点高亮 */
|
|
12167
|
+
.wf-wordcloud--clickable text {
|
|
12168
|
+
cursor: pointer;
|
|
12169
|
+
/* SVG text 默认 pointer-events: visiblePainted——命中区=字形笔画(字母间隙漏到
|
|
12170
|
+
svg 根——点击不触发实证)——bounding-box = 命中整个文本 bbox(SVG2) */
|
|
12171
|
+
pointer-events: bounding-box;
|
|
12172
|
+
}
|
|
12173
|
+
|
|
12174
|
+
.wf-wordcloud--clickable text:hover,
|
|
12175
|
+
.wf-wordcloud--clickable text:focus-visible {
|
|
12176
|
+
opacity: 0.7;
|
|
12177
|
+
}
|
|
12178
|
+
|
|
12179
|
+
/* tooltip 内容(Chart 同款命令式弹窗——面板 .wf-popup 仅 max-width 无背景——
|
|
12180
|
+
* 内容自带反色卡片(深底浅字——popup-manager z-index 定位由内核完成)) */
|
|
12181
|
+
.wf-wordcloud-tooltip {
|
|
12182
|
+
display: inline-flex;
|
|
12183
|
+
align-items: center;
|
|
12184
|
+
gap: var(--wf-gap-xs);
|
|
12185
|
+
background: var(--wf-color-text);
|
|
12186
|
+
color: var(--wf-color-bg);
|
|
12187
|
+
padding: var(--wf-space-xs) var(--wf-space-sm);
|
|
12188
|
+
border-radius: var(--wf-radius-sm);
|
|
12189
|
+
font-family: var(--wf-font-sans);
|
|
12190
|
+
font-size: var(--wf-font-size-sm);
|
|
12191
|
+
line-height: 1.5;
|
|
12192
|
+
white-space: nowrap;
|
|
12193
|
+
pointer-events: none;
|
|
12194
|
+
}
|
|
12195
|
+
|
|
12196
|
+
.wf-wordcloud-tooltip-word {
|
|
12197
|
+
font-weight: var(--wf-font-weight-semibold);
|
|
12198
|
+
}
|
|
12199
|
+
|
|
12200
|
+
.wf-wordcloud-tooltip-weight {
|
|
12201
|
+
color: var(--wf-color-bg-secondary);
|
|
12202
|
+
font-size: var(--wf-font-size-xs);
|
|
12203
|
+
}
|
|
12204
|
+
|
|
12205
|
+
/* 空态(words 空/全零权重) */
|
|
12206
|
+
.wf-wordcloud-empty {
|
|
12207
|
+
display: flex;
|
|
12208
|
+
align-items: center;
|
|
12209
|
+
justify-content: center;
|
|
12210
|
+
min-height: 80px;
|
|
12211
|
+
padding: var(--wf-space-md);
|
|
12212
|
+
border: 1px dashed var(--wf-color-border);
|
|
12213
|
+
border-radius: var(--wf-radius);
|
|
12214
|
+
color: var(--wf-color-text-tertiary);
|
|
12215
|
+
font-family: var(--wf-font-sans);
|
|
12216
|
+
font-size: var(--wf-font-size-sm);
|
|
12217
|
+
}
|
|
12218
|
+
|
|
12125
12219
|
}
|
|
@@ -697,6 +697,7 @@ pre, code {
|
|
|
697
697
|
font-size: var(--wf-font-size-sm);
|
|
698
698
|
}
|
|
699
699
|
|
|
700
|
+
|
|
700
701
|
pre {
|
|
701
702
|
background: var(--wf-color-bg-secondary);
|
|
702
703
|
border: var(--wf-border-width) solid var(--wf-color-border);
|
|
@@ -866,6 +867,15 @@ body.wf-dragging {
|
|
|
866
867
|
min-width: 0;
|
|
867
868
|
min-height: 0;
|
|
868
869
|
}
|
|
870
|
+
|
|
871
|
+
/* 链接行 hover 强调(列表/导航行——整行可点视觉反馈) */
|
|
872
|
+
.wf-fill-hover {
|
|
873
|
+
border-radius: var(--wf-radius-sm);
|
|
874
|
+
padding: 2px 4px;
|
|
875
|
+
margin: -2px -4px;
|
|
876
|
+
transition: background 0.15s ease;
|
|
877
|
+
}
|
|
878
|
+
.wf-fill-hover:hover { background: var(--wf-color-bg-secondary); }
|
|
869
879
|
}
|
|
870
880
|
|
|
871
881
|
@layer layout {
|
|
@@ -1253,6 +1263,11 @@ body.wf-dragging {
|
|
|
1253
1263
|
border: var(--wf-border-width) solid var(--wf-color-border-light);
|
|
1254
1264
|
border-bottom-left-radius: var(--wf-radius-sm);
|
|
1255
1265
|
}
|
|
1266
|
+
|
|
1267
|
+
/* 圆角/描边类(card 视觉——消费侧欠账 2027-09 补定义) */
|
|
1268
|
+
.wf-rounded-sm { border-radius: var(--wf-radius-sm); }
|
|
1269
|
+
.wf-rounded-md { border-radius: var(--wf-radius-md); }
|
|
1270
|
+
.wf-card-outline { border: 1px solid var(--wf-color-border); }
|
|
1256
1271
|
}
|
|
1257
1272
|
|
|
1258
1273
|
@layer utilities {
|
|
@@ -1296,9 +1311,13 @@ body.wf-dragging {
|
|
|
1296
1311
|
/* ── 文字色(语义唯一名——随 token 用 error;浅底可读 700 级) ── */
|
|
1297
1312
|
.wf-text-secondary { color: var(--wf-color-text-secondary); }
|
|
1298
1313
|
.wf-text-tertiary { color: var(--wf-color-text-tertiary); }
|
|
1314
|
+
.wf-text-danger { color: var(--wf-color-error-text); }
|
|
1315
|
+
.wf-text-warning { color: var(--wf-color-warning-text); }
|
|
1316
|
+
.wf-font-mono { font-family: var(--wf-font-mono); }
|
|
1299
1317
|
.wf-text-primary { color: var(--wf-color-primary-text); }
|
|
1300
1318
|
.wf-text-success { color: var(--wf-color-success-text); }
|
|
1301
1319
|
.wf-text-warning { color: var(--wf-color-warning-text); }
|
|
1320
|
+
.wf-font-mono { font-family: var(--wf-font-mono); }
|
|
1302
1321
|
.wf-text-error { color: var(--wf-color-error-text); }
|
|
1303
1322
|
|
|
1304
1323
|
/* ── 填充上的文字色(实心品牌/警告底——对比度保障) ── */
|
|
@@ -8,6 +8,8 @@ import { type CompOutput } from '../node/component.ts';
|
|
|
8
8
|
export interface Segment {
|
|
9
9
|
factory: Component;
|
|
10
10
|
renderFn: RenderFn;
|
|
11
|
+
/** memo 比较基准(上次实际渲染的 props——跳过后不更新) */
|
|
12
|
+
lastProps?: Record<string, unknown>;
|
|
11
13
|
lastOutput: CompOutput | undefined;
|
|
12
14
|
hookSeq: {
|
|
13
15
|
n: number;
|
|
@@ -36,8 +38,6 @@ export declare function nextSegmentEpoch(): number;
|
|
|
36
38
|
export type SegmentMap = Map<string, Segment>;
|
|
37
39
|
/** 创建段(mount——工厂执行——hooks 环境已注入 ctx.ui) */
|
|
38
40
|
export declare function createSegment(factory: Component, props: Record<string, unknown>, ctx: UIContext, compId: string, requestSegmentRender?: () => void): Segment;
|
|
39
|
-
/** **段重渲染(单一实现源)**:hookSeq 重置(v1 renderBase 语义——渲染期
|
|
40
|
-
* hook 索引跨渲染稳定)→ renderFn 重调(props 最新)——工厂不重跑 */
|
|
41
41
|
export declare function rerenderSegment(seg: Segment, props: Record<string, unknown>): VNodeChild;
|
|
42
42
|
/** 段销毁(unmount——destroy$ 单信号全停——onUnmount 闭包栈 LIFO + 订阅
|
|
43
43
|
* 者清理统一由信号驱动)——段接口无平行数组(单轨清理) */
|
|
@@ -13,6 +13,19 @@ import { Subject } from '../observable/index.ts';
|
|
|
13
13
|
import { type PopupHandle, type PopupOpenOptions } from './popup-manager.ts';
|
|
14
14
|
import { type TweenOptions } from './stable.ts';
|
|
15
15
|
/** hooks 环境(per 组件实例——renderComponent 注入) */
|
|
16
|
+
/** me() 会话面(useSession 返回——轻量结构——不依赖 server 类型) */
|
|
17
|
+
export interface UserSession {
|
|
18
|
+
user: {
|
|
19
|
+
id: string;
|
|
20
|
+
email?: string;
|
|
21
|
+
name?: string | null;
|
|
22
|
+
} | null;
|
|
23
|
+
session: {
|
|
24
|
+
userId: string;
|
|
25
|
+
appId: string;
|
|
26
|
+
role: string;
|
|
27
|
+
} | null;
|
|
28
|
+
}
|
|
16
29
|
export interface HookEnv {
|
|
17
30
|
/** 组件级渲染触发(store 变化/事件驱动 hooks → 重渲染) */
|
|
18
31
|
requestRender(): void;
|
|
@@ -59,6 +72,13 @@ export interface Ui {
|
|
|
59
72
|
* (switchMap——竞态消灭)· 卸载自动退订 · 重挂载重新取(新鲜)——
|
|
60
73
|
* get() 返回 null = loading/error 无值 */
|
|
61
74
|
useAsyncData<T>(fetcher: () => Promise<T>, key: string): [() => T | null, () => void];
|
|
75
|
+
/** **会话面(USERSYSTEM-V2——me() 单源)**:{ user, session:{userId,appId,role} }——
|
|
76
|
+
* getter 形态——401/错误降级 null——组件一行读身份/角色/租户
|
|
77
|
+
* (替代应用自造角色存储——localStorage 双源根除) */
|
|
78
|
+
useSession(opts?: {
|
|
79
|
+
path?: string;
|
|
80
|
+
token?: () => string | null;
|
|
81
|
+
}): () => UserSession | null;
|
|
62
82
|
/** 共享状态订阅(**getter 形态**——`get()` 永远最新——store 变化 →
|
|
63
83
|
* 组件重渲染——unmount 自动退订——订阅幂等(重复调用不重复订阅)) */
|
|
64
84
|
useExternal<T>(store: ExternalStore<T>): () => T;
|