@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.umd.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** Compile 0.
|
|
1
|
+
/** Compile 0.56.0 */
|
|
2
2
|
(function(global,factory){typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'],factory):(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Compile = {}));})(this, (function (exports) { 'use strict';
|
|
3
3
|
var Compile = (() => {
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1544,6 +1544,7 @@ var Compile = (() => {
|
|
|
1544
1544
|
];
|
|
1545
1545
|
var VALUE_TYPES = [
|
|
1546
1546
|
"value",
|
|
1547
|
+
"color",
|
|
1547
1548
|
...COLLECTION_TYPES,
|
|
1548
1549
|
...SCALAR_TYPES
|
|
1549
1550
|
];
|
|
@@ -3239,6 +3240,7 @@ var Compile = (() => {
|
|
|
3239
3240
|
symbol: [],
|
|
3240
3241
|
boolean: [],
|
|
3241
3242
|
string: [],
|
|
3243
|
+
color: [],
|
|
3242
3244
|
expression: EXPRESSION_TYPES
|
|
3243
3245
|
};
|
|
3244
3246
|
function isPrimitiveSubtype(lhs, rhs) {
|
|
@@ -8826,6 +8828,8 @@ var Compile = (() => {
|
|
|
8826
8828
|
precedence: DIVISION_PRECEDENCE,
|
|
8827
8829
|
parse: "Mod"
|
|
8828
8830
|
},
|
|
8831
|
+
// Function-style alias: `\operatorname{mod}(a, b)`
|
|
8832
|
+
{ latexTrigger: "\\operatorname{mod}", parse: "Mod" },
|
|
8829
8833
|
{
|
|
8830
8834
|
latexTrigger: "\\pmod",
|
|
8831
8835
|
kind: "prefix",
|
|
@@ -9066,6 +9070,13 @@ var Compile = (() => {
|
|
|
9066
9070
|
const rhs = serializer.wrap(operand(expr, 2), ADDITION_PRECEDENCE + 3);
|
|
9067
9071
|
return joinLatex([lhs, "-", rhs]);
|
|
9068
9072
|
}
|
|
9073
|
+
},
|
|
9074
|
+
// Euclidean distance between two points (tuples of numbers).
|
|
9075
|
+
{
|
|
9076
|
+
name: "Distance",
|
|
9077
|
+
latexTrigger: ["\\operatorname{distance}"],
|
|
9078
|
+
kind: "function",
|
|
9079
|
+
serialize: (serializer, expr) => "\\operatorname{distance}" + serializer.wrapArguments(expr)
|
|
9069
9080
|
}
|
|
9070
9081
|
];
|
|
9071
9082
|
function getIndexAssignment(expr, upper) {
|
|
@@ -10490,7 +10501,9 @@ var Compile = (() => {
|
|
|
10490
10501
|
if (!expr || !symbol(expr)) return null;
|
|
10491
10502
|
return ["Mean", expr];
|
|
10492
10503
|
}
|
|
10493
|
-
}
|
|
10504
|
+
},
|
|
10505
|
+
// Function-style alias: `\operatorname{var}(...)`
|
|
10506
|
+
{ latexTrigger: "\\operatorname{var}", parse: "Variance" }
|
|
10494
10507
|
];
|
|
10495
10508
|
|
|
10496
10509
|
// src/compute-engine/numerics/unit-data.ts
|
|
@@ -11498,7 +11511,7 @@ var Compile = (() => {
|
|
|
11498
11511
|
36: "\\qquad"
|
|
11499
11512
|
}[v] ?? "";
|
|
11500
11513
|
}
|
|
11501
|
-
}
|
|
11514
|
+
},
|
|
11502
11515
|
// if (
|
|
11503
11516
|
// [
|
|
11504
11517
|
// '\\!',
|
|
@@ -11522,6 +11535,121 @@ var Compile = (() => {
|
|
|
11522
11535
|
// name: '',
|
|
11523
11536
|
// trigger: '\\check',
|
|
11524
11537
|
// },
|
|
11538
|
+
// ---------------------------------------------------------------------------
|
|
11539
|
+
// Function-style aliases for collection / random operators that some
|
|
11540
|
+
// notations write in lowercase (e.g. `\operatorname{shuffle}(L)`).
|
|
11541
|
+
// The capitalized library entries already exist; these are pure parse
|
|
11542
|
+
// aliases so the lowercase names don't land in `unsupported-operator`.
|
|
11543
|
+
// ---------------------------------------------------------------------------
|
|
11544
|
+
{ latexTrigger: "\\operatorname{random}", parse: "Random" },
|
|
11545
|
+
{ latexTrigger: "\\operatorname{shuffle}", parse: "Shuffle" },
|
|
11546
|
+
{ latexTrigger: "\\operatorname{repeat}", parse: "Repeat" },
|
|
11547
|
+
{ latexTrigger: "\\operatorname{join}", parse: "Join" },
|
|
11548
|
+
// ---------------------------------------------------------------------------
|
|
11549
|
+
// Geometric primitive heads. Registered as known typed heads so consumers
|
|
11550
|
+
// can branch on the operator name; CE itself doesn't render them. The
|
|
11551
|
+
// library entries (with no evaluator) live in `library/core.ts`.
|
|
11552
|
+
// ---------------------------------------------------------------------------
|
|
11553
|
+
{
|
|
11554
|
+
name: "Triangle",
|
|
11555
|
+
latexTrigger: ["\\operatorname{triangle}"],
|
|
11556
|
+
kind: "function",
|
|
11557
|
+
serialize: (serializer, expr) => "\\operatorname{triangle}" + serializer.wrapArguments(expr)
|
|
11558
|
+
},
|
|
11559
|
+
// Desmos's geometric `vector(p1, p2)` — a directed segment between two
|
|
11560
|
+
// points. Routed to a dedicated head (not the existing column-vector
|
|
11561
|
+
// `Vector`, which has a narrower `(number+) -> vector` signature).
|
|
11562
|
+
{
|
|
11563
|
+
name: "GeometricVector",
|
|
11564
|
+
latexTrigger: ["\\operatorname{vector}"],
|
|
11565
|
+
kind: "function",
|
|
11566
|
+
serialize: (serializer, expr) => "\\operatorname{vector}" + serializer.wrapArguments(expr)
|
|
11567
|
+
},
|
|
11568
|
+
{
|
|
11569
|
+
name: "Sphere",
|
|
11570
|
+
latexTrigger: ["\\operatorname{sphere}"],
|
|
11571
|
+
kind: "function",
|
|
11572
|
+
serialize: (serializer, expr) => "\\operatorname{sphere}" + serializer.wrapArguments(expr)
|
|
11573
|
+
},
|
|
11574
|
+
{
|
|
11575
|
+
name: "Segment",
|
|
11576
|
+
latexTrigger: ["\\operatorname{segment}"],
|
|
11577
|
+
kind: "function",
|
|
11578
|
+
serialize: (serializer, expr) => "\\operatorname{segment}" + serializer.wrapArguments(expr)
|
|
11579
|
+
}
|
|
11580
|
+
];
|
|
11581
|
+
|
|
11582
|
+
// src/compute-engine/latex-syntax/dictionary/definitions-colors.ts
|
|
11583
|
+
var DEFINITIONS_COLORS = [
|
|
11584
|
+
// Color constructors (one per colorspace, preserves space on evaluation)
|
|
11585
|
+
{
|
|
11586
|
+
name: "Rgb",
|
|
11587
|
+
latexTrigger: ["\\operatorname{rgb}"],
|
|
11588
|
+
kind: "function",
|
|
11589
|
+
serialize: (serializer, expr) => "\\operatorname{rgb}" + serializer.wrapArguments(expr)
|
|
11590
|
+
},
|
|
11591
|
+
{
|
|
11592
|
+
name: "Hsv",
|
|
11593
|
+
latexTrigger: ["\\operatorname{hsv}"],
|
|
11594
|
+
kind: "function",
|
|
11595
|
+
serialize: (serializer, expr) => "\\operatorname{hsv}" + serializer.wrapArguments(expr)
|
|
11596
|
+
},
|
|
11597
|
+
{
|
|
11598
|
+
name: "Hsl",
|
|
11599
|
+
latexTrigger: ["\\operatorname{hsl}"],
|
|
11600
|
+
kind: "function",
|
|
11601
|
+
serialize: (serializer, expr) => "\\operatorname{hsl}" + serializer.wrapArguments(expr)
|
|
11602
|
+
},
|
|
11603
|
+
{
|
|
11604
|
+
name: "Oklab",
|
|
11605
|
+
latexTrigger: ["\\operatorname{oklab}"],
|
|
11606
|
+
kind: "function",
|
|
11607
|
+
serialize: (serializer, expr) => "\\operatorname{oklab}" + serializer.wrapArguments(expr)
|
|
11608
|
+
},
|
|
11609
|
+
{
|
|
11610
|
+
name: "Oklch",
|
|
11611
|
+
latexTrigger: ["\\operatorname{oklch}"],
|
|
11612
|
+
kind: "function",
|
|
11613
|
+
serialize: (serializer, expr) => "\\operatorname{oklch}" + serializer.wrapArguments(expr)
|
|
11614
|
+
},
|
|
11615
|
+
// Conversion functions (color → color in the named space)
|
|
11616
|
+
{
|
|
11617
|
+
name: "AsRgb",
|
|
11618
|
+
latexTrigger: ["\\operatorname{asRgb}"],
|
|
11619
|
+
kind: "function",
|
|
11620
|
+
serialize: (serializer, expr) => "\\operatorname{asRgb}" + serializer.wrapArguments(expr)
|
|
11621
|
+
},
|
|
11622
|
+
{
|
|
11623
|
+
name: "AsHsv",
|
|
11624
|
+
latexTrigger: ["\\operatorname{asHsv}"],
|
|
11625
|
+
kind: "function",
|
|
11626
|
+
serialize: (serializer, expr) => "\\operatorname{asHsv}" + serializer.wrapArguments(expr)
|
|
11627
|
+
},
|
|
11628
|
+
{
|
|
11629
|
+
name: "AsHsl",
|
|
11630
|
+
latexTrigger: ["\\operatorname{asHsl}"],
|
|
11631
|
+
kind: "function",
|
|
11632
|
+
serialize: (serializer, expr) => "\\operatorname{asHsl}" + serializer.wrapArguments(expr)
|
|
11633
|
+
},
|
|
11634
|
+
{
|
|
11635
|
+
name: "AsOklab",
|
|
11636
|
+
latexTrigger: ["\\operatorname{asOklab}"],
|
|
11637
|
+
kind: "function",
|
|
11638
|
+
serialize: (serializer, expr) => "\\operatorname{asOklab}" + serializer.wrapArguments(expr)
|
|
11639
|
+
},
|
|
11640
|
+
{
|
|
11641
|
+
name: "AsOklch",
|
|
11642
|
+
latexTrigger: ["\\operatorname{asOklch}"],
|
|
11643
|
+
kind: "function",
|
|
11644
|
+
serialize: (serializer, expr) => "\\operatorname{asOklch}" + serializer.wrapArguments(expr)
|
|
11645
|
+
},
|
|
11646
|
+
// Perceptual difference (returns a scalar in [0, ~1])
|
|
11647
|
+
{
|
|
11648
|
+
name: "ColorDelta",
|
|
11649
|
+
latexTrigger: ["\\operatorname{colorDelta}"],
|
|
11650
|
+
kind: "function",
|
|
11651
|
+
serialize: (serializer, expr) => "\\operatorname{colorDelta}" + serializer.wrapArguments(expr)
|
|
11652
|
+
}
|
|
11525
11653
|
];
|
|
11526
11654
|
|
|
11527
11655
|
// src/compute-engine/latex-syntax/dictionary/default-dictionary.ts
|
|
@@ -11552,7 +11680,8 @@ var Compile = (() => {
|
|
|
11552
11680
|
...DEFINITIONS_STATISTICS,
|
|
11553
11681
|
...DEFINITIONS_UNITS,
|
|
11554
11682
|
...DEFINITIONS_OTHERS,
|
|
11555
|
-
...DEFINITIONS_PHYSICS
|
|
11683
|
+
...DEFINITIONS_PHYSICS,
|
|
11684
|
+
...DEFINITIONS_COLORS
|
|
11556
11685
|
];
|
|
11557
11686
|
|
|
11558
11687
|
// src/math-json/symbols.ts
|
|
@@ -15187,8 +15316,7 @@ ${lines.join("\n")}`;
|
|
|
15187
15316
|
ce.pushScope();
|
|
15188
15317
|
try {
|
|
15189
15318
|
if (vars && typeof vars === "object") {
|
|
15190
|
-
for (const [k, v] of Object.entries(vars))
|
|
15191
|
-
ce.assign(k, v);
|
|
15319
|
+
for (const [k, v] of Object.entries(vars)) ce.assign(k, v);
|
|
15192
15320
|
}
|
|
15193
15321
|
return expr.evaluate().re;
|
|
15194
15322
|
} finally {
|
|
@@ -15275,8 +15403,7 @@ ${lines.join("\n")}`;
|
|
|
15275
15403
|
return { re: null, im: formatFloat(iScale) };
|
|
15276
15404
|
}
|
|
15277
15405
|
const compiledFactors = remaining.map((r) => compile2(r));
|
|
15278
|
-
if (iScale !== 1)
|
|
15279
|
-
compiledFactors.unshift(formatFloat(iScale));
|
|
15406
|
+
if (iScale !== 1) compiledFactors.unshift(formatFloat(iScale));
|
|
15280
15407
|
const imCode = foldTerms(compiledFactors, "1.0", "*");
|
|
15281
15408
|
return { re: null, im: imCode };
|
|
15282
15409
|
}
|
|
@@ -15341,6 +15468,40 @@ ${lines.join("\n")}`;
|
|
|
15341
15468
|
else h = ((r - g) / d + 4) / 6;
|
|
15342
15469
|
return { h: h * 360, s, l };
|
|
15343
15470
|
}
|
|
15471
|
+
function hsvToRgb(h, s, v) {
|
|
15472
|
+
h = (h % 360 + 360) % 360;
|
|
15473
|
+
s = Math.max(0, Math.min(1, s));
|
|
15474
|
+
v = Math.max(0, Math.min(1, v));
|
|
15475
|
+
const c = v * s;
|
|
15476
|
+
const x = c * (1 - Math.abs(h / 60 % 2 - 1));
|
|
15477
|
+
const m = v - c;
|
|
15478
|
+
let r = 0, g = 0, b = 0;
|
|
15479
|
+
if (h < 60) [r, g, b] = [c, x, 0];
|
|
15480
|
+
else if (h < 120) [r, g, b] = [x, c, 0];
|
|
15481
|
+
else if (h < 180) [r, g, b] = [0, c, x];
|
|
15482
|
+
else if (h < 240) [r, g, b] = [0, x, c];
|
|
15483
|
+
else if (h < 300) [r, g, b] = [x, 0, c];
|
|
15484
|
+
else [r, g, b] = [c, 0, x];
|
|
15485
|
+
return { r: (r + m) * 255, g: (g + m) * 255, b: (b + m) * 255 };
|
|
15486
|
+
}
|
|
15487
|
+
function rgbToHsv(r, g, b) {
|
|
15488
|
+
r /= 255;
|
|
15489
|
+
g /= 255;
|
|
15490
|
+
b /= 255;
|
|
15491
|
+
const max2 = Math.max(r, g, b);
|
|
15492
|
+
const min2 = Math.min(r, g, b);
|
|
15493
|
+
const d = max2 - min2;
|
|
15494
|
+
let h = 0;
|
|
15495
|
+
if (d > 0) {
|
|
15496
|
+
if (max2 === r) h = (g - b) / d % 6;
|
|
15497
|
+
else if (max2 === g) h = (b - r) / d + 2;
|
|
15498
|
+
else h = (r - g) / d + 4;
|
|
15499
|
+
h *= 60;
|
|
15500
|
+
if (h < 0) h += 360;
|
|
15501
|
+
}
|
|
15502
|
+
const s = max2 === 0 ? 0 : d / max2;
|
|
15503
|
+
return { h, s, v: max2 };
|
|
15504
|
+
}
|
|
15344
15505
|
function parseHexColor(s) {
|
|
15345
15506
|
const hex = s.startsWith("#") ? s.substring(1) : s;
|
|
15346
15507
|
let r, g, b;
|
|
@@ -15796,6 +15957,13 @@ ${lines.join("\n")}`;
|
|
|
15796
15957
|
};
|
|
15797
15958
|
function parseColor(s, darkMode) {
|
|
15798
15959
|
const str = s.trim().toLowerCase();
|
|
15960
|
+
const opacityMatch = str.match(/^(.+?)\s*\/\s*(\d+(?:\.\d+)?)%?\s*$/);
|
|
15961
|
+
if (opacityMatch) {
|
|
15962
|
+
const base = parseColor(opacityMatch[1].trim(), darkMode);
|
|
15963
|
+
const opacity = Math.max(0, Math.min(100, parseFloat(opacityMatch[2])));
|
|
15964
|
+
const alpha = Math.round(opacity / 100 * 255);
|
|
15965
|
+
return base & 4294967040 | alpha;
|
|
15966
|
+
}
|
|
15799
15967
|
if (str.startsWith("#")) {
|
|
15800
15968
|
const hex = str.substring(1);
|
|
15801
15969
|
let r, g, b, a = 255;
|
|
@@ -15928,14 +16096,6 @@ ${lines.join("\n")}`;
|
|
|
15928
16096
|
console.warn(`parseColor: unrecognized color "${s}"`);
|
|
15929
16097
|
return 0;
|
|
15930
16098
|
}
|
|
15931
|
-
function parseColorToRgb01(s, darkMode) {
|
|
15932
|
-
const color = parseColor(s, darkMode);
|
|
15933
|
-
return [
|
|
15934
|
-
(color >>> 24 & 255) / 255,
|
|
15935
|
-
(color >>> 16 & 255) / 255,
|
|
15936
|
-
(color >>> 8 & 255) / 255
|
|
15937
|
-
];
|
|
15938
|
-
}
|
|
15939
16099
|
function apca(bgColor, fgColor) {
|
|
15940
16100
|
const bgRgb = asRgb(bgColor);
|
|
15941
16101
|
const fgRgb = asRgb(fgColor);
|
|
@@ -15994,6 +16154,12 @@ ${lines.join("\n")}`;
|
|
|
15994
16154
|
const contrast2 = Math.abs(apca(fg2, bg));
|
|
15995
16155
|
return contrast1 >= contrast2 ? asColorNumber(fg1) : asColorNumber(fg2);
|
|
15996
16156
|
}
|
|
16157
|
+
function oklabDeltaE(a, b) {
|
|
16158
|
+
const dL = a.L - b.L;
|
|
16159
|
+
const da = a.a - b.a;
|
|
16160
|
+
const db = a.b - b.b;
|
|
16161
|
+
return Math.sqrt(dL * dL + da * da + db * db);
|
|
16162
|
+
}
|
|
15997
16163
|
var TYCHO_11 = [
|
|
15998
16164
|
"#4e79a7",
|
|
15999
16165
|
// Blue
|
|
@@ -20205,39 +20371,130 @@ ${lines.join("\n")}`;
|
|
|
20205
20371
|
if (args.length >= 2)
|
|
20206
20372
|
return `_SYS.colormap(${compile2(args[0])}, ${compile2(args[1])})`;
|
|
20207
20373
|
return `_SYS.colormap(${compile2(args[0])})`;
|
|
20374
|
+
},
|
|
20375
|
+
// -----------------------------------------------------------------------
|
|
20376
|
+
// Color constructor heads. All compile to OKLCh arrays at runtime — the
|
|
20377
|
+
// canonical color representation in this target. The constructors take
|
|
20378
|
+
// their own colorspace's components and convert internally.
|
|
20379
|
+
// (Mirrors the GPU target's design: color values are vec3 OKLCh.)
|
|
20380
|
+
// -----------------------------------------------------------------------
|
|
20381
|
+
Rgb: (args, compile2) => {
|
|
20382
|
+
if (args.length < 3) throw new Error("Rgb: need 3 components");
|
|
20383
|
+
return `_SYS.rgb(${args.map(compile2).join(", ")})`;
|
|
20384
|
+
},
|
|
20385
|
+
Hsv: (args, compile2) => {
|
|
20386
|
+
if (args.length < 3) throw new Error("Hsv: need 3 components");
|
|
20387
|
+
return `_SYS.hsv(${args.map(compile2).join(", ")})`;
|
|
20388
|
+
},
|
|
20389
|
+
Hsl: (args, compile2) => {
|
|
20390
|
+
if (args.length < 3) throw new Error("Hsl: need 3 components");
|
|
20391
|
+
return `_SYS.hsl(${args.map(compile2).join(", ")})`;
|
|
20392
|
+
},
|
|
20393
|
+
Oklab: (args, compile2) => {
|
|
20394
|
+
if (args.length < 3) throw new Error("Oklab: need 3 components");
|
|
20395
|
+
return `_SYS.oklab(${args.map(compile2).join(", ")})`;
|
|
20396
|
+
},
|
|
20397
|
+
Oklch: (args, compile2) => {
|
|
20398
|
+
if (args.length < 3) throw new Error("Oklch: need 3 components");
|
|
20399
|
+
return `_SYS.oklch(${args.map(compile2).join(", ")})`;
|
|
20400
|
+
},
|
|
20401
|
+
// -----------------------------------------------------------------------
|
|
20402
|
+
// As* converters. Compile-time output convention matches the engine and
|
|
20403
|
+
// the GPU target: each returns components in the named space as a 3- or
|
|
20404
|
+
// 4-element array. `AsRgb` uses 0-1 sRGB channels (consistent across all
|
|
20405
|
+
// layers). `AsOklch` is the identity (canonical form).
|
|
20406
|
+
// -----------------------------------------------------------------------
|
|
20407
|
+
AsRgb: ([c], compile2) => {
|
|
20408
|
+
if (c === null) throw new Error("AsRgb: no argument");
|
|
20409
|
+
return `_SYS.asRgb(${compile2(c)})`;
|
|
20410
|
+
},
|
|
20411
|
+
AsHsv: ([c], compile2) => {
|
|
20412
|
+
if (c === null) throw new Error("AsHsv: no argument");
|
|
20413
|
+
return `_SYS.asHsv(${compile2(c)})`;
|
|
20414
|
+
},
|
|
20415
|
+
AsHsl: ([c], compile2) => {
|
|
20416
|
+
if (c === null) throw new Error("AsHsl: no argument");
|
|
20417
|
+
return `_SYS.asHsl(${compile2(c)})`;
|
|
20418
|
+
},
|
|
20419
|
+
AsOklab: ([c], compile2) => {
|
|
20420
|
+
if (c === null) throw new Error("AsOklab: no argument");
|
|
20421
|
+
return `_SYS.asOklab(${compile2(c)})`;
|
|
20422
|
+
},
|
|
20423
|
+
AsOklch: ([c], compile2) => {
|
|
20424
|
+
if (c === null) throw new Error("AsOklch: no argument");
|
|
20425
|
+
return compile2(c);
|
|
20426
|
+
},
|
|
20427
|
+
// Perceptual color difference (ΔE_OK).
|
|
20428
|
+
ColorDelta: ([a, b], compile2) => {
|
|
20429
|
+
if (a === null || b === null)
|
|
20430
|
+
throw new Error("ColorDelta: need two colors");
|
|
20431
|
+
return `_SYS.colorDelta(${compile2(a)}, ${compile2(b)})`;
|
|
20432
|
+
},
|
|
20433
|
+
// Euclidean distance between two tuples (any positive dimension).
|
|
20434
|
+
// The GPU target maps `Distance` to the GLSL/WGSL `distance()` builtin
|
|
20435
|
+
// (vec-only); this JS handler works on plain arrays of any length.
|
|
20436
|
+
Distance: ([a, b], compile2) => {
|
|
20437
|
+
if (a === null || b === null) throw new Error("Distance: need two points");
|
|
20438
|
+
return `_SYS.distance(${compile2(a)}, ${compile2(b)})`;
|
|
20208
20439
|
}
|
|
20209
20440
|
};
|
|
20210
20441
|
function toRI(c) {
|
|
20211
20442
|
return { re: c.re, im: c.im };
|
|
20212
20443
|
}
|
|
20444
|
+
function normalizeAlpha(a) {
|
|
20445
|
+
if (a === void 0) return void 0;
|
|
20446
|
+
if (!Number.isFinite(a)) return void 0;
|
|
20447
|
+
if (Math.abs(a - 1) < 1e-9) return void 0;
|
|
20448
|
+
return a;
|
|
20449
|
+
}
|
|
20213
20450
|
function toRgb255(input) {
|
|
20214
20451
|
if (typeof input === "string") {
|
|
20215
20452
|
const c = parseColor(input);
|
|
20216
|
-
|
|
20453
|
+
const rgb2 = {
|
|
20217
20454
|
r: c >>> 24 & 255,
|
|
20218
20455
|
g: c >>> 16 & 255,
|
|
20219
|
-
b: c >>> 8 & 255
|
|
20220
|
-
alpha: (c & 255) / 255
|
|
20456
|
+
b: c >>> 8 & 255
|
|
20221
20457
|
};
|
|
20458
|
+
const alpha = normalizeAlpha((c & 255) / 255);
|
|
20459
|
+
if (alpha !== void 0) rgb2.alpha = alpha;
|
|
20460
|
+
return rgb2;
|
|
20461
|
+
}
|
|
20462
|
+
const rgb = oklchToRgb({ L: input[0], C: input[1], H: input[2] });
|
|
20463
|
+
if (input.length >= 4) {
|
|
20464
|
+
const alpha = normalizeAlpha(input[3]);
|
|
20465
|
+
if (alpha !== void 0) rgb.alpha = alpha;
|
|
20222
20466
|
}
|
|
20223
|
-
const rgb = {
|
|
20224
|
-
r: input[0] * 255,
|
|
20225
|
-
g: input[1] * 255,
|
|
20226
|
-
b: input[2] * 255
|
|
20227
|
-
};
|
|
20228
|
-
if (input.length >= 4) rgb.alpha = input[3];
|
|
20229
20467
|
return rgb;
|
|
20230
20468
|
}
|
|
20231
|
-
function
|
|
20232
|
-
|
|
20233
|
-
|
|
20234
|
-
|
|
20235
|
-
|
|
20236
|
-
|
|
20469
|
+
function toOklch(input) {
|
|
20470
|
+
if (typeof input === "string") {
|
|
20471
|
+
const c = parseColor(input);
|
|
20472
|
+
const r = c >>> 24 & 255;
|
|
20473
|
+
const g = c >>> 16 & 255;
|
|
20474
|
+
const b = c >>> 8 & 255;
|
|
20475
|
+
const oklch2 = rgbToOklch({ r, g, b });
|
|
20476
|
+
const alpha = normalizeAlpha((c & 255) / 255);
|
|
20477
|
+
if (alpha !== void 0) oklch2.alpha = alpha;
|
|
20478
|
+
return oklch2;
|
|
20479
|
+
}
|
|
20480
|
+
return {
|
|
20481
|
+
L: input[0],
|
|
20482
|
+
C: input[1],
|
|
20483
|
+
H: input[2],
|
|
20484
|
+
alpha: input.length >= 4 ? normalizeAlpha(input[3]) : void 0
|
|
20485
|
+
};
|
|
20486
|
+
}
|
|
20487
|
+
function packedToOklch(c) {
|
|
20488
|
+
const r = c >>> 24 & 255;
|
|
20489
|
+
const g = c >>> 16 & 255;
|
|
20490
|
+
const b = c >>> 8 & 255;
|
|
20491
|
+
const oklch2 = rgbToOklch({ r, g, b });
|
|
20492
|
+
const alpha = normalizeAlpha((c & 255) / 255);
|
|
20493
|
+
return alpha !== void 0 ? [oklch2.L, oklch2.C, oklch2.H, alpha] : [oklch2.L, oklch2.C, oklch2.H];
|
|
20237
20494
|
}
|
|
20238
20495
|
var colorHelpers = {
|
|
20239
20496
|
color(input) {
|
|
20240
|
-
return
|
|
20497
|
+
return packedToOklch(parseColor(input));
|
|
20241
20498
|
},
|
|
20242
20499
|
colorToString(input, format) {
|
|
20243
20500
|
const rgb = toRgb255(input);
|
|
@@ -20248,7 +20505,7 @@ ${lines.join("\n")}`;
|
|
|
20248
20505
|
const g = Math.round(Math.max(0, Math.min(255, rgb.g)));
|
|
20249
20506
|
const b = Math.round(Math.max(0, Math.min(255, rgb.b)));
|
|
20250
20507
|
let hex = `#${r.toString(16).padStart(2, "0")}${g.toString(16).padStart(2, "0")}${b.toString(16).padStart(2, "0")}`;
|
|
20251
|
-
if (rgb.alpha !== void 0
|
|
20508
|
+
if (rgb.alpha !== void 0) {
|
|
20252
20509
|
const a = Math.round(Math.max(0, Math.min(255, rgb.alpha * 255)));
|
|
20253
20510
|
hex += a.toString(16).padStart(2, "0");
|
|
20254
20511
|
}
|
|
@@ -20258,7 +20515,7 @@ ${lines.join("\n")}`;
|
|
|
20258
20515
|
const r = Math.round(rgb.r);
|
|
20259
20516
|
const g = Math.round(rgb.g);
|
|
20260
20517
|
const b = Math.round(rgb.b);
|
|
20261
|
-
if (rgb.alpha !== void 0
|
|
20518
|
+
if (rgb.alpha !== void 0)
|
|
20262
20519
|
return `rgb(${r} ${g} ${b} / ${rgb.alpha})`;
|
|
20263
20520
|
return `rgb(${r} ${g} ${b})`;
|
|
20264
20521
|
}
|
|
@@ -20267,7 +20524,7 @@ ${lines.join("\n")}`;
|
|
|
20267
20524
|
const h = Math.round(hsl.h * 10) / 10;
|
|
20268
20525
|
const s = Math.round(hsl.s * 1e3) / 10;
|
|
20269
20526
|
const l = Math.round(hsl.l * 1e3) / 10;
|
|
20270
|
-
if (rgb.alpha !== void 0
|
|
20527
|
+
if (rgb.alpha !== void 0)
|
|
20271
20528
|
return `hsl(${h} ${s}% ${l}% / ${rgb.alpha})`;
|
|
20272
20529
|
return `hsl(${h} ${s}% ${l}%)`;
|
|
20273
20530
|
}
|
|
@@ -20276,7 +20533,7 @@ ${lines.join("\n")}`;
|
|
|
20276
20533
|
const L = Math.round(c.L * 1e3) / 1e3;
|
|
20277
20534
|
const C = Math.round(c.C * 1e3) / 1e3;
|
|
20278
20535
|
const H = Math.round(c.H * 10) / 10;
|
|
20279
|
-
if (rgb.alpha !== void 0
|
|
20536
|
+
if (rgb.alpha !== void 0)
|
|
20280
20537
|
return `oklch(${L} ${C} ${H} / ${rgb.alpha})`;
|
|
20281
20538
|
return `oklch(${L} ${C} ${H})`;
|
|
20282
20539
|
}
|
|
@@ -20285,29 +20542,29 @@ ${lines.join("\n")}`;
|
|
|
20285
20542
|
}
|
|
20286
20543
|
},
|
|
20287
20544
|
colorMix(input1, input2, ratio = 0.5) {
|
|
20288
|
-
const
|
|
20289
|
-
const
|
|
20545
|
+
const c1 = toOklch(input1);
|
|
20546
|
+
const c2 = toOklch(input2);
|
|
20290
20547
|
ratio = Math.max(0, Math.min(1, ratio));
|
|
20291
|
-
const
|
|
20292
|
-
const
|
|
20293
|
-
let
|
|
20294
|
-
if (
|
|
20295
|
-
if (
|
|
20296
|
-
|
|
20297
|
-
|
|
20298
|
-
|
|
20299
|
-
|
|
20300
|
-
|
|
20301
|
-
|
|
20302
|
-
H
|
|
20303
|
-
|
|
20304
|
-
|
|
20305
|
-
const
|
|
20306
|
-
const
|
|
20307
|
-
const a1 =
|
|
20308
|
-
const a2 =
|
|
20309
|
-
const alpha = a1 + (a2 - a1) * ratio;
|
|
20310
|
-
return
|
|
20548
|
+
const c1Achromatic = c1.C < 1e-6;
|
|
20549
|
+
const c2Achromatic = c2.C < 1e-6;
|
|
20550
|
+
let H;
|
|
20551
|
+
if (c1Achromatic && c2Achromatic) H = c1.H;
|
|
20552
|
+
else if (c1Achromatic) H = c2.H;
|
|
20553
|
+
else if (c2Achromatic) H = c1.H;
|
|
20554
|
+
else {
|
|
20555
|
+
let dh = c2.H - c1.H;
|
|
20556
|
+
if (dh > 180) dh -= 360;
|
|
20557
|
+
if (dh < -180) dh += 360;
|
|
20558
|
+
H = c1.H + dh * ratio;
|
|
20559
|
+
if (H < 0) H += 360;
|
|
20560
|
+
if (H >= 360) H -= 360;
|
|
20561
|
+
}
|
|
20562
|
+
const L = c1.L + (c2.L - c1.L) * ratio;
|
|
20563
|
+
const C = c1.C + (c2.C - c1.C) * ratio;
|
|
20564
|
+
const a1 = c1.alpha ?? 1;
|
|
20565
|
+
const a2 = c2.alpha ?? 1;
|
|
20566
|
+
const alpha = normalizeAlpha(a1 + (a2 - a1) * ratio);
|
|
20567
|
+
return alpha !== void 0 ? [L, C, H, alpha] : [L, C, H];
|
|
20311
20568
|
},
|
|
20312
20569
|
colorContrast(bg, fg) {
|
|
20313
20570
|
return apca(toRgb255(bg), toRgb255(fg));
|
|
@@ -20315,11 +20572,11 @@ ${lines.join("\n")}`;
|
|
|
20315
20572
|
contrastingColor(bg, fg1, fg2) {
|
|
20316
20573
|
const bgRgb = toRgb255(bg);
|
|
20317
20574
|
if (fg1 !== void 0 && fg2 !== void 0) {
|
|
20318
|
-
return
|
|
20575
|
+
return packedToOklch(
|
|
20319
20576
|
contrastingColor({ bg: bgRgb, fg1: toRgb255(fg1), fg2: toRgb255(fg2) })
|
|
20320
20577
|
);
|
|
20321
20578
|
}
|
|
20322
|
-
return
|
|
20579
|
+
return packedToOklch(contrastingColor(bgRgb));
|
|
20323
20580
|
},
|
|
20324
20581
|
colorToColorspace(input, space) {
|
|
20325
20582
|
const rgb = toRgb255(input);
|
|
@@ -20348,7 +20605,7 @@ ${lines.join("\n")}`;
|
|
|
20348
20605
|
default:
|
|
20349
20606
|
throw new Error(`Unknown color space: ${space}`);
|
|
20350
20607
|
}
|
|
20351
|
-
if (alpha !== void 0
|
|
20608
|
+
if (alpha !== void 0) result.push(alpha);
|
|
20352
20609
|
return result;
|
|
20353
20610
|
},
|
|
20354
20611
|
colormap(name, arg) {
|
|
@@ -20360,7 +20617,7 @@ ${lines.join("\n")}`;
|
|
|
20360
20617
|
const palette = allPalettes[name];
|
|
20361
20618
|
if (!palette) throw new Error(`Unknown palette: ${name}`);
|
|
20362
20619
|
const colors = palette.map(
|
|
20363
|
-
(hex) =>
|
|
20620
|
+
(hex) => packedToOklch(parseColor(hex))
|
|
20364
20621
|
);
|
|
20365
20622
|
if (arg === void 0) return colors;
|
|
20366
20623
|
if (Number.isInteger(arg) && arg >= 2) {
|
|
@@ -20384,62 +20641,128 @@ ${lines.join("\n")}`;
|
|
|
20384
20641
|
const frac = pos - i;
|
|
20385
20642
|
if (frac === 0 || i >= colors.length - 1)
|
|
20386
20643
|
return [...colors[Math.min(i, colors.length - 1)]];
|
|
20387
|
-
const
|
|
20388
|
-
|
|
20389
|
-
|
|
20390
|
-
|
|
20391
|
-
|
|
20392
|
-
|
|
20393
|
-
|
|
20394
|
-
|
|
20395
|
-
|
|
20396
|
-
|
|
20397
|
-
|
|
20398
|
-
|
|
20399
|
-
|
|
20400
|
-
|
|
20401
|
-
|
|
20402
|
-
|
|
20403
|
-
|
|
20404
|
-
if (H >= 360) H -= 360;
|
|
20405
|
-
const mixed = oklchToRgb({
|
|
20406
|
-
L: c1.L + (c2.L - c1.L) * frac,
|
|
20407
|
-
C: c1.C + (c2.C - c1.C) * frac,
|
|
20408
|
-
H
|
|
20409
|
-
});
|
|
20410
|
-
return [mixed.r / 255, mixed.g / 255, mixed.b / 255];
|
|
20644
|
+
const [L1, C1, H1] = colors[i];
|
|
20645
|
+
const [L2, C2, H2] = colors[i + 1];
|
|
20646
|
+
const c1Achromatic = C1 < 1e-6;
|
|
20647
|
+
const c2Achromatic = C2 < 1e-6;
|
|
20648
|
+
let H;
|
|
20649
|
+
if (c1Achromatic && c2Achromatic) H = H1;
|
|
20650
|
+
else if (c1Achromatic) H = H2;
|
|
20651
|
+
else if (c2Achromatic) H = H1;
|
|
20652
|
+
else {
|
|
20653
|
+
let dh = H2 - H1;
|
|
20654
|
+
if (dh > 180) dh -= 360;
|
|
20655
|
+
if (dh < -180) dh += 360;
|
|
20656
|
+
H = H1 + dh * frac;
|
|
20657
|
+
if (H < 0) H += 360;
|
|
20658
|
+
if (H >= 360) H -= 360;
|
|
20659
|
+
}
|
|
20660
|
+
return [L1 + (L2 - L1) * frac, C1 + (C2 - C1) * frac, H];
|
|
20411
20661
|
},
|
|
20412
20662
|
colorFromColorspace(components, space) {
|
|
20413
20663
|
const c0 = components[0];
|
|
20414
20664
|
const c1 = components[1];
|
|
20415
20665
|
const c2 = components[2];
|
|
20416
20666
|
const alpha = components.length >= 4 ? components[3] : void 0;
|
|
20417
|
-
let
|
|
20667
|
+
let oklch2;
|
|
20418
20668
|
switch (space.toLowerCase()) {
|
|
20419
20669
|
case "rgb":
|
|
20420
|
-
|
|
20670
|
+
oklch2 = rgbToOklch({ r: c0 * 255, g: c1 * 255, b: c2 * 255 });
|
|
20421
20671
|
break;
|
|
20422
20672
|
case "hsl": {
|
|
20423
|
-
const
|
|
20424
|
-
|
|
20673
|
+
const rgb = hslToRgb(c0, c1, c2);
|
|
20674
|
+
oklch2 = rgbToOklch(rgb);
|
|
20425
20675
|
break;
|
|
20426
20676
|
}
|
|
20427
|
-
case "oklch":
|
|
20428
|
-
|
|
20429
|
-
result = [r.r / 255, r.g / 255, r.b / 255];
|
|
20677
|
+
case "oklch":
|
|
20678
|
+
oklch2 = { L: c0, C: c1, H: c2 };
|
|
20430
20679
|
break;
|
|
20431
|
-
}
|
|
20432
20680
|
case "oklab":
|
|
20433
|
-
case "lab":
|
|
20434
|
-
|
|
20435
|
-
result = [r.r / 255, r.g / 255, r.b / 255];
|
|
20681
|
+
case "lab":
|
|
20682
|
+
oklch2 = oklabToOklch({ L: c0, a: c1, b: c2 });
|
|
20436
20683
|
break;
|
|
20437
|
-
}
|
|
20438
20684
|
default:
|
|
20439
20685
|
throw new Error(`Unknown color space: ${space}`);
|
|
20440
20686
|
}
|
|
20441
|
-
|
|
20442
|
-
|
|
20687
|
+
return alpha !== void 0 ? [oklch2.L, oklch2.C, oklch2.H, alpha] : [oklch2.L, oklch2.C, oklch2.H];
|
|
20688
|
+
},
|
|
20689
|
+
// -----------------------------------------------------------------------
|
|
20690
|
+
// Color constructors. Each accepts components in its colorspace's natural
|
|
20691
|
+
// units and returns the canonical OKLCh array `[L, C, H]` (or with alpha).
|
|
20692
|
+
// -----------------------------------------------------------------------
|
|
20693
|
+
rgb(r, g, b, alpha) {
|
|
20694
|
+
const c = rgbToOklch({ r: r * 255, g: g * 255, b: b * 255 });
|
|
20695
|
+
const a = normalizeAlpha(alpha);
|
|
20696
|
+
return a !== void 0 ? [c.L, c.C, c.H, a] : [c.L, c.C, c.H];
|
|
20697
|
+
},
|
|
20698
|
+
hsv(h, s, v, alpha) {
|
|
20699
|
+
const rgb = hsvToRgb(h, s, v);
|
|
20700
|
+
const c = rgbToOklch(rgb);
|
|
20701
|
+
const a = normalizeAlpha(alpha);
|
|
20702
|
+
return a !== void 0 ? [c.L, c.C, c.H, a] : [c.L, c.C, c.H];
|
|
20703
|
+
},
|
|
20704
|
+
hsl(h, s, l, alpha) {
|
|
20705
|
+
const rgb = hslToRgb(h, s, l);
|
|
20706
|
+
const c = rgbToOklch({ r: rgb.r, g: rgb.g, b: rgb.b });
|
|
20707
|
+
const a = normalizeAlpha(alpha);
|
|
20708
|
+
return a !== void 0 ? [c.L, c.C, c.H, a] : [c.L, c.C, c.H];
|
|
20709
|
+
},
|
|
20710
|
+
oklab(L, a, b, alpha) {
|
|
20711
|
+
const c = oklabToOklch({ L, a, b });
|
|
20712
|
+
const al = normalizeAlpha(alpha);
|
|
20713
|
+
return al !== void 0 ? [c.L, c.C, c.H, al] : [c.L, c.C, c.H];
|
|
20714
|
+
},
|
|
20715
|
+
oklch(L, C, H, alpha) {
|
|
20716
|
+
const a = normalizeAlpha(alpha);
|
|
20717
|
+
return a !== void 0 ? [L, C, H, a] : [L, C, H];
|
|
20718
|
+
},
|
|
20719
|
+
// -----------------------------------------------------------------------
|
|
20720
|
+
// As* converters. Inputs are anything `toOklch` accepts (string, packed
|
|
20721
|
+
// int, or OKLCh array). Outputs are 3- or 4-element arrays in the named
|
|
20722
|
+
// space. sRGB-based outputs (asRgb/asHsv/asHsl) use 0-1 channels for
|
|
20723
|
+
// consistency with the GPU target's shader convention.
|
|
20724
|
+
// -----------------------------------------------------------------------
|
|
20725
|
+
asRgb(input) {
|
|
20726
|
+
const rgb = toRgb255(input);
|
|
20727
|
+
const r = rgb.r / 255;
|
|
20728
|
+
const g = rgb.g / 255;
|
|
20729
|
+
const b = rgb.b / 255;
|
|
20730
|
+
return rgb.alpha !== void 0 ? [r, g, b, rgb.alpha] : [r, g, b];
|
|
20731
|
+
},
|
|
20732
|
+
asHsv(input) {
|
|
20733
|
+
const rgb = toRgb255(input);
|
|
20734
|
+
const hsv = rgbToHsv(rgb.r, rgb.g, rgb.b);
|
|
20735
|
+
return rgb.alpha !== void 0 ? [hsv.h, hsv.s, hsv.v, rgb.alpha] : [hsv.h, hsv.s, hsv.v];
|
|
20736
|
+
},
|
|
20737
|
+
asHsl(input) {
|
|
20738
|
+
const rgb = toRgb255(input);
|
|
20739
|
+
const hsl = rgbToHsl(rgb.r, rgb.g, rgb.b);
|
|
20740
|
+
return rgb.alpha !== void 0 ? [hsl.h, hsl.s, hsl.l, rgb.alpha] : [hsl.h, hsl.s, hsl.l];
|
|
20741
|
+
},
|
|
20742
|
+
asOklab(input) {
|
|
20743
|
+
const c = toOklch(input);
|
|
20744
|
+
const lab = oklchToOklab({ L: c.L, C: c.C, H: c.H });
|
|
20745
|
+
return c.alpha !== void 0 ? [lab.L, lab.a, lab.b, c.alpha] : [lab.L, lab.a, lab.b];
|
|
20746
|
+
},
|
|
20747
|
+
// asOklch is identity — handled at compile time as a pass-through
|
|
20748
|
+
// Perceptual color difference (ΔE_OK).
|
|
20749
|
+
colorDelta(a, b) {
|
|
20750
|
+
const labA = oklchToOklab(toOklch(a));
|
|
20751
|
+
const labB = oklchToOklab(toOklch(b));
|
|
20752
|
+
return oklabDeltaE(labA, labB);
|
|
20753
|
+
},
|
|
20754
|
+
// Euclidean distance between two tuples. Plain numeric — not a color
|
|
20755
|
+
// operation despite living in the same helpers block.
|
|
20756
|
+
distance(a, b) {
|
|
20757
|
+
if (!Array.isArray(a) || !Array.isArray(b))
|
|
20758
|
+
throw new Error("Distance: expected two arrays");
|
|
20759
|
+
if (a.length !== b.length) throw new Error("Distance: dimension mismatch");
|
|
20760
|
+
let sumSq = 0;
|
|
20761
|
+
for (let i = 0; i < a.length; i++) {
|
|
20762
|
+
const d = a[i] - b[i];
|
|
20763
|
+
sumSq += d * d;
|
|
20764
|
+
}
|
|
20765
|
+
return Math.sqrt(sumSq);
|
|
20443
20766
|
}
|
|
20444
20767
|
};
|
|
20445
20768
|
var SYS_HELPERS = {
|
|
@@ -20878,6 +21201,13 @@ ${lines.join("\n")}`;
|
|
|
20878
21201
|
function gpuVec2(target) {
|
|
20879
21202
|
return target?.language === "wgsl" ? "vec2f" : "vec2";
|
|
20880
21203
|
}
|
|
21204
|
+
function gpuVec3(target) {
|
|
21205
|
+
return target?.language === "wgsl" ? "vec3f" : "vec3";
|
|
21206
|
+
}
|
|
21207
|
+
function readStringLiteral(expr) {
|
|
21208
|
+
if (!isString(expr)) return null;
|
|
21209
|
+
return expr.string?.toLowerCase() ?? null;
|
|
21210
|
+
}
|
|
20881
21211
|
function compileIntArg(expr, compile2, target) {
|
|
20882
21212
|
const c = tryGetConstant(expr);
|
|
20883
21213
|
if (c !== void 0 && Number.isInteger(c)) return c.toString();
|
|
@@ -20936,7 +21266,7 @@ ${lines.join("\n")}`;
|
|
|
20936
21266
|
`for (${indexDecl} = ${lowerStr}; ${index} <= ${upperStr}; ${index}++) {`,
|
|
20937
21267
|
` ${acc} ${op}= ${body};`,
|
|
20938
21268
|
`}`,
|
|
20939
|
-
`return ${acc}
|
|
21269
|
+
`return ${acc};`
|
|
20940
21270
|
];
|
|
20941
21271
|
return lines.join("\n");
|
|
20942
21272
|
}
|
|
@@ -20990,8 +21320,7 @@ ${lines.join("\n")}`;
|
|
|
20990
21320
|
const iScale = isSymbol2(iFactor, "ImaginaryUnit") ? 1 : iFactor.im;
|
|
20991
21321
|
const realFactors = args.filter((_, i) => i !== iIndex);
|
|
20992
21322
|
const v2 = gpuVec2(target);
|
|
20993
|
-
if (realFactors.length === 0)
|
|
20994
|
-
return `${v2}(0.0, ${formatFloat(iScale)})`;
|
|
21323
|
+
if (realFactors.length === 0) return `${v2}(0.0, ${formatFloat(iScale)})`;
|
|
20995
21324
|
const factors = realFactors.map((f) => compile2(f));
|
|
20996
21325
|
if (iScale !== 1) factors.unshift(formatFloat(iScale));
|
|
20997
21326
|
const imCode = foldTerms(factors, "1.0", "*");
|
|
@@ -21044,8 +21373,7 @@ ${lines.join("\n")}`;
|
|
|
21044
21373
|
if (isNumber(x) && x.im !== 0) {
|
|
21045
21374
|
return `${gpuVec2(target)}(${formatFloat(-x.re)}, ${formatFloat(-x.im)})`;
|
|
21046
21375
|
}
|
|
21047
|
-
if (isSymbol2(x, "ImaginaryUnit"))
|
|
21048
|
-
return `${gpuVec2(target)}(0.0, -1.0)`;
|
|
21376
|
+
if (isSymbol2(x, "ImaginaryUnit")) return `${gpuVec2(target)}(0.0, -1.0)`;
|
|
21049
21377
|
return `(-${compile2(x)})`;
|
|
21050
21378
|
},
|
|
21051
21379
|
// Standard math functions with complex dispatch
|
|
@@ -21418,17 +21746,127 @@ ${lines.join("\n")}`;
|
|
|
21418
21746
|
}
|
|
21419
21747
|
const isWGSL = target?.language === "wgsl";
|
|
21420
21748
|
const v3 = isWGSL ? "vec3f" : "vec3";
|
|
21421
|
-
|
|
21749
|
+
const black = `${v3}(0.0)`;
|
|
21750
|
+
const white = `${v3}(1.0, 0.0, 0.0)`;
|
|
21751
|
+
return `((_gpu_apca(${bg}, ${black}) > 50.0) ? ${black} : ${white})`;
|
|
21422
21752
|
},
|
|
21423
21753
|
ColorToColorspace: ([color, space], compile2) => {
|
|
21424
21754
|
if (color === null || space === null)
|
|
21425
21755
|
throw new Error("ColorToColorspace: need color and space");
|
|
21426
|
-
|
|
21756
|
+
const spaceName = readStringLiteral(space);
|
|
21757
|
+
if (spaceName === null)
|
|
21758
|
+
throw new Error("ColorToColorspace: space must be a string literal");
|
|
21759
|
+
const c = compile2(color);
|
|
21760
|
+
switch (spaceName) {
|
|
21761
|
+
case "oklch":
|
|
21762
|
+
return c;
|
|
21763
|
+
case "oklab":
|
|
21764
|
+
case "lab":
|
|
21765
|
+
return `_gpu_oklch_to_oklab(${c})`;
|
|
21766
|
+
case "rgb":
|
|
21767
|
+
return `_gpu_oklch_to_srgb(${c})`;
|
|
21768
|
+
case "hsl":
|
|
21769
|
+
return `_gpu_rgb_to_hsl(_gpu_oklch_to_srgb(${c}))`;
|
|
21770
|
+
case "hsv":
|
|
21771
|
+
return `_gpu_rgb_to_hsv(_gpu_oklch_to_srgb(${c}))`;
|
|
21772
|
+
default:
|
|
21773
|
+
throw new Error(
|
|
21774
|
+
`ColorToColorspace: unsupported space "${spaceName}" on GPU target`
|
|
21775
|
+
);
|
|
21776
|
+
}
|
|
21427
21777
|
},
|
|
21428
21778
|
ColorFromColorspace: ([components, space], compile2) => {
|
|
21429
21779
|
if (components === null || space === null)
|
|
21430
21780
|
throw new Error("ColorFromColorspace: need components and space");
|
|
21431
|
-
|
|
21781
|
+
const spaceName = readStringLiteral(space);
|
|
21782
|
+
if (spaceName === null)
|
|
21783
|
+
throw new Error("ColorFromColorspace: space must be a string literal");
|
|
21784
|
+
const c = compile2(components);
|
|
21785
|
+
switch (spaceName) {
|
|
21786
|
+
case "oklch":
|
|
21787
|
+
return c;
|
|
21788
|
+
case "oklab":
|
|
21789
|
+
case "lab":
|
|
21790
|
+
return `_gpu_oklab_to_oklch(${c})`;
|
|
21791
|
+
case "rgb":
|
|
21792
|
+
return `_gpu_srgb_to_oklch(${c})`;
|
|
21793
|
+
case "hsl":
|
|
21794
|
+
return `_gpu_srgb_to_oklch(_gpu_hsl_to_rgb(${c}))`;
|
|
21795
|
+
case "hsv":
|
|
21796
|
+
return `_gpu_srgb_to_oklch(_gpu_hsv_to_rgb(${c}))`;
|
|
21797
|
+
default:
|
|
21798
|
+
throw new Error(
|
|
21799
|
+
`ColorFromColorspace: unsupported space "${spaceName}" on GPU target`
|
|
21800
|
+
);
|
|
21801
|
+
}
|
|
21802
|
+
},
|
|
21803
|
+
// ---------------------------------------------------------------------------
|
|
21804
|
+
// Color literals. Each typed head compiles to a canonical OKLCh vec3.
|
|
21805
|
+
// Alpha (4th argument) is dropped — GPU color values are vec3 only. Pass
|
|
21806
|
+
// alpha as a separate uniform if it's needed at the framebuffer boundary.
|
|
21807
|
+
// ---------------------------------------------------------------------------
|
|
21808
|
+
Color: ([s], _compile, target) => {
|
|
21809
|
+
if (s === null) throw new Error("Color: no argument");
|
|
21810
|
+
const str = readStringLiteral(s);
|
|
21811
|
+
if (str === null)
|
|
21812
|
+
throw new Error("Color: argument must be a string literal on GPU target");
|
|
21813
|
+
const packed = parseColor(str);
|
|
21814
|
+
if (packed === 0 && str.trim().toLowerCase() !== "transparent")
|
|
21815
|
+
throw new Error(`Color: invalid color string "${str}"`);
|
|
21816
|
+
const r = packed >>> 24 & 255;
|
|
21817
|
+
const g = packed >>> 16 & 255;
|
|
21818
|
+
const b = packed >>> 8 & 255;
|
|
21819
|
+
const oklch2 = rgbToOklch({ r, g, b });
|
|
21820
|
+
return `${gpuVec3(target)}(${formatFloat(oklch2.L)}, ${formatFloat(oklch2.C)}, ${formatFloat(oklch2.H)})`;
|
|
21821
|
+
},
|
|
21822
|
+
Rgb: (args, compile2, target) => {
|
|
21823
|
+
if (args.length < 3) throw new Error("Rgb: need 3 components");
|
|
21824
|
+
const v3 = gpuVec3(target);
|
|
21825
|
+
return `_gpu_srgb_to_oklch(${v3}(${compile2(args[0])}, ${compile2(args[1])}, ${compile2(args[2])}))`;
|
|
21826
|
+
},
|
|
21827
|
+
Hsv: (args, compile2, target) => {
|
|
21828
|
+
if (args.length < 3) throw new Error("Hsv: need 3 components");
|
|
21829
|
+
const v3 = gpuVec3(target);
|
|
21830
|
+
return `_gpu_srgb_to_oklch(_gpu_hsv_to_rgb(${v3}(${compile2(args[0])}, ${compile2(args[1])}, ${compile2(args[2])})))`;
|
|
21831
|
+
},
|
|
21832
|
+
Hsl: (args, compile2, target) => {
|
|
21833
|
+
if (args.length < 3) throw new Error("Hsl: need 3 components");
|
|
21834
|
+
const v3 = gpuVec3(target);
|
|
21835
|
+
return `_gpu_srgb_to_oklch(_gpu_hsl_to_rgb(${v3}(${compile2(args[0])}, ${compile2(args[1])}, ${compile2(args[2])})))`;
|
|
21836
|
+
},
|
|
21837
|
+
Oklab: (args, compile2, target) => {
|
|
21838
|
+
if (args.length < 3) throw new Error("Oklab: need 3 components");
|
|
21839
|
+
const v3 = gpuVec3(target);
|
|
21840
|
+
return `_gpu_oklab_to_oklch(${v3}(${compile2(args[0])}, ${compile2(args[1])}, ${compile2(args[2])}))`;
|
|
21841
|
+
},
|
|
21842
|
+
Oklch: (args, compile2, target) => {
|
|
21843
|
+
if (args.length < 3) throw new Error("Oklch: need 3 components");
|
|
21844
|
+
const v3 = gpuVec3(target);
|
|
21845
|
+
return `${v3}(${compile2(args[0])}, ${compile2(args[1])}, ${compile2(args[2])})`;
|
|
21846
|
+
},
|
|
21847
|
+
// ---------------------------------------------------------------------------
|
|
21848
|
+
// As* operators. AsOklch is identity (canonical). The other As* return
|
|
21849
|
+
// components in the named space, equivalent to ColorToColorspace(c, 'x').
|
|
21850
|
+
// ---------------------------------------------------------------------------
|
|
21851
|
+
AsOklch: ([c], compile2) => {
|
|
21852
|
+
if (c === null) throw new Error("AsOklch: no argument");
|
|
21853
|
+
return compile2(c);
|
|
21854
|
+
},
|
|
21855
|
+
AsOklab: ([c], compile2) => {
|
|
21856
|
+
if (c === null) throw new Error("AsOklab: no argument");
|
|
21857
|
+
return `_gpu_oklch_to_oklab(${compile2(c)})`;
|
|
21858
|
+
},
|
|
21859
|
+
AsRgb: ([c], compile2) => {
|
|
21860
|
+
if (c === null) throw new Error("AsRgb: no argument");
|
|
21861
|
+
return `_gpu_oklch_to_srgb(${compile2(c)})`;
|
|
21862
|
+
},
|
|
21863
|
+
AsHsv: ([c], compile2) => {
|
|
21864
|
+
if (c === null) throw new Error("AsHsv: no argument");
|
|
21865
|
+
return `_gpu_rgb_to_hsv(_gpu_oklch_to_srgb(${compile2(c)}))`;
|
|
21866
|
+
},
|
|
21867
|
+
AsHsl: ([c], compile2) => {
|
|
21868
|
+
if (c === null) throw new Error("AsHsl: no argument");
|
|
21869
|
+
return `_gpu_rgb_to_hsl(_gpu_oklch_to_srgb(${compile2(c)}))`;
|
|
21432
21870
|
},
|
|
21433
21871
|
// Fractal functions
|
|
21434
21872
|
Mandelbrot: ([c, maxIter], compile2, target) => {
|
|
@@ -22121,28 +22559,124 @@ vec3 _gpu_oklab_to_srgb(vec3 lab) {
|
|
|
22121
22559
|
|
|
22122
22560
|
vec3 _gpu_oklab_to_oklch(vec3 lab) {
|
|
22123
22561
|
float C = length(lab.yz);
|
|
22124
|
-
float H = atan(lab.z, lab.y);
|
|
22562
|
+
float H = atan(lab.z, lab.y) * (180.0 / 3.14159265359);
|
|
22563
|
+
if (H < 0.0) H += 360.0;
|
|
22125
22564
|
return vec3(lab.x, C, H);
|
|
22126
22565
|
}
|
|
22127
22566
|
|
|
22128
22567
|
vec3 _gpu_oklch_to_oklab(vec3 lch) {
|
|
22129
|
-
|
|
22568
|
+
float h_rad = lch.z * (3.14159265359 / 180.0);
|
|
22569
|
+
return vec3(lch.x, lch.y * cos(h_rad), lch.y * sin(h_rad));
|
|
22570
|
+
}
|
|
22571
|
+
|
|
22572
|
+
vec3 _gpu_srgb_to_oklch(vec3 rgb) {
|
|
22573
|
+
return _gpu_oklab_to_oklch(_gpu_srgb_to_oklab(rgb));
|
|
22574
|
+
}
|
|
22575
|
+
|
|
22576
|
+
vec3 _gpu_oklch_to_srgb(vec3 lch) {
|
|
22577
|
+
return _gpu_oklab_to_srgb(_gpu_oklch_to_oklab(lch));
|
|
22578
|
+
}
|
|
22579
|
+
|
|
22580
|
+
// HSL conversion. Hue in degrees, saturation/lightness in 0-1.
|
|
22581
|
+
vec3 _gpu_hsl_to_rgb(vec3 hsl) {
|
|
22582
|
+
float h = hsl.x;
|
|
22583
|
+
float s = hsl.y;
|
|
22584
|
+
float l = hsl.z;
|
|
22585
|
+
float c = (1.0 - abs(2.0 * l - 1.0)) * s;
|
|
22586
|
+
float h6 = h / 60.0;
|
|
22587
|
+
float x = c * (1.0 - abs(mod(h6, 2.0) - 1.0));
|
|
22588
|
+
float r = 0.0;
|
|
22589
|
+
float g = 0.0;
|
|
22590
|
+
float b = 0.0;
|
|
22591
|
+
if (h6 < 1.0) { r = c; g = x; b = 0.0; }
|
|
22592
|
+
else if (h6 < 2.0) { r = x; g = c; b = 0.0; }
|
|
22593
|
+
else if (h6 < 3.0) { r = 0.0; g = c; b = x; }
|
|
22594
|
+
else if (h6 < 4.0) { r = 0.0; g = x; b = c; }
|
|
22595
|
+
else if (h6 < 5.0) { r = x; g = 0.0; b = c; }
|
|
22596
|
+
else { r = c; g = 0.0; b = x; }
|
|
22597
|
+
float m = l - c / 2.0;
|
|
22598
|
+
return vec3(r + m, g + m, b + m);
|
|
22599
|
+
}
|
|
22600
|
+
|
|
22601
|
+
vec3 _gpu_rgb_to_hsl(vec3 rgb) {
|
|
22602
|
+
float maxc = max(max(rgb.x, rgb.y), rgb.z);
|
|
22603
|
+
float minc = min(min(rgb.x, rgb.y), rgb.z);
|
|
22604
|
+
float l = (maxc + minc) / 2.0;
|
|
22605
|
+
float d = maxc - minc;
|
|
22606
|
+
if (d < 1e-6) return vec3(0.0, 0.0, l);
|
|
22607
|
+
float s = d / (1.0 - abs(2.0 * l - 1.0));
|
|
22608
|
+
float h;
|
|
22609
|
+
if (maxc == rgb.x) h = mod((rgb.y - rgb.z) / d, 6.0);
|
|
22610
|
+
else if (maxc == rgb.y) h = (rgb.z - rgb.x) / d + 2.0;
|
|
22611
|
+
else h = (rgb.x - rgb.y) / d + 4.0;
|
|
22612
|
+
h *= 60.0;
|
|
22613
|
+
if (h < 0.0) h += 360.0;
|
|
22614
|
+
return vec3(h, s, l);
|
|
22615
|
+
}
|
|
22616
|
+
|
|
22617
|
+
// HSV conversion. Hue in degrees, saturation/value in 0-1.
|
|
22618
|
+
vec3 _gpu_hsv_to_rgb(vec3 hsv) {
|
|
22619
|
+
float h = hsv.x;
|
|
22620
|
+
float s = hsv.y;
|
|
22621
|
+
float v = hsv.z;
|
|
22622
|
+
float c = v * s;
|
|
22623
|
+
float h6 = h / 60.0;
|
|
22624
|
+
float x = c * (1.0 - abs(mod(h6, 2.0) - 1.0));
|
|
22625
|
+
float r = 0.0;
|
|
22626
|
+
float g = 0.0;
|
|
22627
|
+
float b = 0.0;
|
|
22628
|
+
if (h6 < 1.0) { r = c; g = x; b = 0.0; }
|
|
22629
|
+
else if (h6 < 2.0) { r = x; g = c; b = 0.0; }
|
|
22630
|
+
else if (h6 < 3.0) { r = 0.0; g = c; b = x; }
|
|
22631
|
+
else if (h6 < 4.0) { r = 0.0; g = x; b = c; }
|
|
22632
|
+
else if (h6 < 5.0) { r = x; g = 0.0; b = c; }
|
|
22633
|
+
else { r = c; g = 0.0; b = x; }
|
|
22634
|
+
float m = v - c;
|
|
22635
|
+
return vec3(r + m, g + m, b + m);
|
|
22636
|
+
}
|
|
22637
|
+
|
|
22638
|
+
vec3 _gpu_rgb_to_hsv(vec3 rgb) {
|
|
22639
|
+
float maxc = max(max(rgb.x, rgb.y), rgb.z);
|
|
22640
|
+
float minc = min(min(rgb.x, rgb.y), rgb.z);
|
|
22641
|
+
float v = maxc;
|
|
22642
|
+
float d = maxc - minc;
|
|
22643
|
+
if (d < 1e-6) return vec3(0.0, 0.0, v);
|
|
22644
|
+
float s = (maxc < 1e-6) ? 0.0 : d / maxc;
|
|
22645
|
+
float h;
|
|
22646
|
+
if (maxc == rgb.x) h = mod((rgb.y - rgb.z) / d, 6.0);
|
|
22647
|
+
else if (maxc == rgb.y) h = (rgb.z - rgb.x) / d + 2.0;
|
|
22648
|
+
else h = (rgb.x - rgb.y) / d + 4.0;
|
|
22649
|
+
h *= 60.0;
|
|
22650
|
+
if (h < 0.0) h += 360.0;
|
|
22651
|
+
return vec3(h, s, v);
|
|
22130
22652
|
}
|
|
22131
22653
|
|
|
22132
|
-
vec3 _gpu_color_mix(vec3
|
|
22133
|
-
vec3 lch1 = _gpu_oklab_to_oklch(_gpu_srgb_to_oklab(rgb1));
|
|
22134
|
-
vec3 lch2 = _gpu_oklab_to_oklch(_gpu_srgb_to_oklab(rgb2));
|
|
22654
|
+
vec3 _gpu_color_mix(vec3 lch1, vec3 lch2, float t) {
|
|
22135
22655
|
float L = mix(lch1.x, lch2.x, t);
|
|
22136
22656
|
float C = mix(lch1.y, lch2.y, t);
|
|
22137
|
-
|
|
22138
|
-
|
|
22139
|
-
|
|
22140
|
-
if (
|
|
22141
|
-
|
|
22142
|
-
|
|
22657
|
+
bool a1 = lch1.y < 1e-6;
|
|
22658
|
+
bool a2 = lch2.y < 1e-6;
|
|
22659
|
+
float H;
|
|
22660
|
+
if (a1 && a2) {
|
|
22661
|
+
H = lch1.z;
|
|
22662
|
+
} else if (a1) {
|
|
22663
|
+
H = lch2.z;
|
|
22664
|
+
} else if (a2) {
|
|
22665
|
+
H = lch1.z;
|
|
22666
|
+
} else {
|
|
22667
|
+
float dh = lch2.z - lch1.z;
|
|
22668
|
+
if (dh > 180.0) dh -= 360.0;
|
|
22669
|
+
if (dh < -180.0) dh += 360.0;
|
|
22670
|
+
H = lch1.z + dh * t;
|
|
22671
|
+
if (H < 0.0) H += 360.0;
|
|
22672
|
+
if (H >= 360.0) H -= 360.0;
|
|
22673
|
+
}
|
|
22674
|
+
return vec3(L, C, H);
|
|
22143
22675
|
}
|
|
22144
22676
|
|
|
22145
|
-
float _gpu_apca(vec3
|
|
22677
|
+
float _gpu_apca(vec3 lch_bg, vec3 lch_fg) {
|
|
22678
|
+
vec3 bg = _gpu_oklch_to_srgb(lch_bg);
|
|
22679
|
+
vec3 fg = _gpu_oklch_to_srgb(lch_fg);
|
|
22146
22680
|
float bgR = _gpu_srgb_to_linear(bg.x);
|
|
22147
22681
|
float bgG = _gpu_srgb_to_linear(bg.y);
|
|
22148
22682
|
float bgB = _gpu_srgb_to_linear(bg.z);
|
|
@@ -22153,9 +22687,7 @@ float _gpu_apca(vec3 bg, vec3 fg) {
|
|
|
22153
22687
|
float fgY = 0.2126729 * fgR + 0.7151522 * fgG + 0.0721750 * fgB;
|
|
22154
22688
|
float bgC = pow(bgY, 0.56);
|
|
22155
22689
|
float fgC = pow(fgY, 0.57);
|
|
22156
|
-
float contrast = (bgC
|
|
22157
|
-
? (bgC - fgC) * 1.14
|
|
22158
|
-
: (bgC - fgC) * 1.14;
|
|
22690
|
+
float contrast = (bgC - fgC) * 1.14;
|
|
22159
22691
|
return contrast * 100.0;
|
|
22160
22692
|
}
|
|
22161
22693
|
`;
|
|
@@ -22199,28 +22731,133 @@ fn _gpu_oklab_to_srgb(lab: vec3f) -> vec3f {
|
|
|
22199
22731
|
|
|
22200
22732
|
fn _gpu_oklab_to_oklch(lab: vec3f) -> vec3f {
|
|
22201
22733
|
let C = length(lab.yz);
|
|
22202
|
-
|
|
22734
|
+
var H = atan2(lab.z, lab.y) * (180.0 / 3.14159265359);
|
|
22735
|
+
if (H < 0.0) { H = H + 360.0; }
|
|
22203
22736
|
return vec3f(lab.x, C, H);
|
|
22204
22737
|
}
|
|
22205
22738
|
|
|
22206
22739
|
fn _gpu_oklch_to_oklab(lch: vec3f) -> vec3f {
|
|
22207
|
-
|
|
22740
|
+
let h_rad = lch.z * (3.14159265359 / 180.0);
|
|
22741
|
+
return vec3f(lch.x, lch.y * cos(h_rad), lch.y * sin(h_rad));
|
|
22742
|
+
}
|
|
22743
|
+
|
|
22744
|
+
fn _gpu_srgb_to_oklch(rgb: vec3f) -> vec3f {
|
|
22745
|
+
return _gpu_oklab_to_oklch(_gpu_srgb_to_oklab(rgb));
|
|
22746
|
+
}
|
|
22747
|
+
|
|
22748
|
+
fn _gpu_oklch_to_srgb(lch: vec3f) -> vec3f {
|
|
22749
|
+
return _gpu_oklab_to_srgb(_gpu_oklch_to_oklab(lch));
|
|
22750
|
+
}
|
|
22751
|
+
|
|
22752
|
+
fn _gpu_hsl_to_rgb(hsl: vec3f) -> vec3f {
|
|
22753
|
+
let h = hsl.x;
|
|
22754
|
+
let s = hsl.y;
|
|
22755
|
+
let l = hsl.z;
|
|
22756
|
+
let c = (1.0 - abs(2.0 * l - 1.0)) * s;
|
|
22757
|
+
let h6 = h / 60.0;
|
|
22758
|
+
let x = c * (1.0 - abs((h6 - 2.0 * floor(h6 / 2.0)) - 1.0));
|
|
22759
|
+
var r: f32 = 0.0;
|
|
22760
|
+
var g: f32 = 0.0;
|
|
22761
|
+
var b: f32 = 0.0;
|
|
22762
|
+
if (h6 < 1.0) { r = c; g = x; b = 0.0; }
|
|
22763
|
+
else if (h6 < 2.0) { r = x; g = c; b = 0.0; }
|
|
22764
|
+
else if (h6 < 3.0) { r = 0.0; g = c; b = x; }
|
|
22765
|
+
else if (h6 < 4.0) { r = 0.0; g = x; b = c; }
|
|
22766
|
+
else if (h6 < 5.0) { r = x; g = 0.0; b = c; }
|
|
22767
|
+
else { r = c; g = 0.0; b = x; }
|
|
22768
|
+
let m = l - c / 2.0;
|
|
22769
|
+
return vec3f(r + m, g + m, b + m);
|
|
22770
|
+
}
|
|
22771
|
+
|
|
22772
|
+
fn _gpu_rgb_to_hsl(rgb: vec3f) -> vec3f {
|
|
22773
|
+
let maxc = max(max(rgb.x, rgb.y), rgb.z);
|
|
22774
|
+
let minc = min(min(rgb.x, rgb.y), rgb.z);
|
|
22775
|
+
let l = (maxc + minc) / 2.0;
|
|
22776
|
+
let d = maxc - minc;
|
|
22777
|
+
if (d < 1e-6) { return vec3f(0.0, 0.0, l); }
|
|
22778
|
+
let s = d / (1.0 - abs(2.0 * l - 1.0));
|
|
22779
|
+
var h: f32;
|
|
22780
|
+
if (maxc == rgb.x) {
|
|
22781
|
+
let v = (rgb.y - rgb.z) / d;
|
|
22782
|
+
h = v - 6.0 * floor(v / 6.0);
|
|
22783
|
+
} else if (maxc == rgb.y) {
|
|
22784
|
+
h = (rgb.z - rgb.x) / d + 2.0;
|
|
22785
|
+
} else {
|
|
22786
|
+
h = (rgb.x - rgb.y) / d + 4.0;
|
|
22787
|
+
}
|
|
22788
|
+
h = h * 60.0;
|
|
22789
|
+
if (h < 0.0) { h = h + 360.0; }
|
|
22790
|
+
return vec3f(h, s, l);
|
|
22791
|
+
}
|
|
22792
|
+
|
|
22793
|
+
fn _gpu_hsv_to_rgb(hsv: vec3f) -> vec3f {
|
|
22794
|
+
let h = hsv.x;
|
|
22795
|
+
let s = hsv.y;
|
|
22796
|
+
let v = hsv.z;
|
|
22797
|
+
let c = v * s;
|
|
22798
|
+
let h6 = h / 60.0;
|
|
22799
|
+
let x = c * (1.0 - abs((h6 - 2.0 * floor(h6 / 2.0)) - 1.0));
|
|
22800
|
+
var r: f32 = 0.0;
|
|
22801
|
+
var g: f32 = 0.0;
|
|
22802
|
+
var b: f32 = 0.0;
|
|
22803
|
+
if (h6 < 1.0) { r = c; g = x; b = 0.0; }
|
|
22804
|
+
else if (h6 < 2.0) { r = x; g = c; b = 0.0; }
|
|
22805
|
+
else if (h6 < 3.0) { r = 0.0; g = c; b = x; }
|
|
22806
|
+
else if (h6 < 4.0) { r = 0.0; g = x; b = c; }
|
|
22807
|
+
else if (h6 < 5.0) { r = x; g = 0.0; b = c; }
|
|
22808
|
+
else { r = c; g = 0.0; b = x; }
|
|
22809
|
+
let m = v - c;
|
|
22810
|
+
return vec3f(r + m, g + m, b + m);
|
|
22811
|
+
}
|
|
22812
|
+
|
|
22813
|
+
fn _gpu_rgb_to_hsv(rgb: vec3f) -> vec3f {
|
|
22814
|
+
let maxc = max(max(rgb.x, rgb.y), rgb.z);
|
|
22815
|
+
let minc = min(min(rgb.x, rgb.y), rgb.z);
|
|
22816
|
+
let v = maxc;
|
|
22817
|
+
let d = maxc - minc;
|
|
22818
|
+
if (d < 1e-6) { return vec3f(0.0, 0.0, v); }
|
|
22819
|
+
var s: f32 = 0.0;
|
|
22820
|
+
if (maxc >= 1e-6) { s = d / maxc; }
|
|
22821
|
+
var h: f32;
|
|
22822
|
+
if (maxc == rgb.x) {
|
|
22823
|
+
let q = (rgb.y - rgb.z) / d;
|
|
22824
|
+
h = q - 6.0 * floor(q / 6.0);
|
|
22825
|
+
} else if (maxc == rgb.y) {
|
|
22826
|
+
h = (rgb.z - rgb.x) / d + 2.0;
|
|
22827
|
+
} else {
|
|
22828
|
+
h = (rgb.x - rgb.y) / d + 4.0;
|
|
22829
|
+
}
|
|
22830
|
+
h = h * 60.0;
|
|
22831
|
+
if (h < 0.0) { h = h + 360.0; }
|
|
22832
|
+
return vec3f(h, s, v);
|
|
22208
22833
|
}
|
|
22209
22834
|
|
|
22210
|
-
fn _gpu_color_mix(
|
|
22211
|
-
let lch1 = _gpu_oklab_to_oklch(_gpu_srgb_to_oklab(rgb1));
|
|
22212
|
-
let lch2 = _gpu_oklab_to_oklch(_gpu_srgb_to_oklab(rgb2));
|
|
22835
|
+
fn _gpu_color_mix(lch1: vec3f, lch2: vec3f, t: f32) -> vec3f {
|
|
22213
22836
|
let L = mix(lch1.x, lch2.x, t);
|
|
22214
22837
|
let C = mix(lch1.y, lch2.y, t);
|
|
22215
|
-
let
|
|
22216
|
-
|
|
22217
|
-
|
|
22218
|
-
if (
|
|
22219
|
-
|
|
22220
|
-
|
|
22838
|
+
let a1 = lch1.y < 1e-6;
|
|
22839
|
+
let a2 = lch2.y < 1e-6;
|
|
22840
|
+
var H: f32;
|
|
22841
|
+
if (a1 && a2) {
|
|
22842
|
+
H = lch1.z;
|
|
22843
|
+
} else if (a1) {
|
|
22844
|
+
H = lch2.z;
|
|
22845
|
+
} else if (a2) {
|
|
22846
|
+
H = lch1.z;
|
|
22847
|
+
} else {
|
|
22848
|
+
var dh = lch2.z - lch1.z;
|
|
22849
|
+
if (dh > 180.0) { dh = dh - 360.0; }
|
|
22850
|
+
if (dh < -180.0) { dh = dh + 360.0; }
|
|
22851
|
+
H = lch1.z + dh * t;
|
|
22852
|
+
if (H < 0.0) { H = H + 360.0; }
|
|
22853
|
+
if (H >= 360.0) { H = H - 360.0; }
|
|
22854
|
+
}
|
|
22855
|
+
return vec3f(L, C, H);
|
|
22221
22856
|
}
|
|
22222
22857
|
|
|
22223
|
-
fn _gpu_apca(
|
|
22858
|
+
fn _gpu_apca(lch_bg: vec3f, lch_fg: vec3f) -> f32 {
|
|
22859
|
+
let bg = _gpu_oklch_to_srgb(lch_bg);
|
|
22860
|
+
let fg = _gpu_oklch_to_srgb(lch_fg);
|
|
22224
22861
|
let bgR = _gpu_srgb_to_linear(bg.x);
|
|
22225
22862
|
let bgG = _gpu_srgb_to_linear(bg.y);
|
|
22226
22863
|
let bgB = _gpu_srgb_to_linear(bg.z);
|
|
@@ -22508,7 +23145,7 @@ fn _gpu_apca(bg: vec3f, fg: vec3f) -> f32 {
|
|
|
22508
23145
|
if (stmts.length === 0) return "";
|
|
22509
23146
|
const last = stmts.length - 1;
|
|
22510
23147
|
stmts[last] = `return ${stmts[last]}`;
|
|
22511
|
-
return stmts.join(";\n");
|
|
23148
|
+
return stmts.join(";\n") + ";";
|
|
22512
23149
|
},
|
|
22513
23150
|
...options
|
|
22514
23151
|
};
|
|
@@ -22607,7 +23244,7 @@ fn _gpu_apca(bg: vec3f, fg: vec3f) -> f32 {
|
|
|
22607
23244
|
if (body.includes("\n")) {
|
|
22608
23245
|
const indented = body.split("\n").map((l) => ` ${l}`).join("\n");
|
|
22609
23246
|
return `${returnType} ${functionName}(${params}) {
|
|
22610
|
-
${indented}
|
|
23247
|
+
${indented}
|
|
22611
23248
|
}`;
|
|
22612
23249
|
}
|
|
22613
23250
|
return `${returnType} ${functionName}(${params}) {
|
|
@@ -22718,7 +23355,7 @@ ${indented};
|
|
|
22718
23355
|
return `fn ${functionName}(${params}) -> ${toWGSLType(
|
|
22719
23356
|
returnType
|
|
22720
23357
|
)} {
|
|
22721
|
-
${indented}
|
|
23358
|
+
${indented}
|
|
22722
23359
|
}`;
|
|
22723
23360
|
}
|
|
22724
23361
|
return `fn ${functionName}(${params}) -> ${toWGSLType(returnType)} {
|
|
@@ -24897,7 +25534,7 @@ ${code}`;
|
|
|
24897
25534
|
}
|
|
24898
25535
|
|
|
24899
25536
|
// src/compile.ts
|
|
24900
|
-
var version = "0.
|
|
25537
|
+
var version = "0.56.0";
|
|
24901
25538
|
return __toCommonJS(compile_exports);
|
|
24902
25539
|
})();
|
|
24903
25540
|
/*! Bundled license information:
|