@anselmdk/feature-spec-md 0.8.2 → 0.9.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -1
- package/SPEC_FORMAT.md +89 -11
- package/dist/cli.js +16 -8
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +5 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +97 -0
- package/dist/config.js.map +1 -0
- package/dist/featureSpecs.d.ts +2 -0
- package/dist/featureSpecs.d.ts.map +1 -1
- package/dist/featureSpecs.js +86 -1
- package/dist/featureSpecs.js.map +1 -1
- package/dist/githubActionDiffReport.d.ts +5 -0
- package/dist/githubActionDiffReport.d.ts.map +1 -1
- package/dist/githubActionDiffReport.js +154 -46
- package/dist/githubActionDiffReport.js.map +1 -1
- package/dist/githubActionFtp.d.ts.map +1 -1
- package/dist/githubActionFtp.js +14 -2
- package/dist/githubActionFtp.js.map +1 -1
- package/dist/githubActionOutput.d.ts.map +1 -1
- package/dist/githubActionOutput.js.map +1 -1
- package/dist/githubReportMetadata.js +14 -5
- package/dist/githubReportMetadata.js.map +1 -1
- package/dist/index.d.ts +6 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/mockReports.d.ts.map +1 -1
- package/dist/mockReports.js +41 -8
- package/dist/mockReports.js.map +1 -1
- package/dist/mocks/current/tests/supportDesk.spec.d.ts.map +1 -1
- package/dist/mocks/current/tests/supportDesk.spec.js +15 -3
- package/dist/mocks/current/tests/supportDesk.spec.js.map +1 -1
- package/dist/mocks/previous/tests/supportDesk.spec.d.ts.map +1 -1
- package/dist/mocks/previous/tests/supportDesk.spec.js +14 -2
- package/dist/mocks/previous/tests/supportDesk.spec.js.map +1 -1
- package/dist/playwright.d.ts.map +1 -1
- package/dist/playwright.js +3 -1
- package/dist/playwright.js.map +1 -1
- package/dist/reportArtifacts.d.ts.map +1 -1
- package/dist/reportArtifacts.js.map +1 -1
- package/dist/reportHtml.d.ts.map +1 -1
- package/dist/reportHtml.js +75 -2
- package/dist/reportHtml.js.map +1 -1
- package/dist/reportTemplate.d.ts +4 -1
- package/dist/reportTemplate.d.ts.map +1 -1
- package/dist/reportTemplate.js +290 -53
- package/dist/reportTemplate.js.map +1 -1
- package/dist/reportTemplates/shared.d.ts.map +1 -1
- package/dist/reportTemplates/shared.js.map +1 -1
- package/dist/screenshots.d.ts.map +1 -1
- package/dist/screenshots.js +3 -1
- package/dist/screenshots.js.map +1 -1
- package/dist/specDocuments.d.ts +3 -1
- package/dist/specDocuments.d.ts.map +1 -1
- package/dist/specDocuments.js +12 -1
- package/dist/specDocuments.js.map +1 -1
- package/dist/types.d.ts +29 -0
- package/dist/types.d.ts.map +1 -1
- package/docs/evidence-policy.md +1 -0
- package/docs/report-development.md +9 -9
- package/docs/spec-driven-flow.md +1 -0
- package/package.json +1 -1
- package/src/mocks/current/specs/support-desk.design.md +1 -0
- package/src/mocks/current/specs/support-desk.model.md +1 -0
- package/src/mocks/current/specs/support-platform.stack.md +1 -0
- package/src/mocks/current/specs/ticket-inbox.feature.md +1 -0
- package/src/mocks/current/specs/ticket-reply.feature.md +1 -0
- package/src/mocks/current/tests/supportDesk.spec.ts +19 -3
- package/src/mocks/previous/specs/support-desk.model.md +1 -0
- package/src/mocks/previous/specs/ticket-inbox.feature.md +1 -0
- package/src/mocks/previous/specs/ticket-reply.feature.md +1 -0
- package/src/mocks/previous/tests/supportDesk.spec.ts +14 -2
package/dist/reportHtml.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { html } from "./html.js";
|
|
2
2
|
import { githubReportMetadataFromEnv } from "./githubReportMetadata.js";
|
|
3
3
|
import { insertReportMetadata, } from "./reportMetadata.js";
|
|
4
|
-
import { indentTemplateBlock, reportPageDefaults } from "./reportTemplates/shared.js";
|
|
4
|
+
import { indentTemplateBlock, reportPageDefaults, } from "./reportTemplates/shared.js";
|
|
5
5
|
export function renderHtmlPage({ title, body, styles = "", scripts = "", maxWidth, metadata = githubReportMetadataFromEnv(), }) {
|
|
6
6
|
const defaults = reportPageDefaults(maxWidth, styles);
|
|
7
7
|
const page = `<!doctype html>
|
|
@@ -10,21 +10,94 @@ export function renderHtmlPage({ title, body, styles = "", scripts = "", maxWidt
|
|
|
10
10
|
<meta charset="utf-8">
|
|
11
11
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
12
12
|
<title>${html(title)}</title>
|
|
13
|
+
<script>(function(){var saved;try{saved=localStorage.getItem("feature-spec-md-theme");}catch(error){}var dark=window.matchMedia("(prefers-color-scheme: dark)").matches;document.documentElement.dataset.theme=saved|| (dark?"dark":"light");})();</script>
|
|
13
14
|
<style>
|
|
15
|
+
:root {
|
|
16
|
+
color-scheme: light;
|
|
17
|
+
--bg: #ffffff;
|
|
18
|
+
--fg: #1f2328;
|
|
19
|
+
--surface: #ffffff;
|
|
20
|
+
--surface-muted: #f6f8fa;
|
|
21
|
+
--surface-hover: #eef2f6;
|
|
22
|
+
--border: #d0d7de;
|
|
23
|
+
--muted: #57606a;
|
|
24
|
+
--link: #0969da;
|
|
25
|
+
--success: #1a7f37;
|
|
26
|
+
--danger: #cf222e;
|
|
27
|
+
--warning: #9a6700;
|
|
28
|
+
--diff-added: #dafbe1;
|
|
29
|
+
--diff-removed: #ffebe9;
|
|
30
|
+
--overlay: rgba(0, 0, 0, .82);
|
|
31
|
+
}
|
|
32
|
+
:root[data-theme="dark"] {
|
|
33
|
+
color-scheme: dark;
|
|
34
|
+
--bg: #0d1117;
|
|
35
|
+
--fg: #e6edf3;
|
|
36
|
+
--surface: #161b22;
|
|
37
|
+
--surface-muted: #21262d;
|
|
38
|
+
--surface-hover: #30363d;
|
|
39
|
+
--border: #3d444d;
|
|
40
|
+
--muted: #9198a1;
|
|
41
|
+
--link: #58a6ff;
|
|
42
|
+
--success: #3fb950;
|
|
43
|
+
--danger: #f85149;
|
|
44
|
+
--warning: #d29922;
|
|
45
|
+
--diff-added: #12261e;
|
|
46
|
+
--diff-removed: #2d1517;
|
|
47
|
+
--overlay: rgba(0, 0, 0, .9);
|
|
48
|
+
}
|
|
49
|
+
* { box-sizing: border-box; }
|
|
14
50
|
body {
|
|
15
51
|
font-family: system-ui, sans-serif;
|
|
16
52
|
max-width: ${defaults.maxWidth};
|
|
17
53
|
margin: 0 auto;
|
|
18
54
|
padding: 40px 24px;
|
|
19
|
-
color:
|
|
55
|
+
color: var(--fg);
|
|
56
|
+
background: var(--bg);
|
|
20
57
|
line-height: 1.5;
|
|
21
58
|
}
|
|
59
|
+
.theme-toggle { position: fixed; z-index: 20; top: 12px; right: 12px; border: 1px solid var(--border); border-radius: 999px; background: var(--surface); color: var(--fg); cursor: pointer; font: inherit; font-size: 13px; font-weight: 600; padding: 7px 12px; }
|
|
60
|
+
.theme-toggle:hover { background: var(--surface-hover); }
|
|
61
|
+
.theme-toggle:focus-visible, [data-lightbox]:focus-visible, .lightbox-close:focus-visible { outline: 2px solid var(--link); outline-offset: 2px; }
|
|
62
|
+
[data-lightbox] { cursor: zoom-in; }
|
|
63
|
+
.image-lightbox { width: 100vw; height: 100vh; max-width: none; max-height: none; margin: 0; padding: 0; border: 0; background: transparent; overflow: hidden; }
|
|
64
|
+
.image-lightbox::backdrop { background: var(--overlay); }
|
|
65
|
+
.lightbox-close { position: fixed; z-index: 2; top: 14px; right: 14px; border: 1px solid rgba(255,255,255,.5); border-radius: 999px; background: rgba(0,0,0,.72); color: white; cursor: pointer; font: inherit; font-weight: 700; padding: 8px 13px; }
|
|
66
|
+
.lightbox-viewport { width: 100%; height: 100%; overflow: auto; padding: 56px 24px 24px; }
|
|
67
|
+
.lightbox-viewport img { display: block; width: auto; height: auto; max-width: none; max-height: none; margin: 0 auto; background: white; }
|
|
22
68
|
${indentTemplateBlock(defaults.styleText, 4)}
|
|
23
69
|
</style>
|
|
24
70
|
</head>
|
|
25
71
|
<body>
|
|
72
|
+
<button class="theme-toggle" type="button" aria-label="Toggle dark mode">Dark mode</button>
|
|
26
73
|
${indentTemplateBlock(body, 2)}
|
|
27
74
|
${scripts ? indentTemplateBlock(scripts, 2) : ""}
|
|
75
|
+
<dialog class="image-lightbox" aria-label="Screenshot viewer">
|
|
76
|
+
<button class="lightbox-close" type="button">Close</button>
|
|
77
|
+
<div class="lightbox-viewport"><img alt=""></div>
|
|
78
|
+
</dialog>
|
|
79
|
+
<script>
|
|
80
|
+
(function(){
|
|
81
|
+
var root=document.documentElement;
|
|
82
|
+
var themeButton=document.querySelector(".theme-toggle");
|
|
83
|
+
function updateThemeButton(){themeButton.textContent=root.dataset.theme==="dark"?"Light mode":"Dark mode";}
|
|
84
|
+
themeButton.addEventListener("click",function(){
|
|
85
|
+
root.dataset.theme=root.dataset.theme==="dark"?"light":"dark";
|
|
86
|
+
try{localStorage.setItem("feature-spec-md-theme",root.dataset.theme);}catch(error){}
|
|
87
|
+
updateThemeButton();
|
|
88
|
+
document.dispatchEvent(new CustomEvent("feature-spec-theme-change",{detail:{theme:root.dataset.theme}}));
|
|
89
|
+
});
|
|
90
|
+
updateThemeButton();
|
|
91
|
+
|
|
92
|
+
var dialog=document.querySelector(".image-lightbox");
|
|
93
|
+
var viewer=dialog.querySelector("img");
|
|
94
|
+
function openImage(target){viewer.src=target.currentSrc||target.src;viewer.alt=target.alt||"Screenshot";dialog.showModal();dialog.querySelector(".lightbox-viewport").scrollTo(0,0);}
|
|
95
|
+
document.addEventListener("click",function(event){var target=event.target.closest("img[data-lightbox]");if(target){event.preventDefault();openImage(target);}});
|
|
96
|
+
document.addEventListener("keydown",function(event){var target=event.target;if((event.key==="Enter"||event.key===" ")&&target instanceof HTMLImageElement&&target.matches("[data-lightbox]")){event.preventDefault();openImage(target);}});
|
|
97
|
+
dialog.querySelector(".lightbox-close").addEventListener("click",function(){dialog.close();});
|
|
98
|
+
dialog.addEventListener("click",function(event){if(event.target===dialog)dialog.close();});
|
|
99
|
+
})();
|
|
100
|
+
</script>
|
|
28
101
|
</body>
|
|
29
102
|
</html>
|
|
30
103
|
`;
|
package/dist/reportHtml.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reportHtml.js","sourceRoot":"","sources":["../src/reportHtml.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EACL,oBAAoB,GAErB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,
|
|
1
|
+
{"version":3,"file":"reportHtml.js","sourceRoot":"","sources":["../src/reportHtml.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EACL,oBAAoB,GAErB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,6BAA6B,CAAC;AAWrC,MAAM,UAAU,cAAc,CAAC,EAC7B,KAAK,EACL,IAAI,EACJ,MAAM,GAAG,EAAE,EACX,OAAO,GAAG,EAAE,EACZ,QAAQ,EACR,QAAQ,GAAG,2BAA2B,EAAE,GACxB;IAChB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,IAAI,GAAG;;;;;WAKJ,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAwCH,QAAQ,CAAC,QAAQ;;;;;;;;;;;;;;;;EAgBlC,mBAAmB,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;;;;;EAK1C,mBAAmB,CAAC,IAAI,EAAE,CAAC,CAAC;EAC5B,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6B/C,CAAC;IAEA,OAAO,oBAAoB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC9C,CAAC"}
|
package/dist/reportTemplate.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { CoverageSummary, DesignSpec, FeatureSpec, ModelSpec, SpecScreenshot, StackSpec, ValidationIssue } from "./types.js";
|
|
1
|
+
import type { CoverageSummary, DesignSpec, FeatureSpec, ModelSpec, ReportLayer, SpecScreenshot, StackSpec, ValidationIssue } from "./types.js";
|
|
2
2
|
export type ReportOptions = {
|
|
3
3
|
coverage?: CoverageSummary;
|
|
4
4
|
models?: ModelSpec[];
|
|
@@ -11,6 +11,9 @@ export type ReportOptions = {
|
|
|
11
11
|
githubBaseUrl?: string;
|
|
12
12
|
githubRef?: string;
|
|
13
13
|
repositoryUrl?: string;
|
|
14
|
+
layers?: ReportLayer[];
|
|
15
|
+
layersDefaultOpen?: boolean;
|
|
16
|
+
documentsDefaultOpen?: boolean;
|
|
14
17
|
};
|
|
15
18
|
export declare function renderHtmlReport(specs: FeatureSpec[], options?: ReportOptions): string;
|
|
16
19
|
//# sourceMappingURL=reportTemplate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reportTemplate.d.ts","sourceRoot":"","sources":["../src/reportTemplate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,eAAe,EACf,UAAU,EAEV,WAAW,EAEX,SAAS,EACT,cAAc,EACd,SAAS,EAET,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"reportTemplate.d.ts","sourceRoot":"","sources":["../src/reportTemplate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,eAAe,EACf,UAAU,EAEV,WAAW,EAEX,SAAS,EACT,WAAW,EACX,cAAc,EACd,SAAS,EAET,eAAe,EAChB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,UAAU,EAAE,CAAC;IACvB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAwCF,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAAE,EACpB,OAAO,GAAE,aAAkB,UAe5B"}
|