Skip to content

Commit d73ee0f

Browse files
committed
feat: add Decap CMS previews
1 parent 79e459c commit d73ee0f

File tree

16 files changed

+209
-146
lines changed

16 files changed

+209
-146
lines changed

.github/workflows/release-please.yml

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
name: Publish release
2+
3+
on:
4+
push:
5+
branches: [main]
6+
7+
jobs:
8+
release-please:
9+
runs-on: ubuntu-latest
10+
steps:
11+
- uses: google-github-actions/release-please-action@v4
12+
id: release
13+
with:
14+
token: ${{ secrets.GITHUB_TOKEN }}

.markdownlint-cli2.cjs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22

33
module.exports = {
44
config: require("./node_modules/markdownlint-config-fluid/.markdownlintrc.json"),
5-
ignores: ["node_modules", "src/collections", "CHANGELOG.md"]
5+
ignores: ["node_modules", "src/_includes", "src/report", "CHANGELOG.md"]
66
};

eleventy.config.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import scUri from './src/_utils/sc-uri.js';
55
import sanitizeNumber from './src/_utils/sanitize-number.js';
66

77
export default function eleventy(eleventyConfig) {
8-
eleventyConfig.addFilter('sc_uri', scUri);
8+
eleventyConfig.addFilter('scUri', scUri);
99

1010
eleventyConfig.addNunjucksAsyncShortcode('scTable', scTable);
1111

src/_data/success-criteria.js renamed to src/_data/successcriteria.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,6 @@ export default async function successCriteria() {
2929

3030
return results;
3131
} catch (error) {
32-
console.error(`Fetch failed in successCriteria.js. ${error}`);
32+
console.error(`Fetch failed in successcriteria.js. ${error}`);
3333
}
3434
}

src/_data/totals-by-level.js renamed to src/_data/totalsbylevel.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import successCriteria from './success-criteria.js';
1+
import successCriteria from './successcriteria.js';
22

33
export default async function totalsByLevel() {
44
const totals = {

src/_includes/about-this-report.md renamed to src/_includes/about.md

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
## About this report
2+
13
TODO.
24

35
### Methodology

src/_layouts/report.njk

+19-32
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ layout: base
1414

1515
<dl>
1616
<dt>Evaluated by</dt>
17-
<dd>{{ evaluator }}</dd>
17+
<dd>{% for evaluator in evaluators %}{{ evaluator }}{% if not loop.last%}, {% endif %}{% endfor %}</dd>
1818
<dt>Commissioned by</dt>
1919
<dd>{{ commissioner }}</dd>
2020
<dt>Target</dt>
@@ -35,9 +35,8 @@ layout: base
3535
{% scTable issueList, targetLevel, targetWcagVersion %}
3636
</section>
3737

38-
<section id="explanation-of-report">
39-
<h2>About this report</h2>
40-
{% renderFile "./src/_includes/about-this-report.md" %}
38+
<section id="about-this-report">
39+
{% renderFile "./src/_includes/about.md" %}
4140
</section>
4241

4342
<section id="scope">
@@ -47,23 +46,29 @@ layout: base
4746
<p>Scope:
4847
<ul>
4948
{% for scope in scope %}
50-
<li>{{ scope }}</li>
49+
<li id="{{ scope.title | slugify }}">
50+
<a href="{{ scope.url }}">{{ scope.title }}<span class="external">(external link)</span> <svg aria-hidden="true" role="presentation" focusable="false" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" height="14" width="16" style="vertical-align: middle;"><path xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" d="M14 5C13.4477 5 13 4.55228 13 4C13 3.44772 13.4477 3 14 3H20C20.2652 3 20.5196 3.10536 20.7071 3.29289C20.8946 3.48043 21 3.73478 21 4L21 10C21 10.5523 20.5523 11 20 11C19.4477 11 19 10.5523 19 10L19 6.41422L9.70711 15.7071C9.31658 16.0976 8.68342 16.0976 8.29289 15.7071C7.90237 15.3166 7.90237 14.6834 8.29289 14.2929L17.5858 5H14ZM3 7C3 5.89543 3.89543 5 5 5H10C10.5523 5 11 5.44772 11 6C11 6.55228 10.5523 7 10 7H5V19H17V14C17 13.4477 17.4477 13 18 13C18.5523 13 19 13.4477 19 14V19C19 20.1046 18.1046 21 17 21H5C3.89543 21 3 20.1046 3 19V7Z" fill="currentColor"></path></svg></a>
51+
{% if scope.description %}<p>{{ scope.description }}</p>{% endif %}
52+
</li>
5153
{% endfor %}
5254
</ul>
5355
{% endif %}
54-
{% if out_of_scope %}
56+
{% if outOfScope %}
5557
<p>Not in scope:
5658
<ul>
57-
{% for out_of_scope in out_of_scope %}
58-
<li>{{ out_of_scope }}</li>
59+
{% for outOfScope in outOfScope %}
60+
<li>
61+
<a href="{{ outOfScope.url }}">{{ outOfScope.title }}<span class="external">(external link)</span> <svg aria-hidden="true" role="presentation" focusable="false" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" height="14" width="16" style="vertical-align: middle;"><path xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" d="M14 5C13.4477 5 13 4.55228 13 4C13 3.44772 13.4477 3 14 3H20C20.2652 3 20.5196 3.10536 20.7071 3.29289C20.8946 3.48043 21 3.73478 21 4L21 10C21 10.5523 20.5523 11 20 11C19.4477 11 19 10.5523 19 10L19 6.41422L9.70711 15.7071C9.31658 16.0976 8.68342 16.0976 8.29289 15.7071C7.90237 15.3166 7.90237 14.6834 8.29289 14.2929L17.5858 5H14ZM3 7C3 5.89543 3.89543 5 5 5H10C10.5523 5 11 5.44772 11 6C11 6.55228 10.5523 7 10 7H5V19H17V14C17 13.4477 17.4477 13 18 13C18.5523 13 19 13.4477 19 14V19C19 20.1046 18.1046 21 17 21H5C3.89543 21 3 20.1046 3 19V7Z" fill="currentColor"></path></svg></a>
62+
{% if outOfScope.description %}<p>{{ outOfScope.description }}</p>{% endif %}
63+
</li>
5964
{% endfor %}
6065
{% endif %}
6166
</ul>
62-
<h3>Accessibility support</h3>
63-
<p>The audited website should work in at least the following browsers and assistive technologies:</p>
67+
<h3>Tools used</h3>
68+
<p>In conducting this audit, the following tools were used:</p>
6469
<ul>
65-
{% for baseline in baseline %}
66-
<li>{{ baseline }}</li>
70+
{% for tool in tools %}
71+
<li>{{ tool.name }}{% if tool.version %} {{ tool.version }}{% endif %}</li>
6772
{% endfor %}
6873
</ul>
6974
<h3>Technologies used</h3>
@@ -75,24 +80,6 @@ layout: base
7580
</ul>
7681
</section>
7782

78-
<section id="sample">
79-
<h2>Sample</h2>
80-
<p>Representative sample</p>
81-
<ul class="sample-list">
82-
{% for sample in samples %}
83-
<li id="{{ sample.title | slug }}">
84-
<div>
85-
{# <img src="{% sample_image sample.id, page.fileSlug %}" alt="" /> #}
86-
</div>
87-
<div>
88-
<strong>{{ sample.title }}</strong>
89-
<a href="{{ sample.url }}">{{ sample.url }}</a>
90-
<p>{{ sample.description }}</p></li>
91-
</div>
92-
{% endfor %}
93-
</ul>
94-
</section>
95-
9683
<section id="issues">
9784
<h2>Issues</h2>
9885
<ol>
@@ -114,10 +101,10 @@ layout: base
114101
<dt>WCAG Criteria: </dt>
115102
<dd>
116103
{% for sc in issue.data.sc | sort %}
117-
<a class="wcag-link" href="{{ sc | sc_uri(targetWcagVersion) }}">
104+
<a class="wcag-link" href="{{ sc | scUri(targetWcagVersion) }}">
118105
{{ sc }}: {{ successCriteria[sc]['name'] }}
119106
<span class="external">(external link)</span>
120-
<svg aria-hidden="true" role="presentation" focusable="false" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" height="14" width="16" style="vertical-align: middle;"><path xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" d="M14 5C13.4477 5 13 4.55228 13 4C13 3.44772 13.4477 3 14 3H20C20.2652 3 20.5196 3.10536 20.7071 3.29289C20.8946 3.48043 21 3.73478 21 4L21 10C21 10.5523 20.5523 11 20 11C19.4477 11 19 10.5523 19 10L19 6.41422L9.70711 15.7071C9.31658 16.0976 8.68342 16.0976 8.29289 15.7071C7.90237 15.3166 7.90237 14.6834 8.29289 14.2929L17.5858 5H14ZM3 7C3 5.89543 3.89543 5 5 5H10C10.5523 5 11 5.44772 11 6C11 6.55228 10.5523 7 10 7H5V19H17V14C17 13.4477 17.4477 13 18 13C18.5523 13 19 13.4477 19 14V19C19 20.1046 18.1046 21 17 21H5C3.89543 21 3 20.1046 3 19V7Z" fill="currentColor"></path></svg>
107+
<svg aria-hidden="true" role="presentation" focusable="false" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" height="14" width="16"><path xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" d="M14 5C13.4477 5 13 4.55228 13 4C13 3.44772 13.4477 3 14 3H20C20.2652 3 20.5196 3.10536 20.7071 3.29289C20.8946 3.48043 21 3.73478 21 4L21 10C21 10.5523 20.5523 11 20 11C19.4477 11 19 10.5523 19 10L19 6.41422L9.70711 15.7071C9.31658 16.0976 8.68342 16.0976 8.29289 15.7071C7.90237 15.3166 7.90237 14.6834 8.29289 14.2929L17.5858 5H14ZM3 7C3 5.89543 3.89543 5 5 5H10C10.5523 5 11 5.44772 11 6C11 6.55228 10.5523 7 10 7H5V19H17V14C17 13.4477 17.4477 13 18 13C18.5523 13 19 13.4477 19 14V19C19 20.1046 18.1046 21 17 21H5C3.89543 21 3 20.1046 3 19V7Z" fill="currentColor"></path></svg>
121108
</a>
122109
{% endfor %}
123110
</dd>

src/_utils/sc-table.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* eslint-disable unicorn/no-array-callback-reference */
22
/* eslint-disable unicorn/no-array-reduce */
3-
import totalsByLevel from '../_data/totals-by-level.js';
3+
import totalsByLevel from '../_data/totalsbylevel.js';
44
import countSuccessCriterionOnce from './count-success-criteria-once.js';
55

66
export default async function scTable(

src/_utils/sc-uri.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import successCriteria from '../_data/success-criteria.js';
1+
import successCriteria from '../_data/successcriteria.js';
22

33
export default async function scUri(sc, targetWcagVersion) {
44
const baseUri = `https://www.w3.org/WAI/WCAG22/quickref/?versions=${targetWcagVersion}`;

src/admin/admin.njk

+3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ eleventyExcludeFromCollections: true
99
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
1010
<title>IDRC WCAG Reporter</title>
1111
<script src="https://identity.netlify.com/v1/netlify-identity-widget.js"></script>
12+
<script>
13+
window.successCriteria = {{ successcriteria | dump | safe }};
14+
</script>
1215
</head>
1316
<body>
1417
<!-- Include the script that builds the page and powers Decap CMS -->

src/admin/config.yml

+34-31
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,24 @@ editor:
99
collections:
1010
- label: Report
1111
name: report
12-
editor:
13-
preview: false
1412
files:
13+
- label: About
14+
name: about
15+
file: src/_includes/about.md
16+
fields:
17+
- name: body
18+
label: About this report
19+
widget: markdown
1520
- label: Report Data
16-
name: reportData
21+
name: report
1722
file: src/report/index.md
1823
fields:
19-
- label: Layout
20-
name: layout
21-
widget: hidden
22-
default: "report"
23-
- label: Tags
24-
name: tags
25-
widget: hidden
26-
default: "reports"
2724
- label: Title
2825
name: title
2926
widget: string
30-
- name: "evaluator"
31-
label: "Evaluator"
32-
widget: "string"
27+
- name: "evaluators"
28+
label: "Evaluators"
29+
widget: "list"
3330
- name: "commissioner"
3431
label: "Commissioner"
3532
widget: "string"
@@ -47,37 +44,43 @@ collections:
4744
- name: specialRequirements
4845
label: Special Requirements
4946
widget: text
47+
- name: body
48+
label: Executive summary
49+
widget: markdown
5050
- name: scope
51-
label: Scope
51+
label: In scope
52+
label_singular: in scope item
5253
widget: list
53-
hint: Enter page names or URLs in a comma-separated list.
54-
- name: out_of_scope
54+
fields:
55+
- { name: "title", label: "Title", widget: "string" }
56+
- { name: "url", label: "URL", widget: "string" }
57+
- { name: "description", label: "Description", widget: "text", required: false }
58+
- name: outOfScope
5559
label: Out of scope
60+
label_singular: out of scope item
5661
widget: list
57-
hint: Enter page names or URLs in a comma-separated list.
58-
- name: baseline
59-
label: Accessibility support
62+
fields:
63+
- { name: "title", label: "Title", widget: "string" }
64+
- { name: "url", label: "URL", widget: "string" }
65+
- name: tools
66+
label: Tools used
67+
label_singular: tool
6068
widget: list
61-
hint: Enter browsers and assistive technologies with which the website is expected to work in a comma-separated list.
69+
summary: '{{fields.name}} {{fields.version}}'
70+
fields:
71+
- { name: "name", label: "Tool", widget: "string" }
72+
- { name: "version", label: "Version", widget: "string", required: false }
73+
hint: Enter browsers and assistive technologies used in auditing the website.
6274
- name: technologies
6375
label: Technologies used
6476
widget: list
77+
default: [HTML, CSS, JavaScript, WAI-ARIA, SVG]
6578
hint: Enter technologies used to build the website in a comma-separated list.
66-
- name: samples
67-
label: Samples
68-
widget: list
69-
fields:
70-
- { name: "title", label: "Title", widget: "string" }
71-
- { name: "url", label: "URL", widget: "string" }
72-
- { name: "description", label: "Description", widget: "text" }
7379
- name: issues
7480
label: Issues link
7581
widget: string
7682
hint: Enter the link to the website's issues page on GitHub, Gitlab or JIRA.
7783
required: false
78-
- name: body
79-
label: Executive summary
80-
widget: markdown
8184
- label: Issues
8285
label_singular: Issue
8386
name: issue

src/admin/previews.js

+93-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
1-
/* global CMS, createClass */
1+
/* global CMS, createClass, window */
2+
3+
import slugify from '@sindresorhus/slugify';
4+
5+
const successCriteria = window.successCriteria;
6+
7+
CMS.registerPreviewStyle('/assets/styles/cms.css');
8+
CMS.registerPreviewStyle('/assets/styles/main.css');
29
CMS.registerPreviewStyle('/assets/styles/report.css');
310

411
const IssuePreview = createClass({
@@ -14,7 +21,12 @@ const IssuePreview = createClass({
1421
<dl>
1522
<div>
1623
<dt>WCAG Criteria: </dt>
17-
<dd>{entry.getIn(['data', 'sc'])}</dd>
24+
<dd>{entry.getIn(['data', 'sc']).map(sc => (
25+
<a class='wcag-link' href={`https://www.w3.org/WAI/WCAG22/quickref/#${successCriteria[sc].id}`} rel='external'>
26+
{sc} <span class='external'>(external link)</span>
27+
<svg aria-hidden='true' role='presentation' focusable='false' xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' height='14' width='16'><path xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd' clip-rule='evenodd' d='M14 5C13.4477 5 13 4.55228 13 4C13 3.44772 13.4477 3 14 3H20C20.2652 3 20.5196 3.10536 20.7071 3.29289C20.8946 3.48043 21 3.73478 21 4L21 10C21 10.5523 20.5523 11 20 11C19.4477 11 19 10.5523 19 10L19 6.41422L9.70711 15.7071C9.31658 16.0976 8.68342 16.0976 8.29289 15.7071C7.90237 15.3166 7.90237 14.6834 8.29289 14.2929L17.5858 5H14ZM3 7C3 5.89543 3.89543 5 5 5H10C10.5523 5 11 5.44772 11 6C11 6.55228 10.5523 7 10 7H5V19H17V14C17 13.4477 17.4477 13 18 13C18.5523 13 19 13.4477 19 14V19C19 20.1046 18.1046 21 17 21H5C3.89543 21 3 20.1046 3 19V7Z' fill='currentColor'></path></svg>
28+
</a>
29+
))}</dd>
1830
</div>
1931
{entry.getIn(['data', 'severity']) === 'High' ? (
2032
<div>
@@ -26,7 +38,10 @@ const IssuePreview = createClass({
2638
)}
2739
<div>
2840
<dt>Sample: </dt>
29-
<dd>{entry.getIn(['data', 'sample'])}</dd>
41+
<dd>{entry.getIn(['data', 'sample']) === 'all'
42+
? 'All pages' : (
43+
<a href={`/#${slugify(entry.getIn(['data', 'sample']))}`}>{entry.getIn(['data', 'sample'])}</a>
44+
)}</dd>
3045
</div>
3146
</dl>
3247
</div>
@@ -36,3 +51,78 @@ const IssuePreview = createClass({
3651
});
3752

3853
CMS.registerPreviewTemplate('issue', IssuePreview);
54+
55+
const ReportPreview = createClass({
56+
render() {
57+
const entry = this.props.entry;
58+
return (
59+
<>
60+
<section id='start'>
61+
<h1>Accessibility Conformance Report for {entry.getIn(['data', 'title'])}</h1>
62+
<dl>
63+
<dt>Evaluated by</dt>
64+
<dd>{entry.getIn(['data', 'evaluators']).join(', ')}</dd>
65+
<dt>Commissioned by</dt>
66+
<dd>{entry.getIn(['data', 'commissioner'])}</dd>
67+
<dt>Target</dt>
68+
<dd>WCAG {entry.getIn(['data', 'targetWcagVersion'])}, Level {entry.getIn(['data', 'targetLevel'])}</dd>
69+
<dt>Date</dt>
70+
<dd>{new Intl.DateTimeFormat('en-CA', {dateStyle: 'long'}).format(entry.getIn(['data', 'date']))}</dd>
71+
<dt>Special requirements</dt>
72+
<dd>{entry.getIn(['data', 'specialRequirements'])}</dd>
73+
</dl>
74+
</section>
75+
<section id='executive-summary'>
76+
<h2>Executive summary</h2>
77+
{this.props.widgetFor('body')}
78+
</section>
79+
<section id='scope'>
80+
<h2>Scope</h2>
81+
<h3>Pages</h3>
82+
<p>Scope:</p>
83+
<ul>
84+
{this.props.widgetsFor('scope').map((scope, index) => (
85+
<li key={index}>
86+
<a href={scope.getIn(['data', 'url'])} rel='external'>
87+
{scope.getIn(['data', 'title'])} <span class='external'>(external link)</span>
88+
<svg aria-hidden='true' role='presentation' focusable='false' xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' height='14' width='16'><path xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd' clip-rule='evenodd' d='M14 5C13.4477 5 13 4.55228 13 4C13 3.44772 13.4477 3 14 3H20C20.2652 3 20.5196 3.10536 20.7071 3.29289C20.8946 3.48043 21 3.73478 21 4L21 10C21 10.5523 20.5523 11 20 11C19.4477 11 19 10.5523 19 10L19 6.41422L9.70711 15.7071C9.31658 16.0976 8.68342 16.0976 8.29289 15.7071C7.90237 15.3166 7.90237 14.6834 8.29289 14.2929L17.5858 5H14ZM3 7C3 5.89543 3.89543 5 5 5H10C10.5523 5 11 5.44772 11 6C11 6.55228 10.5523 7 10 7H5V19H17V14C17 13.4477 17.4477 13 18 13C18.5523 13 19 13.4477 19 14V19C19 20.1046 18.1046 21 17 21H5C3.89543 21 3 20.1046 3 19V7Z' fill='currentColor'></path></svg>
89+
</a>{scope.getIn(['data', 'description']) ? (
90+
<p>{scope.getIn(['data', 'description'])}</p>
91+
) : ''}
92+
</li>
93+
))}
94+
</ul>
95+
<p>Not in scope:</p>
96+
<ul>
97+
{this.props.widgetsFor('outOfScope').map((outOfScope, index) => (
98+
<li key={index}>
99+
<a href={outOfScope.getIn(['data', 'url'])} rel='external'>
100+
{outOfScope.getIn(['data', 'title'])} <span class='external'>(external link)</span>
101+
<svg aria-hidden='true' role='presentation' focusable='false' xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' height='14' width='16'><path xmlns='http://www.w3.org/2000/svg' fill-rule='evenodd' clip-rule='evenodd' d='M14 5C13.4477 5 13 4.55228 13 4C13 3.44772 13.4477 3 14 3H20C20.2652 3 20.5196 3.10536 20.7071 3.29289C20.8946 3.48043 21 3.73478 21 4L21 10C21 10.5523 20.5523 11 20 11C19.4477 11 19 10.5523 19 10L19 6.41422L9.70711 15.7071C9.31658 16.0976 8.68342 16.0976 8.29289 15.7071C7.90237 15.3166 7.90237 14.6834 8.29289 14.2929L17.5858 5H14ZM3 7C3 5.89543 3.89543 5 5 5H10C10.5523 5 11 5.44772 11 6C11 6.55228 10.5523 7 10 7H5V19H17V14C17 13.4477 17.4477 13 18 13C18.5523 13 19 13.4477 19 14V19C19 20.1046 18.1046 21 17 21H5C3.89543 21 3 20.1046 3 19V7Z' fill='currentColor'></path></svg>
102+
</a>{outOfScope.getIn(['data', 'description']) ? (
103+
<p>{outOfScope.getIn(['data', 'description'])}</p>
104+
) : ''}
105+
</li>
106+
))}
107+
</ul>
108+
<h3>Tools used</h3>
109+
<p>In conducting this audit, the following tools were used:</p>
110+
<ul>
111+
{this.props.widgetsFor('tools').map((tool, index) => (
112+
<li key={index}>{tool.getIn(['data', 'name'])}{tool.getIn(['data', 'version']) ? ` ${tool.getIn(['data', 'version'])}` : ''}</li>
113+
))}
114+
</ul>
115+
<h3>Technologies used</h3>
116+
<p>The audited web page relies on the following technologies:</p>
117+
<ul>
118+
{entry.getIn(['data', 'technologies']).map((technology, index) => (
119+
<li key={index}>{technology}</li>
120+
))}
121+
</ul>
122+
</section>
123+
</>
124+
);
125+
},
126+
});
127+
128+
CMS.registerPreviewTemplate('report', ReportPreview);

src/assets/styles/cms.css

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.frame-content {
2+
padding: 1.5rem;
3+
}

0 commit comments

Comments
 (0)