css-calipers 0.15.0 → 1.1.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.txt +1 -1
- package/README.md +70 -434
- package/dist/cjs/color/formats/display-p3/display-p3.js +25 -0
- package/dist/cjs/color/formats/escalate.js +41 -0
- package/dist/cjs/color/formats/hex/hex.js +28 -0
- package/dist/cjs/color/formats/hexAlpha/hexAlpha.js +25 -0
- package/dist/cjs/color/formats/hsl/hsl.js +23 -0
- package/dist/cjs/color/formats/hwb/hwb.js +24 -0
- package/dist/cjs/color/formats/index.js +36 -0
- package/dist/cjs/color/formats/internals.js +93 -0
- package/dist/cjs/color/formats/lab/lab.js +24 -0
- package/dist/cjs/color/formats/lch/lch.js +23 -0
- package/dist/cjs/color/formats/oklab/oklab.js +24 -0
- package/dist/cjs/color/formats/oklch/oklch.js +28 -0
- package/dist/cjs/color/formats/resolve.js +16 -0
- package/dist/cjs/color/formats/rgb/rgb.js +29 -0
- package/dist/cjs/color/formats/rgba/rgba.js +27 -0
- package/dist/cjs/color/formats/types.js +11 -0
- package/dist/cjs/color/index.js +619 -0
- package/dist/cjs/color/types.js +2 -0
- package/dist/cjs/core.js +11 -8
- package/dist/cjs/corpus.js +53 -0
- package/dist/cjs/css-values/cssValues.js +78 -0
- package/dist/cjs/css-values/index.js +36 -0
- package/dist/cjs/css-values/multi.js +290 -0
- package/dist/cjs/css-values/propertyMap.js +2 -0
- package/dist/cjs/css-values/spec.js +197 -0
- package/dist/cjs/default.js +17 -0
- package/dist/cjs/factory.js +1 -1
- package/dist/cjs/float.js +110 -0
- package/dist/cjs/index.js +29 -9
- package/dist/cjs/integer.js +114 -0
- package/dist/cjs/internal/createCoreApi.js +103 -38
- package/dist/cjs/internal/errors.js +13 -14
- package/dist/cjs/internal/toPlainDecimal.js +31 -0
- package/dist/cjs/measurements.js +41 -0
- package/dist/cjs/ratio.js +57 -22
- package/dist/cjs/scalar.js +9 -0
- package/dist/cjs/units/absolute.js +8 -8
- package/dist/cjs/units/angle.js +5 -5
- package/dist/cjs/units/container.js +7 -7
- package/dist/cjs/units/font-relative.js +13 -13
- package/dist/cjs/units/frequency.js +3 -3
- package/dist/cjs/units/grid.js +2 -2
- package/dist/cjs/units/index.js +9 -9
- package/dist/cjs/units/percent.js +4 -4
- package/dist/cjs/units/resolution.js +4 -4
- package/dist/cjs/units/time.js +3 -3
- package/dist/cjs/units/viewport-dynamic.js +7 -7
- package/dist/cjs/units/viewport-large.js +7 -7
- package/dist/cjs/units/viewport-small.js +7 -7
- package/dist/cjs/units/viewport.js +7 -7
- package/dist/esm/color/formats/display-p3/display-p3.d.ts +10 -0
- package/dist/esm/color/formats/display-p3/display-p3.d.ts.map +1 -0
- package/dist/esm/color/formats/display-p3/display-p3.js +22 -0
- package/dist/esm/color/formats/escalate.d.ts +10 -0
- package/dist/esm/color/formats/escalate.d.ts.map +1 -0
- package/dist/esm/color/formats/escalate.js +37 -0
- package/dist/esm/color/formats/hex/hex.d.ts +9 -0
- package/dist/esm/color/formats/hex/hex.d.ts.map +1 -0
- package/dist/esm/color/formats/hex/hex.js +25 -0
- package/dist/esm/color/formats/hexAlpha/hexAlpha.d.ts +9 -0
- package/dist/esm/color/formats/hexAlpha/hexAlpha.d.ts.map +1 -0
- package/dist/esm/color/formats/hexAlpha/hexAlpha.js +22 -0
- package/dist/esm/color/formats/hsl/hsl.d.ts +8 -0
- package/dist/esm/color/formats/hsl/hsl.d.ts.map +1 -0
- package/dist/esm/color/formats/hsl/hsl.js +20 -0
- package/dist/esm/color/formats/hwb/hwb.d.ts +9 -0
- package/dist/esm/color/formats/hwb/hwb.d.ts.map +1 -0
- package/dist/esm/color/formats/hwb/hwb.js +21 -0
- package/dist/esm/color/formats/index.d.ts +24 -0
- package/dist/esm/color/formats/index.d.ts.map +1 -0
- package/dist/esm/color/formats/index.js +32 -0
- package/dist/esm/color/formats/internals.d.ts +35 -0
- package/dist/esm/color/formats/internals.d.ts.map +1 -0
- package/dist/esm/color/formats/internals.js +78 -0
- package/dist/esm/color/formats/lab/lab.d.ts +9 -0
- package/dist/esm/color/formats/lab/lab.d.ts.map +1 -0
- package/dist/esm/color/formats/lab/lab.js +21 -0
- package/dist/esm/color/formats/lch/lch.d.ts +8 -0
- package/dist/esm/color/formats/lch/lch.d.ts.map +1 -0
- package/dist/esm/color/formats/lch/lch.js +20 -0
- package/dist/esm/color/formats/oklab/oklab.d.ts +9 -0
- package/dist/esm/color/formats/oklab/oklab.d.ts.map +1 -0
- package/dist/esm/color/formats/oklab/oklab.js +21 -0
- package/dist/esm/color/formats/oklch/oklch.d.ts +13 -0
- package/dist/esm/color/formats/oklch/oklch.d.ts.map +1 -0
- package/dist/esm/color/formats/oklch/oklch.js +25 -0
- package/dist/esm/color/formats/resolve.d.ts +15 -0
- package/dist/esm/color/formats/resolve.d.ts.map +1 -0
- package/dist/esm/color/formats/resolve.js +12 -0
- package/dist/esm/color/formats/rgb/rgb.d.ts +11 -0
- package/dist/esm/color/formats/rgb/rgb.d.ts.map +1 -0
- package/dist/esm/color/formats/rgb/rgb.js +26 -0
- package/dist/esm/color/formats/rgba/rgba.d.ts +9 -0
- package/dist/esm/color/formats/rgba/rgba.d.ts.map +1 -0
- package/dist/esm/color/formats/rgba/rgba.js +24 -0
- package/dist/esm/color/formats/types.d.ts +48 -0
- package/dist/esm/color/formats/types.d.ts.map +1 -0
- package/dist/esm/color/formats/types.js +7 -0
- package/dist/esm/color/index.d.ts +81 -0
- package/dist/esm/color/index.d.ts.map +1 -0
- package/dist/esm/color/index.js +609 -0
- package/dist/esm/color/types.d.ts +294 -0
- package/dist/esm/color/types.d.ts.map +1 -0
- package/dist/esm/color/types.js +1 -0
- package/dist/esm/core.d.ts +76 -270
- package/dist/esm/core.d.ts.map +1 -1
- package/dist/esm/core.js +5 -7
- package/dist/esm/corpus.d.ts +26 -0
- package/dist/esm/corpus.d.ts.map +1 -0
- package/dist/esm/corpus.js +37 -0
- package/dist/esm/css-values/cssValues.d.ts +60 -0
- package/dist/esm/css-values/cssValues.d.ts.map +1 -0
- package/dist/esm/css-values/cssValues.js +74 -0
- package/dist/esm/css-values/index.d.ts +6 -0
- package/dist/esm/css-values/index.d.ts.map +1 -0
- package/dist/esm/css-values/index.js +12 -0
- package/dist/esm/css-values/multi.d.ts +188 -0
- package/dist/esm/css-values/multi.d.ts.map +1 -0
- package/dist/esm/css-values/multi.js +281 -0
- package/dist/esm/css-values/propertyMap.d.ts +39 -0
- package/dist/esm/css-values/propertyMap.d.ts.map +1 -0
- package/dist/esm/css-values/propertyMap.js +1 -0
- package/dist/esm/css-values/spec.d.ts +36 -0
- package/dist/esm/css-values/spec.d.ts.map +1 -0
- package/dist/esm/css-values/spec.js +194 -0
- package/dist/esm/default.d.ts +267 -0
- package/dist/esm/default.d.ts.map +1 -0
- package/dist/esm/default.js +14 -0
- package/dist/esm/factory.d.ts +1 -1
- package/dist/esm/factory.d.ts.map +1 -1
- package/dist/esm/factory.js +3 -3
- package/dist/esm/float.d.ts +35 -0
- package/dist/esm/float.d.ts.map +1 -0
- package/dist/esm/float.js +104 -0
- package/dist/esm/index.d.ts +11 -9
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +19 -9
- package/dist/esm/integer.d.ts +36 -0
- package/dist/esm/integer.d.ts.map +1 -0
- package/dist/esm/integer.js +108 -0
- package/dist/esm/internal/buildMeasurementCreationError.tests.d.ts +1 -1
- package/dist/esm/internal/buildMeasurementCreationError.tests.d.ts.map +1 -1
- package/dist/esm/internal/createCoreApi.d.ts +9 -1
- package/dist/esm/internal/createCoreApi.d.ts.map +1 -1
- package/dist/esm/internal/createCoreApi.js +103 -38
- package/dist/esm/internal/createUnitsApi.d.ts +1 -1
- package/dist/esm/internal/createUnitsApi.d.ts.map +1 -1
- package/dist/esm/internal/errors.d.ts +3 -3
- package/dist/esm/internal/errors.d.ts.map +1 -1
- package/dist/esm/internal/errors.js +13 -14
- package/dist/esm/internal/toPlainDecimal.d.ts +2 -0
- package/dist/esm/internal/toPlainDecimal.d.ts.map +1 -0
- package/dist/esm/internal/toPlainDecimal.js +27 -0
- package/dist/esm/measurements.d.ts +16 -0
- package/dist/esm/measurements.d.ts.map +1 -0
- package/dist/esm/measurements.js +25 -0
- package/dist/esm/ratio.d.ts +14 -5
- package/dist/esm/ratio.d.ts.map +1 -1
- package/dist/esm/ratio.js +57 -22
- package/dist/esm/scalar.d.ts +14 -0
- package/dist/esm/scalar.d.ts.map +1 -0
- package/dist/esm/scalar.js +5 -0
- package/dist/esm/units/absolute.d.ts +1 -1
- package/dist/esm/units/absolute.d.ts.map +1 -1
- package/dist/esm/units/absolute.js +1 -1
- package/dist/esm/units/angle.d.ts +1 -1
- package/dist/esm/units/angle.d.ts.map +1 -1
- package/dist/esm/units/angle.js +1 -1
- package/dist/esm/units/container.d.ts +1 -1
- package/dist/esm/units/container.d.ts.map +1 -1
- package/dist/esm/units/container.js +1 -1
- package/dist/esm/units/font-relative.d.ts +1 -1
- package/dist/esm/units/font-relative.d.ts.map +1 -1
- package/dist/esm/units/font-relative.js +1 -1
- package/dist/esm/units/frequency.d.ts +1 -1
- package/dist/esm/units/frequency.d.ts.map +1 -1
- package/dist/esm/units/frequency.js +1 -1
- package/dist/esm/units/grid.d.ts +1 -1
- package/dist/esm/units/grid.d.ts.map +1 -1
- package/dist/esm/units/grid.js +1 -1
- package/dist/esm/units/index.d.ts +9 -9
- package/dist/esm/units/index.d.ts.map +1 -1
- package/dist/esm/units/index.js +9 -9
- package/dist/esm/units/percent.d.ts +1 -1
- package/dist/esm/units/percent.d.ts.map +1 -1
- package/dist/esm/units/percent.js +1 -1
- package/dist/esm/units/resolution.d.ts +1 -1
- package/dist/esm/units/resolution.d.ts.map +1 -1
- package/dist/esm/units/resolution.js +1 -1
- package/dist/esm/units/time.d.ts +1 -1
- package/dist/esm/units/time.d.ts.map +1 -1
- package/dist/esm/units/time.js +1 -1
- package/dist/esm/units/viewport-dynamic.d.ts +1 -1
- package/dist/esm/units/viewport-dynamic.d.ts.map +1 -1
- package/dist/esm/units/viewport-dynamic.js +1 -1
- package/dist/esm/units/viewport-large.d.ts +1 -1
- package/dist/esm/units/viewport-large.d.ts.map +1 -1
- package/dist/esm/units/viewport-large.js +1 -1
- package/dist/esm/units/viewport-small.d.ts +1 -1
- package/dist/esm/units/viewport-small.d.ts.map +1 -1
- package/dist/esm/units/viewport-small.js +1 -1
- package/dist/esm/units/viewport.d.ts +1 -1
- package/dist/esm/units/viewport.d.ts.map +1 -1
- package/dist/esm/units/viewport.js +1 -1
- package/package.json +55 -13
package/dist/cjs/factory.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createCalipers = void 0;
|
|
4
|
-
const errors_1 = require("./internal/errors");
|
|
5
4
|
const createCoreApi_1 = require("./internal/createCoreApi");
|
|
6
5
|
const createUnitsApi_1 = require("./internal/createUnitsApi");
|
|
6
|
+
const errors_1 = require("./internal/errors");
|
|
7
7
|
const createCalipers = (config = {}) => {
|
|
8
8
|
var _a;
|
|
9
9
|
const errorStore = (0, errors_1.createErrorConfigStore)((_a = config.errorConfig) !== null && _a !== void 0 ? _a : {});
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
5
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
6
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
7
|
+
};
|
|
8
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
9
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
10
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
|
+
};
|
|
13
|
+
var _FloatImpl_instances, _FloatImpl_value, _FloatImpl_min, _FloatImpl_max, _FloatImpl_context, _FloatImpl_options;
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.isFloat = exports.hardenFloat = void 0;
|
|
16
|
+
exports.f = f;
|
|
17
|
+
const toPlainDecimal_1 = require("./internal/toPlainDecimal");
|
|
18
|
+
const scalar_1 = require("./scalar");
|
|
19
|
+
const suffix = (context) => context ? ` [${context}]` : '';
|
|
20
|
+
const coerce = (value) => (0, scalar_1.toNumber)(value);
|
|
21
|
+
class FloatImpl {
|
|
22
|
+
constructor(value, options = {}) {
|
|
23
|
+
_FloatImpl_instances.add(this);
|
|
24
|
+
_FloatImpl_value.set(this, void 0);
|
|
25
|
+
_FloatImpl_min.set(this, void 0);
|
|
26
|
+
_FloatImpl_max.set(this, void 0);
|
|
27
|
+
_FloatImpl_context.set(this, void 0);
|
|
28
|
+
const { min, max, context } = options;
|
|
29
|
+
if (min !== undefined && max !== undefined && min > max) {
|
|
30
|
+
throw new Error(`f: min (${min}) must be <= max (${max})${suffix(context)}`);
|
|
31
|
+
}
|
|
32
|
+
if (!Number.isFinite(value)) {
|
|
33
|
+
throw new Error(`f: expected a finite number (got ${value})${suffix(context)}`);
|
|
34
|
+
}
|
|
35
|
+
if (min !== undefined && value < min) {
|
|
36
|
+
throw new Error(`f: ${value} is below the minimum ${min}${suffix(context)}`);
|
|
37
|
+
}
|
|
38
|
+
if (max !== undefined && value > max) {
|
|
39
|
+
throw new Error(`f: ${value} is above the maximum ${max}${suffix(context)}`);
|
|
40
|
+
}
|
|
41
|
+
__classPrivateFieldSet(this, _FloatImpl_value, value, "f");
|
|
42
|
+
__classPrivateFieldSet(this, _FloatImpl_min, min, "f");
|
|
43
|
+
__classPrivateFieldSet(this, _FloatImpl_max, max, "f");
|
|
44
|
+
__classPrivateFieldSet(this, _FloatImpl_context, context, "f");
|
|
45
|
+
}
|
|
46
|
+
value() {
|
|
47
|
+
return __classPrivateFieldGet(this, _FloatImpl_value, "f");
|
|
48
|
+
}
|
|
49
|
+
valueOf() {
|
|
50
|
+
return __classPrivateFieldGet(this, _FloatImpl_value, "f");
|
|
51
|
+
}
|
|
52
|
+
constraints() {
|
|
53
|
+
return { min: __classPrivateFieldGet(this, _FloatImpl_min, "f"), max: __classPrivateFieldGet(this, _FloatImpl_max, "f") };
|
|
54
|
+
}
|
|
55
|
+
css() {
|
|
56
|
+
return (0, toPlainDecimal_1.toPlainDecimal)(__classPrivateFieldGet(this, _FloatImpl_value, "f"));
|
|
57
|
+
}
|
|
58
|
+
toString() {
|
|
59
|
+
return this.css();
|
|
60
|
+
}
|
|
61
|
+
withValue(value) {
|
|
62
|
+
return new FloatImpl(value, __classPrivateFieldGet(this, _FloatImpl_instances, "m", _FloatImpl_options).call(this));
|
|
63
|
+
}
|
|
64
|
+
add(delta) {
|
|
65
|
+
return this.withValue(__classPrivateFieldGet(this, _FloatImpl_value, "f") + coerce(delta));
|
|
66
|
+
}
|
|
67
|
+
subtract(delta) {
|
|
68
|
+
return this.withValue(__classPrivateFieldGet(this, _FloatImpl_value, "f") - coerce(delta));
|
|
69
|
+
}
|
|
70
|
+
multiply(factor) {
|
|
71
|
+
return this.withValue(__classPrivateFieldGet(this, _FloatImpl_value, "f") * coerce(factor));
|
|
72
|
+
}
|
|
73
|
+
divide(divisor) {
|
|
74
|
+
const numeric = coerce(divisor);
|
|
75
|
+
if (numeric === 0) {
|
|
76
|
+
throw new Error(`f: cannot divide ${__classPrivateFieldGet(this, _FloatImpl_value, "f")} by zero${suffix(__classPrivateFieldGet(this, _FloatImpl_context, "f"))}`);
|
|
77
|
+
}
|
|
78
|
+
const result = __classPrivateFieldGet(this, _FloatImpl_value, "f") / numeric;
|
|
79
|
+
if (!Number.isFinite(result)) {
|
|
80
|
+
throw new Error(`f: non-finite result dividing ${__classPrivateFieldGet(this, _FloatImpl_value, "f")} by ${numeric}${suffix(__classPrivateFieldGet(this, _FloatImpl_context, "f"))}`);
|
|
81
|
+
}
|
|
82
|
+
return this.withValue(result);
|
|
83
|
+
}
|
|
84
|
+
clamp(min, max) {
|
|
85
|
+
if (min > max) {
|
|
86
|
+
throw new Error(`f.clamp: min (${min}) must be <= max (${max})`);
|
|
87
|
+
}
|
|
88
|
+
return this.withValue(Math.min(max, Math.max(min, __classPrivateFieldGet(this, _FloatImpl_value, "f"))));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
_FloatImpl_value = new WeakMap(), _FloatImpl_min = new WeakMap(), _FloatImpl_max = new WeakMap(), _FloatImpl_context = new WeakMap(), _FloatImpl_instances = new WeakSet(), _FloatImpl_options = function _FloatImpl_options() {
|
|
92
|
+
return { min: __classPrivateFieldGet(this, _FloatImpl_min, "f"), max: __classPrivateFieldGet(this, _FloatImpl_max, "f"), context: __classPrivateFieldGet(this, _FloatImpl_context, "f") };
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Create a typed float (a finite, unitless real number) with optional range
|
|
96
|
+
* constraints. Operations re-validate against the same constraints, so a
|
|
97
|
+
* hardened float stays hardened (or throws) through arithmetic.
|
|
98
|
+
*/
|
|
99
|
+
function f(value, options = {}) {
|
|
100
|
+
return new FloatImpl(value, options);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Bind a set of float constraints once and reuse the bound factory, the scalar
|
|
104
|
+
* analogue of `makeUnitHelper`. For example, an opacity value is
|
|
105
|
+
* `hardenFloat({ min: 0, max: 1 })`.
|
|
106
|
+
*/
|
|
107
|
+
const hardenFloat = (constraints = {}) => (value, context) => new FloatImpl(value, { ...constraints, context });
|
|
108
|
+
exports.hardenFloat = hardenFloat;
|
|
109
|
+
const isFloat = (value) => value instanceof FloatImpl;
|
|
110
|
+
exports.isFloat = isFloat;
|
package/dist/cjs/index.js
CHANGED
|
@@ -14,17 +14,37 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.storeColor = exports.resolveColor = exports.parseColor = exports.defineColorSpace = exports.defaultFormatPriority = exports.defaultColorConfig = exports.createColor = exports.colorFormats = exports.color = void 0;
|
|
17
18
|
__exportStar(require("./core"), exports);
|
|
18
|
-
|
|
19
|
+
// The bare default-instance helpers (`m`, refinements, unit-helper builders,
|
|
20
|
+
// error-config accessors) come from the single construction path in `./default`,
|
|
21
|
+
// which assembles them via `createCalipers()` at its defaults.
|
|
22
|
+
__exportStar(require("./default"), exports);
|
|
23
|
+
// The native colour input, alongside `m()` / `r()` / `i()` / `f()`. The full value
|
|
24
|
+
// surface also lives at the `./color` subpath (for bundler/node16 consumers); the root
|
|
25
|
+
// re-exports it too so classic-resolution consumers (e.g. @css-bookends/color) can reach
|
|
26
|
+
// it without a subpath. The lower-level value primitives are color-prefixed (and
|
|
27
|
+
// `resolve` is re-exported as `resolveColor`) to avoid colliding with calipers' own names.
|
|
28
|
+
var color_1 = require("./color");
|
|
29
|
+
Object.defineProperty(exports, "color", { enumerable: true, get: function () { return color_1.color; } });
|
|
30
|
+
Object.defineProperty(exports, "colorFormats", { enumerable: true, get: function () { return color_1.colorFormats; } });
|
|
31
|
+
Object.defineProperty(exports, "createColor", { enumerable: true, get: function () { return color_1.createColor; } });
|
|
32
|
+
Object.defineProperty(exports, "defaultColorConfig", { enumerable: true, get: function () { return color_1.defaultColorConfig; } });
|
|
33
|
+
Object.defineProperty(exports, "defaultFormatPriority", { enumerable: true, get: function () { return color_1.defaultFormatPriority; } });
|
|
34
|
+
Object.defineProperty(exports, "defineColorSpace", { enumerable: true, get: function () { return color_1.defineColorSpace; } });
|
|
35
|
+
Object.defineProperty(exports, "parseColor", { enumerable: true, get: function () { return color_1.parseColor; } });
|
|
36
|
+
Object.defineProperty(exports, "resolveColor", { enumerable: true, get: function () { return color_1.resolve; } });
|
|
37
|
+
Object.defineProperty(exports, "storeColor", { enumerable: true, get: function () { return color_1.storeColor; } });
|
|
19
38
|
__exportStar(require("./units/absolute"), exports);
|
|
20
|
-
__exportStar(require("./units/font-relative"), exports);
|
|
21
|
-
__exportStar(require("./units/viewport"), exports);
|
|
22
|
-
__exportStar(require("./units/viewport-small"), exports);
|
|
23
|
-
__exportStar(require("./units/viewport-large"), exports);
|
|
24
|
-
__exportStar(require("./units/viewport-dynamic"), exports);
|
|
25
|
-
__exportStar(require("./units/container"), exports);
|
|
26
39
|
__exportStar(require("./units/angle"), exports);
|
|
27
|
-
__exportStar(require("./units/
|
|
40
|
+
__exportStar(require("./units/container"), exports);
|
|
41
|
+
__exportStar(require("./units/font-relative"), exports);
|
|
28
42
|
__exportStar(require("./units/frequency"), exports);
|
|
29
|
-
__exportStar(require("./units/resolution"), exports);
|
|
30
43
|
__exportStar(require("./units/grid"), exports);
|
|
44
|
+
__exportStar(require("./units/percent"), exports);
|
|
45
|
+
__exportStar(require("./units/resolution"), exports);
|
|
46
|
+
__exportStar(require("./units/time"), exports);
|
|
47
|
+
__exportStar(require("./units/viewport"), exports);
|
|
48
|
+
__exportStar(require("./units/viewport-dynamic"), exports);
|
|
49
|
+
__exportStar(require("./units/viewport-large"), exports);
|
|
50
|
+
__exportStar(require("./units/viewport-small"), exports);
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
3
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
4
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
5
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
6
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
7
|
+
};
|
|
8
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
9
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
10
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
11
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
12
|
+
};
|
|
13
|
+
var _IntegerImpl_instances, _IntegerImpl_value, _IntegerImpl_min, _IntegerImpl_max, _IntegerImpl_context, _IntegerImpl_options;
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.isInteger = exports.hardenInteger = void 0;
|
|
16
|
+
exports.i = i;
|
|
17
|
+
const toPlainDecimal_1 = require("./internal/toPlainDecimal");
|
|
18
|
+
const scalar_1 = require("./scalar");
|
|
19
|
+
const suffix = (context) => context ? ` [${context}]` : '';
|
|
20
|
+
const coerce = (value) => (0, scalar_1.toNumber)(value);
|
|
21
|
+
class IntegerImpl {
|
|
22
|
+
constructor(value, options = {}) {
|
|
23
|
+
_IntegerImpl_instances.add(this);
|
|
24
|
+
_IntegerImpl_value.set(this, void 0);
|
|
25
|
+
_IntegerImpl_min.set(this, void 0);
|
|
26
|
+
_IntegerImpl_max.set(this, void 0);
|
|
27
|
+
_IntegerImpl_context.set(this, void 0);
|
|
28
|
+
const { min, max, context } = options;
|
|
29
|
+
if (min !== undefined && max !== undefined && min > max) {
|
|
30
|
+
throw new Error(`i: min (${min}) must be <= max (${max})${suffix(context)}`);
|
|
31
|
+
}
|
|
32
|
+
if (!Number.isFinite(value)) {
|
|
33
|
+
throw new Error(`i: expected a finite number (got ${value})${suffix(context)}`);
|
|
34
|
+
}
|
|
35
|
+
if (!Number.isInteger(value)) {
|
|
36
|
+
throw new Error(`i: expected an integer (got ${value})${suffix(context)}`);
|
|
37
|
+
}
|
|
38
|
+
if (min !== undefined && value < min) {
|
|
39
|
+
throw new Error(`i: ${value} is below the minimum ${min}${suffix(context)}`);
|
|
40
|
+
}
|
|
41
|
+
if (max !== undefined && value > max) {
|
|
42
|
+
throw new Error(`i: ${value} is above the maximum ${max}${suffix(context)}`);
|
|
43
|
+
}
|
|
44
|
+
__classPrivateFieldSet(this, _IntegerImpl_value, value, "f");
|
|
45
|
+
__classPrivateFieldSet(this, _IntegerImpl_min, min, "f");
|
|
46
|
+
__classPrivateFieldSet(this, _IntegerImpl_max, max, "f");
|
|
47
|
+
__classPrivateFieldSet(this, _IntegerImpl_context, context, "f");
|
|
48
|
+
}
|
|
49
|
+
value() {
|
|
50
|
+
return __classPrivateFieldGet(this, _IntegerImpl_value, "f");
|
|
51
|
+
}
|
|
52
|
+
valueOf() {
|
|
53
|
+
return __classPrivateFieldGet(this, _IntegerImpl_value, "f");
|
|
54
|
+
}
|
|
55
|
+
constraints() {
|
|
56
|
+
return { min: __classPrivateFieldGet(this, _IntegerImpl_min, "f"), max: __classPrivateFieldGet(this, _IntegerImpl_max, "f") };
|
|
57
|
+
}
|
|
58
|
+
css() {
|
|
59
|
+
return (0, toPlainDecimal_1.toPlainDecimal)(__classPrivateFieldGet(this, _IntegerImpl_value, "f"));
|
|
60
|
+
}
|
|
61
|
+
toString() {
|
|
62
|
+
return this.css();
|
|
63
|
+
}
|
|
64
|
+
withValue(value) {
|
|
65
|
+
return new IntegerImpl(value, __classPrivateFieldGet(this, _IntegerImpl_instances, "m", _IntegerImpl_options).call(this));
|
|
66
|
+
}
|
|
67
|
+
add(delta) {
|
|
68
|
+
return this.withValue(__classPrivateFieldGet(this, _IntegerImpl_value, "f") + coerce(delta));
|
|
69
|
+
}
|
|
70
|
+
subtract(delta) {
|
|
71
|
+
return this.withValue(__classPrivateFieldGet(this, _IntegerImpl_value, "f") - coerce(delta));
|
|
72
|
+
}
|
|
73
|
+
multiply(factor) {
|
|
74
|
+
return this.withValue(__classPrivateFieldGet(this, _IntegerImpl_value, "f") * coerce(factor));
|
|
75
|
+
}
|
|
76
|
+
divide(divisor) {
|
|
77
|
+
const numeric = coerce(divisor);
|
|
78
|
+
if (numeric === 0) {
|
|
79
|
+
throw new Error(`i: cannot divide ${__classPrivateFieldGet(this, _IntegerImpl_value, "f")} by zero${suffix(__classPrivateFieldGet(this, _IntegerImpl_context, "f"))}`);
|
|
80
|
+
}
|
|
81
|
+
const result = __classPrivateFieldGet(this, _IntegerImpl_value, "f") / numeric;
|
|
82
|
+
if (!Number.isFinite(result)) {
|
|
83
|
+
throw new Error(`i: non-finite result dividing ${__classPrivateFieldGet(this, _IntegerImpl_value, "f")} by ${numeric}${suffix(__classPrivateFieldGet(this, _IntegerImpl_context, "f"))}`);
|
|
84
|
+
}
|
|
85
|
+
return this.withValue(result);
|
|
86
|
+
}
|
|
87
|
+
clamp(min, max) {
|
|
88
|
+
if (min > max) {
|
|
89
|
+
throw new Error(`i.clamp: min (${min}) must be <= max (${max})`);
|
|
90
|
+
}
|
|
91
|
+
return this.withValue(Math.min(max, Math.max(min, __classPrivateFieldGet(this, _IntegerImpl_value, "f"))));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
_IntegerImpl_value = new WeakMap(), _IntegerImpl_min = new WeakMap(), _IntegerImpl_max = new WeakMap(), _IntegerImpl_context = new WeakMap(), _IntegerImpl_instances = new WeakSet(), _IntegerImpl_options = function _IntegerImpl_options() {
|
|
95
|
+
return { min: __classPrivateFieldGet(this, _IntegerImpl_min, "f"), max: __classPrivateFieldGet(this, _IntegerImpl_max, "f"), context: __classPrivateFieldGet(this, _IntegerImpl_context, "f") };
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Create a typed integer (a finite whole number) with optional range
|
|
99
|
+
* constraints. Operations re-validate against the same constraints, so a
|
|
100
|
+
* result that is no longer an integer (or falls out of range) throws. That is
|
|
101
|
+
* how integer-ness survives arithmetic.
|
|
102
|
+
*/
|
|
103
|
+
function i(value, options = {}) {
|
|
104
|
+
return new IntegerImpl(value, options);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Bind a set of integer constraints once and reuse the bound factory, the
|
|
108
|
+
* scalar analogue of `makeUnitHelper`. For example, a font-weight value is
|
|
109
|
+
* `hardenInteger({ min: 1, max: 1000 })`.
|
|
110
|
+
*/
|
|
111
|
+
const hardenInteger = (constraints = {}) => (value, context) => new IntegerImpl(value, { ...constraints, context });
|
|
112
|
+
exports.hardenInteger = hardenInteger;
|
|
113
|
+
const isInteger = (value) => value instanceof IntegerImpl;
|
|
114
|
+
exports.isInteger = isInteger;
|
|
@@ -12,35 +12,11 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
|
|
|
12
12
|
};
|
|
13
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
14
|
exports.createCoreApi = void 0;
|
|
15
|
+
const scalar_1 = require("../scalar");
|
|
15
16
|
const unitDefinitions_1 = require("../unitDefinitions");
|
|
16
17
|
const buildMeasurementCreationError_1 = require("./buildMeasurementCreationError");
|
|
17
18
|
const errors_1 = require("./errors");
|
|
18
|
-
|
|
19
|
-
// < 1e-6 (e.g. "1e+21", "1e-7"). CSS output must never contain that, so we
|
|
20
|
-
// expand the exponent into a plain decimal by shifting the decimal point on the
|
|
21
|
-
// digit string. This is string manipulation on the same digits, so it does not
|
|
22
|
-
// re-introduce floating-point error.
|
|
23
|
-
const toPlainDecimal = (value) => {
|
|
24
|
-
const text = `${value}`;
|
|
25
|
-
if (!text.includes('e') && !text.includes('E')) {
|
|
26
|
-
return text;
|
|
27
|
-
}
|
|
28
|
-
const [mantissa, exponentText] = text.toLowerCase().split('e');
|
|
29
|
-
const exponent = Number(exponentText);
|
|
30
|
-
const negative = mantissa.startsWith('-');
|
|
31
|
-
const unsigned = negative ? mantissa.slice(1) : mantissa;
|
|
32
|
-
const [intDigits, fracDigits = ''] = unsigned.split('.');
|
|
33
|
-
const digits = intDigits + fracDigits;
|
|
34
|
-
const pointFromLeft = intDigits.length + exponent;
|
|
35
|
-
const sign = negative ? '-' : '';
|
|
36
|
-
if (pointFromLeft <= 0) {
|
|
37
|
-
return `${sign}0.${'0'.repeat(-pointFromLeft)}${digits}`;
|
|
38
|
-
}
|
|
39
|
-
if (pointFromLeft >= digits.length) {
|
|
40
|
-
return `${sign}${digits}${'0'.repeat(pointFromLeft - digits.length)}`;
|
|
41
|
-
}
|
|
42
|
-
return `${sign}${digits.slice(0, pointFromLeft)}.${digits.slice(pointFromLeft)}`;
|
|
43
|
-
};
|
|
19
|
+
const toPlainDecimal_1 = require("./toPlainDecimal");
|
|
44
20
|
const createCoreApi = (errorStore) => {
|
|
45
21
|
var _Measurement_instances, _a, _Measurement_value, _Measurement_unit, _Measurement_clone;
|
|
46
22
|
const { throwHelperError, throwMeasurementMethodError } = (0, errors_1.createErrorHelpers)(errorStore);
|
|
@@ -50,7 +26,10 @@ const createCoreApi = (errorStore) => {
|
|
|
50
26
|
if (leftUnit !== rightUnit) {
|
|
51
27
|
throwHelperError({
|
|
52
28
|
operation: 'css-calipers.assertMatchingUnits',
|
|
53
|
-
params: [
|
|
29
|
+
params: [
|
|
30
|
+
left,
|
|
31
|
+
right,
|
|
32
|
+
],
|
|
54
33
|
message: `measurement unit mismatch: ${leftUnit} vs ${rightUnit}`,
|
|
55
34
|
context,
|
|
56
35
|
details: { code: 'CALIPERS_E_UNIT_MISMATCH' },
|
|
@@ -80,7 +59,7 @@ const createCoreApi = (errorStore) => {
|
|
|
80
59
|
__classPrivateFieldSet(this, _Measurement_unit, unit.toLowerCase(), "f");
|
|
81
60
|
}
|
|
82
61
|
css() {
|
|
83
|
-
return `${toPlainDecimal(__classPrivateFieldGet(this, _Measurement_value, "f"))}${__classPrivateFieldGet(this, _Measurement_unit, "f")}`;
|
|
62
|
+
return `${(0, toPlainDecimal_1.toPlainDecimal)(__classPrivateFieldGet(this, _Measurement_value, "f"))}${__classPrivateFieldGet(this, _Measurement_unit, "f")}`;
|
|
84
63
|
}
|
|
85
64
|
toString() {
|
|
86
65
|
return this.css();
|
|
@@ -156,18 +135,20 @@ const createCoreApi = (errorStore) => {
|
|
|
156
135
|
return __classPrivateFieldGet(this, _Measurement_instances, "m", _Measurement_clone).call(this, next);
|
|
157
136
|
}
|
|
158
137
|
multiply(factor) {
|
|
159
|
-
|
|
138
|
+
const numericFactor = (0, scalar_1.toNumber)(factor);
|
|
139
|
+
if (numericFactor === 1)
|
|
160
140
|
return this;
|
|
161
|
-
if (
|
|
141
|
+
if (numericFactor === 0)
|
|
162
142
|
return new _a(0, __classPrivateFieldGet(this, _Measurement_unit, "f"));
|
|
163
|
-
if (
|
|
143
|
+
if (numericFactor === -1)
|
|
164
144
|
return new _a(-__classPrivateFieldGet(this, _Measurement_value, "f"), __classPrivateFieldGet(this, _Measurement_unit, "f"));
|
|
165
|
-
return __classPrivateFieldGet(this, _Measurement_instances, "m", _Measurement_clone).call(this, __classPrivateFieldGet(this, _Measurement_value, "f") *
|
|
145
|
+
return __classPrivateFieldGet(this, _Measurement_instances, "m", _Measurement_clone).call(this, __classPrivateFieldGet(this, _Measurement_value, "f") * numericFactor);
|
|
166
146
|
}
|
|
167
147
|
divide(divisor) {
|
|
168
|
-
|
|
148
|
+
const numericDivisor = (0, scalar_1.toNumber)(divisor);
|
|
149
|
+
if (numericDivisor === 1)
|
|
169
150
|
return this;
|
|
170
|
-
if (
|
|
151
|
+
if (numericDivisor === 0) {
|
|
171
152
|
throwMeasurementMethodError({
|
|
172
153
|
operation: 'css-calipers.Measurement.divide',
|
|
173
154
|
caller: this,
|
|
@@ -176,7 +157,7 @@ const createCoreApi = (errorStore) => {
|
|
|
176
157
|
details: { code: 'CALIPERS_E_DIVIDE_BY_ZERO' },
|
|
177
158
|
});
|
|
178
159
|
}
|
|
179
|
-
const result = __classPrivateFieldGet(this, _Measurement_value, "f") /
|
|
160
|
+
const result = __classPrivateFieldGet(this, _Measurement_value, "f") / numericDivisor;
|
|
180
161
|
if (!Number.isFinite(result)) {
|
|
181
162
|
throwMeasurementMethodError({
|
|
182
163
|
operation: 'css-calipers.Measurement.divide',
|
|
@@ -198,6 +179,8 @@ const createCoreApi = (errorStore) => {
|
|
|
198
179
|
return shouldNegate ? __classPrivateFieldGet(this, _Measurement_instances, "m", _Measurement_clone).call(this, -__classPrivateFieldGet(this, _Measurement_value, "f")) : this;
|
|
199
180
|
}
|
|
200
181
|
absolute() {
|
|
182
|
+
// Math.abs is always >= 0, so the result is hardened to NonNegativeMeasurement
|
|
183
|
+
// (the governing rule: a runtime restriction must also harden the type).
|
|
201
184
|
return __classPrivateFieldGet(this, _Measurement_instances, "m", _Measurement_clone).call(this, Math.abs(__classPrivateFieldGet(this, _Measurement_value, "f")));
|
|
202
185
|
}
|
|
203
186
|
round(precision = 0) {
|
|
@@ -221,7 +204,10 @@ const createCoreApi = (errorStore) => {
|
|
|
221
204
|
throwMeasurementMethodError({
|
|
222
205
|
operation: 'css-calipers.Measurement.clamp',
|
|
223
206
|
caller: this,
|
|
224
|
-
params: [
|
|
207
|
+
params: [
|
|
208
|
+
min,
|
|
209
|
+
max,
|
|
210
|
+
],
|
|
225
211
|
message: 'clamp: expected finite bounds',
|
|
226
212
|
details: { code: 'CALIPERS_E_CLAMP_NONFINITE_BOUNDS' },
|
|
227
213
|
});
|
|
@@ -230,7 +216,10 @@ const createCoreApi = (errorStore) => {
|
|
|
230
216
|
throwMeasurementMethodError({
|
|
231
217
|
operation: 'css-calipers.Measurement.clamp',
|
|
232
218
|
caller: this,
|
|
233
|
-
params: [
|
|
219
|
+
params: [
|
|
220
|
+
min,
|
|
221
|
+
max,
|
|
222
|
+
],
|
|
234
223
|
message: `clamp: min (${min.css()}) must be <= max (${max.css()})`,
|
|
235
224
|
details: { code: 'CALIPERS_E_CLAMP_INVALID_RANGE' },
|
|
236
225
|
});
|
|
@@ -302,7 +291,11 @@ const createCoreApi = (errorStore) => {
|
|
|
302
291
|
if (!guard(value)) {
|
|
303
292
|
throwHelperError({
|
|
304
293
|
operation: 'css-calipers.makeUnitAssert',
|
|
305
|
-
params: isMeasurement(value)
|
|
294
|
+
params: isMeasurement(value)
|
|
295
|
+
? [
|
|
296
|
+
value,
|
|
297
|
+
]
|
|
298
|
+
: [],
|
|
306
299
|
message: `Expected unit "${helper.unit}".`,
|
|
307
300
|
context,
|
|
308
301
|
details: { code: 'CALIPERS_E_ASSERT_UNIT' },
|
|
@@ -336,6 +329,74 @@ const createCoreApi = (errorStore) => {
|
|
|
336
329
|
});
|
|
337
330
|
}
|
|
338
331
|
};
|
|
332
|
+
// Value-constraint refinements. One factory builds the quartet (is / ensure / check /
|
|
333
|
+
// hardenWith) from a numeric predicate and narrows to a constraint brand. The brand is
|
|
334
|
+
// additive over `IMeasurement` and is dropped by arithmetic (which can cross a bound),
|
|
335
|
+
// so a derived result must be re-checked. `nonNegative` / `nonPositive` / `inRange(...)`
|
|
336
|
+
// are the built-ins.
|
|
337
|
+
const makeMeasurementRefinement = (spec) => {
|
|
338
|
+
const is = (measurement) => spec.predicate(measurement.getValue());
|
|
339
|
+
const ensure = (measurement, context) => {
|
|
340
|
+
if (!is(measurement)) {
|
|
341
|
+
throwHelperError({
|
|
342
|
+
operation: 'css-calipers.refinement.ensure',
|
|
343
|
+
params: [
|
|
344
|
+
measurement,
|
|
345
|
+
],
|
|
346
|
+
message: spec.message(measurement),
|
|
347
|
+
context,
|
|
348
|
+
details: { code: 'CALIPERS_E_CONSTRAINT' },
|
|
349
|
+
});
|
|
350
|
+
}
|
|
351
|
+
// A negated generic type-guard does not narrow the fall-through to `M & B`, so the
|
|
352
|
+
// brand cast is necessary here (the runtime check above guarantees it holds).
|
|
353
|
+
return measurement;
|
|
354
|
+
};
|
|
355
|
+
const check = (measurement) => is(measurement)
|
|
356
|
+
? { ok: true, value: measurement }
|
|
357
|
+
: {
|
|
358
|
+
ok: false,
|
|
359
|
+
value: measurement,
|
|
360
|
+
error: spec.message(measurement),
|
|
361
|
+
};
|
|
362
|
+
const hardenWith = (measurement, fallback) => {
|
|
363
|
+
if (is(measurement))
|
|
364
|
+
return measurement;
|
|
365
|
+
if (fallback !== undefined)
|
|
366
|
+
return fallback;
|
|
367
|
+
const { defaultFallback } = spec;
|
|
368
|
+
if (defaultFallback !== undefined) {
|
|
369
|
+
return createMeasurement(defaultFallback, measurement.getUnit());
|
|
370
|
+
}
|
|
371
|
+
return throwHelperError({
|
|
372
|
+
operation: 'css-calipers.refinement.hardenWith',
|
|
373
|
+
params: [
|
|
374
|
+
measurement,
|
|
375
|
+
],
|
|
376
|
+
message: 'no fallback provided and this refinement has no default fallback',
|
|
377
|
+
details: { code: 'CALIPERS_E_CONSTRAINT' },
|
|
378
|
+
});
|
|
379
|
+
};
|
|
380
|
+
return { is, ensure, check, hardenWith };
|
|
381
|
+
};
|
|
382
|
+
const nonNegative = makeMeasurementRefinement({
|
|
383
|
+
predicate: (value) => value >= 0,
|
|
384
|
+
message: (measurement) => `expected a measurement >= 0 (got ${measurement.css()})`,
|
|
385
|
+
defaultFallback: 0,
|
|
386
|
+
});
|
|
387
|
+
const nonPositive = makeMeasurementRefinement({
|
|
388
|
+
predicate: (value) => value <= 0,
|
|
389
|
+
message: (measurement) => `expected a measurement <= 0 (got ${measurement.css()})`,
|
|
390
|
+
defaultFallback: 0,
|
|
391
|
+
});
|
|
392
|
+
const inRange = (min, max) => {
|
|
393
|
+
assertCondition(min <= max, `inRange: min (${min}) must be <= max (${max})`);
|
|
394
|
+
return makeMeasurementRefinement({
|
|
395
|
+
predicate: (value) => value >= min && value <= max,
|
|
396
|
+
message: (measurement) => `expected a measurement in [${min}, ${max}] (got ${measurement.css()})`,
|
|
397
|
+
defaultFallback: min,
|
|
398
|
+
});
|
|
399
|
+
};
|
|
339
400
|
return {
|
|
340
401
|
m,
|
|
341
402
|
isMeasurement,
|
|
@@ -350,6 +411,10 @@ const createCoreApi = (errorStore) => {
|
|
|
350
411
|
hasCssMethod,
|
|
351
412
|
assertUnit,
|
|
352
413
|
assertCondition,
|
|
414
|
+
makeMeasurementRefinement,
|
|
415
|
+
nonNegative,
|
|
416
|
+
nonPositive,
|
|
417
|
+
inRange,
|
|
353
418
|
getErrorConfig: errorStore.getErrorConfig,
|
|
354
419
|
setErrorConfig: errorStore.setErrorConfig,
|
|
355
420
|
};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.throwHelperError = exports.throwMeasurementMethodError = exports.createErrorHelpers = exports.getErrorConfig = exports.setErrorConfig = exports.createErrorConfigStore = void 0;
|
|
4
4
|
const DEFAULT_ERROR_CONFIG = {
|
|
5
|
-
stackHints:
|
|
5
|
+
stackHints: 'auto',
|
|
6
6
|
};
|
|
7
7
|
let errorConfig = { ...DEFAULT_ERROR_CONFIG };
|
|
8
8
|
const createErrorConfigStore = (initial = {}) => {
|
|
@@ -51,18 +51,17 @@ const createErrorHelpers = (store) => {
|
|
|
51
51
|
exports.createErrorHelpers = createErrorHelpers;
|
|
52
52
|
const isProductionEnv = () => {
|
|
53
53
|
var _a;
|
|
54
|
-
if (typeof globalThis ===
|
|
54
|
+
if (typeof globalThis === 'undefined')
|
|
55
55
|
return false;
|
|
56
|
-
const maybeProcess = globalThis
|
|
57
|
-
|
|
58
|
-
return ((_a = maybeProcess === null || maybeProcess === void 0 ? void 0 : maybeProcess.env) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === "production";
|
|
56
|
+
const maybeProcess = globalThis.process;
|
|
57
|
+
return ((_a = maybeProcess === null || maybeProcess === void 0 ? void 0 : maybeProcess.env) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === 'production';
|
|
59
58
|
};
|
|
60
59
|
const shouldIncludeStackHint = (override, config = errorConfig) => {
|
|
61
60
|
if (override === false)
|
|
62
61
|
return false;
|
|
63
|
-
if (config.stackHints ===
|
|
62
|
+
if (config.stackHints === 'off')
|
|
64
63
|
return false;
|
|
65
|
-
if (config.stackHints ===
|
|
64
|
+
if (config.stackHints === 'on')
|
|
66
65
|
return true;
|
|
67
66
|
if (override === true)
|
|
68
67
|
return !isProductionEnv();
|
|
@@ -70,7 +69,7 @@ const shouldIncludeStackHint = (override, config = errorConfig) => {
|
|
|
70
69
|
};
|
|
71
70
|
const formatDetailBlock = (details) => {
|
|
72
71
|
if (!details)
|
|
73
|
-
return
|
|
72
|
+
return '';
|
|
74
73
|
const parts = [];
|
|
75
74
|
if (details.code)
|
|
76
75
|
parts.push(`code=${details.code}`);
|
|
@@ -80,7 +79,7 @@ const formatDetailBlock = (details) => {
|
|
|
80
79
|
parts.push(`inputs=${details.inputSummary}`);
|
|
81
80
|
if (details.stackHint)
|
|
82
81
|
parts.push(`stack=${details.stackHint}`);
|
|
83
|
-
return parts.length > 0 ? ` [${parts.join(
|
|
82
|
+
return parts.length > 0 ? ` [${parts.join(' | ')}]` : '';
|
|
84
83
|
};
|
|
85
84
|
const formatErrorMessage = (operation, message, context, details) => {
|
|
86
85
|
const core = `${operation}: ${message}`;
|
|
@@ -92,17 +91,17 @@ const extractStackHint = (stack) => {
|
|
|
92
91
|
if (!stack)
|
|
93
92
|
return undefined;
|
|
94
93
|
const lines = stack
|
|
95
|
-
.split(
|
|
94
|
+
.split('\n')
|
|
96
95
|
.map((line) => line.trim())
|
|
97
96
|
.filter(Boolean)
|
|
98
97
|
.slice(1);
|
|
99
98
|
if (lines.length === 0)
|
|
100
99
|
return undefined;
|
|
101
|
-
const filtered = lines.filter((line) => !line.includes(
|
|
102
|
-
!line.includes(
|
|
103
|
-
!line.includes(
|
|
100
|
+
const filtered = lines.filter((line) => !line.includes('/src/internal/errors') &&
|
|
101
|
+
!line.includes('throwHelperError') &&
|
|
102
|
+
!line.includes('throwMeasurementMethodError'));
|
|
104
103
|
const hint = (_a = filtered[0]) !== null && _a !== void 0 ? _a : lines[0];
|
|
105
|
-
return hint.replace(/^at\s+/,
|
|
104
|
+
return hint.replace(/^at\s+/, '');
|
|
106
105
|
};
|
|
107
106
|
/** Throw an Error for a Measurement instance method using a structured context. */
|
|
108
107
|
const throwMeasurementMethodError = (ctx) => {
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toPlainDecimal = void 0;
|
|
4
|
+
// JS stringifies numbers in exponential form once the magnitude is >= 1e21 or
|
|
5
|
+
// < 1e-6 (e.g. "1e+21", "1e-7"). CSS output must never contain that, so we
|
|
6
|
+
// expand the exponent into a plain decimal by shifting the decimal point on the
|
|
7
|
+
// digit string. This is string manipulation on the same digits, so it does not
|
|
8
|
+
// re-introduce floating-point error. Shared by the measurement core and the
|
|
9
|
+
// scalar (float / integer) primitives so every `.css()` renders the same way.
|
|
10
|
+
const toPlainDecimal = (value) => {
|
|
11
|
+
const text = `${value}`;
|
|
12
|
+
if (!text.includes('e') && !text.includes('E')) {
|
|
13
|
+
return text;
|
|
14
|
+
}
|
|
15
|
+
const [mantissa, exponentText,] = text.toLowerCase().split('e');
|
|
16
|
+
const exponent = Number(exponentText);
|
|
17
|
+
const negative = mantissa.startsWith('-');
|
|
18
|
+
const unsigned = negative ? mantissa.slice(1) : mantissa;
|
|
19
|
+
const [intDigits, fracDigits = '',] = unsigned.split('.');
|
|
20
|
+
const digits = intDigits + fracDigits;
|
|
21
|
+
const pointFromLeft = intDigits.length + exponent;
|
|
22
|
+
const sign = negative ? '-' : '';
|
|
23
|
+
if (pointFromLeft <= 0) {
|
|
24
|
+
return `${sign}0.${'0'.repeat(-pointFromLeft)}${digits}`;
|
|
25
|
+
}
|
|
26
|
+
if (pointFromLeft >= digits.length) {
|
|
27
|
+
return `${sign}${digits}${'0'.repeat(pointFromLeft - digits.length)}`;
|
|
28
|
+
}
|
|
29
|
+
return `${sign}${digits.slice(0, pointFromLeft)}.${digits.slice(pointFromLeft)}`;
|
|
30
|
+
};
|
|
31
|
+
exports.toPlainDecimal = toPlainDecimal;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
// The COLOUR-FREE measurement surface. This barrel re-exports everything the
|
|
18
|
+
// root entry does EXCEPT the colour value primitive, so a consumer who imports
|
|
19
|
+
// `@css-bookends/css-calipers/measurements` gets `m()` / `r()` / `i()` / `f()`,
|
|
20
|
+
// the refinements, and the unit helpers, with NO transitive dependency on
|
|
21
|
+
// `./color` (and therefore no `culori` in the graph).
|
|
22
|
+
//
|
|
23
|
+
// MUST NOT import `./color` (directly or transitively). The colour surface lives
|
|
24
|
+
// at the `./color` subpath and is opt-in only.
|
|
25
|
+
__exportStar(require("./core"), exports);
|
|
26
|
+
// The bare default-instance helpers (`m`, refinements, unit-helper builders,
|
|
27
|
+
// error-config accessors) assembled via `createCalipers()` at its defaults.
|
|
28
|
+
__exportStar(require("./default"), exports);
|
|
29
|
+
__exportStar(require("./units/absolute"), exports);
|
|
30
|
+
__exportStar(require("./units/angle"), exports);
|
|
31
|
+
__exportStar(require("./units/container"), exports);
|
|
32
|
+
__exportStar(require("./units/font-relative"), exports);
|
|
33
|
+
__exportStar(require("./units/frequency"), exports);
|
|
34
|
+
__exportStar(require("./units/grid"), exports);
|
|
35
|
+
__exportStar(require("./units/percent"), exports);
|
|
36
|
+
__exportStar(require("./units/resolution"), exports);
|
|
37
|
+
__exportStar(require("./units/time"), exports);
|
|
38
|
+
__exportStar(require("./units/viewport"), exports);
|
|
39
|
+
__exportStar(require("./units/viewport-dynamic"), exports);
|
|
40
|
+
__exportStar(require("./units/viewport-large"), exports);
|
|
41
|
+
__exportStar(require("./units/viewport-small"), exports);
|