@atelic-action/artifact 1.2.0 → 1.3.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.
- package/README.md +3 -3
- package/package.json +1 -1
- package/src/documents/Read.tsx +19 -7
- package/src/documents/documents.css +23 -7
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@ The documents the practice hands or sends a business, as a published package and
|
|
|
7
7
|
|
|
8
8
|
Three layers, each a version the next depends on (ATE-671): `@atelic-action/ui` holds the pieces, this package holds the documents built from them, and each business's folder holds only its content, routes, and config. A document fix reaches a folder by bumping this package; a piece fix by bumping ui here, then this package in the folder.
|
|
9
9
|
|
|
10
|
-
Five artifacts live in the template site: the **writeup** at `/writeup`, the graded document an owner gets, a web page first with its printed copy derived from it; the **read** at `/read`, what a customer gets at the end of an engagement's first week, the baseline's grades explained by cause with the plan in order; the **proposal** at `/proposal`, sealed into the page and opened by the reader's own email address; the **monthly page** at `/report`, what an Operate client gets each month on one letter sheet; and the **note** at `/notes`, the first touch for a business whose site publishes no email address, set as a short page. The bare host sends a reader to the writeup. Every artifact prerenders to static HTML, stays out of every index, and carries the practice's brand by default.
|
|
10
|
+
Five artifacts live in the template site: the **writeup** at `/writeup`, the graded document an owner gets, a web page first with its printed copy derived from it; the **read** at `/the-read`, what a customer gets at the end of an engagement's first week, the baseline's grades explained by cause with the plan in order; the **proposal** at `/proposal`, sealed into the page and opened by the reader's own email address; the **monthly page** at `/report`, what an Operate client gets each month on one letter sheet; and the **note** at `/notes`, the first touch for a business whose site publishes no email address, set as a short page. The bare host sends a reader to the writeup. Every artifact prerenders to static HTML, stays out of every index, and carries the practice's brand by default.
|
|
11
11
|
|
|
12
12
|
The method behind them (the seven sections, the four grades from A to D, the rented line, what moved, and when an artifact is private) is the practice repo's `FOOTPRINT.md`. This repo builds to it and never restates it.
|
|
13
13
|
|
|
@@ -25,8 +25,8 @@ Every export of the package, all from the one entry, `@atelic-action/artifact`.
|
|
|
25
25
|
| `ratingCell` | A star rating table cell for a writeup table, sorted by its figure | `/writeup` |
|
|
26
26
|
| `WriteupBlock`, `WriteupTopic`, `WriteupPart`, `WriteupSheet`, `WriteupSummary`, `WriteupSummaryRow`, `WriteupMarkets`, `WriteupRented`, `WriteupMark`, `WriteupCell`, `WriteupTone`, and the rest of the `Writeup*` types | The shapes a writeup's content is written in | none |
|
|
27
27
|
| `WriteupGrade`, `WriteupPerson`, `WriteupShot` | The grade letter, the sign off person, and the owner's screen, shared by every document, all three re exported from ui | none |
|
|
28
|
-
| `Read`, `ReadProps` | The baseline's grades explained by cause: the gist table; each section read top to bottom as where we looked (the tools, linked, at the top), what it showed (a short paragraph or two, a compact table of facts, lists of examples under their own headings, and any proof pictures), why (one sentence on a tinted panel), today and after (a two column table), and what we recommend (a checklist); then the plan in order. A beat with no data is left out, heading and all | `/read` |
|
|
29
|
-
| `readLabels`, `ReadLabels` | The fixed words the read sets (Prepared for, the gist table's columns, Where We Looked, What It Showed, Why, Today, After, What We Recommend, the plan's heading), each overridable through `labels` | `/read` |
|
|
28
|
+
| `Read`, `ReadProps` | The baseline's grades explained by cause: the gist table, with an optional `note` callout under it for what the read leaves out; each section under its trade name with the owner's question beneath it, read top to bottom as where we looked (the tools, linked, at the top), what it showed (a short paragraph or two, a compact table of facts, lists of examples under their own headings, and any proof pictures), why (one sentence on a tinted panel), today and after (a two column table), and what we recommend (a checklist); then the plan in order. A beat with no data is left out, heading and all | `/the-read` |
|
|
29
|
+
| `readLabels`, `ReadLabels` | The fixed words the read sets (Prepared for, the gist table's columns, Where We Looked, What It Showed, Why, Today, After, What We Recommend, the plan's heading), each overridable through `labels` | `/the-read` |
|
|
30
30
|
| `ReadTier`, `ReadSection`, `ReadTool`, `ReadFact`, `ReadExamples`, `ReadChange`, `ReadStep`, `ReadPlan`, `ReadClose`, `ReadLink`, `ReadParagraph` | The shapes a read's content is written in, all plain data so a routine can write a read as JSON. A section's `tools` were its `sources` in 1.0.0; `sources` is still read, and rendered at the top as tools, and `ReadSource` names the same shape as `ReadTool` | none |
|
|
31
31
|
| `Report`, `ReportProps` | The monthly page: the four questions, the seven grades now and before, the sign off, on one letter sheet | `/report` |
|
|
32
32
|
| `ReportLead`, `ReportLeads`, `ReportGradeRow` | The shapes a monthly page's content is written in | none |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atelic-action/artifact",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "The composed documents the Atelic practice hands or sends a business (the writeup, the read, the monthly page, the note, and the sealed document), built from the pieces in @atelic-action/ui",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
package/src/documents/Read.tsx
CHANGED
|
@@ -24,7 +24,8 @@ import { ArrowUpRight, Check } from "lucide-react";
|
|
|
24
24
|
* plan, in order; then one closing line and the sign off.
|
|
25
25
|
*
|
|
26
26
|
* Each section reads as an aggregator of the tools we looked through, top to
|
|
27
|
-
* bottom
|
|
27
|
+
* bottom, under its trade name with the owner's question beneath it: where
|
|
28
|
+
* we looked (the tools, linked, each with an optional line);
|
|
28
29
|
* what it showed (a short paragraph or two, a compact table of facts, lists
|
|
29
30
|
* of examples, and any proof pictures); why, in one sentence on a tinted
|
|
30
31
|
* panel; today and after, a two column table of what a thing is and what it
|
|
@@ -36,7 +37,8 @@ import { ArrowUpRight, Check } from "lucide-react";
|
|
|
36
37
|
* (the `.op` classes), and adds only what is its own (the `.rd` classes).
|
|
37
38
|
* The gist table is drawn from the tiers, so a tier added later (Conversion,
|
|
38
39
|
* once the analytics access lands) is one more entry in `tiers` and appears
|
|
39
|
-
* in the table and the body alike, with no change to the props
|
|
40
|
+
* in the table and the body alike, with no change to the props; until then
|
|
41
|
+
* `note` says so in a callout under the table. Every prop
|
|
40
42
|
* is plain data, so a routine can write a read as JSON; the one exception is
|
|
41
43
|
* the sign off person's `role`, which takes a node and is equally happy with
|
|
42
44
|
* a string.
|
|
@@ -81,9 +83,9 @@ export interface ReadChange {
|
|
|
81
83
|
export interface ReadSection {
|
|
82
84
|
/** The anchor the gist table links to, e.g. "technical-seo". */
|
|
83
85
|
id: string;
|
|
84
|
-
/** The section's trade name, e.g. "Technical SEO": the
|
|
86
|
+
/** The section's trade name, e.g. "Technical SEO": the section's heading, and the gist table's Section column. */
|
|
85
87
|
name: string;
|
|
86
|
-
/** The question the section answers, in the owner's words, e.g. "Can Google read the site?"
|
|
88
|
+
/** The question the section answers, in the owner's words, e.g. "Can Google read the site?", set under the heading. */
|
|
87
89
|
question: string;
|
|
88
90
|
/** The baseline's grade. Omit for a section not yet graded; the table shows a quiet dash. */
|
|
89
91
|
grade?: WriteupGrade;
|
|
@@ -200,6 +202,8 @@ export interface ReadProps {
|
|
|
200
202
|
lede: ReadParagraph;
|
|
201
203
|
/** The heading over the gist table, e.g. "At a Glance". */
|
|
202
204
|
gistTitle?: string;
|
|
205
|
+
/** A callout under the gist table, e.g. what the read leaves out and when it follows. */
|
|
206
|
+
note?: ReadParagraph;
|
|
203
207
|
/** The key: what each letter means, in a few words each. */
|
|
204
208
|
gradeKey?: Array<{ grade: WriteupGrade; label: string }>;
|
|
205
209
|
/** The tiers in order. Each section appears in the gist table and in the body. */
|
|
@@ -408,8 +412,8 @@ function Section({ section, labels }: { section: ReadSection; labels: ReadLabels
|
|
|
408
412
|
<section className="op-topic rd-section" id={section.id}>
|
|
409
413
|
<header className="op-topic-head">
|
|
410
414
|
<div>
|
|
411
|
-
<
|
|
412
|
-
<
|
|
415
|
+
<h3>{section.name}</h3>
|
|
416
|
+
<p className="rd-question">{section.question}</p>
|
|
413
417
|
</div>
|
|
414
418
|
{section.grade && (
|
|
415
419
|
<>
|
|
@@ -500,6 +504,7 @@ export function Read({
|
|
|
500
504
|
date,
|
|
501
505
|
lede,
|
|
502
506
|
gistTitle,
|
|
507
|
+
note,
|
|
503
508
|
gradeKey,
|
|
504
509
|
tiers,
|
|
505
510
|
plan,
|
|
@@ -523,7 +528,14 @@ export function Read({
|
|
|
523
528
|
{filled(lede) && <Paragraph paragraph={lede} className="op-intro rd-lede" />}
|
|
524
529
|
</header>
|
|
525
530
|
{shownTiers.length > 0 && (
|
|
526
|
-
|
|
531
|
+
<>
|
|
532
|
+
<Gist tiers={shownTiers} title={gistTitle} gradeKey={gradeKey} labels={labels} />
|
|
533
|
+
{filled(note) && (
|
|
534
|
+
<div className="rd-note" role="note">
|
|
535
|
+
<Paragraph paragraph={note} />
|
|
536
|
+
</div>
|
|
537
|
+
)}
|
|
538
|
+
</>
|
|
527
539
|
)}
|
|
528
540
|
{shownTiers.map((tier) => (
|
|
529
541
|
<div className="rd-tier" key={tier.title}>
|
|
@@ -2171,6 +2171,7 @@
|
|
|
2171
2171
|
|
|
2172
2172
|
/* Prose links read as links here, where the writeup's are quiet. */
|
|
2173
2173
|
.atelic-ui .rd-lede a,
|
|
2174
|
+
.atelic-ui .rd-note a,
|
|
2174
2175
|
.atelic-ui .rd-beat a,
|
|
2175
2176
|
.atelic-ui .rd-gist-read a,
|
|
2176
2177
|
.atelic-ui .rd-plan a,
|
|
@@ -2251,13 +2252,13 @@
|
|
|
2251
2252
|
}
|
|
2252
2253
|
|
|
2253
2254
|
/* ---- a section: the trade name over the question, then its beats ---- */
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
font-size:
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
2255
|
+
/* The owner's question sits under the section's name. */
|
|
2256
|
+
.atelic-ui .rd-question {
|
|
2257
|
+
margin: 4px 0 0;
|
|
2258
|
+
font-size: 15.5px;
|
|
2259
|
+
line-height: 1.4;
|
|
2260
|
+
color: var(--op-ink-soft);
|
|
2261
|
+
text-wrap: pretty;
|
|
2261
2262
|
}
|
|
2262
2263
|
.atelic-ui .rd-grade .op-grade {
|
|
2263
2264
|
width: 42px;
|
|
@@ -2383,6 +2384,20 @@
|
|
|
2383
2384
|
.atelic-ui .rd-examples li + li {
|
|
2384
2385
|
margin-top: 4px;
|
|
2385
2386
|
}
|
|
2387
|
+
/* The note under the gist table: what the read leaves out, on the why panel's tint. */
|
|
2388
|
+
.atelic-ui .rd-note {
|
|
2389
|
+
margin-top: 18px;
|
|
2390
|
+
padding: 12px 14px;
|
|
2391
|
+
border-left: 3px solid var(--op-accent);
|
|
2392
|
+
border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
|
|
2393
|
+
background: var(--surface-alt);
|
|
2394
|
+
}
|
|
2395
|
+
.atelic-ui .rd-note p {
|
|
2396
|
+
font-size: 15.5px;
|
|
2397
|
+
line-height: 1.5;
|
|
2398
|
+
color: var(--op-ink);
|
|
2399
|
+
text-wrap: pretty;
|
|
2400
|
+
}
|
|
2386
2401
|
/* Why is one sentence, set apart: a tinted panel with the accent's rule. */
|
|
2387
2402
|
.atelic-ui .rd-why {
|
|
2388
2403
|
padding: 12px 14px;
|
|
@@ -2668,6 +2683,7 @@
|
|
|
2668
2683
|
.atelic-ui .rd-tools,
|
|
2669
2684
|
.atelic-ui .rd-checks li,
|
|
2670
2685
|
.atelic-ui .rd-closing,
|
|
2686
|
+
.atelic-ui .rd-note,
|
|
2671
2687
|
.atelic-ui .rd-why,
|
|
2672
2688
|
.atelic-ui .rd-step,
|
|
2673
2689
|
.atelic-ui .rd-close,
|