@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.
- package/LICENSE +21 -0
- package/README.md +91 -1
- 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 +50 -4
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# The development channel
|
|
2
|
+
|
|
3
|
+
`overcrow-widget dev` shows your widget in the PlayerVox OverCrow overlay
|
|
4
|
+
running on your machine, over your game, and reloads it each time you save
|
|
5
|
+
a file. It reaches the overlay through the **development channel**, which
|
|
6
|
+
OverCrow opens only when you ask for it.
|
|
7
|
+
|
|
8
|
+
```sh
|
|
9
|
+
overcrow-widget doctor
|
|
10
|
+
overcrow-widget dev
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
`doctor` says whether a running overlay offers the channel; `dev` then
|
|
14
|
+
builds the widget, sends it and stays in the foreground until Ctrl+C.
|
|
15
|
+
|
|
16
|
+
## Turn it on
|
|
17
|
+
|
|
18
|
+
The channel exists only while OverCrow runs with development installs
|
|
19
|
+
allowed: started with the environment variable
|
|
20
|
+
`OVERCROW_WIDGET_DEVELOPMENT=1`. Without it, the overlay opens nothing.
|
|
21
|
+
|
|
22
|
+
**Linux.** Set the variable for your session's services, then restart the
|
|
23
|
+
overlay:
|
|
24
|
+
|
|
25
|
+
```sh
|
|
26
|
+
systemctl --user set-environment OVERCROW_WIDGET_DEVELOPMENT=1
|
|
27
|
+
systemctl --user restart overcrow-overlay.service
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
To turn it off, unset the variable and restart again (or log out):
|
|
31
|
+
|
|
32
|
+
```sh
|
|
33
|
+
systemctl --user unset-environment OVERCROW_WIDGET_DEVELOPMENT
|
|
34
|
+
systemctl --user restart overcrow-overlay.service
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**Windows.** Quit OverCrow from its tray icon, then start it from
|
|
38
|
+
PowerShell:
|
|
39
|
+
|
|
40
|
+
```text
|
|
41
|
+
$env:OVERCROW_WIDGET_DEVELOPMENT='1'; & "$env:LOCALAPPDATA\Programs\OverCrow\OverCrow.exe"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
`overcrow-widget doctor` prints these commands when it finds an overlay
|
|
45
|
+
without the channel (`doctor.development_off`).
|
|
46
|
+
|
|
47
|
+
## What a development widget is
|
|
48
|
+
|
|
49
|
+
The overlay treats what `dev` sends as a **development package**:
|
|
50
|
+
|
|
51
|
+
- it is validated in full, exactly as an installed package is, and runs in
|
|
52
|
+
the same sandbox: nothing sent over the channel skips a check;
|
|
53
|
+
- it is marked **Unverified · development package** in both modes, so it
|
|
54
|
+
cannot be mistaken for a widget of the catalog;
|
|
55
|
+
- the permissions its manifest declares are granted for the session only;
|
|
56
|
+
- nothing of it is stored: its storage lasts as long as the session, and it
|
|
57
|
+
never reads or writes the data of an installed widget;
|
|
58
|
+
- it takes the place of an installed widget of the same ID for the
|
|
59
|
+
session, and the installed widget comes back when it is removed;
|
|
60
|
+
- IDs under `com.playervox.` are refused.
|
|
61
|
+
|
|
62
|
+
When `dev` ends, for any reason, the overlay removes the widget.
|
|
63
|
+
|
|
64
|
+
## What `dev` prints
|
|
65
|
+
|
|
66
|
+
For each save, `dev` rebuilds the package and prints the same diagnostics
|
|
67
|
+
as `check`. A build with errors is not sent: the widget keeps running its
|
|
68
|
+
last good build. Then come the overlay's reports.
|
|
69
|
+
|
|
70
|
+
**States** of the widget:
|
|
71
|
+
|
|
72
|
+
| State | Meaning |
|
|
73
|
+
| --- | --- |
|
|
74
|
+
| `starting` | The overlay is starting the widget's process. |
|
|
75
|
+
| `running` | The widget runs. |
|
|
76
|
+
| `restarting` | It failed and is being restarted; the failure is shown. |
|
|
77
|
+
| `failed` | It failed too often: it waits for your next save. |
|
|
78
|
+
| `refused` | The overlay refused to start it. |
|
|
79
|
+
| `stopped` | It was stopped. |
|
|
80
|
+
|
|
81
|
+
**Failures** that come with `restarting` and `failed`:
|
|
82
|
+
|
|
83
|
+
<!-- generated:failure-categories -->
|
|
84
|
+
| Category | Restarted | Meaning |
|
|
85
|
+
| --- | --- | --- |
|
|
86
|
+
| `invalid_bundle` | no | Package, ledger or compiled content rejected. |
|
|
87
|
+
| `permission_denied` | no | What the widget declares, what the user granted and what is requested disagree. |
|
|
88
|
+
| `protocol_violation` | no | What the widget sent to the host is malformed, unknown or out of order. |
|
|
89
|
+
| `resource_limit` | yes | A memory, CPU, queue, rate or size ceiling was exceeded. |
|
|
90
|
+
| `unresponsive` | yes | The widget did not start or answer in time, or exceeded the time budget of a turn. |
|
|
91
|
+
| `vm_exited` | yes | The widget's process ended without reporting a fault (killed by the sandbox, out of memory). |
|
|
92
|
+
<!-- /generated:failure-categories -->
|
|
93
|
+
|
|
94
|
+
**Logs**: each `log.debug`, `log.info`, `log.warn` and `log.error` of the
|
|
95
|
+
logic, with its level. A log line is cut at 512 characters, and control
|
|
96
|
+
characters, terminal escape sequences and bidirectional controls are shown
|
|
97
|
+
escaped (`\u{1b}`), never interpreted: a widget's text cannot take over
|
|
98
|
+
your terminal.
|
|
99
|
+
|
|
100
|
+
With `--format json`, each of these is one JSON object per line: the
|
|
101
|
+
diagnostics, `{"type":"built",…}` for each build, then the overlay's
|
|
102
|
+
messages (`state`, `log`, `event`…) as they come.
|
|
103
|
+
|
|
104
|
+
## When it does not connect
|
|
105
|
+
|
|
106
|
+
| What you see | Cause |
|
|
107
|
+
| --- | --- |
|
|
108
|
+
| `doctor.development_off` | No running overlay allows development installs: [turn it on](#turn-it-on). |
|
|
109
|
+
| `doctor.overcrow_missing` | OverCrow is not installed. |
|
|
110
|
+
| `doctor.channel_busy`, `too_many_sessions` | Four `dev` sessions are already connected to this overlay. |
|
|
111
|
+
| `doctor.protocol_version`, `unsupported_protocol` | The overlay and the tool do not speak the same version of the channel: update the older one. |
|
|
112
|
+
| `doctor.channel_untrusted` | What answers on the channel's address is not your own overlay. |
|
|
113
|
+
| `busy` | Another install or removal is in progress: `dev` tries again. |
|
|
114
|
+
| `conflict` | Another `dev` session installed a widget with this ID. |
|
|
115
|
+
| `invalid_bundle` | The overlay's validation refused the package; a reserved `com.playervox.*` ID is one cause. |
|
|
116
|
+
| `development_disabled` | The overlay no longer allows development installs. |
|
|
117
|
+
| `unavailable` | The overlay could not start its widget runtime, or did not answer within 30 seconds. |
|
|
118
|
+
| `rate_limited` | More than 10 requests per second: saves are arriving faster than the overlay accepts them. |
|
|
119
|
+
|
|
120
|
+
## Who can use the channel
|
|
121
|
+
|
|
122
|
+
Only programs running as **your own user** on the same machine: the channel
|
|
123
|
+
is a local socket (Linux) or a named pipe (Windows) that other users, other
|
|
124
|
+
machines and sandboxed programs cannot open, and each end checks the other
|
|
125
|
+
before a session starts. Widgets cannot use it: their sandbox has no access
|
|
126
|
+
to it.
|
|
127
|
+
|
|
128
|
+
This is why the channel is off by default. With it on, any program you run
|
|
129
|
+
can show an unverified widget in your overlay, for as long as OverCrow
|
|
130
|
+
runs. Turn it off when you are done.
|
|
@@ -0,0 +1,469 @@
|
|
|
1
|
+
# Elements and attributes
|
|
2
|
+
|
|
3
|
+
The view of a PlayerVox OverCrow widget is made of a closed set of
|
|
4
|
+
elements. This page lists each one with its content, its attributes and
|
|
5
|
+
the events it can send. [The view](view.md) explains the markup around
|
|
6
|
+
them: expressions, `if`, `for`, components.
|
|
7
|
+
|
|
8
|
+
<!-- source: templates/chart/view.ocml -->
|
|
9
|
+
```xml
|
|
10
|
+
<box class="panel">
|
|
11
|
+
<box class="header">
|
|
12
|
+
<text class="title">{t("title")}</text>
|
|
13
|
+
<text class="value">{latest(state.values)}</text>
|
|
14
|
+
</box>
|
|
15
|
+
<chart class="plot" kind="area" min="0" max="100">
|
|
16
|
+
<series class="series" values={state.values}/>
|
|
17
|
+
</chart>
|
|
18
|
+
</box>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Two `box` containers, two `text` elements bound to the state, and a `chart`
|
|
22
|
+
with one `series`: OverCrow draws all of it, the chart included.
|
|
23
|
+
|
|
24
|
+
## How to read an element
|
|
25
|
+
|
|
26
|
+
- **Content** is what the element may hold: *flow* is any element that can
|
|
27
|
+
stand on its own in a container (all but `span`, `option` and `series`);
|
|
28
|
+
*inline* is the content of a `text`; *text* is plain text; *empty* means
|
|
29
|
+
the element is written `<name …/>`.
|
|
30
|
+
- **Parents** says where the element may be: *any flow* is any container.
|
|
31
|
+
- **Keyboard focus**: *always* for controls; *when subscribed* for an
|
|
32
|
+
element that takes the focus only when the view listens to one of its
|
|
33
|
+
events (`on:activate`…); *never* otherwise.
|
|
34
|
+
- **Role** is what assistive technology is told the element is.
|
|
35
|
+
- **Events** are the events the view may listen to with `on:<event>`.
|
|
36
|
+
|
|
37
|
+
A type such as "text ≤ 256 bytes" gives a [limit](limits.md).
|
|
38
|
+
|
|
39
|
+
## Attributes of every element
|
|
40
|
+
|
|
41
|
+
<!-- generated:common-attributes -->
|
|
42
|
+
| Attribute | Type | Required | Meaning |
|
|
43
|
+
| --- | --- | --- | --- |
|
|
44
|
+
| `class` | class list | no | Style classes: distinct names separated by one space. |
|
|
45
|
+
| `ref` | static `ref` name | no | Name by which `draw` designates this `canvas` and by which an attribute such as the `anchor` of a `popover` designates this element. Static, unique in the view, and not allowed inside a `for` or a component body, where it would name several elements. |
|
|
46
|
+
| `label` | text ≤ 256 bytes | no | Accessible name; required on icon-only controls. |
|
|
47
|
+
| `tooltip` | text ≤ 256 bytes | no | Plain text drawn by the host on hover or focus. |
|
|
48
|
+
| `on` | sorted event names | no | Events forwarded to the logic; written `on:<event>` in the view. |
|
|
49
|
+
<!-- /generated:common-attributes -->
|
|
50
|
+
|
|
51
|
+
## Elements
|
|
52
|
+
|
|
53
|
+
<!-- generated:elements -->
|
|
54
|
+
### `box`
|
|
55
|
+
|
|
56
|
+
Generic container; flex or grid layout comes from style. The root of the view is a `box`.
|
|
57
|
+
|
|
58
|
+
| Content | Parents | Keyboard focus | Role | Events |
|
|
59
|
+
| --- | --- | --- | --- | --- |
|
|
60
|
+
| flow | any flow | when subscribed | `group` | `activate`, `contextmenu`, `wheel`, `keydown`, `focus`, `blur` |
|
|
61
|
+
|
|
62
|
+
No attribute of its own.
|
|
63
|
+
|
|
64
|
+
### `scroll`
|
|
65
|
+
|
|
66
|
+
Clipping container scrolled by the host with wheel, drag and keyboard.
|
|
67
|
+
|
|
68
|
+
| Content | Parents | Keyboard focus | Role | Events |
|
|
69
|
+
| --- | --- | --- | --- | --- |
|
|
70
|
+
| flow | any flow | never | `scroll-view` | `reachend`, `stick`, `contextmenu` |
|
|
71
|
+
|
|
72
|
+
| Attribute | Type | Required | Meaning |
|
|
73
|
+
| --- | --- | --- | --- |
|
|
74
|
+
| `axis` | `vertical` \| `horizontal` | no | Scroll direction; default `vertical`. |
|
|
75
|
+
| `stick-to-end` | boolean | no | Stay at the end while content grows, until the user scrolls away (chat). Setting it again after it was off scrolls to the end. |
|
|
76
|
+
|
|
77
|
+
### `list`
|
|
78
|
+
|
|
79
|
+
Vertical scrolling list whose children are laid out and painted only when visible.
|
|
80
|
+
|
|
81
|
+
| Content | Parents | Keyboard focus | Role | Events |
|
|
82
|
+
| --- | --- | --- | --- | --- |
|
|
83
|
+
| flow | any flow | never | `list` | `reachend`, `stick`, `contextmenu` |
|
|
84
|
+
|
|
85
|
+
| Attribute | Type | Required | Meaning |
|
|
86
|
+
| --- | --- | --- | --- |
|
|
87
|
+
| `stick-to-end` | boolean | no | As for `scroll`. |
|
|
88
|
+
| `item-height` | integer 1 to 4096 | no | Estimated child height used before a child is first measured. |
|
|
89
|
+
|
|
90
|
+
### `text`
|
|
91
|
+
|
|
92
|
+
Block of wrapped text; its inline children flow with it (chat line with emotes).
|
|
93
|
+
|
|
94
|
+
| Content | Parents | Keyboard focus | Role | Events |
|
|
95
|
+
| --- | --- | --- | --- | --- |
|
|
96
|
+
| inline: `span`, `icon`, `image` | any flow | when subscribed | `label` | `activate`, `contextmenu`, `wheel`, `keydown`, `focus`, `blur` |
|
|
97
|
+
|
|
98
|
+
| Attribute | Type | Required | Meaning |
|
|
99
|
+
| --- | --- | --- | --- |
|
|
100
|
+
| `selectable` | boolean | no | The user can select the text and copy it through the host; no widget permission involved. |
|
|
101
|
+
|
|
102
|
+
### `span`
|
|
103
|
+
|
|
104
|
+
Styled run of text inside `text`.
|
|
105
|
+
|
|
106
|
+
| Content | Parents | Keyboard focus | Role | Events |
|
|
107
|
+
| --- | --- | --- | --- | --- |
|
|
108
|
+
| text | `text` | never | `label` | none |
|
|
109
|
+
|
|
110
|
+
| Attribute | Type | Required | Meaning |
|
|
111
|
+
| --- | --- | --- | --- |
|
|
112
|
+
| `color` | opaque `#rrggbb` | no | Colour from data, such as a chat author's; overrides the style colour, and the host raises its contrast to at least 4.5:1 against the panel. |
|
|
113
|
+
|
|
114
|
+
### `icon`
|
|
115
|
+
|
|
116
|
+
Lucide icon tinted with `color`, sized by `font-size` unless `width` and `height` are set.
|
|
117
|
+
|
|
118
|
+
| Content | Parents | Keyboard focus | Role | Events |
|
|
119
|
+
| --- | --- | --- | --- | --- |
|
|
120
|
+
| empty | any flow | when subscribed | `image` | `activate`, `contextmenu`, `wheel`, `keydown`, `focus`, `blur` |
|
|
121
|
+
|
|
122
|
+
| Attribute | Type | Required | Meaning |
|
|
123
|
+
| --- | --- | --- | --- |
|
|
124
|
+
| `name` | Lucide icon name | yes | Icon name, for example `circle-check`. |
|
|
125
|
+
|
|
126
|
+
### `image`
|
|
127
|
+
|
|
128
|
+
Raster image from the package, or an image handed by a service (an `asset:` handle); `object-fit` applies.
|
|
129
|
+
|
|
130
|
+
| Content | Parents | Keyboard focus | Role | Events |
|
|
131
|
+
| --- | --- | --- | --- | --- |
|
|
132
|
+
| empty | any flow | when subscribed | `image` | `activate`, `contextmenu`, `wheel`, `keydown`, `focus`, `blur` |
|
|
133
|
+
|
|
134
|
+
| Attribute | Type | Required | Meaning |
|
|
135
|
+
| --- | --- | --- | --- |
|
|
136
|
+
| `src` | image source | yes | Image source. |
|
|
137
|
+
|
|
138
|
+
### `avatar`
|
|
139
|
+
|
|
140
|
+
Round image with a text fallback while the image is missing or failed.
|
|
141
|
+
|
|
142
|
+
| Content | Parents | Keyboard focus | Role | Events |
|
|
143
|
+
| --- | --- | --- | --- | --- |
|
|
144
|
+
| empty | any flow | when subscribed | `image` | `activate`, `contextmenu`, `wheel`, `keydown`, `focus`, `blur` |
|
|
145
|
+
|
|
146
|
+
| Attribute | Type | Required | Meaning |
|
|
147
|
+
| --- | --- | --- | --- |
|
|
148
|
+
| `src` | image source | no | Image source. |
|
|
149
|
+
| `initials` | text ≤ 16 bytes | no | Fallback text. |
|
|
150
|
+
|
|
151
|
+
### `badge`
|
|
152
|
+
|
|
153
|
+
Short pill of text.
|
|
154
|
+
|
|
155
|
+
| Content | Parents | Keyboard focus | Role | Events |
|
|
156
|
+
| --- | --- | --- | --- | --- |
|
|
157
|
+
| text | any flow | when subscribed | `label` | `activate`, `contextmenu`, `wheel` |
|
|
158
|
+
|
|
159
|
+
No attribute of its own.
|
|
160
|
+
|
|
161
|
+
### `button`
|
|
162
|
+
|
|
163
|
+
Activatable control; its children (icon, text) form its content.
|
|
164
|
+
|
|
165
|
+
| Content | Parents | Keyboard focus | Role | Events |
|
|
166
|
+
| --- | --- | --- | --- | --- |
|
|
167
|
+
| flow | any flow | always | `button` | `activate`, `contextmenu`, `wheel`, `keydown`, `focus`, `blur` |
|
|
168
|
+
|
|
169
|
+
| Attribute | Type | Required | Meaning |
|
|
170
|
+
| --- | --- | --- | --- |
|
|
171
|
+
| `disabled` | boolean | no | Rejects input; matches `:disabled`. |
|
|
172
|
+
| `submit` | boolean | no | Submits the enclosing `form`. |
|
|
173
|
+
|
|
174
|
+
### `toggle`
|
|
175
|
+
|
|
176
|
+
On/off switch.
|
|
177
|
+
|
|
178
|
+
| Content | Parents | Keyboard focus | Role | Events |
|
|
179
|
+
| --- | --- | --- | --- | --- |
|
|
180
|
+
| empty | any flow | always | `switch` | `change`, `focus`, `blur`, `contextmenu` |
|
|
181
|
+
|
|
182
|
+
| Attribute | Type | Required | Meaning |
|
|
183
|
+
| --- | --- | --- | --- |
|
|
184
|
+
| `checked` | boolean | no | State; matches `:checked`. |
|
|
185
|
+
| `disabled` | boolean | no | Rejects input; matches `:disabled`. |
|
|
186
|
+
| `name` | identifier ≤ 64 bytes | no | Field name inside a `form`. |
|
|
187
|
+
|
|
188
|
+
### `checkbox`
|
|
189
|
+
|
|
190
|
+
Check control (checklists).
|
|
191
|
+
|
|
192
|
+
| Content | Parents | Keyboard focus | Role | Events |
|
|
193
|
+
| --- | --- | --- | --- | --- |
|
|
194
|
+
| empty | any flow | always | `check-box` | `change`, `focus`, `blur`, `contextmenu` |
|
|
195
|
+
|
|
196
|
+
| Attribute | Type | Required | Meaning |
|
|
197
|
+
| --- | --- | --- | --- |
|
|
198
|
+
| `checked` | boolean | no | State; matches `:checked`. |
|
|
199
|
+
| `disabled` | boolean | no | Rejects input; matches `:disabled`. |
|
|
200
|
+
| `name` | identifier ≤ 64 bytes | no | Field name inside a `form`. |
|
|
201
|
+
|
|
202
|
+
### `slider`
|
|
203
|
+
|
|
204
|
+
Numeric range control; dragging is handled by the host.
|
|
205
|
+
|
|
206
|
+
| Content | Parents | Keyboard focus | Role | Events |
|
|
207
|
+
| --- | --- | --- | --- | --- |
|
|
208
|
+
| empty | any flow | always | `slider` | `input`, `change`, `focus`, `blur`, `contextmenu` |
|
|
209
|
+
|
|
210
|
+
| Attribute | Type | Required | Meaning |
|
|
211
|
+
| --- | --- | --- | --- |
|
|
212
|
+
| `min` | number -1000000000 to 1000000000 | yes | Lower bound. |
|
|
213
|
+
| `max` | number -1000000000 to 1000000000 | yes | Upper bound, greater than `min`. |
|
|
214
|
+
| `step` | number -1000000000 to 1000000000 | no | Positive increment; default 1. |
|
|
215
|
+
| `value` | number -1000000000 to 1000000000 | no | Current value, clamped to the range; rejected on a slider bound to a write intent. |
|
|
216
|
+
| `disabled` | boolean | no | Rejects input; matches `:disabled`. |
|
|
217
|
+
| `name` | identifier ≤ 64 bytes | no | Field name inside a `form`. |
|
|
218
|
+
|
|
219
|
+
### `select`
|
|
220
|
+
|
|
221
|
+
Drop-down choice; the open list is drawn by the host.
|
|
222
|
+
|
|
223
|
+
| Content | Parents | Keyboard focus | Role | Events |
|
|
224
|
+
| --- | --- | --- | --- | --- |
|
|
225
|
+
| `option` | any flow | always | `combo-box` | `change`, `focus`, `blur`, `contextmenu` |
|
|
226
|
+
|
|
227
|
+
| Attribute | Type | Required | Meaning |
|
|
228
|
+
| --- | --- | --- | --- |
|
|
229
|
+
| `value` | text ≤ 1 KiB | no | Selected option value. |
|
|
230
|
+
| `disabled` | boolean | no | Rejects input; matches `:disabled`. |
|
|
231
|
+
| `name` | identifier ≤ 64 bytes | no | Field name inside a `form`. |
|
|
232
|
+
|
|
233
|
+
### `option`
|
|
234
|
+
|
|
235
|
+
Choice of a `select`; its text is the visible label.
|
|
236
|
+
|
|
237
|
+
| Content | Parents | Keyboard focus | Role | Events |
|
|
238
|
+
| --- | --- | --- | --- | --- |
|
|
239
|
+
| text | `select` | never | `list-box-option` | none |
|
|
240
|
+
|
|
241
|
+
| Attribute | Type | Required | Meaning |
|
|
242
|
+
| --- | --- | --- | --- |
|
|
243
|
+
| `value` | text ≤ 1 KiB | yes | Value reported by `change`. |
|
|
244
|
+
| `disabled` | boolean | no | Rejects input; matches `:disabled`. |
|
|
245
|
+
|
|
246
|
+
### `field`
|
|
247
|
+
|
|
248
|
+
Single-line text input edited by the host, input methods (IME) included.
|
|
249
|
+
|
|
250
|
+
| Content | Parents | Keyboard focus | Role | Events |
|
|
251
|
+
| --- | --- | --- | --- | --- |
|
|
252
|
+
| empty | any flow | always | `text-input` | `input`, `change`, `submit`, `keydown`, `focus`, `blur`, `contextmenu` |
|
|
253
|
+
|
|
254
|
+
| Attribute | Type | Required | Meaning |
|
|
255
|
+
| --- | --- | --- | --- |
|
|
256
|
+
| `value` | text ≤ 16 KiB | no | Replaces the content; rejected on a field bound to a write intent. |
|
|
257
|
+
| `placeholder` | text ≤ 256 bytes | no | Hint shown while empty. |
|
|
258
|
+
| `max-length` | integer 1 to 16384 | no | Content limit in bytes; a write intent may impose a lower one. |
|
|
259
|
+
| `disabled` | boolean | no | Rejects input; matches `:disabled`. |
|
|
260
|
+
| `name` | identifier ≤ 64 bytes | no | Field name inside a `form`. |
|
|
261
|
+
| `autofocus` | boolean | no | Takes keyboard focus when the element appears while the logic handles a user action (an editor opened by a click), in Interactive mode, in the widget that received the action; the first such element of the view when several appear together. Never when the widget starts, from a timer or the answer of a service, in Passive mode, or when set on an element already shown. |
|
|
262
|
+
|
|
263
|
+
### `textarea`
|
|
264
|
+
|
|
265
|
+
Multi-line text input edited by the host, input methods (IME) included.
|
|
266
|
+
|
|
267
|
+
| Content | Parents | Keyboard focus | Role | Events |
|
|
268
|
+
| --- | --- | --- | --- | --- |
|
|
269
|
+
| empty | any flow | always | `multiline-text-input` | `input`, `change`, `submit`, `keydown`, `focus`, `blur`, `contextmenu` |
|
|
270
|
+
|
|
271
|
+
| Attribute | Type | Required | Meaning |
|
|
272
|
+
| --- | --- | --- | --- |
|
|
273
|
+
| `value` | text ≤ 16 KiB | no | As for `field`. |
|
|
274
|
+
| `placeholder` | text ≤ 256 bytes | no | Hint shown while empty. |
|
|
275
|
+
| `max-length` | integer 1 to 16384 | no | As for `field`. |
|
|
276
|
+
| `rows` | integer 1 to 40 | no | Visible rows before scrolling; default 3. |
|
|
277
|
+
| `disabled` | boolean | no | Rejects input; matches `:disabled`. |
|
|
278
|
+
| `name` | identifier ≤ 64 bytes | no | Field name inside a `form`. |
|
|
279
|
+
| `autofocus` | boolean | no | Takes keyboard focus when the element appears while the logic handles a user action (an editor opened by a click), in Interactive mode, in the widget that received the action; the first such element of the view when several appear together. Never when the widget starts, from a timer or the answer of a service, in Passive mode, or when set on an element already shown. |
|
|
280
|
+
|
|
281
|
+
### `form`
|
|
282
|
+
|
|
283
|
+
Groups named controls. With `intent`, submitting sends their values to a write service directly from the host; the widget's logic never supplies that content.
|
|
284
|
+
|
|
285
|
+
| Content | Parents | Keyboard focus | Role | Events |
|
|
286
|
+
| --- | --- | --- | --- | --- |
|
|
287
|
+
| flow | any flow | never | `form` | `submit` |
|
|
288
|
+
|
|
289
|
+
| Attribute | Type | Required | Meaning |
|
|
290
|
+
| --- | --- | --- | --- |
|
|
291
|
+
| `intent` | `notes.save` \| `playervox.rating.publish` \| `twitch.chat.send` | no | Bound write intent. |
|
|
292
|
+
| `target` | text ≤ 1 KiB | no | Opaque ID of the edited object (note, reply parent), checked by the service. |
|
|
293
|
+
|
|
294
|
+
### `elapsed`
|
|
295
|
+
|
|
296
|
+
Duration text advanced by the host from an anchor given by a service, so a running stopwatch needs no work from the logic. Styled like `text`; repainted only when the shown text changes, at most at 60 Hz, and never while hidden.
|
|
297
|
+
|
|
298
|
+
| Content | Parents | Keyboard focus | Role | Events |
|
|
299
|
+
| --- | --- | --- | --- | --- |
|
|
300
|
+
| empty | any flow | when subscribed | `timer` | `activate`, `contextmenu`, `wheel` |
|
|
301
|
+
|
|
302
|
+
| Attribute | Type | Required | Meaning |
|
|
303
|
+
| --- | --- | --- | --- |
|
|
304
|
+
| `base` | integer 0 to 9007199254740991 | yes | Elapsed milliseconds at `at`. |
|
|
305
|
+
| `at` | integer 0 to 9007199254740991 | yes | Host monotonic milliseconds from the service result. |
|
|
306
|
+
| `running` | boolean | no | Advance from `at`; default `false`. |
|
|
307
|
+
| `format` | `hh:mm:ss` \| `hh:mm:ss.cc` \| `mm:ss` | yes | Hours grow past 99; `cc` are hundredths, truncated. |
|
|
308
|
+
|
|
309
|
+
### `progress`
|
|
310
|
+
|
|
311
|
+
Horizontal progress bar.
|
|
312
|
+
|
|
313
|
+
| Content | Parents | Keyboard focus | Role | Events |
|
|
314
|
+
| --- | --- | --- | --- | --- |
|
|
315
|
+
| empty | any flow | when subscribed | `progress-indicator` | `activate`, `contextmenu`, `wheel` |
|
|
316
|
+
|
|
317
|
+
| Attribute | Type | Required | Meaning |
|
|
318
|
+
| --- | --- | --- | --- |
|
|
319
|
+
| `value` | number -1000000000 to 1000000000 | yes | Current value. |
|
|
320
|
+
| `max` | number -1000000000 to 1000000000 | no | Positive upper bound; default 1. |
|
|
321
|
+
|
|
322
|
+
### `gauge`
|
|
323
|
+
|
|
324
|
+
Ring or arc gauge.
|
|
325
|
+
|
|
326
|
+
| Content | Parents | Keyboard focus | Role | Events |
|
|
327
|
+
| --- | --- | --- | --- | --- |
|
|
328
|
+
| empty | any flow | when subscribed | `meter` | `activate`, `contextmenu`, `wheel` |
|
|
329
|
+
|
|
330
|
+
| Attribute | Type | Required | Meaning |
|
|
331
|
+
| --- | --- | --- | --- |
|
|
332
|
+
| `value` | number -1000000000 to 1000000000 | yes | Current value. |
|
|
333
|
+
| `max` | number -1000000000 to 1000000000 | no | Positive upper bound; default 1. |
|
|
334
|
+
| `shape` | `ring` \| `arc` | no | Default `ring`. |
|
|
335
|
+
|
|
336
|
+
### `chart`
|
|
337
|
+
|
|
338
|
+
Line, area, bar or sparkline chart drawn by the host.
|
|
339
|
+
|
|
340
|
+
| Content | Parents | Keyboard focus | Role | Events |
|
|
341
|
+
| --- | --- | --- | --- | --- |
|
|
342
|
+
| `series` | any flow | when subscribed | `figure` | `activate`, `contextmenu`, `wheel` |
|
|
343
|
+
|
|
344
|
+
| Attribute | Type | Required | Meaning |
|
|
345
|
+
| --- | --- | --- | --- |
|
|
346
|
+
| `kind` | `line` \| `area` \| `bar` \| `sparkline` | yes | Chart type. |
|
|
347
|
+
| `min` | number -1000000000 to 1000000000 | no | Fixed lower bound of the value axis. |
|
|
348
|
+
| `max` | number -1000000000 to 1000000000 | no | Fixed upper bound of the value axis. |
|
|
349
|
+
|
|
350
|
+
### `series`
|
|
351
|
+
|
|
352
|
+
One data series of a `chart`, coloured with `color`.
|
|
353
|
+
|
|
354
|
+
| Content | Parents | Keyboard focus | Role | Events |
|
|
355
|
+
| --- | --- | --- | --- | --- |
|
|
356
|
+
| empty | `chart` | never | `figure` | none |
|
|
357
|
+
|
|
358
|
+
| Attribute | Type | Required | Meaning |
|
|
359
|
+
| --- | --- | --- | --- |
|
|
360
|
+
| `values` | number list ≤ 1024 | yes | Values in order. |
|
|
361
|
+
|
|
362
|
+
### `separator`
|
|
363
|
+
|
|
364
|
+
Thin rule between groups.
|
|
365
|
+
|
|
366
|
+
| Content | Parents | Keyboard focus | Role | Events |
|
|
367
|
+
| --- | --- | --- | --- | --- |
|
|
368
|
+
| empty | any flow | never | `splitter` | none |
|
|
369
|
+
|
|
370
|
+
| Attribute | Type | Required | Meaning |
|
|
371
|
+
| --- | --- | --- | --- |
|
|
372
|
+
| `axis` | `vertical` \| `horizontal` | no | Default `horizontal`. |
|
|
373
|
+
|
|
374
|
+
### `canvas`
|
|
375
|
+
|
|
376
|
+
Surface painted by the host from the latest list of commands given to `draw`.
|
|
377
|
+
|
|
378
|
+
| Content | Parents | Keyboard focus | Role | Events |
|
|
379
|
+
| --- | --- | --- | --- | --- |
|
|
380
|
+
| empty | any flow | when subscribed | `image` | `activate`, `contextmenu`, `wheel`, `keydown`, `focus`, `blur` |
|
|
381
|
+
|
|
382
|
+
No attribute of its own.
|
|
383
|
+
|
|
384
|
+
### `popover`
|
|
385
|
+
|
|
386
|
+
Floating panel anchored to an element, drawn above the content and clipped to the widget's frame (drop-downs, context menus).
|
|
387
|
+
|
|
388
|
+
| Content | Parents | Keyboard focus | Role | Events |
|
|
389
|
+
| --- | --- | --- | --- | --- |
|
|
390
|
+
| flow | any flow | never | `menu` | `dismiss` |
|
|
391
|
+
|
|
392
|
+
| Attribute | Type | Required | Meaning |
|
|
393
|
+
| --- | --- | --- | --- |
|
|
394
|
+
| `anchor` | `ref` name | yes | `ref` of the element the panel is placed against. |
|
|
395
|
+
| `open` | boolean | no | Visibility; the host closes it and sends `dismiss`. |
|
|
396
|
+
| `placement` | `below` \| `above` \| `start` \| `end` \| `pointer` | no | Preferred side, or the last pointer position; default `below`. |
|
|
397
|
+
<!-- /generated:elements -->
|
|
398
|
+
|
|
399
|
+
## Events
|
|
400
|
+
|
|
401
|
+
<!-- generated:events -->
|
|
402
|
+
| Event | User action | Detail | Meaning |
|
|
403
|
+
| --- | --- | --- | --- |
|
|
404
|
+
| `activate` | **yes** | `x`, `y` | Primary click, or Enter or Space on the focused element. |
|
|
405
|
+
| `contextmenu` | **yes** | `x`, `y` | Secondary click, Menu key or Shift+F10. |
|
|
406
|
+
| `wheel` | no | `dx`, `dy` | Wheel or touchpad scroll over an element that is not a scroll container. |
|
|
407
|
+
| `keydown` | **yes** | `key`, `ctrl`, `alt`, `shift`, `meta`, `repeat` | Key pressed while the element has focus in Interactive mode. Keys reserved by the host (Tab traversal, OverCrow shortcuts, input method composition) are never delivered. |
|
|
408
|
+
| `input` | **yes** | `value` | Value edited (text, slider drag). Read-only copy; the host keeps the content. |
|
|
409
|
+
| `change` | **yes** | `value` | Value committed: blur or Enter for text, release for a slider, any change for toggle, checkbox and select. |
|
|
410
|
+
| `submit` | **yes** | `outcome`, `error` | Form submitted by Enter in a field, Ctrl+Enter in a `field` or `textarea`, or a `submit` button; a write intent may keep plain Enter for moving between its fields. With an intent, carries the outcome of the write. |
|
|
411
|
+
| `focus` | no | none | The element gained keyboard focus. |
|
|
412
|
+
| `blur` | no | none | The element lost keyboard focus. |
|
|
413
|
+
| `reachend` | no | none | Scrolled within one viewport of the end (load more, history). |
|
|
414
|
+
| `stick` | no | `stuck` | The user scrolled a container away from its end, or back to it (unread count, return to the latest). Content growing never sends it. |
|
|
415
|
+
| `dismiss` | no | none | The host closed a popover (Escape, outside click, anchor removed). |
|
|
416
|
+
<!-- /generated:events -->
|
|
417
|
+
|
|
418
|
+
An event marked as a user action allows a
|
|
419
|
+
[protected service call](services.md#calls-that-need-a-user-action) while
|
|
420
|
+
the logic handles it. The detail is what a handler receives; in a handler
|
|
421
|
+
written as a call, it is named `event`:
|
|
422
|
+
|
|
423
|
+
<!-- source: widgets/twitch-chat/view.ocml -->
|
|
424
|
+
```xml
|
|
425
|
+
<list class="history" stick-to-end={state.following} item-height="20" label={heading(state)} on:stick={stuck(event.stuck)}>
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
The named keys of `keydown` are:
|
|
429
|
+
|
|
430
|
+
<!-- generated:named-keys -->
|
|
431
|
+
`Enter`, `Escape`, `Backspace`, `Delete`, `ArrowUp`, `ArrowDown`, `ArrowLeft`, `ArrowRight`, `Home`, `End`, `PageUp`, `PageDown`.
|
|
432
|
+
<!-- /generated:named-keys -->
|
|
433
|
+
|
|
434
|
+
Any other `key` is one printable character.
|
|
435
|
+
|
|
436
|
+
## Default sizes
|
|
437
|
+
|
|
438
|
+
The elements that OverCrow draws take these sizes, in logical pixels at
|
|
439
|
+
100 %, unless the style sets `width` or `height`. Any other element is
|
|
440
|
+
sized by its content and by the style: a `canvas` has no size until the
|
|
441
|
+
style gives it one.
|
|
442
|
+
|
|
443
|
+
<!-- generated:default-sizes -->
|
|
444
|
+
| Element | When | Width | Height |
|
|
445
|
+
| --- | --- | --- | --- |
|
|
446
|
+
| `icon` | always | `font-size` | `font-size` |
|
|
447
|
+
| `image` | always | decoded image, else 0 | decoded image, else 0 |
|
|
448
|
+
| `avatar` | always | decoded image, else 28 | decoded image, else 28 |
|
|
449
|
+
| `toggle` | always | 32 | 18 |
|
|
450
|
+
| `checkbox` | always | 16 | 16 |
|
|
451
|
+
| `slider` | always | 120 | 18 |
|
|
452
|
+
| `progress` | always | 120 | 6 |
|
|
453
|
+
| `gauge` | `shape="arc"` | 48 | 32 |
|
|
454
|
+
| `gauge` | always | 48 | 48 |
|
|
455
|
+
| `chart` | always | 160 | 48 |
|
|
456
|
+
| `field` | always | 160 | max(`--control-height`, line height) |
|
|
457
|
+
| `textarea` | always | 160 | `rows` line heights |
|
|
458
|
+
| `separator` | `axis="vertical"` | 1 | 0 |
|
|
459
|
+
| `separator` | always | 0 | 1 |
|
|
460
|
+
| `select` | always | its text | its text |
|
|
461
|
+
| `elapsed` | always | its text | its text |
|
|
462
|
+
<!-- /generated:default-sizes -->
|
|
463
|
+
|
|
464
|
+
<!-- source: docs/content/examples/countdown/style.ocss -->
|
|
465
|
+
```css
|
|
466
|
+
.dots {
|
|
467
|
+
height: 12px;
|
|
468
|
+
}
|
|
469
|
+
```
|