css-calipers 1.0.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.
Files changed (207) hide show
  1. package/LICENSE.txt +1 -1
  2. package/README.md +70 -424
  3. package/dist/cjs/color/formats/display-p3/display-p3.js +25 -0
  4. package/dist/cjs/color/formats/escalate.js +41 -0
  5. package/dist/cjs/color/formats/hex/hex.js +28 -0
  6. package/dist/cjs/color/formats/hexAlpha/hexAlpha.js +25 -0
  7. package/dist/cjs/color/formats/hsl/hsl.js +23 -0
  8. package/dist/cjs/color/formats/hwb/hwb.js +24 -0
  9. package/dist/cjs/color/formats/index.js +36 -0
  10. package/dist/cjs/color/formats/internals.js +93 -0
  11. package/dist/cjs/color/formats/lab/lab.js +24 -0
  12. package/dist/cjs/color/formats/lch/lch.js +23 -0
  13. package/dist/cjs/color/formats/oklab/oklab.js +24 -0
  14. package/dist/cjs/color/formats/oklch/oklch.js +28 -0
  15. package/dist/cjs/color/formats/resolve.js +16 -0
  16. package/dist/cjs/color/formats/rgb/rgb.js +29 -0
  17. package/dist/cjs/color/formats/rgba/rgba.js +27 -0
  18. package/dist/cjs/color/formats/types.js +11 -0
  19. package/dist/cjs/color/index.js +619 -0
  20. package/dist/cjs/color/types.js +2 -0
  21. package/dist/cjs/core.js +11 -8
  22. package/dist/cjs/corpus.js +53 -0
  23. package/dist/cjs/css-values/cssValues.js +78 -0
  24. package/dist/cjs/css-values/index.js +36 -0
  25. package/dist/cjs/css-values/multi.js +290 -0
  26. package/dist/cjs/css-values/propertyMap.js +2 -0
  27. package/dist/cjs/css-values/spec.js +197 -0
  28. package/dist/cjs/default.js +17 -0
  29. package/dist/cjs/factory.js +1 -1
  30. package/dist/cjs/float.js +110 -0
  31. package/dist/cjs/index.js +29 -9
  32. package/dist/cjs/integer.js +114 -0
  33. package/dist/cjs/internal/createCoreApi.js +103 -38
  34. package/dist/cjs/internal/errors.js +13 -14
  35. package/dist/cjs/internal/toPlainDecimal.js +31 -0
  36. package/dist/cjs/measurements.js +41 -0
  37. package/dist/cjs/ratio.js +57 -22
  38. package/dist/cjs/scalar.js +9 -0
  39. package/dist/cjs/units/absolute.js +8 -8
  40. package/dist/cjs/units/angle.js +5 -5
  41. package/dist/cjs/units/container.js +7 -7
  42. package/dist/cjs/units/font-relative.js +13 -13
  43. package/dist/cjs/units/frequency.js +3 -3
  44. package/dist/cjs/units/grid.js +2 -2
  45. package/dist/cjs/units/index.js +9 -9
  46. package/dist/cjs/units/percent.js +4 -4
  47. package/dist/cjs/units/resolution.js +4 -4
  48. package/dist/cjs/units/time.js +3 -3
  49. package/dist/cjs/units/viewport-dynamic.js +7 -7
  50. package/dist/cjs/units/viewport-large.js +7 -7
  51. package/dist/cjs/units/viewport-small.js +7 -7
  52. package/dist/cjs/units/viewport.js +7 -7
  53. package/dist/esm/color/formats/display-p3/display-p3.d.ts +10 -0
  54. package/dist/esm/color/formats/display-p3/display-p3.d.ts.map +1 -0
  55. package/dist/esm/color/formats/display-p3/display-p3.js +22 -0
  56. package/dist/esm/color/formats/escalate.d.ts +10 -0
  57. package/dist/esm/color/formats/escalate.d.ts.map +1 -0
  58. package/dist/esm/color/formats/escalate.js +37 -0
  59. package/dist/esm/color/formats/hex/hex.d.ts +9 -0
  60. package/dist/esm/color/formats/hex/hex.d.ts.map +1 -0
  61. package/dist/esm/color/formats/hex/hex.js +25 -0
  62. package/dist/esm/color/formats/hexAlpha/hexAlpha.d.ts +9 -0
  63. package/dist/esm/color/formats/hexAlpha/hexAlpha.d.ts.map +1 -0
  64. package/dist/esm/color/formats/hexAlpha/hexAlpha.js +22 -0
  65. package/dist/esm/color/formats/hsl/hsl.d.ts +8 -0
  66. package/dist/esm/color/formats/hsl/hsl.d.ts.map +1 -0
  67. package/dist/esm/color/formats/hsl/hsl.js +20 -0
  68. package/dist/esm/color/formats/hwb/hwb.d.ts +9 -0
  69. package/dist/esm/color/formats/hwb/hwb.d.ts.map +1 -0
  70. package/dist/esm/color/formats/hwb/hwb.js +21 -0
  71. package/dist/esm/color/formats/index.d.ts +24 -0
  72. package/dist/esm/color/formats/index.d.ts.map +1 -0
  73. package/dist/esm/color/formats/index.js +32 -0
  74. package/dist/esm/color/formats/internals.d.ts +35 -0
  75. package/dist/esm/color/formats/internals.d.ts.map +1 -0
  76. package/dist/esm/color/formats/internals.js +78 -0
  77. package/dist/esm/color/formats/lab/lab.d.ts +9 -0
  78. package/dist/esm/color/formats/lab/lab.d.ts.map +1 -0
  79. package/dist/esm/color/formats/lab/lab.js +21 -0
  80. package/dist/esm/color/formats/lch/lch.d.ts +8 -0
  81. package/dist/esm/color/formats/lch/lch.d.ts.map +1 -0
  82. package/dist/esm/color/formats/lch/lch.js +20 -0
  83. package/dist/esm/color/formats/oklab/oklab.d.ts +9 -0
  84. package/dist/esm/color/formats/oklab/oklab.d.ts.map +1 -0
  85. package/dist/esm/color/formats/oklab/oklab.js +21 -0
  86. package/dist/esm/color/formats/oklch/oklch.d.ts +13 -0
  87. package/dist/esm/color/formats/oklch/oklch.d.ts.map +1 -0
  88. package/dist/esm/color/formats/oklch/oklch.js +25 -0
  89. package/dist/esm/color/formats/resolve.d.ts +15 -0
  90. package/dist/esm/color/formats/resolve.d.ts.map +1 -0
  91. package/dist/esm/color/formats/resolve.js +12 -0
  92. package/dist/esm/color/formats/rgb/rgb.d.ts +11 -0
  93. package/dist/esm/color/formats/rgb/rgb.d.ts.map +1 -0
  94. package/dist/esm/color/formats/rgb/rgb.js +26 -0
  95. package/dist/esm/color/formats/rgba/rgba.d.ts +9 -0
  96. package/dist/esm/color/formats/rgba/rgba.d.ts.map +1 -0
  97. package/dist/esm/color/formats/rgba/rgba.js +24 -0
  98. package/dist/esm/color/formats/types.d.ts +48 -0
  99. package/dist/esm/color/formats/types.d.ts.map +1 -0
  100. package/dist/esm/color/formats/types.js +7 -0
  101. package/dist/esm/color/index.d.ts +81 -0
  102. package/dist/esm/color/index.d.ts.map +1 -0
  103. package/dist/esm/color/index.js +609 -0
  104. package/dist/esm/color/types.d.ts +294 -0
  105. package/dist/esm/color/types.d.ts.map +1 -0
  106. package/dist/esm/color/types.js +1 -0
  107. package/dist/esm/core.d.ts +76 -270
  108. package/dist/esm/core.d.ts.map +1 -1
  109. package/dist/esm/core.js +5 -7
  110. package/dist/esm/corpus.d.ts +26 -0
  111. package/dist/esm/corpus.d.ts.map +1 -0
  112. package/dist/esm/corpus.js +37 -0
  113. package/dist/esm/css-values/cssValues.d.ts +60 -0
  114. package/dist/esm/css-values/cssValues.d.ts.map +1 -0
  115. package/dist/esm/css-values/cssValues.js +74 -0
  116. package/dist/esm/css-values/index.d.ts +6 -0
  117. package/dist/esm/css-values/index.d.ts.map +1 -0
  118. package/dist/esm/css-values/index.js +12 -0
  119. package/dist/esm/css-values/multi.d.ts +188 -0
  120. package/dist/esm/css-values/multi.d.ts.map +1 -0
  121. package/dist/esm/css-values/multi.js +281 -0
  122. package/dist/esm/css-values/propertyMap.d.ts +39 -0
  123. package/dist/esm/css-values/propertyMap.d.ts.map +1 -0
  124. package/dist/esm/css-values/propertyMap.js +1 -0
  125. package/dist/esm/css-values/spec.d.ts +36 -0
  126. package/dist/esm/css-values/spec.d.ts.map +1 -0
  127. package/dist/esm/css-values/spec.js +194 -0
  128. package/dist/esm/default.d.ts +267 -0
  129. package/dist/esm/default.d.ts.map +1 -0
  130. package/dist/esm/default.js +14 -0
  131. package/dist/esm/factory.d.ts +1 -1
  132. package/dist/esm/factory.d.ts.map +1 -1
  133. package/dist/esm/factory.js +3 -3
  134. package/dist/esm/float.d.ts +35 -0
  135. package/dist/esm/float.d.ts.map +1 -0
  136. package/dist/esm/float.js +104 -0
  137. package/dist/esm/index.d.ts +11 -9
  138. package/dist/esm/index.d.ts.map +1 -1
  139. package/dist/esm/index.js +19 -9
  140. package/dist/esm/integer.d.ts +36 -0
  141. package/dist/esm/integer.d.ts.map +1 -0
  142. package/dist/esm/integer.js +108 -0
  143. package/dist/esm/internal/buildMeasurementCreationError.tests.d.ts +1 -1
  144. package/dist/esm/internal/buildMeasurementCreationError.tests.d.ts.map +1 -1
  145. package/dist/esm/internal/createCoreApi.d.ts +9 -1
  146. package/dist/esm/internal/createCoreApi.d.ts.map +1 -1
  147. package/dist/esm/internal/createCoreApi.js +103 -38
  148. package/dist/esm/internal/createUnitsApi.d.ts +1 -1
  149. package/dist/esm/internal/createUnitsApi.d.ts.map +1 -1
  150. package/dist/esm/internal/errors.d.ts +3 -3
  151. package/dist/esm/internal/errors.d.ts.map +1 -1
  152. package/dist/esm/internal/errors.js +13 -14
  153. package/dist/esm/internal/toPlainDecimal.d.ts +2 -0
  154. package/dist/esm/internal/toPlainDecimal.d.ts.map +1 -0
  155. package/dist/esm/internal/toPlainDecimal.js +27 -0
  156. package/dist/esm/measurements.d.ts +16 -0
  157. package/dist/esm/measurements.d.ts.map +1 -0
  158. package/dist/esm/measurements.js +25 -0
  159. package/dist/esm/ratio.d.ts +14 -5
  160. package/dist/esm/ratio.d.ts.map +1 -1
  161. package/dist/esm/ratio.js +57 -22
  162. package/dist/esm/scalar.d.ts +14 -0
  163. package/dist/esm/scalar.d.ts.map +1 -0
  164. package/dist/esm/scalar.js +5 -0
  165. package/dist/esm/units/absolute.d.ts +1 -1
  166. package/dist/esm/units/absolute.d.ts.map +1 -1
  167. package/dist/esm/units/absolute.js +1 -1
  168. package/dist/esm/units/angle.d.ts +1 -1
  169. package/dist/esm/units/angle.d.ts.map +1 -1
  170. package/dist/esm/units/angle.js +1 -1
  171. package/dist/esm/units/container.d.ts +1 -1
  172. package/dist/esm/units/container.d.ts.map +1 -1
  173. package/dist/esm/units/container.js +1 -1
  174. package/dist/esm/units/font-relative.d.ts +1 -1
  175. package/dist/esm/units/font-relative.d.ts.map +1 -1
  176. package/dist/esm/units/font-relative.js +1 -1
  177. package/dist/esm/units/frequency.d.ts +1 -1
  178. package/dist/esm/units/frequency.d.ts.map +1 -1
  179. package/dist/esm/units/frequency.js +1 -1
  180. package/dist/esm/units/grid.d.ts +1 -1
  181. package/dist/esm/units/grid.d.ts.map +1 -1
  182. package/dist/esm/units/grid.js +1 -1
  183. package/dist/esm/units/index.d.ts +9 -9
  184. package/dist/esm/units/index.d.ts.map +1 -1
  185. package/dist/esm/units/index.js +9 -9
  186. package/dist/esm/units/percent.d.ts +1 -1
  187. package/dist/esm/units/percent.d.ts.map +1 -1
  188. package/dist/esm/units/percent.js +1 -1
  189. package/dist/esm/units/resolution.d.ts +1 -1
  190. package/dist/esm/units/resolution.d.ts.map +1 -1
  191. package/dist/esm/units/resolution.js +1 -1
  192. package/dist/esm/units/time.d.ts +1 -1
  193. package/dist/esm/units/time.d.ts.map +1 -1
  194. package/dist/esm/units/time.js +1 -1
  195. package/dist/esm/units/viewport-dynamic.d.ts +1 -1
  196. package/dist/esm/units/viewport-dynamic.d.ts.map +1 -1
  197. package/dist/esm/units/viewport-dynamic.js +1 -1
  198. package/dist/esm/units/viewport-large.d.ts +1 -1
  199. package/dist/esm/units/viewport-large.d.ts.map +1 -1
  200. package/dist/esm/units/viewport-large.js +1 -1
  201. package/dist/esm/units/viewport-small.d.ts +1 -1
  202. package/dist/esm/units/viewport-small.d.ts.map +1 -1
  203. package/dist/esm/units/viewport-small.js +1 -1
  204. package/dist/esm/units/viewport.d.ts +1 -1
  205. package/dist/esm/units/viewport.d.ts.map +1 -1
  206. package/dist/esm/units/viewport.js +1 -1
  207. package/package.json +54 -12
@@ -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
- __exportStar(require("./units/percent"), exports);
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/time"), exports);
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
- // JS stringifies numbers in exponential form once the magnitude is >= 1e21 or
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: [left, right],
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
- if (factor === 1)
138
+ const numericFactor = (0, scalar_1.toNumber)(factor);
139
+ if (numericFactor === 1)
160
140
  return this;
161
- if (factor === 0)
141
+ if (numericFactor === 0)
162
142
  return new _a(0, __classPrivateFieldGet(this, _Measurement_unit, "f"));
163
- if (factor === -1)
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") * factor);
145
+ return __classPrivateFieldGet(this, _Measurement_instances, "m", _Measurement_clone).call(this, __classPrivateFieldGet(this, _Measurement_value, "f") * numericFactor);
166
146
  }
167
147
  divide(divisor) {
168
- if (divisor === 1)
148
+ const numericDivisor = (0, scalar_1.toNumber)(divisor);
149
+ if (numericDivisor === 1)
169
150
  return this;
170
- if (divisor === 0) {
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") / divisor;
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: [min, max],
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: [min, max],
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) ? [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: "auto",
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 === "undefined")
54
+ if (typeof globalThis === 'undefined')
55
55
  return false;
56
- const maybeProcess = globalThis
57
- .process;
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 === "off")
62
+ if (config.stackHints === 'off')
64
63
  return false;
65
- if (config.stackHints === "on")
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("\n")
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("/src/internal/errors") &&
102
- !line.includes("throwHelperError") &&
103
- !line.includes("throwMeasurementMethodError"));
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);