@dataimago/css 0.1.0-alpha.18 → 0.1.0-alpha.19

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 CHANGED
@@ -12,6 +12,7 @@ Depends on [`@dataimago/tokens`](../tokens) for the canonical house identity.
12
12
  - `dist/quarto/dataimago-{light,dark}.scss` + `components.scss` — the Quarto theme pair (self-contained; dark keyed to `body.quarto-dark`) and the `.di-*` components.
13
13
  - `dist/latex/dataimago-tokens.sty` + `dataimago.sty` — the generated `di-*` colour layer and the LaTeX macro layer.
14
14
  - `dist/dataviz/` — the Okabe-Ito data-viz palette as CSS, TeX (PSTricks/TikZ), JSON and R.
15
+ - `dist/templates/` — the project templates (`KNOWLEDGE-*.md`, the Quarto website scaffold) as stamped copies, synced into a project with `dataimago-sync` like the other outputs (house only).
15
16
  - `dist/outputs.json` and the `dataimago-sync` bin — pinned sync for non-JS consumers (below).
16
17
 
17
18
  Use [`@dataimago/css-neutral`](../css-neutral) instead when an externally-owned Level-3 app or future third-party hub needs the neutral identity.
@@ -1,4 +1,4 @@
1
- /* @dataimago/css@0.1.0-alpha.18 dist/dataviz/dataimago-dataviz.css · sha256:4fb36e2401c1cd21f57d50c017ac080377c3943362a5b6c5ce2cd658080e4499 · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.18 dataimago-sync */
1
+ /* @dataimago/css@0.1.0-alpha.19 dist/dataviz/dataimago-dataviz.css · sha256:4fb36e2401c1cd21f57d50c017ac080377c3943362a5b6c5ce2cd658080e4499 · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.19 dataimago-sync */
2
2
  /* dataimago data-viz palette (Okabe-Ito). Categorical colour is never the only channel. */
3
3
  :root, [data-bs-theme="light"], body.quarto-light {
4
4
  --color-dataviz-okabe-ito-orange: #E69F00;
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "_meta": {
3
3
  "package": "@dataimago/css",
4
- "version": "0.1.0-alpha.18",
4
+ "version": "0.1.0-alpha.19",
5
5
  "path": "dist/dataviz/dataimago-dataviz.json",
6
6
  "sha256": "28160e151fca196be3e36790d6b67db232d8df060e8d9556b29dfee50f4b278b",
7
7
  "note": "generated from tokens; do not edit",
8
- "restore": "npx -p @dataimago/css@0.1.0-alpha.18 dataimago-sync"
8
+ "restore": "npx -p @dataimago/css@0.1.0-alpha.19 dataimago-sync"
9
9
  },
10
10
  "okabe-ito": {
11
11
  "orange": "#E69F00",
@@ -1,4 +1,4 @@
1
- % @dataimago/css@0.1.0-alpha.18 dist/dataviz/dataimago-dataviz.tex · sha256:d7be36cb429ce8a1f19c95a7da8f57a7fcfda85fd2b0113e086913d37e9fa645 · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.18 dataimago-sync
1
+ % @dataimago/css@0.1.0-alpha.19 dist/dataviz/dataimago-dataviz.tex · sha256:d7be36cb429ce8a1f19c95a7da8f57a7fcfda85fd2b0113e086913d37e9fa645 · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.19 dataimago-sync
2
2
  % dataimago data-viz palette (Okabe-Ito), light mode, for PSTricks and TikZ. Requires xcolor.
3
3
  \definecolor{di-dataviz-okabe-ito-orange}{HTML}{E69F00}
4
4
  \definecolor{di-dataviz-okabe-ito-sky-blue}{HTML}{56B4E9}
@@ -1,4 +1,4 @@
1
- # @dataimago/css@0.1.0-alpha.18 dist/dataviz/dataimago_dataviz.R · sha256:6443982f105b0f5e4a9d90ac2d1f6ce9fce2db4e8e8148b47f71bfc438940055 · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.18 dataimago-sync
1
+ # @dataimago/css@0.1.0-alpha.19 dist/dataviz/dataimago_dataviz.R · sha256:6443982f105b0f5e4a9d90ac2d1f6ce9fce2db4e8e8148b47f71bfc438940055 · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.19 dataimago-sync
2
2
  # dataimago data-viz palette (Okabe-Ito). Categorical colour is never the only channel:
3
3
  # pair it with marker shape, line type or a label.
4
4
 
@@ -1,4 +1,4 @@
1
- % @dataimago/css@0.1.0-alpha.18 dist/latex/dataimago-tokens.sty · sha256:97596b5136434afc7d03b17916219cdccffd6c1cdc748b861f012e06fbbfc5df · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.18 dataimago-sync
1
+ % @dataimago/css@0.1.0-alpha.19 dist/latex/dataimago-tokens.sty · sha256:97596b5136434afc7d03b17916219cdccffd6c1cdc748b861f012e06fbbfc5df · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.19 dataimago-sync
2
2
  \NeedsTeXFormat{LaTeX2e}
3
3
  \ProvidesPackage{dataimago-tokens}[dataimago design tokens, light mode]
4
4
  \RequirePackage{xcolor}
@@ -1,4 +1,4 @@
1
- % @dataimago/css@0.1.0-alpha.18 dist/latex/dataimago.sty · sha256:deefadc765fb6c3fb673d7b4e71dcc7d12473f2ee4f0de1160af062b94d7e810 · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.18 dataimago-sync
1
+ % @dataimago/css@0.1.0-alpha.19 dist/latex/dataimago.sty · sha256:deefadc765fb6c3fb673d7b4e71dcc7d12473f2ee4f0de1160af062b94d7e810 · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.19 dataimago-sync
2
2
  %%%
3
3
  %%% dataimago.sty - LaTeX Style Package for dataimago Design System
4
4
  %%%
package/dist/outputs.json CHANGED
@@ -1,15 +1,26 @@
1
1
  {
2
2
  "package": "@dataimago/css",
3
- "version": "0.1.0-alpha.18",
3
+ "version": "0.1.0-alpha.19",
4
4
  "files": {
5
- "dataviz/dataimago-dataviz.css": "128ed7ea829e6667ce3987e10df0fdbb0ccaf239f7dec629b019bae7481f0509",
6
- "dataviz/dataimago-dataviz.json": "c9f11f24f9f485d087db124b25c52002bc52db4420751738180485f80f5269bd",
7
- "dataviz/dataimago-dataviz.tex": "6fa584eed9fc11417cb7d7b29c19722e7c86d47eea3caac90022ecb36d01e2ca",
8
- "dataviz/dataimago_dataviz.R": "a5e49ca7fe859df42f1013f2c4b37784c6a4306673494855b2072e6fd7ca6721",
9
- "latex/dataimago-tokens.sty": "5db3f9be31a480ca38393f29bce535a7eb47c76cbf436eadcef17eaaf1bfae4f",
10
- "latex/dataimago.sty": "2f3f9c8492607e5b58b3359043feb11d92b4a3beb04a0dbc4176a63e19e432cd",
11
- "quarto/components.scss": "7370d1c1967f4fac2dc87a2cce394480f725967660847cb8b82e3d29b5aa4a30",
12
- "quarto/dataimago-dark.scss": "8a99910b5c7e4cebdd39efc5223e3d086e1f362a678fd5d73851f97326df32d7",
13
- "quarto/dataimago-light.scss": "46174d3e118e59493b75f6d80009dd09758337b6221b87343854f6f6f5c2211f"
5
+ "dataviz/dataimago-dataviz.css": "1af7427ac88a12540accb2da04d8442f7801c7d8176ca8d4f15a708e1e0b4cb9",
6
+ "dataviz/dataimago-dataviz.json": "e49da8cd904a941ab1586b48063e1c5d4eba4962e7fb50b045d162fa7c931c83",
7
+ "dataviz/dataimago-dataviz.tex": "f82616e309e08066b077d828152f01479b919cdc5fe48bd1db7c9914cc54123a",
8
+ "dataviz/dataimago_dataviz.R": "5f3cbacb922046ca78f2860b40d09b14676091eed5b1710c4fcc46031fa45246",
9
+ "latex/dataimago-tokens.sty": "fc1a0652b8216d4a98c09a5314aef978ea172c5dff8ad8e7a971ac53cf188b22",
10
+ "latex/dataimago.sty": "08baf49cf2cfd0d720107ccef4921c7bffcc396dd6fec10fb1f64587322ba4af",
11
+ "quarto/components.scss": "bb01822d6be02a6e5e83d66460d34931ad5863cb2c2c63f9df71787f7d0dc892",
12
+ "quarto/dataimago-dark.scss": "61ffc1bcaca9edc03a236085b3073f56a40eff9809728bd777f02121c5e3e74b",
13
+ "quarto/dataimago-light.scss": "0ccbc31c3da002545bf37709fae7e5b220c33f709722c9ec18d987088c9c4ef4",
14
+ "templates/KNOWLEDGE-explorer.md": "b954fa898ccc9960426986b97d10a9785cab12034c96656f5090f06bc94d1f80",
15
+ "templates/KNOWLEDGE-framework.md": "0cf61a6ba79f4601b6ed1d096dbe3c37a4dae75742e112e5fb2271b26e4c439d",
16
+ "templates/KNOWLEDGE-research.md": "64c10fbc9c15f2cea34c1d388793c8309430b1817b8301c2229cba34b9c21e46",
17
+ "templates/quarto_website/README.md": "9d771be3c1f73087ed641ac8117bcd19afc92a4b0397e66cb4210206759f7a17",
18
+ "templates/quarto_website/_quarto.yml.template": "9dee3b591ddcaf63455a35a46212c9ffe80aa5627a8b88bff3d74e604446b55a",
19
+ "templates/quarto_website/about.qmd.template": "b922b7b3ad54c2cd6885825901c02e02d4d2a33e9a7724ce285494b2cc498a6a",
20
+ "templates/quarto_website/assets/js/custom-anchors.js": "afd06bbc94340b5bd98acdfd46c2b01f1dc2bc604931566dc1d37cd1c569622b",
21
+ "templates/quarto_website/assets/js/logo-switch.js": "324b070c527fb47e629bac5bcfcaac7ae955707379b92c2c141c7e02cedc4469",
22
+ "templates/quarto_website/assets/js/scroll.js": "4ce5ac410a29608eb3b2c7313ccbd7d8c458655b714fe9a47a3dd0c626eb648d",
23
+ "templates/quarto_website/ethics.qmd.template": "164d344466811fcfaf3c9a42012c2a53a0a394d8b007ea8be037c77df82149d5",
24
+ "templates/quarto_website/index.qmd.template": "03ef348dcd13c479c01ebd87356e118d387df4173984940374cb0bb83b3661c9"
14
25
  }
15
26
  }
@@ -1,4 +1,4 @@
1
- // @dataimago/css@0.1.0-alpha.18 dist/quarto/components.scss · sha256:7449c84f769ce0f0ec574328144abb42b5c7087706f3ae2c6d36977977c94d50 · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.18 dataimago-sync
1
+ // @dataimago/css@0.1.0-alpha.19 dist/quarto/components.scss · sha256:7449c84f769ce0f0ec574328144abb42b5c7087706f3ae2c6d36977977c94d50 · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.19 dataimago-sync
2
2
  /*-- scss:rules --*/
3
3
  // dataimago components (.di-*) — generated from src/styles/components/.
4
4
  .di-figure-box {
@@ -1,4 +1,4 @@
1
- // @dataimago/css@0.1.0-alpha.18 dist/quarto/dataimago-dark.scss · sha256:5d85054f4316c2ad6c65d29f1b26f939e0052b6ba716ea50545a21eef69d24d7 · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.18 dataimago-sync
1
+ // @dataimago/css@0.1.0-alpha.19 dist/quarto/dataimago-dark.scss · sha256:5d85054f4316c2ad6c65d29f1b26f939e0052b6ba716ea50545a21eef69d24d7 · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.19 dataimago-sync
2
2
  // dataimago dark theme for Quarto 1.8 — generated from the design tokens (tools/formats/quarto.mjs).
3
3
  // Bootstrap Sass variables are compile-time sRGB; runtime colours come from the custom properties below.
4
4
 
@@ -1,4 +1,4 @@
1
- // @dataimago/css@0.1.0-alpha.18 dist/quarto/dataimago-light.scss · sha256:6e0e24eeabfc9524f0d4dfd70dcac22fb4b70b9c99d7a074d0354eca5c7d1603 · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.18 dataimago-sync
1
+ // @dataimago/css@0.1.0-alpha.19 dist/quarto/dataimago-light.scss · sha256:6e0e24eeabfc9524f0d4dfd70dcac22fb4b70b9c99d7a074d0354eca5c7d1603 · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.19 dataimago-sync
2
2
  // dataimago light theme for Quarto 1.8 — generated from the design tokens (tools/formats/quarto.mjs).
3
3
  // Bootstrap Sass variables are compile-time sRGB; runtime colours come from the custom properties below.
4
4
 
@@ -0,0 +1,236 @@
1
+ <!-- @dataimago/css@0.1.0-alpha.19 dist/templates/KNOWLEDGE-explorer.md · sha256:907c08638ed56813d453227759e29de08350465885d11f0efe94ec7ba8c42a50 · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.19 dataimago-sync -->
2
+ # {{PROJECT_NAME}} — Knowledge Base Operating Manual
3
+
4
+ **Domain:** {{DOMAIN_NAME}}
5
+ **Type:** explorer
6
+ **Explorer dimension:** {{EXPLORER_DIMENSION}}
7
+ **Generated:** {{GENERATED_DATE}}
8
+ **Framework:** [dataimago-design]({{FRAMEWORK_WIKI_URL}}/wiki/index.md)
9
+
10
+ This file is the operating manual for the **{{PROJECT_NAME}}** knowledge base — an AI-maintained wiki that documents the dimensions, attributes, datasets, and data quality considerations that make this application trustworthy and navigable. Read it at the start of every knowledge-work session.
11
+
12
+ ---
13
+
14
+ ## Role
15
+
16
+ You are the wiki maintainer for **{{PROJECT_NAME}}**'s knowledge base — an `explorer`-type domain wiki organized around the `{{EXPLORER_DIMENSION}}` dimension. This application has no thesis to advance; it makes a dataset navigable. Your job is to ensure that every piece of data the application presents is accurately documented — what it means, where it came from, what its limitations are.
17
+
18
+ Your job is to:
19
+ - Document new attributes as they are added to the application
20
+ - Summarize source datasets and their quality characteristics
21
+ - Answer queries about data provenance, coverage, and interpretation
22
+ - File answers as `wiki/analyses/` pages so knowledge compounds
23
+ - Lint the wiki for gaps in attribute documentation and stale dataset information
24
+
25
+ You never modify files in `raw/`. You own everything in `wiki/`.
26
+
27
+ The framework layer (how this application is built) is documented in the dataimago-design wiki (see `dataimago-framework.json` for the URL). Data and content questions belong here; build and architecture questions belong there.
28
+
29
+ ---
30
+
31
+ ## Session Start Protocol
32
+
33
+ At the start of every knowledge-work session:
34
+ 1. Read this file (KNOWLEDGE.md)
35
+ 2. Read `wiki/index.md` to orient to the current knowledge base state
36
+ 3. Read the last 5 entries of `wiki/log.md` to understand recent activity
37
+ 4. Check `wiki/attributes/` for any attributes flagged as needing documentation updates
38
+ 5. Read the framework wiki index (URL in `dataimago-framework.json`) for framework context (optional unless architecture is relevant)
39
+ 6. Ask the user: ingest new data, document an attribute, answer a query, or something else?
40
+
41
+ ---
42
+
43
+ ## Directory Structure
44
+
45
+ ```
46
+ wiki/
47
+ ├── index.md ← Master catalog of all wiki pages
48
+ ├── overview.md ← High-level synthesis: what data this application holds and why
49
+ ├── glossary.md ← Canonical terminology for this domain
50
+ ├── log.md ← Append-only activity record
51
+ ├── dimensions/ ← The organizing axes of the explorer (geography, time, etc.)
52
+ ├── attributes/ ← Each measurable property: meaning, source, coverage, caveats
53
+ ├── datasets/ ← Data sources: provenance, update cadence, coverage gaps
54
+ ├── sources/ ← Authoritative sources for datasets and attribute definitions
55
+ ├── personas/ ← Who uses the explorer and what they discover with it
56
+ └── analyses/ ← Patterns, comparisons, and insights surfaced from the data
57
+
58
+ raw/
59
+ ├── papers/ ← Academic sources, methodology documents
60
+ ├── conversations/ ← AI dialogues, decisions, notes
61
+ ├── data/ ← Raw dataset files, exports from R
62
+ └── references/ ← External data portals, API specs, codebooks
63
+ ```
64
+
65
+ ---
66
+
67
+ ## Entity Types
68
+
69
+ | Type | Location | Page purpose |
70
+ |---|---|---|
71
+ | **Dimension** | `wiki/dimensions/` | The organizing axes: what they cover, how entities are identified, edge cases |
72
+ | **Attribute** | `wiki/attributes/` | Each measurable property: precise definition, source, geographic/temporal coverage, caveats |
73
+ | **Dataset** | `wiki/datasets/` | A data source: provenance, update cadence, coverage gaps, known issues, R dataset name |
74
+ | **Source** | `wiki/sources/` | An authoritative reference for an attribute definition or dataset methodology |
75
+ | **Persona** | `wiki/personas/` | A user type: what they're trying to discover, what attributes they care about |
76
+ | **Analysis** | `wiki/analyses/` | Patterns found, comparisons made, insights derived from the data |
77
+
78
+ ---
79
+
80
+ ## The Attribute Page — Core Knowledge Atom
81
+
82
+ The `wiki/attributes/` directory is the most important part of this wiki. Every attribute the application exposes must have a page that documents:
83
+
84
+ ```markdown
85
+ ---
86
+ title: <attribute human name>
87
+ type: attribute
88
+ attribute_id: <the parameter name used in R functions and API endpoints>
89
+ created: YYYY-MM-DD
90
+ updated: YYYY-MM-DD
91
+ dataset: <wiki/datasets/dataset-name.md>
92
+ sources:
93
+ - <authoritative source for the attribute definition>
94
+ tags: []
95
+ ---
96
+
97
+ One-line description of what this attribute measures.
98
+
99
+ ## Definition
100
+ Precise definition — not just a label. What exactly is being measured? What is the unit?
101
+ What is the reference period (for point-in-time attributes)?
102
+
103
+ ## Data Source
104
+ - Dataset: [[dataset-name]]
105
+ - R dataset object: `{{PROJECT_NAME}}::dataset_name`
106
+ - R retrieval function: `get_entity_profile(entity_id, attributes = "{{ATTRIBUTE_ID}}")`
107
+
108
+ ## Coverage
109
+ - Entities covered: (e.g., "193 UN member states", "47 European countries")
110
+ - Temporal coverage: (e.g., "2000–2023 annually", "2022 only")
111
+ - Known gaps: (e.g., "Missing for small island nations with population < 50,000")
112
+
113
+ ## Data Quality
114
+ - Source reliability: (official statistics / derived / estimated / self-reported)
115
+ - Known issues: (e.g., "Pre-2010 figures use different methodology")
116
+ - Comparability caveats: (e.g., "Purchasing power adjustments vary by source year")
117
+
118
+ ## Interpretation
119
+ For non-specialist audiences: what does a high/low value on this attribute mean?
120
+ What should users NOT conclude from this attribute?
121
+
122
+ ## Related Attributes
123
+ - [[attribute-name]] — (relationship, e.g., "often inversely correlated")
124
+ ```
125
+
126
+ ---
127
+
128
+ ## Workflows
129
+
130
+ ### Ingest a New Dataset
131
+
132
+ 1. Read the raw data file from `raw/data/` and any codebook from `raw/references/`
133
+ 2. Create a `wiki/datasets/` page documenting provenance, coverage, and update cadence
134
+ 3. Create a `wiki/attributes/` page for each attribute the dataset provides
135
+ 4. Update `wiki/dimensions/` if the dataset covers new entities or extends temporal range
136
+ 5. Update `wiki/glossary.md` with any new technical terms
137
+ 6. Update `wiki/index.md` and append to `wiki/log.md`
138
+
139
+ ### Document a New Attribute
140
+
141
+ 1. Identify the authoritative source for the attribute's definition
142
+ 2. Create a `wiki/attributes/` page following the template above
143
+ 3. Verify the R retrieval function returns correct data for the attribute
144
+ 4. Add the attribute to the relevant `wiki/datasets/` page
145
+ 5. Update `wiki/index.md` and append to `wiki/log.md`
146
+
147
+ ### Ingest a Paper or Reference
148
+
149
+ 1. Read from `raw/papers/`
150
+ 2. Determine: does this define an attribute? challenge a dataset's methodology? describe a dimension?
151
+ 3. Create a `wiki/sources/` page summarizing the key claims
152
+ 4. Link to the affected `wiki/attributes/` or `wiki/datasets/` pages
153
+ 5. Update `wiki/glossary.md` and append to `wiki/log.md`
154
+
155
+ ### Query
156
+
157
+ 1. Read `wiki/index.md` to identify relevant pages (typically `wiki/attributes/` and `wiki/datasets/`)
158
+ 2. Read those pages
159
+ 3. Synthesize a clear answer with citations
160
+ 4. Ask: "Should I file this as an analysis?" If yes, save to `wiki/analyses/`
161
+ 5. Append to `wiki/log.md`
162
+
163
+ ### Lint
164
+
165
+ 1. Check every attribute in `wiki/attributes/` has: definition, coverage, data quality, interpretation
166
+ 2. Check every dataset in `wiki/datasets/` has: provenance, update cadence, known gaps
167
+ 3. Check for attributes used in the application but not documented in the wiki
168
+ 4. Check for stale dataset entries (coverage dates that should have been updated)
169
+ 5. Report findings and propose fixes
170
+ 6. Append to `wiki/log.md`
171
+
172
+ ---
173
+
174
+ ## Log Format
175
+
176
+ ```
177
+ ## [YYYY-MM-DD] <action> | <title>
178
+
179
+ **Action:** <description>
180
+ Pages created: ...
181
+ Pages updated: ...
182
+ Key additions: ...
183
+ ```
184
+
185
+ ---
186
+
187
+ ## Terminology Discipline
188
+
189
+ - Check `wiki/glossary.md` before using any domain term
190
+ - Attribute IDs (used in R functions and API endpoints) must be consistent: `{{ATTRIBUTE_ID}}` form
191
+ - Entity identifiers must be consistent: `{{EXPLORER_DIMENSION}}` → [describe ID format, e.g., ISO 3166-1 alpha-3 for countries]
192
+ - Key terms for this domain: [populated by domain expert — add canonical terms here as the wiki develops]
193
+
194
+ ---
195
+
196
+ ## R Functions in This Application
197
+
198
+ The following R functions are the retrieval backbone of {{PROJECT_NAME}}:
199
+
200
+ {{EXPORTED_FUNCTIONS}}
201
+
202
+ **Standard explorer function pattern:**
203
+ - Every attribute is retrievable via `get_entity_profile(entity_id, attributes = "attribute_id")`
204
+ - Every attribute is comparable via `compare_entities(entity_ids, "attribute_id")`
205
+ - Discovery: `get_attributes()` returns all attributes with their wiki descriptions
206
+ - Discovery: `get_entities()` returns all entities with their available attributes
207
+
208
+ ---
209
+
210
+ ## Data Quality Standards
211
+
212
+ This application makes claims about the world. Every attribute must meet these standards before it can be displayed to users:
213
+
214
+ 1. **Defined** — A `wiki/attributes/` page exists with a precise definition
215
+ 2. **Sourced** — The data source is documented in a `wiki/datasets/` page
216
+ 3. **Bounded** — Coverage (entities and time period) is documented
217
+ 4. **Caveated** — Known quality issues and comparability limits are documented
218
+ 5. **Interpreted** — A plain-language interpretation is available for non-specialist users
219
+
220
+ Attributes that fail any of these standards should be marked `status: draft` in their frontmatter and excluded from the production data explorer until the standard is met.
221
+
222
+ ---
223
+
224
+ ## Connection to the Framework Layer
225
+
226
+ This wiki documents **what data** this application holds and **what it means**. The dataimago-design wiki documents **how** the application is built. The connection:
227
+
228
+ ```
229
+ wiki/attributes/greeting.md
230
+ → documents HelloWorld::Hello_World dataset
231
+ → retrieved via get_entity_profile(entity_id)
232
+ → exposed at GET /entity/{id}?attributes=greeting
233
+ → documented in dataimago-design/wiki/patterns/rest-api-from-r.md
234
+ ```
235
+
236
+ Do not duplicate framework documentation here. Reference it.
@@ -0,0 +1,233 @@
1
+ <!-- @dataimago/css@0.1.0-alpha.19 dist/templates/KNOWLEDGE-framework.md · sha256:edc7c6622722c1258f025a385ba79fe62a03ebb4d36f06e999aabc1290145b84 · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.19 dataimago-sync -->
2
+ # {{PROJECT_NAME}} — Knowledge Base Operating Manual
3
+
4
+ **Domain:** {{DOMAIN_NAME}}
5
+ **Type:** framework
6
+ **Generated:** {{GENERATED_DATE}}
7
+ **Framework:** [dataimago-design]({{FRAMEWORK_WIKI_URL}}/wiki/index.md)
8
+
9
+ This file is the operating manual for the **{{PROJECT_NAME}}** knowledge base — an AI-maintained wiki that documents the principles, patterns, and decisions that govern this framework. Read it at the start of every knowledge-work session.
10
+
11
+ *Note: If this is dataimago-design itself, this file's role is played by `CLAUDE.md` — the original operating manual. This template applies to other framework-type applications generated by dataimago.*
12
+
13
+ ---
14
+
15
+ ## Role
16
+
17
+ You are the wiki maintainer for **{{PROJECT_NAME}}**'s knowledge base — a `framework`-type domain wiki that documents the principles, patterns, and governance decisions that constrain and guide this system's use.
18
+
19
+ Your job is to:
20
+ - Document new decisions as Architecture Decision Records (ADRs)
21
+ - Keep principles and patterns consistent and cross-referenced
22
+ - Answer queries about what the framework requires and why
23
+ - File answers as `wiki/analyses/` pages so knowledge compounds
24
+ - Lint the wiki for contradictions between principles and patterns, and for undocumented enforcement mechanisms
25
+
26
+ You never modify files in `raw/`. You own everything in `wiki/`.
27
+
28
+ The meta-framework layer (how dataimago builds framework applications) is at the URL in `dataimago-framework.json`. Questions about this specific framework's content belong here; questions about how it was generated or deployed belong there.
29
+
30
+ ---
31
+
32
+ ## Session Start Protocol
33
+
34
+ At the start of every knowledge-work session:
35
+ 1. Read this file (KNOWLEDGE.md)
36
+ 2. Read `wiki/index.md` to orient to the current knowledge base state
37
+ 3. Read the last 5 entries of `wiki/log.md` to understand recent activity
38
+ 4. Check `wiki/decisions/` for any ADRs marked `status: proposed` — these need review
39
+ 5. Read the framework wiki index (URL in `dataimago-framework.json`) for meta-framework context
40
+ 6. Ask the user: document a decision, document a pattern, answer a query, lint, or something else?
41
+
42
+ ---
43
+
44
+ ## Directory Structure
45
+
46
+ ```
47
+ wiki/
48
+ ├── index.md ← Master catalog of all wiki pages
49
+ ├── overview.md ← High-level synthesis: what this framework governs and how
50
+ ├── glossary.md ← Canonical terminology for this framework domain
51
+ ├── log.md ← Append-only activity record
52
+ ├── principles/ ← The values the framework upholds and enforces
53
+ ├── patterns/ ← How to implement each principle in practice
54
+ ├── decisions/ ← ADRs: every significant choice with justification
55
+ ├── connections/ ← How principles map across implementation domains
56
+ ├── personas/ ← Who is governed by or governs this framework
57
+ └── analyses/ ← Compliance audits, gap analyses, comparisons
58
+
59
+ raw/
60
+ ├── papers/ ← Academic sources, standards documents, prior art
61
+ ├── conversations/ ← AI dialogues, governance meeting notes
62
+ ├── data/ ← Validation results, compliance reports, audit logs
63
+ └── references/ ← External frameworks, standards, codebases compared against
64
+ ```
65
+
66
+ ---
67
+
68
+ ## Entity Types
69
+
70
+ | Type | Location | Page purpose |
71
+ |---|---|---|
72
+ | **Principle** | `wiki/principles/` | A value the framework upholds: what it means, how it is enforced, the governance basis |
73
+ | **Pattern** | `wiki/patterns/` | How to implement a principle: concrete steps, code examples, common mistakes |
74
+ | **Decision** | `wiki/decisions/` | An ADR: what was chosen, what was rejected, why, date, and any revision history |
75
+ | **Connection** | `wiki/connections/` | Cross-domain synthesis: how principle X maps to practice Y in context Z |
76
+ | **Persona** | `wiki/personas/` | A stakeholder: who uses the framework, who is governed by it, who governs it |
77
+ | **Analysis** | `wiki/analyses/` | Compliance audit, gap analysis, comparison with alternative frameworks |
78
+
79
+ ---
80
+
81
+ ## The Decision Page — Core Knowledge Atom
82
+
83
+ Architecture Decision Records are the most important pages in a framework wiki. Every significant choice must be documented before it is enforced:
84
+
85
+ ```markdown
86
+ ---
87
+ title: "ADR: <Decision title>"
88
+ type: decision
89
+ created: YYYY-MM-DD
90
+ updated: YYYY-MM-DD
91
+ status: proposed | accepted | superseded | deprecated
92
+ superseded_by: <ADR page name if superseded>
93
+ sources:
94
+ - <pages or raw files that informed this decision>
95
+ tags: []
96
+ ---
97
+
98
+ One-line summary of the decision.
99
+
100
+ ## Decision
101
+ What was chosen. State it precisely.
102
+
103
+ ## Context
104
+ The problem that required a decision. What constraints existed?
105
+
106
+ ## Alternatives Considered
107
+ What else was evaluated? Why was each rejected?
108
+
109
+ ## Justification
110
+ Why this choice? Include ethical justification where relevant.
111
+
112
+ ## Consequences
113
+ What does this enable? What does it foreclose? What monitoring is needed?
114
+
115
+ ## Related Pages
116
+ - [[principle-name]] — The principle this decision serves
117
+ - [[pattern-name]] — The implementation pattern this decision authorizes
118
+ ```
119
+
120
+ ADRs are **append-only in spirit**: when a decision changes, mark the old ADR `status: superseded`, add `superseded_by: new-adr-name`, and create a new ADR. Never silently overwrite the reasoning history.
121
+
122
+ ---
123
+
124
+ ## Workflows
125
+
126
+ ### Document a New Decision
127
+
128
+ 1. Identify the decision being made (never document a decision after the fact without noting that it was post-hoc)
129
+ 2. Create a `wiki/decisions/` ADR page with `status: proposed`
130
+ 3. Link to the relevant principles it serves and patterns it authorizes
131
+ 4. After review/consensus, update to `status: accepted`
132
+ 5. Update `wiki/index.md` and append to `wiki/log.md`
133
+
134
+ ### Document a New Pattern
135
+
136
+ 1. Identify the principle the pattern implements
137
+ 2. Create a `wiki/patterns/` page with: problem, solution, implementation details, ethical justification
138
+ 3. Link from the relevant `wiki/principles/` page
139
+ 4. Verify that an ADR exists authorizing this pattern (or create one)
140
+ 5. Update `wiki/index.md` and append to `wiki/log.md`
141
+
142
+ ### Ingest a Comparison Framework or Standard
143
+
144
+ 1. Read from `raw/papers/` or `raw/references/`
145
+ 2. Create a `wiki/sources/` page summarizing the key claims
146
+ 3. Create or update a `wiki/analyses/` page comparing this framework to {{PROJECT_NAME}} on key dimensions
147
+ 4. Identify any principles or patterns that should be updated in light of the comparison
148
+ 5. Update `wiki/glossary.md` and append to `wiki/log.md`
149
+
150
+ ### Query
151
+
152
+ 1. Read `wiki/index.md` to identify relevant pages (typically `wiki/principles/` and `wiki/patterns/`)
153
+ 2. Read those pages
154
+ 3. Synthesize a clear answer citing the relevant ADRs and principles
155
+ 4. Ask: "Should I file this as an analysis?" If yes, save to `wiki/analyses/`
156
+ 5. Append to `wiki/log.md`
157
+
158
+ ### Lint
159
+
160
+ 1. Check every `wiki/principles/` page has at least one `wiki/patterns/` page implementing it
161
+ 2. Check every `wiki/patterns/` page is authorized by an ADR in `wiki/decisions/`
162
+ 3. Check for enforcement mechanisms that exist in the codebase but are not documented in a principle page
163
+ 4. Check for principles that are stated but have no enforcement mechanism (document the gap or add enforcement)
164
+ 5. Check for ADRs with `status: proposed` that have not been reviewed
165
+ 6. Report findings and propose fixes
166
+ 7. Append to `wiki/log.md`
167
+
168
+ ---
169
+
170
+ ## Log Format
171
+
172
+ ```
173
+ ## [YYYY-MM-DD] <action> | <title>
174
+
175
+ **Action:** <description>
176
+ Pages created: ...
177
+ Pages updated: ...
178
+ Key additions: ...
179
+ ```
180
+
181
+ ---
182
+
183
+ ## Terminology Discipline
184
+
185
+ - Check `wiki/glossary.md` before using any framework term
186
+ - Canonical terms must be used consistently — never paraphrase a principle's name
187
+ - ADR titles must be unique and stable (they are referenced by other pages)
188
+ - Key terms for this domain: [populated by domain expert — add canonical terms here as the wiki develops]
189
+
190
+ ---
191
+
192
+ ## R Functions in This Application
193
+
194
+ The following R functions implement validation and generation capabilities for {{PROJECT_NAME}}:
195
+
196
+ {{EXPORTED_FUNCTIONS}}
197
+
198
+ **Standard framework function pattern:**
199
+ - `validate_*()` functions check compliance and return violations with severity
200
+ - `scaffold_*()` functions generate new instances conforming to the framework
201
+ - `get_*_status()` functions report system health
202
+ - `get_validation_rules()` returns all rules with descriptions (discovery endpoint)
203
+
204
+ ---
205
+
206
+ ## Principle Documentation Standard
207
+
208
+ Every principle must meet these standards before it can be enforced:
209
+
210
+ 1. **Named** — A canonical name in the glossary
211
+ 2. **Defined** — A `wiki/principles/` page with precise definition
212
+ 3. **Justified** — The ethical or practical basis is documented (who authorized this and on what grounds)
213
+ 4. **Implemented** — At least one `wiki/patterns/` page shows how to comply
214
+ 5. **Enforced** — An automated check exists OR the absence of automation is noted and justified
215
+ 6. **Governed** — The process for changing this principle is documented
216
+
217
+ Principles that lack justification or governance documentation should be marked `status: draft` and flagged in the next lint pass.
218
+
219
+ ---
220
+
221
+ ## Connection to the Meta-Framework Layer
222
+
223
+ This wiki documents **what {{PROJECT_NAME}} requires** and **why**. The dataimago-design wiki documents **how framework-type applications are built**. The connection:
224
+
225
+ ```
226
+ wiki/principles/my-principle.md
227
+ → implemented by wiki/patterns/my-pattern.md
228
+ → enforced by validate_my_rule() in R
229
+ → exposed at POST /validate
230
+ → documented in dataimago-design/wiki/patterns/rest-api-from-r.md
231
+ ```
232
+
233
+ Do not duplicate dataimago-design's framework documentation here. Reference it.
@@ -0,0 +1,201 @@
1
+ <!-- @dataimago/css@0.1.0-alpha.19 dist/templates/KNOWLEDGE-research.md · sha256:ef0a6748731b61840e8e8da1142db5981948da4dec78888f40f471c2a3d3300f · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.19 dataimago-sync -->
2
+ # {{PROJECT_NAME}} — Knowledge Base Operating Manual
3
+
4
+ **Domain:** {{DOMAIN_NAME}}
5
+ **Type:** research
6
+ **Generated:** {{GENERATED_DATE}}
7
+ **Framework:** [dataimago-design]({{FRAMEWORK_WIKI_URL}}/wiki/index.md)
8
+
9
+ This file is the operating manual for the **{{PROJECT_NAME}}** knowledge base — an AI-maintained wiki that documents the ideas, evidence, methods, and arguments that this application embodies. Read it at the start of every knowledge-work session.
10
+
11
+ ---
12
+
13
+ ## Role
14
+
15
+ You are the wiki maintainer for **{{PROJECT_NAME}}**'s knowledge base — a `research`-type domain wiki that synthesizes the evidence, methods, and arguments behind the application's analytical claims.
16
+
17
+ Your job is to:
18
+ - Ingest source materials and extract knowledge into structured wiki pages
19
+ - Keep pages consistent, cross-referenced, and up to date
20
+ - Answer queries by reading the wiki (not re-deriving from scratch)
21
+ - File good answers back as `wiki/analyses/` pages so knowledge compounds
22
+ - Periodically lint the wiki for contradictions, stale content, and orphan pages
23
+
24
+ You never modify files in `raw/`. You own everything in `wiki/`.
25
+
26
+ The framework layer (how this application is built) is documented in the dataimago-design wiki (see `dataimago-framework.json` for the URL). Domain knowledge questions belong here; build and architecture questions belong there.
27
+
28
+ ---
29
+
30
+ ## Session Start Protocol
31
+
32
+ At the start of every knowledge-work session:
33
+ 1. Read this file (KNOWLEDGE.md)
34
+ 2. Read `wiki/index.md` to orient to the current knowledge base state
35
+ 3. Read the last 5 entries of `wiki/log.md` to understand recent activity
36
+ 4. Read the framework wiki index (URL in `dataimago-framework.json`) for framework context (optional unless architecture is relevant)
37
+ 5. Ask the user: ingest, query, lint, or something else?
38
+
39
+ ---
40
+
41
+ ## Directory Structure
42
+
43
+ ```
44
+ wiki/
45
+ ├── index.md ← Master catalog of all wiki pages
46
+ ├── overview.md ← High-level synthesis of the knowledge base
47
+ ├── glossary.md ← Canonical terminology for this domain
48
+ ├── log.md ← Append-only activity record
49
+ ├── sources/ ← Summaries of papers, datasets, conversations
50
+ ├── theories/ ← Theoretical frameworks the research uses
51
+ ├── methods/ ← Methodological choices and their justifications
52
+ ├── findings/ ← Specific results with interpretation
53
+ ├── arguments/ ← Central claims and their evidence chains
54
+ ├── personas/ ← Who uses this application and what they need
55
+ └── analyses/ ← Synthesized outputs, comparisons, strategic insights
56
+
57
+ raw/
58
+ ├── papers/ ← PDFs, journal articles, preprints
59
+ ├── conversations/ ← AI dialogues, meeting notes, transcripts
60
+ ├── data/ ← Datasets, R output files, analysis exports
61
+ └── references/ ← External codebases, specs, documentation
62
+ ```
63
+
64
+ ---
65
+
66
+ ## Entity Types
67
+
68
+ | Type | Location | Page purpose |
69
+ |---|---|---|
70
+ | **Source** | `wiki/sources/` | Summary of a raw document: key claims, quotes, metadata |
71
+ | **Theory** | `wiki/theories/` | A theoretical framework: definition, key thinkers, application here |
72
+ | **Method** | `wiki/methods/` | A methodological choice: what was done, why, limitations |
73
+ | **Finding** | `wiki/findings/` | A specific result: statistical context, interpretation, R function reference |
74
+ | **Argument** | `wiki/arguments/` | A central claim: what it asserts, what evidence supports it, what challenges it |
75
+ | **Persona** | `wiki/personas/` | A user type: goals, what they need from this application |
76
+ | **Analysis** | `wiki/analyses/` | A synthesized output: comparison, gap analysis, strategic insight |
77
+
78
+ ---
79
+
80
+ ## Page Format
81
+
82
+ Every wiki page must have this YAML frontmatter:
83
+
84
+ ```yaml
85
+ ---
86
+ title: <page title>
87
+ type: source | theory | method | finding | argument | persona | analysis
88
+ created: YYYY-MM-DD
89
+ updated: YYYY-MM-DD
90
+ sources:
91
+ - <raw/ filenames or wiki pages that informed this>
92
+ tags:
93
+ - <relevant tags>
94
+ ---
95
+ ```
96
+
97
+ Followed by: one-line summary, body with headers and tables, and a **Related pages** section at the bottom using `[[page-name]]` links.
98
+
99
+ ---
100
+
101
+ ## Workflows
102
+
103
+ ### Ingest a Paper or Article
104
+
105
+ 1. Read the source file from `raw/papers/` or `raw/references/`
106
+ 2. Discuss key takeaways (ask 1-3 clarifying questions if needed)
107
+ 3. Create a summary page in `wiki/sources/`
108
+ 4. Identify which theories, methods, or arguments it supports or challenges — update those pages
109
+ 5. Create new entity pages as warranted (new theory, new method, etc.)
110
+ 6. Update `wiki/glossary.md` with new domain terms
111
+ 7. Update `wiki/index.md` and `wiki/overview.md` if the source shifts the big picture
112
+ 8. Append to `wiki/log.md`
113
+
114
+ ### Ingest an R Analysis Output
115
+
116
+ 1. Read the output from `raw/data/`
117
+ 2. Identify what R function produced it and with what parameters
118
+ 3. Create or update a `wiki/findings/` page documenting the result
119
+ 4. Link the finding to the argument(s) it supports in `wiki/arguments/`
120
+ 5. Note the R function and parameters in the finding page (makes it verifiable and updatable)
121
+ 6. Update `wiki/index.md` and append to `wiki/log.md`
122
+
123
+ ### Ingest a Conversation
124
+
125
+ 1. Read the transcript from `raw/conversations/`
126
+ 2. Extract: key decisions made, questions raised, terminology clarified, arguments refined
127
+ 3. Update affected wiki pages (typically `wiki/arguments/`, `wiki/methods/`, `wiki/analyses/`)
128
+ 4. Create new pages if new concepts emerged
129
+ 5. Update `wiki/glossary.md` and append to `wiki/log.md`
130
+
131
+ ### Query
132
+
133
+ 1. Read `wiki/index.md` to identify relevant pages
134
+ 2. Read those pages
135
+ 3. Synthesize a clear answer with citations to wiki pages
136
+ 4. Ask: "Should I file this as a wiki page?" If yes, save to `wiki/analyses/`
137
+ 5. Append to `wiki/log.md`
138
+
139
+ ### Lint
140
+
141
+ 1. Read all pages in the wiki
142
+ 2. Report: contradictions between pages, stale claims, orphan pages, missing cross-references, inconsistent terminology
143
+ 3. Propose fixes and ask which ones to apply
144
+ 4. Append to `wiki/log.md`
145
+
146
+ ---
147
+
148
+ ## Log Format
149
+
150
+ ```
151
+ ## [YYYY-MM-DD] <action> | <title>
152
+
153
+ **Action:** <description>
154
+ Pages created: ...
155
+ Pages updated: ...
156
+ Key additions: ...
157
+ ```
158
+
159
+ ---
160
+
161
+ ## Terminology Discipline
162
+
163
+ - Check `wiki/glossary.md` before using any domain term
164
+ - If a new term appears in a source, add it to the glossary before using it elsewhere
165
+ - If a term conflicts with an existing entry, flag it explicitly before updating
166
+ - Key terms for this domain: [populated by domain expert — add canonical terms here as the wiki develops]
167
+
168
+ ---
169
+
170
+ ## R Functions in This Application
171
+
172
+ The following R functions are the analytical backbone of {{PROJECT_NAME}}. Each exported function should have a corresponding wiki entry linking its output to `wiki/findings/` pages:
173
+
174
+ {{EXPORTED_FUNCTIONS}}
175
+
176
+ When ingesting an R analysis output, always record:
177
+ - Which function produced it
178
+ - The parameter values used
179
+ - The date it was run
180
+ - What finding page documents it
181
+
182
+ ---
183
+
184
+ ## Philosophical Alignment
185
+
186
+ Every wiki page is evaluated against the question: does this serve the application's purpose of making research accessible to its intended audiences? Knowledge that exists only in academic prose has a single audience. Knowledge filed in this wiki serves general readers (via the web app), data analysts (via the API), AI agents (via MCP tools), and the domain expert themselves (via this wiki).
187
+
188
+ ---
189
+
190
+ ## Connection to the Framework Layer
191
+
192
+ This wiki documents **what** this application knows. The dataimago-design wiki documents **how** the application is built. When a finding page references an R function, that function's API exposure is documented in the framework layer. The connection is:
193
+
194
+ ```
195
+ wiki/findings/my-finding.md
196
+ → references HelloWorld::my_function()
197
+ → exposed at GET /my-endpoint
198
+ → documented in dataimago-design/wiki/patterns/rest-api-from-r.md
199
+ ```
200
+
201
+ Do not duplicate framework documentation here. Reference it.
@@ -0,0 +1,48 @@
1
+ <!-- @dataimago/css@0.1.0-alpha.19 dist/templates/quarto_website/README.md · sha256:19a8e30db9c7fc15e62e7bebb573041947b31be886d2e32d75b217236b0ab421 · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.19 dataimago-sync -->
2
+ # Quarto Website Template
3
+
4
+ Canonical template for Quarto-powered R package websites built with the dataimago framework.
5
+
6
+ ## Usage
7
+
8
+ This template is consumed by `dataimago::create_quarto_documentation()` when `scaffold_full_site = TRUE`. It can also be used manually by copying the template files and replacing placeholders.
9
+
10
+ ## Placeholders
11
+
12
+ All `.template` files use Mustache-style `{{PLACEHOLDER}}` syntax:
13
+
14
+ | Placeholder | Source | Description |
15
+ |---|---|---|
16
+ | `{{PACKAGE_NAME}}` | DESCRIPTION `Package` field | R package name |
17
+ | `{{PACKAGE_TITLE}}` | DESCRIPTION `Title` field | Full package title |
18
+ | `{{PACKAGE_DESCRIPTION}}` | DESCRIPTION `Description` field | Package description |
19
+ | `{{PACKAGE_AUTHOR}}` | DESCRIPTION `Authors@R` field | Author information |
20
+ | `{{PACKAGE_LICENSE}}` | DESCRIPTION `License` field | License type |
21
+ | `{{SITE_URL}}` | DESCRIPTION `URL` field | GitHub Pages URL |
22
+ | `{{REPO_URL}}` | DESCRIPTION `BugReports` (minus `/issues`) | GitHub repo URL |
23
+
24
+ ## Template Files
25
+
26
+ - `_quarto.yml.template` -- Site configuration with navbar, sidebar, footer, and theme
27
+ - `index.qmd.template` -- Homepage with hero section and feature cards
28
+ - `ethics.qmd.template` -- Ethical AI principles from dataimago-design wiki
29
+ - `about.qmd.template` -- Package about page
30
+
31
+ ## Static Assets (no templating)
32
+
33
+ - `assets/js/scroll.js` -- Sticky header shrink on scroll
34
+ - `assets/js/custom-anchors.js` -- Left-placed anchor links on headings
35
+ - `assets/js/logo-switch.js` -- Theme-aware logo hover effects (uses `{{SITE_URL}}`)
36
+
37
+ ## Features Included
38
+
39
+ - Sticky navbar that shrinks on scroll
40
+ - Custom anchor links on all headings
41
+ - Theme-aware logo switching (dark/light mode)
42
+ - Lenis smooth scrolling
43
+ - Accessibility layer (reduced motion, high contrast, skip links)
44
+ - Ethics-first content pages sourced from dataimago-design wiki
45
+ - Documents and presentations content scaffolding
46
+ - News/changelog page
47
+ - Custom 404 page
48
+ - Open Graph and Twitter Card metadata
@@ -0,0 +1,141 @@
1
+ # @dataimago/css@0.1.0-alpha.19 dist/templates/quarto_website/_quarto.yml.template · sha256:d28f9f49ba75df94183a074bcab94399ea10368ddfd538055f6b421d8194af91 · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.19 dataimago-sync
2
+ project:
3
+ type: website
4
+ title: "{{PACKAGE_TITLE}}"
5
+ output-dir: ../../docs
6
+ render:
7
+ - "*.qmd"
8
+ - "!content/presentations/**"
9
+ - "content/documents/**"
10
+
11
+ execute:
12
+ freeze: auto
13
+
14
+ extensions:
15
+ - dataimago/ai-native
16
+
17
+ filters:
18
+ - svg-inline
19
+
20
+ references:
21
+ - type: r
22
+ title: "Function Reference"
23
+ source: "../../man"
24
+
25
+ website:
26
+ site-url: "{{SITE_URL}}"
27
+ repo-url: "{{REPO_URL}}"
28
+ title: "{{PACKAGE_TITLE}}"
29
+ description: "{{PACKAGE_DESCRIPTION}}"
30
+ favicon: /assets/img/ai_monogram_supreme_favicon.png
31
+ repo-actions: none
32
+ page-navigation: false
33
+ bread-crumbs: false
34
+
35
+ navbar:
36
+ title: "{{PACKAGE_NAME}}"
37
+ logo: /assets/img/ai_monogram.svg
38
+ logo-alt: "{{PACKAGE_NAME}}"
39
+ logo-href: "{{SITE_URL}}"
40
+ title-href: "{{SITE_URL}}"
41
+ search: false
42
+ pinned: true
43
+ left:
44
+ - href: index.qmd
45
+ text: Home
46
+ - href: r_package.qmd
47
+ text: R Package
48
+ - text: Ethics
49
+ menu:
50
+ - href: ethics.qmd
51
+ text: Ethical AI Principles
52
+ - href: design_system.qmd
53
+ text: Design System
54
+ - href: governance.qmd
55
+ text: Democratic Governance
56
+ - text: Foundation
57
+ menu:
58
+ - href: mission.qmd
59
+ text: Mission & Vision
60
+ - href: philosophy.qmd
61
+ text: Philosophy
62
+ - text: Resources
63
+ menu:
64
+ - href: documents.qmd
65
+ text: Documents
66
+ - href: presentations.qmd
67
+ text: Presentations
68
+ - href: news.qmd
69
+ text: News
70
+ right:
71
+ - text: "<img src='/assets/img/github_logo.svg' class='navbar-github-logo' title='GitHub' alt='GitHub' style='height:32px; vertical-align:middle; padding-right: 2px; margin-top: 0px;'/>"
72
+ menu:
73
+ - href: "{{REPO_URL}}"
74
+ text: Source Code
75
+ - href: "{{REPO_URL}}/issues"
76
+ text: Report a Bug
77
+ - href: "{{REPO_URL}}/discussions"
78
+ text: Request a Feature
79
+ target: _blank
80
+
81
+ sidebar:
82
+ style: "docked"
83
+ search: true
84
+ contents:
85
+ - section: "Getting Started"
86
+ contents:
87
+ - r_package.qmd
88
+ - section: "Ethics & Design"
89
+ contents:
90
+ - ethics.qmd
91
+ - design_system.qmd
92
+ - governance.qmd
93
+ - section: "Foundation"
94
+ contents:
95
+ - mission.qmd
96
+ - philosophy.qmd
97
+ - section: "Resources"
98
+ contents:
99
+ - documents.qmd
100
+ - presentations.qmd
101
+ - news.qmd
102
+
103
+ page-footer:
104
+ left:
105
+ - text: "<img src='/assets/img/quarto_logo.svg' class='footer-quarto-logo inline-svg' title='quarto.org' alt='quarto.org' style='width:28px; height:28px; vertical-align:middle; padding-right: 4px; margin-top: 6px;'/>"
106
+ href: https://quarto.org/
107
+ target: _blank
108
+ center:
109
+ - text: "<img src='/assets/img/ai_monogram.svg' class='footer-ai-monogram-logo inline-svg' title='dataimago.ai' alt='dataimago.ai' style='height:28px; vertical-align:middle; padding-right: 4px; margin-top: 6px;'/>"
110
+ href: https://dataimago.ai/
111
+ target: _blank
112
+ - text: "<img src='/assets/img/package_hex_logo.svg' class='footer-package-hex-logo inline-svg' title='{{PACKAGE_NAME}} R Package' alt='{{PACKAGE_NAME}} R Package' style='height: 32px; margin-top: 3px;'/>"
113
+ href: "{{SITE_URL}}"
114
+
115
+ metadata:
116
+ image: /assets/img/ai_monogram_supreme_COLOR.png
117
+ open-graph: true
118
+ twitter-card:
119
+ image: /assets/img/ai_monogram_supreme_COLOR.png
120
+ card-style: summary_large_image
121
+
122
+ format:
123
+ html:
124
+ theme:
125
+ light: _extensions/dataimago/ai-native/assets/css/dataimago-light.scss
126
+ dark: _extensions/dataimago/ai-native/assets/css/dataimago-dark.scss
127
+ toc: true
128
+ toc-depth: 3
129
+ code-copy: true
130
+ code-overflow: wrap
131
+ include-after: |
132
+ <link rel="preconnect" href="https://fonts.googleapis.com">
133
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
134
+ <link href="https://fonts.googleapis.com/css2?family=Josefin+Sans:wght@200;300;400;500;600;700&family=Noto+Sans:wdth,wght@100..125,300..800&family=Noto+Sans+Math&family=JetBrains+Mono:wght@400;500;700&display=swap" rel="stylesheet">
135
+ <script src="https://unpkg.com/lenis@1.3.8/dist/lenis.min.js"></script>
136
+ <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
137
+ <script type="text/javascript" src="/assets/js/scroll.js"></script>
138
+ <script type="text/javascript" src="/assets/js/logo-switch.js"></script>
139
+ <script type="text/javascript" src="/assets/js/lenis-integration.js"></script>
140
+ <script type="text/javascript" src="/assets/js/custom-anchors.js"></script>
141
+ <script type="text/javascript" src="/assets/js/accessibility.js"></script>
@@ -0,0 +1,36 @@
1
+ <!-- @dataimago/css@0.1.0-alpha.19 dist/templates/quarto_website/about.qmd.template · sha256:5f896d14240e32c56a8711cbc458e8d3726cf8bcebac154aa62ead41f49af185 · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.19 dataimago-sync -->
2
+ ---
3
+ title: "About {{PACKAGE_NAME}}"
4
+ format:
5
+ html:
6
+ toc: true
7
+ toc-depth: 2
8
+ ---
9
+
10
+ ## Overview
11
+
12
+ {{PACKAGE_DESCRIPTION}}
13
+
14
+ ## Built with dataimago
15
+
16
+ {{PACKAGE_NAME}} is built using the [dataimago](https://dataimago.ai) framework --- an AI-native application development framework for data science. dataimago provides:
17
+
18
+ - Complete design system compilation from tokens to production-ready assets
19
+ - Multi-platform deployment (Quarto, Shiny, Next.js)
20
+ - MCP-compatible tooling for AI agent integration
21
+ - Ethical AI build-time validation
22
+ - R-first workflows with modern web tools
23
+
24
+ ## Author
25
+
26
+ {{PACKAGE_AUTHOR}}
27
+
28
+ ## License
29
+
30
+ {{PACKAGE_LICENSE}}
31
+
32
+ ## Links
33
+
34
+ - [GitHub Repository]({{REPO_URL}})
35
+ - [Bug Reports]({{REPO_URL}}/issues)
36
+ - [dataimago Framework](https://dataimago.ai)
@@ -0,0 +1,6 @@
1
+ // @dataimago/css@0.1.0-alpha.19 dist/templates/quarto_website/assets/js/custom-anchors.js · sha256:9b0f2d567a86e90431cc1470a6542f4e0549245dfda7b1b05b94119bddab0cb9 · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.19 dataimago-sync
2
+ anchors.options = {
3
+ placement: 'left',
4
+ visible: 'hover'
5
+ };
6
+ anchors.add('h1, h2, h3, h4, h5, h6');
@@ -0,0 +1,73 @@
1
+ // @dataimago/css@0.1.0-alpha.19 dist/templates/quarto_website/assets/js/logo-switch.js · sha256:f69f3ad9c9ab670197c32d75e072cdfa5fb5cc0fc720f636dd9a9e3a3c44015c · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.19 dataimago-sync
2
+ var defaultLogoSrc = '/assets/img/ai_monogram.svg';
3
+ var defaultLogoHref = '{{SITE_URL}}';
4
+ var hoverLogoHref = 'https://dataimago.ai';
5
+
6
+ function getCurrentTheme() {
7
+ var dataTheme = document.documentElement.getAttribute('data-bs-theme');
8
+ if (dataTheme === 'dark') return 'dark';
9
+
10
+ var lightSheets = document.querySelectorAll('link.quarto-color-scheme:not(.quarto-color-alternate)');
11
+ var allLightDisabled = true;
12
+ for (var i = 0; i < lightSheets.length; i++) {
13
+ if (!lightSheets[i].disabled) { allLightDisabled = false; break; }
14
+ }
15
+ var darkSheets = document.querySelectorAll('link.quarto-color-scheme.quarto-color-alternate');
16
+ var anyDarkEnabled = false;
17
+ for (var j = 0; j < darkSheets.length; j++) {
18
+ if (!darkSheets[j].disabled) { anyDarkEnabled = true; break; }
19
+ }
20
+ if (allLightDisabled && anyDarkEnabled) return 'dark';
21
+ if (document.body.classList.contains('quarto-dark')) return 'dark';
22
+ return 'light';
23
+ }
24
+
25
+ function setupNavbarBrandHover() {
26
+ var navbarLogo = document.querySelector('.navbar-logo');
27
+ var navbarBrand = navbarLogo ? navbarLogo.closest('a') : document.querySelector('.navbar-brand');
28
+ if (!navbarBrand) return;
29
+
30
+ navbarBrand.addEventListener('mouseover', function() {
31
+ navbarBrand.href = hoverLogoHref;
32
+ if (navbarLogo) navbarLogo.classList.add('logo-hover');
33
+ });
34
+ navbarBrand.addEventListener('mouseout', function() {
35
+ navbarBrand.href = defaultLogoHref;
36
+ if (navbarLogo) navbarLogo.classList.remove('logo-hover');
37
+ });
38
+ }
39
+
40
+ function setupFooterLogoHover() {
41
+ var footerLogos = document.querySelectorAll('.footer-ai-monogram-logo');
42
+ footerLogos.forEach(function(logo) {
43
+ logo.addEventListener('mouseover', function() { logo.classList.add('logo-hover'); });
44
+ logo.addEventListener('mouseout', function() { logo.classList.remove('logo-hover'); });
45
+ });
46
+ }
47
+
48
+ function initLogoSwitch() {
49
+ setupNavbarBrandHover();
50
+ setupFooterLogoHover();
51
+ }
52
+
53
+ if (document.readyState === 'loading') {
54
+ document.addEventListener('DOMContentLoaded', initLogoSwitch);
55
+ } else {
56
+ initLogoSwitch();
57
+ }
58
+
59
+ var themeObserver = new MutationObserver(function(mutations) {
60
+ mutations.forEach(function(mutation) {
61
+ if (mutation.type === 'attributes' &&
62
+ (mutation.attributeName === 'data-bs-theme' || mutation.attributeName === 'class')) {
63
+ setTimeout(initLogoSwitch, 100);
64
+ }
65
+ });
66
+ });
67
+ themeObserver.observe(document.documentElement, { attributes: true });
68
+ themeObserver.observe(document.body, { attributes: true });
69
+
70
+ document.querySelectorAll('link.quarto-color-scheme').forEach(function(sheet) {
71
+ new MutationObserver(function() { setTimeout(initLogoSwitch, 100); })
72
+ .observe(sheet, { attributes: true, attributeFilter: ['disabled'] });
73
+ });
@@ -0,0 +1,67 @@
1
+ // @dataimago/css@0.1.0-alpha.19 dist/templates/quarto_website/assets/js/scroll.js · sha256:694f335a8c098d252123b523e1a7ac8d475da436eb3c5f73451d96108b2863d2 · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.19 dataimago-sync
2
+ $(window).scroll(function(){
3
+ if($(window).scrollTop() > 35) {
4
+ $('.navbar').addClass("shrink");
5
+ $('.navbar-title').addClass("shrink");
6
+ $('.navbar-logo').addClass("shrink");
7
+ $('body').addClass("shrink");
8
+ } else {
9
+ $('.navbar').removeClass("shrink");
10
+ $('.navbar-title').removeClass("shrink");
11
+ $('.navbar-logo').removeClass("shrink");
12
+ $('body').removeClass("shrink");
13
+ }
14
+ });
15
+
16
+ $(document).ready(function() {
17
+ function observeDropdownChanges() {
18
+ var observer = new MutationObserver(function(mutations) {
19
+ mutations.forEach(function(mutation) {
20
+ if (mutation.type === 'attributes') {
21
+ var $target = $(mutation.target);
22
+ if ($target.hasClass('dropdown-toggle')) {
23
+ var $dropdown = $target.closest('.dropdown, .nav-item');
24
+ var isExpanded = $target.attr('aria-expanded') === 'true';
25
+
26
+ if (isExpanded) {
27
+ $dropdown.addClass('open');
28
+ } else {
29
+ $dropdown.removeClass('open');
30
+ }
31
+ }
32
+ }
33
+ });
34
+ });
35
+
36
+ $('.navbar-nav .dropdown-toggle').each(function() {
37
+ observer.observe(this, {
38
+ attributes: true,
39
+ attributeFilter: ['aria-expanded']
40
+ });
41
+ });
42
+ }
43
+
44
+ observeDropdownChanges();
45
+
46
+ $('.navbar-nav .dropdown-toggle').on('click', function() {
47
+ var $this = $(this);
48
+ var $dropdown = $this.closest('.dropdown, .nav-item');
49
+
50
+ setTimeout(function() {
51
+ var isExpanded = $this.attr('aria-expanded') === 'true';
52
+ if (isExpanded) {
53
+ $dropdown.addClass('open');
54
+ } else {
55
+ $dropdown.removeClass('open');
56
+ }
57
+ }, 50);
58
+ });
59
+
60
+ $('.navbar-nav .dropdown, .navbar-nav .nav-item').on('show.bs.dropdown', function() {
61
+ $(this).addClass('open');
62
+ });
63
+
64
+ $('.navbar-nav .dropdown, .navbar-nav .nav-item').on('hide.bs.dropdown', function() {
65
+ $(this).removeClass('open');
66
+ });
67
+ });
@@ -0,0 +1,49 @@
1
+ <!-- @dataimago/css@0.1.0-alpha.19 dist/templates/quarto_website/ethics.qmd.template · sha256:fc151adb9c9fd9934a3c23ca5822eb6b05ca27795070ff7dbb26acd0e50ddbe5 · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.19 dataimago-sync -->
2
+ ---
3
+ title: "Ethical AI Principles"
4
+ subtitle: "Superalignment Through Design Architecture"
5
+ format:
6
+ html:
7
+ toc: true
8
+ toc-depth: 3
9
+ ---
10
+
11
+ {{PACKAGE_NAME}} treats every design token, animation curve, and color choice as a moral decision with consequences for human agency. Ethics is not bolted on after design --- it is embedded in the system architecture from the foundation.
12
+
13
+ ## Core Commitments
14
+
15
+ 1. **Emancipation over efficiency** --- When efficiency and emancipation conflict, emancipation always wins.
16
+ 2. **AI in culture, not culture in AI** --- Technology serves lived human contexts, not the reverse.
17
+ 3. **Democratic participation** --- Communities affected by design decisions must have binding authority.
18
+ 4. **Reflexive practice** --- The system questions its own power relations.
19
+ 5. **Dialectical thinking** --- Productive tension over false simplicity.
20
+
21
+ ## Design Principles
22
+
23
+ ### Accessibility Beyond Compliance
24
+ WCAG compliance is a floor, not a ceiling. Enhanced standards: 7.0:1 contrast, 48px touch targets, 300ms motion maximum.
25
+
26
+ ### Ethical Tokens First-Class
27
+ Ethical constraints are first-class design tokens enforced at build time through the three-tier hierarchy (Primitive, Semantic, Ethical).
28
+
29
+ ### Performance Equity
30
+ Speed is access. Design targets the most constrained users: 2G networks, single-core processors, 1GB RAM devices.
31
+
32
+ ### Color Democracy
33
+ Color is communication technology serving community meaning-making, not brand commodity.
34
+
35
+ ### Motion Dignity
36
+ Animation must respect vestibular safety, cognitive load, and cultural expectations.
37
+
38
+ ## How Ethics Are Enforced
39
+
40
+ ::: {.ethical-note}
41
+ **Build-time validation:** Three automated validators gate every deployment:
42
+
43
+ - **Contrast checking** --- 7.0:1 minimum ratio
44
+ - **Motion linting** --- 300ms maximum duration, `prefers-reduced-motion` required
45
+ - **Bundle size checking** --- Performance equity for low-bandwidth users
46
+ :::
47
+
48
+ For the complete design system documentation, see the [Design System](design_system.qmd) page.
49
+ For governance processes, see [Democratic Governance](governance.qmd).
@@ -0,0 +1,71 @@
1
+ <!-- @dataimago/css@0.1.0-alpha.19 dist/templates/quarto_website/index.qmd.template · sha256:fa09cd4cce412445d164a1ca1248c5080e03ee65db6e762e4bf2e543557c2958 · generated from tokens; do not edit · restore: npx -p @dataimago/css@0.1.0-alpha.19 dataimago-sync -->
2
+ ---
3
+ format:
4
+ html:
5
+ page-layout: full
6
+ toc: false
7
+ sidebar: false
8
+ ---
9
+
10
+ ::::::::: {.lenis-slide}
11
+ ::::::: {.hero-section}
12
+ :::::: {.grid}
13
+ :::: {.g-col-12 .g-col-md-4 .logo-column}
14
+ ::: {.logo-container}
15
+ ![](assets/img/package_hex_logo.svg){width=500 .hero-logo}
16
+ :::
17
+ ::::
18
+ :::: {.g-col-12 .g-col-md-8 .g-start-md-5}
19
+ ::: {.hero-content-scroller data-lenis-animate="fade-left"}
20
+ ::: {.scroller-content}
21
+
22
+ ### {{PACKAGE_NAME}} {.content-item}
23
+
24
+ {{PACKAGE_DESCRIPTION}}
25
+
26
+ ### Built with dataimago {.content-item}
27
+
28
+ This package is built using the dataimago framework --- an AI-native application development framework for data science with ethical AI principles at its core.
29
+
30
+ ### R-First Workflows {.content-item}
31
+
32
+ Familiar R interfaces wrap sophisticated web tools, providing modern development capabilities without leaving your preferred environment.
33
+
34
+ :::
35
+ :::
36
+ ::::
37
+ ::::::
38
+ :::::::
39
+ :::::::::
40
+
41
+ :::::: {.lenis-slide}
42
+ :::: {.cards-container}
43
+ :::: {.cards-grid}
44
+
45
+ ::: {.feature-card}
46
+ ### R Package
47
+
48
+ Complete function documentation and examples.
49
+
50
+ [View Documentation](r_package.qmd)
51
+ :::
52
+
53
+ ::: {.feature-card}
54
+ ### Ethical AI
55
+
56
+ Built on dataimago's ethical AI framework with build-time enforcement.
57
+
58
+ [Learn More](ethics.qmd)
59
+ :::
60
+
61
+ ::: {.feature-card}
62
+ ### Design System
63
+
64
+ Three-tier token architecture ensuring accessibility and cultural sensitivity.
65
+
66
+ [Explore](design_system.qmd)
67
+ :::
68
+
69
+ ::::
70
+ ::::
71
+ ::::::
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dataimago/css",
3
- "version": "0.1.0-alpha.18",
3
+ "version": "0.1.0-alpha.19",
4
4
  "description": "Compiled CSS and Tailwind preset for the dataimago ethical AI design system",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -21,6 +21,7 @@
21
21
  "./quarto/*": "./dist/quarto/*",
22
22
  "./latex/*": "./dist/latex/*",
23
23
  "./dataviz/*": "./dist/dataviz/*",
24
+ "./templates/*": "./dist/templates/*",
24
25
  "./outputs.json": "./dist/outputs.json",
25
26
  "./package.json": "./package.json"
26
27
  },