@velarscript/web 0.31.0 → 0.33.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/README.md +1 -1
- package/dist/analysis/calls/intrinsics/config.d.ts +10 -0
- package/dist/analysis/calls/intrinsics/config.d.ts.map +1 -0
- package/dist/analysis/calls/intrinsics/config.js +19 -0
- package/dist/analysis/calls/intrinsics/config.js.map +1 -0
- package/dist/analysis/calls/intrinsics/forms.d.ts +10 -0
- package/dist/analysis/calls/intrinsics/forms.d.ts.map +1 -0
- package/dist/analysis/calls/intrinsics/forms.js +38 -0
- package/dist/analysis/calls/intrinsics/forms.js.map +1 -0
- package/dist/analysis/calls/intrinsics/http.d.ts +10 -0
- package/dist/analysis/calls/intrinsics/http.d.ts.map +1 -0
- package/dist/analysis/calls/intrinsics/http.js +37 -0
- package/dist/analysis/calls/intrinsics/http.js.map +1 -0
- package/dist/analysis/calls/intrinsics/reactive.d.ts +10 -0
- package/dist/analysis/calls/intrinsics/reactive.d.ts.map +1 -0
- package/dist/analysis/calls/intrinsics/reactive.js +30 -0
- package/dist/analysis/calls/intrinsics/reactive.js.map +1 -0
- package/dist/analysis/calls/intrinsics/storage.d.ts +16 -0
- package/dist/analysis/calls/intrinsics/storage.d.ts.map +1 -0
- package/dist/analysis/calls/intrinsics/storage.js +91 -0
- package/dist/analysis/calls/intrinsics/storage.js.map +1 -0
- package/dist/analysis/calls/intrinsics/web.d.ts +10 -0
- package/dist/analysis/calls/intrinsics/web.d.ts.map +1 -0
- package/dist/analysis/calls/intrinsics/web.js +100 -0
- package/dist/analysis/calls/intrinsics/web.js.map +1 -0
- package/dist/analysis/calls/intrinsics.d.ts +13 -0
- package/dist/analysis/calls/intrinsics.d.ts.map +1 -0
- package/dist/analysis/calls/intrinsics.js +31 -0
- package/dist/analysis/calls/intrinsics.js.map +1 -0
- package/dist/analysis/components/contracts.d.ts +19 -0
- package/dist/analysis/components/contracts.d.ts.map +1 -0
- package/dist/analysis/components/contracts.js +83 -0
- package/dist/analysis/components/contracts.js.map +1 -0
- package/dist/analysis/components/declaration.d.ts +4 -0
- package/dist/analysis/components/declaration.d.ts.map +1 -0
- package/dist/analysis/components/declaration.js +163 -0
- package/dist/analysis/components/declaration.js.map +1 -0
- package/dist/analysis/components/host.d.ts +61 -0
- package/dist/analysis/components/host.d.ts.map +1 -0
- package/dist/analysis/components/host.js +22 -0
- package/dist/analysis/components/host.js.map +1 -0
- package/dist/analysis/components/lifecycle.d.ts +22 -0
- package/dist/analysis/components/lifecycle.d.ts.map +1 -0
- package/dist/analysis/components/lifecycle.js +33 -0
- package/dist/analysis/components/lifecycle.js.map +1 -0
- package/dist/analysis/components/ownership.d.ts +74 -0
- package/dist/analysis/components/ownership.d.ts.map +1 -0
- package/dist/analysis/components/ownership.js +106 -0
- package/dist/analysis/components/ownership.js.map +1 -0
- package/dist/analysis/declarations.d.ts +99 -0
- package/dist/analysis/declarations.d.ts.map +1 -0
- package/dist/analysis/declarations.js +176 -0
- package/dist/analysis/declarations.js.map +1 -0
- package/dist/analysis/inference.d.ts +75 -0
- package/dist/analysis/inference.d.ts.map +1 -0
- package/dist/analysis/inference.js +257 -0
- package/dist/analysis/inference.js.map +1 -0
- package/dist/analysis/jsx/attributes.d.ts +103 -0
- package/dist/analysis/jsx/attributes.d.ts.map +1 -0
- package/dist/analysis/jsx/attributes.js +601 -0
- package/dist/analysis/jsx/attributes.js.map +1 -0
- package/dist/analysis/jsx/elements.d.ts +17 -0
- package/dist/analysis/jsx/elements.d.ts.map +1 -0
- package/dist/analysis/jsx/elements.js +213 -0
- package/dist/analysis/jsx/elements.js.map +1 -0
- package/dist/analysis/jsx/host.d.ts +61 -0
- package/dist/analysis/jsx/host.d.ts.map +1 -0
- package/dist/analysis/jsx/host.js +15 -0
- package/dist/analysis/jsx/host.js.map +1 -0
- package/dist/analysis/jsx/keys.d.ts +15 -0
- package/dist/analysis/jsx/keys.d.ts.map +1 -0
- package/dist/analysis/jsx/keys.js +67 -0
- package/dist/analysis/jsx/keys.js.map +1 -0
- package/dist/analysis/jsx/security.d.ts +29 -0
- package/dist/analysis/jsx/security.d.ts.map +1 -0
- package/dist/analysis/jsx/security.js +61 -0
- package/dist/analysis/jsx/security.js.map +1 -0
- package/dist/analysis/jsx-detection.d.ts +49 -0
- package/dist/analysis/jsx-detection.d.ts.map +1 -0
- package/dist/analysis/jsx-detection.js +196 -0
- package/dist/analysis/jsx-detection.js.map +1 -0
- package/dist/analysis/keyed-rebuild.d.ts +148 -0
- package/dist/analysis/keyed-rebuild.d.ts.map +1 -0
- package/dist/analysis/keyed-rebuild.js +299 -0
- package/dist/analysis/keyed-rebuild.js.map +1 -0
- package/dist/analysis/keyframes-analysis.d.ts +6 -0
- package/dist/analysis/keyframes-analysis.d.ts.map +1 -0
- package/dist/analysis/keyframes-analysis.js +79 -0
- package/dist/analysis/keyframes-analysis.js.map +1 -0
- package/dist/analysis/look/builders.d.ts +29 -0
- package/dist/analysis/look/builders.d.ts.map +1 -0
- package/dist/analysis/look/builders.js +174 -0
- package/dist/analysis/look/builders.js.map +1 -0
- package/dist/analysis/look/conditions.d.ts +13 -0
- package/dist/analysis/look/conditions.d.ts.map +1 -0
- package/dist/analysis/look/conditions.js +84 -0
- package/dist/analysis/look/conditions.js.map +1 -0
- package/dist/analysis/look/edits.d.ts +36 -0
- package/dist/analysis/look/edits.d.ts.map +1 -0
- package/dist/analysis/look/edits.js +80 -0
- package/dist/analysis/look/edits.js.map +1 -0
- package/dist/analysis/look/entries.d.ts +56 -0
- package/dist/analysis/look/entries.d.ts.map +1 -0
- package/dist/analysis/look/entries.js +223 -0
- package/dist/analysis/look/entries.js.map +1 -0
- package/dist/analysis/look/host.d.ts +47 -0
- package/dist/analysis/look/host.d.ts.map +1 -0
- package/dist/analysis/look/host.js +16 -0
- package/dist/analysis/look/host.js.map +1 -0
- package/dist/analysis/look/tokens.d.ts +75 -0
- package/dist/analysis/look/tokens.d.ts.map +1 -0
- package/dist/analysis/look/tokens.js +156 -0
- package/dist/analysis/look/tokens.js.map +1 -0
- package/dist/analysis/look/values.d.ts +45 -0
- package/dist/analysis/look/values.d.ts.map +1 -0
- package/dist/analysis/look/values.js +148 -0
- package/dist/analysis/look/values.js.map +1 -0
- package/dist/analysis/look-conditions.d.ts +47 -0
- package/dist/analysis/look-conditions.d.ts.map +1 -0
- package/dist/analysis/look-conditions.js +157 -0
- package/dist/analysis/look-conditions.js.map +1 -0
- package/dist/analysis/look-sites.d.ts +62 -0
- package/dist/analysis/look-sites.d.ts.map +1 -0
- package/dist/analysis/look-sites.js +121 -0
- package/dist/analysis/look-sites.js.map +1 -0
- package/dist/analysis/look-values.d.ts +19 -0
- package/dist/analysis/look-values.d.ts.map +1 -1
- package/dist/analysis/look-values.js +38 -0
- package/dist/analysis/look-values.js.map +1 -1
- package/dist/analysis/look-vocabulary-guidance.d.ts +76 -0
- package/dist/analysis/look-vocabulary-guidance.d.ts.map +1 -0
- package/dist/analysis/look-vocabulary-guidance.js +338 -0
- package/dist/analysis/look-vocabulary-guidance.js.map +1 -0
- package/dist/analysis/media-conditions.d.ts +33 -0
- package/dist/analysis/media-conditions.d.ts.map +1 -0
- package/dist/analysis/media-conditions.js +92 -0
- package/dist/analysis/media-conditions.js.map +1 -0
- package/dist/analysis/program-passes.d.ts +106 -0
- package/dist/analysis/program-passes.d.ts.map +1 -0
- package/dist/analysis/program-passes.js +149 -0
- package/dist/analysis/program-passes.js.map +1 -0
- package/dist/analysis/reactivity/bindings.d.ts +37 -0
- package/dist/analysis/reactivity/bindings.d.ts.map +1 -0
- package/dist/analysis/reactivity/bindings.js +88 -0
- package/dist/analysis/reactivity/bindings.js.map +1 -0
- package/dist/analysis/reactivity/derived.d.ts +39 -0
- package/dist/analysis/reactivity/derived.d.ts.map +1 -0
- package/dist/analysis/reactivity/derived.js +80 -0
- package/dist/analysis/reactivity/derived.js.map +1 -0
- package/dist/analysis/reactivity/host.d.ts +38 -0
- package/dist/analysis/reactivity/host.d.ts.map +1 -0
- package/dist/analysis/reactivity/host.js +14 -0
- package/dist/analysis/reactivity/host.js.map +1 -0
- package/dist/analysis/reactivity/retired-accessors.d.ts +82 -0
- package/dist/analysis/reactivity/retired-accessors.d.ts.map +1 -0
- package/dist/analysis/reactivity/retired-accessors.js +118 -0
- package/dist/analysis/reactivity/retired-accessors.js.map +1 -0
- package/dist/analysis/renderable.d.ts +47 -0
- package/dist/analysis/renderable.d.ts.map +1 -0
- package/dist/analysis/renderable.js +105 -0
- package/dist/analysis/renderable.js.map +1 -0
- package/dist/analysis/routes.d.ts +64 -0
- package/dist/analysis/routes.d.ts.map +1 -0
- package/dist/analysis/routes.js +182 -0
- package/dist/analysis/routes.js.map +1 -0
- package/dist/analysis/url-attributes.d.ts +12 -0
- package/dist/analysis/url-attributes.d.ts.map +1 -0
- package/dist/analysis/url-attributes.js +48 -0
- package/dist/analysis/url-attributes.js.map +1 -0
- package/dist/analysis/watch-cycles.d.ts +102 -0
- package/dist/analysis/watch-cycles.d.ts.map +1 -1
- package/dist/analysis/watch-cycles.js +240 -1
- package/dist/analysis/watch-cycles.js.map +1 -1
- package/dist/analysis/watch-subject.d.ts +45 -0
- package/dist/analysis/watch-subject.d.ts.map +1 -0
- package/dist/analysis/watch-subject.js +272 -0
- package/dist/analysis/watch-subject.js.map +1 -0
- package/dist/analysis/web-types.d.ts +27 -0
- package/dist/analysis/web-types.d.ts.map +1 -0
- package/dist/analysis/web-types.js +170 -0
- package/dist/analysis/web-types.js.map +1 -0
- package/dist/analyzer.d.ts +18 -617
- package/dist/analyzer.d.ts.map +1 -1
- package/dist/analyzer.js +211 -4853
- package/dist/analyzer.js.map +1 -1
- package/dist/compiler.d.ts +20 -0
- package/dist/compiler.d.ts.map +1 -1
- package/dist/compiler.js +31 -864
- package/dist/compiler.js.map +1 -1
- package/dist/documentation.d.ts +28 -0
- package/dist/documentation.d.ts.map +1 -0
- package/dist/documentation.js +67 -0
- package/dist/documentation.js.map +1 -0
- package/dist/editor/completions.d.ts +12 -0
- package/dist/editor/completions.d.ts.map +1 -0
- package/dist/editor/completions.js +6 -0
- package/dist/editor/completions.js.map +1 -0
- package/dist/editor/jsx-completion.d.ts +12 -0
- package/dist/editor/jsx-completion.d.ts.map +1 -0
- package/dist/editor/jsx-completion.js +137 -0
- package/dist/editor/jsx-completion.js.map +1 -0
- package/dist/editor/look-completion.d.ts +29 -0
- package/dist/editor/look-completion.d.ts.map +1 -0
- package/dist/editor/look-completion.js +159 -0
- package/dist/editor/look-completion.js.map +1 -0
- package/dist/editor.d.ts.map +1 -1
- package/dist/editor.js +12 -288
- package/dist/editor.js.map +1 -1
- package/dist/emit/components.d.ts +33 -0
- package/dist/emit/components.d.ts.map +1 -0
- package/dist/emit/components.js +135 -0
- package/dist/emit/components.js.map +1 -0
- package/dist/emit/jsx.d.ts +57 -0
- package/dist/emit/jsx.d.ts.map +1 -0
- package/dist/emit/jsx.js +384 -0
- package/dist/emit/jsx.js.map +1 -0
- package/dist/emit/look-css.d.ts +44 -0
- package/dist/emit/look-css.d.ts.map +1 -0
- package/dist/emit/look-css.js +177 -0
- package/dist/emit/look-css.js.map +1 -0
- package/dist/emit/look.d.ts +39 -0
- package/dist/emit/look.d.ts.map +1 -0
- package/dist/emit/look.js +218 -0
- package/dist/emit/look.js.map +1 -0
- package/dist/emit/runtime-imports.d.ts +40 -0
- package/dist/emit/runtime-imports.d.ts.map +1 -0
- package/dist/emit/runtime-imports.js +188 -0
- package/dist/emit/runtime-imports.js.map +1 -0
- package/dist/emitter.d.ts +15 -68
- package/dist/emitter.d.ts.map +1 -1
- package/dist/emitter.js +79 -1008
- package/dist/emitter.js.map +1 -1
- package/dist/look/animation.d.ts +7 -0
- package/dist/look/animation.d.ts.map +1 -0
- package/dist/look/animation.js +13 -0
- package/dist/look/animation.js.map +1 -0
- package/dist/look/builders.d.ts +35 -0
- package/dist/look/builders.d.ts.map +1 -0
- package/dist/look/builders.js +74 -0
- package/dist/look/builders.js.map +1 -0
- package/dist/look/css-functions.d.ts +28 -0
- package/dist/look/css-functions.d.ts.map +1 -0
- package/dist/look/css-functions.js +54 -0
- package/dist/look/css-functions.js.map +1 -0
- package/dist/look/keyword-sets.d.ts +41 -0
- package/dist/look/keyword-sets.d.ts.map +1 -0
- package/dist/look/keyword-sets.js +117 -0
- package/dist/look/keyword-sets.js.map +1 -0
- package/dist/look/keywords.d.ts +55 -0
- package/dist/look/keywords.d.ts.map +1 -0
- package/dist/look/keywords.js +387 -0
- package/dist/look/keywords.js.map +1 -0
- package/dist/look/media.d.ts +19 -0
- package/dist/look/media.d.ts.map +1 -0
- package/dist/look/media.js +27 -0
- package/dist/look/media.js.map +1 -0
- package/dist/look/naming.d.ts +9 -0
- package/dist/look/naming.d.ts.map +1 -0
- package/dist/look/naming.js +45 -0
- package/dist/look/naming.js.map +1 -0
- package/dist/look/properties.d.ts +16 -0
- package/dist/look/properties.d.ts.map +1 -0
- package/dist/look/properties.js +52 -0
- package/dist/look/properties.js.map +1 -0
- package/dist/look/shorthands.d.ts +25 -0
- package/dist/look/shorthands.d.ts.map +1 -0
- package/dist/look/shorthands.js +130 -0
- package/dist/look/shorthands.js.map +1 -0
- package/dist/look/tokens.d.ts +38 -0
- package/dist/look/tokens.d.ts.map +1 -0
- package/dist/look/tokens.js +59 -0
- package/dist/look/tokens.js.map +1 -0
- package/dist/look/units.d.ts +24 -0
- package/dist/look/units.d.ts.map +1 -0
- package/dist/look/units.js +33 -0
- package/dist/look/units.js.map +1 -0
- package/dist/look.d.ts +32 -227
- package/dist/look.d.ts.map +1 -1
- package/dist/look.js +28 -933
- package/dist/look.js.map +1 -1
- package/dist/module-roster.d.ts +16 -0
- package/dist/module-roster.d.ts.map +1 -0
- package/dist/module-roster.js +28 -0
- package/dist/module-roster.js.map +1 -0
- package/dist/modules/app.d.ts +9 -0
- package/dist/modules/app.d.ts.map +1 -0
- package/dist/modules/app.js +20 -0
- package/dist/modules/app.js.map +1 -0
- package/dist/modules/browser-test.d.ts +9 -0
- package/dist/modules/browser-test.d.ts.map +1 -0
- package/dist/modules/browser-test.js +67 -0
- package/dist/modules/browser-test.js.map +1 -0
- package/dist/modules/browser.d.ts +10 -0
- package/dist/modules/browser.d.ts.map +1 -0
- package/dist/modules/browser.js +89 -0
- package/dist/modules/browser.js.map +1 -0
- package/dist/modules/config.d.ts +9 -0
- package/dist/modules/config.d.ts.map +1 -0
- package/dist/modules/config.js +14 -0
- package/dist/modules/config.js.map +1 -0
- package/dist/modules/files.d.ts +9 -0
- package/dist/modules/files.d.ts.map +1 -0
- package/dist/modules/files.js +16 -0
- package/dist/modules/files.js.map +1 -0
- package/dist/modules/forms.d.ts +9 -0
- package/dist/modules/forms.d.ts.map +1 -0
- package/dist/modules/forms.js +26 -0
- package/dist/modules/forms.js.map +1 -0
- package/dist/modules/http.d.ts +9 -0
- package/dist/modules/http.d.ts.map +1 -0
- package/dist/modules/http.js +127 -0
- package/dist/modules/http.js.map +1 -0
- package/dist/modules/look.d.ts +9 -0
- package/dist/modules/look.d.ts.map +1 -0
- package/dist/modules/look.js +58 -0
- package/dist/modules/look.js.map +1 -0
- package/dist/modules/realtime.d.ts +9 -0
- package/dist/modules/realtime.d.ts.map +1 -0
- package/dist/modules/realtime.js +163 -0
- package/dist/modules/realtime.js.map +1 -0
- package/dist/modules/storage.d.ts +9 -0
- package/dist/modules/storage.d.ts.map +1 -0
- package/dist/modules/storage.js +59 -0
- package/dist/modules/storage.js.map +1 -0
- package/dist/modules/types.d.ts +78 -0
- package/dist/modules/types.d.ts.map +1 -0
- package/dist/modules/types.js +154 -0
- package/dist/modules/types.js.map +1 -0
- package/dist/modules/web.d.ts +9 -0
- package/dist/modules/web.d.ts.map +1 -0
- package/dist/modules/web.js +63 -0
- package/dist/modules/web.js.map +1 -0
- package/dist/modules/websocket.d.ts +11 -0
- package/dist/modules/websocket.d.ts.map +1 -0
- package/dist/modules/websocket.js +75 -0
- package/dist/modules/websocket.js.map +1 -0
- package/dist/parser/expressions/jsx.d.ts +17 -0
- package/dist/parser/expressions/jsx.d.ts.map +1 -0
- package/dist/parser/expressions/jsx.js +43 -0
- package/dist/parser/expressions/jsx.js.map +1 -0
- package/dist/parser/expressions/keyframes.d.ts +15 -0
- package/dist/parser/expressions/keyframes.d.ts.map +1 -0
- package/dist/parser/expressions/keyframes.js +33 -0
- package/dist/parser/expressions/keyframes.js.map +1 -0
- package/dist/parser/expressions/look.d.ts +16 -0
- package/dist/parser/expressions/look.d.ts.map +1 -0
- package/dist/parser/expressions/look.js +37 -0
- package/dist/parser/expressions/look.js.map +1 -0
- package/dist/parser/expressions/visual-block.d.ts +17 -0
- package/dist/parser/expressions/visual-block.d.ts.map +1 -0
- package/dist/parser/expressions/visual-block.js +21 -0
- package/dist/parser/expressions/visual-block.js.map +1 -0
- package/dist/parser/keyframes-source.d.ts +24 -0
- package/dist/parser/keyframes-source.d.ts.map +1 -0
- package/dist/parser/keyframes-source.js +133 -0
- package/dist/parser/keyframes-source.js.map +1 -0
- package/dist/parser/look-source.d.ts +25 -0
- package/dist/parser/look-source.d.ts.map +1 -0
- package/dist/parser/look-source.js +189 -0
- package/dist/parser/look-source.js.map +1 -0
- package/dist/parser/spans.d.ts +24 -0
- package/dist/parser/spans.d.ts.map +1 -0
- package/dist/parser/spans.js +113 -0
- package/dist/parser/spans.js.map +1 -0
- package/dist/parser/statements/components.d.ts +37 -0
- package/dist/parser/statements/components.d.ts.map +1 -0
- package/dist/parser/statements/components.js +185 -0
- package/dist/parser/statements/components.js.map +1 -0
- package/dist/parser/statements/heads.d.ts +38 -0
- package/dist/parser/statements/heads.d.ts.map +1 -0
- package/dist/parser/statements/heads.js +55 -0
- package/dist/parser/statements/heads.js.map +1 -0
- package/dist/parser/statements/imports.d.ts +9 -0
- package/dist/parser/statements/imports.d.ts.map +1 -0
- package/dist/parser/statements/imports.js +31 -0
- package/dist/parser/statements/imports.js.map +1 -0
- package/dist/parser/statements/reactive.d.ts +31 -0
- package/dist/parser/statements/reactive.d.ts.map +1 -0
- package/dist/parser/statements/reactive.js +68 -0
- package/dist/parser/statements/reactive.js.map +1 -0
- package/dist/parser/statements/unsafe-css.d.ts +21 -0
- package/dist/parser/statements/unsafe-css.d.ts.map +1 -0
- package/dist/parser/statements/unsafe-css.js +42 -0
- package/dist/parser/statements/unsafe-css.js.map +1 -0
- package/dist/parser.d.ts +37 -50
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +98 -882
- package/dist/parser.js.map +1 -1
- package/dist/runtime-sources.generated.d.ts +1 -1
- package/dist/runtime-sources.generated.d.ts.map +1 -1
- package/dist/runtime-sources.generated.js +4 -4
- package/dist/runtime-sources.generated.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The CSS a `look:` value lowers to: the condition terms a Look condition
|
|
3
|
+
* decomposes into, the token that names one lowered rule, and the selector,
|
|
4
|
+
* media query and declaration that rule is written as.
|
|
5
|
+
*
|
|
6
|
+
* D115 P4 R3d: these are pure functions over the Look AST and the module's
|
|
7
|
+
* static values — no emitter state reaches them — so both `emit/look.ts` (the
|
|
8
|
+
* stylesheet) and `emit/jsx.ts` (an inline `look:` attribute) read the same
|
|
9
|
+
* lowering rather than two spellings of it.
|
|
10
|
+
*/
|
|
11
|
+
import type { Expression } from "@velarscript/compiler/extension";
|
|
12
|
+
import { type LookStaticValue } from "../look-static.ts";
|
|
13
|
+
export interface LookStaticAtom {
|
|
14
|
+
readonly kind: "hook" | "media" | "scheme" | "motion";
|
|
15
|
+
readonly name: string;
|
|
16
|
+
readonly operator?: "<" | "<=" | ">" | ">=";
|
|
17
|
+
readonly value?: string;
|
|
18
|
+
readonly negated: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface LookRuntimeAtom {
|
|
21
|
+
readonly expression: Expression;
|
|
22
|
+
readonly negated: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface LookConditionTerm {
|
|
25
|
+
readonly staticAtoms: readonly LookStaticAtom[];
|
|
26
|
+
readonly runtimeAtoms: readonly LookRuntimeAtom[];
|
|
27
|
+
}
|
|
28
|
+
export interface LookRule {
|
|
29
|
+
readonly token: string;
|
|
30
|
+
readonly property: string;
|
|
31
|
+
readonly target: string;
|
|
32
|
+
readonly staticAtoms: readonly LookStaticAtom[];
|
|
33
|
+
/** Declaration order of the token's first appearance, the last tie-break. */
|
|
34
|
+
readonly sequence: number;
|
|
35
|
+
}
|
|
36
|
+
export declare const EMPTY_LOOK_TERM: LookConditionTerm;
|
|
37
|
+
export declare function lookConditionTerms(expression: Expression, negated?: boolean, staticValues?: ReadonlyMap<string, LookStaticValue>): readonly LookConditionTerm[];
|
|
38
|
+
export declare function combineLookTerms(left: readonly LookConditionTerm[], right: readonly LookConditionTerm[]): readonly LookConditionTerm[];
|
|
39
|
+
export declare function lookToken(atoms: readonly LookStaticAtom[], target: string, property: string): string;
|
|
40
|
+
export declare function lookConditionDepth(atoms: readonly LookStaticAtom[]): number;
|
|
41
|
+
export declare function lookDeclaration(token: string, property: string): string;
|
|
42
|
+
export declare function lookMediaQuery(atom: LookStaticAtom): string;
|
|
43
|
+
export declare function lookSelectors(base: string, atoms: readonly LookStaticAtom[], target: string): readonly string[];
|
|
44
|
+
//# sourceMappingURL=look-css.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"look-css.d.ts","sourceRoot":"","sources":["../../src/emit/look-css.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAElE,OAAO,EAA+C,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGtG,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;IAC5C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,WAAW,EAAE,SAAS,cAAc,EAAE,CAAC;IAChD,QAAQ,CAAC,YAAY,EAAE,SAAS,eAAe,EAAE,CAAC;CACnD;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,SAAS,cAAc,EAAE,CAAC;IAChD,6EAA6E;IAC7E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,eAAe,EAAE,iBAAwE,CAAC;AAGvG,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,UAAU,EACtB,OAAO,UAAQ,EACf,YAAY,GAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAa,GAC7D,SAAS,iBAAiB,EAAE,CAc9B;AA4CD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,iBAAiB,EAAE,EAAE,KAAK,EAAE,SAAS,iBAAiB,EAAE,GAAG,SAAS,iBAAiB,EAAE,CAYtI;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CASpG;AAsBD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,GAAG,MAAM,CAM3E;AAMD,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGvE;AAMD,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAI3D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,cAAc,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAa/G"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { LOOK_MEDIA_LENGTH_UNITS } from "../look.js";
|
|
2
|
+
import { evaluateLookStaticExpression, lookStaticCss } from "../look-static.js";
|
|
3
|
+
import { isWebExpression } from "../ast.js";
|
|
4
|
+
export const EMPTY_LOOK_TERM = Object.freeze({ staticAtoms: [], runtimeAtoms: [] });
|
|
5
|
+
const LOOK_CONDITION_TERM_LIMIT = 32;
|
|
6
|
+
export function lookConditionTerms(expression, negated = false, staticValues = new Map()) {
|
|
7
|
+
if (expression.kind === "UnaryExpression" && expression.operator === "not")
|
|
8
|
+
return lookConditionTerms(expression.operand, !negated, staticValues);
|
|
9
|
+
if (expression.kind === "BinaryExpression" && (expression.operator === "and" || expression.operator === "or")) {
|
|
10
|
+
const conjunction = (expression.operator === "and") !== negated;
|
|
11
|
+
const left = lookConditionTerms(expression.left, negated, staticValues);
|
|
12
|
+
const right = lookConditionTerms(expression.right, negated, staticValues);
|
|
13
|
+
return conjunction ? combineLookTerms(left, right) : [...left, ...right].slice(0, LOOK_CONDITION_TERM_LIMIT);
|
|
14
|
+
}
|
|
15
|
+
if (isWebExpression(expression) && expression.kind === "ExtensionExpression:web:look-hook") {
|
|
16
|
+
return [{ staticAtoms: [{ kind: "hook", name: expression.name, negated }], runtimeAtoms: [] }];
|
|
17
|
+
}
|
|
18
|
+
const media = viewportAtom(expression, negated, staticValues) ?? schemeAtom(expression, negated);
|
|
19
|
+
if (media)
|
|
20
|
+
return [{ staticAtoms: [media], runtimeAtoms: [] }];
|
|
21
|
+
return [{ staticAtoms: [], runtimeAtoms: [{ expression, negated }] }];
|
|
22
|
+
}
|
|
23
|
+
// A breakpoint is complementary the way the schemes and the motion preference
|
|
24
|
+
// are: `not (width <= X)` is `width > X`, one condition with one media query.
|
|
25
|
+
// The atom therefore folds the negation into its operator at construction, so
|
|
26
|
+
// the two spellings reach `lookToken` as the same token instead of as two
|
|
27
|
+
// rules that tie on specificity and are separated by source order.
|
|
28
|
+
const LOOK_NEGATED_MEDIA_OPERATORS = new Map([
|
|
29
|
+
["<", ">="], ["<=", ">"], [">", "<="], [">=", "<"],
|
|
30
|
+
]);
|
|
31
|
+
function viewportAtom(expression, negated, staticValues) {
|
|
32
|
+
if (expression.kind !== "BinaryExpression" || !["<", "<=", ">", ">="].includes(expression.operator))
|
|
33
|
+
return null;
|
|
34
|
+
if (expression.left.kind !== "MemberExpression" || expression.left.object.kind !== "IdentifierExpression" || expression.left.object.name !== "viewport")
|
|
35
|
+
return null;
|
|
36
|
+
if (expression.left.property !== "width" && expression.left.property !== "height")
|
|
37
|
+
return null;
|
|
38
|
+
const threshold = evaluateLookStaticExpression(expression.right, staticValues);
|
|
39
|
+
if (threshold?.kind !== "unit" || !LOOK_MEDIA_LENGTH_UNITS.has(threshold.unit))
|
|
40
|
+
return null;
|
|
41
|
+
const written = expression.operator;
|
|
42
|
+
return {
|
|
43
|
+
kind: "media",
|
|
44
|
+
name: expression.left.property,
|
|
45
|
+
operator: negated ? LOOK_NEGATED_MEDIA_OPERATORS.get(written) : written,
|
|
46
|
+
value: lookStaticCss(threshold),
|
|
47
|
+
negated: false,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
// 'scheme.dark' / 'scheme.light' lower to prefers-color-scheme media atoms.
|
|
51
|
+
// The two subjects are complementary, so negation flips to the other scheme
|
|
52
|
+
// and the atom itself stays canonical.
|
|
53
|
+
function schemeAtom(expression, negated) {
|
|
54
|
+
if (expression.kind !== "MemberExpression" || expression.object.kind !== "IdentifierExpression")
|
|
55
|
+
return null;
|
|
56
|
+
// LOK-U3: 'motion.reduced' joins the media subjects. prefers-reduced-motion is
|
|
57
|
+
// complementary in the same way the schemes are, so negation names the other
|
|
58
|
+
// side of the query rather than wrapping it.
|
|
59
|
+
if (expression.object.name === "motion") {
|
|
60
|
+
return expression.property === "reduced" ? { kind: "motion", name: negated ? "no-preference" : "reduce", negated: false } : null;
|
|
61
|
+
}
|
|
62
|
+
if (expression.object.name !== "scheme")
|
|
63
|
+
return null;
|
|
64
|
+
if (expression.property !== "dark" && expression.property !== "light")
|
|
65
|
+
return null;
|
|
66
|
+
const scheme = negated ? (expression.property === "dark" ? "light" : "dark") : expression.property;
|
|
67
|
+
return { kind: "scheme", name: scheme, negated: false };
|
|
68
|
+
}
|
|
69
|
+
export function combineLookTerms(left, right) {
|
|
70
|
+
const combined = [];
|
|
71
|
+
for (const first of left) {
|
|
72
|
+
for (const second of right) {
|
|
73
|
+
combined.push({
|
|
74
|
+
staticAtoms: [...first.staticAtoms, ...second.staticAtoms],
|
|
75
|
+
runtimeAtoms: [...first.runtimeAtoms, ...second.runtimeAtoms],
|
|
76
|
+
});
|
|
77
|
+
if (combined.length >= LOOK_CONDITION_TERM_LIMIT)
|
|
78
|
+
return combined;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return combined;
|
|
82
|
+
}
|
|
83
|
+
export function lookToken(atoms, target, property) {
|
|
84
|
+
const conditions = atoms.map((atom) => {
|
|
85
|
+
if (atom.kind === "hook")
|
|
86
|
+
return `${atom.negated ? "not-" : ""}${kebab(atom.name)}`;
|
|
87
|
+
if (atom.kind === "scheme")
|
|
88
|
+
return `scheme-${atom.name}`;
|
|
89
|
+
if (atom.kind === "motion")
|
|
90
|
+
return `motion-${atom.name}`;
|
|
91
|
+
return `viewport-${atom.name}-${lookOperatorName(atom.operator)}-${atom.value}`;
|
|
92
|
+
}).sort();
|
|
93
|
+
const prefix = [target ? kebab(target) : "", conditions.length > 0 ? conditions.join("+") : "base"].filter(Boolean).join(":");
|
|
94
|
+
return `${prefix}:${property}`;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* How many extra `[data-velar-look]` selectors a rule carries, so that the
|
|
98
|
+
* winner between two Look rules is decided by the conditions they name rather
|
|
99
|
+
* than by their position in the sheet.
|
|
100
|
+
*
|
|
101
|
+
* The bump used to be a single flat `+1` for any non-empty condition set, which
|
|
102
|
+
* made every conditional rule specificity `(0,2,0)`: a state rule tied with a
|
|
103
|
+
* media rule, and a two-condition refinement tied with the one-condition
|
|
104
|
+
* fallback it refines. Ties then fell through to source order, and source order
|
|
105
|
+
* is per-module concatenation order, which the CLI sorts by filename — so the
|
|
106
|
+
* rendered colour could change when a file was renamed (LOK-U8, LOK-U10,
|
|
107
|
+
* LOK-U12).
|
|
108
|
+
*
|
|
109
|
+
* The rank is base < media < state < media+state, and within a rank a rule that
|
|
110
|
+
* names more conditions outranks one that names fewer. The per-rank span is
|
|
111
|
+
* bounded so a pathological condition count cannot cross a rank boundary; rules
|
|
112
|
+
* that saturate it fall back to declaration order, which is stable.
|
|
113
|
+
*/
|
|
114
|
+
const LOOK_RANK_SPAN = 3;
|
|
115
|
+
export function lookConditionDepth(atoms) {
|
|
116
|
+
if (atoms.length === 0)
|
|
117
|
+
return 0;
|
|
118
|
+
const hooks = atoms.filter((atom) => atom.kind === "hook").length;
|
|
119
|
+
const media = atoms.length - hooks;
|
|
120
|
+
const rank = hooks > 0 ? (media > 0 ? 2 : 1) : 0;
|
|
121
|
+
return rank * LOOK_RANK_SPAN + Math.min(atoms.length, LOOK_RANK_SPAN);
|
|
122
|
+
}
|
|
123
|
+
function lookVariable(token) {
|
|
124
|
+
return `--velar-look-${token.replace(/[^A-Za-z0-9_-]+/gu, "-")}`;
|
|
125
|
+
}
|
|
126
|
+
export function lookDeclaration(token, property) {
|
|
127
|
+
const value = `var(${lookVariable(token)})`;
|
|
128
|
+
return `${property}:${value}`;
|
|
129
|
+
}
|
|
130
|
+
function lookOperatorName(operator) {
|
|
131
|
+
return operator === "<" ? "lt" : operator === "<=" ? "lte" : operator === ">" ? "gt" : "gte";
|
|
132
|
+
}
|
|
133
|
+
export function lookMediaQuery(atom) {
|
|
134
|
+
if (atom.kind === "scheme")
|
|
135
|
+
return `(prefers-color-scheme: ${atom.name})`;
|
|
136
|
+
if (atom.kind === "motion")
|
|
137
|
+
return `(prefers-reduced-motion: ${atom.name})`;
|
|
138
|
+
return `(${atom.name} ${atom.operator} ${atom.value})`;
|
|
139
|
+
}
|
|
140
|
+
export function lookSelectors(base, atoms, target) {
|
|
141
|
+
let selectors = [base];
|
|
142
|
+
for (const atom of atoms) {
|
|
143
|
+
const states = lookHookSelectors(atom.name);
|
|
144
|
+
if (atom.negated) {
|
|
145
|
+
const condition = states.map((state) => `:not(${state})`).join("");
|
|
146
|
+
selectors = selectors.map((selector) => `${selector}:where(${condition})`);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
selectors = selectors.flatMap((selector) => states.map((state) => `${selector}:where(${state})`));
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
const suffix = target ? LOOK_TARGET_SELECTORS.get(target) ?? `::${kebab(target)}` : "";
|
|
153
|
+
return selectors.map((selector) => `${selector}${suffix}`);
|
|
154
|
+
}
|
|
155
|
+
function lookHookSelectors(name) {
|
|
156
|
+
if (name === "focusVisible")
|
|
157
|
+
return [":focus-visible"];
|
|
158
|
+
if (name === "current")
|
|
159
|
+
return ["[aria-current=\"page\"]"];
|
|
160
|
+
if (name === "disabled")
|
|
161
|
+
return [":disabled", "[aria-disabled=\"true\"]"];
|
|
162
|
+
if (name === "checked")
|
|
163
|
+
return [":checked", "[aria-checked=\"true\"]"];
|
|
164
|
+
if (name === "invalid")
|
|
165
|
+
return [":invalid", "[aria-invalid=\"true\"]"];
|
|
166
|
+
if (name === "open")
|
|
167
|
+
return [":open", "[open]", "[aria-expanded=\"true\"]"];
|
|
168
|
+
return [`:${kebab(name)}`];
|
|
169
|
+
}
|
|
170
|
+
const LOOK_TARGET_SELECTORS = new Map([
|
|
171
|
+
["before", "::before"], ["after", "::after"], ["backdrop", "::backdrop"], ["placeholder", "::placeholder"], ["selection", "::selection"],
|
|
172
|
+
["marker", "::marker"], ["fileSelectorButton", "::file-selector-button"],
|
|
173
|
+
]);
|
|
174
|
+
function kebab(value) {
|
|
175
|
+
return value.replace(/[A-Z]/gu, (character) => `-${character.toLowerCase()}`);
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=look-css.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"look-css.js","sourceRoot":"","sources":["../../src/emit/look-css.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a module's `look:` values become: the runtime value a `look:` expression
|
|
3
|
+
* evaluates to, and the stylesheet the module ships beside its JavaScript.
|
|
4
|
+
*
|
|
5
|
+
* D115 P4 R3d: the family owns both halves because they are one lowering read
|
|
6
|
+
* twice — `emitLook` writes the token a rule is addressed by, and `prepareLooks`
|
|
7
|
+
* writes the rule that token selects. `emit/look-css.ts` holds the token itself,
|
|
8
|
+
* so neither half can drift from the other.
|
|
9
|
+
*/
|
|
10
|
+
import type { CompilerStyleSegments, Expression, Program } from "@velarscript/compiler/extension";
|
|
11
|
+
import { type WebLookExpression as LookExpression } from "../ast.ts";
|
|
12
|
+
import { type LookStaticValue } from "../look-static.ts";
|
|
13
|
+
/**
|
|
14
|
+
* What Look emission reads and writes on the emitter. `lookStaticValues`,
|
|
15
|
+
* `cssSegments` and `cssOutput` are live: `prepareLooks` assigns them and the
|
|
16
|
+
* emitter's `css()` / `styleSegments()` answer with what it assigned.
|
|
17
|
+
*/
|
|
18
|
+
export interface LookEmitHost {
|
|
19
|
+
cssOutput: string;
|
|
20
|
+
cssSegments: CompilerStyleSegments;
|
|
21
|
+
readonly importedLookStaticValues: ReadonlyMap<string, LookStaticValue>;
|
|
22
|
+
readonly keyframeNames: Map<string, string>;
|
|
23
|
+
readonly lookKeywordProperties: Set<string>;
|
|
24
|
+
lookStaticValues: ReadonlyMap<string, LookStaticValue>;
|
|
25
|
+
readonly resourceContents: ReadonlyMap<string, string>;
|
|
26
|
+
emitCondition(expression: Expression): string;
|
|
27
|
+
emitMappedExpression(expression: Expression): string;
|
|
28
|
+
}
|
|
29
|
+
export declare function emitLook(host: LookEmitHost, expression: LookExpression): string;
|
|
30
|
+
export declare function emitLookArithmetic(host: LookEmitHost, expression: Extract<Expression, {
|
|
31
|
+
readonly kind: "BinaryExpression";
|
|
32
|
+
}>): string;
|
|
33
|
+
/**
|
|
34
|
+
* The module's Look state, prepared before a single statement is emitted: the
|
|
35
|
+
* static values a condition may fold against, the stylesheet, and the keyframe
|
|
36
|
+
* name every `keyframes:` expression will be emitted as.
|
|
37
|
+
*/
|
|
38
|
+
export declare function prepareLooks(host: LookEmitHost, program: Program): void;
|
|
39
|
+
//# sourceMappingURL=look.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"look.d.ts","sourceRoot":"","sources":["../../src/emit/look.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,qBAAqB,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAC;AAElG,OAAO,EAKL,KAAK,iBAAiB,IAAI,cAAc,EACzC,MAAM,WAAW,CAAC;AAGnB,OAAO,EAA2B,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAgBlF;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,qBAAqB,CAAC;IACnC,QAAQ,CAAC,wBAAwB,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACxE,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,qBAAqB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5C,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACvD,QAAQ,CAAC,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvD,aAAa,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAAC;IAC9C,oBAAoB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAAC;CACtD;AAcD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,GAAG,MAAM,CAE/E;AAsCD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAA;CAAE,CAAC,GAAG,MAAM,CAErI;AAkJD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAYvE"}
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { spanIdentity } from "@velarscript/compiler/extension";
|
|
2
|
+
import { isWebStatement, } from "../ast.js";
|
|
3
|
+
import { isCssDeclarationValue } from "../css-tokens.js";
|
|
4
|
+
import { keyframeCssValue, keyframesCanonical, keyframesName } from "../keyframes.js";
|
|
5
|
+
import { collectLookStaticValues } from "../look-static.js";
|
|
6
|
+
import { cssPropertyName, LOOK_PROPERTIES, LOOK_PROPERTY_VALUE_KINDS } from "../look.js";
|
|
7
|
+
import { combineLookTerms, EMPTY_LOOK_TERM, lookConditionDepth, lookConditionTerms, lookDeclaration, lookMediaQuery, lookSelectors, lookToken, } from "./look-css.js";
|
|
8
|
+
export function emitLook(host, expression) {
|
|
9
|
+
return `__velarLook([${emitLookEntries(host, expression.entries, [EMPTY_LOOK_TERM], "").join(", ")}])`;
|
|
10
|
+
}
|
|
11
|
+
function emitLookEntries(host, entries, contexts, target) {
|
|
12
|
+
const parts = [];
|
|
13
|
+
for (const entry of entries) {
|
|
14
|
+
if (entry.kind === "LookSpread") {
|
|
15
|
+
parts.push(host.emitMappedExpression(entry.value));
|
|
16
|
+
continue;
|
|
17
|
+
}
|
|
18
|
+
if (entry.kind === "LookIf") {
|
|
19
|
+
const thenContexts = combineLookTerms(contexts, lookConditionTerms(entry.condition, false, host.lookStaticValues));
|
|
20
|
+
const elseContexts = combineLookTerms(contexts, lookConditionTerms(entry.condition, true, host.lookStaticValues));
|
|
21
|
+
parts.push(...emitLookEntries(host, entry.thenEntries, thenContexts, target));
|
|
22
|
+
parts.push(...emitLookEntries(host, entry.elseEntries, elseContexts, target));
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
if (entry.kind === "LookTarget") {
|
|
26
|
+
parts.push(...emitLookEntries(host, entry.entries, contexts, entry.name));
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
const property = cssPropertyName(entry.name);
|
|
30
|
+
for (const context of contexts) {
|
|
31
|
+
const token = lookToken(context.staticAtoms, target, property);
|
|
32
|
+
const rule = `{ rules: { ${JSON.stringify(token)}: ${emitLookValue(host, entry.value)} } }`;
|
|
33
|
+
const runtime = context.runtimeAtoms.map((atom) => {
|
|
34
|
+
const value = host.emitCondition(atom.expression);
|
|
35
|
+
return atom.negated ? `!(${value})` : `(${value})`;
|
|
36
|
+
}).join(" && ");
|
|
37
|
+
parts.push(runtime ? `(${runtime} ? ${rule} : null)` : rule);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return parts;
|
|
41
|
+
}
|
|
42
|
+
function emitLookValue(host, expression) {
|
|
43
|
+
return host.emitMappedExpression(expression);
|
|
44
|
+
}
|
|
45
|
+
export function emitLookArithmetic(host, expression) {
|
|
46
|
+
return `__velarLookMath(${JSON.stringify(expression.operator)}, ${host.emitMappedExpression(expression.left)}, ${host.emitMappedExpression(expression.right)})`;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Every Look rule and `@keyframes` block this module declares, in one walk of
|
|
50
|
+
* the program. The walk also records the two facts later phases need: the
|
|
51
|
+
* generated name each `keyframes:` expression compiles to, and the closed
|
|
52
|
+
* keyword sets the runtime guard has to carry.
|
|
53
|
+
*/
|
|
54
|
+
function collectLookRules(host, program) {
|
|
55
|
+
const rules = new Map();
|
|
56
|
+
const keyframeRules = new Map();
|
|
57
|
+
const keyframeCanonicals = new Map();
|
|
58
|
+
host.keyframeNames.clear();
|
|
59
|
+
host.lookKeywordProperties.clear();
|
|
60
|
+
// A token's stylesheet position used to be wherever it first appeared
|
|
61
|
+
// anywhere in the module, because a Map keeps first-insertion order. The
|
|
62
|
+
// sequence records that first appearance explicitly so emission can sort by
|
|
63
|
+
// condition rank first and fall back to declaration order, rather than
|
|
64
|
+
// letting an unrelated earlier look decide a later one's winner (LOK-U8).
|
|
65
|
+
let sequence = 0;
|
|
66
|
+
const addRule = (token, property, target, staticAtoms) => {
|
|
67
|
+
if (rules.has(token))
|
|
68
|
+
return;
|
|
69
|
+
rules.set(token, { token, property, target, staticAtoms, sequence: sequence += 1 });
|
|
70
|
+
};
|
|
71
|
+
const noteKeywordProperty = (name) => {
|
|
72
|
+
if (LOOK_PROPERTY_VALUE_KINDS.get(name) === "keyword")
|
|
73
|
+
host.lookKeywordProperties.add(name);
|
|
74
|
+
};
|
|
75
|
+
const visit = (value) => {
|
|
76
|
+
if (!value || typeof value !== "object")
|
|
77
|
+
return;
|
|
78
|
+
const record = value;
|
|
79
|
+
if (record.kind === "ExtensionExpression:web:jsx") {
|
|
80
|
+
const element = record;
|
|
81
|
+
for (const attribute of element.attributes) {
|
|
82
|
+
if (!attribute.name.startsWith("look:") && !attribute.name.startsWith("style:"))
|
|
83
|
+
continue;
|
|
84
|
+
const name = attribute.name.slice(attribute.name.indexOf(":") + 1);
|
|
85
|
+
if (!LOOK_PROPERTIES.has(name))
|
|
86
|
+
continue;
|
|
87
|
+
noteKeywordProperty(name);
|
|
88
|
+
if (!attribute.name.startsWith("look:"))
|
|
89
|
+
continue;
|
|
90
|
+
const property = cssPropertyName(name);
|
|
91
|
+
addRule(lookToken([], "", property), property, "", []);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (record.kind === "ExtensionExpression:web:look") {
|
|
95
|
+
const collect = (entries, contexts = [EMPTY_LOOK_TERM], target = "") => {
|
|
96
|
+
for (const entry of entries) {
|
|
97
|
+
if (entry.kind === "LookProperty") {
|
|
98
|
+
const property = cssPropertyName(entry.name);
|
|
99
|
+
noteKeywordProperty(entry.name);
|
|
100
|
+
for (const context of contexts) {
|
|
101
|
+
addRule(lookToken(context.staticAtoms, target, property), property, target, context.staticAtoms);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
else if (entry.kind === "LookIf") {
|
|
105
|
+
collect(entry.thenEntries, combineLookTerms(contexts, lookConditionTerms(entry.condition, false, host.lookStaticValues)), target);
|
|
106
|
+
collect(entry.elseEntries, combineLookTerms(contexts, lookConditionTerms(entry.condition, true, host.lookStaticValues)), target);
|
|
107
|
+
}
|
|
108
|
+
else if (entry.kind === "LookTarget") {
|
|
109
|
+
collect(entry.entries, contexts, entry.name);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
collect(record.entries);
|
|
114
|
+
}
|
|
115
|
+
if (record.kind === "ExtensionExpression:web:keyframes") {
|
|
116
|
+
const expression = record;
|
|
117
|
+
const canonical = keyframesCanonical(expression, host.lookStaticValues);
|
|
118
|
+
const name = keyframesName(canonical);
|
|
119
|
+
host.keyframeNames.set(spanIdentity(expression.span), name);
|
|
120
|
+
const reused = keyframeCanonicals.get(name);
|
|
121
|
+
// The name is a promise that equal structures share one rule. Reusing
|
|
122
|
+
// it for a structure that is not equal would make one animation play
|
|
123
|
+
// another's motion, so the reuse path proves the identity rather than
|
|
124
|
+
// trusting the digest (LOK-U11).
|
|
125
|
+
if (reused !== undefined && reused !== canonical) {
|
|
126
|
+
throw new Error(`Generated keyframes name ${name} collides between two different keyframe structures`);
|
|
127
|
+
}
|
|
128
|
+
if (reused === undefined) {
|
|
129
|
+
keyframeCanonicals.set(name, canonical);
|
|
130
|
+
const stops = [...expression.stops]
|
|
131
|
+
.sort((left, right) => Math.min(...left.offsets) - Math.min(...right.offsets))
|
|
132
|
+
.map((stop) => {
|
|
133
|
+
const selectors = [...stop.offsets].sort((left, right) => left - right)
|
|
134
|
+
.map((offset) => offset === 0 ? "from" : offset === 100 ? "to" : `${offset}%`)
|
|
135
|
+
.join(",");
|
|
136
|
+
const declarations = stop.entries.map((entry) => {
|
|
137
|
+
const css = keyframeCssValue(entry.value, host.lookStaticValues);
|
|
138
|
+
// A value the lowering could not prove is one balanced
|
|
139
|
+
// declaration never reaches the concatenation: `}` in a stop
|
|
140
|
+
// closed the at-rule and turned the rest into author-owned CSS
|
|
141
|
+
// in the compiler-owned segment (LOK-U9). The analyzer already
|
|
142
|
+
// reports the same null as a diagnostic, so emission only has
|
|
143
|
+
// to stay structurally incapable of writing the escape.
|
|
144
|
+
return css === null || !isCssDeclarationValue(css) ? "" : `${cssPropertyName(entry.name)}:${css}`;
|
|
145
|
+
}).filter(Boolean).join(";");
|
|
146
|
+
return `${selectors}{${declarations}}`;
|
|
147
|
+
}).join("");
|
|
148
|
+
keyframeRules.set(name, `@keyframes ${name}{${stops}}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
for (const child of Object.values(record)) {
|
|
152
|
+
if (Array.isArray(child))
|
|
153
|
+
child.forEach(visit);
|
|
154
|
+
else
|
|
155
|
+
visit(child);
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
visit(program);
|
|
159
|
+
return { rules, keyframeRules };
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* The compiler-owned half of the stylesheet: one CSS rule per Look token, in
|
|
163
|
+
* the order the cascade has to read them.
|
|
164
|
+
*/
|
|
165
|
+
function lookRuleCss(rules) {
|
|
166
|
+
return [...rules.values()]
|
|
167
|
+
.map((rule) => ({ rule, depth: lookConditionDepth(rule.staticAtoms) }))
|
|
168
|
+
// Rank decides, and declaration order only separates rules that share a
|
|
169
|
+
// rank. Emission used to follow the Map, so the sheet's byte order — and
|
|
170
|
+
// through it the per-module concatenation order the CLI sorts by
|
|
171
|
+
// filename — could pick the winner of a tie (LOK-U8, LOK-U10).
|
|
172
|
+
.sort((left, right) => left.depth - right.depth || left.rule.sequence - right.rule.sequence)
|
|
173
|
+
.map(({ rule, depth }) => {
|
|
174
|
+
const hookAtoms = rule.staticAtoms.filter((atom) => atom.kind === "hook");
|
|
175
|
+
const mediaAtoms = rule.staticAtoms.filter((atom) => atom.kind === "media" || atom.kind === "scheme" || atom.kind === "motion");
|
|
176
|
+
const base = `[data-velar-look~=${JSON.stringify(rule.token)}]${"[data-velar-look]".repeat(depth)}`;
|
|
177
|
+
const selectors = lookSelectors(base, hookAtoms, rule.target);
|
|
178
|
+
const css = `${selectors.join(",")}{${lookDeclaration(rule.token, rule.property)}}`;
|
|
179
|
+
const query = mediaAtoms.map(lookMediaQuery).join(" and ");
|
|
180
|
+
return query ? `@media ${query}{${css}}` : css;
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* The author-owned CSS either side of the compiler's own, in declaration order.
|
|
185
|
+
*/
|
|
186
|
+
function unsafeCssSegments(host, program) {
|
|
187
|
+
const before = [];
|
|
188
|
+
const after = [];
|
|
189
|
+
for (const statement of program.body) {
|
|
190
|
+
if (!isWebStatement(statement) || statement.kind !== "ExtensionStatement:web:unsafe-css")
|
|
191
|
+
continue;
|
|
192
|
+
const source = statement.source.kind === "inline"
|
|
193
|
+
? statement.source.css
|
|
194
|
+
: host.resourceContents.get(statement.source.path) ?? "";
|
|
195
|
+
(statement.placement === "after" ? after : before).push(source.trim());
|
|
196
|
+
}
|
|
197
|
+
return { before: before.filter(Boolean).join("\n\n"), after: after.filter(Boolean).join("\n\n") };
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* The module's Look state, prepared before a single statement is emitted: the
|
|
201
|
+
* static values a condition may fold against, the stylesheet, and the keyframe
|
|
202
|
+
* name every `keyframes:` expression will be emitted as.
|
|
203
|
+
*/
|
|
204
|
+
export function prepareLooks(host, program) {
|
|
205
|
+
host.lookStaticValues = collectLookStaticValues(program, host.importedLookStaticValues);
|
|
206
|
+
const { rules, keyframeRules } = collectLookRules(host, program);
|
|
207
|
+
const lookCss = lookRuleCss(rules);
|
|
208
|
+
const unsafe = unsafeCssSegments(host, program);
|
|
209
|
+
host.cssSegments = {
|
|
210
|
+
before: unsafe.before,
|
|
211
|
+
controlled: [...keyframeRules.values(), ...lookCss].filter(Boolean).join("\n\n"),
|
|
212
|
+
after: unsafe.after,
|
|
213
|
+
};
|
|
214
|
+
host.cssOutput = [host.cssSegments.before, host.cssSegments.controlled, host.cssSegments.after].filter(Boolean).join("\n\n");
|
|
215
|
+
if (host.cssOutput)
|
|
216
|
+
host.cssOutput += "\n";
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=look.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"look.js","sourceRoot":"","sources":["../../src/emit/look.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which runtime a Web program carries, and which of the compiler's own helpers
|
|
3
|
+
* a Web lowering replaces.
|
|
4
|
+
*
|
|
5
|
+
* D115 P4 R3d: every one of these is a seam `JavaScriptEmitter` already asks
|
|
6
|
+
* about — "does this module need the file-type helper", "what does an `is`
|
|
7
|
+
* check on `Element` compile to" — so the family answers for Web and leaves the
|
|
8
|
+
* base's answer to the host, which is the one thing a collaborator cannot call
|
|
9
|
+
* for itself.
|
|
10
|
+
*/
|
|
11
|
+
import type { Expression, ValueType } from "@velarscript/compiler/extension";
|
|
12
|
+
import { type WebLookEntry as LookEntry } from "../ast.ts";
|
|
13
|
+
/**
|
|
14
|
+
* What runtime-import selection reads on the emitter, plus the four base-class
|
|
15
|
+
* answers a collaborator has no `super` of its own to ask for. `webOutput` and
|
|
16
|
+
* the two `needs…` flags are live: `emitTypeCheck` sets one while statements
|
|
17
|
+
* are still being emitted, and `additionalHelpers` reads it afterwards.
|
|
18
|
+
*/
|
|
19
|
+
export interface RuntimeImportHost {
|
|
20
|
+
readonly lookKeywordProperties: ReadonlySet<string>;
|
|
21
|
+
needsFileTypeHelper: boolean;
|
|
22
|
+
readonly needsLookArithmeticRuntime: boolean;
|
|
23
|
+
readonly webOutput: boolean;
|
|
24
|
+
baseDetachedTaskHelpers(): readonly string[];
|
|
25
|
+
baseIsCheck(type: ValueType, value: string): string;
|
|
26
|
+
baseReactiveBridgeHelpers(needsJavaScriptCallBoundary: boolean, needsCollections: boolean, usedIdentifiers: ReadonlySet<string>): readonly string[];
|
|
27
|
+
baseTypeCheck(type: ValueType, value: string, state: string): string;
|
|
28
|
+
requireRuntimeModule(source: string): void;
|
|
29
|
+
usesSharedRuntimeModules(): boolean;
|
|
30
|
+
}
|
|
31
|
+
export declare function emitTypeCheck(host: RuntimeImportHost, type: ValueType, value: string, state: string): string;
|
|
32
|
+
export declare function emitIsCheck(host: RuntimeImportHost, type: ValueType, value: string): string;
|
|
33
|
+
export declare function additionalHelpers(host: RuntimeImportHost): readonly string[];
|
|
34
|
+
export declare function reactiveBridgeHelpers(host: RuntimeImportHost, needsJavaScriptCallBoundary: boolean, needsCollections: boolean, usedIdentifiers: ReadonlySet<string>): readonly string[];
|
|
35
|
+
export declare function includesErrorNormalizationRuntime(host: RuntimeImportHost): boolean;
|
|
36
|
+
export declare function detachedTaskHelpers(host: RuntimeImportHost): readonly string[];
|
|
37
|
+
export declare function visitLookExpressions(entries: readonly LookEntry[], visit: (expression: Expression) => void): void;
|
|
38
|
+
export declare function containsUnitLiteral(value: unknown): boolean;
|
|
39
|
+
export declare function containsWebSyntax(value: unknown): boolean;
|
|
40
|
+
//# sourceMappingURL=runtime-imports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-imports.d.ts","sourceRoot":"","sources":["../../src/emit/runtime-imports.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAC;AAE7E,OAAO,EAAE,KAAK,YAAY,IAAI,SAAS,EAAE,MAAM,WAAW,CAAC;AAQ3D;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpD,mBAAmB,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,0BAA0B,EAAE,OAAO,CAAC;IAC7C,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,uBAAuB,IAAI,SAAS,MAAM,EAAE,CAAC;IAC7C,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACpD,yBAAyB,CACvB,2BAA2B,EAAE,OAAO,EACpC,gBAAgB,EAAE,OAAO,EACzB,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,GACnC,SAAS,MAAM,EAAE,CAAC;IACrB,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACrE,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,wBAAwB,IAAI,OAAO,CAAC;CACrC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAmB5G;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAiB3F;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,GAAG,SAAS,MAAM,EAAE,CAM5E;AA6BD,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,iBAAiB,EACvB,2BAA2B,EAAE,OAAO,EACpC,gBAAgB,EAAE,OAAO,EACzB,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,GACnC,SAAS,MAAM,EAAE,CAKnB;AAED,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAElF;AASD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,SAAS,MAAM,EAAE,CAoC9E;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CASjH;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAU3D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAOzD"}
|