@overcrow/mcp 0.0.0 → 0.1.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 (461) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +91 -1
  3. package/dist/audit/index.js +103 -0
  4. package/dist/audit/lexer.js +417 -0
  5. package/dist/audit/project.js +200 -0
  6. package/dist/audit/rules.js +661 -0
  7. package/dist/bootstrap/download.js +229 -0
  8. package/dist/bootstrap/install.js +280 -0
  9. package/dist/bootstrap/pin.js +85 -0
  10. package/dist/bootstrap/pin.json +119 -0
  11. package/dist/bootstrap/zip.js +258 -0
  12. package/dist/cli.js +200 -0
  13. package/dist/confine.js +244 -0
  14. package/dist/content/docs/en/cli.md +353 -0
  15. package/dist/content/docs/en/dev-channel.md +130 -0
  16. package/dist/content/docs/en/elements.md +469 -0
  17. package/dist/content/docs/en/forms.md +328 -0
  18. package/dist/content/docs/en/guide.md +253 -0
  19. package/dist/content/docs/en/index.md +85 -0
  20. package/dist/content/docs/en/limits.md +241 -0
  21. package/dist/content/docs/en/logic.md +446 -0
  22. package/dist/content/docs/en/manifest.md +381 -0
  23. package/dist/content/docs/en/mcp.md +165 -0
  24. package/dist/content/docs/en/package.md +131 -0
  25. package/dist/content/docs/en/publishing.md +162 -0
  26. package/dist/content/docs/en/reference.md +55 -0
  27. package/dist/content/docs/en/result-shapes.md +332 -0
  28. package/dist/content/docs/en/sdk.md +295 -0
  29. package/dist/content/docs/en/security.md +115 -0
  30. package/dist/content/docs/en/service-reference.md +344 -0
  31. package/dist/content/docs/en/services.md +517 -0
  32. package/dist/content/docs/en/style-properties.md +270 -0
  33. package/dist/content/docs/en/style.md +266 -0
  34. package/dist/content/docs/en/testing.md +400 -0
  35. package/dist/content/docs/en/view.md +338 -0
  36. package/dist/content/docs/en/widgets.md +76 -0
  37. package/dist/content/docs/fr/cli.md +367 -0
  38. package/dist/content/docs/fr/dev-channel.md +140 -0
  39. package/dist/content/docs/fr/elements.md +475 -0
  40. package/dist/content/docs/fr/forms.md +341 -0
  41. package/dist/content/docs/fr/guide.md +264 -0
  42. package/dist/content/docs/fr/index.md +90 -0
  43. package/dist/content/docs/fr/limits.md +244 -0
  44. package/dist/content/docs/fr/logic.md +461 -0
  45. package/dist/content/docs/fr/manifest.md +392 -0
  46. package/dist/content/docs/fr/mcp.md +173 -0
  47. package/dist/content/docs/fr/package.md +139 -0
  48. package/dist/content/docs/fr/publishing.md +172 -0
  49. package/dist/content/docs/fr/reference.md +59 -0
  50. package/dist/content/docs/fr/result-shapes.md +333 -0
  51. package/dist/content/docs/fr/sdk.md +301 -0
  52. package/dist/content/docs/fr/security.md +129 -0
  53. package/dist/content/docs/fr/service-reference.md +346 -0
  54. package/dist/content/docs/fr/services.md +540 -0
  55. package/dist/content/docs/fr/style-properties.md +272 -0
  56. package/dist/content/docs/fr/style.md +281 -0
  57. package/dist/content/docs/fr/testing.md +417 -0
  58. package/dist/content/docs/fr/view.md +352 -0
  59. package/dist/content/docs/fr/widgets.md +81 -0
  60. package/dist/content/examples/clock/LICENSE +21 -0
  61. package/dist/content/examples/clock/README.md +75 -0
  62. package/dist/content/examples/clock/listing.json +19 -0
  63. package/dist/content/examples/clock/locales/en.json +4 -0
  64. package/dist/content/examples/clock/locales/fr.json +4 -0
  65. package/dist/content/examples/clock/logic.ts +85 -0
  66. package/dist/content/examples/clock/manifest.json +44 -0
  67. package/dist/content/examples/clock/package.json +16 -0
  68. package/dist/content/examples/clock/style.ocss +26 -0
  69. package/dist/content/examples/clock/tests/hidden.scenario.json +68 -0
  70. package/dist/content/examples/clock/tests/load-logic.mjs +22 -0
  71. package/dist/content/examples/clock/tests/logic.test.mjs +89 -0
  72. package/dist/content/examples/clock/tests/options.scenario.json +108 -0
  73. package/dist/content/examples/clock/tests/preview.scenario.json +25 -0
  74. package/dist/content/examples/clock/tests/render.scenario.json +94 -0
  75. package/dist/content/examples/clock/tests/summer-time.scenario.json +74 -0
  76. package/dist/content/examples/clock/tests/ticks.scenario.json +120 -0
  77. package/dist/content/examples/clock/tsconfig.json +16 -0
  78. package/dist/content/examples/clock/view.ocml +8 -0
  79. package/dist/content/examples/countdown/LICENSE +20 -0
  80. package/dist/content/examples/countdown/listing.json +10 -0
  81. package/dist/content/examples/countdown/locales/en.json +15 -0
  82. package/dist/content/examples/countdown/locales/fr.json +15 -0
  83. package/dist/content/examples/countdown/logic.ts +179 -0
  84. package/dist/content/examples/countdown/manifest.json +34 -0
  85. package/dist/content/examples/countdown/package.json +15 -0
  86. package/dist/content/examples/countdown/style.ocss +94 -0
  87. package/dist/content/examples/countdown/tsconfig.json +16 -0
  88. package/dist/content/examples/countdown/view.ocml +42 -0
  89. package/dist/content/examples/fps/LICENSE +21 -0
  90. package/dist/content/examples/fps/README.md +64 -0
  91. package/dist/content/examples/fps/listing.json +19 -0
  92. package/dist/content/examples/fps/locales/en.json +11 -0
  93. package/dist/content/examples/fps/locales/fr.json +11 -0
  94. package/dist/content/examples/fps/logic.ts +64 -0
  95. package/dist/content/examples/fps/manifest.json +30 -0
  96. package/dist/content/examples/fps/package.json +16 -0
  97. package/dist/content/examples/fps/style.ocss +31 -0
  98. package/dist/content/examples/fps/tests/label.scenario.json +63 -0
  99. package/dist/content/examples/fps/tests/load-logic.mjs +22 -0
  100. package/dist/content/examples/fps/tests/logic.test.mjs +60 -0
  101. package/dist/content/examples/fps/tests/preview.scenario.json +29 -0
  102. package/dist/content/examples/fps/tests/refused.scenario.json +20 -0
  103. package/dist/content/examples/fps/tests/render.scenario.json +96 -0
  104. package/dist/content/examples/fps/tests/stale.scenario.json +91 -0
  105. package/dist/content/examples/fps/tests/unavailable.scenario.json +111 -0
  106. package/dist/content/examples/fps/tsconfig.json +16 -0
  107. package/dist/content/examples/fps/view.ocml +11 -0
  108. package/dist/content/examples/media/LICENSE +21 -0
  109. package/dist/content/examples/media/README.md +147 -0
  110. package/dist/content/examples/media/listing.json +19 -0
  111. package/dist/content/examples/media/locales/en.json +11 -0
  112. package/dist/content/examples/media/locales/fr.json +11 -0
  113. package/dist/content/examples/media/logic.ts +191 -0
  114. package/dist/content/examples/media/manifest.json +35 -0
  115. package/dist/content/examples/media/package.json +16 -0
  116. package/dist/content/examples/media/style.ocss +148 -0
  117. package/dist/content/examples/media/tests/covers.scenario.json +144 -0
  118. package/dist/content/examples/media/tests/gesture.scenario.json +173 -0
  119. package/dist/content/examples/media/tests/load-logic.mjs +22 -0
  120. package/dist/content/examples/media/tests/logic.test.mjs +176 -0
  121. package/dist/content/examples/media/tests/marquee.scenario.json +127 -0
  122. package/dist/content/examples/media/tests/preview.scenario.json +52 -0
  123. package/dist/content/examples/media/tests/read-only.scenario.json +53 -0
  124. package/dist/content/examples/media/tests/refused.scenario.json +22 -0
  125. package/dist/content/examples/media/tests/refused.test.mjs +31 -0
  126. package/dist/content/examples/media/tests/render.scenario.json +136 -0
  127. package/dist/content/examples/media/tests/states.scenario.json +257 -0
  128. package/dist/content/examples/media/tests/unavailable.scenario.json +120 -0
  129. package/dist/content/examples/media/tsconfig.json +16 -0
  130. package/dist/content/examples/media/view.ocml +41 -0
  131. package/dist/content/examples/notes/LICENSE +21 -0
  132. package/dist/content/examples/notes/README.md +219 -0
  133. package/dist/content/examples/notes/listing.json +19 -0
  134. package/dist/content/examples/notes/locales/en.json +25 -0
  135. package/dist/content/examples/notes/locales/fr.json +25 -0
  136. package/dist/content/examples/notes/logic.ts +799 -0
  137. package/dist/content/examples/notes/manifest.json +40 -0
  138. package/dist/content/examples/notes/package.json +16 -0
  139. package/dist/content/examples/notes/style.ocss +469 -0
  140. package/dist/content/examples/notes/tests/checks.scenario.json +237 -0
  141. package/dist/content/examples/notes/tests/create.scenario.json +260 -0
  142. package/dist/content/examples/notes/tests/delete.scenario.json +342 -0
  143. package/dist/content/examples/notes/tests/drafts.scenario.json +714 -0
  144. package/dist/content/examples/notes/tests/editor.scenario.json +232 -0
  145. package/dist/content/examples/notes/tests/frame.scenario.json +93 -0
  146. package/dist/content/examples/notes/tests/interactive.scenario.json +344 -0
  147. package/dist/content/examples/notes/tests/limits.scenario.json +1351 -0
  148. package/dist/content/examples/notes/tests/load-logic.mjs +22 -0
  149. package/dist/content/examples/notes/tests/logic.test.mjs +514 -0
  150. package/dist/content/examples/notes/tests/preview.scenario.json +99 -0
  151. package/dist/content/examples/notes/tests/read-only.scenario.json +105 -0
  152. package/dist/content/examples/notes/tests/refused.scenario.json +33 -0
  153. package/dist/content/examples/notes/tests/save.scenario.json +378 -0
  154. package/dist/content/examples/notes/tests/states.scenario.json +640 -0
  155. package/dist/content/examples/notes/tests/typing.scenario.json +562 -0
  156. package/dist/content/examples/notes/tests/unavailable.scenario.json +246 -0
  157. package/dist/content/examples/notes/tsconfig.json +16 -0
  158. package/dist/content/examples/notes/view.ocml +154 -0
  159. package/dist/content/examples/performance/LICENSE +21 -0
  160. package/dist/content/examples/performance/README.md +134 -0
  161. package/dist/content/examples/performance/listing.json +19 -0
  162. package/dist/content/examples/performance/locales/en.json +20 -0
  163. package/dist/content/examples/performance/locales/fr.json +20 -0
  164. package/dist/content/examples/performance/logic.ts +210 -0
  165. package/dist/content/examples/performance/manifest.json +83 -0
  166. package/dist/content/examples/performance/package.json +16 -0
  167. package/dist/content/examples/performance/style.ocss +75 -0
  168. package/dist/content/examples/performance/tests/fahrenheit.scenario.json +110 -0
  169. package/dist/content/examples/performance/tests/horizontal.scenario.json +96 -0
  170. package/dist/content/examples/performance/tests/load-logic.mjs +22 -0
  171. package/dist/content/examples/performance/tests/logic.test.mjs +226 -0
  172. package/dist/content/examples/performance/tests/menu.scenario.json +170 -0
  173. package/dist/content/examples/performance/tests/no-fps-source.scenario.json +47 -0
  174. package/dist/content/examples/performance/tests/preview.scenario.json +45 -0
  175. package/dist/content/examples/performance/tests/refused.scenario.json +20 -0
  176. package/dist/content/examples/performance/tests/refused.test.mjs +19 -0
  177. package/dist/content/examples/performance/tests/region.scenario.json +89 -0
  178. package/dist/content/examples/performance/tests/render.scenario.json +112 -0
  179. package/dist/content/examples/performance/tests/sources.scenario.json +151 -0
  180. package/dist/content/examples/performance/tests/stale.scenario.json +111 -0
  181. package/dist/content/examples/performance/tests/telemetry-only.scenario.json +44 -0
  182. package/dist/content/examples/performance/tests/thresholds.scenario.json +147 -0
  183. package/dist/content/examples/performance/tests/waiting.scenario.json +105 -0
  184. package/dist/content/examples/performance/tsconfig.json +16 -0
  185. package/dist/content/examples/performance/view.ocml +18 -0
  186. package/dist/content/examples/playervox-journal/LICENSE +21 -0
  187. package/dist/content/examples/playervox-journal/README.md +150 -0
  188. package/dist/content/examples/playervox-journal/listing.json +19 -0
  189. package/dist/content/examples/playervox-journal/locales/en.json +25 -0
  190. package/dist/content/examples/playervox-journal/locales/fr.json +25 -0
  191. package/dist/content/examples/playervox-journal/logic.ts +556 -0
  192. package/dist/content/examples/playervox-journal/manifest.json +19 -0
  193. package/dist/content/examples/playervox-journal/package.json +16 -0
  194. package/dist/content/examples/playervox-journal/style.ocss +142 -0
  195. package/dist/content/examples/playervox-journal/tests/changes.scenario.json +482 -0
  196. package/dist/content/examples/playervox-journal/tests/delete.scenario.json +432 -0
  197. package/dist/content/examples/playervox-journal/tests/frame.scenario.json +169 -0
  198. package/dist/content/examples/playervox-journal/tests/load-logic.mjs +22 -0
  199. package/dist/content/examples/playervox-journal/tests/logic.test.mjs +349 -0
  200. package/dist/content/examples/playervox-journal/tests/paging.scenario.json +428 -0
  201. package/dist/content/examples/playervox-journal/tests/preview.scenario.json +184 -0
  202. package/dist/content/examples/playervox-journal/tests/read-only.scenario.json +157 -0
  203. package/dist/content/examples/playervox-journal/tests/refused.scenario.json +39 -0
  204. package/dist/content/examples/playervox-journal/tests/scale.scenario.json +286 -0
  205. package/dist/content/examples/playervox-journal/tests/signed-out.scenario.json +134 -0
  206. package/dist/content/examples/playervox-journal/tests/states.scenario.json +741 -0
  207. package/dist/content/examples/playervox-journal/tests/unavailable.scenario.json +183 -0
  208. package/dist/content/examples/playervox-journal/tsconfig.json +16 -0
  209. package/dist/content/examples/playervox-journal/view.ocml +52 -0
  210. package/dist/content/examples/playervox-rating/LICENSE +21 -0
  211. package/dist/content/examples/playervox-rating/README.md +166 -0
  212. package/dist/content/examples/playervox-rating/listing.json +19 -0
  213. package/dist/content/examples/playervox-rating/locales/en.json +35 -0
  214. package/dist/content/examples/playervox-rating/locales/fr.json +35 -0
  215. package/dist/content/examples/playervox-rating/logic.ts +581 -0
  216. package/dist/content/examples/playervox-rating/manifest.json +19 -0
  217. package/dist/content/examples/playervox-rating/package.json +16 -0
  218. package/dist/content/examples/playervox-rating/style.ocss +333 -0
  219. package/dist/content/examples/playervox-rating/tests/account.scenario.json +125 -0
  220. package/dist/content/examples/playervox-rating/tests/bounds.scenario.json +73 -0
  221. package/dist/content/examples/playervox-rating/tests/draft.scenario.json +199 -0
  222. package/dist/content/examples/playervox-rating/tests/form.scenario.json +142 -0
  223. package/dist/content/examples/playervox-rating/tests/load-logic.mjs +22 -0
  224. package/dist/content/examples/playervox-rating/tests/logic.test.mjs +346 -0
  225. package/dist/content/examples/playervox-rating/tests/offline.scenario.json +142 -0
  226. package/dist/content/examples/playervox-rating/tests/preview.scenario.json +44 -0
  227. package/dist/content/examples/playervox-rating/tests/publish-keyboard.scenario.json +221 -0
  228. package/dist/content/examples/playervox-rating/tests/publish-pointer.scenario.json +314 -0
  229. package/dist/content/examples/playervox-rating/tests/read-only.scenario.json +70 -0
  230. package/dist/content/examples/playervox-rating/tests/refused.scenario.json +45 -0
  231. package/dist/content/examples/playervox-rating/tests/states.scenario.json +362 -0
  232. package/dist/content/examples/playervox-rating/tsconfig.json +16 -0
  233. package/dist/content/examples/playervox-rating/view.ocml +62 -0
  234. package/dist/content/examples/playervox-reviews/LICENSE +21 -0
  235. package/dist/content/examples/playervox-reviews/README.md +194 -0
  236. package/dist/content/examples/playervox-reviews/listing.json +19 -0
  237. package/dist/content/examples/playervox-reviews/locales/en.json +32 -0
  238. package/dist/content/examples/playervox-reviews/locales/fr.json +32 -0
  239. package/dist/content/examples/playervox-reviews/logic.ts +822 -0
  240. package/dist/content/examples/playervox-reviews/manifest.json +30 -0
  241. package/dist/content/examples/playervox-reviews/package.json +16 -0
  242. package/dist/content/examples/playervox-reviews/style.ocss +260 -0
  243. package/dist/content/examples/playervox-reviews/tests/account.scenario.json +249 -0
  244. package/dist/content/examples/playervox-reviews/tests/bounds.scenario.json +336 -0
  245. package/dist/content/examples/playervox-reviews/tests/changes.scenario.json +515 -0
  246. package/dist/content/examples/playervox-reviews/tests/filter.scenario.json +400 -0
  247. package/dist/content/examples/playervox-reviews/tests/frame.scenario.json +185 -0
  248. package/dist/content/examples/playervox-reviews/tests/keyboard.scenario.json +188 -0
  249. package/dist/content/examples/playervox-reviews/tests/load-logic.mjs +22 -0
  250. package/dist/content/examples/playervox-reviews/tests/logic.test.mjs +559 -0
  251. package/dist/content/examples/playervox-reviews/tests/offline-start.scenario.json +152 -0
  252. package/dist/content/examples/playervox-reviews/tests/offline.scenario.json +311 -0
  253. package/dist/content/examples/playervox-reviews/tests/paging.scenario.json +497 -0
  254. package/dist/content/examples/playervox-reviews/tests/preview.scenario.json +286 -0
  255. package/dist/content/examples/playervox-reviews/tests/reading.scenario.json +591 -0
  256. package/dist/content/examples/playervox-reviews/tests/refused.scenario.json +54 -0
  257. package/dist/content/examples/playervox-reviews/tests/scale.scenario.json +303 -0
  258. package/dist/content/examples/playervox-reviews/tests/states.scenario.json +700 -0
  259. package/dist/content/examples/playervox-reviews/tests/unavailable.scenario.json +192 -0
  260. package/dist/content/examples/playervox-reviews/tsconfig.json +16 -0
  261. package/dist/content/examples/playervox-reviews/view.ocml +110 -0
  262. package/dist/content/examples/playervox-score/LICENSE +21 -0
  263. package/dist/content/examples/playervox-score/README.md +131 -0
  264. package/dist/content/examples/playervox-score/listing.json +19 -0
  265. package/dist/content/examples/playervox-score/locales/en.json +23 -0
  266. package/dist/content/examples/playervox-score/locales/fr.json +23 -0
  267. package/dist/content/examples/playervox-score/logic.ts +430 -0
  268. package/dist/content/examples/playervox-score/manifest.json +47 -0
  269. package/dist/content/examples/playervox-score/package.json +16 -0
  270. package/dist/content/examples/playervox-score/style.ocss +247 -0
  271. package/dist/content/examples/playervox-score/tests/grades.scenario.json +279 -0
  272. package/dist/content/examples/playervox-score/tests/load-logic.mjs +22 -0
  273. package/dist/content/examples/playervox-score/tests/logic.test.mjs +229 -0
  274. package/dist/content/examples/playervox-score/tests/options.scenario.json +302 -0
  275. package/dist/content/examples/playervox-score/tests/preview.scenario.json +68 -0
  276. package/dist/content/examples/playervox-score/tests/pulse.scenario.json +157 -0
  277. package/dist/content/examples/playervox-score/tests/refused.scenario.json +21 -0
  278. package/dist/content/examples/playervox-score/tests/signed-out.scenario.json +46 -0
  279. package/dist/content/examples/playervox-score/tests/states.scenario.json +450 -0
  280. package/dist/content/examples/playervox-score/tests/unavailable.scenario.json +84 -0
  281. package/dist/content/examples/playervox-score/tsconfig.json +16 -0
  282. package/dist/content/examples/playervox-score/view.ocml +51 -0
  283. package/dist/content/examples/session/LICENSE +21 -0
  284. package/dist/content/examples/session/README.md +57 -0
  285. package/dist/content/examples/session/listing.json +19 -0
  286. package/dist/content/examples/session/locales/en.json +3 -0
  287. package/dist/content/examples/session/locales/fr.json +3 -0
  288. package/dist/content/examples/session/logic.ts +26 -0
  289. package/dist/content/examples/session/manifest.json +19 -0
  290. package/dist/content/examples/session/package.json +16 -0
  291. package/dist/content/examples/session/style.ocss +16 -0
  292. package/dist/content/examples/session/tests/hidden.scenario.json +45 -0
  293. package/dist/content/examples/session/tests/load-logic.mjs +22 -0
  294. package/dist/content/examples/session/tests/logic.test.mjs +37 -0
  295. package/dist/content/examples/session/tests/preview.scenario.json +28 -0
  296. package/dist/content/examples/session/tests/refused.scenario.json +20 -0
  297. package/dist/content/examples/session/tests/refused.test.mjs +16 -0
  298. package/dist/content/examples/session/tests/render.scenario.json +95 -0
  299. package/dist/content/examples/session/tests/ticks.scenario.json +139 -0
  300. package/dist/content/examples/session/tests/unknown.scenario.json +37 -0
  301. package/dist/content/examples/session/tsconfig.json +16 -0
  302. package/dist/content/examples/session/view.ocml +11 -0
  303. package/dist/content/examples/stopwatch/LICENSE +21 -0
  304. package/dist/content/examples/stopwatch/README.md +99 -0
  305. package/dist/content/examples/stopwatch/listing.json +19 -0
  306. package/dist/content/examples/stopwatch/locales/en.json +8 -0
  307. package/dist/content/examples/stopwatch/locales/fr.json +8 -0
  308. package/dist/content/examples/stopwatch/logic.ts +93 -0
  309. package/dist/content/examples/stopwatch/manifest.json +19 -0
  310. package/dist/content/examples/stopwatch/package.json +16 -0
  311. package/dist/content/examples/stopwatch/style.ocss +54 -0
  312. package/dist/content/examples/stopwatch/tests/errors.scenario.json +121 -0
  313. package/dist/content/examples/stopwatch/tests/gesture.scenario.json +154 -0
  314. package/dist/content/examples/stopwatch/tests/hidden.scenario.json +57 -0
  315. package/dist/content/examples/stopwatch/tests/hundredths.scenario.json +173 -0
  316. package/dist/content/examples/stopwatch/tests/load-logic.mjs +22 -0
  317. package/dist/content/examples/stopwatch/tests/logic.test.mjs +99 -0
  318. package/dist/content/examples/stopwatch/tests/preview.scenario.json +36 -0
  319. package/dist/content/examples/stopwatch/tests/read-only.scenario.json +42 -0
  320. package/dist/content/examples/stopwatch/tests/read-only.test.mjs +18 -0
  321. package/dist/content/examples/stopwatch/tests/refused.scenario.json +22 -0
  322. package/dist/content/examples/stopwatch/tests/refused.test.mjs +18 -0
  323. package/dist/content/examples/stopwatch/tests/render.scenario.json +105 -0
  324. package/dist/content/examples/stopwatch/tests/states.scenario.json +246 -0
  325. package/dist/content/examples/stopwatch/tests/unknown.scenario.json +40 -0
  326. package/dist/content/examples/stopwatch/tsconfig.json +16 -0
  327. package/dist/content/examples/stopwatch/view.ocml +29 -0
  328. package/dist/content/examples/twitch-chat/LICENSE +21 -0
  329. package/dist/content/examples/twitch-chat/README.md +283 -0
  330. package/dist/content/examples/twitch-chat/listing.json +19 -0
  331. package/dist/content/examples/twitch-chat/locales/en.json +52 -0
  332. package/dist/content/examples/twitch-chat/locales/fr.json +52 -0
  333. package/dist/content/examples/twitch-chat/logic.ts +887 -0
  334. package/dist/content/examples/twitch-chat/manifest.json +33 -0
  335. package/dist/content/examples/twitch-chat/package.json +16 -0
  336. package/dist/content/examples/twitch-chat/style.ocss +544 -0
  337. package/dist/content/examples/twitch-chat/tests/account.scenario.json +325 -0
  338. package/dist/content/examples/twitch-chat/tests/burst.scenario.json +1866 -0
  339. package/dist/content/examples/twitch-chat/tests/channel-refused.scenario.json +372 -0
  340. package/dist/content/examples/twitch-chat/tests/channel.scenario.json +480 -0
  341. package/dist/content/examples/twitch-chat/tests/draft.scenario.json +279 -0
  342. package/dist/content/examples/twitch-chat/tests/fade.scenario.json +269 -0
  343. package/dist/content/examples/twitch-chat/tests/failures.scenario.json +420 -0
  344. package/dist/content/examples/twitch-chat/tests/favorites.scenario.json +376 -0
  345. package/dist/content/examples/twitch-chat/tests/frame.scenario.json +152 -0
  346. package/dist/content/examples/twitch-chat/tests/lifetime.scenario.json +186 -0
  347. package/dist/content/examples/twitch-chat/tests/load-logic.mjs +22 -0
  348. package/dist/content/examples/twitch-chat/tests/logic.test.mjs +1053 -0
  349. package/dist/content/examples/twitch-chat/tests/passive.scenario.json +536 -0
  350. package/dist/content/examples/twitch-chat/tests/preview.scenario.json +147 -0
  351. package/dist/content/examples/twitch-chat/tests/read-only.scenario.json +202 -0
  352. package/dist/content/examples/twitch-chat/tests/read-only.test.mjs +63 -0
  353. package/dist/content/examples/twitch-chat/tests/refused.scenario.json +65 -0
  354. package/dist/content/examples/twitch-chat/tests/refused.test.mjs +43 -0
  355. package/dist/content/examples/twitch-chat/tests/render.scenario.json +347 -0
  356. package/dist/content/examples/twitch-chat/tests/reply.scenario.json +384 -0
  357. package/dist/content/examples/twitch-chat/tests/send-refused.scenario.json +383 -0
  358. package/dist/content/examples/twitch-chat/tests/send.scenario.json +300 -0
  359. package/dist/content/examples/twitch-chat/tests/states.scenario.json +455 -0
  360. package/dist/content/examples/twitch-chat/tests/unavailable.scenario.json +256 -0
  361. package/dist/content/examples/twitch-chat/tests/unread.scenario.json +997 -0
  362. package/dist/content/examples/twitch-chat/tsconfig.json +16 -0
  363. package/dist/content/examples/twitch-chat/view.ocml +141 -0
  364. package/dist/content/examples/warframe-market/LICENSE +21 -0
  365. package/dist/content/examples/warframe-market/README.md +176 -0
  366. package/dist/content/examples/warframe-market/listing.json +19 -0
  367. package/dist/content/examples/warframe-market/locales/en.json +44 -0
  368. package/dist/content/examples/warframe-market/locales/fr.json +44 -0
  369. package/dist/content/examples/warframe-market/logic.ts +1265 -0
  370. package/dist/content/examples/warframe-market/manifest.json +92 -0
  371. package/dist/content/examples/warframe-market/package.json +16 -0
  372. package/dist/content/examples/warframe-market/style.ocss +422 -0
  373. package/dist/content/examples/warframe-market/tests/bounds.scenario.json +60 -0
  374. package/dist/content/examples/warframe-market/tests/cached.scenario.json +70 -0
  375. package/dist/content/examples/warframe-market/tests/detail.scenario.json +251 -0
  376. package/dist/content/examples/warframe-market/tests/errors.scenario.json +105 -0
  377. package/dist/content/examples/warframe-market/tests/fixtures.json +295 -0
  378. package/dist/content/examples/warframe-market/tests/load-logic.mjs +22 -0
  379. package/dist/content/examples/warframe-market/tests/logic.test.mjs +505 -0
  380. package/dist/content/examples/warframe-market/tests/no-clipboard.scenario.json +104 -0
  381. package/dist/content/examples/warframe-market/tests/passive.scenario.json +87 -0
  382. package/dist/content/examples/warframe-market/tests/preview.scenario.json +146 -0
  383. package/dist/content/examples/warframe-market/tests/refresh.scenario.json +56 -0
  384. package/dist/content/examples/warframe-market/tests/refused.scenario.json +74 -0
  385. package/dist/content/examples/warframe-market/tests/render.scenario.json +210 -0
  386. package/dist/content/examples/warframe-market/tests/search.scenario.json +189 -0
  387. package/dist/content/examples/warframe-market/tests/unavailable.scenario.json +54 -0
  388. package/dist/content/examples/warframe-market/tsconfig.json +16 -0
  389. package/dist/content/examples/warframe-market/view.ocml +116 -0
  390. package/dist/content/examples/weather/LICENSE +20 -0
  391. package/dist/content/examples/weather/listing.json +10 -0
  392. package/dist/content/examples/weather/locales/en.json +9 -0
  393. package/dist/content/examples/weather/locales/fr.json +9 -0
  394. package/dist/content/examples/weather/logic.ts +62 -0
  395. package/dist/content/examples/weather/manifest.json +51 -0
  396. package/dist/content/examples/weather/package.json +15 -0
  397. package/dist/content/examples/weather/style.ocss +29 -0
  398. package/dist/content/examples/weather/tsconfig.json +16 -0
  399. package/dist/content/examples/weather/view.ocml +12 -0
  400. package/dist/content/index.json +3601 -0
  401. package/dist/content/reference/errors.json +1712 -0
  402. package/dist/content/reference/limits.json +1154 -0
  403. package/dist/content/reference/manifest.md +223 -0
  404. package/dist/content/reference/permissions.json +413 -0
  405. package/dist/content/templates/blank/locales/en.json +3 -0
  406. package/dist/content/templates/blank/locales/fr.json +3 -0
  407. package/dist/content/templates/blank/logic.ts +7 -0
  408. package/dist/content/templates/blank/manifest.json +16 -0
  409. package/dist/content/templates/blank/style.ocss +10 -0
  410. package/dist/content/templates/blank/tests/example.scenario.json +10 -0
  411. package/dist/content/templates/blank/view.ocml +6 -0
  412. package/dist/content/templates/chart/locales/en.json +3 -0
  413. package/dist/content/templates/chart/locales/fr.json +3 -0
  414. package/dist/content/templates/chart/logic.ts +27 -0
  415. package/dist/content/templates/chart/manifest.json +16 -0
  416. package/dist/content/templates/chart/style.ocss +27 -0
  417. package/dist/content/templates/chart/tests/example.scenario.json +10 -0
  418. package/dist/content/templates/chart/view.ocml +10 -0
  419. package/dist/content/templates/counter/locales/en.json +4 -0
  420. package/dist/content/templates/counter/locales/fr.json +4 -0
  421. package/dist/content/templates/counter/logic.ts +20 -0
  422. package/dist/content/templates/counter/manifest.json +16 -0
  423. package/dist/content/templates/counter/style.ocss +26 -0
  424. package/dist/content/templates/counter/tests/example.scenario.json +11 -0
  425. package/dist/content/templates/counter/view.ocml +13 -0
  426. package/dist/content/templates/list/locales/en.json +8 -0
  427. package/dist/content/templates/list/locales/fr.json +8 -0
  428. package/dist/content/templates/list/logic.ts +35 -0
  429. package/dist/content/templates/list/manifest.json +16 -0
  430. package/dist/content/templates/list/style.ocss +42 -0
  431. package/dist/content/templates/list/tests/example.scenario.json +10 -0
  432. package/dist/content/templates/list/view.ocml +17 -0
  433. package/dist/content/templates/shared/LICENSE +20 -0
  434. package/dist/content/templates/shared/package.json +14 -0
  435. package/dist/content/templates/shared/tsconfig.json +16 -0
  436. package/dist/content.js +68 -0
  437. package/dist/env.js +156 -0
  438. package/dist/fingerprint.js +32 -0
  439. package/dist/ids.js +27 -0
  440. package/dist/index.js +82 -0
  441. package/dist/knowledge.js +222 -0
  442. package/dist/npm.js +149 -0
  443. package/dist/prompts.js +47 -0
  444. package/dist/resources.js +82 -0
  445. package/dist/run.js +120 -0
  446. package/dist/server.js +43 -0
  447. package/dist/session.js +205 -0
  448. package/dist/sources.js +218 -0
  449. package/dist/text.js +80 -0
  450. package/dist/texts.js +44 -0
  451. package/dist/tools/audit.js +105 -0
  452. package/dist/tools/build.js +453 -0
  453. package/dist/tools/common.js +122 -0
  454. package/dist/tools/docs.js +196 -0
  455. package/dist/tools/preview.js +87 -0
  456. package/dist/tools/project.js +178 -0
  457. package/dist/tools/setup.js +146 -0
  458. package/dist/tools/submission.js +369 -0
  459. package/dist/version.js +3 -0
  460. package/npm-shrinkwrap.json +402 -0
  461. package/package.json +50 -4
@@ -0,0 +1,270 @@
1
+ # Style properties and tokens
2
+
3
+ Every property that `style.ocss` accepts in a PlayerVox OverCrow widget,
4
+ with its values and its initial value, then the design tokens and the
5
+ icons. [The style](style.md) explains selectors, layout, tokens and
6
+ animations; this page is the list.
7
+
8
+ <!-- source: templates/chart/style.ocss -->
9
+ ```css
10
+ .value {
11
+ font-size: var(--font-size-value);
12
+ font-variant-numeric: tabular-nums;
13
+ }
14
+ ```
15
+
16
+ Anything that is not on this page is refused when the widget is checked:
17
+ a property, a keyword or a unit outside the lists below is an error, with
18
+ the closest name as a suggestion.
19
+
20
+ ## How to read a property
21
+
22
+ - **Value** uses the notations of [values](#values): `<px>`, `<percent>`,
23
+ `<color>`… A `|` separates alternatives, `?` marks an optional part.
24
+ - **Initial** is the value of an element that no rule styles.
25
+ - **Inherited** properties take the value of the parent when no rule sets
26
+ them: set them on a container.
27
+ - **Animatable** properties can appear in a `transition` and in
28
+ `@keyframes`.
29
+
30
+ ## Properties
31
+
32
+ <!-- generated:style-properties -->
33
+ ### Layout
34
+
35
+ | Property | Value | Initial | Inherited | Animatable |
36
+ | --- | --- | --- | --- | --- |
37
+ | `display` | `flex` \| `grid` \| `none` | `flex` | no | no |
38
+ | `position` | `relative` \| `absolute` | `relative` | no | no |
39
+ | `top` | `<px>` \| `<percent>` \| `auto`, negative allowed | `auto` | no | no |
40
+ | `right` | `<px>` \| `<percent>` \| `auto`, negative allowed | `auto` | no | no |
41
+ | `bottom` | `<px>` \| `<percent>` \| `auto`, negative allowed | `auto` | no | no |
42
+ | `left` | `<px>` \| `<percent>` \| `auto`, negative allowed | `auto` | no | no |
43
+ | `flex-direction` | `row` \| `column` \| `row-reverse` \| `column-reverse` | `row` | no | no |
44
+ | `flex-wrap` | `nowrap` \| `wrap` | `nowrap` | no | no |
45
+ | `flex-grow` | number 0 to 1000 | `0` | no | no |
46
+ | `flex-shrink` | number 0 to 1000 | `1` | no | no |
47
+ | `flex-basis` | `<px>` \| `<percent>` \| `auto` | `auto` | no | no |
48
+ | `justify-content` | `start` \| `end` \| `center` \| `stretch` \| `space-between` \| `space-around` \| `space-evenly` | `start` | no | no |
49
+ | `align-items` | `start` \| `end` \| `center` \| `baseline` \| `stretch` | `stretch` | no | no |
50
+ | `align-self` | `auto` \| `start` \| `end` \| `center` \| `baseline` \| `stretch` | `auto` | no | no |
51
+ | `align-content` | `start` \| `end` \| `center` \| `stretch` \| `space-between` \| `space-around` \| `space-evenly` | `stretch` | no | no |
52
+ | `justify-items` | `start` \| `end` \| `center` \| `stretch` | `stretch` | no | no |
53
+ | `justify-self` | `auto` \| `start` \| `end` \| `center` \| `stretch` | `auto` | no | no |
54
+ | `gap` | 1–2 × (`<px>` \| `<percent>`) | `0` | no | no |
55
+ | `row-gap` | `<px>` \| `<percent>` | `0` | no | no |
56
+ | `column-gap` | `<px>` \| `<percent>` | `0` | no | no |
57
+ | `grid-template-columns` | `none` \| list ≤ 24 of `<track>`, or `repeat(<integer>, <track>)` | `none` | no | no |
58
+ | `grid-template-rows` | `none` \| list ≤ 24 of `<track>`, or `repeat(<integer>, <track>)` | `none` | no | no |
59
+ | `grid-auto-flow` | `row` \| `column` | `row` | no | no |
60
+ | `grid-auto-columns` | `<track>`: `<px>` \| `<percent>` \| `<fr>` \| `auto` \| `min-content` \| `max-content` \| `minmax(<track>, <track>)` | `auto` | no | no |
61
+ | `grid-auto-rows` | `<track>`: `<px>` \| `<percent>` \| `<fr>` \| `auto` \| `min-content` \| `max-content` \| `minmax(<track>, <track>)` | `auto` | no | no |
62
+ | `grid-column` | `auto` \| `<integer>` \| `span <integer>` \| `<start> / <end>`, lines 1 to 24 | `auto` | no | no |
63
+ | `grid-row` | `auto` \| `<integer>` \| `span <integer>` \| `<start> / <end>`, lines 1 to 24 | `auto` | no | no |
64
+
65
+ ### Box
66
+
67
+ | Property | Value | Initial | Inherited | Animatable |
68
+ | --- | --- | --- | --- | --- |
69
+ | `width` | `<px>` \| `<percent>` \| `auto` | `auto` | no | no |
70
+ | `height` | `<px>` \| `<percent>` \| `auto` | `auto` | no | no |
71
+ | `min-width` | `<px>` \| `<percent>` \| `auto` | `auto` | no | no |
72
+ | `min-height` | `<px>` \| `<percent>` \| `auto` | `auto` | no | no |
73
+ | `max-width` | `<px>` \| `<percent>` \| `none` | `none` | no | no |
74
+ | `max-height` | `<px>` \| `<percent>` \| `none` | `none` | no | no |
75
+ | `aspect-ratio` | number 0.01 to 100 | `auto` | no | no |
76
+ | `margin` | 1–4 × (`<px>` \| `<percent>` \| `auto`), negative allowed | `0` | no | no |
77
+ | `margin-top` | `<px>` \| `<percent>` \| `auto`, negative allowed | `0` | no | no |
78
+ | `margin-right` | `<px>` \| `<percent>` \| `auto`, negative allowed | `0` | no | no |
79
+ | `margin-bottom` | `<px>` \| `<percent>` \| `auto`, negative allowed | `0` | no | no |
80
+ | `margin-left` | `<px>` \| `<percent>` \| `auto`, negative allowed | `0` | no | no |
81
+ | `padding` | 1–4 × (`<px>` \| `<percent>`) | `0` | no | no |
82
+ | `padding-top` | `<px>` \| `<percent>` | `0` | no | no |
83
+ | `padding-right` | `<px>` \| `<percent>` | `0` | no | no |
84
+ | `padding-bottom` | `<px>` \| `<percent>` | `0` | no | no |
85
+ | `padding-left` | `<px>` \| `<percent>` | `0` | no | no |
86
+ | `overflow` | `visible` \| `hidden` | `visible` | no | no |
87
+
88
+ ### Appearance
89
+
90
+ | Property | Value | Initial | Inherited | Animatable |
91
+ | --- | --- | --- | --- | --- |
92
+ | `background-color` | `<color>` | `transparent` | no | yes |
93
+ | `background` | `<color>` \| `linear-gradient(<angle>?, <color> <percent>?, …)`, stops ≤ 8 | `transparent` | no | no |
94
+ | `border` | `<px>` (`solid` \| `none`)? `<color>`? | `0 none` | no | no |
95
+ | `border-top` | `<px>` (`solid` \| `none`)? `<color>`? | `0 none` | no | no |
96
+ | `border-right` | `<px>` (`solid` \| `none`)? `<color>`? | `0 none` | no | no |
97
+ | `border-bottom` | `<px>` (`solid` \| `none`)? `<color>`? | `0 none` | no | no |
98
+ | `border-left` | `<px>` (`solid` \| `none`)? `<color>`? | `0 none` | no | no |
99
+ | `border-width` | 1–4 × (`<px>`) | `0` | no | no |
100
+ | `border-style` | `solid` \| `none` | `none` | no | no |
101
+ | `border-color` | `<color>` | `currentColor` | no | yes |
102
+ | `border-radius` | 1–4 × (`<px>` \| `<percent>`) | `0` | no | no |
103
+ | `box-shadow` | `none` \| `var(--shadow-…)` alone \| list ≤ 2 of `inset`? `<px> <px> <px>? <px>? <color>` | `none` | no | no |
104
+ | `opacity` | number 0 to 1 | `1` | no | yes |
105
+ | `visibility` | `visible` \| `hidden` | `visible` | yes | no |
106
+ | `object-fit` | `contain` \| `cover` \| `fill` \| `none` | `contain` | no | no |
107
+
108
+ ### Text
109
+
110
+ | Property | Value | Initial | Inherited | Animatable |
111
+ | --- | --- | --- | --- | --- |
112
+ | `color` | `<color>` | `var(--color-text)` | yes | yes |
113
+ | `font-family` | `ui` \| `mono` \| `display`, or a font token | `ui` | yes | no |
114
+ | `font-size` | `<px>` within 6 px to 96 px, or a size token | `var(--font-size-body)` | yes | no |
115
+ | `font-weight` | `400` \| `500` \| `600` \| `700` \| `normal` \| `bold` | `400` | yes | no |
116
+ | `font-style` | `normal` \| `italic` | `normal` | yes | no |
117
+ | `font-variant-numeric` | `normal` \| `tabular-nums` | `normal` | yes | no |
118
+ | `line-height` | number 0.5 to 4 (× font size) \| `<px>` | `1.3` | yes | no |
119
+ | `letter-spacing` | `<px>`, negative allowed | `0` | yes | no |
120
+ | `text-align` | `start` \| `center` \| `end` | `start` | yes | no |
121
+ | `text-decoration` | `none` \| `underline` \| `line-through` | `none` | no | no |
122
+ | `text-transform` | `none` \| `uppercase` \| `lowercase` \| `capitalize` | `none` | yes | no |
123
+ | `white-space` | `normal` \| `nowrap` \| `pre-wrap` | `normal` | yes | no |
124
+ | `vertical-align` | `baseline` \| `middle` | `baseline` | no | no |
125
+ | `text-overflow` | `clip` \| `ellipsis` \| `marquee` | `clip` | no | no |
126
+ | `line-clamp` | integer 0 to 64 | `0` | no | no |
127
+ | `overflow-wrap` | `normal` \| `anywhere` | `normal` | yes | no |
128
+
129
+ ### Motion
130
+
131
+ | Property | Value | Initial | Inherited | Animatable |
132
+ | --- | --- | --- | --- | --- |
133
+ | `transform` | `none` \| up to 4 of `translate(<length>, <length>)` with `<px>` or `<percent>`, `translateX()`, `translateY()`, `scale(<number>{1,2})` 0 to 8, `rotate(<angle>)` | `none` | no | yes |
134
+ | `transform-origin` | 1–2 × (`left` \| `center` \| `right` \| `top` \| `bottom` \| `<percent>` \| `<px>`) | `center` | no | no |
135
+ | `transition` | `none` \| list ≤ 8 of `<animatable-property> <time> <easing>? <time>?` | `none` | no | no |
136
+ | `animation` | `none` \| list ≤ 8 of `<keyframes-name> <time> <easing>? <time>? (<integer> \| infinite)? <direction>? <fill-mode>?`, integer 1 to 10000 | `none` | no | no |
137
+
138
+ ### Interaction
139
+
140
+ | Property | Value | Initial | Inherited | Animatable |
141
+ | --- | --- | --- | --- | --- |
142
+ | `cursor` | `default` \| `pointer` \| `text` \| `not-allowed` \| `grab` \| `grabbing` | `default` | yes | no |
143
+ | `pointer-events` | `auto` \| `none` | `auto` | no | no |
144
+ <!-- /generated:style-properties -->
145
+
146
+ ## Values
147
+
148
+ <!-- generated:style-values -->
149
+ | Syntax | Meaning |
150
+ | --- | --- |
151
+ | `<px>` | `12px`; `0` may omit the unit. Decimal numbers, no exponent. |
152
+ | `<percent>` | `50%` of the containing block, as in CSS; at most 1000 either way. |
153
+ | `<fr>` | `1fr`, grid tracks only; from 0 to 1000. |
154
+ | `<time>` | `120ms` or `0.12s`, from 0 to 300000 ms. |
155
+ | `<angle>` | `4deg` or `0.5turn`, at most 3600 degrees either way. |
156
+ | `<color>` | `#rgb`, `#rgba`, `#rrggbb`, `#rrggbbaa`, `rgb(r g b)`, `rgb(r g b / a)`, `transparent`, `currentColor`, or a colour token. No named colours. |
157
+ | `var(--token)` | Design-system token of the expected type, as a whole value or a component of a composite value. No fallback argument; widgets cannot declare custom properties. |
158
+ | `<easing>` | `linear`, `ease`, `ease-in`, `ease-out`, `ease-in-out`, `steps(<integer 1..=MAX_EASING_STEPS>)`. |
159
+ | `<direction>` | `normal`, `reverse`, `alternate`. |
160
+ | `<fill-mode>` | `none`, `forwards`, `backwards`, `both`. |
161
+ <!-- /generated:style-values -->
162
+
163
+ ## Design tokens
164
+
165
+ A token is written `var(--name)` where a value of its type is expected.
166
+ Colour and shadow tokens have a value per theme; the others are the same in
167
+ both.
168
+
169
+ <!-- source: templates/list/style.ocss -->
170
+ ```css
171
+ .summary {
172
+ font-size: var(--font-size-caption);
173
+ color: var(--color-text-secondary);
174
+ }
175
+ ```
176
+
177
+ <!-- generated:tokens -->
178
+ ### Colours
179
+
180
+ | Token | Dark | Light | Meaning |
181
+ | --- | --- | --- | --- |
182
+ | `--color-accent` | `#a3e635` | `#4d7c0f` | Brand accent: primary actions, checked state. |
183
+ | `--color-accent-hover` | `#b5f153` | `#3f6212` | Accent under the pointer. |
184
+ | `--color-accent-soft` | `#a3e6351c` | `#4d7c0f1f` | Accent wash behind selected content. |
185
+ | `--color-on-accent` | `#09090b` | `#ffffff` | Text and icons drawn on the accent and its hover state. |
186
+ | `--color-surface-panel` | `#111114ee` | `#fafafaee` | Widget panel background, drawn by the host behind the content. |
187
+ | `--color-surface-raised` | `#1e1e22e0` | `#f4f4f5eb` | Raised surface inside the panel. |
188
+ | `--color-surface-hover` | `#28282deb` | `#e4e4e7f0` | Surface under the pointer. |
189
+ | `--color-surface-field` | `#0f0f12` | `#ffffff` | Text input background. |
190
+ | `--color-surface-popover` | `#18181c` | `#ffffff` | Popover and drop-down background. |
191
+ | `--color-border` | `#ffffff18` | `#0000001a` | Default border. |
192
+ | `--color-border-strong` | `#ffffff2a` | `#0000002e` | Emphasized border and separator. |
193
+ | `--color-text` | `#f7f7f8` | `#18181b` | Primary text. |
194
+ | `--color-text-secondary` | `#d4d4d8` | `#3f3f46` | Secondary text. |
195
+ | `--color-text-muted` | `#a1a1aa` | `#52525b` | Captions and metadata. |
196
+ | `--color-text-subtle` | `#71717a` | `#71717a` | Placeholders and disabled text. |
197
+ | `--color-danger` | `#fb7185` | `#e11d48` | Errors and destructive actions. |
198
+ | `--color-danger-soft` | `#fb71851a` | `#e11d481a` | Danger wash behind destructive confirmations and errors. |
199
+ | `--color-warning` | `#fbbf24` | `#b45309` | Warnings. |
200
+ | `--color-success` | `#86efac` | `#15803d` | Success and healthy states. |
201
+
202
+ ### Lengths
203
+
204
+ | Token | Value | Meaning |
205
+ | --- | --- | --- |
206
+ | `--space-1` | `2px` | Spacing step 1. |
207
+ | `--space-2` | `4px` | Spacing step 2. |
208
+ | `--space-3` | `6px` | Spacing step 3 (default item spacing). |
209
+ | `--space-4` | `8px` | Spacing step 4. |
210
+ | `--space-5` | `12px` | Spacing step 5. |
211
+ | `--space-6` | `16px` | Spacing step 6. |
212
+ | `--radius-sm` | `6px` | Small controls and images. |
213
+ | `--radius-md` | `9px` | Buttons. |
214
+ | `--radius-lg` | `10px` | Cards. |
215
+ | `--radius-pill` | `999px` | Pills and round buttons. |
216
+ | `--control-height` | `28px` | Standard control height. |
217
+ | `--icon-button-size` | `22px` | Compact icon button. |
218
+
219
+ ### Font sizes
220
+
221
+ | Token | Value | Meaning |
222
+ | --- | --- | --- |
223
+ | `--font-size-caption` | `10px` | Eyebrow and captions. |
224
+ | `--font-size-small` | `11px` | Metadata. |
225
+ | `--font-size-button` | `13px` | Button labels. |
226
+ | `--font-size-body` | `14px` | Body text. |
227
+ | `--font-size-title` | `18px` | Section titles. |
228
+ | `--font-size-value` | `22px` | Headline values (clock, FPS). |
229
+
230
+ ### Font families
231
+
232
+ | Token | Value | Meaning |
233
+ | --- | --- | --- |
234
+ | `--font-ui` | `ui` | Noto Sans UI, the interface face. |
235
+ | `--font-mono` | `mono` | Noto Sans Mono, for values. |
236
+ | `--font-display` | `display` | Space Grotesk, for grades and scores. |
237
+
238
+ ### Durations
239
+
240
+ | Token | Value | Meaning |
241
+ | --- | --- | --- |
242
+ | `--duration-fast` | `120ms` | State transitions. |
243
+ | `--duration-medium` | `240ms` | Panels and popovers. |
244
+
245
+ ### Shadows
246
+
247
+ | Token | Dark | Light | Meaning |
248
+ | --- | --- | --- | --- |
249
+ | `--shadow-panel` | `0px 4px 16px 0px #00000066` | `0px 4px 16px 0px #0000001f` | Shadow of the widget panel and of floating host surfaces. |
250
+ <!-- /generated:tokens -->
251
+
252
+ ## Icons
253
+
254
+ The `icon` element and the rows of the options menu take the name of a
255
+ Lucide icon, in its usual spelling: `circle-check`, `rotate-ccw`,
256
+ `chevron-down`.
257
+
258
+ <!-- source: templates/list/view.ocml -->
259
+ ```xml
260
+ <icon name="x"/>
261
+ ```
262
+
263
+ <!-- generated:icons -->
264
+ Lucide 1.34.0, 1777 icons.
265
+ <!-- /generated:icons -->
266
+
267
+ Any other name is refused, and the SDK's `IconName` type lists them all, so
268
+ a wrong name in the logic is a TypeScript error. Within API v1 the set may
269
+ grow but never loses or renames an icon. OverCrow draws the icons itself: a
270
+ widget ships no icon font.
@@ -0,0 +1,266 @@
1
+ # The style
2
+
3
+ `style.ocss` styles the view of a PlayerVox OverCrow widget with a small,
4
+ bounded subset of CSS: rules, class and element selectors, flex and grid
5
+ layout, colours, borders, typography, transitions and animations. If you
6
+ know CSS you know the syntax; what differs is that the subset is closed. A
7
+ property, a selector or a value outside it is an error that
8
+ `overcrow-widget check` reports, not something that silently does nothing.
9
+
10
+ <!-- source: templates/counter/style.ocss -->
11
+ ```css
12
+ .counter {
13
+ flex-direction: column;
14
+ align-items: center;
15
+ gap: var(--space-2);
16
+ padding: var(--space-3);
17
+ }
18
+
19
+ .value {
20
+ font-size: var(--font-size-value);
21
+ font-variant-numeric: tabular-nums;
22
+ }
23
+
24
+ .actions {
25
+ gap: var(--space-2);
26
+ }
27
+
28
+ .step {
29
+ width: var(--icon-button-size);
30
+ height: var(--icon-button-size);
31
+ border-radius: var(--radius-md);
32
+ background: var(--color-surface-raised);
33
+ }
34
+
35
+ .step:hover {
36
+ background: var(--color-surface-hover);
37
+ }
38
+ ```
39
+
40
+ The file is optional. Without it, a widget takes the defaults: a `box` lays
41
+ its children out in a row, text has the theme's colour and size.
42
+
43
+ ## Rules and selectors
44
+
45
+ A rule is a list of selectors, then declarations between braces. Each
46
+ property appears at most once in a rule; the last `;` is optional.
47
+ Comments are `/* … */`.
48
+
49
+ <!-- generated:selectors -->
50
+ | Selector | Meaning |
51
+ | --- | --- |
52
+ | `text` | Element type; specificity (0, 1). |
53
+ | `.name` | Class; specificity (1, 0). |
54
+ | `:hover :active :focus :disabled :checked` | State resolved by the host; specificity (1, 0). `:checked` applies to `toggle` and `checkbox`. |
55
+ | `a b` | Descendant combinator. |
56
+ | `a > b` | Child combinator. |
57
+ | `a, b` | Selector list; each selector keeps its own specificity. |
58
+ <!-- /generated:selectors -->
59
+
60
+ A compound selector is an optional element name followed by classes and
61
+ states: `button.primary:hover`. Compounds are joined by a space
62
+ (descendant) or `>` (child).
63
+
64
+ <!-- source: widgets/warframe-market/style.ocss -->
65
+ ```css
66
+ .clear:focus,
67
+ .result:focus,
68
+ .copy:focus,
69
+ .back:focus,
70
+ .refresh:focus {
71
+ border-color: var(--color-accent);
72
+ }
73
+ ```
74
+
75
+ <!-- source: widgets/warframe-market/style.ocss -->
76
+ ```css
77
+ .clear:disabled .clear-text {
78
+ color: var(--color-text-muted);
79
+ }
80
+ ```
81
+
82
+ The states are resolved by OverCrow, not by your logic: `:hover` and
83
+ `:active` follow the pointer, `:focus` the keyboard focus, `:disabled` the
84
+ `disabled` attribute, and `:checked` the state of a `toggle` or
85
+ `checkbox`. A widget is not told about pointer moves: a hover effect costs
86
+ it nothing.
87
+
88
+ When two rules set the same property, the more specific selector wins:
89
+ classes and states count first, then element names. Between equal
90
+ selectors, the later rule wins. There is no `!important`.
91
+
92
+ ## Layout
93
+
94
+ Every container is a flex container by default (`display: flex`, in a
95
+ row). `display: grid` makes it a grid, and `display: none` removes the
96
+ element and its children from the layout while keeping them in the view.
97
+
98
+ <!-- source: templates/list/style.ocss -->
99
+ ```css
100
+ .checklist {
101
+ flex-direction: column;
102
+ gap: var(--space-2);
103
+ padding: var(--space-3);
104
+ }
105
+ ```
106
+
107
+ <!-- source: widgets/warframe-market/style.ocss -->
108
+ ```css
109
+ .metrics {
110
+ display: grid;
111
+ grid-template-columns: repeat(2, minmax(0, 1fr));
112
+ gap: var(--space-3);
113
+ }
114
+ ```
115
+
116
+ Flex and grid work as in CSS, with the properties of the
117
+ [Layout group](style-properties.md#layout): `flex-direction`, `flex-grow`,
118
+ `gap`, `justify-content`, `align-items`, `grid-template-columns`,
119
+ `grid-column`… An element can also leave the flow with
120
+ `position: absolute`, placed against its parent with `top`, `right`,
121
+ `bottom` and `left`. Two elements in the same grid cell overlap, which is
122
+ how the countdown example puts the time in the middle of its ring:
123
+
124
+ <!-- source: docs/content/examples/countdown/style.ocss -->
125
+ ```css
126
+ /* The time sits in the middle of the ring: both share one grid cell. */
127
+ .dial {
128
+ display: grid;
129
+ grid-template-columns: 72px;
130
+ grid-template-rows: 72px;
131
+ justify-content: center;
132
+ justify-items: center;
133
+ align-items: center;
134
+ }
135
+ ```
136
+
137
+ A widget cannot draw outside its frame: OverCrow clips it.
138
+
139
+ ## Values
140
+
141
+ Values are written as in CSS, within bounds: lengths in `px` (`0` may omit
142
+ the unit) and percentages, colours as `#rrggbb`, `#rrggbbaa` or
143
+ `rgb(r g b / a)`, times in `ms` or `s`, angles in `deg` or `turn`, and
144
+ tokens as `var(--name)`. The exact notation of each kind of value is in
145
+ [values](style-properties.md#values).
146
+
147
+ Lengths are logical pixels: OverCrow multiplies them by the user's content
148
+ scale (50 % to 175 %) and by the screen's density, so `12px` is the same
149
+ physical size on every screen. Shorthands expand as in CSS: one to four
150
+ values for sides and corners, one or two for gaps.
151
+
152
+ ## Design tokens
153
+
154
+ A token is a value of OverCrow's design system, written `var(--name)`.
155
+ Colour tokens change with the user's theme, light or dark: a widget styled
156
+ with tokens follows the theme without any code. Prefer them to literal
157
+ colours.
158
+
159
+ <!-- source: docs/content/examples/countdown/style.ocss -->
160
+ ```css
161
+ .start {
162
+ width: var(--control-height);
163
+ height: var(--control-height);
164
+ justify-content: center;
165
+ align-items: center;
166
+ border-radius: var(--radius-md);
167
+ background: var(--color-surface-raised);
168
+ transition: background-color var(--duration-fast) ease-out;
169
+ }
170
+ ```
171
+
172
+ A token stands for a whole value or for one part of a composite value
173
+ (`padding: var(--space-2) var(--space-4)`), and must have the type the
174
+ property expects: a colour token for a colour, a length token for a
175
+ length. There is no fallback argument, and a widget cannot declare its own
176
+ custom properties. All tokens are listed in
177
+ [design tokens](style-properties.md#design-tokens).
178
+
179
+ OverCrow draws the panel behind the widget (`--color-surface-panel`), its
180
+ frame and its shadow: start from a transparent background.
181
+
182
+ ## Text
183
+
184
+ Text properties (`color`, `font-family`, `font-size`, `font-weight`,
185
+ `line-height`, `text-align`…) are inherited, as in CSS: set them on a
186
+ container to style what it holds.
187
+
188
+ - Three font families exist: `ui` (Noto Sans, the default), `mono` (Noto
189
+ Sans Mono, for values) and `display` (Space Grotesk, for grades and
190
+ scores). OverCrow bundles them; system fonts are never used, so a widget
191
+ looks the same on every machine.
192
+ - `font-variant-numeric: tabular-nums` gives digits one width, so a
193
+ changing number does not move its neighbours.
194
+ - `text-overflow: ellipsis` cuts an overflowing line with `…`;
195
+ `text-overflow: marquee` scrolls it back and forth, pausing at each end.
196
+ `line-clamp` limits a text to a number of lines.
197
+ - An `icon` takes the `color` and the `font-size` of its place, unless
198
+ `width` and `height` are set. In a line of text, `vertical-align: middle`
199
+ centres an inline `icon` or `image` on the line.
200
+
201
+ Keep text at 11 px or more (`--font-size-small`): smaller text is hard to
202
+ read over a game.
203
+
204
+ ## Transitions and animations
205
+
206
+ `transition` animates a change of an animatable property; `animation`
207
+ plays a `@keyframes` block of the same sheet.
208
+
209
+ <!-- source: docs/content/examples/countdown/style.ocss -->
210
+ ```css
211
+ .ring.done {
212
+ color: var(--color-success);
213
+ animation: countdown-pulse 800ms ease-in-out 3 alternate;
214
+ }
215
+ ```
216
+
217
+ <!-- source: docs/content/examples/countdown/style.ocss -->
218
+ ```css
219
+ @keyframes countdown-pulse {
220
+ from { opacity: 1; }
221
+ to { opacity: 0.4; }
222
+ }
223
+ ```
224
+
225
+ Only properties that change paint, not layout, can be animated:
226
+ `opacity`, `color`, `background-color`, `border-color` and `transform`.
227
+ A `@keyframes` block holds only those. OverCrow runs the animation itself:
228
+ no timer and no code of the widget run while it plays, and nothing is
229
+ repainted when nothing changes. A widget that is hidden does not animate.
230
+
231
+ `@keyframes` is the only at-rule. Its name is an identifier that is not an
232
+ animation keyword, unique in the sheet.
233
+
234
+ ## What is refused
235
+
236
+ Any of these rejects the whole sheet:
237
+
238
+ - `!important`, `@media`, `@import`, `@font-face` and every other at-rule;
239
+ - `url()`, `calc()` and the other CSS functions; strings and escapes;
240
+ - custom property declarations (`--name: …`);
241
+ - ID, attribute and universal (`*`) selectors, pseudo-elements, functional
242
+ pseudo-classes (`:not()`, `:nth-child()`), sibling combinators;
243
+ - named colours (`red`), exponents, units other than `px`, `%`, `fr`,
244
+ `ms`, `s`, `deg` and `turn`;
245
+ - characters outside ASCII, except in comments.
246
+
247
+ There is no media query because there is nothing to query: the widget's
248
+ size is the user's, and the logic reads it from `host.viewport` when the
249
+ view must change with it.
250
+
251
+ ## When the style is wrong
252
+
253
+ | Code | Problem |
254
+ | --- | --- |
255
+ | `style.syntax`, `style.encoding`, `style.size` | The file is not a well-formed sheet. |
256
+ | `style.unsupported` | A construct of CSS outside the subset (see above). |
257
+ | `style.unknown_element`, `style.unknown_pseudo_class`, `style.invalid_selector` | A selector that names no element or state, or is not in the subset. |
258
+ | `style.unknown_property`, `style.duplicate_property` | A property outside the subset, or set twice in one rule. |
259
+ | `style.invalid_value`, `style.unknown_token` | A value the property does not accept, or a token that does not exist or has another type. |
260
+ | `style.not_animatable` | A transition or a keyframe on a property that cannot be animated. |
261
+ | `style.unknown_keyframes`, `style.duplicate_keyframes`, `style.invalid_keyframes` | An `animation` that names no block, a name used twice, or an invalid block. |
262
+ | `style.too_many_rules`, `style.too_many_selectors`, `style.too_many_compounds`, `style.too_many_simple_selectors`, `style.too_many_declarations`, `style.too_many_keyframes`, `style.too_many_stops` | A [limit](limits.md) of the style is exceeded. |
263
+
264
+ Unknown names come with the closest name of the schema as a suggestion.
265
+ Every property, its values and its initial value are in
266
+ [style properties and tokens](style-properties.md).