@x12i/made-easy 0.0.0-stage → 0.1.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.
Files changed (169) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +57 -2
  3. package/dist/analysis.d.ts +19 -0
  4. package/dist/analysis.d.ts.map +1 -0
  5. package/dist/analysis.js +90 -0
  6. package/dist/analysis.js.map +1 -0
  7. package/dist/build.d.ts +36 -0
  8. package/dist/build.d.ts.map +1 -0
  9. package/dist/build.js +260 -0
  10. package/dist/build.js.map +1 -0
  11. package/dist/contracts/api.d.ts +447 -0
  12. package/dist/contracts/api.d.ts.map +1 -0
  13. package/dist/contracts/api.js +152 -0
  14. package/dist/contracts/api.js.map +1 -0
  15. package/dist/contracts/blocks.d.ts +221 -0
  16. package/dist/contracts/blocks.d.ts.map +1 -0
  17. package/dist/contracts/blocks.js +392 -0
  18. package/dist/contracts/blocks.js.map +1 -0
  19. package/dist/contracts/diagnostics.d.ts +111 -0
  20. package/dist/contracts/diagnostics.d.ts.map +1 -0
  21. package/dist/contracts/diagnostics.js +122 -0
  22. package/dist/contracts/diagnostics.js.map +1 -0
  23. package/dist/contracts/index.d.ts +11 -0
  24. package/dist/contracts/index.d.ts.map +1 -0
  25. package/dist/contracts/index.js +11 -0
  26. package/dist/contracts/index.js.map +1 -0
  27. package/dist/contracts/json-schema.d.ts +5 -0
  28. package/dist/contracts/json-schema.d.ts.map +1 -0
  29. package/dist/contracts/json-schema.js +41 -0
  30. package/dist/contracts/json-schema.js.map +1 -0
  31. package/dist/contracts/recipe.d.ts +535 -0
  32. package/dist/contracts/recipe.d.ts.map +1 -0
  33. package/dist/contracts/recipe.js +380 -0
  34. package/dist/contracts/recipe.js.map +1 -0
  35. package/dist/contracts/schemas.d.ts +413 -0
  36. package/dist/contracts/schemas.d.ts.map +1 -0
  37. package/dist/contracts/schemas.js +205 -0
  38. package/dist/contracts/schemas.js.map +1 -0
  39. package/dist/draft.d.ts +157 -0
  40. package/dist/draft.d.ts.map +1 -0
  41. package/dist/draft.js +254 -0
  42. package/dist/draft.js.map +1 -0
  43. package/dist/emit-assets.d.ts +2 -0
  44. package/dist/emit-assets.d.ts.map +1 -0
  45. package/dist/emit-assets.js +27 -0
  46. package/dist/emit-assets.js.map +1 -0
  47. package/dist/index.d.ts +25 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +30 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/markdown-doc.d.ts +59 -0
  52. package/dist/markdown-doc.d.ts.map +1 -0
  53. package/dist/markdown-doc.js +187 -0
  54. package/dist/markdown-doc.js.map +1 -0
  55. package/dist/model.d.ts +54 -0
  56. package/dist/model.d.ts.map +1 -0
  57. package/dist/model.js +244 -0
  58. package/dist/model.js.map +1 -0
  59. package/dist/normalize.d.ts +63 -0
  60. package/dist/normalize.d.ts.map +1 -0
  61. package/dist/normalize.js +54 -0
  62. package/dist/normalize.js.map +1 -0
  63. package/dist/npm.d.ts +24 -0
  64. package/dist/npm.d.ts.map +1 -0
  65. package/dist/npm.js +51 -0
  66. package/dist/npm.js.map +1 -0
  67. package/dist/render/blocks.d.ts +17 -0
  68. package/dist/render/blocks.d.ts.map +1 -0
  69. package/dist/render/blocks.js +384 -0
  70. package/dist/render/blocks.js.map +1 -0
  71. package/dist/render/brief.d.ts +77 -0
  72. package/dist/render/brief.d.ts.map +1 -0
  73. package/dist/render/brief.js +62 -0
  74. package/dist/render/brief.js.map +1 -0
  75. package/dist/render/context.d.ts +43 -0
  76. package/dist/render/context.d.ts.map +1 -0
  77. package/dist/render/context.js +88 -0
  78. package/dist/render/context.js.map +1 -0
  79. package/dist/render/html.d.ts +19 -0
  80. package/dist/render/html.d.ts.map +1 -0
  81. package/dist/render/html.js +178 -0
  82. package/dist/render/html.js.map +1 -0
  83. package/dist/render/markdown-out.d.ts +11 -0
  84. package/dist/render/markdown-out.d.ts.map +1 -0
  85. package/dist/render/markdown-out.js +121 -0
  86. package/dist/render/markdown-out.js.map +1 -0
  87. package/dist/render/pdf.d.ts +23 -0
  88. package/dist/render/pdf.d.ts.map +1 -0
  89. package/dist/render/pdf.js +138 -0
  90. package/dist/render/pdf.js.map +1 -0
  91. package/dist/render/prose.d.ts +15 -0
  92. package/dist/render/prose.d.ts.map +1 -0
  93. package/dist/render/prose.js +110 -0
  94. package/dist/render/prose.js.map +1 -0
  95. package/dist/scaffold.d.ts +13 -0
  96. package/dist/scaffold.d.ts.map +1 -0
  97. package/dist/scaffold.js +393 -0
  98. package/dist/scaffold.js.map +1 -0
  99. package/dist/sdk.d.ts +56 -0
  100. package/dist/sdk.d.ts.map +1 -0
  101. package/dist/sdk.js +238 -0
  102. package/dist/sdk.js.map +1 -0
  103. package/dist/source.d.ts +57 -0
  104. package/dist/source.d.ts.map +1 -0
  105. package/dist/source.js +289 -0
  106. package/dist/source.js.map +1 -0
  107. package/dist/theme/book.d.ts +10 -0
  108. package/dist/theme/book.d.ts.map +1 -0
  109. package/dist/theme/book.js +198 -0
  110. package/dist/theme/book.js.map +1 -0
  111. package/dist/util.d.ts +14 -0
  112. package/dist/util.d.ts.map +1 -0
  113. package/dist/util.js +69 -0
  114. package/dist/util.js.map +1 -0
  115. package/dist/validate.d.ts +36 -0
  116. package/dist/validate.d.ts.map +1 -0
  117. package/dist/validate.js +986 -0
  118. package/dist/validate.js.map +1 -0
  119. package/dist/verify.d.ts +35 -0
  120. package/dist/verify.d.ts.map +1 -0
  121. package/dist/verify.js +112 -0
  122. package/dist/verify.js.map +1 -0
  123. package/dist/version.d.ts +3 -0
  124. package/dist/version.d.ts.map +1 -0
  125. package/dist/version.js +4 -0
  126. package/dist/version.js.map +1 -0
  127. package/dist/yamlfile.d.ts +22 -0
  128. package/dist/yamlfile.d.ts.map +1 -0
  129. package/dist/yamlfile.js +129 -0
  130. package/dist/yamlfile.js.map +1 -0
  131. package/package.json +64 -4
  132. package/recipes/index.json +282 -0
  133. package/recipes/shared-1.0.0.json +456 -0
  134. package/schemas/artifact.v1.json +36 -0
  135. package/schemas/assets.v1.json +61 -0
  136. package/schemas/block.v1.json +27 -0
  137. package/schemas/blocks/brief.v1.json +20 -0
  138. package/schemas/blocks/callout.v1.json +25 -0
  139. package/schemas/blocks/code.v1.json +21 -0
  140. package/schemas/blocks/decision.v1.json +80 -0
  141. package/schemas/blocks/evidence-comparison.v1.json +33 -0
  142. package/schemas/blocks/example.v1.json +52 -0
  143. package/schemas/blocks/figure.v1.json +22 -0
  144. package/schemas/blocks/human-action.v1.json +42 -0
  145. package/schemas/blocks/job-map.v1.json +170 -0
  146. package/schemas/blocks/pause.v1.json +25 -0
  147. package/schemas/blocks/reference-profile.v1.json +41 -0
  148. package/schemas/blocks/review-checklist.v1.json +19 -0
  149. package/schemas/blocks/table.v1.json +59 -0
  150. package/schemas/brief.v1.json +157 -0
  151. package/schemas/build-request.v1.json +173 -0
  152. package/schemas/build-result.v1.json +171 -0
  153. package/schemas/checks.v1.json +149 -0
  154. package/schemas/create-request.v1.json +47 -0
  155. package/schemas/diagnostic.v1.json +50 -0
  156. package/schemas/draft-request.v1.json +196 -0
  157. package/schemas/guide.v1.json +172 -0
  158. package/schemas/job.v1.json +107 -0
  159. package/schemas/preview-request.v1.json +153 -0
  160. package/schemas/preview-result.v1.json +84 -0
  161. package/schemas/problem.v1.json +78 -0
  162. package/schemas/recipe-definition.v1.json +673 -0
  163. package/schemas/source-ref.v1.json +111 -0
  164. package/schemas/sources.v1.json +158 -0
  165. package/schemas/validate-request.v1.json +135 -0
  166. package/schemas/validate-result.v1.json +110 -0
  167. package/schemas/verification.v1.json +77 -0
  168. package/themes/book/1.0.0/theme.css +190 -0
  169. package/themes/book/1.0.0/theme.json +5 -0
@@ -0,0 +1,77 @@
1
+ import { type GuideModel } from '../model.js';
2
+ export interface BriefDocument {
3
+ schemaVersion: string;
4
+ guideId: string;
5
+ jobId: string;
6
+ title: string;
7
+ revision: string;
8
+ referenceRevision: string;
9
+ outcome: string;
10
+ inputs: {
11
+ id: string;
12
+ label: string;
13
+ required: boolean;
14
+ placeholder: string;
15
+ example: string;
16
+ description?: string;
17
+ }[];
18
+ authority: {
19
+ reads: string[];
20
+ changes: string[];
21
+ };
22
+ limits: string[];
23
+ pauseRules: {
24
+ id: string;
25
+ trigger: string;
26
+ owner: string;
27
+ mayContinue: string;
28
+ resumeWhen: string;
29
+ }[];
30
+ acceptanceChecks: {
31
+ id: string;
32
+ observable: string;
33
+ evidenceSource: string;
34
+ passCondition: string;
35
+ onMissing: string;
36
+ onContradictory: string;
37
+ }[];
38
+ reportBack: {
39
+ id: string;
40
+ label: string;
41
+ description?: string;
42
+ }[];
43
+ operatorReference: {
44
+ revision: string;
45
+ entries: {
46
+ id: string;
47
+ title: string;
48
+ path: string;
49
+ digest: string;
50
+ }[];
51
+ };
52
+ /** The blank template: inputs carry their placeholder text. */
53
+ template: {
54
+ inputs: {
55
+ id: string;
56
+ label: string;
57
+ value: string;
58
+ }[];
59
+ };
60
+ /** The worked brief: inputs carry their worked example values. */
61
+ worked: {
62
+ inputs: {
63
+ id: string;
64
+ label: string;
65
+ value: string;
66
+ }[];
67
+ };
68
+ /** Review checklist items, one per acceptance check. */
69
+ checklist: {
70
+ id: string;
71
+ text: string;
72
+ passCondition: string;
73
+ }[];
74
+ }
75
+ /** One source of truth for the brief, shared by the ebook, brief.md and brief.json. */
76
+ export declare function buildBriefDocument(model: GuideModel): BriefDocument;
77
+ //# sourceMappingURL=brief.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brief.d.ts","sourceRoot":"","sources":["../../src/render/brief.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAErE,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACvH,SAAS,EAAE;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAClD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACtG,gBAAgB,EAAE;QAChB,EAAE,EAAE,MAAM,CAAC;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;KACzB,EAAE,CAAC;IACJ,UAAU,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAClE,iBAAiB,EAAE;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KACxE,CAAC;IACF,+DAA+D;IAC/D,QAAQ,EAAE;QAAE,MAAM,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC;IACrE,kEAAkE;IAClE,MAAM,EAAE;QAAE,MAAM,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAAE,CAAC;IACnE,wDAAwD;IACxD,SAAS,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAClE;AAED,uFAAuF;AACvF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,aAAa,CAyDnE"}
@@ -0,0 +1,62 @@
1
+ import { SCHEMA_VERSION } from '../contracts/index.js';
2
+ import { entriesOf, guideTitle } from '../model.js';
3
+ /** One source of truth for the brief, shared by the ebook, brief.md and brief.json. */
4
+ export function buildBriefDocument(model) {
5
+ const guide = model.guide;
6
+ const brief = model.brief ?? { schemaVersion: SCHEMA_VERSION };
7
+ const checks = new Map((model.checks?.checks ?? []).map((c) => [c.id, c]));
8
+ const operator = new Map(entriesOf(model, 'operator').map((e) => [e.id, e]));
9
+ const inputs = (brief.inputs ?? []).map((i) => ({
10
+ id: i.id,
11
+ label: i.label ?? i.id,
12
+ required: i.required !== false,
13
+ placeholder: i.placeholder ?? `{{${i.id}}}`,
14
+ example: i.example ?? '',
15
+ description: i.description,
16
+ }));
17
+ return {
18
+ schemaVersion: SCHEMA_VERSION,
19
+ guideId: guide.guideId,
20
+ jobId: guide.jobId,
21
+ title: guideTitle(guide),
22
+ revision: model.revision,
23
+ referenceRevision: model.referenceRevision,
24
+ outcome: brief.outcome ?? '',
25
+ inputs,
26
+ authority: { reads: brief.authority?.reads ?? [], changes: brief.authority?.changes ?? [] },
27
+ limits: brief.limits ?? [],
28
+ pauseRules: (brief.pauseRules ?? []).map((p) => ({
29
+ id: p.id,
30
+ trigger: p.trigger ?? '',
31
+ owner: p.owner ?? '',
32
+ mayContinue: p.mayContinue ?? '',
33
+ resumeWhen: p.resumeWhen ?? '',
34
+ })),
35
+ acceptanceChecks: (brief.acceptanceChecks ?? []).map((id) => {
36
+ const c = checks.get(id);
37
+ return {
38
+ id,
39
+ observable: c?.observable ?? '',
40
+ evidenceSource: c?.evidenceSource ?? '',
41
+ passCondition: c?.passCondition ?? '',
42
+ onMissing: c?.onMissing ?? '',
43
+ onContradictory: c?.onContradictory ?? '',
44
+ };
45
+ }),
46
+ reportBack: (brief.reportBack ?? []).map((r) => ({ id: r.id, label: r.label ?? r.id, description: r.description })),
47
+ operatorReference: {
48
+ revision: model.referenceRevision,
49
+ entries: (brief.operatorReference?.entries ?? [])
50
+ .map((p) => operator.get(p.id))
51
+ .filter((e) => Boolean(e))
52
+ .map((e) => ({ id: e.id, title: e.title, path: e.path, digest: e.digest })),
53
+ },
54
+ template: { inputs: inputs.map((i) => ({ id: i.id, label: i.label, value: i.placeholder })) },
55
+ worked: { inputs: inputs.map((i) => ({ id: i.id, label: i.label, value: i.example })) },
56
+ checklist: (brief.acceptanceChecks ?? []).map((id) => {
57
+ const c = checks.get(id);
58
+ return { id, text: c?.observable ?? id, passCondition: c?.passCondition ?? '' };
59
+ }),
60
+ };
61
+ }
62
+ //# sourceMappingURL=brief.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brief.js","sourceRoot":"","sources":["../../src/render/brief.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { Asset, Check, Claim, PauseRule, RefKind, Source, Track, WorkedResult } from '../contracts/index.js';
2
+ import type { GuideModel, ModelEntry } from '../model.js';
3
+ export type Page = 'human' | 'operator';
4
+ export interface RenderContext {
5
+ model: GuideModel;
6
+ /** Page being rendered; links to the other page are relative to it. */
7
+ page: Page;
8
+ /** Standalone documents (PDF) cannot link to sibling files. */
9
+ standalone: boolean;
10
+ audience: 'private' | 'public';
11
+ draft: boolean;
12
+ checks: Map<string, Check>;
13
+ results: Map<string, WorkedResult>;
14
+ sources: Map<string, Source>;
15
+ claims: Map<string, Claim>;
16
+ assets: Map<string, Asset>;
17
+ assetByPath: Map<string, Asset>;
18
+ pauses: Map<string, PauseRule>;
19
+ entries: Map<string, ModelEntry>;
20
+ blockEntry: Map<string, ModelEntry>;
21
+ /** Resolve an asset ID to a file reference (relative path or data URI). */
22
+ assetSrc: (asset: Asset) => string | undefined;
23
+ }
24
+ export declare function makeContext(model: GuideModel, opts: {
25
+ page: Page;
26
+ standalone?: boolean;
27
+ audience?: 'private' | 'public';
28
+ draft?: boolean;
29
+ assetSrc?: (asset: Asset) => string | undefined;
30
+ }): RenderContext;
31
+ export declare function pageOfTrack(track: Track): Page;
32
+ /** href to a rendered location; undefined when it cannot be linked (standalone PDF cross-page). */
33
+ export declare function hrefTo(ctx: RenderContext, targetPage: Page, fragment: string): string | undefined;
34
+ export interface ResolvedRef {
35
+ href?: string;
36
+ label: string;
37
+ title?: string;
38
+ }
39
+ /** Resolve `kind:id#anchor` into a link target and human label. */
40
+ export declare function resolveRef(ctx: RenderContext, kind: RefKind, id: string, anchor?: string): ResolvedRef | undefined;
41
+ export declare function titleOf(model: GuideModel): string;
42
+ export declare function shortRef(digest: string): string;
43
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/render/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAClH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAK1D,MAAM,MAAM,IAAI,GAAG,OAAO,GAAG,UAAU,CAAC;AAExC,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,UAAU,CAAC;IAClB,uEAAuE;IACvE,IAAI,EAAE,IAAI,CAAC;IACX,+DAA+D;IAC/D,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC3B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACnC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC3B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC3B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAChC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC/B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACjC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACpC,2EAA2E;IAC3E,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,GAAG,SAAS,CAAC;CAChD;AAED,wBAAgB,WAAW,CACzB,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE;IACJ,IAAI,EAAE,IAAI,CAAC;IACX,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAChC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,GAAG,SAAS,CAAC;CACjD,GACA,aAAa,CAsBf;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAE9C;AAED,mGAAmG;AACnG,wBAAgB,MAAM,CAAC,GAAG,EAAE,aAAa,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIjG;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,mEAAmE;AACnE,wBAAgB,UAAU,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CA0ClH;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEjD;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE/C"}
@@ -0,0 +1,88 @@
1
+ import { allBlocks } from '../model.js';
2
+ import { guideTitle } from '../model.js';
3
+ import { shortRevision } from '../util.js';
4
+ export function makeContext(model, opts) {
5
+ const assets = new Map((model.assets?.assets ?? []).map((a) => [a.id, a]));
6
+ const page = opts.page;
7
+ return {
8
+ model,
9
+ page,
10
+ standalone: opts.standalone ?? false,
11
+ audience: opts.audience ?? 'private',
12
+ draft: opts.draft ?? false,
13
+ checks: new Map((model.checks?.checks ?? []).map((c) => [c.id, c])),
14
+ results: new Map((model.checks?.results ?? []).map((r) => [r.id, r])),
15
+ sources: new Map((model.sources?.sources ?? []).map((s) => [s.id, s])),
16
+ claims: new Map((model.sources?.claims ?? []).map((c) => [c.id, c])),
17
+ assets,
18
+ assetByPath: new Map((model.assets?.assets ?? []).map((a) => [a.path, a])),
19
+ pauses: new Map((model.brief?.pauseRules ?? []).map((p) => [p.id, p])),
20
+ entries: new Map(model.entries.map((e) => [e.id, e])),
21
+ blockEntry: new Map(allBlocks(model).map(({ entry, block }) => [block.id, entry])),
22
+ assetSrc: opts.assetSrc ??
23
+ ((a) => (page === 'operator' ? `../${a.path}` : a.path)),
24
+ };
25
+ }
26
+ export function pageOfTrack(track) {
27
+ return track;
28
+ }
29
+ /** href to a rendered location; undefined when it cannot be linked (standalone PDF cross-page). */
30
+ export function hrefTo(ctx, targetPage, fragment) {
31
+ if (targetPage === ctx.page)
32
+ return `#${fragment}`;
33
+ if (ctx.standalone)
34
+ return undefined;
35
+ return ctx.page === 'human' ? `operator/index.html#${fragment}` : `../index.html#${fragment}`;
36
+ }
37
+ /** Resolve `kind:id#anchor` into a link target and human label. */
38
+ export function resolveRef(ctx, kind, id, anchor) {
39
+ switch (kind) {
40
+ case 'check': {
41
+ const c = ctx.checks.get(id);
42
+ return c ? { href: hrefTo(ctx, 'human', `check-${id}`), label: `Check: ${id}`, title: c.observable } : undefined;
43
+ }
44
+ case 'claim': {
45
+ const c = ctx.claims.get(id);
46
+ return c ? { href: hrefTo(ctx, 'human', `claim-${id}`), label: `Claim: ${id}`, title: c.text } : undefined;
47
+ }
48
+ case 'source': {
49
+ const s = ctx.sources.get(id);
50
+ return s ? { href: hrefTo(ctx, 'human', `source-${id}`), label: s.title, title: `${s.title} (${s.version})` } : undefined;
51
+ }
52
+ case 'result': {
53
+ const r = ctx.results.get(id);
54
+ return r ? { href: hrefTo(ctx, 'human', `result-${id}`), label: r.label ?? `Result: ${id}` } : undefined;
55
+ }
56
+ case 'pause': {
57
+ const p = ctx.pauses.get(id);
58
+ return p ? { href: hrefTo(ctx, 'human', `pause-${id}`), label: `Pause: ${id}`, title: p.trigger } : undefined;
59
+ }
60
+ case 'entry': {
61
+ const e = ctx.entries.get(id);
62
+ if (!e)
63
+ return undefined;
64
+ const frag = anchor ? `${e.id}--${anchor}` : `e-${e.id}`;
65
+ return { href: hrefTo(ctx, e.track, frag), label: anchor ? (e.headings.find((h) => h.anchor === anchor)?.text ?? e.title) : e.title };
66
+ }
67
+ case 'asset': {
68
+ const a = ctx.assets.get(id);
69
+ const src = a ? ctx.assetSrc(a) : undefined;
70
+ return a ? { href: src, label: a.alt ?? a.id } : undefined;
71
+ }
72
+ case 'block': {
73
+ const e = ctx.blockEntry.get(id);
74
+ return e ? { href: hrefTo(ctx, e.track, `b-${id}`), label: `Block: ${id}` } : undefined;
75
+ }
76
+ case 'input': {
77
+ const i = (ctx.model.brief?.inputs ?? []).find((x) => x.id === id);
78
+ return i ? { href: hrefTo(ctx, 'human', `input-${id}`), label: i.label ?? id } : undefined;
79
+ }
80
+ }
81
+ }
82
+ export function titleOf(model) {
83
+ return model.guide ? guideTitle(model.guide) : 'Made Easy';
84
+ }
85
+ export function shortRef(digest) {
86
+ return shortRevision(digest, 12);
87
+ }
88
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/render/context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAyB3C,MAAM,UAAU,WAAW,CACzB,KAAiB,EACjB,IAMC;IAED,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,OAAO;QACL,KAAK;QACL,IAAI;QACJ,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,KAAK;QACpC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,SAAS;QACpC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,KAAK;QAC1B,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACnE,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACrE,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACtE,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM;QACN,WAAW,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACtE,OAAO,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QACrD,UAAU,EAAE,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QAClF,QAAQ,EACN,IAAI,CAAC,QAAQ;YACb,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;KAC3D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAY;IACtC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,MAAM,CAAC,GAAkB,EAAE,UAAgB,EAAE,QAAgB;IAC3E,IAAI,UAAU,KAAK,GAAG,CAAC,IAAI;QAAE,OAAO,IAAI,QAAQ,EAAE,CAAC;IACnD,IAAI,GAAG,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IACrC,OAAO,GAAG,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC,CAAC,iBAAiB,QAAQ,EAAE,CAAC;AAChG,CAAC;AAQD,mEAAmE;AACnE,MAAM,UAAU,UAAU,CAAC,GAAkB,EAAE,IAAa,EAAE,EAAU,EAAE,MAAe;IACvF,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC7B,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACnH,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC7B,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7G,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9B,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5H,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9B,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3G,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC7B,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAChH,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC9B,IAAI,CAAC,CAAC;gBAAE,OAAO,SAAS,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;YACzD,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;QACxI,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC5C,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7D,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACjC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1F,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YACnE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7F,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAiB;IACvC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAc;IACrC,OAAO,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { Asset } from '../contracts/index.js';
2
+ import { type GuideModel } from '../model.js';
3
+ import { resolveRef, type Page } from './context.js';
4
+ export declare const GENERATOR = "@x12i/made-easy";
5
+ export interface PageOptions {
6
+ model: GuideModel;
7
+ page: Page;
8
+ version: string;
9
+ /** Standalone documents (PDF) inline assets and omit sibling links. */
10
+ standalone?: boolean;
11
+ audience?: 'private' | 'public';
12
+ draft?: boolean;
13
+ assetSrc?: (asset: Asset) => string | undefined;
14
+ /** Short text such as "N errors, M warnings" shown in the draft banner. */
15
+ draftNote?: string;
16
+ }
17
+ export declare function renderPage(opts: PageOptions): string;
18
+ export { resolveRef };
19
+ //# sourceMappingURL=html.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/render/html.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAS,MAAM,uBAAuB,CAAC;AAG1D,OAAO,EAAyB,KAAK,UAAU,EAAmB,MAAM,aAAa,CAAC;AAItF,OAAO,EAAe,UAAU,EAAE,KAAK,IAAI,EAAsB,MAAM,cAAc,CAAC;AAGtF,eAAO,MAAM,SAAS,oBAAoB,CAAC;AAE3C,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,UAAU,CAAC;IAClB,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAChC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,GAAG,SAAS,CAAC;IAChD,2EAA2E;IAC3E,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA8GD,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAqEpD;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,178 @@
1
+ import { computeUsage } from '../analysis.js';
2
+ import { entriesOf, guideTitle } from '../model.js';
3
+ import { BOOK_THEME_CSS } from '../theme/book.js';
4
+ import { escapeHtml as esc } from '../util.js';
5
+ import { renderBlockHtml } from './blocks.js';
6
+ import { makeContext, resolveRef } from './context.js';
7
+ import { renderInline, renderProse } from './prose.js';
8
+ export const GENERATOR = '@x12i/made-easy';
9
+ const CSP = "default-src 'none'; img-src 'self' data: file:; style-src 'unsafe-inline'; font-src 'self' data:; base-uri 'none'; form-action 'none'";
10
+ function short(digest) {
11
+ return digest.replace(/^sha256:/, '').slice(0, 12);
12
+ }
13
+ function renderEntry(entry, ctx, kind) {
14
+ const body = entry.nodes
15
+ .map((node) => {
16
+ if (node.kind === 'block')
17
+ return renderBlockHtml(node, entry, ctx);
18
+ const ids = entry.headings
19
+ .filter((h) => h.line >= node.line && h.line <= node.endLine)
20
+ .map((h) => `${entry.id}--${h.anchor}`);
21
+ return renderProse(node.source, ctx, { headingIds: ids, levelShift: 1 });
22
+ })
23
+ .join('\n');
24
+ return `<article class="chapter ${kind}" id="e-${esc(entry.id)}" aria-label="${esc(entry.title)}" data-role="${esc(entry.role)}">
25
+ <header><p class="chapter-no"></p>${entry.hasChapterHeading ? '' : `<h2>${esc(entry.title)}</h2>`}</header>
26
+ ${body}
27
+ <p class="back-to-top"><a href="#top">Back to contents</a></p>
28
+ </article>`;
29
+ }
30
+ function renderChecksAppendix(ctx) {
31
+ const m = ctx.model;
32
+ const evidenceFor = (id) => (m.sources?.checkEvidence ?? []).find((c) => c.check === id)?.evidence ?? [];
33
+ const items = (m.checks?.checks ?? [])
34
+ .map((c) => {
35
+ const ev = evidenceFor(c.id)
36
+ .map((e) => {
37
+ const s = ctx.sources.get(e.source);
38
+ return `<li><a href="#source-${esc(e.source)}">${esc(s?.title ?? e.source)}</a>${s ? ` <span class="sub">${esc(s.version)}</span>` : ''}${e.locator ? ` \u2014 ${esc(e.locator)}` : ''}</li>`;
39
+ })
40
+ .join('');
41
+ const accepted = (m.brief?.acceptanceChecks ?? []).includes(c.id);
42
+ return `<section class="check" id="check-${esc(c.id)}"><h3>${esc(c.id)}${accepted ? ' <span class="tag">acceptance check</span>' : ''}</h3>
43
+ <dl class="facts"><div class="fact"><dt>Observable</dt><dd>${renderInline(c.observable, ctx)}</dd></div><div class="fact"><dt>Evidence source</dt><dd>${renderInline(c.evidenceSource, ctx)}</dd></div><div class="fact"><dt>Pass condition</dt><dd>${renderInline(c.passCondition, ctx)}</dd></div><div class="fact"><dt>If evidence is missing</dt><dd>${renderInline(c.onMissing, ctx)}</dd></div><div class="fact"><dt>If evidence contradicts</dt><dd>${renderInline(c.onContradictory, ctx)}</dd></div></dl>
44
+ ${ev ? `<p class="sub">Evidence</p><ul>${ev}</ul>` : ''}</section>`;
45
+ })
46
+ .join('\n');
47
+ return `<article class="chapter appendix" id="e-appendix-checks" aria-label="Acceptance checks"><header><p class="chapter-no"></p><h2>Acceptance checks</h2></header>
48
+ <p>Every worked result in this guide is recorded against these checks.</p>${items}<p class="back-to-top"><a href="#top">Back to contents</a></p></article>`;
49
+ }
50
+ function renderEvidenceAppendix(ctx) {
51
+ const m = ctx.model;
52
+ const usage = computeUsage(m);
53
+ const claims = (m.sources?.claims ?? [])
54
+ .map((c) => {
55
+ const ev = (c.evidence ?? [])
56
+ .map((e) => {
57
+ const s = ctx.sources.get(e.source);
58
+ return `<li><a href="#source-${esc(e.source)}">${esc(s?.title ?? e.source)}</a>${s ? ` <span class="sub">${esc(s.version)}</span>` : ''}${e.locator ? ` \u2014 ${esc(e.locator)}` : ''}</li>`;
59
+ })
60
+ .join('');
61
+ const status = c.status ?? 'supported';
62
+ return `<section class="claim" id="claim-${esc(c.id)}"><p><strong>${esc(c.id)}</strong> <span class="tag status-${status}">${status}</span></p><p>${renderInline(c.text, ctx)}</p>${ev ? `<ul>${ev}</ul>` : ''}</section>`;
63
+ })
64
+ .join('\n');
65
+ const sources = (m.sources?.sources ?? [])
66
+ .filter((s) => usage.sources.has(s.id) && (ctx.audience === 'private' || (s.visibility ?? 'private') === 'public'))
67
+ .map((s) => `<section class="source" id="source-${esc(s.id)}"><p><strong>${esc(s.title)}</strong> ${s.synthetic ? '<span class="tag">synthetic evidence</span>' : ''}</p>
68
+ <p class="sub">Version ${esc(s.version)} \u00B7 ${esc(s.kind ?? 'source')} \u00B7 ${esc(s.visibility ?? 'private')}</p><p>${esc(s.locator)}</p>${s.note ? `<p>${renderInline(s.note, ctx)}</p>` : ''}</section>`)
69
+ .join('\n');
70
+ return `<article class="chapter appendix" id="e-appendix-evidence" aria-label="Evidence and sources"><header><p class="chapter-no"></p><h2>Evidence and sources</h2></header>
71
+ ${claims ? `<h3>Claims</h3>${claims}` : ''}${sources ? `<h3>Sources</h3>${sources}` : ''}<p class="back-to-top"><a href="#top">Back to contents</a></p></article>`;
72
+ }
73
+ function renderReferenceAppendix(ctx) {
74
+ const m = ctx.model;
75
+ const pinned = new Map((m.brief?.operatorReference?.entries ?? []).map((p) => [p.id, p]));
76
+ const rows = entriesOf(m, 'operator')
77
+ .map((e) => {
78
+ const pin = pinned.get(e.id);
79
+ const state = !pin ? 'not pinned' : !pin.digest ? 'pin has no digest' : pin.digest === e.digest ? 'pinned, current' : 'pinned, STALE';
80
+ return `<tr><th scope="row"><a href="#e-${esc(e.id)}">${esc(e.title)}</a></th><td><code>${esc(e.path)}</code></td><td><code>${esc(short(e.digest))}</code></td><td>${state}</td></tr>`;
81
+ })
82
+ .join('');
83
+ const briefBlock = { kind: 'block', id: 'reference-brief', type: 'brief', props: { view: 'both' }, line: 0, endLine: 0, lineOf: () => undefined };
84
+ return `<article class="chapter appendix" id="e-appendix-revision" aria-label="Reference revision"><header><p class="chapter-no"></p><h2>Reference revision</h2></header>
85
+ <p>Operator-reference revision <code>${esc(short(m.referenceRevision))}</code>. The human guide links to this exact revision.</p>
86
+ <div class="table-wrap" role="region" tabindex="0" aria-label="Pinned entries"><table><thead><tr><th scope="col">Entry</th><th scope="col">File</th><th scope="col">Digest</th><th scope="col">Pin</th></tr></thead><tbody>${rows}</tbody></table></div>
87
+ <p class="back-to-top"><a href="#top">Back to contents</a></p></article>
88
+ <article class="chapter appendix" id="e-appendix-brief" aria-label="The brief"><header><p class="chapter-no"></p><h2>The brief</h2></header>${renderBlockHtml(briefBlock, { track: 'operator' }, ctx)}<p class="back-to-top"><a href="#top">Back to contents</a></p></article>`;
89
+ }
90
+ function renderToc(ctx, entries, generated) {
91
+ const items = entries
92
+ .map((e) => {
93
+ const subs = e.headings.filter((h) => h.level === 2);
94
+ return `<li><a href="#e-${esc(e.id)}">${esc(e.title)}</a>${subs.length ? `<ol class="toc-sub">${subs.map((h) => `<li><a href="#${esc(e.id)}--${esc(h.anchor)}">${esc(h.text.replace(/[`*_]/g, ''))}</a></li>`).join('')}</ol>` : ''}</li>`;
95
+ })
96
+ .join('');
97
+ const gen = generated.map((g) => `<li><a href="#e-${esc(g.id)}">${esc(g.title)}</a></li>`).join('');
98
+ const other = ctx.standalone
99
+ ? ''
100
+ : ctx.page === 'human'
101
+ ? `<li class="toc-other"><a href="operator/index.html">Operator reference</a></li>`
102
+ : `<li class="toc-other"><a href="../index.html">Human guide</a></li>`;
103
+ const files = ctx.standalone
104
+ ? ''
105
+ : `<li class="toc-other"><a href="${ctx.page === 'human' ? '' : '../'}brief.md">brief.md</a> \u00B7 <a href="${ctx.page === 'human' ? '' : '../'}brief.json">brief.json</a></li>`;
106
+ return `<nav class="toc" aria-label="Contents"><p class="toc-title">Contents</p><ol>${items}${gen}${other}${files}</ol></nav>`;
107
+ }
108
+ export function renderPage(opts) {
109
+ const { model, page } = opts;
110
+ const guide = model.guide;
111
+ const ctx = makeContext(model, {
112
+ page,
113
+ standalone: opts.standalone,
114
+ audience: opts.audience,
115
+ draft: opts.draft,
116
+ assetSrc: opts.assetSrc,
117
+ });
118
+ const track = page;
119
+ const entries = entriesOf(model, track);
120
+ const authored = entries.map((e) => renderEntry(e, ctx, e.role === 'appendix' ? 'appendix' : 'chapter'));
121
+ const generated = page === 'human'
122
+ ? [
123
+ { id: 'appendix-checks', title: 'Acceptance checks', html: renderChecksAppendix(ctx) },
124
+ { id: 'appendix-evidence', title: 'Evidence and sources', html: renderEvidenceAppendix(ctx) },
125
+ ]
126
+ : [{ id: 'appendix-revision', title: 'Reference revision and brief', html: renderReferenceAppendix(ctx) }];
127
+ const title = guideTitle(guide);
128
+ const docTitle = page === 'human' ? title : `${title} \u2014 Operator reference`;
129
+ const draftBanner = opts.draft
130
+ ? `<div class="draft-banner" role="note">DRAFT \u2014 not for publication.${opts.draftNote ? ` ${esc(opts.draftNote)}` : ''}</div><div class="draft-watermark" aria-hidden="true">DRAFT</div>`
131
+ : '';
132
+ const synthetic = (model.sources?.sources ?? []).some((s) => s.synthetic);
133
+ const profileTitle = model.recipe ? `${model.recipe.title} \u00B7 ${model.recipe.id}` : guide.recipe.id;
134
+ return `<!doctype html>
135
+ <html lang="${esc(guide.locale)}" data-theme="${esc(guide.theme.id)}@${esc(guide.theme.version)}">
136
+ <head>
137
+ <meta charset="utf-8">
138
+ <meta name="viewport" content="width=device-width, initial-scale=1">
139
+ <meta http-equiv="Content-Security-Policy" content="${CSP}">
140
+ <meta name="generator" content="${GENERATOR} ${esc(opts.version)}">
141
+ <meta name="made-easy:revision" content="${esc(model.revision)}">
142
+ <meta name="made-easy:reference-revision" content="${esc(model.referenceRevision)}">
143
+ <title>${esc(docTitle)}</title>
144
+ <style>${BOOK_THEME_CSS}</style>
145
+ </head>
146
+ <body class="me-doc track-${page}${opts.draft ? ' is-draft' : ''}" id="top">
147
+ <a class="skip-link" href="#main">Skip to content</a>
148
+ ${draftBanner}
149
+ <header class="cover"><div class="cover-inner">
150
+ <p class="kicker">Made Easy \u00B7 ${page === 'human' ? 'Human guide' : 'Operator reference'}</p>
151
+ <h1>${esc(page === 'human' ? title : `${title}`)}</h1>
152
+ ${guide.subject.subtitle ? `<p class="subtitle">${esc(guide.subject.subtitle)}</p>` : ''}
153
+ <dl class="cover-meta">
154
+ <dt>Subject</dt><dd>${esc(guide.subject.type)} \u00B7 ${esc(guide.subject.name)}</dd>
155
+ <dt>Scope</dt><dd>${esc(guide.subject.scope)}</dd>
156
+ <dt>Job</dt><dd><code>${esc(guide.jobId)}</code></dd>
157
+ <dt>Recipe</dt><dd>${esc(profileTitle)} (v${esc(guide.recipe.version)})</dd>
158
+ <dt>Revision</dt><dd><code>${esc(short(model.revision))}</code></dd>
159
+ <dt>Operator reference</dt><dd><code>${esc(short(model.referenceRevision))}</code></dd>
160
+ <dt>Guide</dt><dd><code>${esc(guide.guideId)}</code></dd>
161
+ </dl></div></header>
162
+ <div class="layout">
163
+ ${renderToc(ctx, entries, generated)}
164
+ <main id="main" tabindex="-1">
165
+ ${authored.join('\n')}
166
+ ${generated.map((g) => g.html).join('\n')}
167
+ </main>
168
+ </div>
169
+ <footer class="colophon" role="contentinfo">
170
+ <p><strong>${esc(title)}</strong> \u00B7 revision <code>${esc(short(model.revision))}</code> \u00B7 operator reference <code>${esc(short(model.referenceRevision))}</code> \u00B7 guide <code>${esc(guide.guideId)}</code></p>
171
+ <p>Recipe ${esc(guide.recipe.id)}@${esc(guide.recipe.version)} \u00B7 theme ${esc(guide.theme.id)}@${esc(guide.theme.version)} \u00B7 built with ${GENERATOR} ${esc(opts.version)}.${synthetic ? ' This guide cites synthetic evidence, labelled where it appears.' : ''}${opts.draft ? ' Draft output is private and not for publication.' : ''}</p>
172
+ </footer>
173
+ </body>
174
+ </html>
175
+ `;
176
+ }
177
+ export { resolveRef };
178
+ //# sourceMappingURL=html.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/render/html.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { type GuideModel, type ModelEntry } from '../model.js';
2
+ import { type BriefDocument } from './brief.js';
3
+ import { type RenderContext } from './context.js';
4
+ export declare function renderEntryMarkdown(entry: ModelEntry, ctx: RenderContext, shift: number): string;
5
+ /** A whole track as plain Markdown with pinned revision metadata (operator/reference.md for the operator track). */
6
+ export declare function renderTrackMarkdown(model: GuideModel, track: 'human' | 'operator'): string;
7
+ export declare function renderReferenceMarkdown(model: GuideModel): string;
8
+ /** brief.md: printable worked brief, blank template and review checklist. */
9
+ export declare function renderBriefMarkdown(doc: BriefDocument): string;
10
+ export declare function renderBriefJson(model: GuideModel): string;
11
+ //# sourceMappingURL=markdown-out.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-out.d.ts","sourceRoot":"","sources":["../../src/render/markdown-out.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAEtF,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AA6B/D,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAOhG;AAED,oHAAoH;AACpH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,UAAU,GAAG,MAAM,CAmB1F;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEjE;AAUD,6EAA6E;AAC7E,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CAiD9D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEzD"}