@tamagui/style-grammar 0.0.0-bootstrap.0 → 3.0.0-beta.643.1
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 +33 -1
- package/dist/cjs/backgroundFamily.cjs +176 -0
- package/dist/cjs/backgroundFamily.native.cjs +195 -0
- package/dist/cjs/backgroundFamily.native.js +197 -0
- package/dist/cjs/backgroundFamily.native.js.map +1 -0
- package/dist/cjs/borderFamily.cjs +169 -0
- package/dist/cjs/borderFamily.native.cjs +247 -0
- package/dist/cjs/borderFamily.native.js +249 -0
- package/dist/cjs/borderFamily.native.js.map +1 -0
- package/dist/cjs/candidate.cjs +608 -0
- package/dist/cjs/candidate.native.cjs +821 -0
- package/dist/cjs/candidate.native.js +823 -0
- package/dist/cjs/candidate.native.js.map +1 -0
- package/dist/cjs/candidateTarget.cjs +50 -0
- package/dist/cjs/candidateTarget.native.cjs +88 -0
- package/dist/cjs/candidateTarget.native.js +90 -0
- package/dist/cjs/candidateTarget.native.js.map +1 -0
- package/dist/cjs/clauseCapability.cjs +130 -0
- package/dist/cjs/clauseCapability.native.cjs +152 -0
- package/dist/cjs/clauseCapability.native.js +154 -0
- package/dist/cjs/clauseCapability.native.js.map +1 -0
- package/dist/cjs/clausePrecedence.cjs +153 -0
- package/dist/cjs/clausePrecedence.native.cjs +204 -0
- package/dist/cjs/clausePrecedence.native.js +206 -0
- package/dist/cjs/clausePrecedence.native.js.map +1 -0
- package/dist/cjs/clauseSources.cjs +47 -0
- package/dist/cjs/clauseSources.native.cjs +49 -0
- package/dist/cjs/clauseSources.native.js +51 -0
- package/dist/cjs/clauseSources.native.js.map +1 -0
- package/dist/cjs/config.cjs +130 -0
- package/dist/cjs/config.native.cjs +185 -0
- package/dist/cjs/config.native.js +187 -0
- package/dist/cjs/config.native.js.map +1 -0
- package/dist/cjs/evaluateProgram.cjs +65 -0
- package/dist/cjs/evaluateProgram.native.cjs +70 -0
- package/dist/cjs/evaluateProgram.native.js +72 -0
- package/dist/cjs/evaluateProgram.native.js.map +1 -0
- package/dist/cjs/fontShorthand.cjs +207 -0
- package/dist/cjs/fontShorthand.native.cjs +260 -0
- package/dist/cjs/fontShorthand.native.js +262 -0
- package/dist/cjs/fontShorthand.native.js.map +1 -0
- package/dist/cjs/geometricShorthand.cjs +122 -0
- package/dist/cjs/geometricShorthand.native.cjs +128 -0
- package/dist/cjs/geometricShorthand.native.js +130 -0
- package/dist/cjs/geometricShorthand.native.js.map +1 -0
- package/dist/cjs/index.cjs +19 -0
- package/dist/cjs/index.native.cjs +21 -0
- package/dist/cjs/index.native.js +23 -0
- package/dist/cjs/index.native.js.map +1 -0
- package/dist/cjs/lowerProgram.cjs +205 -0
- package/dist/cjs/lowerProgram.native.cjs +257 -0
- package/dist/cjs/lowerProgram.native.js +259 -0
- package/dist/cjs/lowerProgram.native.js.map +1 -0
- package/dist/cjs/mergeFlatValues.cjs +50 -0
- package/dist/cjs/mergeFlatValues.native.cjs +71 -0
- package/dist/cjs/mergeFlatValues.native.js +73 -0
- package/dist/cjs/mergeFlatValues.native.js.map +1 -0
- package/dist/cjs/modifierRegistry.cjs +246 -0
- package/dist/cjs/modifierRegistry.native.cjs +426 -0
- package/dist/cjs/modifierRegistry.native.js +428 -0
- package/dist/cjs/modifierRegistry.native.js.map +1 -0
- package/dist/cjs/payloadShape.cjs +69 -0
- package/dist/cjs/payloadShape.native.cjs +71 -0
- package/dist/cjs/payloadShape.native.js +73 -0
- package/dist/cjs/payloadShape.native.js.map +1 -0
- package/dist/cjs/programEligibility.cjs +46 -0
- package/dist/cjs/programEligibility.native.cjs +48 -0
- package/dist/cjs/programEligibility.native.js +50 -0
- package/dist/cjs/programEligibility.native.js.map +1 -0
- package/dist/cjs/programHash.cjs +86 -0
- package/dist/cjs/programHash.native.cjs +106 -0
- package/dist/cjs/programHash.native.js +108 -0
- package/dist/cjs/programHash.native.js.map +1 -0
- package/dist/cjs/programs.cjs +128 -0
- package/dist/cjs/programs.native.cjs +220 -0
- package/dist/cjs/programs.native.js +222 -0
- package/dist/cjs/programs.native.js.map +1 -0
- package/dist/cjs/registry.cjs +629 -0
- package/dist/cjs/registry.native.cjs +635 -0
- package/dist/cjs/registry.native.js +637 -0
- package/dist/cjs/registry.native.js.map +1 -0
- package/dist/cjs/resolvePayload.cjs +296 -0
- package/dist/cjs/resolvePayload.native.cjs +302 -0
- package/dist/cjs/resolvePayload.native.js +304 -0
- package/dist/cjs/resolvePayload.native.js.map +1 -0
- package/dist/cjs/runtime.cjs +50 -0
- package/dist/cjs/runtime.native.cjs +52 -0
- package/dist/cjs/runtime.native.js +54 -0
- package/dist/cjs/runtime.native.js.map +1 -0
- package/dist/cjs/safeAreaVariables.cjs +42 -0
- package/dist/cjs/safeAreaVariables.native.cjs +44 -0
- package/dist/cjs/safeAreaVariables.native.js +46 -0
- package/dist/cjs/safeAreaVariables.native.js.map +1 -0
- package/dist/cjs/scanFlatValue.cjs +181 -0
- package/dist/cjs/scanFlatValue.native.cjs +183 -0
- package/dist/cjs/scanFlatValue.native.js +185 -0
- package/dist/cjs/scanFlatValue.native.js.map +1 -0
- package/dist/cjs/serializePayload.cjs +149 -0
- package/dist/cjs/serializePayload.native.cjs +187 -0
- package/dist/cjs/serializePayload.native.js +189 -0
- package/dist/cjs/serializePayload.native.js.map +1 -0
- package/dist/cjs/stateModifiers.cjs +43 -0
- package/dist/cjs/stateModifiers.native.cjs +45 -0
- package/dist/cjs/stateModifiers.native.js +47 -0
- package/dist/cjs/stateModifiers.native.js.map +1 -0
- package/dist/cjs/states.cjs +97 -0
- package/dist/cjs/states.native.cjs +131 -0
- package/dist/cjs/states.native.js +133 -0
- package/dist/cjs/states.native.js.map +1 -0
- package/dist/cjs/table.cjs +54 -0
- package/dist/cjs/table.native.cjs +135 -0
- package/dist/cjs/table.native.js +137 -0
- package/dist/cjs/table.native.js.map +1 -0
- package/dist/cjs/textDecorationFamily.cjs +129 -0
- package/dist/cjs/textDecorationFamily.native.cjs +199 -0
- package/dist/cjs/textDecorationFamily.native.js +201 -0
- package/dist/cjs/textDecorationFamily.native.js.map +1 -0
- package/dist/cjs/tooling.cjs +26 -0
- package/dist/cjs/tooling.native.cjs +28 -0
- package/dist/cjs/tooling.native.js +30 -0
- package/dist/cjs/tooling.native.js.map +1 -0
- package/dist/cjs/toolingAnnotations.cjs +105 -0
- package/dist/cjs/toolingAnnotations.native.cjs +133 -0
- package/dist/cjs/toolingAnnotations.native.js +135 -0
- package/dist/cjs/toolingAnnotations.native.js.map +1 -0
- package/dist/cjs/toolingDiagnostics.cjs +459 -0
- package/dist/cjs/toolingDiagnostics.native.cjs +788 -0
- package/dist/cjs/toolingDiagnostics.native.js +790 -0
- package/dist/cjs/toolingDiagnostics.native.js.map +1 -0
- package/dist/cjs/toolingRegistry.cjs +159 -0
- package/dist/cjs/toolingRegistry.native.cjs +164 -0
- package/dist/cjs/toolingRegistry.native.js +166 -0
- package/dist/cjs/toolingRegistry.native.js.map +1 -0
- package/dist/cjs/transformFamily.cjs +425 -0
- package/dist/cjs/transformFamily.native.cjs +517 -0
- package/dist/cjs/transformFamily.native.js +519 -0
- package/dist/cjs/transformFamily.native.js.map +1 -0
- package/dist/cjs/transition.cjs +459 -0
- package/dist/cjs/transition.native.cjs +499 -0
- package/dist/cjs/transition.native.js +501 -0
- package/dist/cjs/transition.native.js.map +1 -0
- package/dist/cjs/transitionAlign.cjs +115 -0
- package/dist/cjs/transitionAlign.native.cjs +154 -0
- package/dist/cjs/transitionAlign.native.js +156 -0
- package/dist/cjs/transitionAlign.native.js.map +1 -0
- package/dist/cjs/transitionLegacy.cjs +217 -0
- package/dist/cjs/transitionLegacy.native.cjs +260 -0
- package/dist/cjs/transitionLegacy.native.js +262 -0
- package/dist/cjs/transitionLegacy.native.js.map +1 -0
- package/dist/cjs/transitionNative.cjs +281 -0
- package/dist/cjs/transitionNative.native.cjs +285 -0
- package/dist/cjs/transitionNative.native.js +287 -0
- package/dist/cjs/transitionNative.native.js.map +1 -0
- package/dist/cjs/unitlessNumbers.cjs +86 -0
- package/dist/cjs/unitlessNumbers.native.cjs +106 -0
- package/dist/cjs/unitlessNumbers.native.js +108 -0
- package/dist/cjs/unitlessNumbers.native.js.map +1 -0
- package/dist/cjs/v6ThemeNames.cjs +47 -0
- package/dist/cjs/v6ThemeNames.native.cjs +53 -0
- package/dist/cjs/v6ThemeNames.native.js +55 -0
- package/dist/cjs/v6ThemeNames.native.js.map +1 -0
- package/dist/cjs/valueParser.cjs +148 -0
- package/dist/cjs/valueParser.native.cjs +150 -0
- package/dist/cjs/valueParser.native.js +152 -0
- package/dist/cjs/valueParser.native.js.map +1 -0
- package/dist/cjs/valueTypes.cjs +38 -0
- package/dist/cjs/valueTypes.native.cjs +40 -0
- package/dist/cjs/valueTypes.native.js +42 -0
- package/dist/cjs/valueTypes.native.js.map +1 -0
- package/dist/esm/backgroundFamily.mjs +150 -0
- package/dist/esm/backgroundFamily.mjs.map +1 -0
- package/dist/esm/backgroundFamily.native.js +167 -0
- package/dist/esm/backgroundFamily.native.js.map +1 -0
- package/dist/esm/borderFamily.mjs +146 -0
- package/dist/esm/borderFamily.mjs.map +1 -0
- package/dist/esm/borderFamily.native.js +222 -0
- package/dist/esm/borderFamily.native.js.map +1 -0
- package/dist/esm/candidate.mjs +581 -0
- package/dist/esm/candidate.mjs.map +1 -0
- package/dist/esm/candidate.native.js +792 -0
- package/dist/esm/candidate.native.js.map +1 -0
- package/dist/esm/candidateTarget.mjs +29 -0
- package/dist/esm/candidateTarget.mjs.map +1 -0
- package/dist/esm/candidateTarget.native.js +65 -0
- package/dist/esm/candidateTarget.native.js.map +1 -0
- package/dist/esm/clauseCapability.mjs +107 -0
- package/dist/esm/clauseCapability.mjs.map +1 -0
- package/dist/esm/clauseCapability.native.js +127 -0
- package/dist/esm/clauseCapability.native.js.map +1 -0
- package/dist/esm/clausePrecedence.mjs +121 -0
- package/dist/esm/clausePrecedence.mjs.map +1 -0
- package/dist/esm/clausePrecedence.native.js +170 -0
- package/dist/esm/clausePrecedence.native.js.map +1 -0
- package/dist/esm/clauseSources.mjs +23 -0
- package/dist/esm/clauseSources.mjs.map +1 -0
- package/dist/esm/clauseSources.native.js +23 -0
- package/dist/esm/clauseSources.native.js.map +1 -0
- package/dist/esm/config.mjs +103 -0
- package/dist/esm/config.mjs.map +1 -0
- package/dist/esm/config.native.js +156 -0
- package/dist/esm/config.native.js.map +1 -0
- package/dist/esm/evaluateProgram.mjs +45 -0
- package/dist/esm/evaluateProgram.mjs.map +1 -0
- package/dist/esm/evaluateProgram.native.js +48 -0
- package/dist/esm/evaluateProgram.native.js.map +1 -0
- package/dist/esm/fontShorthand.mjs +184 -0
- package/dist/esm/fontShorthand.mjs.map +1 -0
- package/dist/esm/fontShorthand.native.js +235 -0
- package/dist/esm/fontShorthand.native.js.map +1 -0
- package/dist/esm/geometricShorthand.mjs +102 -0
- package/dist/esm/geometricShorthand.mjs.map +1 -0
- package/dist/esm/geometricShorthand.native.js +106 -0
- package/dist/esm/geometricShorthand.native.js.map +1 -0
- package/dist/esm/index.mjs +1 -0
- package/dist/esm/index.native.js +1 -0
- package/dist/esm/lowerProgram.mjs +182 -0
- package/dist/esm/lowerProgram.mjs.map +1 -0
- package/dist/esm/lowerProgram.native.js +232 -0
- package/dist/esm/lowerProgram.native.js.map +1 -0
- package/dist/esm/mergeFlatValues.mjs +27 -0
- package/dist/esm/mergeFlatValues.mjs.map +1 -0
- package/dist/esm/mergeFlatValues.native.js +46 -0
- package/dist/esm/mergeFlatValues.native.js.map +1 -0
- package/dist/esm/modifierRegistry.mjs +219 -0
- package/dist/esm/modifierRegistry.mjs.map +1 -0
- package/dist/esm/modifierRegistry.native.js +397 -0
- package/dist/esm/modifierRegistry.native.js.map +1 -0
- package/dist/esm/payloadShape.mjs +49 -0
- package/dist/esm/payloadShape.mjs.map +1 -0
- package/dist/esm/payloadShape.native.js +49 -0
- package/dist/esm/payloadShape.native.js.map +1 -0
- package/dist/esm/programEligibility.mjs +22 -0
- package/dist/esm/programEligibility.mjs.map +1 -0
- package/dist/esm/programEligibility.native.js +22 -0
- package/dist/esm/programEligibility.native.js.map +1 -0
- package/dist/esm/programHash.mjs +62 -0
- package/dist/esm/programHash.mjs.map +1 -0
- package/dist/esm/programHash.native.js +80 -0
- package/dist/esm/programHash.native.js.map +1 -0
- package/dist/esm/programs.mjs +103 -0
- package/dist/esm/programs.mjs.map +1 -0
- package/dist/esm/programs.native.js +193 -0
- package/dist/esm/programs.native.js.map +1 -0
- package/dist/esm/registry.mjs +595 -0
- package/dist/esm/registry.mjs.map +1 -0
- package/dist/esm/registry.native.js +599 -0
- package/dist/esm/registry.native.js.map +1 -0
- package/dist/esm/resolvePayload.mjs +273 -0
- package/dist/esm/resolvePayload.mjs.map +1 -0
- package/dist/esm/resolvePayload.native.js +277 -0
- package/dist/esm/resolvePayload.native.js.map +1 -0
- package/dist/esm/runtime.mjs +63 -0
- package/dist/esm/runtime.native.js +63 -0
- package/dist/esm/safeAreaVariables.mjs +18 -0
- package/dist/esm/safeAreaVariables.mjs.map +1 -0
- package/dist/esm/safeAreaVariables.native.js +18 -0
- package/dist/esm/safeAreaVariables.native.js.map +1 -0
- package/dist/esm/scanFlatValue.mjs +160 -0
- package/dist/esm/scanFlatValue.mjs.map +1 -0
- package/dist/esm/scanFlatValue.native.js +160 -0
- package/dist/esm/scanFlatValue.native.js.map +1 -0
- package/dist/esm/serializePayload.mjs +125 -0
- package/dist/esm/serializePayload.mjs.map +1 -0
- package/dist/esm/serializePayload.native.js +161 -0
- package/dist/esm/serializePayload.native.js.map +1 -0
- package/dist/esm/stateModifiers.mjs +19 -0
- package/dist/esm/stateModifiers.mjs.map +1 -0
- package/dist/esm/stateModifiers.native.js +19 -0
- package/dist/esm/stateModifiers.native.js.map +1 -0
- package/dist/esm/states.mjs +69 -0
- package/dist/esm/states.mjs.map +1 -0
- package/dist/esm/states.native.js +101 -0
- package/dist/esm/states.native.js.map +1 -0
- package/dist/esm/table.mjs +31 -0
- package/dist/esm/table.mjs.map +1 -0
- package/dist/esm/table.native.js +110 -0
- package/dist/esm/table.native.js.map +1 -0
- package/dist/esm/textDecorationFamily.mjs +106 -0
- package/dist/esm/textDecorationFamily.mjs.map +1 -0
- package/dist/esm/textDecorationFamily.native.js +174 -0
- package/dist/esm/textDecorationFamily.native.js.map +1 -0
- package/dist/esm/tooling.mjs +15 -0
- package/dist/esm/tooling.native.js +15 -0
- package/dist/esm/toolingAnnotations.mjs +85 -0
- package/dist/esm/toolingAnnotations.mjs.map +1 -0
- package/dist/esm/toolingAnnotations.native.js +111 -0
- package/dist/esm/toolingAnnotations.native.js.map +1 -0
- package/dist/esm/toolingDiagnostics.mjs +428 -0
- package/dist/esm/toolingDiagnostics.mjs.map +1 -0
- package/dist/esm/toolingDiagnostics.native.js +755 -0
- package/dist/esm/toolingDiagnostics.native.js.map +1 -0
- package/dist/esm/toolingRegistry.mjs +135 -0
- package/dist/esm/toolingRegistry.mjs.map +1 -0
- package/dist/esm/toolingRegistry.native.js +138 -0
- package/dist/esm/toolingRegistry.native.js.map +1 -0
- package/dist/esm/transformFamily.mjs +392 -0
- package/dist/esm/transformFamily.mjs.map +1 -0
- package/dist/esm/transformFamily.native.js +482 -0
- package/dist/esm/transformFamily.native.js.map +1 -0
- package/dist/esm/transition.mjs +434 -0
- package/dist/esm/transition.mjs.map +1 -0
- package/dist/esm/transition.native.js +472 -0
- package/dist/esm/transition.native.js.map +1 -0
- package/dist/esm/transitionAlign.mjs +95 -0
- package/dist/esm/transitionAlign.mjs.map +1 -0
- package/dist/esm/transitionAlign.native.js +132 -0
- package/dist/esm/transitionAlign.native.js.map +1 -0
- package/dist/esm/transitionLegacy.mjs +197 -0
- package/dist/esm/transitionLegacy.mjs.map +1 -0
- package/dist/esm/transitionLegacy.native.js +238 -0
- package/dist/esm/transitionLegacy.native.js.map +1 -0
- package/dist/esm/transitionNative.mjs +257 -0
- package/dist/esm/transitionNative.mjs.map +1 -0
- package/dist/esm/transitionNative.native.js +259 -0
- package/dist/esm/transitionNative.native.js.map +1 -0
- package/dist/esm/unitlessNumbers.mjs +65 -0
- package/dist/esm/unitlessNumbers.mjs.map +1 -0
- package/dist/esm/unitlessNumbers.native.js +83 -0
- package/dist/esm/unitlessNumbers.native.js.map +1 -0
- package/dist/esm/v6ThemeNames.mjs +23 -0
- package/dist/esm/v6ThemeNames.mjs.map +1 -0
- package/dist/esm/v6ThemeNames.native.js +27 -0
- package/dist/esm/v6ThemeNames.native.js.map +1 -0
- package/dist/esm/valueParser.mjs +125 -0
- package/dist/esm/valueParser.mjs.map +1 -0
- package/dist/esm/valueParser.native.js +125 -0
- package/dist/esm/valueParser.native.js.map +1 -0
- package/dist/esm/valueTypes.mjs +14 -0
- package/dist/esm/valueTypes.mjs.map +1 -0
- package/dist/esm/valueTypes.native.js +14 -0
- package/dist/esm/valueTypes.native.js.map +1 -0
- package/package.json +98 -4
- package/src/backgroundFamily.ts +182 -0
- package/src/borderFamily.ts +172 -0
- package/src/candidate.ts +691 -0
- package/src/candidateTarget.ts +67 -0
- package/src/clauseCapability.ts +209 -0
- package/src/clausePrecedence.ts +198 -0
- package/src/clauseSources.ts +29 -0
- package/src/config.ts +169 -0
- package/src/evaluateProgram.ts +91 -0
- package/src/fontShorthand.ts +177 -0
- package/src/geometricShorthand.ts +105 -0
- package/src/index.ts +1 -0
- package/src/lowerProgram.ts +398 -0
- package/src/modifierRegistry.ts +340 -0
- package/src/payloadShape.ts +92 -0
- package/src/programEligibility.ts +46 -0
- package/src/programHash.ts +128 -0
- package/src/programs.ts +95 -0
- package/src/registry.ts +367 -0
- package/src/resolvePayload.ts +480 -0
- package/src/runtime.ts +32 -0
- package/src/safeAreaVariables.ts +19 -0
- package/src/scanFlatValue.ts +327 -0
- package/src/serializePayload.ts +199 -0
- package/src/stateModifiers.ts +36 -0
- package/src/states.ts +128 -0
- package/src/table.ts +47 -0
- package/src/textDecorationFamily.ts +119 -0
- package/src/tooling.ts +8 -0
- package/src/toolingAnnotations.ts +151 -0
- package/src/toolingDiagnostics.ts +735 -0
- package/src/toolingRegistry.ts +130 -0
- package/src/transformFamily.ts +590 -0
- package/src/transition.ts +553 -0
- package/src/transitionAlign.ts +165 -0
- package/src/transitionLegacy.ts +237 -0
- package/src/transitionNative.ts +357 -0
- package/src/unitlessNumbers.ts +61 -0
- package/src/v6ThemeNames.ts +40 -0
- package/src/valueParser.ts +193 -0
- package/src/valueTypes.ts +136 -0
- package/types/backgroundFamily.d.ts +17 -0
- package/types/backgroundFamily.d.ts.map +11 -0
- package/types/borderFamily.d.ts +23 -0
- package/types/borderFamily.d.ts.map +11 -0
- package/types/candidate.d.ts +52 -0
- package/types/candidate.d.ts.map +11 -0
- package/types/candidateTarget.d.ts +32 -0
- package/types/candidateTarget.d.ts.map +11 -0
- package/types/clauseCapability.d.ts +69 -0
- package/types/clauseCapability.d.ts.map +11 -0
- package/types/clausePrecedence.d.ts +30 -0
- package/types/clausePrecedence.d.ts.map +11 -0
- package/types/clauseSources.d.ts +12 -0
- package/types/clauseSources.d.ts.map +11 -0
- package/types/config.d.ts +44 -0
- package/types/config.d.ts.map +11 -0
- package/types/evaluateProgram.d.ts +27 -0
- package/types/evaluateProgram.d.ts.map +11 -0
- package/types/fontShorthand.d.ts +25 -0
- package/types/fontShorthand.d.ts.map +11 -0
- package/types/geometricShorthand.d.ts +21 -0
- package/types/geometricShorthand.d.ts.map +11 -0
- package/types/index.d.ts +3 -0
- package/types/index.d.ts.map +11 -0
- package/types/lowerProgram.d.ts +73 -0
- package/types/lowerProgram.d.ts.map +11 -0
- package/types/mergeFlatValues.d.ts +14 -0
- package/types/mergeFlatValues.d.ts.map +11 -0
- package/types/modifierRegistry.d.ts +70 -0
- package/types/modifierRegistry.d.ts.map +11 -0
- package/types/payloadShape.d.ts +15 -0
- package/types/payloadShape.d.ts.map +11 -0
- package/types/programEligibility.d.ts +23 -0
- package/types/programEligibility.d.ts.map +11 -0
- package/types/programHash.d.ts +20 -0
- package/types/programHash.d.ts.map +11 -0
- package/types/programs.d.ts +18 -0
- package/types/programs.d.ts.map +11 -0
- package/types/registry.d.ts +24 -0
- package/types/registry.d.ts.map +11 -0
- package/types/resolvePayload.d.ts +75 -0
- package/types/resolvePayload.d.ts.map +11 -0
- package/types/runtime.d.ts +34 -0
- package/types/runtime.d.ts.map +11 -0
- package/types/safeAreaVariables.d.ts +5 -0
- package/types/safeAreaVariables.d.ts.map +11 -0
- package/types/scanFlatValue.d.ts +29 -0
- package/types/scanFlatValue.d.ts.map +11 -0
- package/types/serializePayload.d.ts +13 -0
- package/types/serializePayload.d.ts.map +11 -0
- package/types/stateModifiers.d.ts +14 -0
- package/types/stateModifiers.d.ts.map +11 -0
- package/types/states.d.ts +22 -0
- package/types/states.d.ts.map +11 -0
- package/types/table.d.ts +4 -0
- package/types/table.d.ts.map +11 -0
- package/types/textDecorationFamily.d.ts +23 -0
- package/types/textDecorationFamily.d.ts.map +11 -0
- package/types/tooling.d.ts +10 -0
- package/types/tooling.d.ts.map +11 -0
- package/types/toolingAnnotations.d.ts +29 -0
- package/types/toolingAnnotations.d.ts.map +11 -0
- package/types/toolingDiagnostics.d.ts +114 -0
- package/types/toolingDiagnostics.d.ts.map +11 -0
- package/types/toolingRegistry.d.ts +10 -0
- package/types/toolingRegistry.d.ts.map +11 -0
- package/types/transformFamily.d.ts +83 -0
- package/types/transformFamily.d.ts.map +11 -0
- package/types/transition.d.ts +65 -0
- package/types/transition.d.ts.map +11 -0
- package/types/transitionAlign.d.ts +15 -0
- package/types/transitionAlign.d.ts.map +11 -0
- package/types/transitionLegacy.d.ts +9 -0
- package/types/transitionLegacy.d.ts.map +11 -0
- package/types/transitionNative.d.ts +41 -0
- package/types/transitionNative.d.ts.map +11 -0
- package/types/unitlessNumbers.d.ts +3 -0
- package/types/unitlessNumbers.d.ts.map +11 -0
- package/types/v6ThemeNames.d.ts +7 -0
- package/types/v6ThemeNames.d.ts.map +11 -0
- package/types/valueParser.d.ts +36 -0
- package/types/valueParser.d.ts.map +11 -0
- package/types/valueTypes.d.ts +66 -0
- package/types/valueTypes.d.ts.map +11 -0
|
@@ -0,0 +1,590 @@
|
|
|
1
|
+
// The transform family.
|
|
2
|
+
//
|
|
3
|
+
// See plans/dom-tailwind-flat-values.md — "The transform family" — and the
|
|
4
|
+
// Transforms section of plans/react-native-style-capabilities.md for the RN
|
|
5
|
+
// facts every choice here cites.
|
|
6
|
+
//
|
|
7
|
+
// `x`, `y`, `scale`, and `rotate` stay first-class props, each its own program
|
|
8
|
+
// with independent clause replacement, which is what makes `scale="1 enter:0.9"`
|
|
9
|
+
// an independently replaceable lifecycle program.
|
|
10
|
+
//
|
|
11
|
+
// Web: uniform `scale` and `rotate` lower to the CSS individual properties
|
|
12
|
+
// directly. Where two programs share one CSS property — `x` and `y` both feed
|
|
13
|
+
// `translate`, `scaleX`/`scaleY` both feed `scale` — each program owns a per-axis
|
|
14
|
+
// custom property and one static rule composes them. Transitions survive that
|
|
15
|
+
// indirection because changing a custom property triggers transitions on the
|
|
16
|
+
// property consuming it (browser-verified 2026-07-29).
|
|
17
|
+
//
|
|
18
|
+
// Native: RN has no individual transform properties through 0.86, so the caller
|
|
19
|
+
// composes ONE array in CSS individual-property order — translate, rotate, scale,
|
|
20
|
+
// then the raw `transform` entries. That order is semantic: array entries are
|
|
21
|
+
// matrix-multiplied in authored order, so it is never sorted and never derived
|
|
22
|
+
// from object iteration.
|
|
23
|
+
|
|
24
|
+
export interface TransformComposition {
|
|
25
|
+
/** the CSS property the axis variables compose into */
|
|
26
|
+
property: string
|
|
27
|
+
/** local axis defaults that prevent inherited parent transforms from leaking in */
|
|
28
|
+
defaults: Readonly<Record<string, string>>
|
|
29
|
+
/** the composing declaration value, with per-axis fallbacks */
|
|
30
|
+
value: string
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export type TransformTargetKind =
|
|
34
|
+
/** the program writes the CSS individual property directly */
|
|
35
|
+
| 'property'
|
|
36
|
+
/** the program writes a per-axis custom property that a static rule composes */
|
|
37
|
+
| 'axis-variable'
|
|
38
|
+
|
|
39
|
+
export interface TransformTarget {
|
|
40
|
+
prop: string
|
|
41
|
+
kind: TransformTargetKind
|
|
42
|
+
/** the declaration this program writes, and the property it hashes under */
|
|
43
|
+
declaration: string
|
|
44
|
+
/** the CSS property that ultimately changes; two targets sharing this and
|
|
45
|
+
* differing in `kind` would fight for one declaration */
|
|
46
|
+
effectiveProperty: string
|
|
47
|
+
/** present for `axis-variable` targets */
|
|
48
|
+
composition?: TransformComposition
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// `0px` rather than `0` so the fallback is unambiguous in both slots
|
|
52
|
+
const translateComposition: TransformComposition = Object.freeze({
|
|
53
|
+
property: 'translate',
|
|
54
|
+
defaults: Object.freeze({ '--t-x': '0px', '--t-y': '0px' }),
|
|
55
|
+
value: 'var(--t-x, 0px) var(--t-y, 0px)',
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
const scaleComposition: TransformComposition = Object.freeze({
|
|
59
|
+
property: 'scale',
|
|
60
|
+
defaults: Object.freeze({ '--t-scale-x': '1', '--t-scale-y': '1' }),
|
|
61
|
+
value: 'var(--t-scale-x, 1) var(--t-scale-y, 1)',
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* One entry per program TARGET. Uniform `scale` is absent on purpose: it expands
|
|
66
|
+
* to both axis targets the way `padding` expands to four sides, so no two
|
|
67
|
+
* mechanisms ever write the CSS `scale` property and a later `scaleX` replaces
|
|
68
|
+
* just its axis through the ordinary forward merge.
|
|
69
|
+
*/
|
|
70
|
+
export const transformFamilyTargets: Readonly<Record<string, TransformTarget>> =
|
|
71
|
+
Object.freeze({
|
|
72
|
+
x: {
|
|
73
|
+
prop: 'x',
|
|
74
|
+
kind: 'axis-variable',
|
|
75
|
+
declaration: '--t-x',
|
|
76
|
+
effectiveProperty: 'translate',
|
|
77
|
+
composition: translateComposition,
|
|
78
|
+
},
|
|
79
|
+
y: {
|
|
80
|
+
prop: 'y',
|
|
81
|
+
kind: 'axis-variable',
|
|
82
|
+
declaration: '--t-y',
|
|
83
|
+
effectiveProperty: 'translate',
|
|
84
|
+
composition: translateComposition,
|
|
85
|
+
},
|
|
86
|
+
scaleX: {
|
|
87
|
+
prop: 'scaleX',
|
|
88
|
+
kind: 'axis-variable',
|
|
89
|
+
declaration: '--t-scale-x',
|
|
90
|
+
effectiveProperty: 'scale',
|
|
91
|
+
composition: scaleComposition,
|
|
92
|
+
},
|
|
93
|
+
scaleY: {
|
|
94
|
+
prop: 'scaleY',
|
|
95
|
+
kind: 'axis-variable',
|
|
96
|
+
declaration: '--t-scale-y',
|
|
97
|
+
effectiveProperty: 'scale',
|
|
98
|
+
composition: scaleComposition,
|
|
99
|
+
},
|
|
100
|
+
rotate: {
|
|
101
|
+
prop: 'rotate',
|
|
102
|
+
kind: 'property',
|
|
103
|
+
declaration: 'rotate',
|
|
104
|
+
effectiveProperty: 'rotate',
|
|
105
|
+
},
|
|
106
|
+
})
|
|
107
|
+
|
|
108
|
+
/** authored prop -> the targets it contributes, uniform `scale` expanding to both axes */
|
|
109
|
+
const transformPropTargets: Readonly<Record<string, readonly TransformTarget[]>> =
|
|
110
|
+
Object.freeze({
|
|
111
|
+
x: [transformFamilyTargets.x],
|
|
112
|
+
y: [transformFamilyTargets.y],
|
|
113
|
+
rotate: [transformFamilyTargets.rotate],
|
|
114
|
+
scaleX: [transformFamilyTargets.scaleX],
|
|
115
|
+
scaleY: [transformFamilyTargets.scaleY],
|
|
116
|
+
scale: [transformFamilyTargets.scaleX, transformFamilyTargets.scaleY],
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
/** the authored props that lower through the transform family */
|
|
120
|
+
export const transformFamilyProps: ReadonlySet<string> = new Set(
|
|
121
|
+
Object.keys(transformPropTargets)
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
const noTargets: readonly TransformTarget[] = Object.freeze([])
|
|
125
|
+
|
|
126
|
+
/** the targets an authored transform prop contributes; empty when not in the family */
|
|
127
|
+
export function getTransformTargets(prop: string): readonly TransformTarget[] {
|
|
128
|
+
return transformPropTargets[prop] ?? noTargets
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/** the declarations an authored transform prop owns; empty when not in the family */
|
|
132
|
+
export function transformDeclarationsFor(prop: string): readonly string[] {
|
|
133
|
+
return transformDeclarations[prop] ?? noDeclarations
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const noDeclarations: readonly string[] = Object.freeze([])
|
|
137
|
+
|
|
138
|
+
const transformDeclarations: Readonly<Record<string, readonly string[]>> = Object.freeze({
|
|
139
|
+
x: ['--t-x'],
|
|
140
|
+
y: ['--t-y'],
|
|
141
|
+
rotate: ['rotate'],
|
|
142
|
+
scaleX: ['--t-scale-x'],
|
|
143
|
+
scaleY: ['--t-scale-y'],
|
|
144
|
+
scale: ['--t-scale-x', '--t-scale-y'],
|
|
145
|
+
})
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Declaration -> the authored prop it evaluates as on native, so the evaluator
|
|
149
|
+
* can turn program results back into `composeTransformArray` input.
|
|
150
|
+
*/
|
|
151
|
+
export const transformPropForDeclaration: Readonly<Record<string, string>> =
|
|
152
|
+
Object.freeze({
|
|
153
|
+
'--t-x': 'x',
|
|
154
|
+
'--t-y': 'y',
|
|
155
|
+
'--t-scale-x': 'scaleX',
|
|
156
|
+
'--t-scale-y': 'scaleY',
|
|
157
|
+
rotate: 'rotate',
|
|
158
|
+
})
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* The unit a bare legacy number carries for each declaration, so a displaced
|
|
162
|
+
* plain value lifts into a program base with the right spelling: lengths take
|
|
163
|
+
* px, scale is unitless, rotate takes deg.
|
|
164
|
+
*/
|
|
165
|
+
export const transformDeclarationUnit: Readonly<Record<string, 'px' | 'none' | 'deg'>> =
|
|
166
|
+
Object.freeze({
|
|
167
|
+
'--t-x': 'px',
|
|
168
|
+
'--t-y': 'px',
|
|
169
|
+
'--t-scale-x': 'none',
|
|
170
|
+
'--t-scale-y': 'none',
|
|
171
|
+
rotate: 'deg',
|
|
172
|
+
})
|
|
173
|
+
|
|
174
|
+
/** legacy flat transform keys that write a declaration, uniform parent last */
|
|
175
|
+
export const legacyTransformKeysFor: Readonly<Record<string, readonly string[]>> =
|
|
176
|
+
Object.freeze({
|
|
177
|
+
'--t-x': ['x'],
|
|
178
|
+
'--t-y': ['y'],
|
|
179
|
+
'--t-scale-x': ['scaleX', 'scale'],
|
|
180
|
+
'--t-scale-y': ['scaleY', 'scale'],
|
|
181
|
+
rotate: ['rotate'],
|
|
182
|
+
})
|
|
183
|
+
|
|
184
|
+
/** the sibling axis a uniform legacy `scale` also covers */
|
|
185
|
+
export const uniformLegacySiblings: Readonly<Record<string, string>> = Object.freeze({
|
|
186
|
+
'--t-scale-x': 'scaleY',
|
|
187
|
+
'--t-scale-y': 'scaleX',
|
|
188
|
+
})
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Custom property -> the rule composing its axis group, so the web lowering can
|
|
192
|
+
* emit the composing rule alongside an axis program without knowing the family.
|
|
193
|
+
*/
|
|
194
|
+
export const transformAxisCompositions: Readonly<Record<string, TransformComposition>> =
|
|
195
|
+
Object.freeze({
|
|
196
|
+
'--t-x': translateComposition,
|
|
197
|
+
'--t-y': translateComposition,
|
|
198
|
+
'--t-scale-x': scaleComposition,
|
|
199
|
+
'--t-scale-y': scaleComposition,
|
|
200
|
+
})
|
|
201
|
+
|
|
202
|
+
// ---------------------------------------------------------------------------
|
|
203
|
+
// native composition
|
|
204
|
+
// ---------------------------------------------------------------------------
|
|
205
|
+
|
|
206
|
+
/** one React Native transform array entry */
|
|
207
|
+
export type TransformEntry = Readonly<Record<string, string | number | readonly number[]>>
|
|
208
|
+
|
|
209
|
+
export type TransformDiagnosticCode =
|
|
210
|
+
/** a CSS transform function RN cannot represent faithfully */
|
|
211
|
+
| 'unsupported-transform-function'
|
|
212
|
+
/** a unit RN's array form cannot carry (turn, em, rem, physical units) */
|
|
213
|
+
| 'unsupported-transform-unit'
|
|
214
|
+
/** matrix() with a length RN rejects (it requires 9 or 16 numbers) */
|
|
215
|
+
| 'unsupported-matrix-length'
|
|
216
|
+
/** a value that is invalid CSS without a unit, so web would drop it too */
|
|
217
|
+
| 'unitless-transform-value'
|
|
218
|
+
/** the raw transform string could not be tokenized */
|
|
219
|
+
| 'malformed-transform'
|
|
220
|
+
|
|
221
|
+
export interface TransformDiagnostic {
|
|
222
|
+
code: TransformDiagnosticCode
|
|
223
|
+
/** the offending function, prop, or fragment */
|
|
224
|
+
source: string
|
|
225
|
+
message: string
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/** evaluated program values, keyed by the authored transform prop */
|
|
229
|
+
export type TransformProgramResults = Readonly<
|
|
230
|
+
Record<string, string | number | undefined | null>
|
|
231
|
+
>
|
|
232
|
+
|
|
233
|
+
export interface ComposedTransform {
|
|
234
|
+
transform: TransformEntry[]
|
|
235
|
+
errors: TransformDiagnostic[]
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Builds one RN transform array in CSS individual-property order: translate
|
|
240
|
+
* (x then y), rotate, scale, then the raw `transform` entries. Nothing is
|
|
241
|
+
* sorted, and an unrepresentable value is a diagnostic rather than a lossy
|
|
242
|
+
* forward to RN's permissive string parser.
|
|
243
|
+
*/
|
|
244
|
+
export function composeTransformArray(
|
|
245
|
+
results: TransformProgramResults,
|
|
246
|
+
rawTransform?: string | readonly TransformEntry[] | null
|
|
247
|
+
): ComposedTransform {
|
|
248
|
+
const transform: TransformEntry[] = []
|
|
249
|
+
const errors: TransformDiagnostic[] = []
|
|
250
|
+
|
|
251
|
+
// 1. translate
|
|
252
|
+
for (const [prop, key] of [
|
|
253
|
+
['x', 'translateX'],
|
|
254
|
+
['y', 'translateY'],
|
|
255
|
+
] as const) {
|
|
256
|
+
const value = results[prop]
|
|
257
|
+
if (value == null) continue
|
|
258
|
+
const length = readLength(value, prop, errors)
|
|
259
|
+
if (length !== null) transform.push({ [key]: length })
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// 2. rotate
|
|
263
|
+
if (results.rotate != null) {
|
|
264
|
+
const angle = readAngle(results.rotate, 'rotate', errors)
|
|
265
|
+
if (angle !== null) transform.push({ rotate: angle })
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// 3. scale — always per-axis, because uniform `scale` expanded to both axes at
|
|
269
|
+
// contribution. Equal axes collapse back to one `scale` entry so the common
|
|
270
|
+
// uniform case matches the v1 array byte for byte
|
|
271
|
+
const scaleX =
|
|
272
|
+
results.scaleX == null ? null : readNumber(results.scaleX, 'scaleX', errors)
|
|
273
|
+
const scaleY =
|
|
274
|
+
results.scaleY == null ? null : readNumber(results.scaleY, 'scaleY', errors)
|
|
275
|
+
if (scaleX !== null && scaleX === scaleY) {
|
|
276
|
+
transform.push({ scale: scaleX })
|
|
277
|
+
} else {
|
|
278
|
+
if (scaleX !== null) transform.push({ scaleX })
|
|
279
|
+
if (scaleY !== null) transform.push({ scaleY })
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
// 4. the raw transform property, last
|
|
283
|
+
if (rawTransform != null) {
|
|
284
|
+
if (typeof rawTransform === 'string') {
|
|
285
|
+
const parsed = parseTransformString(rawTransform)
|
|
286
|
+
for (const error of parsed.errors) errors.push(error)
|
|
287
|
+
for (const entry of parsed.transform) transform.push(entry)
|
|
288
|
+
} else {
|
|
289
|
+
for (const entry of rawTransform) transform.push(entry)
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
return { transform, errors }
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Parses a CSS transform string into RN array entries. Arrays are the only form
|
|
298
|
+
* Animated and Reanimated can animate, so the string is parsed exactly once here
|
|
299
|
+
* rather than handed to RN per frame.
|
|
300
|
+
*/
|
|
301
|
+
export function parseTransformString(input: string): ComposedTransform {
|
|
302
|
+
const transform: TransformEntry[] = []
|
|
303
|
+
const errors: TransformDiagnostic[] = []
|
|
304
|
+
|
|
305
|
+
let index = 0
|
|
306
|
+
const length = input.length
|
|
307
|
+
|
|
308
|
+
while (index < length) {
|
|
309
|
+
const code = input.charCodeAt(index)
|
|
310
|
+
// whitespace and commas separate functions
|
|
311
|
+
if (
|
|
312
|
+
code === 32 ||
|
|
313
|
+
code === 9 ||
|
|
314
|
+
code === 10 ||
|
|
315
|
+
code === 13 ||
|
|
316
|
+
code === 12 ||
|
|
317
|
+
code === 44
|
|
318
|
+
) {
|
|
319
|
+
index++
|
|
320
|
+
continue
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
const nameStart = index
|
|
324
|
+
while (index < length && input.charCodeAt(index) !== 40 /* ( */) {
|
|
325
|
+
const inner = input.charCodeAt(index)
|
|
326
|
+
if (inner === 32 || inner === 44) break
|
|
327
|
+
index++
|
|
328
|
+
}
|
|
329
|
+
const name = input.slice(nameStart, index).trim()
|
|
330
|
+
|
|
331
|
+
if (input.charCodeAt(index) !== 40) {
|
|
332
|
+
errors.push({
|
|
333
|
+
code: 'malformed-transform',
|
|
334
|
+
source: name || input.slice(nameStart),
|
|
335
|
+
message: `transform: expected "(" after "${name || input.slice(nameStart)}"`,
|
|
336
|
+
})
|
|
337
|
+
return { transform, errors }
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
// arguments up to the matching paren
|
|
341
|
+
index++
|
|
342
|
+
const argsStart = index
|
|
343
|
+
let depth = 1
|
|
344
|
+
while (index < length && depth > 0) {
|
|
345
|
+
const inner = input.charCodeAt(index)
|
|
346
|
+
if (inner === 40) depth++
|
|
347
|
+
else if (inner === 41) depth--
|
|
348
|
+
if (depth > 0) index++
|
|
349
|
+
}
|
|
350
|
+
if (depth !== 0) {
|
|
351
|
+
errors.push({
|
|
352
|
+
code: 'malformed-transform',
|
|
353
|
+
source: name,
|
|
354
|
+
message: `transform: "${name}(" is never closed`,
|
|
355
|
+
})
|
|
356
|
+
return { transform, errors }
|
|
357
|
+
}
|
|
358
|
+
const args = input
|
|
359
|
+
.slice(argsStart, index)
|
|
360
|
+
.split(',')
|
|
361
|
+
.map((arg) => arg.trim())
|
|
362
|
+
.filter((arg) => arg.length > 0)
|
|
363
|
+
index++
|
|
364
|
+
|
|
365
|
+
readFunction(name, args, transform, errors)
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
return { transform, errors }
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
function readFunction(
|
|
372
|
+
name: string,
|
|
373
|
+
args: readonly string[],
|
|
374
|
+
transform: TransformEntry[],
|
|
375
|
+
errors: TransformDiagnostic[]
|
|
376
|
+
): void {
|
|
377
|
+
switch (name) {
|
|
378
|
+
case 'translate': {
|
|
379
|
+
const x = readLength(args[0] ?? '0', 'translate', errors)
|
|
380
|
+
if (x !== null) transform.push({ translateX: x })
|
|
381
|
+
if (args.length > 1) {
|
|
382
|
+
const y = readLength(args[1], 'translate', errors)
|
|
383
|
+
if (y !== null) transform.push({ translateY: y })
|
|
384
|
+
}
|
|
385
|
+
return
|
|
386
|
+
}
|
|
387
|
+
case 'translateX':
|
|
388
|
+
case 'translateY': {
|
|
389
|
+
const value = readLength(args[0] ?? '0', name, errors)
|
|
390
|
+
if (value !== null) transform.push({ [name]: value })
|
|
391
|
+
return
|
|
392
|
+
}
|
|
393
|
+
case 'translate3d': {
|
|
394
|
+
// the JS parser accepts translate3d but Fabric's reader takes two entries,
|
|
395
|
+
// so decompose it and require a zero Z
|
|
396
|
+
const z = args[2] ?? '0'
|
|
397
|
+
if (readLength(z, name, []) !== 0) {
|
|
398
|
+
errors.push({
|
|
399
|
+
code: 'unsupported-transform-function',
|
|
400
|
+
source: name,
|
|
401
|
+
message: `transform: "${name}" with a non-zero Z is not supported on native; RN has no translateZ`,
|
|
402
|
+
})
|
|
403
|
+
return
|
|
404
|
+
}
|
|
405
|
+
const x = readLength(args[0] ?? '0', name, errors)
|
|
406
|
+
if (x !== null) transform.push({ translateX: x })
|
|
407
|
+
const y = readLength(args[1] ?? '0', name, errors)
|
|
408
|
+
if (y !== null) transform.push({ translateY: y })
|
|
409
|
+
return
|
|
410
|
+
}
|
|
411
|
+
case 'scale': {
|
|
412
|
+
const first = readNumber(args[0] ?? '1', name, errors)
|
|
413
|
+
if (first === null) return
|
|
414
|
+
if (args.length < 2) {
|
|
415
|
+
transform.push({ scale: first })
|
|
416
|
+
return
|
|
417
|
+
}
|
|
418
|
+
const second = readNumber(args[1], name, errors)
|
|
419
|
+
if (second === null) return
|
|
420
|
+
if (first === second) {
|
|
421
|
+
transform.push({ scale: first })
|
|
422
|
+
return
|
|
423
|
+
}
|
|
424
|
+
transform.push({ scaleX: first })
|
|
425
|
+
transform.push({ scaleY: second })
|
|
426
|
+
return
|
|
427
|
+
}
|
|
428
|
+
case 'scaleX':
|
|
429
|
+
case 'scaleY': {
|
|
430
|
+
const value = readNumber(args[0] ?? '1', name, errors)
|
|
431
|
+
if (value !== null) transform.push({ [name]: value })
|
|
432
|
+
return
|
|
433
|
+
}
|
|
434
|
+
case 'rotate':
|
|
435
|
+
case 'rotateX':
|
|
436
|
+
case 'rotateY':
|
|
437
|
+
case 'rotateZ':
|
|
438
|
+
case 'skewX':
|
|
439
|
+
case 'skewY': {
|
|
440
|
+
const value = readAngle(args[0] ?? '0', name, errors)
|
|
441
|
+
if (value !== null) transform.push({ [name]: value })
|
|
442
|
+
return
|
|
443
|
+
}
|
|
444
|
+
case 'perspective': {
|
|
445
|
+
const value = readLength(args[0] ?? '0', name, errors)
|
|
446
|
+
if (typeof value === 'number') transform.push({ perspective: value })
|
|
447
|
+
else if (value !== null) {
|
|
448
|
+
errors.push({
|
|
449
|
+
code: 'unsupported-transform-unit',
|
|
450
|
+
source: name,
|
|
451
|
+
message: `transform: "${name}" needs an absolute length, not "${args[0]}"`,
|
|
452
|
+
})
|
|
453
|
+
}
|
|
454
|
+
return
|
|
455
|
+
}
|
|
456
|
+
case 'matrix': {
|
|
457
|
+
// RN's parser requires 9 or 16 numbers; the standard six-number CSS
|
|
458
|
+
// matrix() is rejected rather than silently reinterpreted
|
|
459
|
+
const numbers: number[] = []
|
|
460
|
+
for (const arg of args) {
|
|
461
|
+
const value = readNumber(arg, name, errors)
|
|
462
|
+
if (value === null) return
|
|
463
|
+
numbers.push(value)
|
|
464
|
+
}
|
|
465
|
+
if (numbers.length !== 9 && numbers.length !== 16) {
|
|
466
|
+
errors.push({
|
|
467
|
+
code: 'unsupported-matrix-length',
|
|
468
|
+
source: name,
|
|
469
|
+
message: `transform: "matrix()" needs 9 or 16 numbers on native, got ${numbers.length}. The six-number CSS form has no faithful native lowering.`,
|
|
470
|
+
})
|
|
471
|
+
return
|
|
472
|
+
}
|
|
473
|
+
transform.push({ matrix: numbers })
|
|
474
|
+
return
|
|
475
|
+
}
|
|
476
|
+
default: {
|
|
477
|
+
errors.push({
|
|
478
|
+
code: 'unsupported-transform-function',
|
|
479
|
+
source: name,
|
|
480
|
+
message: `transform: "${name}" has no faithful native lowering`,
|
|
481
|
+
})
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
/** a length RN can carry: points as a number, or a percentage string */
|
|
487
|
+
function readLength(
|
|
488
|
+
value: string | number,
|
|
489
|
+
source: string,
|
|
490
|
+
errors: TransformDiagnostic[]
|
|
491
|
+
): number | string | null {
|
|
492
|
+
if (typeof value === 'number') return value
|
|
493
|
+
const text = value.trim()
|
|
494
|
+
if (text.endsWith('%')) {
|
|
495
|
+
// array entries keep percentages: RN >= 0.75 resolves them against the
|
|
496
|
+
// view's own size, and we never emit them inside a string
|
|
497
|
+
return Number.isNaN(Number.parseFloat(text)) ? fail() : text
|
|
498
|
+
}
|
|
499
|
+
if (text.endsWith('px')) {
|
|
500
|
+
const number = Number(text.slice(0, -2))
|
|
501
|
+
return Number.isFinite(number) ? number : fail()
|
|
502
|
+
}
|
|
503
|
+
const bare = Number(text)
|
|
504
|
+
if (Number.isFinite(bare)) {
|
|
505
|
+
// `0` is valid CSS without a unit; any other bare number is not, and RN's
|
|
506
|
+
// string parser would silently treat it as points
|
|
507
|
+
if (bare === 0) return 0
|
|
508
|
+
errors.push({
|
|
509
|
+
code: 'unitless-transform-value',
|
|
510
|
+
source,
|
|
511
|
+
message: `transform: "${text}" needs a unit (px or %) in "${source}"; a bare number is invalid CSS`,
|
|
512
|
+
})
|
|
513
|
+
return null
|
|
514
|
+
}
|
|
515
|
+
return fail()
|
|
516
|
+
|
|
517
|
+
function fail(): null {
|
|
518
|
+
errors.push({
|
|
519
|
+
code: 'unsupported-transform-unit',
|
|
520
|
+
source,
|
|
521
|
+
message: `transform: "${text}" is not a length native can carry in "${source}"; use px or %`,
|
|
522
|
+
})
|
|
523
|
+
return null
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
/** an angle RN can carry: deg or rad, as a string */
|
|
528
|
+
function readAngle(
|
|
529
|
+
value: string | number,
|
|
530
|
+
source: string,
|
|
531
|
+
errors: TransformDiagnostic[]
|
|
532
|
+
): string | null {
|
|
533
|
+
if (typeof value === 'number') {
|
|
534
|
+
if (value === 0) return '0deg'
|
|
535
|
+
errors.push({
|
|
536
|
+
code: 'unitless-transform-value',
|
|
537
|
+
source,
|
|
538
|
+
message: `transform: "${source}" needs deg or rad, got the bare number ${value}`,
|
|
539
|
+
})
|
|
540
|
+
return null
|
|
541
|
+
}
|
|
542
|
+
const text = value.trim()
|
|
543
|
+
if (text.endsWith('deg') || text.endsWith('rad')) {
|
|
544
|
+
return Number.isFinite(Number.parseFloat(text)) ? text : angleFail()
|
|
545
|
+
}
|
|
546
|
+
if (Number(text) === 0) return '0deg'
|
|
547
|
+
if (text.endsWith('turn') || text.endsWith('grad')) {
|
|
548
|
+
errors.push({
|
|
549
|
+
code: 'unsupported-transform-unit',
|
|
550
|
+
source,
|
|
551
|
+
message: `transform: "${text}" — RN supports only deg and rad, not ${text.endsWith('turn') ? 'turn' : 'grad'}`,
|
|
552
|
+
})
|
|
553
|
+
return null
|
|
554
|
+
}
|
|
555
|
+
if (Number.isFinite(Number(text))) {
|
|
556
|
+
errors.push({
|
|
557
|
+
code: 'unitless-transform-value',
|
|
558
|
+
source,
|
|
559
|
+
message: `transform: "${source}" needs deg or rad, got "${text}"`,
|
|
560
|
+
})
|
|
561
|
+
return null
|
|
562
|
+
}
|
|
563
|
+
return angleFail()
|
|
564
|
+
|
|
565
|
+
function angleFail(): null {
|
|
566
|
+
errors.push({
|
|
567
|
+
code: 'unsupported-transform-unit',
|
|
568
|
+
source,
|
|
569
|
+
message: `transform: "${text}" is not an angle native can carry in "${source}"`,
|
|
570
|
+
})
|
|
571
|
+
return null
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
function readNumber(
|
|
576
|
+
value: string | number,
|
|
577
|
+
source: string,
|
|
578
|
+
errors: TransformDiagnostic[]
|
|
579
|
+
): number | null {
|
|
580
|
+
if (typeof value === 'number') return value
|
|
581
|
+
const text = value.trim()
|
|
582
|
+
const number = Number(text)
|
|
583
|
+
if (Number.isFinite(number) && text !== '') return number
|
|
584
|
+
errors.push({
|
|
585
|
+
code: 'unsupported-transform-unit',
|
|
586
|
+
source,
|
|
587
|
+
message: `transform: "${text}" is not a plain number in "${source}"; scale is unitless on native`,
|
|
588
|
+
})
|
|
589
|
+
return null
|
|
590
|
+
}
|