hd-garden 0.13.3 → 0.14.2

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.
Files changed (218) hide show
  1. package/.agents/skills/garden-compose/SKILL.md +24 -0
  2. package/.agents/skills/garden-compose/references/colors.md +11 -0
  3. package/.agents/skills/garden-compose/references/composition-patterns.md +162 -0
  4. package/.agents/skills/garden-compose/references/examples.md +55 -0
  5. package/.agents/skills/garden-compose/references/frames.md +7 -0
  6. package/.agents/skills/garden-compose/references/layout-recipes.md +84 -0
  7. package/.agents/skills/garden-compose/references/rendering-model.md +120 -0
  8. package/.agents/skills/garden-compose/references/static-play.md +19 -0
  9. package/.agents/skills/garden-compose/references/visual-selection.md +38 -0
  10. package/.agents/skills/garden-compose/references/workflow.md +27 -0
  11. package/.agents/skills/garden-compose/scripts/_cli.mjs +12 -0
  12. package/.agents/skills/garden-compose/scripts/apply.mjs +2 -0
  13. package/.agents/skills/garden-compose/scripts/check.mjs +2 -0
  14. package/.agents/skills/garden-compose/scripts/prompt.mjs +2 -0
  15. package/.agents/skills/garden-compose/scripts/scan.mjs +2 -0
  16. package/.agents/skills/garden-post-review/SKILL.md +5 -16
  17. package/Makefile +12 -3
  18. package/README.en.md +10 -5
  19. package/README.md +10 -5
  20. package/app/admin/preview/[...path]/page.tsx +4 -16
  21. package/app/api/admin/ui/blocks/route.ts +1 -1
  22. package/app/components/AdminUiPanels.tsx +6 -3
  23. package/app/components/GardenContentGuide.tsx +7 -8
  24. package/app/components/MarkdownArticle.tsx +2 -0
  25. package/app/components/UiStudio.tsx +29 -32
  26. package/app/components/garden/AuthorRich.tsx +5 -0
  27. package/app/components/garden/ComposePreview.tsx +9 -0
  28. package/app/components/garden/GardenBlock.tsx +12 -10
  29. package/app/components/garden/GardenFile.tsx +1 -1
  30. package/app/components/garden/blocks.tsx +9 -197
  31. package/app/components/garden/file-icons.tsx +1 -1
  32. package/app/components/garden/patterns.tsx +7 -65
  33. package/app/lib/rehype-garden-blocks.mjs +30 -0
  34. package/app/lib/remark-garden.mjs +0 -4
  35. package/app/lib/ui-model.ts +8 -9
  36. package/app/styles/a2.css +17 -1
  37. package/bin/garden.mjs +34 -35
  38. package/docs/handbook/ai-writing.md +19 -22
  39. package/docs/handbook/components/compose.md +16 -7
  40. package/docs/handbook/components/image.md +1 -1
  41. package/docs/handbook/components/link-card.md +2 -2
  42. package/docs/handbook/components.md +5 -213
  43. package/docs/handbook/deploy.md +11 -0
  44. package/docs/handbook/en/ai-writing.md +17 -20
  45. package/docs/handbook/en/components/compose.md +15 -6
  46. package/docs/handbook/en/components/image.md +1 -1
  47. package/docs/handbook/en/components/link-card.md +2 -2
  48. package/docs/handbook/en/components.md +7 -215
  49. package/docs/handbook/en/deploy.md +11 -0
  50. package/docs/handbook/en/index.md +29 -53
  51. package/docs/handbook/en/reference/compose.md +77 -148
  52. package/docs/handbook/en/reference.md +6 -22
  53. package/docs/handbook/en/start.md +1 -1
  54. package/docs/handbook/en/workflow.md +21 -17
  55. package/docs/handbook/en/writing.md +3 -3
  56. package/docs/handbook/index.md +26 -47
  57. package/docs/handbook/reference/compose.md +79 -148
  58. package/docs/handbook/reference.md +6 -22
  59. package/docs/handbook/start.md +1 -1
  60. package/docs/handbook/workflow.md +21 -17
  61. package/docs/handbook/writing.md +3 -3
  62. package/editors/dist/typora/main.js +324 -330
  63. package/editors/dist/typora/style.css +4299 -11
  64. package/editors/dist/vscode/garden-ui-0.14.2.vsix +0 -0
  65. package/eslint.config.mjs +3 -0
  66. package/package.json +5 -3
  67. package/public/images/compose-resources/resource-015b41eb0f32.svg +1 -0
  68. package/public/images/compose-resources/resource-ecee6b47f015.svg +1 -0
  69. package/public/images/compose-resources/resource-fd51121b5e8c.svg +1 -0
  70. package/scripts/build-content.mjs +40 -131
  71. package/scripts/build-ui-preview.mjs +7 -5
  72. package/scripts/check-post.mjs +10 -106
  73. package/scripts/check-site.mjs +80 -0
  74. package/scripts/compose-style-reference.mjs +22 -0
  75. package/scripts/editor-preview-css.mjs +14 -0
  76. package/scripts/file-preview.mjs +1 -1
  77. package/scripts/file-sizes.mjs +7 -7
  78. package/scripts/generated-cache.mjs +36 -0
  79. package/scripts/handbook-facts.mjs +10 -3
  80. package/scripts/image-sizes.mjs +6 -12
  81. package/scripts/link-assets.mjs +35 -10
  82. package/scripts/managed-skills.mjs +56 -0
  83. package/scripts/pack-editors.mjs +12 -1
  84. package/scripts/prepare-pages-output.mjs +1 -1
  85. package/scripts/site-guide.mjs +19 -0
  86. package/scripts/sync-editor-version.mjs +28 -0
  87. package/scripts/ui-cli.mjs +26 -33
  88. package/templates/garden-blocks.md +4 -180
  89. package/templates/garden-snippets.plist +2 -183
  90. package/templates/site/AGENTS.en.md +89 -0
  91. package/templates/site/AGENTS.md +72 -0
  92. package/templates/site/Makefile +12 -3
  93. package/templates/site/Makefile.en +12 -3
  94. package/templates/site/README.en.md +6 -1
  95. package/templates/site/README.md +6 -1
  96. package/templates/skills-en/garden-compose/SKILL.md +24 -0
  97. package/templates/skills-en/garden-post-review/SKILL.md +5 -16
  98. package/templates/workflows/pages.en.yml +11 -0
  99. package/templates/workflows/pages.yml +11 -0
  100. package/ui/compose/compose.css +54 -14
  101. package/ui/compose/contracts.mjs +16 -0
  102. package/ui/compose/dil.mjs +109 -48
  103. package/ui/compose/distribution.mjs +7 -0
  104. package/ui/compose/features.mjs +90 -0
  105. package/ui/compose/icons.mjs +8 -0
  106. package/ui/compose/index.mjs +2 -0
  107. package/ui/compose/inspect.mjs +11 -0
  108. package/ui/compose/markup.mjs +80 -23
  109. package/ui/compose/preview.mjs +13 -0
  110. package/ui/compose/prompt-catalog.mjs +15 -3
  111. package/ui/compose/render.mjs +46 -11
  112. package/ui/compose/scenes.mjs +10 -0
  113. package/ui/core/apply.mjs +12 -45
  114. package/ui/core/catalog.mjs +22 -32
  115. package/ui/core/cli-locale.mjs +8 -18
  116. package/ui/core/color.mjs +34 -0
  117. package/ui/core/compile.mjs +1 -8
  118. package/ui/core/demos.mjs +138 -108
  119. package/ui/core/fence.mjs +14 -70
  120. package/ui/core/fix-prompt.mjs +1 -3
  121. package/ui/core/garden-fence.mjs +3 -63
  122. package/ui/core/index.mjs +3 -5
  123. package/ui/core/parse.mjs +22 -8
  124. package/ui/core/scan.mjs +31 -43
  125. package/ui/core/starters.mjs +3 -3
  126. package/ui/core/static.mjs +36 -6
  127. package/ui/core/transform.mjs +64 -149
  128. package/ui/core/validate.mjs +20 -9
  129. package/ui/garden/article-content.mjs +98 -0
  130. package/ui/garden/catalog.mjs +21 -427
  131. package/ui/garden/check.mjs +18 -60
  132. package/ui/garden/file-block.mjs +1 -1
  133. package/ui/garden/file-paths.mjs +8 -6
  134. package/ui/garden/parse.mjs +19 -182
  135. package/ui/garden/relations.mjs +1 -1
  136. package/ui/garden/snippets.mjs +12 -153
  137. package/ui/garden/source-icon.mjs +17 -9
  138. package/ui/garden/word-count.mjs +16 -85
  139. package/ui/index.mjs +1 -5
  140. package/ui/preview/dist/garden-ui.css +4300 -11
  141. package/ui/preview/dist/garden-ui.esm.js +446 -418
  142. package/ui/preview/dist/garden-ui.iife.js +446 -418
  143. package/ui/preview/index.tsx +31 -98
  144. package/ui/preview/site-config.ts +4 -0
  145. package/ui/prompt/build.mjs +1 -4
  146. package/ui/prompt/recipes/code-walkthrough.md +17 -12
  147. package/ui/prompt/recipes/compare.md +14 -10
  148. package/ui/prompt/recipes/compose.md +3 -3
  149. package/ui/prompt/recipes/converter.md +17 -14
  150. package/ui/prompt/recipes/data-chart.md +9 -8
  151. package/ui/prompt/recipes/inspect-grid.md +9 -8
  152. package/ui/prompt/recipes/param-bench.md +17 -12
  153. package/ui/prompt/recipes/plan.md +4 -3
  154. package/ui/prompt/recipes/stepper.md +18 -16
  155. package/ui/prompt/recipes/trace.md +20 -18
  156. package/ui/prompt/rules.md +26 -133
  157. package/ui/prompt/studio.md +3 -18
  158. package/ui/react/CatalogPage.tsx +19 -21
  159. package/ui/react/recipes.ts +3 -3
  160. package/ui/react/runtime.tsx +23 -2
  161. package/ui/react/ui.css +17 -11
  162. package/vite.config.ts +16 -3
  163. package/.agents/skills/garden-interactive-chart/SKILL.md +0 -84
  164. package/.agents/skills/garden-interactive-chart/references/shell.html +0 -49
  165. package/.agents/skills/garden-interactive-chart/references/style.md +0 -61
  166. package/.agents/skills/garden-ui/SKILL.md +0 -125
  167. package/app/components/UiBlock.tsx +0 -23
  168. package/app/components/WidgetChart.tsx +0 -224
  169. package/app/lib/generated-content.ts +0 -385
  170. package/docs/handbook/components/card.md +0 -67
  171. package/docs/handbook/components/chart.md +0 -38
  172. package/docs/handbook/components/choice.md +0 -42
  173. package/docs/handbook/components/compare.md +0 -53
  174. package/docs/handbook/components/file.md +0 -29
  175. package/docs/handbook/components/html.md +0 -49
  176. package/docs/handbook/components/interactive.md +0 -48
  177. package/docs/handbook/components/list.md +0 -65
  178. package/docs/handbook/components/relations.md +0 -95
  179. package/docs/handbook/components/stat.md +0 -39
  180. package/docs/handbook/components/timeline.md +0 -37
  181. package/docs/handbook/en/components/card.md +0 -67
  182. package/docs/handbook/en/components/chart.md +0 -38
  183. package/docs/handbook/en/components/choice.md +0 -42
  184. package/docs/handbook/en/components/compare.md +0 -53
  185. package/docs/handbook/en/components/file.md +0 -29
  186. package/docs/handbook/en/components/html.md +0 -49
  187. package/docs/handbook/en/components/interactive.md +0 -44
  188. package/docs/handbook/en/components/list.md +0 -65
  189. package/docs/handbook/en/components/relations.md +0 -95
  190. package/docs/handbook/en/components/stat.md +0 -39
  191. package/docs/handbook/en/components/timeline.md +0 -37
  192. package/docs/handbook/en/reference/card.md +0 -85
  193. package/docs/handbook/en/reference/chart.md +0 -68
  194. package/docs/handbook/en/reference/choice.md +0 -69
  195. package/docs/handbook/en/reference/compare.md +0 -59
  196. package/docs/handbook/en/reference/file.md +0 -50
  197. package/docs/handbook/en/reference/html.md +0 -62
  198. package/docs/handbook/en/reference/interactive.md +0 -71
  199. package/docs/handbook/en/reference/list.md +0 -72
  200. package/docs/handbook/en/reference/relations.md +0 -113
  201. package/docs/handbook/en/reference/stat.md +0 -60
  202. package/docs/handbook/en/reference/timeline.md +0 -56
  203. package/docs/handbook/reference/card.md +0 -85
  204. package/docs/handbook/reference/chart.md +0 -68
  205. package/docs/handbook/reference/choice.md +0 -69
  206. package/docs/handbook/reference/compare.md +0 -59
  207. package/docs/handbook/reference/file.md +0 -50
  208. package/docs/handbook/reference/html.md +0 -62
  209. package/docs/handbook/reference/interactive.md +0 -71
  210. package/docs/handbook/reference/list.md +0 -72
  211. package/docs/handbook/reference/relations.md +0 -113
  212. package/docs/handbook/reference/stat.md +0 -60
  213. package/docs/handbook/reference/timeline.md +0 -56
  214. package/editors/dist/vscode/garden-ui-0.1.1.vsix +0 -0
  215. package/templates/skills-en/garden-interactive-chart/SKILL.md +0 -84
  216. package/templates/skills-en/garden-interactive-chart/references/shell.html +0 -49
  217. package/templates/skills-en/garden-interactive-chart/references/style.md +0 -61
  218. package/templates/skills-en/garden-ui/SKILL.md +0 -125
@@ -1,221 +1,13 @@
1
1
  ---
2
- title: Components Overview
3
- navTitle: Overview
4
- description: Live previews of the garden fences, plus link cards, source chips, and local images.
2
+ title: Components
3
+ navTitle: Components
4
+ description: Components
5
5
  section: components
6
6
  order: 30
7
7
  ---
8
8
 
9
- ## [Reference Card · card](/garden/en/components/card)
9
+ Use one `garden compose` fence for article layouts, rich content, semantic scenes and interactive explanations. Select components inside that entry; use ordinary Markdown when it already communicates the idea.
10
10
 
11
- ```garden card
12
- title: SQLite Write-Ahead Logging
13
- url: https://www.sqlite.org/wal.html
14
- meta: Documentation · sqlite.org
15
- description: Appends changes sequentially to a write-ahead log while readers continue reading the original database pages, reducing read-write contention.
16
- points:
17
- - Writes append to the end of the `-wal` file instead of overwriting database pages in place on commit.
18
- - Readers record the current end-of-log mark to see a consistent snapshot without blocking concurrent writers.
19
- ```
20
-
21
- ## [Key Figures · stat](/garden/en/components/stat)
22
-
23
- ```garden stat
24
- items:
25
- - label: Reading Column
26
- value: "740"
27
- unit: px
28
- caption: Default prose column width
29
- - label: Wide Figure Limit
30
- value: "1040"
31
- unit: px
32
- caption: Extends up to 150px on each side
33
- - label: Wide Table Limit
34
- value: "1340"
35
- unit: px
36
- caption: Extends up to 300px on each side
37
- ```
38
-
39
- ## [Side-by-Side Comparison · compare](/garden/en/components/compare)
40
-
41
- ```garden compare
42
- items:
43
- - title: Describe the change in one sentence
44
- text: Idea block under full code; the AI writes the diff.
45
- - title: Write the diff by hand
46
- text: Place a diff block right below the full code block.
47
- ```
48
-
49
- ## [Step Timeline · timeline](/garden/en/components/timeline)
50
-
51
- ```garden timeline
52
- items:
53
- - date: Step 1
54
- title: Sync Content and Assets
55
- text: Validate Front Matter, copy attachments, and build the search index and RSS feed.
56
- - date: Step 2
57
- title: Build Static Site Output
58
- text: Prerender every route into the static output directory.
59
- ```
60
-
61
- ## [Bar Chart · chart](/garden/en/components/chart)
62
-
63
- ```garden chart
64
- title: Max Width by Layout Zone
65
- xLabel: Layout Zone
66
- yLabel: Max Width
67
- unit: px
68
- data:
69
- - x: Prose Column
70
- y: 740
71
- - x: Wide Figure Zone
72
- y: 1040
73
- - x: Wide Table Zone
74
- y: 1340
75
- ```
76
-
77
- ## [Explanation diagram · compose](/garden/en/components/compose)
78
-
79
- ```garden compose
80
- <intent>
81
- The top row is delivery order: Understand, Design, Ship. The bottom row is the decision loop to emphasize: Hypothesize, Cheap test, Iterate or stop. The top row is background. The bottom row is the point.
82
- </intent>
83
- <row align="center">
84
- <title align="center">Understand</title>
85
- <arrow dir="right"/>
86
- <title align="center">Design</title>
87
- <arrow dir="right"/>
88
- <title align="center">Ship</title>
89
- </row>
90
- <divider/>
91
- <row align="center">
92
- <pill tone="muted">Hypothesize</pill>
93
- <arrow dir="right"/>
94
- <pill tone="muted">Cheap test</pill>
95
- <arrow dir="right"/>
96
- <pill tone="muted">Iterate or stop</pill>
97
- </row>
98
- ```
99
-
100
- ## [Embedded Web Snippet · html](/garden/en/components/html)
101
-
102
- ```garden html
103
- title: Character Count Widget
104
- code: |
105
- <!doctype html>
106
- <html lang="en">
107
- <head>
108
- <meta charset="utf-8" />
109
- <style>
110
- body { margin: 0; padding: 16px 18px; font: 14px/1.6 system-ui, sans-serif; color: #1b1a18; background: #faf9f5; }
111
- input { width: 100%; box-sizing: border-box; padding: 8px 10px; border: 1px solid #d5d1c8; border-radius: 6px; font: inherit; background: #fff; color: #1b1a18; }
112
- .meta { margin-top: 10px; color: #6e6b64; font-variant-numeric: tabular-nums; }
113
- strong { color: #1b1a18; }
114
- </style>
115
- </head>
116
- <body>
117
- <input id="txt" value="Keep your posts in a Git repository and push to deploy." aria-label="Sample text input" />
118
- <div class="meta">Characters: <strong id="count">55</strong></div>
119
- <script>
120
- const input = document.getElementById("txt");
121
- const count = document.getElementById("count");
122
- input.addEventListener("input", () => { count.textContent = String(input.value.length); });
123
- </script>
124
- </body>
125
- </html>
126
- ```
127
-
128
- ## [Interactive Formula & Parameters · interactive](/garden/en/components/interactive)
129
-
130
- ```garden compose #overview-reading
131
- caption: "Example: estimate reading time from word count and reading speed."
132
- ---
133
- <State words={6000} speed={400} />
134
- <Let minutes={round(words / speed)} />
135
-
136
- <Slider bind="words" label="Word count" min={1000} max={20000} step={500} unit="words" />
137
- <Slider bind="speed" label="Reading speed" min={200} max={800} step={50} unit="wpm" />
138
-
139
- <Stat label="Estimated reading time" value={minutes} unit="min" />
140
- ```
141
-
142
- ## [File Download & Preview · file](/garden/en/components/file)
143
-
144
- ```garden file
145
- src: ./components/file/checklist.md
146
- title: Pre-publish Checklist
147
- note: Click Preview to read inline or Download to save the file
148
- ```
149
-
150
- ## [Relationship diagram · relations](/garden/en/components/relations)
151
-
152
- ```garden relations
153
- items:
154
- - title: Pick
155
- text: Choose this month's book
156
- - title: Read
157
- text: Finish the agreed chapters each week
158
- - title: Talk
159
- text: Meet and share views
160
- - title: Review
161
- text: Note what to change next time
162
- links:
163
- - from: 1
164
- to: 2
165
- - from: 2
166
- to: 3
167
- - from: 3
168
- to: 4
169
- - from: 4
170
- to: 1
171
- - from: 3
172
- to: 1
173
- style: dashed
174
- label: shapes the pick
175
- ```
176
-
177
- ## [Icon List · list](/garden/en/components/list)
178
-
179
- ```garden list
180
- items:
181
- - icon: search
182
- text: Searches for this month's title
183
- - icon: eye
184
- text: Reads 3 reviews
185
- - icon: heart
186
- text: Saves the event page
187
- - icon: chat
188
- text: Asks in the group chat whether listening only is fine
189
- ```
190
-
191
- ## [Choice Cards · choice](/garden/en/components/choice)
192
-
193
- ```garden choice
194
- title: Where should we meet next month?
195
- items:
196
- - icon: idea
197
- value: $6 each
198
- text: Corner café, one drink included
199
- label: Prefer the atmosphere
200
- reply: Café it is. We will book the long table by the window.
201
- - icon: book
202
- value: Free
203
- text: Library meeting room, booking needed
204
- label: Prefer the quiet
205
- reply: Library it is. We will book the room at the start of the month.
206
- none:
207
- label: Neither / not sure
208
- reply: No problem. We will share a few more venues in the group chat.
209
- ```
210
-
211
- ## [Link card · {card}](/garden/en/components/link-card)
212
-
213
- [Supported KaTeX functions](https://katex.org/docs/supported.html){card}
214
-
215
- ## [Source chip · {source}](/garden/en/components/source)
216
-
217
- Cited from Wikipedia [wikipedia.org](https://en.wikipedia.org/wiki/Book_discussion_club){source}
218
-
219
- ## [Local image](/garden/en/components/image)
220
-
221
- ![Reading column, wide figure zone, and wide table zone](../assets/reading-layout-en.svg)
11
+ - [Compose](/garden/en/components/compose)
12
+ - [Compose reference](/garden/en/reference/compose)
13
+ - [Icons](/garden/en/reference/compose-icons)
@@ -38,6 +38,17 @@ jobs:
38
38
  steps:
39
39
  - uses: actions/checkout@v7
40
40
 
41
+ - name: Restore generated Garden caches
42
+ uses: actions/cache@v4
43
+ with:
44
+ path: |
45
+ .garden/image-sizes.json
46
+ .garden/link-assets.json
47
+ public/link-assets
48
+ key: ${{ runner.os }}-garden-generated-v1-${{ github.ref_name }}-${{ github.run_id }}
49
+ restore-keys: |
50
+ ${{ runner.os }}-garden-generated-v1-${{ github.ref_name }}-
51
+
41
52
  - uses: actions/setup-node@v7
42
53
  with:
43
54
  node-version: 22
@@ -18,14 +18,14 @@ Drop an unnamed `garden` fence where the interactive block should go and state w
18
18
  ````markdown
19
19
  ## Writing Pace
20
20
 
21
- ```garden
21
+ ```garden compose
22
22
  Let the reader drag daily word count and writing days per week to see how many weeks an 8,000-word article takes.
23
23
  ```
24
24
  ````
25
25
 
26
26
  ### 2. The Agent Scans and Writes Back the Component
27
27
 
28
- Tell the Agent to compile `content/posts/writing-pace.md`. Following the `garden-ui` skill in the repository, the Agent first runs `npx garden ui scan` to read the line number, original wording, and hash:
28
+ Tell the Agent to compile `content/posts/writing-pace.md`. Following the `garden-compose` skill in the repository, the Agent first runs `npx garden ui scan` to read the line number, original wording, and hash:
29
29
 
30
30
  ```console
31
31
  $ npx garden ui scan content/posts/writing-pace.md
@@ -34,7 +34,7 @@ $ npx garden ui scan content/posts/writing-pace.md
34
34
  "draft": false,
35
35
  "blocks": [
36
36
  {
37
- "lang": "garden-idea",
37
+ "lang": "garden-compose",
38
38
  "status": "uncompiled",
39
39
  "startLine": 9,
40
40
  "intentHash": "8866427a",
@@ -52,54 +52,42 @@ $ npx garden ui apply content/posts/writing-pace.md --intent-hash 8866427a --fil
52
52
  {"ok":true,"file":"content/posts/writing-pace.md","kind":"garden","line":9}
53
53
  ```
54
54
 
55
- ### 3. The Pre-commit Hook Checks and Prints a Fix Prompt
55
+ ### 3. The Pre-commit Hook Checks and Points to the Project Skill
56
56
 
57
- On the first `garden sync` or `garden dev` run, Garden writes `exec npx --no-install garden ui check --staged --quiet` to `.git/hooks/pre-commit`. If the author commits before step 2, the hook blocks the commit and prints a ready-to-paste prompt for the AI:
57
+ On the first `garden sync` or `garden dev` run, Garden writes `exec npx --no-install garden ui check --staged --quiet` to `.git/hooks/pre-commit`. If the author commits before step 2, the hook blocks the commit and shows diagnostics and a short project-skill instruction:
58
58
 
59
59
  ```console
60
60
  $ git commit -m "Writing pace"
61
- content/posts/writing-pace.md:9 - garden-idea uncompiled idea remaining
62
-
63
- ──────────────────────── Fix prompt for AI ────────────────────────
64
- Handle the Garden post blocks listed below: compile uncompiled ideas, and fix interactive blocks that have errors.
65
-
66
- Rules:
67
- - First run npx garden ui prompt and read the component catalog and rules; if the repo has the garden-ui skill, follow its flow.
68
- - Change only the listed blocks. Write them back with npx garden ui apply <post> --id <id> (use --intent-hash for ideas without an id). Do not edit the post by hand.
69
- - Keep the author's meaning. When done, run npx garden ui check <post> until it passes.
70
- - If you cannot access this repository, reply with only the finished fence for each block.
71
-
72
- 1. content/posts/writing-pace.md, lines 9–11, intent-hash: 8866427a
73
- - garden-idea: this idea is not compiled yet; compile it into garden compose or another garden component (or put the sentence back into the prose).
74
-
75
- Current fence:
76
-
77
- ```garden
78
- Let the reader drag daily word count and writing days per week to see how many weeks an 8,000-word article takes.
79
- ```
80
- ────────────────────────────────────────────────────────────
81
- Wrote .garden/ui-fix-prompt.md. To commit anyway, run git commit --no-verify.
61
+ content/posts/writing-pace.md:9 - compose-uncompiled uncompiled compose idea remaining
62
+ Use garden-compose skill (.agents/skills/garden-compose/SKILL.md), fix the failing blocks, then recheck.
82
63
  ```
83
64
 
84
- The same prompt is saved to `.garden/ui-fix-prompt.md` and copied to the clipboard when a clipboard command is available. Once the Agent applies the block and the author commits again, the hook exits silently with code `0`.
65
+ The terminal shows diagnostics and a short instruction to load the project `garden-compose` skill. No file, clipboard copy, source dump, or catalog export is produced by default. After repair, the hook exits silently with code `0`.
85
66
 
86
67
  ### 4. The Rendered Result
87
68
 
88
69
  The `garden compose` fence written back in step 2 renders directly on the article page as an interactive calculator:
89
70
 
90
71
  ```garden compose #writing-pace
91
- caption: Writing a few hundred extra words each day finishes sooner than adding another writing day per week.
92
- intent: |
93
- Let the reader drag daily word count and writing days per week to see how many weeks an 8,000-word article takes.
72
+ caption: Writing a few hundred extra words each day finishes sooner than adding
73
+ another writing day per week.
74
+ intent: >
75
+ Let the reader drag daily word count and writing days per week to see how many
76
+ weeks an 8,000-word article takes.
94
77
  ---
95
- <State daily={500} days={3} />
96
- <Let weekly={daily * days} />
97
- <Let weeks={ceil(8000 / weekly)} />
78
+ {@body const [daily, setDaily] = DIL.useState(500)}
79
+ {@body const [days, setDays] = DIL.useState(3)}
80
+ {@body const weekly = daily * days}
81
+ {@body const weeks = ceil(8000 / weekly)}
82
+
83
+
98
84
 
99
- <Slider bind="daily" label="Words per day" min={200} max={2000} step={100} unit="words" />
100
- <Slider bind="days" label="Days per week" min={1} max={7} step={1} unit="days" />
101
85
 
102
- <Stat label="Weeks to finish 8,000 words" value={weeks} unit="weeks" hint="Rounded up to full weeks" />
86
+ <slider bind="daily" label="Words per day" min={200} max={2000} step={100} unit="words" />
87
+ <slider bind="days" label="Days per week" min={1} max={7} step={1} unit="days" />
88
+
89
+ <stat label="Weeks to finish 8,000 words" value={weeks} unit="weeks" hint="Rounded up to full weeks" />
90
+
103
91
  ```
104
92
 
105
93
  > [!IMPORTANT] Humans and Agents Share the Same Tools
@@ -153,25 +141,13 @@ pages:
153
141
 
154
142
  ## Structured Components in Markdown
155
143
 
156
- Use ```` ```garden <name> ```` fences to insert metrics, side-by-side comparisons, timelines, or charts. Here is a `garden stat` block:
157
-
158
- ```garden stat
159
- items:
160
- - label: Reading Column
161
- value: "740"
162
- unit: px
163
- caption: Default width for paragraphs, code blocks, and lists
164
- - label: Wide Figure Zone
165
- value: "1040"
166
- unit: px
167
- caption: Screenshots display at half their pixel width and expand up to this limit above ~2000px
168
- - label: Wide Table Zone
169
- value: "1340"
170
- unit: px
171
- caption: Maximum width for wide multi-column tables expanding symmetrically on desktop
144
+ Use `garden compose` to combine metrics, comparisons, timelines, or plots. Here is a metric scene:
145
+
146
+ ```garden compose
147
+ <stack><metric label="Reading Column" value="740" unit="px" caption="Default width for paragraphs, code blocks, and lists"></metric><metric label="Wide Figure Zone" value="1040" unit="px" caption="Screenshots display at half their pixel width and expand up to this limit above ~2000px"></metric><metric label="Wide Table Zone" value="1340" unit="px" caption="Maximum width for wide multi-column tables expanding symmetrically on desktop"></metric></stack>
172
148
  ```
173
149
 
174
- The component pages cover the `garden` fences, plus link cards, source chips, and local images. Explanation diagrams are [compose](/garden/en/components/compose). See [Components Overview](/garden/en/components) for the live examples.
150
+ The component pages use `garden compose` as the single Garden author entry, alongside link cards, source chips, and local images. Combine content, layout, and interactions inside [compose](/garden/en/components/compose). See [Components Overview](/garden/en/components) for the live examples.
175
151
 
176
152
  <h2 id="garden-admin-title">From Init to Daily Writing</h2>
177
153
 
@@ -1,182 +1,111 @@
1
1
  ---
2
- title: Component reference · compose
2
+ title: Compose reference
3
3
  navTitle: compose
4
- description: Scannable catalog of every compose tag, shared tokens, and links to the icon grid.
4
+ description: One author entry, executable rendering contracts and verification.
5
5
  section: reference
6
6
  order: 6
7
7
  badge: compose
8
8
  ---
9
9
 
10
- [← Component reference](/garden/en/reference) · [Usage](/garden/en/components/compose) · [Icons](/garden/en/reference/compose-icons)
10
+ ## One entry, component selection inside it
11
11
 
12
- Fence: ` ```garden compose `. Author intent stays in `<intent>` (not drawn). Unknown tags fail with `compose-invalid`.
12
+ Use `garden compose`. Select by the reader's task, not by another fence name:
13
13
 
14
- **68 tags** in the catalog below. Icons: **690** names — see [compose icons](/garden/en/reference/compose-icons).
14
+ | Need | Compose structure |
15
+ | :--- | :--- |
16
+ | Reference material and takeaways | `resources/resource`, nested `point`, `reference` |
17
+ | Key results | `metric` with label, value, unit, caption, paragraphs and references |
18
+ | Time or stages | `timeline/event` |
19
+ | Alternatives and verdicts | `compare/item` |
20
+ | Icon-led editorial paragraphs | `icon-list/entry` or a small `icon` beside one shared text container |
21
+ | Download and preview | `files/file` or one `file src="…"` |
22
+ | Connected concepts | `relations/entity/edge`, stable ids; 3–6 entities |
23
+ | Rich selectable cards and replies | `choices/choice-option`, optional `none` option |
24
+ | Discrete bars and exact values | `plot/datum`; expandable data table |
25
+ | Parameter-dependent results | Play declarations, controls, `chart/bar/line`, `pie`, `table` |
26
+ | Article text and useful HTML | `markdown` and `html` content islands |
27
+ | Independent executable illustration | Play `sandbox` with literal html/css/js; isolated offline iframe |
15
28
 
16
- ## Shared tokens
29
+ The authoritative, demand-loaded catalog is `npx garden ui schema`: actual semantic fields, Play props/defaults/child contracts, icon names, safe HTML tags/attributes/CSS properties. `npx garden ui prompt` adds working recipes. `styleReference` also extracts current font/layout declarations, selectors, responsive conditions and source order from the installed stylesheets; it reports source defaults, not universal computed values. These are generated from the validators and actual styles; do not maintain a second exhaustive tag list. Static layout normalization is not a universal HTML/CSS API: inspect the normalized tree and output because some unsupported static layout attributes are ignored. Semantic unknown fields fail validation.
17
30
 
18
- Write once; most layout tags accept them. Colors come only from Garden theme variables (Claude paper).
31
+ See the executable [Compose active-hours chart](/garden/en/components/compose#ui-compose-chart-active-hours).
19
32
 
20
- | Token | Values |
21
- | :--- | :--- |
22
- | `padding` / `gap` | `0`–`4` (4px × n) |
23
- | `background` | `surface` `surface-secondary` `surface-accent` `surface-tip` `surface-muted` `transparent` |
24
- | `radius` | `none` `sm` `md` `lg` `xl` `full` |
25
- | `border` | `subtle` `strong`/`true` `none`/`false` |
26
- | `size` | `sm` `md` `lg` `xl` |
27
- | `tone` | `plain` `accent` `tip` `muted` (and callout `note`/`warn`) |
28
- | `align` | `start` `center` `end` `stretch` |
29
- | `justify` (row) | `start` `center` `end` `between` `around` |
30
- | `wrap` (row) | `wrap` `nowrap` |
33
+ ## Relationships → hierarchy → layout → style → actual output
31
34
 
32
- ## High-traffic attributes
35
+ First identify what belongs together. A heading and all its paragraphs must share a container. Next choose columns and proportions, then alignments and typography. Only then add surfaces and decorative details.
33
36
 
34
- ### `box` / `card`
37
+ A static `row` wraps by default. Its direct text/title/stack/card children share available width (`flex: 1 1 0`), whereas an icon is content-sized. A heading placed directly in that row is a sibling column, not the heading of a paragraph below the row. `align="center"` on a row changes more than vertical placement: theme rules also center text. A centered stack propagates text alignment. For an editorial list use explicit start alignment on children of a shared right-hand group; do not center each title independently.
35
38
 
36
- | Attr | Notes |
37
- | :--- | :--- |
38
- | `frame` | `card` (default) `band` `pill` `text` — or sugar tags `<band>` / `<pill>` |
39
- | `padding` `gap` `radius` `border` `background` `size` `align` `tone` `id` `mark` | shared tokens; `mark="shield"` draws a shield glyph |
39
+ Direct `row > stack` has 12px top padding in the current theme. A `group` is a width:100%, min-width:0 vertical container that shrinks beside the fixed icon and reads gap without that contextual padding; use it when icon and heading must begin on the same top line. Explicit `align="start"` survives normalization and emits data-align.
40
40
 
41
- ### `row` / `stack` / `grid`
41
+ Nested paragraphs need separate `text` leaves or an article content island. Two unrelated top-level leaves do not establish a shared right column. Put a full-width divider **between rows**, not inside the right text container, if the rule must span the icon column too. `divider` and `separator` are real primitives, not text lines.
42
42
 
43
- | Attr | Notes |
44
- | :--- | :--- |
45
- | `gap` `align` | shared |
46
- | `justify` `wrap` | `row` only |
47
- | `cols` | `grid` only, 1–6 |
48
- | `span` | `grid-item` only, 1–6 |
43
+ ```garden compose
44
+ <figure frame="none">
45
+ <row wrap="nowrap" align="start" gap="4">
46
+ <icon name="book-open" size="xl"/>
47
+ <group gap="2">
48
+ <title align="start">Test heading — not article content</title>
49
+ <text align="start">Explicit test paragraph: the heading and this body share the same right column. Keep the author's complete text; do not shrink or summarize it to fit.</text>
50
+ <text align="start">A second independent test paragraph stays in that column.</text>
51
+ </group>
52
+ </row>
53
+ <divider/>
54
+ <row wrap="nowrap" align="start" gap="4">
55
+ <icon name="users" size="xl"/>
56
+ <group gap="2">
57
+ <title align="start">Second test heading</title>
58
+ <text align="start">Another test body, aligned with its heading rather than spanning the icon column.</text>
59
+ </group>
60
+ </row>
61
+ </figure>
62
+ ```
49
63
 
50
- ### `text` / `title` / `caption`
64
+ For a native editorial list the same relationship is expressed with `icon-list` containing `entry icon="…" title="…"`, and multiple `text` children per entry. Native paragraph children are lowered to text strings: their nested text size/alignment/layout properties are not carried into the native scene. Use a generic layout with text size controls for such precision; do not assume identical nested styling contracts. Native scenes preserve the app's keyboard/selection/detail/file-preview behavior when rendered by the Garden article host. A standalone static export is a readable fallback, not an identical interactive host.
51
65
 
52
- | Attr | Notes |
53
- | :--- | :--- |
54
- | `size` `align` | shared |
55
- | `tone` | `text`: `plain` `muted` `accent` `tip`. `caption` forces muted. |
66
+ ## Typography and complete-theme context
56
67
 
57
- ### `icon`
68
+ Default body text inherits the **actual article's** family, size and line height. There is no universal pixel baseline. This includes ordinary static text, list bodies and native readable prose; changing the article typography configuration must propagate. Semantic headings, graph labels, values, captions and controls intentionally retain their hierarchy.
58
69
 
59
- | Attr | Notes |
70
+ | Element/context | Actual source rule / intentional variation |
60
71
  | :--- | :--- |
61
- | `name` | required; must be in the [icon catalog](/garden/en/reference/compose-icons) |
62
- | `size` | `sm` `md` `lg` `xl` |
63
- | `inline` | sit with surrounding text |
72
+ | Static `text` and `title` | Inherit body size; title weight 600, line height 1.4. `size="sm"` .875em; `lg` 1.125em; `xl` 1.25em. `md` keeps the baseline. |
73
+ | Static outer figure title/caption | Source defaults 18px/14px, not ordinary body; actual cascade still matters. |
74
+ | Static inline caption | Own semantic style; `sm` 11px, `lg` 16px. Not a body substitute. |
75
+ | Native icon-list entry title/body | Title weight 600; body inherits article. Group heading uses `--fs-small`. |
76
+ | Native choice value | 22px; narrow rule 20px. Option body inherits article. |
77
+ | Native relation ring | Compact/context-dependent labels and line clamps; detail prose inherits article. Do not treat a ring label as a long paragraph. |
78
+ | Play components | Query schema defaults and complete theme. Their controls/KPI/graph semantics are not globally changed to body size. |
64
79
 
65
- ## Tag catalog
80
+ Use explicit variation only for a meaningful hierarchy. Never shrink body text globally to fit a screenshot or discard facts to avoid wrapping. Inspect actual computed styles with globals → tokens → article theme → shell in the real order, on desktop and narrow widths; base component CSS alone does not prove the final result.
66
81
 
67
- One mini sample per group, then a one-line table for every tag. No per-tag essays.
82
+ ## Markdown, safe HTML, and execution
68
83
 
69
- ### Layout
84
+ `text`, `title` and captions are inline contexts: `**bold**`, `_emphasis_`, backticks, `[links](https://example.com)`, `~~strike~~` and safe inline HTML such as `<u>underline</u>`. `<u>` is HTML, not standard Markdown.
70
85
 
71
- ```garden compose
72
- <row gap={2}><box padding={2} radius="md" border="subtle"><title size="sm">A</title></box><box padding={2} radius="md" background="surface-accent"><title size="sm">B</title></box></row>
73
- ```
74
-
75
- | Tag | Purpose |
76
- | :--- | :--- |
77
- | `box` | Generic container; padding / gap / background / radius |
78
- | `card` | Alias of box as a card face |
79
- | `stack` | Vertical stack |
80
- | `row` | Horizontal row |
81
- | `columns` | Multi-column row (wrap by default) |
82
- | `grid` | Equal grid; cols 1–6 |
83
- | `grid-item` | Grid cell; span columns |
84
- | `group` | Semantic group |
85
- | `field` | Form-field group |
86
- | `header` | Header region |
87
- | `footer` | Footer region |
88
- | `figure` | Figure region |
89
- | `prose` | Prose region |
90
- | `divider` | Divider (self-closing) |
91
- | `separator` | Alias of divider |
92
- | `spacer` | Empty spacer |
93
- | `band` | Full-width band (box frame=band) |
94
- | `pill` | Pill (box frame=pill) |
95
-
96
- ### Text
86
+ Use `markdown` or `html` islands for full paragraphs, lists, headings, blockquotes, code blocks, tables, images, details/summary and other allowlisted article content. The islands share the article Markdown/GFM and safe-HTML renderer; they are not arbitrary component trees. Static text outside islands is a lightweight layout shorthand, **not** the whole article block grammar. Play islands are literal content, not interpolated expressions. Keep state and expressions in Play component nodes outside them.
97
87
 
98
88
  ```garden compose
99
- <stack gap={1}><title size="sm">Title</title><text size="sm">Body</text><caption size="sm">Caption</caption><badge>badge</badge></stack>
100
- ```
89
+ <figure frame="none">
90
+ <markdown>
91
+ ### Explicit test content
101
92
 
102
- | Tag | Purpose |
103
- | :--- | :--- |
104
- | `title` | Short title |
105
- | `text` | Body text |
106
- | `caption` | Caption (muted by default) |
107
- | `label` | Control label |
108
- | `badge` | Pill badge |
109
- | `kpi` | Metric (self-closing) |
110
- | `stat` | Alias of kpi |
111
- | `icon` | Named stroke icon (self-closing) |
112
- | `callout` | Callout strip |
113
- | `kbd` | Keyboard keycap |
114
- | `link` | Inline link |
115
- | `intent` | Author intent (not drawn) |
116
-
117
- ### Controls
93
+ **Bold**, _emphasis_, `code`, [link](https://example.com), ~~strike~~ and <u>underline</u>.
118
94
 
119
- ```garden compose
120
- <stack gap={2}><row gap={2}><avatar label="A" size="sm"/><badge>ok</badge><kbd>⌘K</kbd></row><list><list-item>One</list-item><list-item>Two</list-item></list><progress value={40} max={100} label="40%"/></stack>
95
+ - A full Markdown list
96
+ - Another test item
97
+
98
+ <details><summary>Safe HTML details</summary><p>Useful article HTML can coexist with Markdown.</p></details>
99
+ </markdown>
100
+ </figure>
121
101
  ```
122
102
 
123
- | Tag | Purpose |
124
- | :--- | :--- |
125
- | `button` | Button snapshot |
126
- | `slider` | Slider snapshot / play |
127
- | `progress` | Progress bar |
128
- | `meter` | Meter bar |
129
- | `checkbox` | Checkbox snapshot |
130
- | `radio` | Radio snapshot |
131
- | `toggle` | Toggle snapshot |
132
- | `switch` | Alias of toggle |
133
- | `input` | Text input snapshot |
134
- | `textarea` | Textarea snapshot |
135
- | `select` | Select snapshot |
136
- | `tabs` | Tabs container |
137
- | `tab` | One tab |
138
- | `list` | List |
139
- | `list-item` | List item |
140
- | `table` | Table |
141
- | `thead` | Table head |
142
- | `tbody` | Table body |
143
- | `tr` | Table row |
144
- | `th` | Header cell |
145
- | `td` | Data cell |
146
- | `image` | Image |
147
- | `avatar` | Avatar placeholder |
148
- | `empty` | Empty state |
149
- | `option` | Segment option snapshot |
150
-
151
- ### Connectors
103
+ Safe HTML supports allowlisted local `style` properties, including useful layout and typography; inspect the generated schema for the actual set. Unsupported tags/properties, events, unsafe URLs, executable scripts and network CSS functions report diagnostics. Do not expand the article allowlist into arbitrary execution. An intentional executable demo uses `sandbox` inside the **same Compose entry**, with literal html/css/js and no parent origin access. Sandbox layout is its own document, not inherited article prose.
152
104
 
153
- ```garden compose
154
- <stack align="center" gap={1}><pill>Start</pill><arrow dir="down"/><band tone="accent" align="center"><title size="sm">Hub</title></band></stack>
155
- ```
105
+ ## Verification levels
156
106
 
157
- | Tag | Purpose |
158
- | :--- | :--- |
159
- | `arrow` | Arrow |
160
- | `fan` | Downward fan arrows |
161
- | `join` | V-shaped join |
162
- | `lanes` | Swimlanes |
163
- | `actor` | Lane actor |
164
- | `message` | Lane message |
165
- | `steps` | Steps container |
166
- | `step` | One step |
167
- | `note` | Step note |
168
- | `compare` | Compare cards |
169
- | `item` | Compare item |
170
- | `code` | Code snapshot |
171
- | `pre` | Preformatted text |
172
-
173
-
174
- ## Chart examples
175
-
176
- Play-level chart samples (static eight bars, fusion weight slider) live on [Diagrams · compose](/garden/en/components/compose#ui-compose-chart-active-hours).
177
-
178
- ## Limits
179
-
180
- - Nesting ~10 levels / ~220 nodes.
181
- - Uncompiled prose-only fences report `compose-uncompiled`.
182
- - Play path (`{@body}`, `{#if}`, …) is documented in the repo `docs/compose-dil.md`; static fences render default-state snapshots for control tags.
107
+ 1. Run `npx garden ui check <file>` (and `npx garden check <file>` for real file paths). Preserve original text/resources and inspect diagnostics.
108
+ 2. Parse/render the actual scene; confirm accepted properties survive normalization and meaningful content appears.
109
+ 3. Inspect the complete-theme render: icon rail fixed, heading and **all** paragraphs share the same right edge/left edge, no centered headings or full-width body beneath a detached icon row, dividers outside rows, no unintended cards/arrows, no horizontal overflow.
110
+ 4. Check desktop and narrow screenshots plus geometry/computed styles; exercise choices, relations, file previews, state updates and sandbox behavior when used.
111
+ 5. A hand-authored passing scene proves engine capability, not that an independent model reliably produces it from a short prompt. Report those claims separately.