@manohub/kit 0.6.1 → 0.7.1
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/CONTRACT.md +659 -597
- package/bin/kit.mjs +12 -3
- package/package.json +1 -1
- package/skills/kit-dev/references/page-recipes.md +20 -7
- package/skills/kit-migrate/references/migration-map.md +294 -294
- package/skills/kit-migrate/references/migration-playbook.md +188 -188
- package/skills/lint.mjs +500 -0
package/bin/kit.mjs
CHANGED
|
@@ -10,15 +10,20 @@
|
|
|
10
10
|
* pnpm exec kit install --also-claude
|
|
11
11
|
* pnpm exec kit install --target .x/skills
|
|
12
12
|
* pnpm exec kit install --dry-run
|
|
13
|
+
* pnpm exec kit lint # 契约机械护栏(默认全跑,只报不修)
|
|
14
|
+
* pnpm exec kit lint --group source --json
|
|
13
15
|
* pnpm exec kit help
|
|
14
16
|
*
|
|
15
17
|
* npm 消费方把 `pnpm exec` 换成 `npx`(两者都解析本地 node_modules/.bin)。
|
|
16
18
|
* package.json 的 scripts 里可以省略前缀(npm/pnpm 会把 .bin 加进 PATH):
|
|
17
19
|
* "skills:sync": "kit install"
|
|
18
20
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
21
|
+
* 版本史:
|
|
22
|
+
* - 0.6.0 起 `lint:style` / `lint:component` / `lint:structure`(旧的消费侧机器规则)**已下线**
|
|
23
|
+
* —— 它们按目录/结构硬编码,语义与四包重构后的契约脱节。
|
|
24
|
+
* - 0.7.0 起 `lint` **重新上线**,但换了立足点:不查目录,只查契约里能机械判定的事
|
|
25
|
+
* (外观来源白名单 / 布局属性闭集 / 类名命名空间),见 `skills/lint.mjs` 头注释。
|
|
26
|
+
* 旧脚本若写着已下线的子命令名,会得到「未知命令」并附帮助 —— 不是静默通过。
|
|
22
27
|
*/
|
|
23
28
|
import { spawnSync } from 'node:child_process'
|
|
24
29
|
import { existsSync, readFileSync } from 'node:fs'
|
|
@@ -37,6 +42,10 @@ export const COMMANDS = {
|
|
|
37
42
|
script: 'skills/install.mjs',
|
|
38
43
|
summary: '把随包分发的三个 AI 技能落到本工程(--also-claude / --target <dir> / --dry-run)',
|
|
39
44
|
},
|
|
45
|
+
lint: {
|
|
46
|
+
script: 'skills/lint.mjs',
|
|
47
|
+
summary: '契约机械护栏:红线条 / 外观来源 / 属性闭集 / 类名前缀(--root / --namespace / --group / --json)',
|
|
48
|
+
},
|
|
40
49
|
}
|
|
41
50
|
|
|
42
51
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@manohub/kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "子应用入口编排层:createSubApp(作用域容器与宿主锚点、pinia/路由/vue-query 装配、宿主挂载协议)、i18n 单实例与语言探测,外加随包分发的接入契约(CONTRACT.md,五层闭集条款 + 自检清单)与三个 AI 技能包。本包**零样式产物**:设计令牌(值)在 @manohub/theme,组件(类与行为)在 @manohub/ui,两者由消费方直接引入。",
|
|
@@ -322,13 +322,26 @@ try { await save() } finally { done() }
|
|
|
322
322
|
## 九、页签 / 页面级筛选 / 分页
|
|
323
323
|
|
|
324
324
|
```tsx
|
|
325
|
-
// 只要页签条 →
|
|
326
|
-
<
|
|
327
|
-
|
|
328
|
-
// 条 + 面板切换 →
|
|
329
|
-
<
|
|
330
|
-
{{
|
|
331
|
-
|
|
325
|
+
// 只要页签条 → TabBar(带「更多」收纳)
|
|
326
|
+
<TabBar v-model={tab.value} options={[{ label: '基本信息', value: 'base' }, { label: '字段映射', value: 'fields' }]} />
|
|
327
|
+
|
|
328
|
+
// 条 + 面板切换 → Tabs(面板用 TabPanel 写自己的信息,轨道缺省就是页签条)
|
|
329
|
+
<Tabs v-model={tab.value} lazy>
|
|
330
|
+
{{
|
|
331
|
+
default: () => [
|
|
332
|
+
<TabPanel name="基本信息">…面板内容…</TabPanel>,
|
|
333
|
+
<TabPanel name="字段映射">…面板内容…</TabPanel>,
|
|
334
|
+
],
|
|
335
|
+
}}
|
|
336
|
+
</Tabs>
|
|
337
|
+
|
|
338
|
+
// 换皮(胶囊 / 分段按钮 / 单选卡片):整块替换 selector,options 就是从各 TabPanel 提取出来的项
|
|
339
|
+
<Tabs v-model={tab.value}>
|
|
340
|
+
{{
|
|
341
|
+
selector: ({ value, options, select }) => <Capsule options={caps} modelValue={value} onChange={select} />,
|
|
342
|
+
default: () => [<TabPanel name="基本信息">…</TabPanel>, <TabPanel name="字段映射">…</TabPanel>],
|
|
343
|
+
}}
|
|
344
|
+
</Tabs>
|
|
332
345
|
|
|
333
346
|
// 页面级筛选:条件字段写成 Filter.Item 子件,控件自放
|
|
334
347
|
<Page.Filter onQuery={query} onReset={reset}>
|