skill-schedule 0.3.3 → 0.3.13
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/SKILL.md +12 -3
- package/dist/.gen-inputs.json +4 -4
- package/dist/admin/adminDocs.d.ts +57 -0
- package/dist/admin/adminDocs.d.ts.map +1 -0
- package/dist/admin/adminDocs.js +190 -0
- package/dist/admin/adminDocs.js.map +1 -0
- package/dist/admin/adminParts.d.ts +37 -0
- package/dist/admin/adminParts.d.ts.map +1 -0
- package/dist/admin/adminParts.js +83 -0
- package/dist/admin/adminParts.js.map +1 -0
- package/dist/admin/handlers.d.ts.map +1 -1
- package/dist/admin/handlers.js +196 -6
- package/dist/admin/handlers.js.map +1 -1
- package/dist/admin/routes.d.ts +10 -1
- package/dist/admin/routes.d.ts.map +1 -1
- package/dist/admin/routes.js +2 -0
- package/dist/admin/routes.js.map +1 -1
- package/dist/analyze/analyzeDocs.d.ts +51 -0
- package/dist/analyze/analyzeDocs.d.ts.map +1 -0
- package/dist/analyze/analyzeDocs.js +442 -0
- package/dist/analyze/analyzeDocs.js.map +1 -0
- package/dist/analyze/analyzeParts.d.ts +53 -0
- package/dist/analyze/analyzeParts.d.ts.map +1 -0
- package/dist/analyze/analyzeParts.js +229 -0
- package/dist/analyze/analyzeParts.js.map +1 -0
- package/dist/analyze/handlers.d.ts.map +1 -1
- package/dist/analyze/handlers.js +41 -4
- package/dist/analyze/handlers.js.map +1 -1
- package/dist/cli/cmd_read.js +8 -2
- package/dist/cli/cmd_read.js.map +1 -1
- package/dist/cli/config.d.ts +0 -9
- package/dist/cli/config.d.ts.map +1 -1
- package/dist/cli/config.js +20 -1
- package/dist/cli/config.js.map +1 -1
- package/dist/fetch/feishu.d.ts +6 -0
- package/dist/fetch/feishu.d.ts.map +1 -1
- package/dist/fetch/feishu.js +18 -7
- package/dist/fetch/feishu.js.map +1 -1
- package/dist/fetch/index.d.ts +1 -1
- package/dist/fetch/index.d.ts.map +1 -1
- package/dist/fetch/index.js +1 -1
- package/dist/fetch/index.js.map +1 -1
- package/dist/health.d.ts +11 -0
- package/dist/health.d.ts.map +1 -1
- package/dist/health.js +48 -22
- package/dist/health.js.map +1 -1
- package/dist/help/index.d.ts +1 -0
- package/dist/help/index.d.ts.map +1 -1
- package/dist/help/index.js +3 -0
- package/dist/help/index.js.map +1 -1
- package/dist/plan/discussDocs.d.ts +8 -0
- package/dist/plan/discussDocs.d.ts.map +1 -0
- package/dist/plan/discussDocs.js +321 -0
- package/dist/plan/discussDocs.js.map +1 -0
- package/dist/plan/feishuDocs.d.ts +19 -0
- package/dist/plan/feishuDocs.d.ts.map +1 -0
- package/dist/plan/feishuDocs.js +257 -0
- package/dist/plan/feishuDocs.js.map +1 -0
- package/dist/plan/handlers.d.ts.map +1 -1
- package/dist/plan/handlers.js +107 -3
- package/dist/plan/handlers.js.map +1 -1
- package/dist/plan/index.d.ts +2 -0
- package/dist/plan/index.d.ts.map +1 -1
- package/dist/plan/index.js +16 -9
- package/dist/plan/index.js.map +1 -1
- package/dist/plan/iso.d.ts +2 -0
- package/dist/plan/iso.d.ts.map +1 -1
- package/dist/plan/iso.js +6 -2
- package/dist/plan/iso.js.map +1 -1
- package/dist/plan/planDocs.d.ts +47 -0
- package/dist/plan/planDocs.d.ts.map +1 -0
- package/dist/plan/planDocs.js +159 -0
- package/dist/plan/planDocs.js.map +1 -0
- package/dist/plan/planParts.d.ts +38 -0
- package/dist/plan/planParts.d.ts.map +1 -0
- package/dist/plan/planParts.js +96 -0
- package/dist/plan/planParts.js.map +1 -0
- package/dist/plan/probe.d.ts +28 -0
- package/dist/plan/probe.d.ts.map +1 -0
- package/dist/plan/probe.js +114 -0
- package/dist/plan/probe.js.map +1 -0
- package/dist/plan/receipt.d.ts +12 -0
- package/dist/plan/receipt.d.ts.map +1 -1
- package/dist/plan/receipt.js +17 -0
- package/dist/plan/receipt.js.map +1 -1
- package/dist/plan/receiptDocs.d.ts +26 -0
- package/dist/plan/receiptDocs.d.ts.map +1 -0
- package/dist/plan/receiptDocs.js +341 -0
- package/dist/plan/receiptDocs.js.map +1 -0
- package/dist/plan/replayDocs.d.ts +165 -0
- package/dist/plan/replayDocs.d.ts.map +1 -0
- package/dist/plan/replayDocs.js +226 -0
- package/dist/plan/replayDocs.js.map +1 -0
- package/dist/plan/replaySections.d.ts +5 -0
- package/dist/plan/replaySections.d.ts.map +1 -0
- package/dist/plan/replaySections.js +471 -0
- package/dist/plan/replaySections.js.map +1 -0
- package/dist/plan/reviewDocs.d.ts +4 -0
- package/dist/plan/reviewDocs.d.ts.map +1 -0
- package/dist/plan/reviewDocs.js +130 -0
- package/dist/plan/reviewDocs.js.map +1 -0
- package/dist/plan/sync.d.ts.map +1 -1
- package/dist/plan/sync.js +5 -0
- package/dist/plan/sync.js.map +1 -1
- package/dist/policy/index.d.ts +1 -1
- package/dist/policy/index.d.ts.map +1 -1
- package/dist/policy/index.js +1 -1
- package/dist/policy/index.js.map +1 -1
- package/dist/policy/plan.d.ts +8 -0
- package/dist/policy/plan.d.ts.map +1 -1
- package/dist/policy/plan.js +20 -0
- package/dist/policy/plan.js.map +1 -1
- package/dist/query/handlers.d.ts +3 -0
- package/dist/query/handlers.d.ts.map +1 -1
- package/dist/query/handlers.js +86 -12
- package/dist/query/handlers.js.map +1 -1
- package/dist/query/queryDocs.d.ts +64 -0
- package/dist/query/queryDocs.d.ts.map +1 -0
- package/dist/query/queryDocs.js +554 -0
- package/dist/query/queryDocs.js.map +1 -0
- package/dist/query/routes.d.ts +11 -1
- package/dist/query/routes.d.ts.map +1 -1
- package/dist/query/routes.js +5 -1
- package/dist/query/routes.js.map +1 -1
- package/dist/render/copyArea.d.ts +61 -0
- package/dist/render/copyArea.d.ts.map +1 -0
- package/dist/render/copyArea.js +80 -0
- package/dist/render/copyArea.js.map +1 -0
- package/dist/render/html.d.ts.map +1 -1
- package/dist/render/html.js +3 -1
- package/dist/render/html.js.map +1 -1
- package/dist/render/index.d.ts +3 -0
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +2 -0
- package/dist/render/index.js.map +1 -1
- package/dist/shared/dayPage.d.ts +67 -0
- package/dist/shared/dayPage.d.ts.map +1 -0
- package/dist/shared/dayPage.js +92 -0
- package/dist/shared/dayPage.js.map +1 -0
- package/dist/shared/detailPage.d.ts +55 -0
- package/dist/shared/detailPage.d.ts.map +1 -0
- package/dist/shared/detailPage.js +65 -0
- package/dist/shared/detailPage.js.map +1 -0
- package/dist/shared/docPage.d.ts +22 -0
- package/dist/shared/docPage.d.ts.map +1 -0
- package/dist/shared/docPage.js +52 -0
- package/dist/shared/docPage.js.map +1 -0
- package/dist/shared/overviewPage.d.ts +52 -0
- package/dist/shared/overviewPage.d.ts.map +1 -0
- package/dist/shared/overviewPage.js +65 -0
- package/dist/shared/overviewPage.js.map +1 -0
- package/dist/shared/pageNav.d.ts +24 -0
- package/dist/shared/pageNav.d.ts.map +1 -0
- package/dist/shared/pageNav.js +70 -0
- package/dist/shared/pageNav.js.map +1 -0
- package/dist/shared/pageParts.d.ts +45 -0
- package/dist/shared/pageParts.d.ts.map +1 -0
- package/dist/shared/pageParts.js +154 -0
- package/dist/shared/pageParts.js.map +1 -0
- package/dist/shared/planPage.d.ts +49 -0
- package/dist/shared/planPage.d.ts.map +1 -0
- package/dist/shared/planPage.js +48 -0
- package/dist/shared/planPage.js.map +1 -0
- package/dist/shared/rangePage.d.ts +44 -0
- package/dist/shared/rangePage.d.ts.map +1 -0
- package/dist/shared/rangePage.js +50 -0
- package/dist/shared/rangePage.js.map +1 -0
- package/dist/shared/weekPage.d.ts +36 -0
- package/dist/shared/weekPage.d.ts.map +1 -0
- package/dist/shared/weekPage.js +42 -0
- package/dist/shared/weekPage.js.map +1 -0
- package/dist/triggers/routes.generated.d.ts +23 -1
- package/dist/triggers/routes.generated.d.ts.map +1 -1
- package/dist/triggers/routes.generated.js +4 -1
- package/dist/triggers/routes.generated.js.map +1 -1
- package/dist/write/handlers.d.ts.map +1 -1
- package/dist/write/handlers.js +101 -5
- package/dist/write/handlers.js.map +1 -1
- package/dist/write/writeDocs.d.ts +27 -0
- package/dist/write/writeDocs.d.ts.map +1 -0
- package/dist/write/writeDocs.js +423 -0
- package/dist/write/writeDocs.js.map +1 -0
- package/dist/write/writeParts.d.ts +54 -0
- package/dist/write/writeParts.d.ts.map +1 -0
- package/dist/write/writeParts.js +117 -0
- package/dist/write/writeParts.js.map +1 -0
- package/package.json +3 -3
package/dist/query/routes.js
CHANGED
|
@@ -5,7 +5,6 @@ export const QUERY_ROUTES = [
|
|
|
5
5
|
{ phrase: '今天作息', key: 'schedule.record.today', order: 7 },
|
|
6
6
|
{ phrase: '查作息时间轴', key: 'schedule.record.today', order: 8 },
|
|
7
7
|
{ phrase: '查作息状态', key: 'schedule.record.today', order: 9 },
|
|
8
|
-
{ phrase: '初始化数据库', key: 'schedule.record.today', order: 10 },
|
|
9
8
|
{ phrase: '查作息', key: 'schedule.record.today', order: 11 },
|
|
10
9
|
{ phrase: '汇总作息', key: 'schedule.record.range', needs: ['start', 'end'], order: 12 },
|
|
11
10
|
{ phrase: '查作息范围', key: 'schedule.record.range', needs: ['start', 'end'], order: 13 },
|
|
@@ -16,5 +15,10 @@ export const QUERY_ROUTES = [
|
|
|
16
15
|
{ phrase: '24h 概览', key: 'schedule.plan.today', preset: { view: 'aggregate' }, order: 30 },
|
|
17
16
|
{ phrase: '查日程', key: 'schedule.plan.today', order: 31 },
|
|
18
17
|
{ phrase: '看日程', key: 'schedule.plan.today', order: 32 },
|
|
18
|
+
{ phrase: '周视图', key: 'schedule.record.range', preset: { view: 'week' }, order: 48 },
|
|
19
|
+
// #786 · 老词「按 ID 查记录」**带空格**:老 HELP 的 #23 就是带空格写的,而表里原有那条不带空格,
|
|
20
|
+
// `routeWakeword` 走 `text.includes(phrase)` ⇒ 用户按老 HELP 打字时一条也命不中。两条都留
|
|
21
|
+
// (最长匹配优先,带空格那条先命中),键与槽位一模一样。
|
|
22
|
+
{ phrase: '按 ID 查记录', key: 'schedule.record.detail', needs: ['id'], order: 49 },
|
|
19
23
|
];
|
|
20
24
|
//# sourceMappingURL=routes.js.map
|
package/dist/query/routes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/query/routes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/query/routes.ts"],"names":[],"mappings":"AAkBA,MAAM,CAAC,MAAM,YAAY,GAA0B;IACjD,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,EAAE;IAC1D,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,EAAE;IAC1D,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,EAAE;IAC1D,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,EAAE;IAC1D,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,EAAE;IAC5D,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,EAAE;IAC3D,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,EAAE,EAAE;IAC1D,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IACpF,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IACrF,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IACrF,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,EAAE,EAAE;IAC7D,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC7E,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,qBAAqB,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;IAC3G,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,qBAAqB,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;IAC1F,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,qBAAqB,EAAE,KAAK,EAAE,EAAE,EAAE;IACxD,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,qBAAqB,EAAE,KAAK,EAAE,EAAE,EAAE;IACxD,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,uBAAuB,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;IACpF,+DAA+D;IAC/D,wEAAwE;IACxE,+BAA+B;IAC/B,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;CAChF,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { CopyLogFields } from 'base-paint';
|
|
2
|
+
import type { EnvelopeDataByShape, EnvelopeShape } from 'base-link-core';
|
|
3
|
+
/** 一张页复制区的载荷:数据位=一条真命令的 key + 该 key 形状的载荷(本件建 envelope 出三份文本)。
|
|
4
|
+
*
|
|
5
|
+
* `key` 是 `SCHEDULE_KEY_SHAPES` 里那八个之一(形状由它定:`list`/`detail`/`stat`/`receipt`/
|
|
6
|
+
* `analysis`),`payload` 就是这条命令 `data` 位那一份(`EnvelopeDataByShape[shape]`)——错形在
|
|
7
|
+
* `buildScheduleEnvelope` 里当场 throw(fail-closed,不返空串冒充)。
|
|
8
|
+
* 页型函数负责补 `title`(复制区里装的是哪一份文本,**声明位、不上屏**,见 `scheduleCopyArea` 件头)
|
|
9
|
+
* 与两个 actionId:那是**页的常量**,不是调用方的口径。 */
|
|
10
|
+
export interface ScheduleCopyAreaInput {
|
|
11
|
+
/** 这一页是哪条命令出的(八键之一)。数据位与日志位共用这一个场景。 */
|
|
12
|
+
readonly key: string;
|
|
13
|
+
/** 该 key 形状的载荷(页上正在讲的那一份数据)。 */
|
|
14
|
+
readonly payload: EnvelopeDataByShape[EnvelopeShape];
|
|
15
|
+
/** 日志位第 2–6 段(走 `scheduleCopyLog` 建):给了就出「复制日志」六段(不给=只出数据位那颗按钮)。
|
|
16
|
+
* 第 1 段场景标识与数据位同源(同一个 key/载荷),本件不另要一份。 */
|
|
17
|
+
readonly log?: CopyLogFields;
|
|
18
|
+
/** 复制区标题(**声明位,不上屏**,见 `scheduleCopyArea` 的件头):说的是「这一区装的是哪一份文本」;
|
|
19
|
+
* 页型函数给的固定句如「复制与留档」/「复制初始化结果」/「复制初始化 prompt」/「复制给 AI」。
|
|
20
|
+
* #906 之前它被透传成按钮上方那行 `<h2>`,与紧挨着的「复制数据」按钮重复,现不再渲染。 */
|
|
21
|
+
readonly title?: string;
|
|
22
|
+
/** 数据位输出头覆盖;不给=公共层缺省头(`【schedule · <key>】`)。 */
|
|
23
|
+
readonly dataTitle?: string;
|
|
24
|
+
/** 数据位的时间行(给了才出);缺省不出。 */
|
|
25
|
+
readonly occurredAt?: string;
|
|
26
|
+
/** 数据位按钮的 id(页内唯一;页型函数给)。 */
|
|
27
|
+
readonly dataActionId?: string;
|
|
28
|
+
/** 日志位按钮的 id(页内唯一;页型函数给)。 */
|
|
29
|
+
readonly logActionId?: string;
|
|
30
|
+
}
|
|
31
|
+
/** 复制日志 2–6 段入参:本次执行的过程证据(第 1 段场景标识由 envelope 派生,不在这里填)。 */
|
|
32
|
+
export interface ScheduleCopyLogInput {
|
|
33
|
+
/** 渲染本页的命令原文,可照抄重跑(含本次 `--params`)。 */
|
|
34
|
+
readonly command: string;
|
|
35
|
+
/** 本次数据来源(第 3 段后半,如 `作息记录表`)。 */
|
|
36
|
+
readonly source?: string;
|
|
37
|
+
/** 写库回执的整行(第 4 段后半;库里写了哪些字段、影响几行)。 */
|
|
38
|
+
readonly m5Line?: string;
|
|
39
|
+
/** 时间戳(第 5 段):只读页给渲染时刻,写库页给回执时刻。必填,本件不自己取时钟。 */
|
|
40
|
+
readonly actionAt: string;
|
|
41
|
+
/** 文档版本(第 5 段后半);不给则不写这半句。 */
|
|
42
|
+
readonly version?: string;
|
|
43
|
+
}
|
|
44
|
+
/** 本仓唯一的时间戳口径(`YYYY-MM-DD HH:MM:SS` 本地时,与卡路里/居家两份同形)。 */
|
|
45
|
+
export declare function scheduleNowStamp(d?: Date): string;
|
|
46
|
+
/** 复制日志 2–6 段:本页由哪条命令渲染、数据从哪来、写了多少行、什么时候。 */
|
|
47
|
+
export declare function scheduleCopyLog(input: ScheduleCopyLogInput): CopyLogFields;
|
|
48
|
+
/** 复制区:数据位恒出三格式菜单(纯文本/JSON/CSV 三选一);日志位给了就出六段。
|
|
49
|
+
*
|
|
50
|
+
* **本区不落屏 `title`**(#906,2026-09-22 人滚墙后裁):`title` 说的是「这一区装的是哪一份文本」
|
|
51
|
+
* (`复制与留档`/`复制初始化结果`/`复制初始化 prompt`/`复制给 AI` 四种字面),原先透传给公共层,
|
|
52
|
+
* 由 `renderCopyBlock` 渲染成按钮**正上方**那行 `<h2 class="ilife-block-copy-block-title">`。
|
|
53
|
+
* 实测那样等于同一件事印两遍:紧挨着的按钮自己写着「复制数据」/「复制日志」,
|
|
54
|
+
* 页内导航(`.ilife-block-toc`)也拿同一串字当锚点名(61 页里 50 页如此)。
|
|
55
|
+
* 故这里**只收声明、不上屏**:`title` 字段与 30 处调用点原样保留,将来公共层若要把它渲染到别处
|
|
56
|
+
* (如页头或工具条的说明位),一处接线即生效。
|
|
57
|
+
*
|
|
58
|
+
* 为什么不在公共层 `renderCopyBlock` 上删:那一支是六家技能共用的件(卡路里/备忘录/居家都印这行标题),
|
|
59
|
+
* 删它会顺带改掉别家的产物;本票只治作息这一家,公共层一字不动。 */
|
|
60
|
+
export declare function scheduleCopyArea(input: ScheduleCopyAreaInput): string;
|
|
61
|
+
//# sourceMappingURL=copyArea.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copyArea.d.ts","sourceRoot":"","sources":["../../src/render/copyArea.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,aAAa,EAAwB,MAAM,YAAY,CAAC;AACtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAYzE;;;;;;wCAMwC;AACxC,MAAM,WAAW,qBAAqB;IACpC,uCAAuC;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAC;IACrD;+CAC2C;IAC3C,QAAQ,CAAC,GAAG,CAAC,EAAE,aAAa,CAAC;IAC7B;;2DAEuD;IACvD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,gDAAgD;IAChD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,0BAA0B;IAC1B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,6BAA6B;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,6BAA6B;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,4DAA4D;AAC5D,MAAM,WAAW,oBAAoB;IACnC,uCAAuC;IACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,iCAAiC;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,sCAAsC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,gDAAgD;IAChD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,8BAA8B;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,yDAAyD;AACzD,wBAAgB,gBAAgB,CAAC,CAAC,OAAa,GAAG,MAAM,CAGvD;AAED,6CAA6C;AAC7C,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,aAAa,CAQ1E;AAqBD;;;;;;;;;;;sCAWsC;AACtC,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAWrE"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// 渲染层·复制区共用件:复制数据(三格式菜单)+复制日志(六段),只接线不重造。
|
|
2
|
+
//
|
|
3
|
+
// 谁在用(写得出哪两个在用):① 六张页型的复制区——`src/shared/dayPage.ts`(今天总结)、
|
|
4
|
+
// `detailPage.ts`(作息详情)、`overviewPage.ts`(24h 概览/查多日计划)、`planPage.ts`(查日程)、
|
|
5
|
+
// `rangePage.ts`(汇总作息)、`weekPage.ts`(周视图);② 各能力目录自己装配的页——
|
|
6
|
+
// `src/write/writeDocs.ts`(四张写库回执)、`src/plan/*Docs.ts`(回执/商量/复盘/飞书)、
|
|
7
|
+
// `src/analyze/analyzeDocs.ts`(三张分析页)、`src/admin/adminDocs.ts`(两张辅助与管理页)。
|
|
8
|
+
// 三件东西只接线(技能侧不重造、公共层侧一字不动):
|
|
9
|
+
// ① 复制按钮与区块 → `base-paint/blocks` 的 `renderCopyBlock`(三格式走它的 `dataFormats` 分支);
|
|
10
|
+
// ② 复制文本 → `base-paint` 的 `buildDataText`/`buildLogText`;
|
|
11
|
+
// ③ 复制运行时 → 页面模板 `<!--SHARED-HELPERS-->` 槽的 `buildSharedHelpersJs` 产出(见 `html.ts`)。
|
|
12
|
+
//
|
|
13
|
+
// 对外 3 个名字(铁律五≤5):`scheduleCopyArea`/`scheduleCopyLog`/`scheduleNowStamp`
|
|
14
|
+
// (入参两个类型随件导出,与居家那份同口径)。与居家那份的唯一区别:作息这一侧的 envelope 由
|
|
15
|
+
// **本包自己的** `buildScheduleEnvelope(key, payload)` 建(`./envelope.ts`,形状表读生成的
|
|
16
|
+
// `src/cli/keys.ts`),所以调用方给的是**真命令的 key + 载荷**——八个 key 的形状都落在可序列化
|
|
17
|
+
// 五形里(list/detail/stat/receipt/analysis),本件不手写信封、也不在技能侧搓按钮。
|
|
18
|
+
import { renderCopyBlock } from 'base-paint/blocks';
|
|
19
|
+
import { buildDataText, buildLogText } from 'base-paint';
|
|
20
|
+
import { buildScheduleEnvelope } from './envelope.js';
|
|
21
|
+
import { DEFAULT_DB_FILENAME } from '../fetch/index.js';
|
|
22
|
+
/** 日志第 2 段(AI 思考链):本仓页面一律由本地 CLI 渲染,不落占位。 */
|
|
23
|
+
const LOG_THINKING = '本页由本地 CLI 渲染,无 AI 链';
|
|
24
|
+
/** 日志第 6 段(异常):正常产出即「无」。 */
|
|
25
|
+
const LOG_EXCEPTION = '无';
|
|
26
|
+
/** 三格式菜单三项的用途提示:本技能一律留空(顺序=`COPY_FORMATS`),只留三个格式名。 */
|
|
27
|
+
const MENU_HINTS = ['', '', ''];
|
|
28
|
+
/** 本仓唯一的时间戳口径(`YYYY-MM-DD HH:MM:SS` 本地时,与卡路里/居家两份同形)。 */
|
|
29
|
+
export function scheduleNowStamp(d = new Date()) {
|
|
30
|
+
const p = (n) => String(n).padStart(2, '0');
|
|
31
|
+
return d.getFullYear() + '-' + p(d.getMonth() + 1) + '-' + p(d.getDate()) + ' ' + p(d.getHours()) + ':' + p(d.getMinutes()) + ':' + p(d.getSeconds());
|
|
32
|
+
}
|
|
33
|
+
/** 复制日志 2–6 段:本页由哪条命令渲染、数据从哪来、写了多少行、什么时候。 */
|
|
34
|
+
export function scheduleCopyLog(input) {
|
|
35
|
+
return {
|
|
36
|
+
thinking: LOG_THINKING,
|
|
37
|
+
dataStructure: DEFAULT_DB_FILENAME + (input.source === undefined || input.source === '' ? '' : ' | ' + input.source),
|
|
38
|
+
callChain: input.m5Line === undefined || input.m5Line === '' ? input.command : input.command + ' | ' + input.m5Line,
|
|
39
|
+
timestamp: input.version === undefined || input.version === '' ? input.actionAt : input.actionAt + ' · 版本 ' + input.version,
|
|
40
|
+
exception: LOG_EXCEPTION,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/** 三格式入参:`payload` 那一份数据 → 三种格式各算一份 + 菜单提示(envelope 由本件建,见件头)。 */
|
|
44
|
+
function formatsOf(input, envelope) {
|
|
45
|
+
const rest = {
|
|
46
|
+
...(input.dataTitle === undefined ? {} : { title: input.dataTitle }),
|
|
47
|
+
...(input.occurredAt === undefined ? {} : { occurredAt: input.occurredAt }),
|
|
48
|
+
};
|
|
49
|
+
return {
|
|
50
|
+
text: buildDataText({ ...rest, envelope, format: 'text' }),
|
|
51
|
+
json: buildDataText({ ...rest, envelope, format: 'json' }),
|
|
52
|
+
csv: buildDataText({ ...rest, envelope, format: 'csv' }),
|
|
53
|
+
hints: MENU_HINTS,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/** 复制区:数据位恒出三格式菜单(纯文本/JSON/CSV 三选一);日志位给了就出六段。
|
|
57
|
+
*
|
|
58
|
+
* **本区不落屏 `title`**(#906,2026-09-22 人滚墙后裁):`title` 说的是「这一区装的是哪一份文本」
|
|
59
|
+
* (`复制与留档`/`复制初始化结果`/`复制初始化 prompt`/`复制给 AI` 四种字面),原先透传给公共层,
|
|
60
|
+
* 由 `renderCopyBlock` 渲染成按钮**正上方**那行 `<h2 class="ilife-block-copy-block-title">`。
|
|
61
|
+
* 实测那样等于同一件事印两遍:紧挨着的按钮自己写着「复制数据」/「复制日志」,
|
|
62
|
+
* 页内导航(`.ilife-block-toc`)也拿同一串字当锚点名(61 页里 50 页如此)。
|
|
63
|
+
* 故这里**只收声明、不上屏**:`title` 字段与 30 处调用点原样保留,将来公共层若要把它渲染到别处
|
|
64
|
+
* (如页头或工具条的说明位),一处接线即生效。
|
|
65
|
+
*
|
|
66
|
+
* 为什么不在公共层 `renderCopyBlock` 上删:那一支是六家技能共用的件(卡路里/备忘录/居家都印这行标题),
|
|
67
|
+
* 删它会顺带改掉别家的产物;本票只治作息这一家,公共层一字不动。 */
|
|
68
|
+
export function scheduleCopyArea(input) {
|
|
69
|
+
const envelope = buildScheduleEnvelope(input.key, input.payload);
|
|
70
|
+
const log = input.log;
|
|
71
|
+
return renderCopyBlock({
|
|
72
|
+
dataFormats: formatsOf(input, envelope),
|
|
73
|
+
...(input.dataActionId === undefined ? {} : { dataActionId: input.dataActionId }),
|
|
74
|
+
...(log === undefined ? {} : {
|
|
75
|
+
logText: buildLogText({ envelope, copyLog: log }),
|
|
76
|
+
...(input.logActionId === undefined ? {} : { logActionId: input.logActionId }),
|
|
77
|
+
}),
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=copyArea.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copyArea.js","sourceRoot":"","sources":["../../src/render/copyArea.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,EAAE;AACF,2DAA2D;AAC3D,4EAA4E;AAC5E,0DAA0D;AAC1D,qEAAqE;AACrE,0EAA0E;AAC1E,4BAA4B;AAC5B,gFAAgF;AAChF,0DAA0D;AAC1D,oFAAoF;AACpF,EAAE;AACF,0EAA0E;AAC1E,qDAAqD;AACrD,4EAA4E;AAC5E,kEAAkE;AAClE,4DAA4D;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAExD,6CAA6C;AAC7C,MAAM,YAAY,GAAG,qBAAqB,CAAC;AAC3C,4BAA4B;AAC5B,MAAM,aAAa,GAAG,GAAG,CAAC;AAE1B,uDAAuD;AACvD,MAAM,UAAU,GAAsB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AA6CnD,yDAAyD;AACzD,MAAM,UAAU,gBAAgB,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE;IAC7C,MAAM,CAAC,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC5D,OAAO,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;AACxJ,CAAC;AAED,6CAA6C;AAC7C,MAAM,UAAU,eAAe,CAAC,KAA2B;IACzD,OAAO;QACL,QAAQ,EAAE,YAAY;QACtB,aAAa,EAAE,mBAAmB,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;QACpH,SAAS,EAAE,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC,MAAM;QACnH,SAAS,EAAE,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC,OAAO;QAC3H,SAAS,EAAE,aAAa;KACzB,CAAC;AACJ,CAAC;AAED,kEAAkE;AAClE,SAAS,SAAS,CAAC,KAA4B,EAAE,QAA8B;IAM7E,MAAM,IAAI,GAAG;QACX,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;QACpE,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;KAC5E,CAAC;IACF,OAAO;QACL,IAAI,EAAE,aAAa,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC1D,IAAI,EAAE,aAAa,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC1D,GAAG,EAAE,aAAa,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QACxD,KAAK,EAAE,UAAU;KAClB,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;sCAWsC;AACtC,MAAM,UAAU,gBAAgB,CAAC,KAA4B;IAC3D,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAoC,CAAC;IACpG,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC;IACtB,OAAO,eAAe,CAAC;QACrB,WAAW,EAAE,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC;QACvC,GAAG,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,CAAC;QACjF,GAAG,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3B,OAAO,EAAE,YAAY,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;YACjD,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;SAC/E,CAAC;KACH,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/render/html.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/render/html.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI/C,eAAO,MAAM,uBAAuB,QAAa,CAAC;AAElD,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5C;AA2BD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CAexD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAA4C;AAG/F,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAA0B,GAAG,IAAI,CAIhF"}
|
package/dist/render/html.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { completionLabelOf } from '../policy/plan.js';
|
|
1
2
|
import { ScheduleRenderError } from './errors.js';
|
|
2
3
|
export const SCHEDULE_HTML_MAX_BYTES = 256 * 1024;
|
|
3
4
|
export function escapeHtml(s) {
|
|
@@ -14,7 +15,8 @@ function recordItemHtml(n) {
|
|
|
14
15
|
function planItemHtml(n) {
|
|
15
16
|
const time = escapeHtml(String(n.time ?? ''));
|
|
16
17
|
const title = escapeHtml(String(n.title ?? ''));
|
|
17
|
-
|
|
18
|
+
// #894 · 上屏走全角映射(载荷里的 completion 原值不动,只换这一层)。
|
|
19
|
+
const done = n.completion ? ' <span class="done">' + escapeHtml(completionLabelOf(String(n.completion))) + '</span>' : '';
|
|
18
20
|
const sync = n.synced ? ' <span class="sync">☁</span>' : '';
|
|
19
21
|
return '<div class="item"><div class="item-head"><span class="time">' + time + '</span></div><div class="content">' + title + done + sync + '</div></div>';
|
|
20
22
|
}
|
package/dist/render/html.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/render/html.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,GAAG,IAAI,CAAC;AAElD,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC7H,CAAC;AAED,SAAS,cAAc,CAAC,CAA0B;IAChD,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;IACjD,OAAO,8DAA8D,GAAG,IAAI,GAAG,6BAA6B,GAAG,KAAK,GAAG,GAAG,GAAG,2BAA2B,GAAG,GAAG,GAAG,oCAAoC,GAAG,GAAG,GAAG,cAAc,CAAC;AAC/N,CAAC;AAED,SAAS,YAAY,CAAC,CAA0B;IAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,sBAAsB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/render/html.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,GAAG,IAAI,CAAC;AAElD,MAAM,UAAU,UAAU,CAAC,CAAS;IAClC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC7H,CAAC;AAED,SAAS,cAAc,CAAC,CAA0B;IAChD,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;IACjD,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;IACjD,OAAO,8DAA8D,GAAG,IAAI,GAAG,6BAA6B,GAAG,KAAK,GAAG,GAAG,GAAG,2BAA2B,GAAG,GAAG,GAAG,oCAAoC,GAAG,GAAG,GAAG,cAAc,CAAC;AAC/N,CAAC;AAED,SAAS,YAAY,CAAC,CAA0B;IAC9C,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;IAChD,8CAA8C;IAC9C,MAAM,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,sBAAsB,GAAG,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1H,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,OAAO,8DAA8D,GAAG,IAAI,GAAG,oCAAoC,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,cAAc,CAAC;AAC7J,CAAC;AAED,SAAS,QAAQ,CAAC,KAAgB,EAAE,GAAW;IAC7C,IAAI,CAAC,KAAK,CAAC,MAAM;QAAE,OAAO,kCAAkC,CAAC;IAC7D,MAAM,EAAE,GAAG,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,CAAC;IAC5E,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAA4B,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,kBAAkB,CAAC,GAAa;IAC9C,MAAM,IAAI,GAAG,6CAA6C,GAAG,GAAG,CAAC,KAAK,GAAG,cAAc,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACrH,MAAM,CAAC,GAAG,GAAG,CAAC,IAA+B,CAAC;IAC9C,QAAQ,GAAG,CAAC,KAAK,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,CAAC,OAAO,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAkB,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;QAClF,KAAK,QAAQ,CAAC,CAAC,OAAO,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,IAA+B,CAAC,GAAG,YAAY,CAAC;QAC9F,KAAK,SAAS,CAAC,CAAC,OAAO,IAAI,GAAG,uBAAuB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,kBAAkB,CAAC;QAC3G,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAA2B,CAAC,CAAC;YACzE,OAAO,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,uBAAuB,GAAG,CAAC,GAAG,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC;QAC3I,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,OAAO,IAAI,GAAG,wBAAwB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,kBAAkB,CAAC;QACpI,KAAK,UAAU,CAAC,CAAC,OAAO,IAAI,GAAG,yBAAyB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,kBAAkB,CAAC;QAC7G,OAAO,CAAC,CAAC,MAAM,IAAI,mBAAmB,CAAC,yBAAyB,EAAE,SAAS,GAAG,MAAM,CAAE,GAA2B,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5H,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,IAAY,OAAO,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AAE/F,4CAA4C;AAC5C,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,GAAG,GAAG,uBAAuB;IACxE,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;QAC9B,MAAM,IAAI,mBAAmB,CAAC,yBAAyB,EAAE,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,CAAC;IAC5G,CAAC;AACH,CAAC"}
|
package/dist/render/index.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
export { ScheduleRenderError } from './errors.js';
|
|
2
2
|
export { SCHEDULE_KEY_SHAPES, scheduleShapeFor, buildScheduleEnvelope, parseScheduleEnvelope } from './envelope.js';
|
|
3
|
+
/** #887 复制区共用件(三格式菜单+六段日志):页型的复制区只经这一只,技能侧不搓按钮。 */
|
|
4
|
+
export { scheduleCopyArea, scheduleCopyLog, scheduleNowStamp } from './copyArea.js';
|
|
5
|
+
export type { ScheduleCopyAreaInput, ScheduleCopyLogInput } from './copyArea.js';
|
|
3
6
|
export { toRecordItem, buildRecordToday, buildRecordRange, buildRecordDetail, buildRecordReceipt, buildRecordCompare, buildCategoryDeep, buildAnomaly, toPlanItem, buildPlanToday, buildPlanReceipt, buildHelpItems, HELP_EMPTY_HINT, } from './views.js';
|
|
4
7
|
export type { RecordItem, PlanItem, HelpItem } from './views.js';
|
|
5
8
|
export { SCHEDULE_HTML_MAX_BYTES, escapeHtml, renderEnvelopeHtml, estimateBytes, assertHtmlSize, } from './html.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACpH,OAAO,EACL,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,kBAAkB,EACvF,kBAAkB,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAC/E,gBAAgB,EAAE,cAAc,EAAE,eAAe,GAClD,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EACL,uBAAuB,EAAE,UAAU,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,GACvF,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC/E,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACpH,mDAAmD;AACnD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACpF,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACjF,OAAO,EACL,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,kBAAkB,EACvF,kBAAkB,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAC/E,gBAAgB,EAAE,cAAc,EAAE,eAAe,GAClD,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EACL,uBAAuB,EAAE,UAAU,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,GACvF,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC/E,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/render/index.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { ScheduleRenderError } from './errors.js';
|
|
2
2
|
export { SCHEDULE_KEY_SHAPES, scheduleShapeFor, buildScheduleEnvelope, parseScheduleEnvelope } from './envelope.js';
|
|
3
|
+
/** #887 复制区共用件(三格式菜单+六段日志):页型的复制区只经这一只,技能侧不搓按钮。 */
|
|
4
|
+
export { scheduleCopyArea, scheduleCopyLog, scheduleNowStamp } from './copyArea.js';
|
|
3
5
|
export { toRecordItem, buildRecordToday, buildRecordRange, buildRecordDetail, buildRecordReceipt, buildRecordCompare, buildCategoryDeep, buildAnomaly, toPlanItem, buildPlanToday, buildPlanReceipt, buildHelpItems, HELP_EMPTY_HINT, } from './views.js';
|
|
4
6
|
export { SCHEDULE_HTML_MAX_BYTES, escapeHtml, renderEnvelopeHtml, estimateBytes, assertHtmlSize, } from './html.js';
|
|
5
7
|
// 共用位(定义地在 src/shared/templateFill.ts):转发保留,快照门读本文件的导出。
|
package/dist/render/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACpH,OAAO,EACL,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,kBAAkB,EACvF,kBAAkB,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAC/E,gBAAgB,EAAE,cAAc,EAAE,eAAe,GAClD,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,uBAAuB,EAAE,UAAU,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,GACvF,MAAM,WAAW,CAAC;AACnB,wDAAwD;AACxD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/render/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACpH,mDAAmD;AACnD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEpF,OAAO,EACL,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,kBAAkB,EACvF,kBAAkB,EAAE,iBAAiB,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAC/E,gBAAgB,EAAE,cAAc,EAAE,eAAe,GAClD,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,uBAAuB,EAAE,UAAU,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,GACvF,MAAM,WAAW,CAAC;AACnB,wDAAwD;AACxD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/** #782 · 「今天总结」的**页型配方**(形状维度的唯一定义地)。
|
|
2
|
+
*
|
|
3
|
+
* 形状=人裁过的 **B · 时间轴主轴**(票面 [#782](https://github.com/FeatherHunter/ilife/issues/782),
|
|
4
|
+
* 裁决原文 `B A A`,见 `docs/skills/skill-schedule/t782-形状-证据.md` 第六节):
|
|
5
|
+
*
|
|
6
|
+
* 结论条 → 24 小时色带(放大)→ 一行事实条(四卡摘要压成一行)→ 竖向时间轴逐条
|
|
7
|
+
* → 睡眠统计 → 折叠「分类进度」→ 作息库现状 → 复制区
|
|
8
|
+
*
|
|
9
|
+
* 老侧 f01「作息记录·单日」的四个必现块一块不少,只是换了骨架与主次:**4 卡摘要**落成一行事实条、
|
|
10
|
+
* **分类进度**收进折叠区、**24h 时间轴**由色带 + 时间轴条两件一起承担、**睡眠统计**是它自己那一行。
|
|
11
|
+
*
|
|
12
|
+
* #784 补的一处(老侧这一样没上过屏,不是「形」的改动):
|
|
13
|
+
* · **作息库现状**(`status`,可选):老侧 `status` 子命令的五条状态在页上占一条事实条
|
|
14
|
+
* (今天之前这些读数只写进 stderr,用户看不到)。
|
|
15
|
+
* 不给时,产出与 #782 那张页**逐字节相同**(件序列与位置一处未动)。
|
|
16
|
+
*
|
|
17
|
+
* **本件只认形状,不认口径**:进来的是摆好的数据(谁的时长、哪一类的色,都由 `query` 侧算好),
|
|
18
|
+
* 出去的是 HTML 串。域票要出这一页,只许调本函数——骨架不许各域自造。
|
|
19
|
+
*
|
|
20
|
+
* #891 补的**页内定位**(不动件序列,只给已有的段名加锚点与页首目录):本页的**小节**=页内
|
|
21
|
+
* `<h2>` 段名所领的那一段,共 3 颗(`24 小时时间轴`/`作息库现状`/`复制与留档`;`status` 不给时
|
|
22
|
+
* 只剩 2 颗 ⇒ 按 `pageNav` 的长页判据 **≤2 小节判为短页**,页首不出目录)。判据与目录装配的唯一
|
|
23
|
+
* 一处定义地在 `./pageNav.ts`(`SECTION_TOC_MIN`)。
|
|
24
|
+
*/
|
|
25
|
+
import { type DistributionRowInput, type ListRowInput } from 'base-paint/blocks';
|
|
26
|
+
import { type FactItemInput } from 'base-paint';
|
|
27
|
+
import { type ScheduleCopyAreaInput } from '../render/copyArea.js';
|
|
28
|
+
import { type PageHead } from './docPage.js';
|
|
29
|
+
import { type HourCell } from './pageParts.js';
|
|
30
|
+
/** 「今天总结」一页要的全部东西(10 个字段,口径都在调用方)。 */
|
|
31
|
+
export interface DayPageData {
|
|
32
|
+
readonly head: PageHead;
|
|
33
|
+
/** 24 小时色带要的 24 格。 */
|
|
34
|
+
readonly cells: readonly HourCell[];
|
|
35
|
+
/** 色带配色与图例的顺序(一级分类的权威顺序,由调用方从 `policy` 取)。 */
|
|
36
|
+
readonly order: readonly string[];
|
|
37
|
+
/** 结论条那一句。 */
|
|
38
|
+
readonly conclusion: string;
|
|
39
|
+
/** 一行事实条:老侧「4 卡摘要」的四个读数。 */
|
|
40
|
+
readonly facts: readonly FactItemInput[];
|
|
41
|
+
/** 竖向时间轴:这一天逐条记录。**行列表三槽**(`left` 时间/`main` 做了什么/`right` 时长)。 */
|
|
42
|
+
readonly timeline: readonly ListRowInput[];
|
|
43
|
+
/** 睡眠统计那一行。 */
|
|
44
|
+
readonly sleep: readonly FactItemInput[];
|
|
45
|
+
/** 分类进度(收在折叠区里)。 */
|
|
46
|
+
readonly distribution: readonly DistributionRowInput[];
|
|
47
|
+
/** 复制区载荷(#887):数据位=一条真命令的 key + 该 key 形状的载荷;日志位=那趟的 2–6 段。 */
|
|
48
|
+
readonly copy: ScheduleCopyAreaInput;
|
|
49
|
+
/** **作息库现状**(可选;不给=这一块不出):老侧 `status` 子命令那几条读数。
|
|
50
|
+
* `title` 只能是这一块的段落名(`作息库现状`),**不是页头**——页头住在 `head` 里。 */
|
|
51
|
+
readonly status?: {
|
|
52
|
+
readonly title: string;
|
|
53
|
+
readonly items: readonly FactItemInput[];
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/** 出「今天总结」整页。 */
|
|
57
|
+
export declare function renderDayPage(data: DayPageData): string;
|
|
58
|
+
/** **作息库现状**那一段的装配(今天总结页与时间轴页共用一处,两页的说法不各写一遍)。
|
|
59
|
+
*
|
|
60
|
+
* 段落名走 `heat-title` 这个公共层已有的段名类(「周视图」那张页的矩阵段名也用它),
|
|
61
|
+
* 读数走页面级事实条——**不新造类名、不新添 CSS**,所以共用位这一份仍只认形状。
|
|
62
|
+
* 不给 `status`(或条目为空)=空串,页上不留空块。 */
|
|
63
|
+
export declare function renderStatusBlock(status: {
|
|
64
|
+
readonly title: string;
|
|
65
|
+
readonly items: readonly FactItemInput[];
|
|
66
|
+
} | undefined): string;
|
|
67
|
+
//# sourceMappingURL=dayPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dayPage.d.ts","sourceRoot":"","sources":["../../src/shared/dayPage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAEL,KAAK,oBAAoB,EAAE,KAAK,YAAY,EAC7C,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,EAAiC,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE9E,sCAAsC;AACtC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,sBAAsB;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,CAAC;IACpC,8CAA8C;IAC9C,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,cAAc;IACd,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,4BAA4B;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,eAAe;IACf,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,oBAAoB;IACpB,QAAQ,CAAC,YAAY,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACvD,8DAA8D;IAC9D,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;IACrC;+DAC2D;IAC3D,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAA;KAAE,CAAC;CACxF;AAED,iBAAiB;AACjB,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CA+BvD;AAOD;;;;oCAIoC;AACpC,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAA;CAAE,GAAG,SAAS,GACvF,MAAM,CAGR"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/** #782 · 「今天总结」的**页型配方**(形状维度的唯一定义地)。
|
|
2
|
+
*
|
|
3
|
+
* 形状=人裁过的 **B · 时间轴主轴**(票面 [#782](https://github.com/FeatherHunter/ilife/issues/782),
|
|
4
|
+
* 裁决原文 `B A A`,见 `docs/skills/skill-schedule/t782-形状-证据.md` 第六节):
|
|
5
|
+
*
|
|
6
|
+
* 结论条 → 24 小时色带(放大)→ 一行事实条(四卡摘要压成一行)→ 竖向时间轴逐条
|
|
7
|
+
* → 睡眠统计 → 折叠「分类进度」→ 作息库现状 → 复制区
|
|
8
|
+
*
|
|
9
|
+
* 老侧 f01「作息记录·单日」的四个必现块一块不少,只是换了骨架与主次:**4 卡摘要**落成一行事实条、
|
|
10
|
+
* **分类进度**收进折叠区、**24h 时间轴**由色带 + 时间轴条两件一起承担、**睡眠统计**是它自己那一行。
|
|
11
|
+
*
|
|
12
|
+
* #784 补的一处(老侧这一样没上过屏,不是「形」的改动):
|
|
13
|
+
* · **作息库现状**(`status`,可选):老侧 `status` 子命令的五条状态在页上占一条事实条
|
|
14
|
+
* (今天之前这些读数只写进 stderr,用户看不到)。
|
|
15
|
+
* 不给时,产出与 #782 那张页**逐字节相同**(件序列与位置一处未动)。
|
|
16
|
+
*
|
|
17
|
+
* **本件只认形状,不认口径**:进来的是摆好的数据(谁的时长、哪一类的色,都由 `query` 侧算好),
|
|
18
|
+
* 出去的是 HTML 串。域票要出这一页,只许调本函数——骨架不许各域自造。
|
|
19
|
+
*
|
|
20
|
+
* #891 补的**页内定位**(不动件序列,只给已有的段名加锚点与页首目录):本页的**小节**=页内
|
|
21
|
+
* `<h2>` 段名所领的那一段,共 3 颗(`24 小时时间轴`/`作息库现状`/`复制与留档`;`status` 不给时
|
|
22
|
+
* 只剩 2 颗 ⇒ 按 `pageNav` 的长页判据 **≤2 小节判为短页**,页首不出目录)。判据与目录装配的唯一
|
|
23
|
+
* 一处定义地在 `./pageNav.ts`(`SECTION_TOC_MIN`)。
|
|
24
|
+
*/
|
|
25
|
+
import { renderConclusionBar, renderDisclosure, renderDistributionRows, renderListRows, } from 'base-paint/blocks';
|
|
26
|
+
import { renderFactStrip } from 'base-paint';
|
|
27
|
+
import { scheduleCopyArea } from '../render/copyArea.js';
|
|
28
|
+
import { assembleDocPage } from './docPage.js';
|
|
29
|
+
import { pageSections } from './pageNav.js';
|
|
30
|
+
import { categoryColor, renderHourBand } from './pageParts.js';
|
|
31
|
+
/** 出「今天总结」整页。 */
|
|
32
|
+
export function renderDayPage(data) {
|
|
33
|
+
// 每一段两件:`navText` 给了=这一段是**小节**(进页内目录、包一层带 `id` 的 `<section>`);
|
|
34
|
+
// 不给=不是小节(原样透传)。目录项与段名只在本清单里写一份(见 `./pageNav.ts` 的件头)。
|
|
35
|
+
const { toc, body } = pageSections([
|
|
36
|
+
{ html: renderConclusionBar(data.conclusion) },
|
|
37
|
+
// 段名是「24 小时时间轴」(图表块自己那颗 `<h2>`);目录项逐字用它。
|
|
38
|
+
{ navText: '24 小时时间轴', html: renderHourBand(data.cells, { order: data.order, title: '24 小时时间轴', height: 140 }) },
|
|
39
|
+
{ html: renderFactStrip({ items: data.facts }) },
|
|
40
|
+
{ html: renderListRows({ items: data.timeline, emptyText: '这一天还没有记录' }) },
|
|
41
|
+
{ html: renderFactStrip({ items: data.sleep }) },
|
|
42
|
+
{
|
|
43
|
+
html: renderDisclosure({
|
|
44
|
+
title: '分类进度(一级分类分布)',
|
|
45
|
+
// 分布行按名上色(与色带/矩阵同一算式):不给色就一律落 `--blue`,七条一样看不出分别。
|
|
46
|
+
contentHtml: renderDistributionRows({
|
|
47
|
+
rows: data.distribution.map((row) => ({ ...row, color: categoryColor(row.label, data.order) })),
|
|
48
|
+
}),
|
|
49
|
+
}),
|
|
50
|
+
},
|
|
51
|
+
{ navText: statusNavText(data.status), html: renderStatusBlock(data.status) },
|
|
52
|
+
{
|
|
53
|
+
navText: '复制与留档',
|
|
54
|
+
html: scheduleCopyArea({
|
|
55
|
+
title: '复制与留档',
|
|
56
|
+
dataActionId: 'ilife-sch-day-copy-data',
|
|
57
|
+
logActionId: 'ilife-sch-day-copy-log',
|
|
58
|
+
...data.copy,
|
|
59
|
+
}),
|
|
60
|
+
},
|
|
61
|
+
]);
|
|
62
|
+
return assembleDocPage({ head: data.head, content: toc + body });
|
|
63
|
+
}
|
|
64
|
+
/** **作息库现状**那一段的段名(页内目录与段名一处派生:不给这一段就不占目录条目)。 */
|
|
65
|
+
function statusNavText(status) {
|
|
66
|
+
return status === undefined || status.items.length === 0 ? '' : status.title;
|
|
67
|
+
}
|
|
68
|
+
/** **作息库现状**那一段的装配(今天总结页与时间轴页共用一处,两页的说法不各写一遍)。
|
|
69
|
+
*
|
|
70
|
+
* 段落名走 `heat-title` 这个公共层已有的段名类(「周视图」那张页的矩阵段名也用它),
|
|
71
|
+
* 读数走页面级事实条——**不新造类名、不新添 CSS**,所以共用位这一份仍只认形状。
|
|
72
|
+
* 不给 `status`(或条目为空)=空串,页上不留空块。 */
|
|
73
|
+
export function renderStatusBlock(status) {
|
|
74
|
+
if (status === undefined || status.items.length === 0)
|
|
75
|
+
return '';
|
|
76
|
+
return '<h2 class="heat-title">' + escText(status.title) + '</h2>' + renderFactStrip({ items: status.items });
|
|
77
|
+
}
|
|
78
|
+
/** 五字符转义(与公共层同口径;本件只为上面那个段落名用一次)。 */
|
|
79
|
+
function escText(value) {
|
|
80
|
+
return value.replace(/[&<>"']/g, (ch) => {
|
|
81
|
+
if (ch === '&')
|
|
82
|
+
return '&';
|
|
83
|
+
if (ch === '<')
|
|
84
|
+
return '<';
|
|
85
|
+
if (ch === '>')
|
|
86
|
+
return '>';
|
|
87
|
+
if (ch === '"')
|
|
88
|
+
return '"';
|
|
89
|
+
return ''';
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=dayPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dayPage.js","sourceRoot":"","sources":["../../src/shared/dayPage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/** #786 · 「作息详情」(单条记录)的**页型配方**(形状维度的唯一定义地)。
|
|
2
|
+
*
|
|
3
|
+
* 为什么新立一张(接手 `出页交接-页型配方怎么用.md` §一的口径):老侧 f06「单条详情」这一族
|
|
4
|
+
* 在 #782 那一轮没有冻骨架(那一轮只裁了三张:今天总结/查日程/周视图),交接件写着「其余 15 个家族
|
|
5
|
+
* 出页前先把骨架与件序列定下来」——这里是本票定的那一份,别的域不许各造一份。
|
|
6
|
+
*
|
|
7
|
+
* 形状=件序列(照老侧 f06 的必现块摆位,一块不少):
|
|
8
|
+
*
|
|
9
|
+
* 读数卡 → 结论条 → 逐条详情(段名 + 字段事实条 + AI 推理链那一段)→ 复制区
|
|
10
|
+
*
|
|
11
|
+
* 老侧 f06 的两个必现块:**每条 11 字段全展开**=每个字段都上台面(老侧 `render_records_detail`
|
|
12
|
+
* 自己写的 11 个字段:id/date/time_start/time_end/duration_minutes/activity/category/
|
|
13
|
+
* source_contents/source_timestamps/analysis_reasoning/created_at;老侧页把前十个摆成字段格、
|
|
14
|
+
* 后一个摆成「人工智能推理链」那一段,本件同一分工)、**analysis_reasoning 完整展示**=它自己那一段的
|
|
15
|
+
* 正文(不截断、不折进键值行;空的那一条写「(无)」,与老侧页同一个写法)。老侧「100% 字段暴露原则」
|
|
16
|
+
* 说的就是这件事。
|
|
17
|
+
*
|
|
18
|
+
* **本件只认形状,不认口径**:字段怎么取、缺失写什么、段名怎么拼,都由 `query` 侧算好再进来
|
|
19
|
+
* (与 `rangePage.ts`/`overviewPage.ts` 同一分工)。件序列**不随数据多寡变形**:
|
|
20
|
+
* 按日查(N 条)与按 ID 查(1 条)走同一套,一条也走这一套。
|
|
21
|
+
*
|
|
22
|
+
* #891 补的**页内定位**(不动件序列):小节=每条记录的段名 + 它那颗「AI 推理链」+ 复制区。
|
|
23
|
+
* 按 `./pageNav.ts` 的长页判据(小节数 ≥ `SECTION_TOC_MIN`):按 ID 查=3 小节(长页,出目录);
|
|
24
|
+
* 按日查=「2 × 条数 + 1」小节(长页)。
|
|
25
|
+
*/
|
|
26
|
+
import { type KpiCardInput } from 'base-paint/blocks';
|
|
27
|
+
import { type FactItemInput } from 'base-paint';
|
|
28
|
+
import { type ScheduleCopyAreaInput } from '../render/copyArea.js';
|
|
29
|
+
import { type PageHead } from './docPage.js';
|
|
30
|
+
/** 一条记录在页上的一段(段名 + 字段 + 推理链)。 */
|
|
31
|
+
export interface RecordDetailItem {
|
|
32
|
+
/** 段名(记录号、日期、起止与活动,调用方拼好)。 */
|
|
33
|
+
readonly title: string;
|
|
34
|
+
/** 这一段的**短名**(页内目录的条目文本):只写记录号那一截,日期与起止留在大段名上
|
|
35
|
+
* (口径见 `./pageNav.ts` 的件头)。 */
|
|
36
|
+
readonly navText: string;
|
|
37
|
+
/** 这一条除 `analysis_reasoning` 以外的字段(老侧那一套;空值写「无」,由调用方定)。 */
|
|
38
|
+
readonly fields: readonly FactItemInput[];
|
|
39
|
+
/** `analysis_reasoning` **全文**(老侧那 11 个字段里的第 11 个):空的那一条写「(无)」,
|
|
40
|
+
* 与老侧页同一个写法——**这一段恒在**,字段还是 11 个,不因缺内容少一块。 */
|
|
41
|
+
readonly reasoning: string;
|
|
42
|
+
}
|
|
43
|
+
/** 「作息详情」一页要的全部东西(6 个字段)。 */
|
|
44
|
+
export interface DetailPageData {
|
|
45
|
+
readonly head: PageHead;
|
|
46
|
+
/** 读数卡(记录条数/覆盖时长/带推理链/一级分类数)。 */
|
|
47
|
+
readonly kpis: readonly KpiCardInput[];
|
|
48
|
+
readonly conclusion: string;
|
|
49
|
+
/** 逐条详情:一条一段,顺序即调用方给的顺序。 */
|
|
50
|
+
readonly records: readonly RecordDetailItem[];
|
|
51
|
+
readonly copy: ScheduleCopyAreaInput;
|
|
52
|
+
}
|
|
53
|
+
/** 出「作息详情」整页。 */
|
|
54
|
+
export declare function renderDetailPage(data: DetailPageData): string;
|
|
55
|
+
//# sourceMappingURL=detailPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detailPage.d.ts","sourceRoot":"","sources":["../../src/shared/detailPage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAG9D,iCAAiC;AACjC,MAAM,WAAW,gBAAgB;IAC/B,8BAA8B;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;oCACgC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IAC1C;mDAC+C;IAC/C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,6BAA6B;AAC7B,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,iCAAiC;IACjC,QAAQ,CAAC,IAAI,EAAE,SAAS,YAAY,EAAE,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,4BAA4B;IAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC9C,QAAQ,CAAC,IAAI,EAAE,qBAAqB,CAAC;CACtC;AAED,iBAAiB;AACjB,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAkB7D"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/** #786 · 「作息详情」(单条记录)的**页型配方**(形状维度的唯一定义地)。
|
|
2
|
+
*
|
|
3
|
+
* 为什么新立一张(接手 `出页交接-页型配方怎么用.md` §一的口径):老侧 f06「单条详情」这一族
|
|
4
|
+
* 在 #782 那一轮没有冻骨架(那一轮只裁了三张:今天总结/查日程/周视图),交接件写着「其余 15 个家族
|
|
5
|
+
* 出页前先把骨架与件序列定下来」——这里是本票定的那一份,别的域不许各造一份。
|
|
6
|
+
*
|
|
7
|
+
* 形状=件序列(照老侧 f06 的必现块摆位,一块不少):
|
|
8
|
+
*
|
|
9
|
+
* 读数卡 → 结论条 → 逐条详情(段名 + 字段事实条 + AI 推理链那一段)→ 复制区
|
|
10
|
+
*
|
|
11
|
+
* 老侧 f06 的两个必现块:**每条 11 字段全展开**=每个字段都上台面(老侧 `render_records_detail`
|
|
12
|
+
* 自己写的 11 个字段:id/date/time_start/time_end/duration_minutes/activity/category/
|
|
13
|
+
* source_contents/source_timestamps/analysis_reasoning/created_at;老侧页把前十个摆成字段格、
|
|
14
|
+
* 后一个摆成「人工智能推理链」那一段,本件同一分工)、**analysis_reasoning 完整展示**=它自己那一段的
|
|
15
|
+
* 正文(不截断、不折进键值行;空的那一条写「(无)」,与老侧页同一个写法)。老侧「100% 字段暴露原则」
|
|
16
|
+
* 说的就是这件事。
|
|
17
|
+
*
|
|
18
|
+
* **本件只认形状,不认口径**:字段怎么取、缺失写什么、段名怎么拼,都由 `query` 侧算好再进来
|
|
19
|
+
* (与 `rangePage.ts`/`overviewPage.ts` 同一分工)。件序列**不随数据多寡变形**:
|
|
20
|
+
* 按日查(N 条)与按 ID 查(1 条)走同一套,一条也走这一套。
|
|
21
|
+
*
|
|
22
|
+
* #891 补的**页内定位**(不动件序列):小节=每条记录的段名 + 它那颗「AI 推理链」+ 复制区。
|
|
23
|
+
* 按 `./pageNav.ts` 的长页判据(小节数 ≥ `SECTION_TOC_MIN`):按 ID 查=3 小节(长页,出目录);
|
|
24
|
+
* 按日查=「2 × 条数 + 1」小节(长页)。
|
|
25
|
+
*/
|
|
26
|
+
import { renderConclusionBar, renderKpiGrid, renderProseBlock, } from 'base-paint/blocks';
|
|
27
|
+
import { renderFactStrip } from 'base-paint';
|
|
28
|
+
import { scheduleCopyArea } from '../render/copyArea.js';
|
|
29
|
+
import { assembleDocPage } from './docPage.js';
|
|
30
|
+
import { pageSections } from './pageNav.js';
|
|
31
|
+
/** 出「作息详情」整页。 */
|
|
32
|
+
export function renderDetailPage(data) {
|
|
33
|
+
const { toc, body } = pageSections([
|
|
34
|
+
{ html: renderKpiGrid(data.kpis) },
|
|
35
|
+
{ html: renderConclusionBar(data.conclusion) },
|
|
36
|
+
// 一条记录=两小节(记录那一段 + 它的「AI 推理链」):段名与从它派生的目录条目写在同一处。
|
|
37
|
+
...data.records.flatMap((rec) => [
|
|
38
|
+
{ navText: rec.navText, html: '<h2 class="heat-title">' + escText(rec.title) + '</h2>'
|
|
39
|
+
+ renderFactStrip({ items: rec.fields }) },
|
|
40
|
+
{ navText: 'AI 推理链', html: '<h2 class="heat-title">AI 推理链</h2>' + renderProseBlock({ text: rec.reasoning }) },
|
|
41
|
+
]),
|
|
42
|
+
{ navText: '复制与留档', html: scheduleCopyArea({
|
|
43
|
+
title: '复制与留档',
|
|
44
|
+
dataActionId: 'ilife-sch-detail-copy-data',
|
|
45
|
+
logActionId: 'ilife-sch-detail-copy-log',
|
|
46
|
+
...data.copy,
|
|
47
|
+
}) },
|
|
48
|
+
]);
|
|
49
|
+
return assembleDocPage({ head: data.head, content: toc + body });
|
|
50
|
+
}
|
|
51
|
+
/** 五字符转义(与公共层同口径;本件只为段名用一次,与 `dayPage.ts` 那一处同法)。 */
|
|
52
|
+
function escText(value) {
|
|
53
|
+
return value.replace(/[&<>"']/g, (ch) => {
|
|
54
|
+
if (ch === '&')
|
|
55
|
+
return '&';
|
|
56
|
+
if (ch === '<')
|
|
57
|
+
return '<';
|
|
58
|
+
if (ch === '>')
|
|
59
|
+
return '>';
|
|
60
|
+
if (ch === '"')
|
|
61
|
+
return '"';
|
|
62
|
+
return ''';
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=detailPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detailPage.js","sourceRoot":"","sources":["../../src/shared/detailPage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,EACL,mBAAmB,EAAE,aAAa,EAAE,gBAAgB,GAErD,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,eAAe,EAAsB,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAA8B,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAAE,eAAe,EAAiB,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AA2B5C,iBAAiB;AACjB,MAAM,UAAU,gBAAgB,CAAC,IAAoB;IACnD,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC;QACjC,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAClC,EAAE,IAAI,EAAE,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;QAC9C,kDAAkD;QAClD,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;YAC/B,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,OAAO;sBAClF,eAAe,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;YAC5C,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,oCAAoC,GAAG,gBAAgB,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC,EAAE;SAC9G,CAAC;QACF,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,CAAC;gBACzC,KAAK,EAAE,OAAO;gBACd,YAAY,EAAE,4BAA4B;gBAC1C,WAAW,EAAE,2BAA2B;gBACxC,GAAG,IAAI,CAAC,IAAI;aACb,CAAC,EAAE;KACL,CAAC,CAAC;IACH,OAAO,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC;AACnE,CAAC;AAED,qDAAqD;AACrD,SAAS,OAAO,CAAC,KAAa;IAC5B,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE;QACtC,IAAI,EAAE,KAAK,GAAG;YAAE,OAAO,OAAO,CAAC;QAC/B,IAAI,EAAE,KAAK,GAAG;YAAE,OAAO,MAAM,CAAC;QAC9B,IAAI,EAAE,KAAK,GAAG;YAAE,OAAO,MAAM,CAAC;QAC9B,IAAI,EAAE,KAAK,GAAG;YAAE,OAAO,QAAQ,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** 页头四件(`docTitle` 进 `<title>`,其余三件进页壳)。 */
|
|
2
|
+
export interface PageHead {
|
|
3
|
+
readonly docTitle: string;
|
|
4
|
+
readonly eyebrow: string;
|
|
5
|
+
readonly title: string;
|
|
6
|
+
readonly subtitle: string;
|
|
7
|
+
}
|
|
8
|
+
/** 整页装配入参。 */
|
|
9
|
+
export interface DocPageInput {
|
|
10
|
+
readonly head: PageHead;
|
|
11
|
+
/** 已组合好的区块 HTML(受信透传,与公共层 `renderPageShell` 的 `content` 同口径)。 */
|
|
12
|
+
readonly content: string;
|
|
13
|
+
/** **域级样式补丁**(#783 的接缝,可选):只给「本域自己的页内自造件」用(类名自带域前缀,
|
|
14
|
+
* 不碰 `.ilife-block-*` 与页壳)。不给/给空串=与加这一位之前**逐字节相同**(下面那半个 `LF` 只在
|
|
15
|
+
* 真给了补丁时才拼)。为什么要有这一位:共用位(本件)不是各域的样式收容所,可各域又确实有
|
|
16
|
+
* 「公共层给不出、只有本域在用」的件(见 `src/write/writeParts.ts` 的件头),补丁得有入口。
|
|
17
|
+
* 排在 `pagePartsCss()` 之后、桌面单列配方之前——域补丁压不了页级配方。 */
|
|
18
|
+
readonly extraCss?: string;
|
|
19
|
+
}
|
|
20
|
+
/** 区块 HTML + 页头 → 完整文档。一页只调一次。 */
|
|
21
|
+
export declare function assembleDocPage(input: DocPageInput): string;
|
|
22
|
+
//# sourceMappingURL=docPage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docPage.d.ts","sourceRoot":"","sources":["../../src/shared/docPage.ts"],"names":[],"mappings":"AAsCA,4CAA4C;AAC5C,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,cAAc;AACd,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,iEAAiE;IACjE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;;;uDAImD;IACnD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,kCAAkC;AAClC,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CAc3D"}
|