@overcrow/mcp 0.0.0-stage → 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.
- package/LICENSE +21 -0
- package/README.md +90 -2
- package/dist/audit/index.js +103 -0
- package/dist/audit/lexer.js +417 -0
- package/dist/audit/project.js +200 -0
- package/dist/audit/rules.js +661 -0
- package/dist/bootstrap/download.js +229 -0
- package/dist/bootstrap/install.js +280 -0
- package/dist/bootstrap/pin.js +85 -0
- package/dist/bootstrap/pin.json +119 -0
- package/dist/bootstrap/zip.js +258 -0
- package/dist/cli.js +200 -0
- package/dist/confine.js +244 -0
- package/dist/content/docs/en/cli.md +353 -0
- package/dist/content/docs/en/dev-channel.md +130 -0
- package/dist/content/docs/en/elements.md +469 -0
- package/dist/content/docs/en/forms.md +328 -0
- package/dist/content/docs/en/guide.md +253 -0
- package/dist/content/docs/en/index.md +85 -0
- package/dist/content/docs/en/limits.md +241 -0
- package/dist/content/docs/en/logic.md +446 -0
- package/dist/content/docs/en/manifest.md +381 -0
- package/dist/content/docs/en/mcp.md +165 -0
- package/dist/content/docs/en/package.md +131 -0
- package/dist/content/docs/en/publishing.md +162 -0
- package/dist/content/docs/en/reference.md +55 -0
- package/dist/content/docs/en/result-shapes.md +332 -0
- package/dist/content/docs/en/sdk.md +295 -0
- package/dist/content/docs/en/security.md +115 -0
- package/dist/content/docs/en/service-reference.md +344 -0
- package/dist/content/docs/en/services.md +517 -0
- package/dist/content/docs/en/style-properties.md +270 -0
- package/dist/content/docs/en/style.md +266 -0
- package/dist/content/docs/en/testing.md +400 -0
- package/dist/content/docs/en/view.md +338 -0
- package/dist/content/docs/en/widgets.md +76 -0
- package/dist/content/docs/fr/cli.md +367 -0
- package/dist/content/docs/fr/dev-channel.md +140 -0
- package/dist/content/docs/fr/elements.md +475 -0
- package/dist/content/docs/fr/forms.md +341 -0
- package/dist/content/docs/fr/guide.md +264 -0
- package/dist/content/docs/fr/index.md +90 -0
- package/dist/content/docs/fr/limits.md +244 -0
- package/dist/content/docs/fr/logic.md +461 -0
- package/dist/content/docs/fr/manifest.md +392 -0
- package/dist/content/docs/fr/mcp.md +173 -0
- package/dist/content/docs/fr/package.md +139 -0
- package/dist/content/docs/fr/publishing.md +172 -0
- package/dist/content/docs/fr/reference.md +59 -0
- package/dist/content/docs/fr/result-shapes.md +333 -0
- package/dist/content/docs/fr/sdk.md +301 -0
- package/dist/content/docs/fr/security.md +129 -0
- package/dist/content/docs/fr/service-reference.md +346 -0
- package/dist/content/docs/fr/services.md +540 -0
- package/dist/content/docs/fr/style-properties.md +272 -0
- package/dist/content/docs/fr/style.md +281 -0
- package/dist/content/docs/fr/testing.md +417 -0
- package/dist/content/docs/fr/view.md +352 -0
- package/dist/content/docs/fr/widgets.md +81 -0
- package/dist/content/examples/clock/LICENSE +21 -0
- package/dist/content/examples/clock/README.md +75 -0
- package/dist/content/examples/clock/listing.json +19 -0
- package/dist/content/examples/clock/locales/en.json +4 -0
- package/dist/content/examples/clock/locales/fr.json +4 -0
- package/dist/content/examples/clock/logic.ts +85 -0
- package/dist/content/examples/clock/manifest.json +44 -0
- package/dist/content/examples/clock/package.json +16 -0
- package/dist/content/examples/clock/style.ocss +26 -0
- package/dist/content/examples/clock/tests/hidden.scenario.json +68 -0
- package/dist/content/examples/clock/tests/load-logic.mjs +22 -0
- package/dist/content/examples/clock/tests/logic.test.mjs +89 -0
- package/dist/content/examples/clock/tests/options.scenario.json +108 -0
- package/dist/content/examples/clock/tests/preview.scenario.json +25 -0
- package/dist/content/examples/clock/tests/render.scenario.json +94 -0
- package/dist/content/examples/clock/tests/summer-time.scenario.json +74 -0
- package/dist/content/examples/clock/tests/ticks.scenario.json +120 -0
- package/dist/content/examples/clock/tsconfig.json +16 -0
- package/dist/content/examples/clock/view.ocml +8 -0
- package/dist/content/examples/countdown/LICENSE +20 -0
- package/dist/content/examples/countdown/listing.json +10 -0
- package/dist/content/examples/countdown/locales/en.json +15 -0
- package/dist/content/examples/countdown/locales/fr.json +15 -0
- package/dist/content/examples/countdown/logic.ts +179 -0
- package/dist/content/examples/countdown/manifest.json +34 -0
- package/dist/content/examples/countdown/package.json +15 -0
- package/dist/content/examples/countdown/style.ocss +94 -0
- package/dist/content/examples/countdown/tsconfig.json +16 -0
- package/dist/content/examples/countdown/view.ocml +42 -0
- package/dist/content/examples/fps/LICENSE +21 -0
- package/dist/content/examples/fps/README.md +64 -0
- package/dist/content/examples/fps/listing.json +19 -0
- package/dist/content/examples/fps/locales/en.json +11 -0
- package/dist/content/examples/fps/locales/fr.json +11 -0
- package/dist/content/examples/fps/logic.ts +64 -0
- package/dist/content/examples/fps/manifest.json +30 -0
- package/dist/content/examples/fps/package.json +16 -0
- package/dist/content/examples/fps/style.ocss +31 -0
- package/dist/content/examples/fps/tests/label.scenario.json +63 -0
- package/dist/content/examples/fps/tests/load-logic.mjs +22 -0
- package/dist/content/examples/fps/tests/logic.test.mjs +60 -0
- package/dist/content/examples/fps/tests/preview.scenario.json +29 -0
- package/dist/content/examples/fps/tests/refused.scenario.json +20 -0
- package/dist/content/examples/fps/tests/render.scenario.json +96 -0
- package/dist/content/examples/fps/tests/stale.scenario.json +91 -0
- package/dist/content/examples/fps/tests/unavailable.scenario.json +111 -0
- package/dist/content/examples/fps/tsconfig.json +16 -0
- package/dist/content/examples/fps/view.ocml +11 -0
- package/dist/content/examples/media/LICENSE +21 -0
- package/dist/content/examples/media/README.md +147 -0
- package/dist/content/examples/media/listing.json +19 -0
- package/dist/content/examples/media/locales/en.json +11 -0
- package/dist/content/examples/media/locales/fr.json +11 -0
- package/dist/content/examples/media/logic.ts +191 -0
- package/dist/content/examples/media/manifest.json +35 -0
- package/dist/content/examples/media/package.json +16 -0
- package/dist/content/examples/media/style.ocss +148 -0
- package/dist/content/examples/media/tests/covers.scenario.json +144 -0
- package/dist/content/examples/media/tests/gesture.scenario.json +173 -0
- package/dist/content/examples/media/tests/load-logic.mjs +22 -0
- package/dist/content/examples/media/tests/logic.test.mjs +176 -0
- package/dist/content/examples/media/tests/marquee.scenario.json +127 -0
- package/dist/content/examples/media/tests/preview.scenario.json +52 -0
- package/dist/content/examples/media/tests/read-only.scenario.json +53 -0
- package/dist/content/examples/media/tests/refused.scenario.json +22 -0
- package/dist/content/examples/media/tests/refused.test.mjs +31 -0
- package/dist/content/examples/media/tests/render.scenario.json +136 -0
- package/dist/content/examples/media/tests/states.scenario.json +257 -0
- package/dist/content/examples/media/tests/unavailable.scenario.json +120 -0
- package/dist/content/examples/media/tsconfig.json +16 -0
- package/dist/content/examples/media/view.ocml +41 -0
- package/dist/content/examples/notes/LICENSE +21 -0
- package/dist/content/examples/notes/README.md +219 -0
- package/dist/content/examples/notes/listing.json +19 -0
- package/dist/content/examples/notes/locales/en.json +25 -0
- package/dist/content/examples/notes/locales/fr.json +25 -0
- package/dist/content/examples/notes/logic.ts +799 -0
- package/dist/content/examples/notes/manifest.json +40 -0
- package/dist/content/examples/notes/package.json +16 -0
- package/dist/content/examples/notes/style.ocss +469 -0
- package/dist/content/examples/notes/tests/checks.scenario.json +237 -0
- package/dist/content/examples/notes/tests/create.scenario.json +260 -0
- package/dist/content/examples/notes/tests/delete.scenario.json +342 -0
- package/dist/content/examples/notes/tests/drafts.scenario.json +714 -0
- package/dist/content/examples/notes/tests/editor.scenario.json +232 -0
- package/dist/content/examples/notes/tests/frame.scenario.json +93 -0
- package/dist/content/examples/notes/tests/interactive.scenario.json +344 -0
- package/dist/content/examples/notes/tests/limits.scenario.json +1351 -0
- package/dist/content/examples/notes/tests/load-logic.mjs +22 -0
- package/dist/content/examples/notes/tests/logic.test.mjs +514 -0
- package/dist/content/examples/notes/tests/preview.scenario.json +99 -0
- package/dist/content/examples/notes/tests/read-only.scenario.json +105 -0
- package/dist/content/examples/notes/tests/refused.scenario.json +33 -0
- package/dist/content/examples/notes/tests/save.scenario.json +378 -0
- package/dist/content/examples/notes/tests/states.scenario.json +640 -0
- package/dist/content/examples/notes/tests/typing.scenario.json +562 -0
- package/dist/content/examples/notes/tests/unavailable.scenario.json +246 -0
- package/dist/content/examples/notes/tsconfig.json +16 -0
- package/dist/content/examples/notes/view.ocml +154 -0
- package/dist/content/examples/performance/LICENSE +21 -0
- package/dist/content/examples/performance/README.md +134 -0
- package/dist/content/examples/performance/listing.json +19 -0
- package/dist/content/examples/performance/locales/en.json +20 -0
- package/dist/content/examples/performance/locales/fr.json +20 -0
- package/dist/content/examples/performance/logic.ts +210 -0
- package/dist/content/examples/performance/manifest.json +83 -0
- package/dist/content/examples/performance/package.json +16 -0
- package/dist/content/examples/performance/style.ocss +75 -0
- package/dist/content/examples/performance/tests/fahrenheit.scenario.json +110 -0
- package/dist/content/examples/performance/tests/horizontal.scenario.json +96 -0
- package/dist/content/examples/performance/tests/load-logic.mjs +22 -0
- package/dist/content/examples/performance/tests/logic.test.mjs +226 -0
- package/dist/content/examples/performance/tests/menu.scenario.json +170 -0
- package/dist/content/examples/performance/tests/no-fps-source.scenario.json +47 -0
- package/dist/content/examples/performance/tests/preview.scenario.json +45 -0
- package/dist/content/examples/performance/tests/refused.scenario.json +20 -0
- package/dist/content/examples/performance/tests/refused.test.mjs +19 -0
- package/dist/content/examples/performance/tests/region.scenario.json +89 -0
- package/dist/content/examples/performance/tests/render.scenario.json +112 -0
- package/dist/content/examples/performance/tests/sources.scenario.json +151 -0
- package/dist/content/examples/performance/tests/stale.scenario.json +111 -0
- package/dist/content/examples/performance/tests/telemetry-only.scenario.json +44 -0
- package/dist/content/examples/performance/tests/thresholds.scenario.json +147 -0
- package/dist/content/examples/performance/tests/waiting.scenario.json +105 -0
- package/dist/content/examples/performance/tsconfig.json +16 -0
- package/dist/content/examples/performance/view.ocml +18 -0
- package/dist/content/examples/playervox-journal/LICENSE +21 -0
- package/dist/content/examples/playervox-journal/README.md +150 -0
- package/dist/content/examples/playervox-journal/listing.json +19 -0
- package/dist/content/examples/playervox-journal/locales/en.json +25 -0
- package/dist/content/examples/playervox-journal/locales/fr.json +25 -0
- package/dist/content/examples/playervox-journal/logic.ts +556 -0
- package/dist/content/examples/playervox-journal/manifest.json +19 -0
- package/dist/content/examples/playervox-journal/package.json +16 -0
- package/dist/content/examples/playervox-journal/style.ocss +142 -0
- package/dist/content/examples/playervox-journal/tests/changes.scenario.json +482 -0
- package/dist/content/examples/playervox-journal/tests/delete.scenario.json +432 -0
- package/dist/content/examples/playervox-journal/tests/frame.scenario.json +169 -0
- package/dist/content/examples/playervox-journal/tests/load-logic.mjs +22 -0
- package/dist/content/examples/playervox-journal/tests/logic.test.mjs +349 -0
- package/dist/content/examples/playervox-journal/tests/paging.scenario.json +428 -0
- package/dist/content/examples/playervox-journal/tests/preview.scenario.json +184 -0
- package/dist/content/examples/playervox-journal/tests/read-only.scenario.json +157 -0
- package/dist/content/examples/playervox-journal/tests/refused.scenario.json +39 -0
- package/dist/content/examples/playervox-journal/tests/scale.scenario.json +286 -0
- package/dist/content/examples/playervox-journal/tests/signed-out.scenario.json +134 -0
- package/dist/content/examples/playervox-journal/tests/states.scenario.json +741 -0
- package/dist/content/examples/playervox-journal/tests/unavailable.scenario.json +183 -0
- package/dist/content/examples/playervox-journal/tsconfig.json +16 -0
- package/dist/content/examples/playervox-journal/view.ocml +52 -0
- package/dist/content/examples/playervox-rating/LICENSE +21 -0
- package/dist/content/examples/playervox-rating/README.md +166 -0
- package/dist/content/examples/playervox-rating/listing.json +19 -0
- package/dist/content/examples/playervox-rating/locales/en.json +35 -0
- package/dist/content/examples/playervox-rating/locales/fr.json +35 -0
- package/dist/content/examples/playervox-rating/logic.ts +581 -0
- package/dist/content/examples/playervox-rating/manifest.json +19 -0
- package/dist/content/examples/playervox-rating/package.json +16 -0
- package/dist/content/examples/playervox-rating/style.ocss +333 -0
- package/dist/content/examples/playervox-rating/tests/account.scenario.json +125 -0
- package/dist/content/examples/playervox-rating/tests/bounds.scenario.json +73 -0
- package/dist/content/examples/playervox-rating/tests/draft.scenario.json +199 -0
- package/dist/content/examples/playervox-rating/tests/form.scenario.json +142 -0
- package/dist/content/examples/playervox-rating/tests/load-logic.mjs +22 -0
- package/dist/content/examples/playervox-rating/tests/logic.test.mjs +346 -0
- package/dist/content/examples/playervox-rating/tests/offline.scenario.json +142 -0
- package/dist/content/examples/playervox-rating/tests/preview.scenario.json +44 -0
- package/dist/content/examples/playervox-rating/tests/publish-keyboard.scenario.json +221 -0
- package/dist/content/examples/playervox-rating/tests/publish-pointer.scenario.json +314 -0
- package/dist/content/examples/playervox-rating/tests/read-only.scenario.json +70 -0
- package/dist/content/examples/playervox-rating/tests/refused.scenario.json +45 -0
- package/dist/content/examples/playervox-rating/tests/states.scenario.json +362 -0
- package/dist/content/examples/playervox-rating/tsconfig.json +16 -0
- package/dist/content/examples/playervox-rating/view.ocml +62 -0
- package/dist/content/examples/playervox-reviews/LICENSE +21 -0
- package/dist/content/examples/playervox-reviews/README.md +194 -0
- package/dist/content/examples/playervox-reviews/listing.json +19 -0
- package/dist/content/examples/playervox-reviews/locales/en.json +32 -0
- package/dist/content/examples/playervox-reviews/locales/fr.json +32 -0
- package/dist/content/examples/playervox-reviews/logic.ts +822 -0
- package/dist/content/examples/playervox-reviews/manifest.json +30 -0
- package/dist/content/examples/playervox-reviews/package.json +16 -0
- package/dist/content/examples/playervox-reviews/style.ocss +260 -0
- package/dist/content/examples/playervox-reviews/tests/account.scenario.json +249 -0
- package/dist/content/examples/playervox-reviews/tests/bounds.scenario.json +336 -0
- package/dist/content/examples/playervox-reviews/tests/changes.scenario.json +515 -0
- package/dist/content/examples/playervox-reviews/tests/filter.scenario.json +400 -0
- package/dist/content/examples/playervox-reviews/tests/frame.scenario.json +185 -0
- package/dist/content/examples/playervox-reviews/tests/keyboard.scenario.json +188 -0
- package/dist/content/examples/playervox-reviews/tests/load-logic.mjs +22 -0
- package/dist/content/examples/playervox-reviews/tests/logic.test.mjs +559 -0
- package/dist/content/examples/playervox-reviews/tests/offline-start.scenario.json +152 -0
- package/dist/content/examples/playervox-reviews/tests/offline.scenario.json +311 -0
- package/dist/content/examples/playervox-reviews/tests/paging.scenario.json +497 -0
- package/dist/content/examples/playervox-reviews/tests/preview.scenario.json +286 -0
- package/dist/content/examples/playervox-reviews/tests/reading.scenario.json +591 -0
- package/dist/content/examples/playervox-reviews/tests/refused.scenario.json +54 -0
- package/dist/content/examples/playervox-reviews/tests/scale.scenario.json +303 -0
- package/dist/content/examples/playervox-reviews/tests/states.scenario.json +700 -0
- package/dist/content/examples/playervox-reviews/tests/unavailable.scenario.json +192 -0
- package/dist/content/examples/playervox-reviews/tsconfig.json +16 -0
- package/dist/content/examples/playervox-reviews/view.ocml +110 -0
- package/dist/content/examples/playervox-score/LICENSE +21 -0
- package/dist/content/examples/playervox-score/README.md +131 -0
- package/dist/content/examples/playervox-score/listing.json +19 -0
- package/dist/content/examples/playervox-score/locales/en.json +23 -0
- package/dist/content/examples/playervox-score/locales/fr.json +23 -0
- package/dist/content/examples/playervox-score/logic.ts +430 -0
- package/dist/content/examples/playervox-score/manifest.json +47 -0
- package/dist/content/examples/playervox-score/package.json +16 -0
- package/dist/content/examples/playervox-score/style.ocss +247 -0
- package/dist/content/examples/playervox-score/tests/grades.scenario.json +279 -0
- package/dist/content/examples/playervox-score/tests/load-logic.mjs +22 -0
- package/dist/content/examples/playervox-score/tests/logic.test.mjs +229 -0
- package/dist/content/examples/playervox-score/tests/options.scenario.json +302 -0
- package/dist/content/examples/playervox-score/tests/preview.scenario.json +68 -0
- package/dist/content/examples/playervox-score/tests/pulse.scenario.json +157 -0
- package/dist/content/examples/playervox-score/tests/refused.scenario.json +21 -0
- package/dist/content/examples/playervox-score/tests/signed-out.scenario.json +46 -0
- package/dist/content/examples/playervox-score/tests/states.scenario.json +450 -0
- package/dist/content/examples/playervox-score/tests/unavailable.scenario.json +84 -0
- package/dist/content/examples/playervox-score/tsconfig.json +16 -0
- package/dist/content/examples/playervox-score/view.ocml +51 -0
- package/dist/content/examples/session/LICENSE +21 -0
- package/dist/content/examples/session/README.md +57 -0
- package/dist/content/examples/session/listing.json +19 -0
- package/dist/content/examples/session/locales/en.json +3 -0
- package/dist/content/examples/session/locales/fr.json +3 -0
- package/dist/content/examples/session/logic.ts +26 -0
- package/dist/content/examples/session/manifest.json +19 -0
- package/dist/content/examples/session/package.json +16 -0
- package/dist/content/examples/session/style.ocss +16 -0
- package/dist/content/examples/session/tests/hidden.scenario.json +45 -0
- package/dist/content/examples/session/tests/load-logic.mjs +22 -0
- package/dist/content/examples/session/tests/logic.test.mjs +37 -0
- package/dist/content/examples/session/tests/preview.scenario.json +28 -0
- package/dist/content/examples/session/tests/refused.scenario.json +20 -0
- package/dist/content/examples/session/tests/refused.test.mjs +16 -0
- package/dist/content/examples/session/tests/render.scenario.json +95 -0
- package/dist/content/examples/session/tests/ticks.scenario.json +139 -0
- package/dist/content/examples/session/tests/unknown.scenario.json +37 -0
- package/dist/content/examples/session/tsconfig.json +16 -0
- package/dist/content/examples/session/view.ocml +11 -0
- package/dist/content/examples/stopwatch/LICENSE +21 -0
- package/dist/content/examples/stopwatch/README.md +99 -0
- package/dist/content/examples/stopwatch/listing.json +19 -0
- package/dist/content/examples/stopwatch/locales/en.json +8 -0
- package/dist/content/examples/stopwatch/locales/fr.json +8 -0
- package/dist/content/examples/stopwatch/logic.ts +93 -0
- package/dist/content/examples/stopwatch/manifest.json +19 -0
- package/dist/content/examples/stopwatch/package.json +16 -0
- package/dist/content/examples/stopwatch/style.ocss +54 -0
- package/dist/content/examples/stopwatch/tests/errors.scenario.json +121 -0
- package/dist/content/examples/stopwatch/tests/gesture.scenario.json +154 -0
- package/dist/content/examples/stopwatch/tests/hidden.scenario.json +57 -0
- package/dist/content/examples/stopwatch/tests/hundredths.scenario.json +173 -0
- package/dist/content/examples/stopwatch/tests/load-logic.mjs +22 -0
- package/dist/content/examples/stopwatch/tests/logic.test.mjs +99 -0
- package/dist/content/examples/stopwatch/tests/preview.scenario.json +36 -0
- package/dist/content/examples/stopwatch/tests/read-only.scenario.json +42 -0
- package/dist/content/examples/stopwatch/tests/read-only.test.mjs +18 -0
- package/dist/content/examples/stopwatch/tests/refused.scenario.json +22 -0
- package/dist/content/examples/stopwatch/tests/refused.test.mjs +18 -0
- package/dist/content/examples/stopwatch/tests/render.scenario.json +105 -0
- package/dist/content/examples/stopwatch/tests/states.scenario.json +246 -0
- package/dist/content/examples/stopwatch/tests/unknown.scenario.json +40 -0
- package/dist/content/examples/stopwatch/tsconfig.json +16 -0
- package/dist/content/examples/stopwatch/view.ocml +29 -0
- package/dist/content/examples/twitch-chat/LICENSE +21 -0
- package/dist/content/examples/twitch-chat/README.md +283 -0
- package/dist/content/examples/twitch-chat/listing.json +19 -0
- package/dist/content/examples/twitch-chat/locales/en.json +52 -0
- package/dist/content/examples/twitch-chat/locales/fr.json +52 -0
- package/dist/content/examples/twitch-chat/logic.ts +887 -0
- package/dist/content/examples/twitch-chat/manifest.json +33 -0
- package/dist/content/examples/twitch-chat/package.json +16 -0
- package/dist/content/examples/twitch-chat/style.ocss +544 -0
- package/dist/content/examples/twitch-chat/tests/account.scenario.json +325 -0
- package/dist/content/examples/twitch-chat/tests/burst.scenario.json +1866 -0
- package/dist/content/examples/twitch-chat/tests/channel-refused.scenario.json +372 -0
- package/dist/content/examples/twitch-chat/tests/channel.scenario.json +480 -0
- package/dist/content/examples/twitch-chat/tests/draft.scenario.json +279 -0
- package/dist/content/examples/twitch-chat/tests/fade.scenario.json +269 -0
- package/dist/content/examples/twitch-chat/tests/failures.scenario.json +420 -0
- package/dist/content/examples/twitch-chat/tests/favorites.scenario.json +376 -0
- package/dist/content/examples/twitch-chat/tests/frame.scenario.json +152 -0
- package/dist/content/examples/twitch-chat/tests/lifetime.scenario.json +186 -0
- package/dist/content/examples/twitch-chat/tests/load-logic.mjs +22 -0
- package/dist/content/examples/twitch-chat/tests/logic.test.mjs +1053 -0
- package/dist/content/examples/twitch-chat/tests/passive.scenario.json +536 -0
- package/dist/content/examples/twitch-chat/tests/preview.scenario.json +147 -0
- package/dist/content/examples/twitch-chat/tests/read-only.scenario.json +202 -0
- package/dist/content/examples/twitch-chat/tests/read-only.test.mjs +63 -0
- package/dist/content/examples/twitch-chat/tests/refused.scenario.json +65 -0
- package/dist/content/examples/twitch-chat/tests/refused.test.mjs +43 -0
- package/dist/content/examples/twitch-chat/tests/render.scenario.json +347 -0
- package/dist/content/examples/twitch-chat/tests/reply.scenario.json +384 -0
- package/dist/content/examples/twitch-chat/tests/send-refused.scenario.json +383 -0
- package/dist/content/examples/twitch-chat/tests/send.scenario.json +300 -0
- package/dist/content/examples/twitch-chat/tests/states.scenario.json +455 -0
- package/dist/content/examples/twitch-chat/tests/unavailable.scenario.json +256 -0
- package/dist/content/examples/twitch-chat/tests/unread.scenario.json +997 -0
- package/dist/content/examples/twitch-chat/tsconfig.json +16 -0
- package/dist/content/examples/twitch-chat/view.ocml +141 -0
- package/dist/content/examples/warframe-market/LICENSE +21 -0
- package/dist/content/examples/warframe-market/README.md +176 -0
- package/dist/content/examples/warframe-market/listing.json +19 -0
- package/dist/content/examples/warframe-market/locales/en.json +44 -0
- package/dist/content/examples/warframe-market/locales/fr.json +44 -0
- package/dist/content/examples/warframe-market/logic.ts +1265 -0
- package/dist/content/examples/warframe-market/manifest.json +92 -0
- package/dist/content/examples/warframe-market/package.json +16 -0
- package/dist/content/examples/warframe-market/style.ocss +422 -0
- package/dist/content/examples/warframe-market/tests/bounds.scenario.json +60 -0
- package/dist/content/examples/warframe-market/tests/cached.scenario.json +70 -0
- package/dist/content/examples/warframe-market/tests/detail.scenario.json +251 -0
- package/dist/content/examples/warframe-market/tests/errors.scenario.json +105 -0
- package/dist/content/examples/warframe-market/tests/fixtures.json +295 -0
- package/dist/content/examples/warframe-market/tests/load-logic.mjs +22 -0
- package/dist/content/examples/warframe-market/tests/logic.test.mjs +505 -0
- package/dist/content/examples/warframe-market/tests/no-clipboard.scenario.json +104 -0
- package/dist/content/examples/warframe-market/tests/passive.scenario.json +87 -0
- package/dist/content/examples/warframe-market/tests/preview.scenario.json +146 -0
- package/dist/content/examples/warframe-market/tests/refresh.scenario.json +56 -0
- package/dist/content/examples/warframe-market/tests/refused.scenario.json +74 -0
- package/dist/content/examples/warframe-market/tests/render.scenario.json +210 -0
- package/dist/content/examples/warframe-market/tests/search.scenario.json +189 -0
- package/dist/content/examples/warframe-market/tests/unavailable.scenario.json +54 -0
- package/dist/content/examples/warframe-market/tsconfig.json +16 -0
- package/dist/content/examples/warframe-market/view.ocml +116 -0
- package/dist/content/examples/weather/LICENSE +20 -0
- package/dist/content/examples/weather/listing.json +10 -0
- package/dist/content/examples/weather/locales/en.json +9 -0
- package/dist/content/examples/weather/locales/fr.json +9 -0
- package/dist/content/examples/weather/logic.ts +62 -0
- package/dist/content/examples/weather/manifest.json +51 -0
- package/dist/content/examples/weather/package.json +15 -0
- package/dist/content/examples/weather/style.ocss +29 -0
- package/dist/content/examples/weather/tsconfig.json +16 -0
- package/dist/content/examples/weather/view.ocml +12 -0
- package/dist/content/index.json +3601 -0
- package/dist/content/reference/errors.json +1712 -0
- package/dist/content/reference/limits.json +1154 -0
- package/dist/content/reference/manifest.md +223 -0
- package/dist/content/reference/permissions.json +413 -0
- package/dist/content/templates/blank/locales/en.json +3 -0
- package/dist/content/templates/blank/locales/fr.json +3 -0
- package/dist/content/templates/blank/logic.ts +7 -0
- package/dist/content/templates/blank/manifest.json +16 -0
- package/dist/content/templates/blank/style.ocss +10 -0
- package/dist/content/templates/blank/tests/example.scenario.json +10 -0
- package/dist/content/templates/blank/view.ocml +6 -0
- package/dist/content/templates/chart/locales/en.json +3 -0
- package/dist/content/templates/chart/locales/fr.json +3 -0
- package/dist/content/templates/chart/logic.ts +27 -0
- package/dist/content/templates/chart/manifest.json +16 -0
- package/dist/content/templates/chart/style.ocss +27 -0
- package/dist/content/templates/chart/tests/example.scenario.json +10 -0
- package/dist/content/templates/chart/view.ocml +10 -0
- package/dist/content/templates/counter/locales/en.json +4 -0
- package/dist/content/templates/counter/locales/fr.json +4 -0
- package/dist/content/templates/counter/logic.ts +20 -0
- package/dist/content/templates/counter/manifest.json +16 -0
- package/dist/content/templates/counter/style.ocss +26 -0
- package/dist/content/templates/counter/tests/example.scenario.json +11 -0
- package/dist/content/templates/counter/view.ocml +13 -0
- package/dist/content/templates/list/locales/en.json +8 -0
- package/dist/content/templates/list/locales/fr.json +8 -0
- package/dist/content/templates/list/logic.ts +35 -0
- package/dist/content/templates/list/manifest.json +16 -0
- package/dist/content/templates/list/style.ocss +42 -0
- package/dist/content/templates/list/tests/example.scenario.json +10 -0
- package/dist/content/templates/list/view.ocml +17 -0
- package/dist/content/templates/shared/LICENSE +20 -0
- package/dist/content/templates/shared/package.json +14 -0
- package/dist/content/templates/shared/tsconfig.json +16 -0
- package/dist/content.js +68 -0
- package/dist/env.js +156 -0
- package/dist/fingerprint.js +32 -0
- package/dist/ids.js +27 -0
- package/dist/index.js +82 -0
- package/dist/knowledge.js +222 -0
- package/dist/npm.js +149 -0
- package/dist/prompts.js +47 -0
- package/dist/resources.js +82 -0
- package/dist/run.js +120 -0
- package/dist/server.js +43 -0
- package/dist/session.js +205 -0
- package/dist/sources.js +218 -0
- package/dist/text.js +80 -0
- package/dist/texts.js +44 -0
- package/dist/tools/audit.js +105 -0
- package/dist/tools/build.js +453 -0
- package/dist/tools/common.js +122 -0
- package/dist/tools/docs.js +196 -0
- package/dist/tools/preview.js +87 -0
- package/dist/tools/project.js +178 -0
- package/dist/tools/setup.js +146 -0
- package/dist/tools/submission.js +369 -0
- package/dist/version.js +3 -0
- package/npm-shrinkwrap.json +402 -0
- package/package.json +52 -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).
|