konpeki 0.3.0 → 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.
Files changed (162) hide show
  1. package/AGENTS.md +21 -28
  2. package/AUTHORING.md +68 -229
  3. package/CONTRIBUTING.md +10 -23
  4. package/README.md +96 -87
  5. package/SETUP.md +50 -114
  6. package/docs/development.md +43 -248
  7. package/docs/workflow.md +6 -108
  8. package/html/README.md +140 -0
  9. package/html/browser.ts +103 -0
  10. package/html/document.ts +38 -0
  11. package/html/floor.ts +34 -0
  12. package/html/index.html +5 -0
  13. package/html/inspect.ts +313 -0
  14. package/html/preview.css +62 -0
  15. package/html/preview.tsx +463 -0
  16. package/html/review-hints.ts +63 -0
  17. package/html/server.ts +99 -0
  18. package/html/source.ts +104 -0
  19. package/html/starter.ts +6 -0
  20. package/html/theme-authoring.md +176 -0
  21. package/html/theme.md +61 -0
  22. package/index.html +9 -9
  23. package/package.json +21 -35
  24. package/plugin.json +1 -1
  25. package/public/og.png +0 -0
  26. package/runtime/browser-B-29TH1a.mjs +595 -0
  27. package/runtime/floor-Cmk7G3pU.mjs +41 -0
  28. package/runtime/konpeki.mjs +90 -1410
  29. package/runtime/server-BAqC_5WD.mjs +2 -0
  30. package/runtime/server-DfRpfcY9.mjs +205 -0
  31. package/runtime/source-B_Ui9tMp.mjs +141 -0
  32. package/runtime/source-CZQq9GUO.mjs +2 -0
  33. package/skills/konpeki/SKILL.md +88 -172
  34. package/skills/konpeki/assets/blank.html +17 -0
  35. package/skills/konpeki/floor.md +76 -0
  36. package/skills/konpeki/references/cover.md +27 -0
  37. package/skills/konpeki/references/long-document.md +40 -0
  38. package/skills/konpeki/references/one-pager.md +27 -0
  39. package/skills/konpeki/references/patterns.md +118 -0
  40. package/skills/konpeki/references/resume.md +28 -0
  41. package/skills/konpeki/references/slides.md +28 -0
  42. package/skills/konpeki/scripts/ensure-runtime.mjs +10 -31
  43. package/skills/konpeki/scripts/prepare-document.mjs +25 -14
  44. package/src/components/PageBoard.tsx +156 -0
  45. package/src/lib/alignment.ts +21 -0
  46. package/src/lib/page-board.ts +25 -0
  47. package/src/lib/review-position.ts +19 -0
  48. package/src/styles/base.css +4 -6
  49. package/src/styles/feedback.css +97 -61
  50. package/src/styles/shell.css +95 -323
  51. package/theme-base.css +90 -0
  52. package/theme.css +56 -0
  53. package/vite.config.ts +2 -5
  54. package/composition/README.md +0 -156
  55. package/composition/compile.ts +0 -227
  56. package/composition/document.ts +0 -600
  57. package/composition/schema.json +0 -3001
  58. package/composition/schema.ts +0 -437
  59. package/composition/theme-tokens.ts +0 -16
  60. package/composition/types.ts +0 -269
  61. package/composition/validate.ts +0 -226
  62. package/composition/vector.ts +0 -143
  63. package/composition/visualizations.ts +0 -319
  64. package/design/README.md +0 -17
  65. package/design/palettes/README.md +0 -14
  66. package/design/palettes/base.ts +0 -14
  67. package/design/palettes/candidates.ts +0 -19
  68. package/design/palettes/index.ts +0 -78
  69. package/design/review/color-theme.md +0 -44
  70. package/design/review/layout.md +0 -16
  71. package/design/review/text.md +0 -18
  72. package/design/review/typography.md +0 -15
  73. package/design/review/visuals.md +0 -31
  74. package/design/semantic-patterns.md +0 -43
  75. package/design/themes/README.md +0 -40
  76. package/design/themes/index.ts +0 -24
  77. package/design/visual-languages/technical-product.md +0 -17
  78. package/design/visual-review.md +0 -88
  79. package/lib/assets.d.ts +0 -8
  80. package/lib/charts.ts +0 -18
  81. package/lib/contrast.ts +0 -16
  82. package/lib/layouts.ts +0 -50
  83. package/lib/slide.tsx +0 -42
  84. package/lib/taste.ts +0 -17
  85. package/lib/text.tsx +0 -89
  86. package/lib/typeface.ts +0 -44
  87. package/scripts/migrate-react-page.ts +0 -120
  88. package/skills/konpeki/assets/blank.json +0 -23
  89. package/slides/README.md +0 -153
  90. package/slides/architecture/PROMPT.md +0 -31
  91. package/slides/architecture/index.tsx +0 -102
  92. package/slides/article-brief/PROMPT.md +0 -35
  93. package/slides/article-brief/index.tsx +0 -71
  94. package/slides/bar-chart/PROMPT.md +0 -39
  95. package/slides/bar-chart/index.tsx +0 -97
  96. package/slides/comparison/PROMPT.md +0 -29
  97. package/slides/comparison/index.tsx +0 -95
  98. package/slides/decision-memo/PROMPT.md +0 -34
  99. package/slides/decision-memo/index.tsx +0 -85
  100. package/slides/delivery-plan/PROMPT.md +0 -45
  101. package/slides/delivery-plan/index.tsx +0 -105
  102. package/slides/experiment/PROMPT.md +0 -44
  103. package/slides/experiment/index.tsx +0 -127
  104. package/slides/incident-workflow/PROMPT.md +0 -57
  105. package/slides/incident-workflow/index.tsx +0 -78
  106. package/slides/introducing-konpeki/PROMPT.md +0 -40
  107. package/slides/introducing-konpeki/README.md +0 -76
  108. package/slides/introducing-konpeki/SOURCE.md +0 -26
  109. package/slides/introducing-konpeki/author.ts +0 -165
  110. package/slides/introducing-konpeki/composition.json +0 -3270
  111. package/slides/line-chart/PROMPT.md +0 -40
  112. package/slides/line-chart/index.tsx +0 -72
  113. package/slides/migration/PROMPT.md +0 -38
  114. package/slides/migration/index.tsx +0 -89
  115. package/slides/og-images/PROMPT.md +0 -21
  116. package/slides/og-images/index.tsx +0 -76
  117. package/slides/product-introduction/PROMPT.md +0 -24
  118. package/slides/product-introduction/index.tsx +0 -105
  119. package/slides/research-brief/PROMPT.md +0 -40
  120. package/slides/research-brief/index.tsx +0 -104
  121. package/slides/results-explanation/PROMPT.md +0 -32
  122. package/slides/results-explanation/index.tsx +0 -96
  123. package/slides/retrospective/PROMPT.md +0 -43
  124. package/slides/retrospective/index.tsx +0 -105
  125. package/slides/sankey/PROMPT.md +0 -11
  126. package/slides/sankey/index.tsx +0 -93
  127. package/slides/teaching/PROMPT.md +0 -45
  128. package/slides/teaching/index.tsx +0 -124
  129. package/slides/vertical-bar-charts/PROMPT.md +0 -13
  130. package/slides/vertical-bar-charts/index.tsx +0 -97
  131. package/src/app/App.tsx +0 -820
  132. package/src/components/BuildOrb.tsx +0 -40
  133. package/src/components/Canvas.tsx +0 -1185
  134. package/src/components/DiagramTypeIcon.tsx +0 -78
  135. package/src/components/InspectorPanel.tsx +0 -773
  136. package/src/components/LeftPanel.tsx +0 -120
  137. package/src/components/PageSizePicker.tsx +0 -30
  138. package/src/components/Presentation.tsx +0 -105
  139. package/src/components/RevisionNotes.tsx +0 -56
  140. package/src/components/RightPanel.tsx +0 -201
  141. package/src/components/VectorOverflowWarning.tsx +0 -46
  142. package/src/components/WorkspaceChrome.tsx +0 -288
  143. package/src/components/ui.tsx +0 -53
  144. package/src/lib/examples/react-page-migration.json +0 -1295
  145. package/src/lib/examples.ts +0 -42
  146. package/src/lib/export-png.ts +0 -104
  147. package/src/lib/file-session.ts +0 -87
  148. package/src/lib/history.ts +0 -53
  149. package/src/lib/model.ts +0 -188
  150. package/src/lib/page-size.ts +0 -24
  151. package/src/lib/presentation.ts +0 -17
  152. package/src/lib/review.ts +0 -26
  153. package/src/lib/storage.ts +0 -71
  154. package/src/lib/theme.ts +0 -25
  155. package/src/lib/use-file-session.ts +0 -227
  156. package/src/main.tsx +0 -29
  157. package/src/styles/canvas.css +0 -299
  158. package/src/styles/chrome.css +0 -384
  159. package/src/styles/component-previews.css +0 -386
  160. package/src/styles/left-panel.css +0 -166
  161. package/src/styles/presentation.css +0 -72
  162. package/src/styles/right-panel.css +0 -1215
@@ -1,384 +0,0 @@
1
- .component-dock {
2
- position: fixed;
3
- z-index: 40;
4
- display: flex;
5
- align-items: center;
6
- background: var(--ui-surface);
7
- border: 1px solid var(--ui-border);
8
- box-shadow: var(--ui-shadow);
9
- }
10
-
11
- .document-island {
12
- position: relative;
13
- z-index: 2;
14
- display: flex;
15
- align-items: center;
16
- flex: none;
17
- width: 100%;
18
- height: var(--panel-header-height);
19
- gap: 10px;
20
- padding: 8px 10px;
21
- border-bottom: 1px solid var(--ui-border);
22
- }
23
-
24
- .left-collapsed .document-island {
25
- border-bottom-color: transparent;
26
- }
27
-
28
- .left-collapsed .document-title,
29
- .left-collapsed .document-title-error {
30
- visibility: hidden;
31
- }
32
-
33
- .document-island img {
34
- flex: none;
35
- width: 25px;
36
- height: 27px;
37
- object-fit: contain;
38
- }
39
-
40
- .document-title {
41
- min-width: 0;
42
- flex: 1;
43
- }
44
-
45
- .document-title input {
46
- height: 40px;
47
- border-color: transparent;
48
- background: transparent;
49
- font-size: 13px;
50
- font-weight: 500;
51
- text-overflow: ellipsis;
52
- }
53
-
54
- .document-title input:hover {
55
- border-color: transparent;
56
- background: var(--ui-hover);
57
- }
58
-
59
- .document-title input:focus {
60
- border-color: var(--ui-control);
61
- background: var(--ui-surface);
62
- }
63
-
64
- .document-title-error {
65
- position: absolute;
66
- top: calc(100% + 6px);
67
- right: 12px;
68
- padding: 5px 8px;
69
- border-radius: 4px;
70
- background: #fff1f1;
71
- color: #8d1717;
72
- font-size: 11px;
73
- box-shadow: 0 2px 8px #00000012;
74
- }
75
-
76
- .file-status {
77
- flex: none;
78
- display: inline-flex;
79
- align-items: center;
80
- gap: 5px;
81
- color: var(--ui-muted);
82
- font-size: 10px;
83
- }
84
-
85
- .file-status::before {
86
- width: 6px;
87
- height: 6px;
88
- border-radius: 50%;
89
- background: #3f875b;
90
- content: "";
91
- }
92
-
93
- .file-status.loading::before,
94
- .file-status.saving::before {
95
- background: #a27616;
96
- }
97
-
98
- .file-status.conflict,
99
- .file-status.error {
100
- color: #8d1717;
101
- }
102
-
103
- .file-status.conflict::before,
104
- .file-status.error::before {
105
- background: #b13d3d;
106
- }
107
-
108
- .action-island {
109
- position: relative;
110
- display: flex;
111
- align-items: center;
112
- flex: none;
113
- width: calc(var(--panel-width) - 2px);
114
- height: 54px;
115
- gap: 4px;
116
- padding: 7px;
117
- border-top: 1px solid var(--ui-border);
118
- }
119
-
120
- .action-island button {
121
- display: inline-flex;
122
- align-items: center;
123
- gap: 6px;
124
- height: 40px;
125
- padding: 0 12px;
126
- border-radius: 7px;
127
- border-color: transparent;
128
- background: transparent;
129
- font-size: 13px;
130
- font-weight: 500;
131
- }
132
-
133
- .action-island button:hover:not(:disabled) {
134
- border-color: transparent;
135
- background: var(--ui-hover);
136
- }
137
-
138
- .action-island button.icon-only {
139
- flex: none;
140
- width: 40px;
141
- padding: 0;
142
- justify-content: center;
143
- }
144
-
145
- .browser-menu {
146
- position: relative;
147
- min-width: 0;
148
- }
149
-
150
- .browser-menu > summary {
151
- display: flex;
152
- align-items: center;
153
- justify-content: center;
154
- height: 40px;
155
- padding: 0 12px;
156
- border-radius: 7px;
157
- cursor: pointer;
158
- font-size: 13px;
159
- font-weight: 500;
160
- list-style: none;
161
- }
162
-
163
- .browser-menu > summary::-webkit-details-marker {
164
- display: none;
165
- }
166
-
167
- .browser-menu > summary:hover,
168
- .browser-menu[open] > summary {
169
- background: var(--ui-hover);
170
- }
171
-
172
- .browser-menu-popover {
173
- position: absolute;
174
- bottom: calc(100% + 14px);
175
- left: -95px;
176
- display: grid;
177
- width: 304px;
178
- gap: 12px;
179
- padding: 16px;
180
- border: 1px solid var(--ui-border);
181
- border-radius: 12px;
182
- background: var(--ui-surface);
183
- box-shadow: var(--ui-shadow);
184
- }
185
-
186
- .browser-menu-popover strong {
187
- font-size: 13px;
188
- font-weight: 600;
189
- }
190
-
191
- .browser-menu-popover p {
192
- color: var(--ui-muted);
193
- font-size: 12px;
194
- line-height: 1.5;
195
- }
196
-
197
- .browser-menu-actions {
198
- display: grid;
199
- grid-template-columns: 1fr 1fr;
200
- gap: 6px;
201
- }
202
-
203
- .action-island .browser-menu-actions button {
204
- justify-content: flex-start;
205
- min-width: 0;
206
- border-color: var(--ui-border);
207
- background: var(--ui-surface);
208
- font-size: 12px;
209
- }
210
-
211
- .browser-agent-handoff {
212
- padding-top: 10px;
213
- border-top: 1px solid var(--ui-border);
214
- }
215
-
216
- .browser-agent-handoff a {
217
- color: var(--accent);
218
- font-weight: 500;
219
- }
220
-
221
- .action-island button.primary {
222
- background: white;
223
- color: var(--ui-text);
224
- }
225
-
226
- .action-island button.primary:hover:not(:disabled) {
227
- background: var(--ui-hover);
228
- }
229
-
230
- .action-island button.primary:disabled {
231
- background: var(--ui-hover);
232
- color: var(--ui-muted);
233
- }
234
-
235
- .action-island .build-button {
236
- position: relative;
237
- overflow: hidden;
238
- justify-content: center;
239
- flex: none;
240
- padding-inline: 9px;
241
- white-space: nowrap;
242
- }
243
-
244
- .build-button .build-label {
245
- min-width: 11ch;
246
- text-align: left;
247
- }
248
-
249
- .action-island button.build-button.building {
250
- background: white;
251
- color: #2449aa;
252
- opacity: 1;
253
- cursor: wait;
254
- }
255
-
256
- .build-button.building .build-label {
257
- background: linear-gradient(110deg, #155e75 10%, #2449aa 30%, #a82d62 45%, #87bdeb 50%, #7535a5 55%, #155e75 80%);
258
- background-size: 250% 100%;
259
- background-clip: text;
260
- color: transparent;
261
- animation: build-colors 3s linear infinite;
262
- }
263
-
264
- .build-orb circle {
265
- fill: currentColor;
266
- stroke: none;
267
- transform: translate(var(--x), var(--y));
268
- }
269
- .build-orb.active circle {
270
- animation: orb-shape 8s ease-in-out infinite;
271
- }
272
- .build-orb.nebula {
273
- width: 100%;
274
- height: 100%;
275
- color: #4265ad;
276
- transform: rotate(-18deg);
277
- }
278
- .build-orb.nebula circle {
279
- animation: orb-sphere 12s ease-in-out infinite;
280
- animation-delay: var(--phase);
281
- }
282
- .build-orb.nebula circle:nth-child(3n) { fill: #9772bb; }
283
- .build-orb.nebula circle:nth-child(3n + 1) { fill: #198faa; }
284
-
285
- @keyframes orb-shape {
286
- 0%, 10%, 100% { transform: translate(var(--x), var(--y)); }
287
- 25%, 35% { transform: translate(var(--tx), var(--ty)); }
288
- 50%, 60% { transform: translate(var(--sx), var(--sy)); }
289
- 75%, 85% { transform: translate(var(--hx), var(--hy)); }
290
- }
291
- @keyframes orb-sphere {
292
- 0%, 100% { transform: translate(var(--radius), var(--y)); opacity: 0.5; }
293
- 25% { transform: translate(0, var(--y)); opacity: 1; }
294
- 50% { transform: translate(calc(-1 * var(--radius)), var(--y)); opacity: 0.5; }
295
- 75% { transform: translate(0, var(--y)); opacity: 0.15; }
296
- }
297
- @keyframes orb-turn {
298
- to { transform: rotate(360deg); }
299
- }
300
-
301
- @keyframes build-colors {
302
- to { background-position: 150% 0; }
303
- }
304
-
305
- @media (prefers-reduced-motion: reduce) {
306
- .build-button.building .build-label,
307
- .build-orb.active circle,
308
- .build-orb.nebula circle,
309
- .build-orb.nebula,
310
- .build-nebula::before {
311
- animation: none;
312
- }
313
- }
314
-
315
- .action-island button svg {
316
- flex: none;
317
- width: 18px;
318
- height: 18px;
319
- fill: none;
320
- stroke: currentColor;
321
- stroke-linecap: round;
322
- stroke-linejoin: round;
323
- stroke-width: 1.7;
324
- }
325
-
326
- .action-island .build-button .build-orb {
327
- width: 20px;
328
- height: 20px;
329
- }
330
-
331
- .component-dock {
332
- bottom: 20px;
333
- left: 50%;
334
- min-height: 68px;
335
- gap: 2px;
336
- padding: 6px;
337
- border-radius: 16px;
338
- transform: translateX(-50%);
339
- }
340
-
341
- .component-dock button {
342
- display: grid;
343
- place-items: center;
344
- min-width: 62px;
345
- height: 54px;
346
- gap: 1px;
347
- padding: 4px 7px;
348
- border-color: transparent;
349
- border-radius: 10px;
350
- color: var(--ui-text);
351
- font-size: 11px;
352
- }
353
-
354
- .component-dock button.active {
355
- background: var(--ui-selected);
356
- color: #006aa1;
357
- }
358
-
359
- .dock-glyph {
360
- width: 22px;
361
- height: 22px;
362
- fill: none;
363
- stroke: currentColor;
364
- stroke-linecap: round;
365
- stroke-linejoin: round;
366
- stroke-width: 1.6;
367
- }
368
-
369
- @media (max-width: 1120px) {
370
- .component-dock button {
371
- min-width: 55px;
372
- }
373
- }
374
- @media (max-width: 600px) {
375
- .component-dock {
376
- width: calc(100% - 24px);
377
- }
378
- .component-dock button {
379
- flex: 1;
380
- min-width: 0;
381
- padding-inline: 3px;
382
- font-size: 10px;
383
- }
384
- }