@cortex-js/compute-engine 0.55.6 → 0.56.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/dist/compile.esm.js +776 -139
- package/dist/compile.min.esm.js +277 -78
- package/dist/compile.min.umd.cjs +277 -78
- package/dist/compile.umd.cjs +776 -139
- package/dist/compute-engine.esm.js +1299 -260
- package/dist/compute-engine.min.esm.js +298 -99
- package/dist/compute-engine.min.umd.cjs +298 -99
- package/dist/compute-engine.umd.cjs +1299 -260
- package/dist/core.esm.js +1298 -259
- package/dist/core.min.esm.js +297 -98
- package/dist/core.min.umd.cjs +297 -98
- package/dist/core.umd.cjs +1298 -259
- package/dist/interval.esm.js +134 -5
- package/dist/interval.min.esm.js +6 -6
- package/dist/interval.min.umd.cjs +6 -6
- package/dist/interval.umd.cjs +134 -5
- package/dist/latex-syntax.esm.js +160 -11
- package/dist/latex-syntax.min.esm.js +7 -7
- package/dist/latex-syntax.min.umd.cjs +7 -7
- package/dist/latex-syntax.umd.cjs +160 -11
- package/dist/math-json.esm.js +2 -2
- package/dist/math-json.min.esm.js +2 -2
- package/dist/math-json.min.umd.cjs +2 -2
- package/dist/math-json.umd.cjs +2 -2
- package/dist/numerics.esm.js +4 -2
- package/dist/numerics.min.esm.js +3 -3
- package/dist/numerics.min.umd.cjs +3 -3
- package/dist/numerics.umd.cjs +4 -2
- package/dist/types/big-decimal/big-decimal.d.ts +1 -1
- package/dist/types/big-decimal/index.d.ts +1 -1
- package/dist/types/big-decimal/transcendentals.d.ts +1 -1
- package/dist/types/big-decimal/utils.d.ts +1 -1
- package/dist/types/common/ansi-codes.d.ts +1 -1
- package/dist/types/common/configuration-change.d.ts +1 -1
- package/dist/types/common/fuzzy-string-match.d.ts +1 -1
- package/dist/types/common/grapheme-splitter.d.ts +1 -1
- package/dist/types/common/interruptible.d.ts +1 -1
- package/dist/types/common/one-of.d.ts +1 -1
- package/dist/types/common/signals.d.ts +1 -1
- package/dist/types/common/type/ast-nodes.d.ts +1 -1
- package/dist/types/common/type/boxed-type.d.ts +1 -1
- package/dist/types/common/type/lexer.d.ts +1 -1
- package/dist/types/common/type/parse.d.ts +1 -1
- package/dist/types/common/type/parser.d.ts +1 -1
- package/dist/types/common/type/primitive.d.ts +1 -1
- package/dist/types/common/type/reduce.d.ts +1 -1
- package/dist/types/common/type/serialize.d.ts +1 -1
- package/dist/types/common/type/subtype.d.ts +1 -1
- package/dist/types/common/type/type-builder.d.ts +1 -1
- package/dist/types/common/type/types.d.ts +2 -2
- package/dist/types/common/type/utils.d.ts +1 -1
- package/dist/types/common/utils.d.ts +1 -1
- package/dist/types/compile.d.ts +1 -1
- package/dist/types/compute-engine/assume.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/abstract-boxed-expression.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/apply.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/arithmetic-add.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/arithmetic-mul-div.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/arithmetic-power.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/ascii-math.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/box.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-dictionary.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-function.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-number.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-operator-definition.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-patterns.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-string.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-symbol.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-tensor.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/boxed-value-definition.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/cache.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/canonical-utils.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/canonical.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/compare.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/constants.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/expand.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/expression-map.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/factor.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/flatten.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/hold.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/inequality-bounds.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/init-lazy-refs.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/invisible-operator.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/match.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/negate.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/numerics.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/order.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/pattern-utils.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/polynomial-degree.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/polynomials.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/predicates.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/rules.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/serialize.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/sgn.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/simplify.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/solve-linear-system.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/solve.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/stochastic-equal.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/trigonometry.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/type-guards.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/utils.d.ts +1 -1
- package/dist/types/compute-engine/boxed-expression/validate.d.ts +1 -1
- package/dist/types/compute-engine/collection-utils.d.ts +1 -1
- package/dist/types/compute-engine/compilation/base-compiler.d.ts +1 -1
- package/dist/types/compute-engine/compilation/compile-expression.d.ts +1 -1
- package/dist/types/compute-engine/compilation/constant-folding.d.ts +1 -1
- package/dist/types/compute-engine/compilation/glsl-target.d.ts +1 -1
- package/dist/types/compute-engine/compilation/gpu-target.d.ts +15 -5
- package/dist/types/compute-engine/compilation/interval-javascript-target.d.ts +1 -1
- package/dist/types/compute-engine/compilation/javascript-target.d.ts +25 -3
- package/dist/types/compute-engine/compilation/python-target.d.ts +1 -1
- package/dist/types/compute-engine/compilation/types.d.ts +1 -1
- package/dist/types/compute-engine/compilation/wgsl-target.d.ts +1 -1
- package/dist/types/compute-engine/cost-function.d.ts +1 -1
- package/dist/types/compute-engine/engine-assumptions.d.ts +1 -1
- package/dist/types/compute-engine/engine-cache.d.ts +1 -1
- package/dist/types/compute-engine/engine-common-symbols.d.ts +1 -1
- package/dist/types/compute-engine/engine-compilation-targets.d.ts +1 -1
- package/dist/types/compute-engine/engine-configuration-lifecycle.d.ts +1 -1
- package/dist/types/compute-engine/engine-declarations.d.ts +1 -1
- package/dist/types/compute-engine/engine-expression-entrypoints.d.ts +1 -1
- package/dist/types/compute-engine/engine-extension-contracts.d.ts +1 -1
- package/dist/types/compute-engine/engine-library-bootstrap.d.ts +1 -1
- package/dist/types/compute-engine/engine-numeric-configuration.d.ts +1 -1
- package/dist/types/compute-engine/engine-runtime-state.d.ts +1 -1
- package/dist/types/compute-engine/engine-scope.d.ts +1 -1
- package/dist/types/compute-engine/engine-sequences.d.ts +1 -1
- package/dist/types/compute-engine/engine-simplification-rules.d.ts +1 -1
- package/dist/types/compute-engine/engine-startup-coordinator.d.ts +1 -1
- package/dist/types/compute-engine/engine-type-resolver.d.ts +1 -1
- package/dist/types/compute-engine/engine-validation-entrypoints.d.ts +1 -1
- package/dist/types/compute-engine/free-functions.d.ts +1 -1
- package/dist/types/compute-engine/function-utils.d.ts +1 -1
- package/dist/types/compute-engine/global-types.d.ts +1 -1
- package/dist/types/compute-engine/index.d.ts +22 -2
- package/dist/types/compute-engine/interval/arithmetic.d.ts +1 -1
- package/dist/types/compute-engine/interval/comparison.d.ts +1 -1
- package/dist/types/compute-engine/interval/elementary.d.ts +1 -1
- package/dist/types/compute-engine/interval/index.d.ts +1 -1
- package/dist/types/compute-engine/interval/trigonometric.d.ts +1 -1
- package/dist/types/compute-engine/interval/types.d.ts +1 -1
- package/dist/types/compute-engine/interval/util.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/default-dictionary.d.ts +4 -3
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-algebra.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-arithmetic.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-calculus.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-colors.d.ts +10 -0
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-complex.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-core.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-linear-algebra.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-logic.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-other.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-relational-operators.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-sets.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-statistics.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-symbols.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-trigonometry.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions-units.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/definitions.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/dictionary/indexed-types.d.ts +9 -1
- package/dist/types/compute-engine/latex-syntax/latex-syntax.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/parse-number.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/parse-symbol.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/parse.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/serialize-dms.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/serialize-number.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/serializer-style.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/serializer.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/tokenizer.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/types.d.ts +1 -1
- package/dist/types/compute-engine/latex-syntax/utils.d.ts +1 -1
- package/dist/types/compute-engine/library/arithmetic.d.ts +1 -1
- package/dist/types/compute-engine/library/calculus.d.ts +1 -1
- package/dist/types/compute-engine/library/collections.d.ts +1 -1
- package/dist/types/compute-engine/library/colors.d.ts +1 -1
- package/dist/types/compute-engine/library/combinatorics.d.ts +1 -1
- package/dist/types/compute-engine/library/complex.d.ts +1 -1
- package/dist/types/compute-engine/library/control-structures.d.ts +1 -1
- package/dist/types/compute-engine/library/core.d.ts +1 -1
- package/dist/types/compute-engine/library/fractals.d.ts +1 -1
- package/dist/types/compute-engine/library/library.d.ts +1 -1
- package/dist/types/compute-engine/library/linear-algebra.d.ts +1 -1
- package/dist/types/compute-engine/library/logic-analysis.d.ts +1 -1
- package/dist/types/compute-engine/library/logic.d.ts +1 -1
- package/dist/types/compute-engine/library/number-theory.d.ts +1 -1
- package/dist/types/compute-engine/library/polynomials.d.ts +1 -1
- package/dist/types/compute-engine/library/quantity-arithmetic.d.ts +1 -1
- package/dist/types/compute-engine/library/random-expression.d.ts +1 -1
- package/dist/types/compute-engine/library/relational-operator.d.ts +1 -1
- package/dist/types/compute-engine/library/sets.d.ts +1 -1
- package/dist/types/compute-engine/library/statistics.d.ts +1 -1
- package/dist/types/compute-engine/library/trigonometry.d.ts +1 -1
- package/dist/types/compute-engine/library/type-handlers.d.ts +1 -1
- package/dist/types/compute-engine/library/unit-data.d.ts +1 -1
- package/dist/types/compute-engine/library/units.d.ts +1 -1
- package/dist/types/compute-engine/library/utils.d.ts +1 -1
- package/dist/types/compute-engine/numeric-value/big-numeric-value.d.ts +1 -1
- package/dist/types/compute-engine/numeric-value/exact-numeric-value.d.ts +1 -1
- package/dist/types/compute-engine/numeric-value/machine-numeric-value.d.ts +1 -1
- package/dist/types/compute-engine/numeric-value/types.d.ts +1 -1
- package/dist/types/compute-engine/numerics/bigint.d.ts +1 -1
- package/dist/types/compute-engine/numerics/expression.d.ts +1 -1
- package/dist/types/compute-engine/numerics/interval.d.ts +1 -1
- package/dist/types/compute-engine/numerics/linear-algebra.d.ts +1 -1
- package/dist/types/compute-engine/numerics/monte-carlo.d.ts +1 -1
- package/dist/types/compute-engine/numerics/numeric-bigint.d.ts +1 -1
- package/dist/types/compute-engine/numerics/numeric-bignum.d.ts +1 -1
- package/dist/types/compute-engine/numerics/numeric-complex.d.ts +1 -1
- package/dist/types/compute-engine/numerics/numeric.d.ts +1 -1
- package/dist/types/compute-engine/numerics/primes.d.ts +1 -1
- package/dist/types/compute-engine/numerics/rationals.d.ts +1 -1
- package/dist/types/compute-engine/numerics/richardson.d.ts +1 -1
- package/dist/types/compute-engine/numerics/special-functions.d.ts +1 -1
- package/dist/types/compute-engine/numerics/statistics.d.ts +1 -1
- package/dist/types/compute-engine/numerics/strings.d.ts +1 -1
- package/dist/types/compute-engine/numerics/types.d.ts +1 -1
- package/dist/types/compute-engine/numerics/unit-data.d.ts +1 -1
- package/dist/types/compute-engine/oeis.d.ts +1 -1
- package/dist/types/compute-engine/sequence.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/antiderivative.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/derivative.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/distribute.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/fu-cost.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/fu-transforms.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/fu.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/logic-utils.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-abs.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-divide.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-factorial.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-hyperbolic.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-infinity.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-log.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-logic.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-power.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-product.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-rules.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-sum.d.ts +1 -1
- package/dist/types/compute-engine/symbolic/simplify-trig.d.ts +1 -1
- package/dist/types/compute-engine/tensor/tensor-fields.d.ts +1 -1
- package/dist/types/compute-engine/tensor/tensors.d.ts +1 -1
- package/dist/types/compute-engine/types-definitions.d.ts +1 -1
- package/dist/types/compute-engine/types-engine.d.ts +6 -2
- package/dist/types/compute-engine/types-evaluation.d.ts +1 -1
- package/dist/types/compute-engine/types-expression.d.ts +1 -1
- package/dist/types/compute-engine/types-kernel-evaluation.d.ts +1 -1
- package/dist/types/compute-engine/types-kernel-serialization.d.ts +1 -1
- package/dist/types/compute-engine/types-serialization.d.ts +1 -1
- package/dist/types/compute-engine/types.d.ts +1 -1
- package/dist/types/compute-engine.d.ts +1 -2
- package/dist/types/core.d.ts +1 -1
- package/dist/types/interval.d.ts +1 -1
- package/dist/types/latex-syntax.d.ts +2 -2
- package/dist/types/math-json/symbols.d.ts +1 -1
- package/dist/types/math-json/types.d.ts +1 -1
- package/dist/types/math-json/utils.d.ts +1 -1
- package/dist/types/math-json.d.ts +2 -2
- package/dist/types/numerics.d.ts +1 -1
- package/package.json +2 -2
package/dist/compile.esm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** Compute Engine 0.
|
|
1
|
+
/** Compute Engine 0.56.0 */
|
|
2
2
|
|
|
3
3
|
// src/compute-engine/numerics/richardson.ts
|
|
4
4
|
function extrapolate(f, x0, options = {}) {
|
|
@@ -1511,6 +1511,7 @@ var SCALAR_TYPES = [
|
|
|
1511
1511
|
];
|
|
1512
1512
|
var VALUE_TYPES = [
|
|
1513
1513
|
"value",
|
|
1514
|
+
"color",
|
|
1514
1515
|
...COLLECTION_TYPES,
|
|
1515
1516
|
...SCALAR_TYPES
|
|
1516
1517
|
];
|
|
@@ -3206,6 +3207,7 @@ var PRIMITIVE_SUBTYPES = {
|
|
|
3206
3207
|
symbol: [],
|
|
3207
3208
|
boolean: [],
|
|
3208
3209
|
string: [],
|
|
3210
|
+
color: [],
|
|
3209
3211
|
expression: EXPRESSION_TYPES
|
|
3210
3212
|
};
|
|
3211
3213
|
function isPrimitiveSubtype(lhs, rhs) {
|
|
@@ -8793,6 +8795,8 @@ var DEFINITIONS_ARITHMETIC = [
|
|
|
8793
8795
|
precedence: DIVISION_PRECEDENCE,
|
|
8794
8796
|
parse: "Mod"
|
|
8795
8797
|
},
|
|
8798
|
+
// Function-style alias: `\operatorname{mod}(a, b)`
|
|
8799
|
+
{ latexTrigger: "\\operatorname{mod}", parse: "Mod" },
|
|
8796
8800
|
{
|
|
8797
8801
|
latexTrigger: "\\pmod",
|
|
8798
8802
|
kind: "prefix",
|
|
@@ -9033,6 +9037,13 @@ var DEFINITIONS_ARITHMETIC = [
|
|
|
9033
9037
|
const rhs = serializer.wrap(operand(expr, 2), ADDITION_PRECEDENCE + 3);
|
|
9034
9038
|
return joinLatex([lhs, "-", rhs]);
|
|
9035
9039
|
}
|
|
9040
|
+
},
|
|
9041
|
+
// Euclidean distance between two points (tuples of numbers).
|
|
9042
|
+
{
|
|
9043
|
+
name: "Distance",
|
|
9044
|
+
latexTrigger: ["\\operatorname{distance}"],
|
|
9045
|
+
kind: "function",
|
|
9046
|
+
serialize: (serializer, expr) => "\\operatorname{distance}" + serializer.wrapArguments(expr)
|
|
9036
9047
|
}
|
|
9037
9048
|
];
|
|
9038
9049
|
function getIndexAssignment(expr, upper) {
|
|
@@ -10457,7 +10468,9 @@ var DEFINITIONS_STATISTICS = [
|
|
|
10457
10468
|
if (!expr || !symbol(expr)) return null;
|
|
10458
10469
|
return ["Mean", expr];
|
|
10459
10470
|
}
|
|
10460
|
-
}
|
|
10471
|
+
},
|
|
10472
|
+
// Function-style alias: `\operatorname{var}(...)`
|
|
10473
|
+
{ latexTrigger: "\\operatorname{var}", parse: "Variance" }
|
|
10461
10474
|
];
|
|
10462
10475
|
|
|
10463
10476
|
// src/compute-engine/numerics/unit-data.ts
|
|
@@ -11465,7 +11478,7 @@ var DEFINITIONS_OTHERS = [
|
|
|
11465
11478
|
36: "\\qquad"
|
|
11466
11479
|
}[v] ?? "";
|
|
11467
11480
|
}
|
|
11468
|
-
}
|
|
11481
|
+
},
|
|
11469
11482
|
// if (
|
|
11470
11483
|
// [
|
|
11471
11484
|
// '\\!',
|
|
@@ -11489,6 +11502,121 @@ var DEFINITIONS_OTHERS = [
|
|
|
11489
11502
|
// name: '',
|
|
11490
11503
|
// trigger: '\\check',
|
|
11491
11504
|
// },
|
|
11505
|
+
// ---------------------------------------------------------------------------
|
|
11506
|
+
// Function-style aliases for collection / random operators that some
|
|
11507
|
+
// notations write in lowercase (e.g. `\operatorname{shuffle}(L)`).
|
|
11508
|
+
// The capitalized library entries already exist; these are pure parse
|
|
11509
|
+
// aliases so the lowercase names don't land in `unsupported-operator`.
|
|
11510
|
+
// ---------------------------------------------------------------------------
|
|
11511
|
+
{ latexTrigger: "\\operatorname{random}", parse: "Random" },
|
|
11512
|
+
{ latexTrigger: "\\operatorname{shuffle}", parse: "Shuffle" },
|
|
11513
|
+
{ latexTrigger: "\\operatorname{repeat}", parse: "Repeat" },
|
|
11514
|
+
{ latexTrigger: "\\operatorname{join}", parse: "Join" },
|
|
11515
|
+
// ---------------------------------------------------------------------------
|
|
11516
|
+
// Geometric primitive heads. Registered as known typed heads so consumers
|
|
11517
|
+
// can branch on the operator name; CE itself doesn't render them. The
|
|
11518
|
+
// library entries (with no evaluator) live in `library/core.ts`.
|
|
11519
|
+
// ---------------------------------------------------------------------------
|
|
11520
|
+
{
|
|
11521
|
+
name: "Triangle",
|
|
11522
|
+
latexTrigger: ["\\operatorname{triangle}"],
|
|
11523
|
+
kind: "function",
|
|
11524
|
+
serialize: (serializer, expr) => "\\operatorname{triangle}" + serializer.wrapArguments(expr)
|
|
11525
|
+
},
|
|
11526
|
+
// Desmos's geometric `vector(p1, p2)` — a directed segment between two
|
|
11527
|
+
// points. Routed to a dedicated head (not the existing column-vector
|
|
11528
|
+
// `Vector`, which has a narrower `(number+) -> vector` signature).
|
|
11529
|
+
{
|
|
11530
|
+
name: "GeometricVector",
|
|
11531
|
+
latexTrigger: ["\\operatorname{vector}"],
|
|
11532
|
+
kind: "function",
|
|
11533
|
+
serialize: (serializer, expr) => "\\operatorname{vector}" + serializer.wrapArguments(expr)
|
|
11534
|
+
},
|
|
11535
|
+
{
|
|
11536
|
+
name: "Sphere",
|
|
11537
|
+
latexTrigger: ["\\operatorname{sphere}"],
|
|
11538
|
+
kind: "function",
|
|
11539
|
+
serialize: (serializer, expr) => "\\operatorname{sphere}" + serializer.wrapArguments(expr)
|
|
11540
|
+
},
|
|
11541
|
+
{
|
|
11542
|
+
name: "Segment",
|
|
11543
|
+
latexTrigger: ["\\operatorname{segment}"],
|
|
11544
|
+
kind: "function",
|
|
11545
|
+
serialize: (serializer, expr) => "\\operatorname{segment}" + serializer.wrapArguments(expr)
|
|
11546
|
+
}
|
|
11547
|
+
];
|
|
11548
|
+
|
|
11549
|
+
// src/compute-engine/latex-syntax/dictionary/definitions-colors.ts
|
|
11550
|
+
var DEFINITIONS_COLORS = [
|
|
11551
|
+
// Color constructors (one per colorspace, preserves space on evaluation)
|
|
11552
|
+
{
|
|
11553
|
+
name: "Rgb",
|
|
11554
|
+
latexTrigger: ["\\operatorname{rgb}"],
|
|
11555
|
+
kind: "function",
|
|
11556
|
+
serialize: (serializer, expr) => "\\operatorname{rgb}" + serializer.wrapArguments(expr)
|
|
11557
|
+
},
|
|
11558
|
+
{
|
|
11559
|
+
name: "Hsv",
|
|
11560
|
+
latexTrigger: ["\\operatorname{hsv}"],
|
|
11561
|
+
kind: "function",
|
|
11562
|
+
serialize: (serializer, expr) => "\\operatorname{hsv}" + serializer.wrapArguments(expr)
|
|
11563
|
+
},
|
|
11564
|
+
{
|
|
11565
|
+
name: "Hsl",
|
|
11566
|
+
latexTrigger: ["\\operatorname{hsl}"],
|
|
11567
|
+
kind: "function",
|
|
11568
|
+
serialize: (serializer, expr) => "\\operatorname{hsl}" + serializer.wrapArguments(expr)
|
|
11569
|
+
},
|
|
11570
|
+
{
|
|
11571
|
+
name: "Oklab",
|
|
11572
|
+
latexTrigger: ["\\operatorname{oklab}"],
|
|
11573
|
+
kind: "function",
|
|
11574
|
+
serialize: (serializer, expr) => "\\operatorname{oklab}" + serializer.wrapArguments(expr)
|
|
11575
|
+
},
|
|
11576
|
+
{
|
|
11577
|
+
name: "Oklch",
|
|
11578
|
+
latexTrigger: ["\\operatorname{oklch}"],
|
|
11579
|
+
kind: "function",
|
|
11580
|
+
serialize: (serializer, expr) => "\\operatorname{oklch}" + serializer.wrapArguments(expr)
|
|
11581
|
+
},
|
|
11582
|
+
// Conversion functions (color → color in the named space)
|
|
11583
|
+
{
|
|
11584
|
+
name: "AsRgb",
|
|
11585
|
+
latexTrigger: ["\\operatorname{asRgb}"],
|
|
11586
|
+
kind: "function",
|
|
11587
|
+
serialize: (serializer, expr) => "\\operatorname{asRgb}" + serializer.wrapArguments(expr)
|
|
11588
|
+
},
|
|
11589
|
+
{
|
|
11590
|
+
name: "AsHsv",
|
|
11591
|
+
latexTrigger: ["\\operatorname{asHsv}"],
|
|
11592
|
+
kind: "function",
|
|
11593
|
+
serialize: (serializer, expr) => "\\operatorname{asHsv}" + serializer.wrapArguments(expr)
|
|
11594
|
+
},
|
|
11595
|
+
{
|
|
11596
|
+
name: "AsHsl",
|
|
11597
|
+
latexTrigger: ["\\operatorname{asHsl}"],
|
|
11598
|
+
kind: "function",
|
|
11599
|
+
serialize: (serializer, expr) => "\\operatorname{asHsl}" + serializer.wrapArguments(expr)
|
|
11600
|
+
},
|
|
11601
|
+
{
|
|
11602
|
+
name: "AsOklab",
|
|
11603
|
+
latexTrigger: ["\\operatorname{asOklab}"],
|
|
11604
|
+
kind: "function",
|
|
11605
|
+
serialize: (serializer, expr) => "\\operatorname{asOklab}" + serializer.wrapArguments(expr)
|
|
11606
|
+
},
|
|
11607
|
+
{
|
|
11608
|
+
name: "AsOklch",
|
|
11609
|
+
latexTrigger: ["\\operatorname{asOklch}"],
|
|
11610
|
+
kind: "function",
|
|
11611
|
+
serialize: (serializer, expr) => "\\operatorname{asOklch}" + serializer.wrapArguments(expr)
|
|
11612
|
+
},
|
|
11613
|
+
// Perceptual difference (returns a scalar in [0, ~1])
|
|
11614
|
+
{
|
|
11615
|
+
name: "ColorDelta",
|
|
11616
|
+
latexTrigger: ["\\operatorname{colorDelta}"],
|
|
11617
|
+
kind: "function",
|
|
11618
|
+
serialize: (serializer, expr) => "\\operatorname{colorDelta}" + serializer.wrapArguments(expr)
|
|
11619
|
+
}
|
|
11492
11620
|
];
|
|
11493
11621
|
|
|
11494
11622
|
// src/compute-engine/latex-syntax/dictionary/default-dictionary.ts
|
|
@@ -11519,7 +11647,8 @@ var LATEX_DICTIONARY = [
|
|
|
11519
11647
|
...DEFINITIONS_STATISTICS,
|
|
11520
11648
|
...DEFINITIONS_UNITS,
|
|
11521
11649
|
...DEFINITIONS_OTHERS,
|
|
11522
|
-
...DEFINITIONS_PHYSICS
|
|
11650
|
+
...DEFINITIONS_PHYSICS,
|
|
11651
|
+
...DEFINITIONS_COLORS
|
|
11523
11652
|
];
|
|
11524
11653
|
|
|
11525
11654
|
// src/math-json/symbols.ts
|
|
@@ -15154,8 +15283,7 @@ function compile(expr, options) {
|
|
|
15154
15283
|
ce.pushScope();
|
|
15155
15284
|
try {
|
|
15156
15285
|
if (vars && typeof vars === "object") {
|
|
15157
|
-
for (const [k, v] of Object.entries(vars))
|
|
15158
|
-
ce.assign(k, v);
|
|
15286
|
+
for (const [k, v] of Object.entries(vars)) ce.assign(k, v);
|
|
15159
15287
|
}
|
|
15160
15288
|
return expr.evaluate().re;
|
|
15161
15289
|
} finally {
|
|
@@ -15242,8 +15370,7 @@ function tryGetComplexParts(expr, compile2) {
|
|
|
15242
15370
|
return { re: null, im: formatFloat(iScale) };
|
|
15243
15371
|
}
|
|
15244
15372
|
const compiledFactors = remaining.map((r) => compile2(r));
|
|
15245
|
-
if (iScale !== 1)
|
|
15246
|
-
compiledFactors.unshift(formatFloat(iScale));
|
|
15373
|
+
if (iScale !== 1) compiledFactors.unshift(formatFloat(iScale));
|
|
15247
15374
|
const imCode = foldTerms(compiledFactors, "1.0", "*");
|
|
15248
15375
|
return { re: null, im: imCode };
|
|
15249
15376
|
}
|
|
@@ -15308,6 +15435,40 @@ function rgbToHsl(r, g, b) {
|
|
|
15308
15435
|
else h = ((r - g) / d + 4) / 6;
|
|
15309
15436
|
return { h: h * 360, s, l };
|
|
15310
15437
|
}
|
|
15438
|
+
function hsvToRgb(h, s, v) {
|
|
15439
|
+
h = (h % 360 + 360) % 360;
|
|
15440
|
+
s = Math.max(0, Math.min(1, s));
|
|
15441
|
+
v = Math.max(0, Math.min(1, v));
|
|
15442
|
+
const c = v * s;
|
|
15443
|
+
const x = c * (1 - Math.abs(h / 60 % 2 - 1));
|
|
15444
|
+
const m = v - c;
|
|
15445
|
+
let r = 0, g = 0, b = 0;
|
|
15446
|
+
if (h < 60) [r, g, b] = [c, x, 0];
|
|
15447
|
+
else if (h < 120) [r, g, b] = [x, c, 0];
|
|
15448
|
+
else if (h < 180) [r, g, b] = [0, c, x];
|
|
15449
|
+
else if (h < 240) [r, g, b] = [0, x, c];
|
|
15450
|
+
else if (h < 300) [r, g, b] = [x, 0, c];
|
|
15451
|
+
else [r, g, b] = [c, 0, x];
|
|
15452
|
+
return { r: (r + m) * 255, g: (g + m) * 255, b: (b + m) * 255 };
|
|
15453
|
+
}
|
|
15454
|
+
function rgbToHsv(r, g, b) {
|
|
15455
|
+
r /= 255;
|
|
15456
|
+
g /= 255;
|
|
15457
|
+
b /= 255;
|
|
15458
|
+
const max2 = Math.max(r, g, b);
|
|
15459
|
+
const min2 = Math.min(r, g, b);
|
|
15460
|
+
const d = max2 - min2;
|
|
15461
|
+
let h = 0;
|
|
15462
|
+
if (d > 0) {
|
|
15463
|
+
if (max2 === r) h = (g - b) / d % 6;
|
|
15464
|
+
else if (max2 === g) h = (b - r) / d + 2;
|
|
15465
|
+
else h = (r - g) / d + 4;
|
|
15466
|
+
h *= 60;
|
|
15467
|
+
if (h < 0) h += 360;
|
|
15468
|
+
}
|
|
15469
|
+
const s = max2 === 0 ? 0 : d / max2;
|
|
15470
|
+
return { h, s, v: max2 };
|
|
15471
|
+
}
|
|
15311
15472
|
function parseHexColor(s) {
|
|
15312
15473
|
const hex = s.startsWith("#") ? s.substring(1) : s;
|
|
15313
15474
|
let r, g, b;
|
|
@@ -15763,6 +15924,13 @@ var NAMED_COLORS = {
|
|
|
15763
15924
|
};
|
|
15764
15925
|
function parseColor(s, darkMode) {
|
|
15765
15926
|
const str = s.trim().toLowerCase();
|
|
15927
|
+
const opacityMatch = str.match(/^(.+?)\s*\/\s*(\d+(?:\.\d+)?)%?\s*$/);
|
|
15928
|
+
if (opacityMatch) {
|
|
15929
|
+
const base = parseColor(opacityMatch[1].trim(), darkMode);
|
|
15930
|
+
const opacity = Math.max(0, Math.min(100, parseFloat(opacityMatch[2])));
|
|
15931
|
+
const alpha = Math.round(opacity / 100 * 255);
|
|
15932
|
+
return base & 4294967040 | alpha;
|
|
15933
|
+
}
|
|
15766
15934
|
if (str.startsWith("#")) {
|
|
15767
15935
|
const hex = str.substring(1);
|
|
15768
15936
|
let r, g, b, a = 255;
|
|
@@ -15895,14 +16063,6 @@ function parseColor(s, darkMode) {
|
|
|
15895
16063
|
console.warn(`parseColor: unrecognized color "${s}"`);
|
|
15896
16064
|
return 0;
|
|
15897
16065
|
}
|
|
15898
|
-
function parseColorToRgb01(s, darkMode) {
|
|
15899
|
-
const color = parseColor(s, darkMode);
|
|
15900
|
-
return [
|
|
15901
|
-
(color >>> 24 & 255) / 255,
|
|
15902
|
-
(color >>> 16 & 255) / 255,
|
|
15903
|
-
(color >>> 8 & 255) / 255
|
|
15904
|
-
];
|
|
15905
|
-
}
|
|
15906
16066
|
function apca(bgColor, fgColor) {
|
|
15907
16067
|
const bgRgb = asRgb(bgColor);
|
|
15908
16068
|
const fgRgb = asRgb(fgColor);
|
|
@@ -15961,6 +16121,12 @@ function contrastingColor(arg) {
|
|
|
15961
16121
|
const contrast2 = Math.abs(apca(fg2, bg));
|
|
15962
16122
|
return contrast1 >= contrast2 ? asColorNumber(fg1) : asColorNumber(fg2);
|
|
15963
16123
|
}
|
|
16124
|
+
function oklabDeltaE(a, b) {
|
|
16125
|
+
const dL = a.L - b.L;
|
|
16126
|
+
const da = a.a - b.a;
|
|
16127
|
+
const db = a.b - b.b;
|
|
16128
|
+
return Math.sqrt(dL * dL + da * da + db * db);
|
|
16129
|
+
}
|
|
15964
16130
|
var TYCHO_11 = [
|
|
15965
16131
|
"#4e79a7",
|
|
15966
16132
|
// Blue
|
|
@@ -20172,39 +20338,130 @@ var JAVASCRIPT_FUNCTIONS = {
|
|
|
20172
20338
|
if (args.length >= 2)
|
|
20173
20339
|
return `_SYS.colormap(${compile2(args[0])}, ${compile2(args[1])})`;
|
|
20174
20340
|
return `_SYS.colormap(${compile2(args[0])})`;
|
|
20341
|
+
},
|
|
20342
|
+
// -----------------------------------------------------------------------
|
|
20343
|
+
// Color constructor heads. All compile to OKLCh arrays at runtime — the
|
|
20344
|
+
// canonical color representation in this target. The constructors take
|
|
20345
|
+
// their own colorspace's components and convert internally.
|
|
20346
|
+
// (Mirrors the GPU target's design: color values are vec3 OKLCh.)
|
|
20347
|
+
// -----------------------------------------------------------------------
|
|
20348
|
+
Rgb: (args, compile2) => {
|
|
20349
|
+
if (args.length < 3) throw new Error("Rgb: need 3 components");
|
|
20350
|
+
return `_SYS.rgb(${args.map(compile2).join(", ")})`;
|
|
20351
|
+
},
|
|
20352
|
+
Hsv: (args, compile2) => {
|
|
20353
|
+
if (args.length < 3) throw new Error("Hsv: need 3 components");
|
|
20354
|
+
return `_SYS.hsv(${args.map(compile2).join(", ")})`;
|
|
20355
|
+
},
|
|
20356
|
+
Hsl: (args, compile2) => {
|
|
20357
|
+
if (args.length < 3) throw new Error("Hsl: need 3 components");
|
|
20358
|
+
return `_SYS.hsl(${args.map(compile2).join(", ")})`;
|
|
20359
|
+
},
|
|
20360
|
+
Oklab: (args, compile2) => {
|
|
20361
|
+
if (args.length < 3) throw new Error("Oklab: need 3 components");
|
|
20362
|
+
return `_SYS.oklab(${args.map(compile2).join(", ")})`;
|
|
20363
|
+
},
|
|
20364
|
+
Oklch: (args, compile2) => {
|
|
20365
|
+
if (args.length < 3) throw new Error("Oklch: need 3 components");
|
|
20366
|
+
return `_SYS.oklch(${args.map(compile2).join(", ")})`;
|
|
20367
|
+
},
|
|
20368
|
+
// -----------------------------------------------------------------------
|
|
20369
|
+
// As* converters. Compile-time output convention matches the engine and
|
|
20370
|
+
// the GPU target: each returns components in the named space as a 3- or
|
|
20371
|
+
// 4-element array. `AsRgb` uses 0-1 sRGB channels (consistent across all
|
|
20372
|
+
// layers). `AsOklch` is the identity (canonical form).
|
|
20373
|
+
// -----------------------------------------------------------------------
|
|
20374
|
+
AsRgb: ([c], compile2) => {
|
|
20375
|
+
if (c === null) throw new Error("AsRgb: no argument");
|
|
20376
|
+
return `_SYS.asRgb(${compile2(c)})`;
|
|
20377
|
+
},
|
|
20378
|
+
AsHsv: ([c], compile2) => {
|
|
20379
|
+
if (c === null) throw new Error("AsHsv: no argument");
|
|
20380
|
+
return `_SYS.asHsv(${compile2(c)})`;
|
|
20381
|
+
},
|
|
20382
|
+
AsHsl: ([c], compile2) => {
|
|
20383
|
+
if (c === null) throw new Error("AsHsl: no argument");
|
|
20384
|
+
return `_SYS.asHsl(${compile2(c)})`;
|
|
20385
|
+
},
|
|
20386
|
+
AsOklab: ([c], compile2) => {
|
|
20387
|
+
if (c === null) throw new Error("AsOklab: no argument");
|
|
20388
|
+
return `_SYS.asOklab(${compile2(c)})`;
|
|
20389
|
+
},
|
|
20390
|
+
AsOklch: ([c], compile2) => {
|
|
20391
|
+
if (c === null) throw new Error("AsOklch: no argument");
|
|
20392
|
+
return compile2(c);
|
|
20393
|
+
},
|
|
20394
|
+
// Perceptual color difference (ΔE_OK).
|
|
20395
|
+
ColorDelta: ([a, b], compile2) => {
|
|
20396
|
+
if (a === null || b === null)
|
|
20397
|
+
throw new Error("ColorDelta: need two colors");
|
|
20398
|
+
return `_SYS.colorDelta(${compile2(a)}, ${compile2(b)})`;
|
|
20399
|
+
},
|
|
20400
|
+
// Euclidean distance between two tuples (any positive dimension).
|
|
20401
|
+
// The GPU target maps `Distance` to the GLSL/WGSL `distance()` builtin
|
|
20402
|
+
// (vec-only); this JS handler works on plain arrays of any length.
|
|
20403
|
+
Distance: ([a, b], compile2) => {
|
|
20404
|
+
if (a === null || b === null) throw new Error("Distance: need two points");
|
|
20405
|
+
return `_SYS.distance(${compile2(a)}, ${compile2(b)})`;
|
|
20175
20406
|
}
|
|
20176
20407
|
};
|
|
20177
20408
|
function toRI(c) {
|
|
20178
20409
|
return { re: c.re, im: c.im };
|
|
20179
20410
|
}
|
|
20411
|
+
function normalizeAlpha(a) {
|
|
20412
|
+
if (a === void 0) return void 0;
|
|
20413
|
+
if (!Number.isFinite(a)) return void 0;
|
|
20414
|
+
if (Math.abs(a - 1) < 1e-9) return void 0;
|
|
20415
|
+
return a;
|
|
20416
|
+
}
|
|
20180
20417
|
function toRgb255(input) {
|
|
20181
20418
|
if (typeof input === "string") {
|
|
20182
20419
|
const c = parseColor(input);
|
|
20183
|
-
|
|
20420
|
+
const rgb2 = {
|
|
20184
20421
|
r: c >>> 24 & 255,
|
|
20185
20422
|
g: c >>> 16 & 255,
|
|
20186
|
-
b: c >>> 8 & 255
|
|
20187
|
-
alpha: (c & 255) / 255
|
|
20423
|
+
b: c >>> 8 & 255
|
|
20188
20424
|
};
|
|
20425
|
+
const alpha = normalizeAlpha((c & 255) / 255);
|
|
20426
|
+
if (alpha !== void 0) rgb2.alpha = alpha;
|
|
20427
|
+
return rgb2;
|
|
20428
|
+
}
|
|
20429
|
+
const rgb = oklchToRgb({ L: input[0], C: input[1], H: input[2] });
|
|
20430
|
+
if (input.length >= 4) {
|
|
20431
|
+
const alpha = normalizeAlpha(input[3]);
|
|
20432
|
+
if (alpha !== void 0) rgb.alpha = alpha;
|
|
20189
20433
|
}
|
|
20190
|
-
const rgb = {
|
|
20191
|
-
r: input[0] * 255,
|
|
20192
|
-
g: input[1] * 255,
|
|
20193
|
-
b: input[2] * 255
|
|
20194
|
-
};
|
|
20195
|
-
if (input.length >= 4) rgb.alpha = input[3];
|
|
20196
20434
|
return rgb;
|
|
20197
20435
|
}
|
|
20198
|
-
function
|
|
20199
|
-
|
|
20200
|
-
|
|
20201
|
-
|
|
20202
|
-
|
|
20203
|
-
|
|
20436
|
+
function toOklch(input) {
|
|
20437
|
+
if (typeof input === "string") {
|
|
20438
|
+
const c = parseColor(input);
|
|
20439
|
+
const r = c >>> 24 & 255;
|
|
20440
|
+
const g = c >>> 16 & 255;
|
|
20441
|
+
const b = c >>> 8 & 255;
|
|
20442
|
+
const oklch2 = rgbToOklch({ r, g, b });
|
|
20443
|
+
const alpha = normalizeAlpha((c & 255) / 255);
|
|
20444
|
+
if (alpha !== void 0) oklch2.alpha = alpha;
|
|
20445
|
+
return oklch2;
|
|
20446
|
+
}
|
|
20447
|
+
return {
|
|
20448
|
+
L: input[0],
|
|
20449
|
+
C: input[1],
|
|
20450
|
+
H: input[2],
|
|
20451
|
+
alpha: input.length >= 4 ? normalizeAlpha(input[3]) : void 0
|
|
20452
|
+
};
|
|
20453
|
+
}
|
|
20454
|
+
function packedToOklch(c) {
|
|
20455
|
+
const r = c >>> 24 & 255;
|
|
20456
|
+
const g = c >>> 16 & 255;
|
|
20457
|
+
const b = c >>> 8 & 255;
|
|
20458
|
+
const oklch2 = rgbToOklch({ r, g, b });
|
|
20459
|
+
const alpha = normalizeAlpha((c & 255) / 255);
|
|
20460
|
+
return alpha !== void 0 ? [oklch2.L, oklch2.C, oklch2.H, alpha] : [oklch2.L, oklch2.C, oklch2.H];
|
|
20204
20461
|
}
|
|
20205
20462
|
var colorHelpers = {
|
|
20206
20463
|
color(input) {
|
|
20207
|
-
return
|
|
20464
|
+
return packedToOklch(parseColor(input));
|
|
20208
20465
|
},
|
|
20209
20466
|
colorToString(input, format) {
|
|
20210
20467
|
const rgb = toRgb255(input);
|
|
@@ -20215,7 +20472,7 @@ var colorHelpers = {
|
|
|
20215
20472
|
const g = Math.round(Math.max(0, Math.min(255, rgb.g)));
|
|
20216
20473
|
const b = Math.round(Math.max(0, Math.min(255, rgb.b)));
|
|
20217
20474
|
let hex = `#${r.toString(16).padStart(2, "0")}${g.toString(16).padStart(2, "0")}${b.toString(16).padStart(2, "0")}`;
|
|
20218
|
-
if (rgb.alpha !== void 0
|
|
20475
|
+
if (rgb.alpha !== void 0) {
|
|
20219
20476
|
const a = Math.round(Math.max(0, Math.min(255, rgb.alpha * 255)));
|
|
20220
20477
|
hex += a.toString(16).padStart(2, "0");
|
|
20221
20478
|
}
|
|
@@ -20225,7 +20482,7 @@ var colorHelpers = {
|
|
|
20225
20482
|
const r = Math.round(rgb.r);
|
|
20226
20483
|
const g = Math.round(rgb.g);
|
|
20227
20484
|
const b = Math.round(rgb.b);
|
|
20228
|
-
if (rgb.alpha !== void 0
|
|
20485
|
+
if (rgb.alpha !== void 0)
|
|
20229
20486
|
return `rgb(${r} ${g} ${b} / ${rgb.alpha})`;
|
|
20230
20487
|
return `rgb(${r} ${g} ${b})`;
|
|
20231
20488
|
}
|
|
@@ -20234,7 +20491,7 @@ var colorHelpers = {
|
|
|
20234
20491
|
const h = Math.round(hsl.h * 10) / 10;
|
|
20235
20492
|
const s = Math.round(hsl.s * 1e3) / 10;
|
|
20236
20493
|
const l = Math.round(hsl.l * 1e3) / 10;
|
|
20237
|
-
if (rgb.alpha !== void 0
|
|
20494
|
+
if (rgb.alpha !== void 0)
|
|
20238
20495
|
return `hsl(${h} ${s}% ${l}% / ${rgb.alpha})`;
|
|
20239
20496
|
return `hsl(${h} ${s}% ${l}%)`;
|
|
20240
20497
|
}
|
|
@@ -20243,7 +20500,7 @@ var colorHelpers = {
|
|
|
20243
20500
|
const L = Math.round(c.L * 1e3) / 1e3;
|
|
20244
20501
|
const C = Math.round(c.C * 1e3) / 1e3;
|
|
20245
20502
|
const H = Math.round(c.H * 10) / 10;
|
|
20246
|
-
if (rgb.alpha !== void 0
|
|
20503
|
+
if (rgb.alpha !== void 0)
|
|
20247
20504
|
return `oklch(${L} ${C} ${H} / ${rgb.alpha})`;
|
|
20248
20505
|
return `oklch(${L} ${C} ${H})`;
|
|
20249
20506
|
}
|
|
@@ -20252,29 +20509,29 @@ var colorHelpers = {
|
|
|
20252
20509
|
}
|
|
20253
20510
|
},
|
|
20254
20511
|
colorMix(input1, input2, ratio = 0.5) {
|
|
20255
|
-
const
|
|
20256
|
-
const
|
|
20512
|
+
const c1 = toOklch(input1);
|
|
20513
|
+
const c2 = toOklch(input2);
|
|
20257
20514
|
ratio = Math.max(0, Math.min(1, ratio));
|
|
20258
|
-
const
|
|
20259
|
-
const
|
|
20260
|
-
let
|
|
20261
|
-
if (
|
|
20262
|
-
if (
|
|
20263
|
-
|
|
20264
|
-
|
|
20265
|
-
|
|
20266
|
-
|
|
20267
|
-
|
|
20268
|
-
|
|
20269
|
-
H
|
|
20270
|
-
|
|
20271
|
-
|
|
20272
|
-
const
|
|
20273
|
-
const
|
|
20274
|
-
const a1 =
|
|
20275
|
-
const a2 =
|
|
20276
|
-
const alpha = a1 + (a2 - a1) * ratio;
|
|
20277
|
-
return
|
|
20515
|
+
const c1Achromatic = c1.C < 1e-6;
|
|
20516
|
+
const c2Achromatic = c2.C < 1e-6;
|
|
20517
|
+
let H;
|
|
20518
|
+
if (c1Achromatic && c2Achromatic) H = c1.H;
|
|
20519
|
+
else if (c1Achromatic) H = c2.H;
|
|
20520
|
+
else if (c2Achromatic) H = c1.H;
|
|
20521
|
+
else {
|
|
20522
|
+
let dh = c2.H - c1.H;
|
|
20523
|
+
if (dh > 180) dh -= 360;
|
|
20524
|
+
if (dh < -180) dh += 360;
|
|
20525
|
+
H = c1.H + dh * ratio;
|
|
20526
|
+
if (H < 0) H += 360;
|
|
20527
|
+
if (H >= 360) H -= 360;
|
|
20528
|
+
}
|
|
20529
|
+
const L = c1.L + (c2.L - c1.L) * ratio;
|
|
20530
|
+
const C = c1.C + (c2.C - c1.C) * ratio;
|
|
20531
|
+
const a1 = c1.alpha ?? 1;
|
|
20532
|
+
const a2 = c2.alpha ?? 1;
|
|
20533
|
+
const alpha = normalizeAlpha(a1 + (a2 - a1) * ratio);
|
|
20534
|
+
return alpha !== void 0 ? [L, C, H, alpha] : [L, C, H];
|
|
20278
20535
|
},
|
|
20279
20536
|
colorContrast(bg, fg) {
|
|
20280
20537
|
return apca(toRgb255(bg), toRgb255(fg));
|
|
@@ -20282,11 +20539,11 @@ var colorHelpers = {
|
|
|
20282
20539
|
contrastingColor(bg, fg1, fg2) {
|
|
20283
20540
|
const bgRgb = toRgb255(bg);
|
|
20284
20541
|
if (fg1 !== void 0 && fg2 !== void 0) {
|
|
20285
|
-
return
|
|
20542
|
+
return packedToOklch(
|
|
20286
20543
|
contrastingColor({ bg: bgRgb, fg1: toRgb255(fg1), fg2: toRgb255(fg2) })
|
|
20287
20544
|
);
|
|
20288
20545
|
}
|
|
20289
|
-
return
|
|
20546
|
+
return packedToOklch(contrastingColor(bgRgb));
|
|
20290
20547
|
},
|
|
20291
20548
|
colorToColorspace(input, space) {
|
|
20292
20549
|
const rgb = toRgb255(input);
|
|
@@ -20315,7 +20572,7 @@ var colorHelpers = {
|
|
|
20315
20572
|
default:
|
|
20316
20573
|
throw new Error(`Unknown color space: ${space}`);
|
|
20317
20574
|
}
|
|
20318
|
-
if (alpha !== void 0
|
|
20575
|
+
if (alpha !== void 0) result.push(alpha);
|
|
20319
20576
|
return result;
|
|
20320
20577
|
},
|
|
20321
20578
|
colormap(name, arg) {
|
|
@@ -20327,7 +20584,7 @@ var colorHelpers = {
|
|
|
20327
20584
|
const palette = allPalettes[name];
|
|
20328
20585
|
if (!palette) throw new Error(`Unknown palette: ${name}`);
|
|
20329
20586
|
const colors = palette.map(
|
|
20330
|
-
(hex) =>
|
|
20587
|
+
(hex) => packedToOklch(parseColor(hex))
|
|
20331
20588
|
);
|
|
20332
20589
|
if (arg === void 0) return colors;
|
|
20333
20590
|
if (Number.isInteger(arg) && arg >= 2) {
|
|
@@ -20351,62 +20608,128 @@ var colorHelpers = {
|
|
|
20351
20608
|
const frac = pos - i;
|
|
20352
20609
|
if (frac === 0 || i >= colors.length - 1)
|
|
20353
20610
|
return [...colors[Math.min(i, colors.length - 1)]];
|
|
20354
|
-
const
|
|
20355
|
-
|
|
20356
|
-
|
|
20357
|
-
|
|
20358
|
-
|
|
20359
|
-
|
|
20360
|
-
|
|
20361
|
-
|
|
20362
|
-
|
|
20363
|
-
|
|
20364
|
-
|
|
20365
|
-
|
|
20366
|
-
|
|
20367
|
-
|
|
20368
|
-
|
|
20369
|
-
|
|
20370
|
-
|
|
20371
|
-
if (H >= 360) H -= 360;
|
|
20372
|
-
const mixed = oklchToRgb({
|
|
20373
|
-
L: c1.L + (c2.L - c1.L) * frac,
|
|
20374
|
-
C: c1.C + (c2.C - c1.C) * frac,
|
|
20375
|
-
H
|
|
20376
|
-
});
|
|
20377
|
-
return [mixed.r / 255, mixed.g / 255, mixed.b / 255];
|
|
20611
|
+
const [L1, C1, H1] = colors[i];
|
|
20612
|
+
const [L2, C2, H2] = colors[i + 1];
|
|
20613
|
+
const c1Achromatic = C1 < 1e-6;
|
|
20614
|
+
const c2Achromatic = C2 < 1e-6;
|
|
20615
|
+
let H;
|
|
20616
|
+
if (c1Achromatic && c2Achromatic) H = H1;
|
|
20617
|
+
else if (c1Achromatic) H = H2;
|
|
20618
|
+
else if (c2Achromatic) H = H1;
|
|
20619
|
+
else {
|
|
20620
|
+
let dh = H2 - H1;
|
|
20621
|
+
if (dh > 180) dh -= 360;
|
|
20622
|
+
if (dh < -180) dh += 360;
|
|
20623
|
+
H = H1 + dh * frac;
|
|
20624
|
+
if (H < 0) H += 360;
|
|
20625
|
+
if (H >= 360) H -= 360;
|
|
20626
|
+
}
|
|
20627
|
+
return [L1 + (L2 - L1) * frac, C1 + (C2 - C1) * frac, H];
|
|
20378
20628
|
},
|
|
20379
20629
|
colorFromColorspace(components, space) {
|
|
20380
20630
|
const c0 = components[0];
|
|
20381
20631
|
const c1 = components[1];
|
|
20382
20632
|
const c2 = components[2];
|
|
20383
20633
|
const alpha = components.length >= 4 ? components[3] : void 0;
|
|
20384
|
-
let
|
|
20634
|
+
let oklch2;
|
|
20385
20635
|
switch (space.toLowerCase()) {
|
|
20386
20636
|
case "rgb":
|
|
20387
|
-
|
|
20637
|
+
oklch2 = rgbToOklch({ r: c0 * 255, g: c1 * 255, b: c2 * 255 });
|
|
20388
20638
|
break;
|
|
20389
20639
|
case "hsl": {
|
|
20390
|
-
const
|
|
20391
|
-
|
|
20640
|
+
const rgb = hslToRgb(c0, c1, c2);
|
|
20641
|
+
oklch2 = rgbToOklch(rgb);
|
|
20392
20642
|
break;
|
|
20393
20643
|
}
|
|
20394
|
-
case "oklch":
|
|
20395
|
-
|
|
20396
|
-
result = [r.r / 255, r.g / 255, r.b / 255];
|
|
20644
|
+
case "oklch":
|
|
20645
|
+
oklch2 = { L: c0, C: c1, H: c2 };
|
|
20397
20646
|
break;
|
|
20398
|
-
}
|
|
20399
20647
|
case "oklab":
|
|
20400
|
-
case "lab":
|
|
20401
|
-
|
|
20402
|
-
result = [r.r / 255, r.g / 255, r.b / 255];
|
|
20648
|
+
case "lab":
|
|
20649
|
+
oklch2 = oklabToOklch({ L: c0, a: c1, b: c2 });
|
|
20403
20650
|
break;
|
|
20404
|
-
}
|
|
20405
20651
|
default:
|
|
20406
20652
|
throw new Error(`Unknown color space: ${space}`);
|
|
20407
20653
|
}
|
|
20408
|
-
|
|
20409
|
-
|
|
20654
|
+
return alpha !== void 0 ? [oklch2.L, oklch2.C, oklch2.H, alpha] : [oklch2.L, oklch2.C, oklch2.H];
|
|
20655
|
+
},
|
|
20656
|
+
// -----------------------------------------------------------------------
|
|
20657
|
+
// Color constructors. Each accepts components in its colorspace's natural
|
|
20658
|
+
// units and returns the canonical OKLCh array `[L, C, H]` (or with alpha).
|
|
20659
|
+
// -----------------------------------------------------------------------
|
|
20660
|
+
rgb(r, g, b, alpha) {
|
|
20661
|
+
const c = rgbToOklch({ r: r * 255, g: g * 255, b: b * 255 });
|
|
20662
|
+
const a = normalizeAlpha(alpha);
|
|
20663
|
+
return a !== void 0 ? [c.L, c.C, c.H, a] : [c.L, c.C, c.H];
|
|
20664
|
+
},
|
|
20665
|
+
hsv(h, s, v, alpha) {
|
|
20666
|
+
const rgb = hsvToRgb(h, s, v);
|
|
20667
|
+
const c = rgbToOklch(rgb);
|
|
20668
|
+
const a = normalizeAlpha(alpha);
|
|
20669
|
+
return a !== void 0 ? [c.L, c.C, c.H, a] : [c.L, c.C, c.H];
|
|
20670
|
+
},
|
|
20671
|
+
hsl(h, s, l, alpha) {
|
|
20672
|
+
const rgb = hslToRgb(h, s, l);
|
|
20673
|
+
const c = rgbToOklch({ r: rgb.r, g: rgb.g, b: rgb.b });
|
|
20674
|
+
const a = normalizeAlpha(alpha);
|
|
20675
|
+
return a !== void 0 ? [c.L, c.C, c.H, a] : [c.L, c.C, c.H];
|
|
20676
|
+
},
|
|
20677
|
+
oklab(L, a, b, alpha) {
|
|
20678
|
+
const c = oklabToOklch({ L, a, b });
|
|
20679
|
+
const al = normalizeAlpha(alpha);
|
|
20680
|
+
return al !== void 0 ? [c.L, c.C, c.H, al] : [c.L, c.C, c.H];
|
|
20681
|
+
},
|
|
20682
|
+
oklch(L, C, H, alpha) {
|
|
20683
|
+
const a = normalizeAlpha(alpha);
|
|
20684
|
+
return a !== void 0 ? [L, C, H, a] : [L, C, H];
|
|
20685
|
+
},
|
|
20686
|
+
// -----------------------------------------------------------------------
|
|
20687
|
+
// As* converters. Inputs are anything `toOklch` accepts (string, packed
|
|
20688
|
+
// int, or OKLCh array). Outputs are 3- or 4-element arrays in the named
|
|
20689
|
+
// space. sRGB-based outputs (asRgb/asHsv/asHsl) use 0-1 channels for
|
|
20690
|
+
// consistency with the GPU target's shader convention.
|
|
20691
|
+
// -----------------------------------------------------------------------
|
|
20692
|
+
asRgb(input) {
|
|
20693
|
+
const rgb = toRgb255(input);
|
|
20694
|
+
const r = rgb.r / 255;
|
|
20695
|
+
const g = rgb.g / 255;
|
|
20696
|
+
const b = rgb.b / 255;
|
|
20697
|
+
return rgb.alpha !== void 0 ? [r, g, b, rgb.alpha] : [r, g, b];
|
|
20698
|
+
},
|
|
20699
|
+
asHsv(input) {
|
|
20700
|
+
const rgb = toRgb255(input);
|
|
20701
|
+
const hsv = rgbToHsv(rgb.r, rgb.g, rgb.b);
|
|
20702
|
+
return rgb.alpha !== void 0 ? [hsv.h, hsv.s, hsv.v, rgb.alpha] : [hsv.h, hsv.s, hsv.v];
|
|
20703
|
+
},
|
|
20704
|
+
asHsl(input) {
|
|
20705
|
+
const rgb = toRgb255(input);
|
|
20706
|
+
const hsl = rgbToHsl(rgb.r, rgb.g, rgb.b);
|
|
20707
|
+
return rgb.alpha !== void 0 ? [hsl.h, hsl.s, hsl.l, rgb.alpha] : [hsl.h, hsl.s, hsl.l];
|
|
20708
|
+
},
|
|
20709
|
+
asOklab(input) {
|
|
20710
|
+
const c = toOklch(input);
|
|
20711
|
+
const lab = oklchToOklab({ L: c.L, C: c.C, H: c.H });
|
|
20712
|
+
return c.alpha !== void 0 ? [lab.L, lab.a, lab.b, c.alpha] : [lab.L, lab.a, lab.b];
|
|
20713
|
+
},
|
|
20714
|
+
// asOklch is identity — handled at compile time as a pass-through
|
|
20715
|
+
// Perceptual color difference (ΔE_OK).
|
|
20716
|
+
colorDelta(a, b) {
|
|
20717
|
+
const labA = oklchToOklab(toOklch(a));
|
|
20718
|
+
const labB = oklchToOklab(toOklch(b));
|
|
20719
|
+
return oklabDeltaE(labA, labB);
|
|
20720
|
+
},
|
|
20721
|
+
// Euclidean distance between two tuples. Plain numeric — not a color
|
|
20722
|
+
// operation despite living in the same helpers block.
|
|
20723
|
+
distance(a, b) {
|
|
20724
|
+
if (!Array.isArray(a) || !Array.isArray(b))
|
|
20725
|
+
throw new Error("Distance: expected two arrays");
|
|
20726
|
+
if (a.length !== b.length) throw new Error("Distance: dimension mismatch");
|
|
20727
|
+
let sumSq = 0;
|
|
20728
|
+
for (let i = 0; i < a.length; i++) {
|
|
20729
|
+
const d = a[i] - b[i];
|
|
20730
|
+
sumSq += d * d;
|
|
20731
|
+
}
|
|
20732
|
+
return Math.sqrt(sumSq);
|
|
20410
20733
|
}
|
|
20411
20734
|
};
|
|
20412
20735
|
var SYS_HELPERS = {
|
|
@@ -20845,6 +21168,13 @@ var GPU_OPERATORS = {
|
|
|
20845
21168
|
function gpuVec2(target) {
|
|
20846
21169
|
return target?.language === "wgsl" ? "vec2f" : "vec2";
|
|
20847
21170
|
}
|
|
21171
|
+
function gpuVec3(target) {
|
|
21172
|
+
return target?.language === "wgsl" ? "vec3f" : "vec3";
|
|
21173
|
+
}
|
|
21174
|
+
function readStringLiteral(expr) {
|
|
21175
|
+
if (!isString(expr)) return null;
|
|
21176
|
+
return expr.string?.toLowerCase() ?? null;
|
|
21177
|
+
}
|
|
20848
21178
|
function compileIntArg(expr, compile2, target) {
|
|
20849
21179
|
const c = tryGetConstant(expr);
|
|
20850
21180
|
if (c !== void 0 && Number.isInteger(c)) return c.toString();
|
|
@@ -20903,7 +21233,7 @@ function compileGPUSumProduct(kind, args, _compile, target) {
|
|
|
20903
21233
|
`for (${indexDecl} = ${lowerStr}; ${index} <= ${upperStr}; ${index}++) {`,
|
|
20904
21234
|
` ${acc} ${op}= ${body};`,
|
|
20905
21235
|
`}`,
|
|
20906
|
-
`return ${acc}
|
|
21236
|
+
`return ${acc};`
|
|
20907
21237
|
];
|
|
20908
21238
|
return lines.join("\n");
|
|
20909
21239
|
}
|
|
@@ -20957,8 +21287,7 @@ var GPU_FUNCTIONS = {
|
|
|
20957
21287
|
const iScale = isSymbol2(iFactor, "ImaginaryUnit") ? 1 : iFactor.im;
|
|
20958
21288
|
const realFactors = args.filter((_, i) => i !== iIndex);
|
|
20959
21289
|
const v2 = gpuVec2(target);
|
|
20960
|
-
if (realFactors.length === 0)
|
|
20961
|
-
return `${v2}(0.0, ${formatFloat(iScale)})`;
|
|
21290
|
+
if (realFactors.length === 0) return `${v2}(0.0, ${formatFloat(iScale)})`;
|
|
20962
21291
|
const factors = realFactors.map((f) => compile2(f));
|
|
20963
21292
|
if (iScale !== 1) factors.unshift(formatFloat(iScale));
|
|
20964
21293
|
const imCode = foldTerms(factors, "1.0", "*");
|
|
@@ -21011,8 +21340,7 @@ var GPU_FUNCTIONS = {
|
|
|
21011
21340
|
if (isNumber(x) && x.im !== 0) {
|
|
21012
21341
|
return `${gpuVec2(target)}(${formatFloat(-x.re)}, ${formatFloat(-x.im)})`;
|
|
21013
21342
|
}
|
|
21014
|
-
if (isSymbol2(x, "ImaginaryUnit"))
|
|
21015
|
-
return `${gpuVec2(target)}(0.0, -1.0)`;
|
|
21343
|
+
if (isSymbol2(x, "ImaginaryUnit")) return `${gpuVec2(target)}(0.0, -1.0)`;
|
|
21016
21344
|
return `(-${compile2(x)})`;
|
|
21017
21345
|
},
|
|
21018
21346
|
// Standard math functions with complex dispatch
|
|
@@ -21385,17 +21713,127 @@ var GPU_FUNCTIONS = {
|
|
|
21385
21713
|
}
|
|
21386
21714
|
const isWGSL = target?.language === "wgsl";
|
|
21387
21715
|
const v3 = isWGSL ? "vec3f" : "vec3";
|
|
21388
|
-
|
|
21716
|
+
const black = `${v3}(0.0)`;
|
|
21717
|
+
const white = `${v3}(1.0, 0.0, 0.0)`;
|
|
21718
|
+
return `((_gpu_apca(${bg}, ${black}) > 50.0) ? ${black} : ${white})`;
|
|
21389
21719
|
},
|
|
21390
21720
|
ColorToColorspace: ([color, space], compile2) => {
|
|
21391
21721
|
if (color === null || space === null)
|
|
21392
21722
|
throw new Error("ColorToColorspace: need color and space");
|
|
21393
|
-
|
|
21723
|
+
const spaceName = readStringLiteral(space);
|
|
21724
|
+
if (spaceName === null)
|
|
21725
|
+
throw new Error("ColorToColorspace: space must be a string literal");
|
|
21726
|
+
const c = compile2(color);
|
|
21727
|
+
switch (spaceName) {
|
|
21728
|
+
case "oklch":
|
|
21729
|
+
return c;
|
|
21730
|
+
case "oklab":
|
|
21731
|
+
case "lab":
|
|
21732
|
+
return `_gpu_oklch_to_oklab(${c})`;
|
|
21733
|
+
case "rgb":
|
|
21734
|
+
return `_gpu_oklch_to_srgb(${c})`;
|
|
21735
|
+
case "hsl":
|
|
21736
|
+
return `_gpu_rgb_to_hsl(_gpu_oklch_to_srgb(${c}))`;
|
|
21737
|
+
case "hsv":
|
|
21738
|
+
return `_gpu_rgb_to_hsv(_gpu_oklch_to_srgb(${c}))`;
|
|
21739
|
+
default:
|
|
21740
|
+
throw new Error(
|
|
21741
|
+
`ColorToColorspace: unsupported space "${spaceName}" on GPU target`
|
|
21742
|
+
);
|
|
21743
|
+
}
|
|
21394
21744
|
},
|
|
21395
21745
|
ColorFromColorspace: ([components, space], compile2) => {
|
|
21396
21746
|
if (components === null || space === null)
|
|
21397
21747
|
throw new Error("ColorFromColorspace: need components and space");
|
|
21398
|
-
|
|
21748
|
+
const spaceName = readStringLiteral(space);
|
|
21749
|
+
if (spaceName === null)
|
|
21750
|
+
throw new Error("ColorFromColorspace: space must be a string literal");
|
|
21751
|
+
const c = compile2(components);
|
|
21752
|
+
switch (spaceName) {
|
|
21753
|
+
case "oklch":
|
|
21754
|
+
return c;
|
|
21755
|
+
case "oklab":
|
|
21756
|
+
case "lab":
|
|
21757
|
+
return `_gpu_oklab_to_oklch(${c})`;
|
|
21758
|
+
case "rgb":
|
|
21759
|
+
return `_gpu_srgb_to_oklch(${c})`;
|
|
21760
|
+
case "hsl":
|
|
21761
|
+
return `_gpu_srgb_to_oklch(_gpu_hsl_to_rgb(${c}))`;
|
|
21762
|
+
case "hsv":
|
|
21763
|
+
return `_gpu_srgb_to_oklch(_gpu_hsv_to_rgb(${c}))`;
|
|
21764
|
+
default:
|
|
21765
|
+
throw new Error(
|
|
21766
|
+
`ColorFromColorspace: unsupported space "${spaceName}" on GPU target`
|
|
21767
|
+
);
|
|
21768
|
+
}
|
|
21769
|
+
},
|
|
21770
|
+
// ---------------------------------------------------------------------------
|
|
21771
|
+
// Color literals. Each typed head compiles to a canonical OKLCh vec3.
|
|
21772
|
+
// Alpha (4th argument) is dropped — GPU color values are vec3 only. Pass
|
|
21773
|
+
// alpha as a separate uniform if it's needed at the framebuffer boundary.
|
|
21774
|
+
// ---------------------------------------------------------------------------
|
|
21775
|
+
Color: ([s], _compile, target) => {
|
|
21776
|
+
if (s === null) throw new Error("Color: no argument");
|
|
21777
|
+
const str = readStringLiteral(s);
|
|
21778
|
+
if (str === null)
|
|
21779
|
+
throw new Error("Color: argument must be a string literal on GPU target");
|
|
21780
|
+
const packed = parseColor(str);
|
|
21781
|
+
if (packed === 0 && str.trim().toLowerCase() !== "transparent")
|
|
21782
|
+
throw new Error(`Color: invalid color string "${str}"`);
|
|
21783
|
+
const r = packed >>> 24 & 255;
|
|
21784
|
+
const g = packed >>> 16 & 255;
|
|
21785
|
+
const b = packed >>> 8 & 255;
|
|
21786
|
+
const oklch2 = rgbToOklch({ r, g, b });
|
|
21787
|
+
return `${gpuVec3(target)}(${formatFloat(oklch2.L)}, ${formatFloat(oklch2.C)}, ${formatFloat(oklch2.H)})`;
|
|
21788
|
+
},
|
|
21789
|
+
Rgb: (args, compile2, target) => {
|
|
21790
|
+
if (args.length < 3) throw new Error("Rgb: need 3 components");
|
|
21791
|
+
const v3 = gpuVec3(target);
|
|
21792
|
+
return `_gpu_srgb_to_oklch(${v3}(${compile2(args[0])}, ${compile2(args[1])}, ${compile2(args[2])}))`;
|
|
21793
|
+
},
|
|
21794
|
+
Hsv: (args, compile2, target) => {
|
|
21795
|
+
if (args.length < 3) throw new Error("Hsv: need 3 components");
|
|
21796
|
+
const v3 = gpuVec3(target);
|
|
21797
|
+
return `_gpu_srgb_to_oklch(_gpu_hsv_to_rgb(${v3}(${compile2(args[0])}, ${compile2(args[1])}, ${compile2(args[2])})))`;
|
|
21798
|
+
},
|
|
21799
|
+
Hsl: (args, compile2, target) => {
|
|
21800
|
+
if (args.length < 3) throw new Error("Hsl: need 3 components");
|
|
21801
|
+
const v3 = gpuVec3(target);
|
|
21802
|
+
return `_gpu_srgb_to_oklch(_gpu_hsl_to_rgb(${v3}(${compile2(args[0])}, ${compile2(args[1])}, ${compile2(args[2])})))`;
|
|
21803
|
+
},
|
|
21804
|
+
Oklab: (args, compile2, target) => {
|
|
21805
|
+
if (args.length < 3) throw new Error("Oklab: need 3 components");
|
|
21806
|
+
const v3 = gpuVec3(target);
|
|
21807
|
+
return `_gpu_oklab_to_oklch(${v3}(${compile2(args[0])}, ${compile2(args[1])}, ${compile2(args[2])}))`;
|
|
21808
|
+
},
|
|
21809
|
+
Oklch: (args, compile2, target) => {
|
|
21810
|
+
if (args.length < 3) throw new Error("Oklch: need 3 components");
|
|
21811
|
+
const v3 = gpuVec3(target);
|
|
21812
|
+
return `${v3}(${compile2(args[0])}, ${compile2(args[1])}, ${compile2(args[2])})`;
|
|
21813
|
+
},
|
|
21814
|
+
// ---------------------------------------------------------------------------
|
|
21815
|
+
// As* operators. AsOklch is identity (canonical). The other As* return
|
|
21816
|
+
// components in the named space, equivalent to ColorToColorspace(c, 'x').
|
|
21817
|
+
// ---------------------------------------------------------------------------
|
|
21818
|
+
AsOklch: ([c], compile2) => {
|
|
21819
|
+
if (c === null) throw new Error("AsOklch: no argument");
|
|
21820
|
+
return compile2(c);
|
|
21821
|
+
},
|
|
21822
|
+
AsOklab: ([c], compile2) => {
|
|
21823
|
+
if (c === null) throw new Error("AsOklab: no argument");
|
|
21824
|
+
return `_gpu_oklch_to_oklab(${compile2(c)})`;
|
|
21825
|
+
},
|
|
21826
|
+
AsRgb: ([c], compile2) => {
|
|
21827
|
+
if (c === null) throw new Error("AsRgb: no argument");
|
|
21828
|
+
return `_gpu_oklch_to_srgb(${compile2(c)})`;
|
|
21829
|
+
},
|
|
21830
|
+
AsHsv: ([c], compile2) => {
|
|
21831
|
+
if (c === null) throw new Error("AsHsv: no argument");
|
|
21832
|
+
return `_gpu_rgb_to_hsv(_gpu_oklch_to_srgb(${compile2(c)}))`;
|
|
21833
|
+
},
|
|
21834
|
+
AsHsl: ([c], compile2) => {
|
|
21835
|
+
if (c === null) throw new Error("AsHsl: no argument");
|
|
21836
|
+
return `_gpu_rgb_to_hsl(_gpu_oklch_to_srgb(${compile2(c)}))`;
|
|
21399
21837
|
},
|
|
21400
21838
|
// Fractal functions
|
|
21401
21839
|
Mandelbrot: ([c, maxIter], compile2, target) => {
|
|
@@ -22088,28 +22526,124 @@ vec3 _gpu_oklab_to_srgb(vec3 lab) {
|
|
|
22088
22526
|
|
|
22089
22527
|
vec3 _gpu_oklab_to_oklch(vec3 lab) {
|
|
22090
22528
|
float C = length(lab.yz);
|
|
22091
|
-
float H = atan(lab.z, lab.y);
|
|
22529
|
+
float H = atan(lab.z, lab.y) * (180.0 / 3.14159265359);
|
|
22530
|
+
if (H < 0.0) H += 360.0;
|
|
22092
22531
|
return vec3(lab.x, C, H);
|
|
22093
22532
|
}
|
|
22094
22533
|
|
|
22095
22534
|
vec3 _gpu_oklch_to_oklab(vec3 lch) {
|
|
22096
|
-
|
|
22535
|
+
float h_rad = lch.z * (3.14159265359 / 180.0);
|
|
22536
|
+
return vec3(lch.x, lch.y * cos(h_rad), lch.y * sin(h_rad));
|
|
22537
|
+
}
|
|
22538
|
+
|
|
22539
|
+
vec3 _gpu_srgb_to_oklch(vec3 rgb) {
|
|
22540
|
+
return _gpu_oklab_to_oklch(_gpu_srgb_to_oklab(rgb));
|
|
22541
|
+
}
|
|
22542
|
+
|
|
22543
|
+
vec3 _gpu_oklch_to_srgb(vec3 lch) {
|
|
22544
|
+
return _gpu_oklab_to_srgb(_gpu_oklch_to_oklab(lch));
|
|
22545
|
+
}
|
|
22546
|
+
|
|
22547
|
+
// HSL conversion. Hue in degrees, saturation/lightness in 0-1.
|
|
22548
|
+
vec3 _gpu_hsl_to_rgb(vec3 hsl) {
|
|
22549
|
+
float h = hsl.x;
|
|
22550
|
+
float s = hsl.y;
|
|
22551
|
+
float l = hsl.z;
|
|
22552
|
+
float c = (1.0 - abs(2.0 * l - 1.0)) * s;
|
|
22553
|
+
float h6 = h / 60.0;
|
|
22554
|
+
float x = c * (1.0 - abs(mod(h6, 2.0) - 1.0));
|
|
22555
|
+
float r = 0.0;
|
|
22556
|
+
float g = 0.0;
|
|
22557
|
+
float b = 0.0;
|
|
22558
|
+
if (h6 < 1.0) { r = c; g = x; b = 0.0; }
|
|
22559
|
+
else if (h6 < 2.0) { r = x; g = c; b = 0.0; }
|
|
22560
|
+
else if (h6 < 3.0) { r = 0.0; g = c; b = x; }
|
|
22561
|
+
else if (h6 < 4.0) { r = 0.0; g = x; b = c; }
|
|
22562
|
+
else if (h6 < 5.0) { r = x; g = 0.0; b = c; }
|
|
22563
|
+
else { r = c; g = 0.0; b = x; }
|
|
22564
|
+
float m = l - c / 2.0;
|
|
22565
|
+
return vec3(r + m, g + m, b + m);
|
|
22566
|
+
}
|
|
22567
|
+
|
|
22568
|
+
vec3 _gpu_rgb_to_hsl(vec3 rgb) {
|
|
22569
|
+
float maxc = max(max(rgb.x, rgb.y), rgb.z);
|
|
22570
|
+
float minc = min(min(rgb.x, rgb.y), rgb.z);
|
|
22571
|
+
float l = (maxc + minc) / 2.0;
|
|
22572
|
+
float d = maxc - minc;
|
|
22573
|
+
if (d < 1e-6) return vec3(0.0, 0.0, l);
|
|
22574
|
+
float s = d / (1.0 - abs(2.0 * l - 1.0));
|
|
22575
|
+
float h;
|
|
22576
|
+
if (maxc == rgb.x) h = mod((rgb.y - rgb.z) / d, 6.0);
|
|
22577
|
+
else if (maxc == rgb.y) h = (rgb.z - rgb.x) / d + 2.0;
|
|
22578
|
+
else h = (rgb.x - rgb.y) / d + 4.0;
|
|
22579
|
+
h *= 60.0;
|
|
22580
|
+
if (h < 0.0) h += 360.0;
|
|
22581
|
+
return vec3(h, s, l);
|
|
22582
|
+
}
|
|
22583
|
+
|
|
22584
|
+
// HSV conversion. Hue in degrees, saturation/value in 0-1.
|
|
22585
|
+
vec3 _gpu_hsv_to_rgb(vec3 hsv) {
|
|
22586
|
+
float h = hsv.x;
|
|
22587
|
+
float s = hsv.y;
|
|
22588
|
+
float v = hsv.z;
|
|
22589
|
+
float c = v * s;
|
|
22590
|
+
float h6 = h / 60.0;
|
|
22591
|
+
float x = c * (1.0 - abs(mod(h6, 2.0) - 1.0));
|
|
22592
|
+
float r = 0.0;
|
|
22593
|
+
float g = 0.0;
|
|
22594
|
+
float b = 0.0;
|
|
22595
|
+
if (h6 < 1.0) { r = c; g = x; b = 0.0; }
|
|
22596
|
+
else if (h6 < 2.0) { r = x; g = c; b = 0.0; }
|
|
22597
|
+
else if (h6 < 3.0) { r = 0.0; g = c; b = x; }
|
|
22598
|
+
else if (h6 < 4.0) { r = 0.0; g = x; b = c; }
|
|
22599
|
+
else if (h6 < 5.0) { r = x; g = 0.0; b = c; }
|
|
22600
|
+
else { r = c; g = 0.0; b = x; }
|
|
22601
|
+
float m = v - c;
|
|
22602
|
+
return vec3(r + m, g + m, b + m);
|
|
22097
22603
|
}
|
|
22098
22604
|
|
|
22099
|
-
vec3
|
|
22100
|
-
|
|
22101
|
-
|
|
22605
|
+
vec3 _gpu_rgb_to_hsv(vec3 rgb) {
|
|
22606
|
+
float maxc = max(max(rgb.x, rgb.y), rgb.z);
|
|
22607
|
+
float minc = min(min(rgb.x, rgb.y), rgb.z);
|
|
22608
|
+
float v = maxc;
|
|
22609
|
+
float d = maxc - minc;
|
|
22610
|
+
if (d < 1e-6) return vec3(0.0, 0.0, v);
|
|
22611
|
+
float s = (maxc < 1e-6) ? 0.0 : d / maxc;
|
|
22612
|
+
float h;
|
|
22613
|
+
if (maxc == rgb.x) h = mod((rgb.y - rgb.z) / d, 6.0);
|
|
22614
|
+
else if (maxc == rgb.y) h = (rgb.z - rgb.x) / d + 2.0;
|
|
22615
|
+
else h = (rgb.x - rgb.y) / d + 4.0;
|
|
22616
|
+
h *= 60.0;
|
|
22617
|
+
if (h < 0.0) h += 360.0;
|
|
22618
|
+
return vec3(h, s, v);
|
|
22619
|
+
}
|
|
22620
|
+
|
|
22621
|
+
vec3 _gpu_color_mix(vec3 lch1, vec3 lch2, float t) {
|
|
22102
22622
|
float L = mix(lch1.x, lch2.x, t);
|
|
22103
22623
|
float C = mix(lch1.y, lch2.y, t);
|
|
22104
|
-
|
|
22105
|
-
|
|
22106
|
-
|
|
22107
|
-
if (
|
|
22108
|
-
|
|
22109
|
-
|
|
22624
|
+
bool a1 = lch1.y < 1e-6;
|
|
22625
|
+
bool a2 = lch2.y < 1e-6;
|
|
22626
|
+
float H;
|
|
22627
|
+
if (a1 && a2) {
|
|
22628
|
+
H = lch1.z;
|
|
22629
|
+
} else if (a1) {
|
|
22630
|
+
H = lch2.z;
|
|
22631
|
+
} else if (a2) {
|
|
22632
|
+
H = lch1.z;
|
|
22633
|
+
} else {
|
|
22634
|
+
float dh = lch2.z - lch1.z;
|
|
22635
|
+
if (dh > 180.0) dh -= 360.0;
|
|
22636
|
+
if (dh < -180.0) dh += 360.0;
|
|
22637
|
+
H = lch1.z + dh * t;
|
|
22638
|
+
if (H < 0.0) H += 360.0;
|
|
22639
|
+
if (H >= 360.0) H -= 360.0;
|
|
22640
|
+
}
|
|
22641
|
+
return vec3(L, C, H);
|
|
22110
22642
|
}
|
|
22111
22643
|
|
|
22112
|
-
float _gpu_apca(vec3
|
|
22644
|
+
float _gpu_apca(vec3 lch_bg, vec3 lch_fg) {
|
|
22645
|
+
vec3 bg = _gpu_oklch_to_srgb(lch_bg);
|
|
22646
|
+
vec3 fg = _gpu_oklch_to_srgb(lch_fg);
|
|
22113
22647
|
float bgR = _gpu_srgb_to_linear(bg.x);
|
|
22114
22648
|
float bgG = _gpu_srgb_to_linear(bg.y);
|
|
22115
22649
|
float bgB = _gpu_srgb_to_linear(bg.z);
|
|
@@ -22120,9 +22654,7 @@ float _gpu_apca(vec3 bg, vec3 fg) {
|
|
|
22120
22654
|
float fgY = 0.2126729 * fgR + 0.7151522 * fgG + 0.0721750 * fgB;
|
|
22121
22655
|
float bgC = pow(bgY, 0.56);
|
|
22122
22656
|
float fgC = pow(fgY, 0.57);
|
|
22123
|
-
float contrast = (bgC
|
|
22124
|
-
? (bgC - fgC) * 1.14
|
|
22125
|
-
: (bgC - fgC) * 1.14;
|
|
22657
|
+
float contrast = (bgC - fgC) * 1.14;
|
|
22126
22658
|
return contrast * 100.0;
|
|
22127
22659
|
}
|
|
22128
22660
|
`;
|
|
@@ -22166,28 +22698,133 @@ fn _gpu_oklab_to_srgb(lab: vec3f) -> vec3f {
|
|
|
22166
22698
|
|
|
22167
22699
|
fn _gpu_oklab_to_oklch(lab: vec3f) -> vec3f {
|
|
22168
22700
|
let C = length(lab.yz);
|
|
22169
|
-
|
|
22701
|
+
var H = atan2(lab.z, lab.y) * (180.0 / 3.14159265359);
|
|
22702
|
+
if (H < 0.0) { H = H + 360.0; }
|
|
22170
22703
|
return vec3f(lab.x, C, H);
|
|
22171
22704
|
}
|
|
22172
22705
|
|
|
22173
22706
|
fn _gpu_oklch_to_oklab(lch: vec3f) -> vec3f {
|
|
22174
|
-
|
|
22707
|
+
let h_rad = lch.z * (3.14159265359 / 180.0);
|
|
22708
|
+
return vec3f(lch.x, lch.y * cos(h_rad), lch.y * sin(h_rad));
|
|
22175
22709
|
}
|
|
22176
22710
|
|
|
22177
|
-
fn
|
|
22178
|
-
|
|
22179
|
-
|
|
22711
|
+
fn _gpu_srgb_to_oklch(rgb: vec3f) -> vec3f {
|
|
22712
|
+
return _gpu_oklab_to_oklch(_gpu_srgb_to_oklab(rgb));
|
|
22713
|
+
}
|
|
22714
|
+
|
|
22715
|
+
fn _gpu_oklch_to_srgb(lch: vec3f) -> vec3f {
|
|
22716
|
+
return _gpu_oklab_to_srgb(_gpu_oklch_to_oklab(lch));
|
|
22717
|
+
}
|
|
22718
|
+
|
|
22719
|
+
fn _gpu_hsl_to_rgb(hsl: vec3f) -> vec3f {
|
|
22720
|
+
let h = hsl.x;
|
|
22721
|
+
let s = hsl.y;
|
|
22722
|
+
let l = hsl.z;
|
|
22723
|
+
let c = (1.0 - abs(2.0 * l - 1.0)) * s;
|
|
22724
|
+
let h6 = h / 60.0;
|
|
22725
|
+
let x = c * (1.0 - abs((h6 - 2.0 * floor(h6 / 2.0)) - 1.0));
|
|
22726
|
+
var r: f32 = 0.0;
|
|
22727
|
+
var g: f32 = 0.0;
|
|
22728
|
+
var b: f32 = 0.0;
|
|
22729
|
+
if (h6 < 1.0) { r = c; g = x; b = 0.0; }
|
|
22730
|
+
else if (h6 < 2.0) { r = x; g = c; b = 0.0; }
|
|
22731
|
+
else if (h6 < 3.0) { r = 0.0; g = c; b = x; }
|
|
22732
|
+
else if (h6 < 4.0) { r = 0.0; g = x; b = c; }
|
|
22733
|
+
else if (h6 < 5.0) { r = x; g = 0.0; b = c; }
|
|
22734
|
+
else { r = c; g = 0.0; b = x; }
|
|
22735
|
+
let m = l - c / 2.0;
|
|
22736
|
+
return vec3f(r + m, g + m, b + m);
|
|
22737
|
+
}
|
|
22738
|
+
|
|
22739
|
+
fn _gpu_rgb_to_hsl(rgb: vec3f) -> vec3f {
|
|
22740
|
+
let maxc = max(max(rgb.x, rgb.y), rgb.z);
|
|
22741
|
+
let minc = min(min(rgb.x, rgb.y), rgb.z);
|
|
22742
|
+
let l = (maxc + minc) / 2.0;
|
|
22743
|
+
let d = maxc - minc;
|
|
22744
|
+
if (d < 1e-6) { return vec3f(0.0, 0.0, l); }
|
|
22745
|
+
let s = d / (1.0 - abs(2.0 * l - 1.0));
|
|
22746
|
+
var h: f32;
|
|
22747
|
+
if (maxc == rgb.x) {
|
|
22748
|
+
let v = (rgb.y - rgb.z) / d;
|
|
22749
|
+
h = v - 6.0 * floor(v / 6.0);
|
|
22750
|
+
} else if (maxc == rgb.y) {
|
|
22751
|
+
h = (rgb.z - rgb.x) / d + 2.0;
|
|
22752
|
+
} else {
|
|
22753
|
+
h = (rgb.x - rgb.y) / d + 4.0;
|
|
22754
|
+
}
|
|
22755
|
+
h = h * 60.0;
|
|
22756
|
+
if (h < 0.0) { h = h + 360.0; }
|
|
22757
|
+
return vec3f(h, s, l);
|
|
22758
|
+
}
|
|
22759
|
+
|
|
22760
|
+
fn _gpu_hsv_to_rgb(hsv: vec3f) -> vec3f {
|
|
22761
|
+
let h = hsv.x;
|
|
22762
|
+
let s = hsv.y;
|
|
22763
|
+
let v = hsv.z;
|
|
22764
|
+
let c = v * s;
|
|
22765
|
+
let h6 = h / 60.0;
|
|
22766
|
+
let x = c * (1.0 - abs((h6 - 2.0 * floor(h6 / 2.0)) - 1.0));
|
|
22767
|
+
var r: f32 = 0.0;
|
|
22768
|
+
var g: f32 = 0.0;
|
|
22769
|
+
var b: f32 = 0.0;
|
|
22770
|
+
if (h6 < 1.0) { r = c; g = x; b = 0.0; }
|
|
22771
|
+
else if (h6 < 2.0) { r = x; g = c; b = 0.0; }
|
|
22772
|
+
else if (h6 < 3.0) { r = 0.0; g = c; b = x; }
|
|
22773
|
+
else if (h6 < 4.0) { r = 0.0; g = x; b = c; }
|
|
22774
|
+
else if (h6 < 5.0) { r = x; g = 0.0; b = c; }
|
|
22775
|
+
else { r = c; g = 0.0; b = x; }
|
|
22776
|
+
let m = v - c;
|
|
22777
|
+
return vec3f(r + m, g + m, b + m);
|
|
22778
|
+
}
|
|
22779
|
+
|
|
22780
|
+
fn _gpu_rgb_to_hsv(rgb: vec3f) -> vec3f {
|
|
22781
|
+
let maxc = max(max(rgb.x, rgb.y), rgb.z);
|
|
22782
|
+
let minc = min(min(rgb.x, rgb.y), rgb.z);
|
|
22783
|
+
let v = maxc;
|
|
22784
|
+
let d = maxc - minc;
|
|
22785
|
+
if (d < 1e-6) { return vec3f(0.0, 0.0, v); }
|
|
22786
|
+
var s: f32 = 0.0;
|
|
22787
|
+
if (maxc >= 1e-6) { s = d / maxc; }
|
|
22788
|
+
var h: f32;
|
|
22789
|
+
if (maxc == rgb.x) {
|
|
22790
|
+
let q = (rgb.y - rgb.z) / d;
|
|
22791
|
+
h = q - 6.0 * floor(q / 6.0);
|
|
22792
|
+
} else if (maxc == rgb.y) {
|
|
22793
|
+
h = (rgb.z - rgb.x) / d + 2.0;
|
|
22794
|
+
} else {
|
|
22795
|
+
h = (rgb.x - rgb.y) / d + 4.0;
|
|
22796
|
+
}
|
|
22797
|
+
h = h * 60.0;
|
|
22798
|
+
if (h < 0.0) { h = h + 360.0; }
|
|
22799
|
+
return vec3f(h, s, v);
|
|
22800
|
+
}
|
|
22801
|
+
|
|
22802
|
+
fn _gpu_color_mix(lch1: vec3f, lch2: vec3f, t: f32) -> vec3f {
|
|
22180
22803
|
let L = mix(lch1.x, lch2.x, t);
|
|
22181
22804
|
let C = mix(lch1.y, lch2.y, t);
|
|
22182
|
-
let
|
|
22183
|
-
|
|
22184
|
-
|
|
22185
|
-
if (
|
|
22186
|
-
|
|
22187
|
-
|
|
22805
|
+
let a1 = lch1.y < 1e-6;
|
|
22806
|
+
let a2 = lch2.y < 1e-6;
|
|
22807
|
+
var H: f32;
|
|
22808
|
+
if (a1 && a2) {
|
|
22809
|
+
H = lch1.z;
|
|
22810
|
+
} else if (a1) {
|
|
22811
|
+
H = lch2.z;
|
|
22812
|
+
} else if (a2) {
|
|
22813
|
+
H = lch1.z;
|
|
22814
|
+
} else {
|
|
22815
|
+
var dh = lch2.z - lch1.z;
|
|
22816
|
+
if (dh > 180.0) { dh = dh - 360.0; }
|
|
22817
|
+
if (dh < -180.0) { dh = dh + 360.0; }
|
|
22818
|
+
H = lch1.z + dh * t;
|
|
22819
|
+
if (H < 0.0) { H = H + 360.0; }
|
|
22820
|
+
if (H >= 360.0) { H = H - 360.0; }
|
|
22821
|
+
}
|
|
22822
|
+
return vec3f(L, C, H);
|
|
22188
22823
|
}
|
|
22189
22824
|
|
|
22190
|
-
fn _gpu_apca(
|
|
22825
|
+
fn _gpu_apca(lch_bg: vec3f, lch_fg: vec3f) -> f32 {
|
|
22826
|
+
let bg = _gpu_oklch_to_srgb(lch_bg);
|
|
22827
|
+
let fg = _gpu_oklch_to_srgb(lch_fg);
|
|
22191
22828
|
let bgR = _gpu_srgb_to_linear(bg.x);
|
|
22192
22829
|
let bgG = _gpu_srgb_to_linear(bg.y);
|
|
22193
22830
|
let bgB = _gpu_srgb_to_linear(bg.z);
|
|
@@ -22475,7 +23112,7 @@ var GPUShaderTarget = class {
|
|
|
22475
23112
|
if (stmts.length === 0) return "";
|
|
22476
23113
|
const last = stmts.length - 1;
|
|
22477
23114
|
stmts[last] = `return ${stmts[last]}`;
|
|
22478
|
-
return stmts.join(";\n");
|
|
23115
|
+
return stmts.join(";\n") + ";";
|
|
22479
23116
|
},
|
|
22480
23117
|
...options
|
|
22481
23118
|
};
|
|
@@ -22574,7 +23211,7 @@ var GLSLTarget = class extends GPUShaderTarget {
|
|
|
22574
23211
|
if (body.includes("\n")) {
|
|
22575
23212
|
const indented = body.split("\n").map((l) => ` ${l}`).join("\n");
|
|
22576
23213
|
return `${returnType} ${functionName}(${params}) {
|
|
22577
|
-
${indented}
|
|
23214
|
+
${indented}
|
|
22578
23215
|
}`;
|
|
22579
23216
|
}
|
|
22580
23217
|
return `${returnType} ${functionName}(${params}) {
|
|
@@ -22685,7 +23322,7 @@ var WGSLTarget = class extends GPUShaderTarget {
|
|
|
22685
23322
|
return `fn ${functionName}(${params}) -> ${toWGSLType(
|
|
22686
23323
|
returnType
|
|
22687
23324
|
)} {
|
|
22688
|
-
${indented}
|
|
23325
|
+
${indented}
|
|
22689
23326
|
}`;
|
|
22690
23327
|
}
|
|
22691
23328
|
return `fn ${functionName}(${params}) -> ${toWGSLType(returnType)} {
|
|
@@ -24864,7 +25501,7 @@ function compileToIntervalTarget(expr, target) {
|
|
|
24864
25501
|
}
|
|
24865
25502
|
|
|
24866
25503
|
// src/compile.ts
|
|
24867
|
-
var version = "0.
|
|
25504
|
+
var version = "0.56.0";
|
|
24868
25505
|
export {
|
|
24869
25506
|
BaseCompiler,
|
|
24870
25507
|
GLSLTarget,
|