@clhaas/palette-kit 0.1.7 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/.codex/skills/color-pipeline-implementer/SKILL.md +23 -0
  2. package/.codex/skills/commit-message-crafter/SKILL.md +63 -0
  3. package/.codex/skills/commit-message-crafter/references/benchmarks.md +20 -0
  4. package/.codex/skills/contrast-solver-helper/SKILL.md +20 -0
  5. package/.codex/skills/exporters-builder/SKILL.md +20 -0
  6. package/.codex/skills/markdownlint-writer/SKILL.md +32 -0
  7. package/.codex/skills/phase-implementation-runbook/SKILL.md +92 -0
  8. package/.codex/skills/type-contract-auditor/SKILL.md +21 -0
  9. package/.github/skills/review-guide/SKILL.md +23 -0
  10. package/.github/skills/review-guide/references/review-guide-v0.3.md +629 -0
  11. package/.markdownlint.json +4 -0
  12. package/AGENTS.md +16 -0
  13. package/CHANGELOG.md +34 -0
  14. package/README.md +79 -169
  15. package/biome.json +43 -0
  16. package/dist/cli/args.d.ts +12 -0
  17. package/dist/cli/args.js +56 -0
  18. package/dist/cli/args.test.js +22 -0
  19. package/dist/cli/codegen/__snapshots__/tokens.test.js.snap +87 -0
  20. package/dist/cli/codegen/tokens.d.ts +12 -0
  21. package/dist/cli/codegen/tokens.js +139 -0
  22. package/dist/cli/codegen/tokens.test.d.ts +1 -0
  23. package/dist/cli/codegen/tokens.test.js +51 -0
  24. package/dist/cli/config.d.ts +40 -0
  25. package/dist/cli/config.js +34 -0
  26. package/dist/cli/validate.d.ts +2 -0
  27. package/dist/cli/validate.js +33 -0
  28. package/dist/cli/validate.test.d.ts +1 -0
  29. package/dist/cli/validate.test.js +40 -0
  30. package/dist/cli.js +138 -140
  31. package/dist/contrast/apca.d.ts +2 -2
  32. package/dist/contrast/apca.js +14 -4
  33. package/dist/contrast/apca.test.d.ts +1 -0
  34. package/dist/contrast/apca.test.js +16 -0
  35. package/dist/contrast/index.d.ts +4 -0
  36. package/dist/contrast/index.js +4 -0
  37. package/dist/contrast/scoring.d.ts +4 -0
  38. package/dist/contrast/scoring.js +31 -0
  39. package/dist/contrast/scoring.test.d.ts +1 -0
  40. package/dist/contrast/scoring.test.js +148 -0
  41. package/dist/contrast/solver.d.ts +13 -0
  42. package/dist/contrast/solver.js +170 -0
  43. package/dist/contrast/solver.test.d.ts +1 -0
  44. package/dist/contrast/solver.test.js +75 -0
  45. package/dist/contrast/types.d.ts +17 -0
  46. package/dist/contrast/types.js +1 -0
  47. package/dist/contrast/utils.d.ts +4 -0
  48. package/dist/contrast/utils.js +18 -0
  49. package/dist/contrast/wcag2.d.ts +3 -0
  50. package/dist/contrast/wcag2.js +19 -0
  51. package/dist/contrast/wcag2.test.d.ts +1 -0
  52. package/dist/contrast/wcag2.test.js +17 -0
  53. package/dist/core/createTheme.d.ts +35 -0
  54. package/dist/core/createTheme.js +24 -0
  55. package/dist/core/dx-helpers.test.d.ts +1 -0
  56. package/dist/core/dx-helpers.test.js +61 -0
  57. package/dist/core/index.d.ts +2 -0
  58. package/dist/core/index.js +2 -0
  59. package/dist/core/onSolid.test.d.ts +1 -0
  60. package/dist/core/onSolid.test.js +118 -0
  61. package/dist/core/qa.v1.test.d.ts +1 -0
  62. package/dist/core/qa.v1.test.js +112 -0
  63. package/dist/core/resolve.d.ts +3 -0
  64. package/dist/core/resolve.js +8 -0
  65. package/dist/core/resolve.test.d.ts +1 -0
  66. package/dist/core/resolve.test.js +89 -0
  67. package/dist/core/resolveMany.d.ts +8 -0
  68. package/dist/core/resolveMany.js +17 -0
  69. package/dist/core/tokenRegistry.d.ts +23 -0
  70. package/dist/core/tokenRegistry.js +83 -0
  71. package/dist/core/tokenRegistry.test.d.ts +1 -0
  72. package/dist/core/tokenRegistry.test.js +133 -0
  73. package/dist/engine/applyOperators.d.ts +3 -0
  74. package/dist/engine/applyOperators.js +23 -0
  75. package/dist/engine/context.d.ts +4 -0
  76. package/dist/engine/context.js +1 -0
  77. package/dist/engine/gamut.d.ts +13 -0
  78. package/dist/engine/gamut.js +101 -0
  79. package/dist/engine/gamut.test.d.ts +1 -0
  80. package/dist/engine/gamut.test.js +23 -0
  81. package/dist/engine/generateScale.d.ts +15 -0
  82. package/dist/engine/generateScale.js +29 -0
  83. package/dist/engine/generateScale.test.d.ts +1 -0
  84. package/dist/engine/generateScale.test.js +32 -0
  85. package/dist/engine/index.d.ts +8 -0
  86. package/dist/engine/index.js +4 -0
  87. package/dist/engine/normalize.d.ts +43 -0
  88. package/dist/engine/normalize.js +403 -0
  89. package/dist/engine/normalize.test.d.ts +1 -0
  90. package/dist/engine/normalize.test.js +136 -0
  91. package/dist/engine/onSolid.d.ts +3 -0
  92. package/dist/engine/onSolid.js +110 -0
  93. package/dist/engine/resolveBaseColor.d.ts +25 -0
  94. package/dist/engine/resolveBaseColor.js +127 -0
  95. package/dist/engine/resolveBaseColor.test.d.ts +1 -0
  96. package/dist/engine/resolveBaseColor.test.js +97 -0
  97. package/dist/export/__snapshots__/exportTheme.test.js.snap +74 -0
  98. package/dist/export/exportTheme.d.ts +47 -0
  99. package/dist/export/exportTheme.js +170 -0
  100. package/dist/export/exportTheme.test.d.ts +1 -0
  101. package/dist/export/exportTheme.test.js +118 -0
  102. package/dist/export/index.d.ts +1 -0
  103. package/dist/export/index.js +1 -0
  104. package/dist/export/serializeColor.d.ts +1 -0
  105. package/dist/export/serializeColor.js +1 -0
  106. package/dist/export/serializeColor.test.d.ts +1 -0
  107. package/dist/export/serializeColor.test.js +54 -0
  108. package/dist/export.d.ts +1 -0
  109. package/dist/export.js +1 -0
  110. package/dist/index.d.ts +3 -20
  111. package/dist/index.js +2 -17
  112. package/dist/operators/emphasis.d.ts +3 -0
  113. package/dist/operators/emphasis.js +113 -0
  114. package/dist/operators/emphasis.test.d.ts +1 -0
  115. package/dist/operators/emphasis.test.js +69 -0
  116. package/dist/operators/index.d.ts +3 -0
  117. package/dist/operators/index.js +2 -0
  118. package/dist/operators/state.d.ts +3 -0
  119. package/dist/operators/state.js +102 -0
  120. package/dist/operators/state.test.d.ts +1 -0
  121. package/dist/operators/state.test.js +48 -0
  122. package/dist/operators/types.d.ts +13 -0
  123. package/dist/operators/types.js +1 -0
  124. package/dist/operators/utils.d.ts +16 -0
  125. package/dist/operators/utils.js +23 -0
  126. package/dist/presets/curves.d.ts +28 -0
  127. package/dist/presets/curves.js +145 -0
  128. package/dist/presets/index.d.ts +2 -0
  129. package/dist/presets/index.js +1 -0
  130. package/dist/presets/tokens/index.d.ts +3 -0
  131. package/dist/presets/tokens/index.js +3 -0
  132. package/dist/presets/tokens/minimal-ui.d.ts +6 -0
  133. package/dist/presets/tokens/minimal-ui.js +53 -0
  134. package/dist/presets/tokens/modern-ui.d.ts +5 -0
  135. package/dist/presets/tokens/modern-ui.js +83 -0
  136. package/dist/presets/tokens/presets.test.d.ts +1 -0
  137. package/dist/presets/tokens/presets.test.js +31 -0
  138. package/dist/presets/tokens/radixLike-ui.d.ts +6 -0
  139. package/dist/presets/tokens/radixLike-ui.js +77 -0
  140. package/dist/serialize/index.d.ts +1 -0
  141. package/dist/serialize/index.js +1 -0
  142. package/dist/serialize/normalizeOutput.d.ts +6 -0
  143. package/dist/serialize/normalizeOutput.js +45 -0
  144. package/dist/serialize/serializeColor.d.ts +21 -0
  145. package/dist/serialize/serializeColor.js +178 -0
  146. package/dist/serialize/serializeResolved.test.d.ts +1 -0
  147. package/dist/serialize/serializeResolved.test.js +45 -0
  148. package/dist/serialize.d.ts +1 -0
  149. package/dist/serialize.js +1 -0
  150. package/dist/types/index.d.ts +187 -0
  151. package/dist/types/index.js +1 -0
  152. package/dist/utils/clamp.d.ts +1 -0
  153. package/dist/utils/clamp.js +1 -0
  154. package/dist/utils/index.d.ts +1 -0
  155. package/dist/utils/index.js +1 -0
  156. package/dist/utils/lerp.d.ts +1 -0
  157. package/dist/utils/lerp.js +1 -0
  158. package/dist/utils/parseColor.d.ts +6 -0
  159. package/dist/utils/parseColor.js +67 -0
  160. package/dist/utils/parseColor.test.d.ts +1 -0
  161. package/dist/utils/parseColor.test.js +51 -0
  162. package/dist/utils/smoothstep.d.ts +1 -0
  163. package/dist/utils/smoothstep.js +5 -0
  164. package/package.json +19 -12
  165. package/planning/phase-10-review.md +550 -0
  166. package/planning/phase-7-review.md +411 -0
  167. package/planning/phase-8-review.md +669 -0
  168. package/planning/phase-9-review.md +564 -0
  169. package/planning/roadmap-v0.3.md +284 -0
  170. package/planning/spec-serializer-v0.3.md +324 -0
  171. package/planning/spec-v0.3.md +305 -0
  172. package/src/cli/args.test.ts +28 -0
  173. package/src/cli/args.ts +66 -0
  174. package/src/cli/codegen/__snapshots__/tokens.test.ts.snap +87 -0
  175. package/src/cli/codegen/tokens.test.ts +61 -0
  176. package/src/cli/codegen/tokens.ts +191 -0
  177. package/src/cli/config.ts +71 -0
  178. package/src/cli/validate.test.ts +49 -0
  179. package/src/cli/validate.ts +38 -0
  180. package/src/cli.ts +183 -0
  181. package/src/contrast/apca.test.ts +20 -0
  182. package/src/contrast/apca.ts +26 -0
  183. package/src/contrast/index.ts +4 -0
  184. package/src/contrast/scoring.test.ts +188 -0
  185. package/src/contrast/scoring.ts +48 -0
  186. package/src/contrast/solver.test.ts +147 -0
  187. package/src/contrast/solver.ts +235 -0
  188. package/src/contrast/types.ts +20 -0
  189. package/src/contrast/utils.ts +28 -0
  190. package/src/contrast/wcag2.test.ts +21 -0
  191. package/src/contrast/wcag2.ts +24 -0
  192. package/src/core/createTheme.ts +78 -0
  193. package/src/core/dx-helpers.test.ts +82 -0
  194. package/src/core/index.ts +7 -0
  195. package/src/core/onSolid.test.ts +146 -0
  196. package/src/core/qa.v1.test.ts +149 -0
  197. package/src/core/resolve.test.ts +99 -0
  198. package/src/core/resolve.ts +11 -0
  199. package/src/core/resolveMany.ts +22 -0
  200. package/src/core/tokenRegistry.test.ts +153 -0
  201. package/src/core/tokenRegistry.ts +114 -0
  202. package/src/engine/applyOperators.ts +32 -0
  203. package/src/engine/context.ts +8 -0
  204. package/src/engine/gamut.test.ts +30 -0
  205. package/src/engine/gamut.ts +144 -0
  206. package/src/engine/generateScale.test.ts +46 -0
  207. package/src/engine/generateScale.ts +48 -0
  208. package/src/engine/index.ts +8 -0
  209. package/src/engine/normalize.test.ts +222 -0
  210. package/src/engine/normalize.ts +550 -0
  211. package/src/engine/onSolid.ts +178 -0
  212. package/src/engine/resolveBaseColor.test.ts +117 -0
  213. package/src/engine/resolveBaseColor.ts +203 -0
  214. package/src/export/__snapshots__/exportTheme.test.ts.snap +74 -0
  215. package/src/export/exportTheme.test.ts +144 -0
  216. package/src/export/exportTheme.ts +251 -0
  217. package/src/export/index.ts +1 -0
  218. package/src/export/serializeColor.test.ts +73 -0
  219. package/src/export/serializeColor.ts +1 -0
  220. package/src/export.ts +1 -0
  221. package/src/index.ts +3 -0
  222. package/src/operators/emphasis.test.ts +85 -0
  223. package/src/operators/emphasis.ts +132 -0
  224. package/src/operators/index.ts +3 -0
  225. package/src/operators/state.test.ts +66 -0
  226. package/src/operators/state.ts +122 -0
  227. package/src/operators/types.ts +14 -0
  228. package/src/operators/utils.ts +44 -0
  229. package/src/presets/curves.ts +168 -0
  230. package/src/presets/index.ts +2 -0
  231. package/src/presets/tokens/index.ts +3 -0
  232. package/src/presets/tokens/minimal-ui.ts +55 -0
  233. package/src/presets/tokens/modern-ui.ts +85 -0
  234. package/src/presets/tokens/presets.test.ts +46 -0
  235. package/src/presets/tokens/radixLike-ui.ts +79 -0
  236. package/src/serialize/index.ts +1 -0
  237. package/src/serialize/normalizeOutput.ts +63 -0
  238. package/src/serialize/serializeColor.ts +260 -0
  239. package/src/serialize/serializeResolved.test.ts +57 -0
  240. package/src/serialize.ts +1 -0
  241. package/src/types/index.ts +207 -0
  242. package/src/utils/clamp.ts +2 -0
  243. package/src/utils/index.ts +1 -0
  244. package/src/utils/lerp.ts +1 -0
  245. package/src/utils/parseColor.test.ts +66 -0
  246. package/src/utils/parseColor.ts +87 -0
  247. package/src/utils/smoothstep.ts +6 -0
  248. package/tsconfig.build.json +11 -0
  249. package/tsconfig.json +15 -0
  250. package/dist/alpha/generateAlphaScale.d.ts +0 -5
  251. package/dist/alpha/generateAlphaScale.js +0 -34
  252. package/dist/contrast/onSolid.d.ts +0 -6
  253. package/dist/contrast/onSolid.js +0 -28
  254. package/dist/contrast/solveText.d.ts +0 -2
  255. package/dist/contrast/solveText.js +0 -31
  256. package/dist/createTheme.d.ts +0 -38
  257. package/dist/createTheme.js +0 -137
  258. package/dist/data/radixSeeds.d.ts +0 -3
  259. package/dist/data/radixSeeds.js +0 -34
  260. package/dist/diagnostics/analyzeScale.d.ts +0 -2
  261. package/dist/diagnostics/analyzeScale.js +0 -7
  262. package/dist/diagnostics/analyzeTheme.d.ts +0 -2
  263. package/dist/diagnostics/analyzeTheme.js +0 -35
  264. package/dist/diagnostics/warnings.d.ts +0 -2
  265. package/dist/diagnostics/warnings.js +0 -20
  266. package/dist/engine/curves.d.ts +0 -9
  267. package/dist/engine/curves.js +0 -48
  268. package/dist/engine/oklch.d.ts +0 -8
  269. package/dist/engine/oklch.js +0 -40
  270. package/dist/engine/templates.d.ts +0 -14
  271. package/dist/engine/templates.js +0 -45
  272. package/dist/exporters/selectColorMode.d.ts +0 -2
  273. package/dist/exporters/selectColorMode.js +0 -19
  274. package/dist/exporters/toCssVars.d.ts +0 -13
  275. package/dist/exporters/toCssVars.js +0 -108
  276. package/dist/exporters/toJson.d.ts +0 -3
  277. package/dist/exporters/toJson.js +0 -25
  278. package/dist/exporters/toReactNative.d.ts +0 -54
  279. package/dist/exporters/toReactNative.js +0 -33
  280. package/dist/exporters/toTailwind.d.ts +0 -17
  281. package/dist/exporters/toTailwind.js +0 -111
  282. package/dist/exporters/toTs.d.ts +0 -3
  283. package/dist/exporters/toTs.js +0 -43
  284. package/dist/generateScale.d.ts +0 -48
  285. package/dist/generateScale.js +0 -274
  286. package/dist/overlays/generateOverlayScale.d.ts +0 -2
  287. package/dist/overlays/generateOverlayScale.js +0 -34
  288. package/dist/text/generateTextScale.d.ts +0 -8
  289. package/dist/text/generateTextScale.js +0 -18
  290. package/dist/tokens/presetRadixLikeUi.d.ts +0 -5
  291. package/dist/tokens/presetRadixLikeUi.js +0 -55
  292. package/dist/types.d.ts +0 -69
  293. /package/dist/{types.js → cli/args.test.d.ts} +0 -0
@@ -0,0 +1,629 @@
1
+ <!-- markdownlint-disable MD024 -->
2
+
3
+ # Palette Kit v0.3 — Guia de Revisao para Copilot
4
+
5
+ > Skill de revisao para validar a implementacao incremental da v0.3.
6
+ > Este documento serve como checklist tecnico para code reviews automatizadas ou assistidas.
7
+
8
+ ## Como usar este guia
9
+
10
+ - Use este documento como referencia durante revisoes de PR/commits
11
+ - Cada fase possui criterios especificos que devem ser validados
12
+ - Todos os criterios gerais aplicam-se a todas as fases
13
+ - Falhas devem gerar feedback acionavel e especifico
14
+
15
+ ---
16
+
17
+ ## Criterios gerais (aplicam-se a todas as fases)
18
+
19
+ ### 1. Contratos e tipos
20
+
21
+ - [ ] Nenhum tipo publico usa `any` ou `unknown` sem justificativa
22
+ - [ ] Tipos exportados tem JSDoc completo
23
+ - [ ] Nao ha circular imports
24
+ - [ ] Imports seguem a hierarquia: `types` -> `utils` -> `core` -> `engine` -> features
25
+ - [ ] Shape de `BaseResolvedColor` permanece estavel
26
+ - [ ] Nenhum breaking change nao documentado
27
+
28
+ ### 2. Qualidade de codigo
29
+
30
+ - [ ] Build passa sem erros nem warnings
31
+ - [ ] Testes existem para novos comportamentos publicos
32
+ - [ ] Nenhum TODO ou FIXME em codigo production
33
+ - [ ] Funcoes complexas tem comentarios explicativos
34
+ - [ ] Codigo segue o style do Biome configurado
35
+
36
+ ### 3. DX (Developer Experience)
37
+
38
+ - [ ] APIs publicas tem JSDoc com:
39
+
40
+ - Descricao clara do proposito
41
+ - Exemplos de uso
42
+ - Parametros documentados
43
+ - Trade-offs quando relevantes
44
+ - [ ] Erros possuem mensagens claras e acionaveis
45
+ - [ ] Nenhum comportamento "magico" nao documentado
46
+ - [ ] Autocomplete funcional (validar com TypeScript language server)
47
+
48
+ ### 4. Principios da v0.3
49
+
50
+ - [ ] Runtime-first: core nao depende de tooling
51
+ - [ ] Serializer nao altera intencao visual
52
+ - [ ] Resolver nao retorna strings diretamente
53
+ - [ ] Nenhuma decisao visual oculta do desenvolvedor
54
+ - [ ] Determinismo: mesma entrada + opcoes = mesma saida
55
+
56
+ ---
57
+
58
+ ## Fase 0 — Preparacao
59
+
60
+ ### Checklist especifico
61
+
62
+ - [ ] Branch `v0.3` criado e isolado
63
+ - [ ] v0.2 congelada com tag
64
+ - [ ] Specs tecnicas criadas em `src/planning/`
65
+ - [ ] Build limpo (sem alteracao funcional)
66
+ - [ ] CI verde
67
+ - [ ] `package.json` exports revisado
68
+
69
+ ### O que NAO deve acontecer
70
+
71
+ - Mudanca de comportamento publico
72
+ - Alteracao de APIs existentes
73
+ - Refactors profundos
74
+
75
+ ---
76
+
77
+ ## Fase 1 — Serializer publico
78
+
79
+ ### Checklist especifico
80
+
81
+ #### Estrutura
82
+
83
+ - [ ] Modulo `src/serialize/` criado
84
+ - [ ] Exports publicos definidos em `src/serialize/index.ts`
85
+ - [ ] Tipos publicos em `src/types/index.ts`
86
+
87
+ #### Tipos
88
+
89
+ - [ ] `ResolvedColor` definido e exportado
90
+ - [ ] `SerializeOptions` definido com defaults claros
91
+ - [ ] Propriedades opcionais claramente marcadas
92
+
93
+ #### Funcoes publicas
94
+
95
+ - [ ] `serializeColor(oklch, options?)` implementado
96
+ - [ ] `serializeResolved(baseResolved, options?)` implementado
97
+ - [ ] `theme.serialize(query, options?)` implementado
98
+
99
+ #### Espacos de cor
100
+
101
+ - [ ] OKLCH: formato `oklch(L% C H / A)` correto
102
+ - [ ] sRGB: suporte a hex, rgb(), rgba()
103
+ - [ ] Display-P3: formato `color(display-p3 r g b / a)` correto
104
+ - [ ] Conversoes preservam intencao perceptual
105
+
106
+ #### Gamut mapping
107
+
108
+ - [ ] Estrategia `clip` implementada
109
+ - [ ] Estrategia `compressChroma` implementada
110
+ - [ ] Estrategia `preferP3ThenCompress` (default) implementada
111
+ - [ ] Warnings claros quando clipping ocorre
112
+
113
+ #### Precision
114
+
115
+ - [ ] Arredondamento so no output final
116
+ - [ ] Defaults definidos: `{ l: 1, c: 3, h: 1, alpha: 2 }`
117
+ - [ ] Configuravel por canal
118
+ - [ ] Sem drift cumulativo
119
+
120
+ #### Strict mode
121
+
122
+ - [ ] `strict: false` (default): best-effort com warnings
123
+ - [ ] `strict: true`: erros claros e acionaveis
124
+ - [ ] Mensagens sem jargao matematico
125
+ - [ ] Erros incluem contexto e sugestoes
126
+
127
+ #### Metadata
128
+
129
+ - [ ] `includeMeta` opcional e false por default
130
+ - [ ] Meta contem: `spaceUsed`, `gamutMapping`, flags de transformacao
131
+ - [ ] Meta nunca influencia `value`
132
+
133
+ #### Testes
134
+
135
+ - [ ] Testes unitarios por espaco de cor
136
+ - [ ] Testes de gamut mapping
137
+ - [ ] Snapshots de serializacoes completas
138
+ - [ ] Testes de precision edge cases
139
+ - [ ] Testes de strict mode (erros + warnings)
140
+
141
+ #### Documentacao
142
+
143
+ - [ ] JSDoc explica trade-offs entre espacos
144
+ - [ ] Exemplos de uso para cada API
145
+ - [ ] Documentacao de gamut mapping
146
+ - [ ] Guia de quando usar cada espaco
147
+
148
+ ### O que NAO deve acontecer
149
+
150
+ - Resolver cores dentro do serializer
151
+ - Decidir contraste
152
+ - Alterar L/C/H sem pedido explicito
153
+ - Comportamento implicito nao documentado
154
+ - Serializer acoplado ao core
155
+
156
+ ---
157
+
158
+ ## Fase 2 — Helpers DX no runtime
159
+
160
+ ### Checklist especifico
161
+
162
+ #### APIs implementadas
163
+
164
+ - [ ] `resolveMany(queries[])` funcional
165
+ - [ ] `theme.withContext(context)` retorna tema bound
166
+ - [ ] `theme.colorCss(...)` wrapper conveniente
167
+ - [ ] `theme.onSolidCss(...)` wrapper conveniente
168
+
169
+ #### Comportamento
170
+
171
+ - [ ] Helpers nao escondem o core
172
+ - [ ] Typings inferem corretamente
173
+ - [ ] Performance nao degradada
174
+ - [ ] Helpers sao opcionais (core funciona sem eles)
175
+
176
+ #### Testes
177
+
178
+ - [ ] `resolveMany` com arrays vazios/grandes
179
+ - [ ] Tema bound mantem estado correto
180
+ - [ ] Helpers CSS retornam strings validas
181
+
182
+ #### Documentacao
183
+
184
+ - [ ] JSDoc focado em casos de uso
185
+ - [ ] Exemplos praticos
186
+ - [ ] Relacao clara com APIs core
187
+
188
+ ### O que NAO deve acontecer
189
+
190
+ - Duplicacao de logica do core
191
+ - Comportamento diferente do core
192
+ - Magia ou inferencia excessiva
193
+
194
+ ---
195
+
196
+ ## Fase 3 — Token Registry
197
+
198
+ ### Checklist especifico
199
+
200
+ #### Estrutura
201
+
202
+ - [ ] `TokenDefinition` interface definida
203
+ - [ ] `TokenRegistry` estrutura definida
204
+ - [ ] Validacao de queries implementada
205
+
206
+ #### Modelo declarativo
207
+
208
+ - [ ] Tokens nao carregam valores de cor
209
+ - [ ] Tokens apenas descrevem queries
210
+ - [ ] Registry independente do runtime
211
+ - [ ] Resolucao sempre via `theme.resolve`
212
+
213
+ #### Campos obrigatorios
214
+
215
+ - [ ] `name`: string unica
216
+ - [ ] `query`: ColorQuery valido
217
+ - [ ] `description`: string informativa
218
+ - [ ] `category`: agrupamento logico
219
+
220
+ #### Validacao
221
+
222
+ - [ ] Queries validadas na criacao
223
+ - [ ] Nomes unicos enforcados
224
+ - [ ] Categorias consistentes
225
+ - [ ] Erros claros em caso de duplicacao
226
+
227
+ #### Testes
228
+
229
+ - [ ] Registry com tokens validos
230
+ - [ ] Registry rejeita tokens invalidos
231
+ - [ ] Resolucao atraves do registry
232
+ - [ ] Validacao de queries
233
+
234
+ ### O que NAO deve acontecer
235
+
236
+ - Tokens com valores hardcoded
237
+ - Registry acoplado a exporters
238
+ - Duplicacao de logica de resolucao
239
+ - Estados hardcoded (sao operadores)
240
+
241
+ ---
242
+
243
+ ## Fase 4 — Presets oficiais
244
+
245
+ ### Checklist especifico
246
+
247
+ #### Presets implementados
248
+
249
+ - [ ] `minimal-ui` completo
250
+ - [ ] `radixLike-ui` completo
251
+ - [ ] `modern-ui` completo
252
+
253
+ #### Cada preset deve ter
254
+
255
+ - [ ] Tokens base documentados
256
+ - [ ] Categorias claras
257
+ - [ ] Estados suportados definidos
258
+ - [ ] Intencao semantica explicada
259
+ - [ ] Exemplos de uso
260
+
261
+ #### Coerencia
262
+
263
+ - [ ] Nomenclatura consistente entre presets
264
+ - [ ] Categorias alinhadas
265
+ - [ ] Documentacao padronizada
266
+ - [ ] Queries validos testados
267
+
268
+ #### Testes
269
+
270
+ - [ ] Cada preset exportavel
271
+ - [ ] Cada preset usavel em runtime
272
+ - [ ] Tokens resolvem corretamente
273
+ - [ ] Snapshots de exports
274
+
275
+ ### O que NAO deve acontecer
276
+
277
+ - Tokens conflitantes
278
+ - Nomenclatura inconsistente
279
+ - Presets acoplados ao CLI
280
+ - Documentacao incompleta
281
+
282
+ ---
283
+
284
+ ## Fase 5 — Exporters publicos
285
+
286
+ ### Checklist especifico
287
+
288
+ #### APIs
289
+
290
+ - [ ] `exportThemeCss(theme, tokenMap, options)` implementado
291
+ - [ ] `exportThemeJson(theme, tokenMap, options)` implementado
292
+
293
+ #### CSS output
294
+
295
+ - [ ] CSS variables com nomenclatura clara
296
+ - [ ] Fallbacks sRGB
297
+ - [ ] Override progressivo via `@supports`
298
+ - [ ] Ordem deterministica
299
+
300
+ #### JSON output
301
+
302
+ - [ ] Estrutura estavel
303
+ - [ ] Separacao por contexto (light/dark)
304
+ - [ ] Metadata opcional
305
+ - [ ] Schema documentado
306
+
307
+ #### Determinismo
308
+
309
+ - [ ] Mesma entrada = mesma saida
310
+ - [ ] Propriedades ordenadas
311
+ - [ ] Formatting consistente
312
+ - [ ] Reproduzivel em CI
313
+
314
+ #### Testes
315
+
316
+ - [ ] Snapshots de CSS
317
+ - [ ] Snapshots de JSON
318
+ - [ ] Export com diferentes opcoes
319
+ - [ ] Export de presets
320
+
321
+ #### Documentacao
322
+
323
+ - [ ] Opcoes de export documentadas
324
+ - [ ] Exemplos de uso
325
+ - [ ] Estrutura do output explicada
326
+
327
+ ### O que NAO deve acontecer
328
+
329
+ - Output nao deterministico
330
+ - Dependencia do CLI
331
+ - Logica de resolucao duplicada
332
+ - Formatacao magica
333
+
334
+ ---
335
+
336
+ ## Fase 6 — CLI tooling
337
+
338
+ ### Checklist especifico
339
+
340
+ #### Comandos
341
+
342
+ - [ ] `palette-kit init` implementado
343
+ - [ ] `palette-kit build` implementado
344
+
345
+ #### `init` behavior
346
+
347
+ - [ ] Cria `palette.config.ts` tipado
348
+ - [ ] JSDoc explicativo
349
+ - [ ] Sem comportamento magico
350
+ - [ ] Nao gera tokens automaticamente
351
+
352
+ #### `build` behavior
353
+
354
+ - [ ] Le config corretamente
355
+ - [ ] Integra exporters
356
+ - [ ] Gera em `dist/palette/`
357
+ - [ ] Outputs: `tokens.css`, `tokens.json`, `tokens.ts`, `tokens.d.ts`
358
+
359
+ #### Flags
360
+
361
+ - [ ] Flags documentadas
362
+ - [ ] Nenhuma flag oculta
363
+ - [ ] Validacao de argumentos
364
+ - [ ] Help text util
365
+
366
+ #### Erros
367
+
368
+ - [ ] Mensagens claras
369
+ - [ ] Exit codes corretos
370
+ - [ ] Sugestoes acionaveis
371
+
372
+ #### Testes
373
+
374
+ - [ ] CLI em projeto limpo
375
+ - [ ] CLI com config existente
376
+ - [ ] Build com diferentes configs
377
+ - [ ] Flags validadas
378
+
379
+ ### O que NAO deve acontecer
380
+
381
+ - Comportamento implicito
382
+ - Sobrescrever arquivos sem aviso
383
+ - Flags magicas
384
+ - Defaults ocultos
385
+
386
+ ---
387
+
388
+ ## Fase 7 — Codegen de types
389
+
390
+ ### Checklist especifico
391
+
392
+ #### Outputs
393
+
394
+ - [ ] `tokens.ts` com objeto navegavel
395
+ - [ ] `tokens.d.ts` com types
396
+ - [ ] Unions: `TokenName`, `ColorRole`, etc.
397
+
398
+ #### Autocomplete
399
+
400
+ - [ ] Navegacao por objeto funciona
401
+ - [ ] Unions inferem corretamente
402
+ - [ ] JSDoc por token presente
403
+ - [ ] Compativel com VS Code, WebStorm
404
+
405
+ #### Performance
406
+
407
+ - [ ] Zero custo em runtime
408
+ - [ ] Tree-shaking funcional
409
+ - [ ] Bundle size nao explode
410
+
411
+ #### Integracao
412
+
413
+ - [ ] Gerado por `palette-kit build`
414
+ - [ ] Core continua aceitando `string`
415
+ - [ ] Types sao opcional enhancement
416
+
417
+ #### Testes
418
+
419
+ - [ ] Codegen de preset simples
420
+ - [ ] Codegen de preset complexo
421
+ - [ ] Validacao de types gerados
422
+
423
+ ### O que NAO deve acontecer
424
+
425
+ - Runtime acoplado a types gerados
426
+ - Types obrigatorios para uso
427
+ - Codegen quebra tree-shaking
428
+
429
+ ---
430
+
431
+ ## Fase 8 — Inferencia e validacoes
432
+
433
+ ### Checklist especifico
434
+
435
+ #### Inferencia implementada
436
+
437
+ - [ ] `usage` inferido por prefixo de role
438
+ - [ ] `surface` inferido quando obvio
439
+ - [ ] `variant` inferido se omitido
440
+
441
+ #### Strict mode
442
+
443
+ - [ ] `strict: false`: warnings + fallback
444
+ - [ ] `strict: true`: erros claros
445
+ - [ ] Mensagens didaticas
446
+ - [ ] Sugestoes de correcao
447
+
448
+ #### Validacoes
449
+
450
+ - [ ] Queries invalidos detectados
451
+ - [ ] Conflitos de inferencia apontados
452
+ - [ ] Fallbacks documentados
453
+
454
+ #### Testes
455
+
456
+ - [ ] Inferencia correta em casos comuns
457
+ - [ ] Inferencia falha gracefully
458
+ - [ ] Strict mode valida edge cases
459
+ - [ ] Mensagens de erro testadas
460
+
461
+ ### O que NAO deve acontecer
462
+
463
+ - Inferencia silenciosa incorreta
464
+ - Erros cripticos
465
+ - Strict mode muito permissivo
466
+ - Fallbacks inesperados
467
+
468
+ ---
469
+
470
+ ## Fase 9 — Packaging e exports
471
+
472
+ ### Checklist especifico
473
+
474
+ #### Subpath exports
475
+
476
+ - [ ] "." -> main export
477
+ - [ ] "./serialize" -> serializer
478
+ - [ ] "./export" -> exporters
479
+ - [ ] "./cli" -> CLI (se relevante)
480
+
481
+ #### Compatibilidade
482
+
483
+ - [ ] ESM funcional
484
+ - [ ] CJS funcional (se suportado)
485
+ - [ ] Types exportados corretamente
486
+ - [ ] Tree-shaking validado
487
+
488
+ #### Validacao
489
+
490
+ - [ ] Imports funcionam em projeto real
491
+ - [ ] Bundlers comuns (Vite, Webpack, esbuild) funcionam
492
+ - [ ] Types resolvem em editores
493
+
494
+ #### Documentacao
495
+
496
+ - [ ] README atualizado
497
+ - [ ] Migration guide (se breaking)
498
+ - [ ] Exemplos de import
499
+
500
+ ### O que NAO deve acontecer
501
+
502
+ - Exports ambiguos
503
+ - Breaking no packaging
504
+ - Tree-shaking quebrado
505
+ - Types nao resolvidos
506
+
507
+ ---
508
+
509
+ ## Fase 10 — QA final e release
510
+
511
+ ### Checklist especifico
512
+
513
+ #### Testes
514
+
515
+ - [ ] Todos os testes unitarios passam
516
+ - [ ] Snapshots atualizados e validados
517
+ - [ ] Testes de integracao (se houver)
518
+ - [ ] Performance nao regrediu
519
+
520
+ #### DX validation
521
+
522
+ - [ ] Autocomplete funcional em VS Code
523
+ - [ ] Hover docs aparecem
524
+ - [ ] Go-to-definition funciona
525
+ - [ ] Nenhum erro TypeScript no workspace
526
+
527
+ #### Documentacao
528
+
529
+ - [ ] Changelog atualizado
530
+ - [ ] Migration guide completo (se breaking)
531
+ - [ ] README reflete v0.3
532
+ - [ ] Exemplos funcionam
533
+
534
+ #### Pre-release
535
+
536
+ - [ ] Versao bumped corretamente
537
+ - [ ] Git tags criados
538
+ - [ ] Build CI verde
539
+ - [ ] Dry-run de publish OK
540
+
541
+ #### Release
542
+
543
+ - [ ] Publicado no npm
544
+ - [ ] GitHub release criado
545
+ - [ ] Announcement preparado
546
+
547
+ ### O que NAO deve acontecer
548
+
549
+ - Release com testes falhando
550
+ - Documentacao desatualizada
551
+ - Breaking changes nao documentados
552
+ - Versao errada
553
+
554
+ ---
555
+
556
+ ## Comandos uteis para validacao
557
+
558
+ ```bash
559
+ # Build limpo
560
+ npm run build
561
+
562
+ # Testes
563
+ npm test
564
+ npm run test:watch
565
+
566
+ # Linting
567
+ npm run lint
568
+
569
+ # Type checking
570
+ npm run typecheck
571
+
572
+ # Dry-run publish
573
+ npm pack
574
+ npm publish --dry-run
575
+
576
+ # Validar exports
577
+ node -e "import('palette-kit')"
578
+ node -e "import('palette-kit/serialize')"
579
+ ```
580
+
581
+ ---
582
+
583
+ ## Feedback estruturado em revisoes
584
+
585
+ ### Template de feedback
586
+
587
+ ```markdown
588
+ ## Aprovado / Necessita correcoes / Bloqueado
589
+
590
+ ### Criterios gerais
591
+ - [x] Item OK
592
+ - [ ] Item pendente: [explicacao + sugestao]
593
+
594
+ ### Criterios da fase X
595
+ - [x] Item OK
596
+ - [ ] Item pendente: [explicacao + sugestao]
597
+
598
+ ### Comentarios adicionais
599
+ - Observacao 1
600
+ - Observacao 2
601
+
602
+ ### Proximos passos sugeridos
603
+ 1. Acao 1
604
+ 2. Acao 2
605
+ ```
606
+
607
+ ---
608
+
609
+ ## Referencias
610
+
611
+ - `src/planning/spec-v0.3.md` — Spec geral
612
+ - `src/planning/spec-serializer-v0.3.md` — Spec do serializer
613
+ - `src/planning/roadmap-v0.3.md` — Roadmap de implementacao
614
+ - `AGENTS.md` — Guidance geral
615
+
616
+ ---
617
+
618
+ ## Principios de feedback
619
+
620
+ 1. Acionavel: sempre sugerir correcao ou alternativa
621
+ 2. Especifico: apontar linha/arquivo quando relevante
622
+ 3. Construtivo: explicar o "porque", nao apenas o "o que"
623
+ 4. Priorizado: separar blockers de nice-to-haves
624
+ 5. Consistente: seguir sempre este guia
625
+
626
+ ---
627
+
628
+ Versao do guia: 1.0
629
+ Ultima atualizacao: 18 de janeiro de 2026
@@ -0,0 +1,4 @@
1
+ {
2
+ "MD029": false,
3
+ "MD013": false
4
+ }
package/AGENTS.md ADDED
@@ -0,0 +1,16 @@
1
+ # AGENTS
2
+
3
+ Guidance for agents working in this repo, derived from `docs/spec.md` (phases 0 and 1).
4
+
5
+ ## Phase 0: Structure and dependencies
6
+
7
+ - Keep the folder layout under `src/` aligned with the spec: `core`, `engine`, `contrast`, `operators`, `export`, `presets`, `types`, `utils`.
8
+ - Keep the required dependencies available: `culori` and an APCA implementation (`apca-w3` is acceptable).
9
+
10
+ ## Phase 1: Types and contracts
11
+
12
+ - Public types live in `src/types`. Implement these without business logic:
13
+ `ColorContext`, `SurfaceIntent`, `ColorState`, `ColorEmphasis`, `SemanticVariant`,
14
+ `ColorUsage`, `ColorRole`, `BackgroundHint`, `ContrastRequirement`, `AlphaStrategy`,
15
+ `OutputOptions`, `ColorQuery`, `OnSolidQuery`, `ResolvedColor`, `ColorMeta`.
16
+ - Acceptance criteria: build must pass and there must be no circular imports.
package/CHANGELOG.md ADDED
@@ -0,0 +1,34 @@
1
+ # Changelog
2
+
3
+ ## v0.3.0
4
+
5
+ ### Breaking changes
6
+
7
+ - ESM-only package (`"type": "module"`), no `require()` support.
8
+ - Public API is split into subpath exports:
9
+ - `@clhaas/palette-kit` (runtime)
10
+ - `@clhaas/palette-kit/serialize` (serializer)
11
+ - `@clhaas/palette-kit/export` (exporters)
12
+ - `@clhaas/palette-kit/cli` and bin `palette-kit` (CLI)
13
+ - Exporters are not re-exported from the main entrypoint to keep the runtime lean and tree-shakeable.
14
+
15
+ ### Features
16
+
17
+ - Public serializer (`serializeColor`, `serializeResolved`, `theme.serialize`) with OKLCH/sRGB/P3 output options.
18
+ - Public exporters: `exportThemeCss` (progressive `@supports` fallbacks) and `exportThemeJson` (stable `{ light, dark }` structure).
19
+ - Declarative Token Registry + official token presets (`minimal-ui`, `radixLike-ui`, `modern-ui`).
20
+ - CLI tooling:
21
+ - `palette-kit init` (typed config template)
22
+ - `palette-kit build` (deterministic `dist/palette/` artifacts: CSS/JSON/TS + d.ts)
23
+ - Strong inference and DX validation improvements (strict vs non-strict behavior, clearer errors).
24
+
25
+ ### Migration
26
+
27
+ - See `docs/Migration.md` for upgrade notes and updated import paths.
28
+
29
+ ## v0.2.0
30
+
31
+ - Public API limited to `createTheme` and public types.
32
+ - Resolver returns OKLCH channel data, not CSS strings.
33
+ - Internal serializers/exporters exist but are not exported.
34
+ - CLI is declared but not implemented in this tag.