plotleaf 0.3.2 → 0.4.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.
@@ -0,0 +1,409 @@
1
+ {
2
+ "inputs": [
3
+ {
4
+ "id": "region",
5
+ "label": "Region",
6
+ "type": "select",
7
+ "default": "all",
8
+ "options": [
9
+ {
10
+ "value": "all",
11
+ "label": "All regions"
12
+ },
13
+ {
14
+ "value": "emea",
15
+ "label": "EMEA"
16
+ },
17
+ {
18
+ "value": "unlaunched",
19
+ "label": "Unlaunched"
20
+ }
21
+ ]
22
+ },
23
+ {
24
+ "id": "period",
25
+ "label": "Reporting period",
26
+ "type": "date-range",
27
+ "default": {
28
+ "start": "2026-11-01",
29
+ "end": "2026-11-07"
30
+ },
31
+ "options": [
32
+ {
33
+ "value": {
34
+ "start": "2026-11-01",
35
+ "end": "2026-11-07"
36
+ },
37
+ "label": "1\u20137 November"
38
+ },
39
+ {
40
+ "value": {
41
+ "start": "2026-11-08",
42
+ "end": "2026-11-14"
43
+ },
44
+ "label": "8\u201314 November"
45
+ }
46
+ ]
47
+ }
48
+ ],
49
+ "views": [
50
+ {
51
+ "id": "all-1",
52
+ "label": "All regions / 1\u20137 November",
53
+ "when": {
54
+ "region": "all",
55
+ "period": {
56
+ "start": "2026-11-01",
57
+ "end": "2026-11-07"
58
+ }
59
+ },
60
+ "markdown": "### All regions \u00b7 1\u20137 November\n\nThis prepared subset uses its own counts and denominators.\n\n:::grid{columns=\"3\"}\n::metric{label=\"Orders\" value=\"12480\" comparison=\"Prepared period\" direction=\"flat\" sentiment=\"neutral\"}\n::metric{label=\"Revenue\" value=\"824160\" format=\"currency:USD\"}\n::metric{label=\"Activated\" value=\"7612\"}\n:::\n\n::::grid{columns=\"2\"}\n::area{data=\"./series.json\" x=\"date\" y=\"orders\" xType=\"date\" title=\"Orders in selected view\"}\n::funnel{data=\"./funnel.json\" stage=\"stage\" value=\"teams\" total=\"baseline\" share=\"share\" status=\"status\" title=\"Selected-view funnel\"}\n::::\n\n::donut{data=\"./plans.json\" category=\"plan\" value=\"teams\" title=\"Selected-view plan mix\"}\n\n:::table{data=\"./accounts.json\" title=\"Selected-view accounts\"}\n::column{field=\"account\" label=\"Account\"}\n::column{field=\"orders\" label=\"Orders\"}\n::column{field=\"weekly\" label=\"Weekly orders\" kind=\"sparkline\"}\n:::\n",
61
+ "datasets": {
62
+ "series.json": [
63
+ {
64
+ "date": "2026-11-01",
65
+ "orders": 1732
66
+ },
67
+ {
68
+ "date": "2026-11-02",
69
+ "orders": 1762
70
+ },
71
+ {
72
+ "date": "2026-11-03",
73
+ "orders": 1782
74
+ },
75
+ {
76
+ "date": "2026-11-04",
77
+ "orders": 1862
78
+ }
79
+ ],
80
+ "funnel.json": [
81
+ {
82
+ "stage": "Visited",
83
+ "teams": 37440,
84
+ "baseline": 37440,
85
+ "share": 1,
86
+ "status": "on-target"
87
+ },
88
+ {
89
+ "stage": "Ordered",
90
+ "teams": 12480,
91
+ "baseline": 37440,
92
+ "share": 0.3333333333333333,
93
+ "status": "on-target"
94
+ },
95
+ {
96
+ "stage": "Activated",
97
+ "teams": 7612,
98
+ "baseline": 37440,
99
+ "share": 0.2033119658119658,
100
+ "status": "below-target"
101
+ }
102
+ ],
103
+ "plans.json": [
104
+ {
105
+ "plan": "Pro",
106
+ "teams": 5075
107
+ },
108
+ {
109
+ "plan": "Team",
110
+ "teams": 2537
111
+ }
112
+ ],
113
+ "accounts.json": [
114
+ {
115
+ "account": "All regions account A",
116
+ "orders": 6240,
117
+ "weekly": [
118
+ 10,
119
+ null,
120
+ 18
121
+ ]
122
+ },
123
+ {
124
+ "account": "All regions account B",
125
+ "orders": 6240,
126
+ "weekly": [
127
+ 7,
128
+ 11,
129
+ 15
130
+ ]
131
+ }
132
+ ]
133
+ }
134
+ },
135
+ {
136
+ "id": "all-2",
137
+ "label": "All regions / 8\u201314 November",
138
+ "when": {
139
+ "region": "all",
140
+ "period": {
141
+ "start": "2026-11-08",
142
+ "end": "2026-11-14"
143
+ }
144
+ },
145
+ "markdown": "### All regions \u00b7 8\u201314 November\n\nThis prepared subset uses its own counts and denominators.\n\n:::grid{columns=\"3\"}\n::metric{label=\"Orders\" value=\"14520\" comparison=\"Prepared period\" direction=\"flat\" sentiment=\"neutral\"}\n::metric{label=\"Revenue\" value=\"958320\" format=\"currency:USD\"}\n::metric{label=\"Activated\" value=\"8960\"}\n:::\n\n::::grid{columns=\"2\"}\n::area{data=\"./series.json\" x=\"date\" y=\"orders\" xType=\"date\" title=\"Orders in selected view\"}\n::funnel{data=\"./funnel.json\" stage=\"stage\" value=\"teams\" total=\"baseline\" share=\"share\" status=\"status\" title=\"Selected-view funnel\"}\n::::\n\n::donut{data=\"./plans.json\" category=\"plan\" value=\"teams\" title=\"Selected-view plan mix\"}\n\n:::table{data=\"./accounts.json\" title=\"Selected-view accounts\"}\n::column{field=\"account\" label=\"Account\"}\n::column{field=\"orders\" label=\"Orders\"}\n::column{field=\"weekly\" label=\"Weekly orders\" kind=\"sparkline\"}\n:::\n",
146
+ "datasets": {
147
+ "series.json": [
148
+ {
149
+ "date": "2026-11-08",
150
+ "orders": 2024
151
+ },
152
+ {
153
+ "date": "2026-11-09",
154
+ "orders": 2054
155
+ },
156
+ {
157
+ "date": "2026-11-10",
158
+ "orders": 2074
159
+ },
160
+ {
161
+ "date": "2026-11-11",
162
+ "orders": 2154
163
+ }
164
+ ],
165
+ "funnel.json": [
166
+ {
167
+ "stage": "Visited",
168
+ "teams": 43560,
169
+ "baseline": 43560,
170
+ "share": 1,
171
+ "status": "on-target"
172
+ },
173
+ {
174
+ "stage": "Ordered",
175
+ "teams": 14520,
176
+ "baseline": 43560,
177
+ "share": 0.3333333333333333,
178
+ "status": "on-target"
179
+ },
180
+ {
181
+ "stage": "Activated",
182
+ "teams": 8960,
183
+ "baseline": 43560,
184
+ "share": 0.2056932966023875,
185
+ "status": "below-target"
186
+ }
187
+ ],
188
+ "plans.json": [
189
+ {
190
+ "plan": "Pro",
191
+ "teams": 5974
192
+ },
193
+ {
194
+ "plan": "Team",
195
+ "teams": 2986
196
+ }
197
+ ],
198
+ "accounts.json": [
199
+ {
200
+ "account": "All regions account A",
201
+ "orders": 7260,
202
+ "weekly": [
203
+ 14,
204
+ null,
205
+ 22
206
+ ]
207
+ },
208
+ {
209
+ "account": "All regions account B",
210
+ "orders": 7260,
211
+ "weekly": [
212
+ 11,
213
+ 15,
214
+ 19
215
+ ]
216
+ }
217
+ ]
218
+ }
219
+ },
220
+ {
221
+ "id": "emea-1",
222
+ "label": "EMEA / 1\u20137 November",
223
+ "when": {
224
+ "region": "emea",
225
+ "period": {
226
+ "start": "2026-11-01",
227
+ "end": "2026-11-07"
228
+ }
229
+ },
230
+ "markdown": "### EMEA \u00b7 1\u20137 November\n\nThis prepared subset uses its own counts and denominators.\n\n:::grid{columns=\"3\"}\n::metric{label=\"Orders\" value=\"4200\" comparison=\"Prepared period\" direction=\"flat\" sentiment=\"neutral\"}\n::metric{label=\"Revenue\" value=\"277200\" format=\"currency:USD\"}\n::metric{label=\"Activated\" value=\"2520\"}\n:::\n\n::::grid{columns=\"2\"}\n::area{data=\"./series.json\" x=\"date\" y=\"orders\" xType=\"date\" title=\"Orders in selected view\"}\n::funnel{data=\"./funnel.json\" stage=\"stage\" value=\"teams\" total=\"baseline\" share=\"share\" status=\"status\" title=\"Selected-view funnel\"}\n::::\n\n::donut{data=\"./plans.json\" category=\"plan\" value=\"teams\" title=\"Selected-view plan mix\"}\n\n:::table{data=\"./accounts.json\" title=\"Selected-view accounts\"}\n::column{field=\"account\" label=\"Account\"}\n::column{field=\"orders\" label=\"Orders\"}\n::column{field=\"weekly\" label=\"Weekly orders\" kind=\"sparkline\"}\n:::\n",
231
+ "datasets": {
232
+ "series.json": [
233
+ {
234
+ "date": "2026-11-01",
235
+ "orders": 550
236
+ },
237
+ {
238
+ "date": "2026-11-02",
239
+ "orders": 580
240
+ },
241
+ {
242
+ "date": "2026-11-03",
243
+ "orders": 600
244
+ },
245
+ {
246
+ "date": "2026-11-04",
247
+ "orders": 680
248
+ }
249
+ ],
250
+ "funnel.json": [
251
+ {
252
+ "stage": "Visited",
253
+ "teams": 12600,
254
+ "baseline": 12600,
255
+ "share": 1,
256
+ "status": "on-target"
257
+ },
258
+ {
259
+ "stage": "Ordered",
260
+ "teams": 4200,
261
+ "baseline": 12600,
262
+ "share": 0.3333333333333333,
263
+ "status": "on-target"
264
+ },
265
+ {
266
+ "stage": "Activated",
267
+ "teams": 2520,
268
+ "baseline": 12600,
269
+ "share": 0.2,
270
+ "status": "below-target"
271
+ }
272
+ ],
273
+ "plans.json": [
274
+ {
275
+ "plan": "Pro",
276
+ "teams": 1680
277
+ },
278
+ {
279
+ "plan": "Team",
280
+ "teams": 840
281
+ }
282
+ ],
283
+ "accounts.json": [
284
+ {
285
+ "account": "EMEA account A",
286
+ "orders": 2100,
287
+ "weekly": [
288
+ 10,
289
+ null,
290
+ 18
291
+ ]
292
+ },
293
+ {
294
+ "account": "EMEA account B",
295
+ "orders": 2100,
296
+ "weekly": [
297
+ 7,
298
+ 11,
299
+ 15
300
+ ]
301
+ }
302
+ ]
303
+ }
304
+ },
305
+ {
306
+ "id": "emea-2",
307
+ "label": "EMEA / 8\u201314 November",
308
+ "when": {
309
+ "region": "emea",
310
+ "period": {
311
+ "start": "2026-11-08",
312
+ "end": "2026-11-14"
313
+ }
314
+ },
315
+ "markdown": "### EMEA \u00b7 8\u201314 November\n\nThis prepared subset uses its own counts and denominators.\n\n:::grid{columns=\"3\"}\n::metric{label=\"Orders\" value=\"5100\" comparison=\"Prepared period\" direction=\"flat\" sentiment=\"neutral\"}\n::metric{label=\"Revenue\" value=\"336600\" format=\"currency:USD\"}\n::metric{label=\"Activated\" value=\"3264\"}\n:::\n\n::::grid{columns=\"2\"}\n::area{data=\"./series.json\" x=\"date\" y=\"orders\" xType=\"date\" title=\"Orders in selected view\"}\n::funnel{data=\"./funnel.json\" stage=\"stage\" value=\"teams\" total=\"baseline\" share=\"share\" status=\"status\" title=\"Selected-view funnel\"}\n::::\n\n::donut{data=\"./plans.json\" category=\"plan\" value=\"teams\" title=\"Selected-view plan mix\"}\n\n:::table{data=\"./accounts.json\" title=\"Selected-view accounts\"}\n::column{field=\"account\" label=\"Account\"}\n::column{field=\"orders\" label=\"Orders\"}\n::column{field=\"weekly\" label=\"Weekly orders\" kind=\"sparkline\"}\n:::\n",
316
+ "datasets": {
317
+ "series.json": [
318
+ {
319
+ "date": "2026-11-08",
320
+ "orders": 678
321
+ },
322
+ {
323
+ "date": "2026-11-09",
324
+ "orders": 708
325
+ },
326
+ {
327
+ "date": "2026-11-10",
328
+ "orders": 728
329
+ },
330
+ {
331
+ "date": "2026-11-11",
332
+ "orders": 808
333
+ }
334
+ ],
335
+ "funnel.json": [
336
+ {
337
+ "stage": "Visited",
338
+ "teams": 15300,
339
+ "baseline": 15300,
340
+ "share": 1,
341
+ "status": "on-target"
342
+ },
343
+ {
344
+ "stage": "Ordered",
345
+ "teams": 5100,
346
+ "baseline": 15300,
347
+ "share": 0.3333333333333333,
348
+ "status": "on-target"
349
+ },
350
+ {
351
+ "stage": "Activated",
352
+ "teams": 3264,
353
+ "baseline": 15300,
354
+ "share": 0.21333333333333335,
355
+ "status": "below-target"
356
+ }
357
+ ],
358
+ "plans.json": [
359
+ {
360
+ "plan": "Pro",
361
+ "teams": 2176
362
+ },
363
+ {
364
+ "plan": "Team",
365
+ "teams": 1088
366
+ }
367
+ ],
368
+ "accounts.json": [
369
+ {
370
+ "account": "EMEA account A",
371
+ "orders": 2550,
372
+ "weekly": [
373
+ 14,
374
+ null,
375
+ 22
376
+ ]
377
+ },
378
+ {
379
+ "account": "EMEA account B",
380
+ "orders": 2550,
381
+ "weekly": [
382
+ 11,
383
+ 15,
384
+ 19
385
+ ]
386
+ }
387
+ ]
388
+ }
389
+ },
390
+ {
391
+ "id": "unlaunched-1",
392
+ "label": "Unlaunched / 1\u20137 November",
393
+ "when": {
394
+ "region": "unlaunched",
395
+ "period": {
396
+ "start": "2026-11-01",
397
+ "end": "2026-11-07"
398
+ }
399
+ },
400
+ "markdown": "### Unlaunched \u00b7 1\u20137 November\n\nNo observations are available. No conversion rate or denominator is invented.\n\n:::grid{columns=\"3\"}\n::metric{label=\"Orders\" value=\"0\" comparison=\"Prepared period\" direction=\"flat\" sentiment=\"neutral\"}\n::metric{label=\"Revenue\" value=\"0\" format=\"currency:USD\"}\n::metric{label=\"Activated\" value=\"0\"}\n:::\n\n::::grid{columns=\"2\"}\n::area{data=\"./series.json\" x=\"date\" y=\"orders\" xType=\"date\" title=\"Orders in selected view\"}\n::funnel{data=\"./funnel.json\" stage=\"stage\" value=\"teams\" total=\"baseline\" share=\"share\" status=\"status\" title=\"Selected-view funnel\"}\n::::\n\n::donut{data=\"./plans.json\" category=\"plan\" value=\"teams\" title=\"Selected-view plan mix\"}\n\n:::table{data=\"./accounts.json\" title=\"Selected-view accounts\"}\n::column{field=\"account\" label=\"Account\"}\n::column{field=\"orders\" label=\"Orders\"}\n::column{field=\"weekly\" label=\"Weekly orders\" kind=\"sparkline\"}\n:::\n",
401
+ "datasets": {
402
+ "series.json": [],
403
+ "funnel.json": [],
404
+ "plans.json": [],
405
+ "accounts.json": []
406
+ }
407
+ }
408
+ ]
409
+ }
@@ -0,0 +1,30 @@
1
+ ---
2
+ title: Regional performance
3
+ description: Fictional prepared views with scoped offline controls.
4
+ ---
5
+
6
+ # Regional performance
7
+
8
+ All values are fictional, prepared for this example. Controls select complete,
9
+ agent-prepared views; the engine does not calculate metrics or denominators.
10
+
11
+ ## Region and reporting period
12
+
13
+ These controls affect only the regional exploration below. Reporting periods are
14
+ inclusive calendar dates. No prepared view exists for Unlaunched / 8–14 November.
15
+
16
+ ::explore{data="./regional-views.json" title="Regional performance explorer"}
17
+
18
+ ## Other native controls
19
+
20
+ This independent exploration demonstrates segmented choices, a toggle, literal
21
+ text and number inputs. Text accepts `all` or `notebook`; quantity accepts `10` or
22
+ `20`. Other values show an unavailable state rather than stale results.
23
+
24
+ ::explore{data="./control-views.json" title="Prepared catalogue scenarios"}
25
+
26
+ ## Interpretation
27
+
28
+ Switching a prepared view changes its metrics, comparisons, charts, funnel, tables
29
+ and data alternatives together. Static prose outside an exploration stays fixed.
30
+ All selectable data remains readable in the downloaded report, even when hidden.
@@ -92,5 +92,15 @@ Weekly order lines share the same vertical scale, so their heights are comparabl
92
92
  - **The natural tote reuses its image.** The portable report embeds each unique illustration once.
93
93
 
94
94
  :::callout{title="About these examples"}
95
- All datasets, comparisons, statuses, findings and product illustrations are fictional. Store totals cover 1–7 November 2026; the onboarding and catalogue sections identify their separate periods and populations. Comparisons are prepared by the author, not inferred by the renderer. No live filters, data connections or subtotal calculations are implied.
95
+ All datasets, comparisons, statuses, findings and product illustrations are fictional. Store totals cover 1–7 November 2026; the onboarding and catalogue sections identify their separate periods and populations. Comparisons are prepared by the author, not inferred by the renderer. The explorations below select separately prepared views. Static store totals above remain unchanged. No live data connections or subtotal calculations are implied.
96
96
  :::
97
+
98
+
99
+ ## Explore prepared regional views
100
+
101
+ The controls in each exploration affect only that exploration. Store totals,
102
+ findings and the earlier examples above stay fixed. All values remain fictional.
103
+
104
+ ::explore{data="./interactions/regional-views.json" title="Regional performance explorer"}
105
+
106
+ ::explore{data="./interactions/control-views.json" title="Prepared catalogue scenarios"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "plotleaf",
3
- "version": "0.3.2",
3
+ "version": "0.4.0",
4
4
  "description": "Beautiful, interactive reports from Markdown and JSON. Built for agents.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -27,6 +27,8 @@
27
27
  "dist/assets/notices.txt",
28
28
  "schema/components.json",
29
29
  "examples/report.md",
30
+ "examples/interactions/*.md",
31
+ "examples/interactions/*.json",
30
32
  "examples/storefront/*.md",
31
33
  "examples/storefront/*.json",
32
34
  "examples/adoption/*.md",