css-calipers 0.9.3 → 0.9.5

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 (259) hide show
  1. package/README.md +100 -0
  2. package/dist/cjs/comparisons/index.js +25 -0
  3. package/dist/cjs/containerQueries/containerQueries.js +115 -0
  4. package/dist/cjs/containerQueries/factory.js +123 -0
  5. package/dist/cjs/containerQueries/helpers.js +95 -0
  6. package/dist/cjs/containerQueries/index.js +16 -0
  7. package/dist/cjs/containerQueries/linting/aspectRatio.js +24 -0
  8. package/dist/cjs/containerQueries/linting/block.js +23 -0
  9. package/dist/cjs/containerQueries/linting/core.js +25 -0
  10. package/dist/cjs/containerQueries/linting/custom.js +11 -0
  11. package/dist/cjs/containerQueries/linting/inline.js +23 -0
  12. package/dist/cjs/containerQueries/linting/resolution.js +12 -0
  13. package/dist/cjs/containerQueries/linting/style.js +28 -0
  14. package/dist/cjs/containerQueries/linting.js +24 -0
  15. package/dist/cjs/containerQueries/moduleRegistry.js +5 -0
  16. package/dist/cjs/containerQueries/modules/aspectRatio.js +51 -0
  17. package/dist/cjs/containerQueries/modules/block.js +53 -0
  18. package/dist/cjs/containerQueries/modules/custom.js +43 -0
  19. package/dist/cjs/containerQueries/modules/index.js +21 -0
  20. package/dist/cjs/containerQueries/modules/inline.js +53 -0
  21. package/dist/cjs/containerQueries/modules/size.js +2 -0
  22. package/dist/cjs/containerQueries/modules/style.js +36 -0
  23. package/dist/cjs/containerQueries/types.js +2 -0
  24. package/dist/cjs/containerQueries/validation.js +191 -0
  25. package/dist/cjs/core.js +5 -278
  26. package/dist/cjs/factory.js +21 -0
  27. package/dist/cjs/fraction.js +139 -0
  28. package/dist/cjs/internal/buildMeasurementCreationError.js +16 -0
  29. package/dist/cjs/internal/buildMeasurementCreationError.tests.js +5 -0
  30. package/dist/cjs/internal/createComponentQueriesApi.js +56 -0
  31. package/dist/cjs/internal/createCoreApi.js +336 -0
  32. package/dist/cjs/internal/createMediaQueriesApi.js +74 -0
  33. package/dist/cjs/internal/createUnitsApi.js +18 -0
  34. package/dist/cjs/internal/errors.js +118 -5
  35. package/dist/cjs/internal/normalizeToArray.js +9 -0
  36. package/dist/cjs/libraryHelpers/vanilla-extract.js +6 -2
  37. package/dist/cjs/logicalOperators/index.js +18 -0
  38. package/dist/cjs/mediaQueries/factory.js +5 -4
  39. package/dist/cjs/mediaQueries/mediaQueries.js +7 -5
  40. package/dist/cjs/mediaQueries/modules/dimensions.js +10 -8
  41. package/dist/cjs/mediaQueries/modules/resolution.js +6 -4
  42. package/dist/cjs/mediaQueries/validation.js +128 -116
  43. package/dist/cjs/ratio.js +141 -0
  44. package/dist/cjs/types.js +2 -0
  45. package/dist/cjs/validation.js +20 -0
  46. package/dist/esm/comparisons/index.d.ts +23 -0
  47. package/dist/esm/comparisons/index.d.ts.map +1 -0
  48. package/dist/esm/comparisons/index.js +22 -0
  49. package/dist/esm/containerQueries/containerQueries.d.ts +36 -0
  50. package/dist/esm/containerQueries/containerQueries.d.ts.map +1 -0
  51. package/dist/esm/containerQueries/containerQueries.js +109 -0
  52. package/dist/esm/containerQueries/factory.d.ts +20 -0
  53. package/dist/esm/containerQueries/factory.d.ts.map +1 -0
  54. package/dist/esm/containerQueries/factory.js +119 -0
  55. package/dist/esm/containerQueries/helpers.d.ts +53 -0
  56. package/dist/esm/containerQueries/helpers.d.ts.map +1 -0
  57. package/dist/esm/containerQueries/helpers.js +82 -0
  58. package/dist/esm/containerQueries/index.d.ts +10 -0
  59. package/dist/esm/containerQueries/index.d.ts.map +1 -0
  60. package/dist/esm/containerQueries/index.js +4 -0
  61. package/dist/esm/containerQueries/linting/aspectRatio.d.ts +4 -0
  62. package/dist/esm/containerQueries/linting/aspectRatio.d.ts.map +1 -0
  63. package/dist/esm/containerQueries/linting/aspectRatio.js +19 -0
  64. package/dist/esm/containerQueries/linting/block.d.ts +4 -0
  65. package/dist/esm/containerQueries/linting/block.d.ts.map +1 -0
  66. package/dist/esm/containerQueries/linting/block.js +18 -0
  67. package/dist/esm/containerQueries/linting/core.d.ts +4 -0
  68. package/dist/esm/containerQueries/linting/core.d.ts.map +1 -0
  69. package/dist/esm/containerQueries/linting/core.js +20 -0
  70. package/dist/esm/containerQueries/linting/custom.d.ts +3 -0
  71. package/dist/esm/containerQueries/linting/custom.d.ts.map +1 -0
  72. package/dist/esm/containerQueries/linting/custom.js +7 -0
  73. package/dist/esm/containerQueries/linting/inline.d.ts +4 -0
  74. package/dist/esm/containerQueries/linting/inline.d.ts.map +1 -0
  75. package/dist/esm/containerQueries/linting/inline.js +18 -0
  76. package/dist/esm/containerQueries/linting/resolution.d.ts +1 -0
  77. package/dist/esm/containerQueries/linting/resolution.d.ts.map +1 -0
  78. package/dist/esm/containerQueries/linting/resolution.js +12 -0
  79. package/dist/esm/containerQueries/linting/style.d.ts +3 -0
  80. package/dist/esm/containerQueries/linting/style.d.ts.map +1 -0
  81. package/dist/esm/containerQueries/linting/style.js +24 -0
  82. package/dist/esm/containerQueries/linting.d.ts +4 -0
  83. package/dist/esm/containerQueries/linting.d.ts.map +1 -0
  84. package/dist/esm/containerQueries/linting.js +20 -0
  85. package/dist/esm/containerQueries/moduleRegistry.d.ts +25 -0
  86. package/dist/esm/containerQueries/moduleRegistry.d.ts.map +1 -0
  87. package/dist/esm/containerQueries/moduleRegistry.js +1 -0
  88. package/dist/esm/containerQueries/modules/aspectRatio.d.ts +17 -0
  89. package/dist/esm/containerQueries/modules/aspectRatio.d.ts.map +1 -0
  90. package/dist/esm/containerQueries/modules/aspectRatio.js +47 -0
  91. package/dist/esm/containerQueries/modules/block.d.ts +20 -0
  92. package/dist/esm/containerQueries/modules/block.d.ts.map +1 -0
  93. package/dist/esm/containerQueries/modules/block.js +49 -0
  94. package/dist/esm/containerQueries/modules/custom.d.ts +13 -0
  95. package/dist/esm/containerQueries/modules/custom.d.ts.map +1 -0
  96. package/dist/esm/containerQueries/modules/custom.js +39 -0
  97. package/dist/esm/containerQueries/modules/index.d.ts +6 -0
  98. package/dist/esm/containerQueries/modules/index.d.ts.map +1 -0
  99. package/dist/esm/containerQueries/modules/index.js +5 -0
  100. package/dist/esm/containerQueries/modules/inline.d.ts +20 -0
  101. package/dist/esm/containerQueries/modules/inline.d.ts.map +1 -0
  102. package/dist/esm/containerQueries/modules/inline.js +49 -0
  103. package/dist/esm/containerQueries/modules/size.d.ts +41 -0
  104. package/dist/esm/containerQueries/modules/size.d.ts.map +1 -0
  105. package/dist/esm/containerQueries/modules/size.js +1 -0
  106. package/dist/esm/containerQueries/modules/style.d.ts +11 -0
  107. package/dist/esm/containerQueries/modules/style.d.ts.map +1 -0
  108. package/dist/esm/containerQueries/modules/style.js +32 -0
  109. package/dist/esm/containerQueries/types.d.ts +81 -0
  110. package/dist/esm/containerQueries/types.d.ts.map +1 -0
  111. package/dist/esm/containerQueries/types.js +1 -0
  112. package/dist/esm/containerQueries/validation.d.ts +41 -0
  113. package/dist/esm/containerQueries/validation.d.ts.map +1 -0
  114. package/dist/esm/containerQueries/validation.js +187 -0
  115. package/dist/esm/core.d.ts +27 -26
  116. package/dist/esm/core.d.ts.map +1 -1
  117. package/dist/esm/core.js +5 -266
  118. package/dist/esm/factory.d.ts +13 -0
  119. package/dist/esm/factory.d.ts.map +1 -0
  120. package/dist/esm/factory.js +17 -0
  121. package/dist/esm/fraction.d.ts +23 -0
  122. package/dist/esm/fraction.d.ts.map +1 -0
  123. package/dist/esm/fraction.js +129 -0
  124. package/dist/esm/internal/buildMeasurementCreationError.d.ts +12 -0
  125. package/dist/esm/internal/buildMeasurementCreationError.d.ts.map +1 -0
  126. package/dist/esm/internal/buildMeasurementCreationError.js +12 -0
  127. package/dist/esm/internal/buildMeasurementCreationError.tests.d.ts +3 -0
  128. package/dist/esm/internal/buildMeasurementCreationError.tests.d.ts.map +1 -0
  129. package/dist/esm/internal/buildMeasurementCreationError.tests.js +1 -0
  130. package/dist/esm/internal/createComponentQueriesApi.d.ts +34 -0
  131. package/dist/esm/internal/createComponentQueriesApi.d.ts.map +1 -0
  132. package/dist/esm/internal/createComponentQueriesApi.js +52 -0
  133. package/dist/esm/internal/createCoreApi.d.ts +289 -0
  134. package/dist/esm/internal/createCoreApi.d.ts.map +1 -0
  135. package/dist/esm/internal/createCoreApi.js +332 -0
  136. package/dist/esm/internal/createMediaQueriesApi.d.ts +35 -0
  137. package/dist/esm/internal/createMediaQueriesApi.d.ts.map +1 -0
  138. package/dist/esm/internal/createMediaQueriesApi.js +70 -0
  139. package/dist/esm/internal/createUnitsApi.d.ts +13 -0
  140. package/dist/esm/internal/createUnitsApi.d.ts.map +1 -0
  141. package/dist/esm/internal/createUnitsApi.js +14 -0
  142. package/dist/esm/internal/errors.d.ts +30 -0
  143. package/dist/esm/internal/errors.d.ts.map +1 -1
  144. package/dist/esm/internal/errors.js +113 -4
  145. package/dist/esm/internal/normalizeToArray.d.ts +2 -0
  146. package/dist/esm/internal/normalizeToArray.d.ts.map +1 -0
  147. package/dist/esm/internal/normalizeToArray.js +5 -0
  148. package/dist/esm/libraryHelpers/vanilla-extract.d.ts +2 -1
  149. package/dist/esm/libraryHelpers/vanilla-extract.d.ts.map +1 -1
  150. package/dist/esm/libraryHelpers/vanilla-extract.js +4 -1
  151. package/dist/esm/logicalOperators/index.d.ts +2 -0
  152. package/dist/esm/logicalOperators/index.d.ts.map +1 -0
  153. package/dist/esm/logicalOperators/index.js +17 -0
  154. package/dist/esm/mediaQueries/factory.d.ts +16 -1
  155. package/dist/esm/mediaQueries/factory.d.ts.map +1 -1
  156. package/dist/esm/mediaQueries/factory.js +3 -2
  157. package/dist/esm/mediaQueries/libraryHelpers/vanilla-extract.d.ts +2 -2
  158. package/dist/esm/mediaQueries/libraryHelpers/vanilla-extract.d.ts.map +1 -1
  159. package/dist/esm/mediaQueries/mediaQueries.d.ts +2 -0
  160. package/dist/esm/mediaQueries/mediaQueries.d.ts.map +1 -1
  161. package/dist/esm/mediaQueries/mediaQueries.js +4 -2
  162. package/dist/esm/mediaQueries/modules/dimensions.d.ts +2 -0
  163. package/dist/esm/mediaQueries/modules/dimensions.d.ts.map +1 -1
  164. package/dist/esm/mediaQueries/modules/dimensions.js +4 -2
  165. package/dist/esm/mediaQueries/modules/resolution.d.ts +2 -0
  166. package/dist/esm/mediaQueries/modules/resolution.d.ts.map +1 -1
  167. package/dist/esm/mediaQueries/modules/resolution.js +4 -2
  168. package/dist/esm/mediaQueries/validation.d.ts +28 -8
  169. package/dist/esm/mediaQueries/validation.d.ts.map +1 -1
  170. package/dist/esm/mediaQueries/validation.js +126 -107
  171. package/dist/esm/ratio.d.ts +22 -0
  172. package/dist/esm/ratio.d.ts.map +1 -0
  173. package/dist/esm/ratio.js +131 -0
  174. package/dist/esm/types.d.ts +35 -0
  175. package/dist/esm/types.d.ts.map +1 -0
  176. package/dist/esm/types.js +1 -0
  177. package/dist/esm/validation.d.ts +10 -0
  178. package/dist/esm/validation.d.ts.map +1 -0
  179. package/dist/esm/validation.js +15 -0
  180. package/dist/examples/containerQueries.example.js +54 -0
  181. package/dist/examples/examples/containerQueries.example.js +54 -0
  182. package/dist/examples/examples/factory-wrapper.example.js +33 -0
  183. package/dist/examples/examples/lineHeight-normalizer.example.js +81 -0
  184. package/dist/examples/examples/mediaQueries-multipleInstances.example.js +127 -0
  185. package/dist/examples/examples/mixedQueries.example.js +55 -0
  186. package/dist/examples/examples/validation-and-runtime-checks.example.js +85 -0
  187. package/dist/examples/examples/validation-unit-tests.example.js +35 -0
  188. package/dist/examples/factory-wrapper.example.js +33 -0
  189. package/dist/examples/lineHeight-normalizer.example.js +81 -0
  190. package/dist/examples/mediaQueries-multipleInstances.example.js +127 -0
  191. package/dist/examples/mixedQueries.example.js +60 -0
  192. package/dist/examples/src/comparisons/index.js +25 -0
  193. package/dist/examples/src/containerQueries/containerQueries.js +96 -0
  194. package/dist/examples/src/containerQueries/factory.js +123 -0
  195. package/dist/examples/src/containerQueries/helpers.js +94 -0
  196. package/dist/examples/src/containerQueries/index.js +16 -0
  197. package/dist/examples/src/containerQueries/linting/aspectRatio.js +20 -0
  198. package/dist/examples/src/containerQueries/linting/block.js +20 -0
  199. package/dist/examples/src/containerQueries/linting/core.js +19 -0
  200. package/dist/examples/src/containerQueries/linting/custom.js +11 -0
  201. package/dist/examples/src/containerQueries/linting/inline.js +20 -0
  202. package/dist/examples/src/containerQueries/linting/style.js +28 -0
  203. package/dist/examples/src/containerQueries/linting.js +24 -0
  204. package/dist/examples/src/containerQueries/moduleRegistry.js +5 -0
  205. package/dist/examples/src/containerQueries/modules/aspectRatio.js +33 -0
  206. package/dist/examples/src/containerQueries/modules/block.js +44 -0
  207. package/dist/examples/src/containerQueries/modules/custom.js +31 -0
  208. package/dist/examples/src/containerQueries/modules/index.js +21 -0
  209. package/dist/examples/src/containerQueries/modules/inline.js +44 -0
  210. package/dist/examples/src/containerQueries/modules/style.js +36 -0
  211. package/dist/examples/src/containerQueries/types.js +2 -0
  212. package/dist/examples/src/containerQueries/validation.js +177 -0
  213. package/dist/examples/src/core.js +16 -0
  214. package/dist/examples/src/factory.js +21 -0
  215. package/dist/examples/src/index.js +30 -0
  216. package/dist/examples/src/internal/buildMeasurementCreationError.js +16 -0
  217. package/dist/examples/src/internal/createCoreApi.js +336 -0
  218. package/dist/examples/src/internal/createMediaQueriesApi.js +74 -0
  219. package/dist/examples/src/internal/createUnitsApi.js +18 -0
  220. package/dist/examples/src/internal/errors.js +130 -0
  221. package/dist/examples/src/libraryHelpers/vanilla-extract.js +11 -0
  222. package/dist/examples/src/mediaQueries/factory.js +163 -0
  223. package/dist/examples/src/mediaQueries/helpers.js +88 -0
  224. package/dist/examples/src/mediaQueries/index.js +23 -0
  225. package/dist/examples/src/mediaQueries/linting/core.js +19 -0
  226. package/dist/examples/src/mediaQueries/linting/resolution.js +11 -0
  227. package/dist/examples/src/mediaQueries/linting.js +24 -0
  228. package/dist/examples/src/mediaQueries/mediaQueries.js +53 -0
  229. package/dist/examples/src/mediaQueries/moduleRegistry.js +5 -0
  230. package/dist/examples/src/mediaQueries/modules/custom.js +26 -0
  231. package/dist/examples/src/mediaQueries/modules/dimensions.js +61 -0
  232. package/dist/examples/src/mediaQueries/modules/display.js +20 -0
  233. package/dist/examples/src/mediaQueries/modules/environment.js +20 -0
  234. package/dist/examples/src/mediaQueries/modules/index.js +23 -0
  235. package/dist/examples/src/mediaQueries/modules/interaction.js +26 -0
  236. package/dist/examples/src/mediaQueries/modules/preferences.js +26 -0
  237. package/dist/examples/src/mediaQueries/modules/resolution.js +31 -0
  238. package/dist/examples/src/mediaQueries/types.js +2 -0
  239. package/dist/examples/src/mediaQueries/validation.js +128 -0
  240. package/dist/examples/src/ratio.js +141 -0
  241. package/dist/examples/src/types.js +2 -0
  242. package/dist/examples/src/unitDefinitions.js +67 -0
  243. package/dist/examples/src/units/absolute.js +11 -0
  244. package/dist/examples/src/units/angle.js +8 -0
  245. package/dist/examples/src/units/container.js +10 -0
  246. package/dist/examples/src/units/font-relative.js +16 -0
  247. package/dist/examples/src/units/frequency.js +6 -0
  248. package/dist/examples/src/units/grid.js +5 -0
  249. package/dist/examples/src/units/percent.js +7 -0
  250. package/dist/examples/src/units/resolution.js +7 -0
  251. package/dist/examples/src/units/time.js +6 -0
  252. package/dist/examples/src/units/viewport-dynamic.js +10 -0
  253. package/dist/examples/src/units/viewport-large.js +10 -0
  254. package/dist/examples/src/units/viewport-small.js +10 -0
  255. package/dist/examples/src/units/viewport.js +10 -0
  256. package/dist/examples/src/validation.js +20 -0
  257. package/dist/examples/validation-and-runtime-checks.example.js +85 -0
  258. package/dist/examples/validation-unit-tests.example.js +35 -0
  259. package/package.json +16 -5
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.emitAspectRatioFeatures = void 0;
4
+ const helpers_1 = require("../helpers");
5
+ const validation_1 = require("../validation");
6
+ const linting_1 = require("../linting");
7
+ const aspectRatio_1 = require("../linting/aspectRatio");
8
+ const emitAspectRatioFeatures = (props, helpers, validate) => {
9
+ const allowQueryArrays = helpers.config.allowQueryArrays !== false;
10
+ const assertNoArray = (value, label) => {
11
+ if (Array.isArray(value) && !allowQueryArrays) {
12
+ throw new Error(`${label} does not allow arrays.`);
13
+ }
14
+ };
15
+ const { runContainerQueryValidation, validateAspectRatioValues } = validation_1.defaultContainerQueryValidation;
16
+ if (!runContainerQueryValidation(props, helpers, validateAspectRatioValues, "aspectRatio", "aspect ratio values must be valid ratio greater than 0")) {
17
+ return;
18
+ }
19
+ if (!(0, linting_1.runContainerQueryLint)(props, helpers, aspectRatio_1.lintAspectRatioRedundancy, "aspectRatio should not be combined with minAspectRatio or maxAspectRatio")) {
20
+ return;
21
+ }
22
+ if (!(0, linting_1.runContainerQueryLint)(props, helpers, aspectRatio_1.lintAspectRatioRangeCollapse, "minAspectRatio and maxAspectRatio are equal; use aspectRatio instead")) {
23
+ return;
24
+ }
25
+ if (!(0, helpers_1.applyContainerQueryValidation)(props, helpers, validate, "aspectRatio")) {
26
+ return;
27
+ }
28
+ const emitFeature = (name, value) => {
29
+ if (Array.isArray(value)) {
30
+ value.forEach((entry) => {
31
+ var _a;
32
+ ((_a = helpers.addFeatureUnsafe) !== null && _a !== void 0 ? _a : helpers.addFeature)(name, entry);
33
+ });
34
+ return;
35
+ }
36
+ helpers.addFeature(name, value);
37
+ };
38
+ if (props.aspectRatio !== undefined) {
39
+ assertNoArray(props.aspectRatio, "aspectRatio");
40
+ emitFeature("aspect-ratio", props.aspectRatio);
41
+ }
42
+ if (props.minAspectRatio !== undefined) {
43
+ assertNoArray(props.minAspectRatio, "minAspectRatio");
44
+ emitFeature("min-aspect-ratio", props.minAspectRatio);
45
+ }
46
+ if (props.maxAspectRatio !== undefined) {
47
+ assertNoArray(props.maxAspectRatio, "maxAspectRatio");
48
+ emitFeature("max-aspect-ratio", props.maxAspectRatio);
49
+ }
50
+ };
51
+ exports.emitAspectRatioFeatures = emitAspectRatioFeatures;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.emitBlockSizeFeatures = void 0;
4
+ const helpers_1 = require("../helpers");
5
+ const validation_1 = require("../validation");
6
+ const linting_1 = require("../linting");
7
+ const block_1 = require("../linting/block");
8
+ const normalizeToArray_1 = require("../../internal/normalizeToArray");
9
+ const emitBlockComparison = (name, comparison, addCondition) => {
10
+ addCondition((0, helpers_1.formatContainerQueryComparison)(name, comparison.operator, comparison.value));
11
+ };
12
+ const emitBlockRange = (name, range, addCondition) => {
13
+ const min = (0, helpers_1.formatContainerQueryValue)(range.min);
14
+ const max = (0, helpers_1.formatContainerQueryValue)(range.max);
15
+ if ("minOperator" in range) {
16
+ addCondition(`(${min} ${range.minOperator} ${name})`);
17
+ addCondition(`(${name} <= ${max})`);
18
+ return;
19
+ }
20
+ addCondition(`(${min} <= ${name})`);
21
+ addCondition(`(${name} ${range.maxOperator} ${max})`);
22
+ };
23
+ const emitBlockSizeFeatures = (props, helpers, validate) => {
24
+ const allowQueryArrays = helpers.config.allowQueryArrays !== false;
25
+ const assertNoArray = (value, label) => {
26
+ if (Array.isArray(value) && !allowQueryArrays) {
27
+ throw new Error(`${label} does not allow arrays.`);
28
+ }
29
+ };
30
+ const { runContainerQueryValidation, validateBlockSizeValues, } = validation_1.defaultContainerQueryValidation;
31
+ if (!runContainerQueryValidation(props, helpers, validateBlockSizeValues, "block", "block size values must be valid measurements greater than 0")) {
32
+ return;
33
+ }
34
+ if (!(0, linting_1.runContainerQueryLint)(props, helpers, block_1.lintBlockRedundancy, "blockSize should not be combined with blockSizeRange")) {
35
+ return;
36
+ }
37
+ if (!(0, linting_1.runContainerQueryLint)(props, helpers, block_1.lintBlockRangeCollapse, "blockSizeRange min and max are equal; use blockSize instead")) {
38
+ return;
39
+ }
40
+ if (!(0, helpers_1.applyContainerQueryValidation)(props, helpers, validate, "block")) {
41
+ return;
42
+ }
43
+ const { addCondition } = helpers;
44
+ assertNoArray(props.blockSize, "blockSize");
45
+ (0, normalizeToArray_1.normalizeToArray)(props.blockSize).forEach((value) => {
46
+ emitBlockComparison("block-size", value, addCondition);
47
+ });
48
+ assertNoArray(props.blockSizeRange, "blockSizeRange");
49
+ (0, normalizeToArray_1.normalizeToArray)(props.blockSizeRange).forEach((value) => {
50
+ emitBlockRange("block-size", value, addCondition);
51
+ });
52
+ };
53
+ exports.emitBlockSizeFeatures = emitBlockSizeFeatures;
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.emitCustomFeatures = void 0;
4
+ const helpers_1 = require("../helpers");
5
+ const validation_1 = require("../validation");
6
+ const linting_1 = require("../linting");
7
+ const custom_1 = require("../linting/custom");
8
+ const normalizeToArray_1 = require("../../internal/normalizeToArray");
9
+ const emitCustomFeatures = (props, helpers, options, validate) => {
10
+ var _a, _b;
11
+ const { runContainerQueryValidation, validateCustomFeatures } = validation_1.defaultContainerQueryValidation;
12
+ if (!runContainerQueryValidation(props, helpers, validateCustomFeatures, "custom", "custom features must be valid and non-empty")) {
13
+ return;
14
+ }
15
+ if (!(0, linting_1.runContainerQueryLint)(props, helpers, custom_1.lintCustomFeatures, "customFeatures should not be empty")) {
16
+ return;
17
+ }
18
+ if (!(0, helpers_1.applyContainerQueryValidation)(props, helpers, validate, "custom")) {
19
+ return;
20
+ }
21
+ const { addFeatureUnsafe, addFeature } = helpers;
22
+ const allowQueryArrays = (_b = (_a = options === null || options === void 0 ? void 0 : options.allowQueryArrays) !== null && _a !== void 0 ? _a : helpers.config.allowQueryArrays) !== null && _b !== void 0 ? _b : true;
23
+ if (!props.customFeatures)
24
+ return;
25
+ Object.entries(props.customFeatures).forEach(([name, value]) => {
26
+ if (value === undefined || value === null)
27
+ return;
28
+ const trimmedName = name.trim();
29
+ if (!trimmedName)
30
+ return;
31
+ if (Array.isArray(value) && !allowQueryArrays) {
32
+ throw new Error(`Custom feature "${trimmedName}" does not allow arrays.`);
33
+ }
34
+ if (Array.isArray(value)) {
35
+ (0, normalizeToArray_1.normalizeToArray)(value).forEach((entry) => {
36
+ (addFeatureUnsafe !== null && addFeatureUnsafe !== void 0 ? addFeatureUnsafe : addFeature)(trimmedName, entry);
37
+ });
38
+ return;
39
+ }
40
+ addFeature(trimmedName, value);
41
+ });
42
+ };
43
+ exports.emitCustomFeatures = emitCustomFeatures;
@@ -0,0 +1,21 @@
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
+ __exportStar(require("./aspectRatio"), exports);
18
+ __exportStar(require("./block"), exports);
19
+ __exportStar(require("./custom"), exports);
20
+ __exportStar(require("./inline"), exports);
21
+ __exportStar(require("./style"), exports);
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.emitInlineSizeFeatures = void 0;
4
+ const helpers_1 = require("../helpers");
5
+ const validation_1 = require("../validation");
6
+ const linting_1 = require("../linting");
7
+ const inline_1 = require("../linting/inline");
8
+ const normalizeToArray_1 = require("../../internal/normalizeToArray");
9
+ const emitInlineComparison = (name, comparison, addCondition) => {
10
+ addCondition((0, helpers_1.formatContainerQueryComparison)(name, comparison.operator, comparison.value));
11
+ };
12
+ const emitInlineRange = (name, range, addCondition) => {
13
+ const min = (0, helpers_1.formatContainerQueryValue)(range.min);
14
+ const max = (0, helpers_1.formatContainerQueryValue)(range.max);
15
+ if ("minOperator" in range) {
16
+ addCondition(`(${min} ${range.minOperator} ${name})`);
17
+ addCondition(`(${name} <= ${max})`);
18
+ return;
19
+ }
20
+ addCondition(`(${min} <= ${name})`);
21
+ addCondition(`(${name} ${range.maxOperator} ${max})`);
22
+ };
23
+ const emitInlineSizeFeatures = (props, helpers, validate) => {
24
+ const allowQueryArrays = helpers.config.allowQueryArrays !== false;
25
+ const assertNoArray = (value, label) => {
26
+ if (Array.isArray(value) && !allowQueryArrays) {
27
+ throw new Error(`${label} does not allow arrays.`);
28
+ }
29
+ };
30
+ const { runContainerQueryValidation, validateInlineSizeValues, } = validation_1.defaultContainerQueryValidation;
31
+ if (!runContainerQueryValidation(props, helpers, validateInlineSizeValues, "inline", "inline size values must be valid measurements greater than 0")) {
32
+ return;
33
+ }
34
+ if (!(0, linting_1.runContainerQueryLint)(props, helpers, inline_1.lintInlineRedundancy, "inlineSize should not be combined with inlineSizeRange")) {
35
+ return;
36
+ }
37
+ if (!(0, linting_1.runContainerQueryLint)(props, helpers, inline_1.lintInlineRangeCollapse, "inlineSizeRange min and max are equal; use inlineSize instead")) {
38
+ return;
39
+ }
40
+ if (!(0, helpers_1.applyContainerQueryValidation)(props, helpers, validate, "inline")) {
41
+ return;
42
+ }
43
+ const { addCondition } = helpers;
44
+ assertNoArray(props.inlineSize, "inlineSize");
45
+ (0, normalizeToArray_1.normalizeToArray)(props.inlineSize).forEach((value) => {
46
+ emitInlineComparison("inline-size", value, addCondition);
47
+ });
48
+ assertNoArray(props.inlineSizeRange, "inlineSizeRange");
49
+ (0, normalizeToArray_1.normalizeToArray)(props.inlineSizeRange).forEach((value) => {
50
+ emitInlineRange("inline-size", value, addCondition);
51
+ });
52
+ };
53
+ exports.emitInlineSizeFeatures = emitInlineSizeFeatures;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.emitStyleFeatures = void 0;
4
+ const helpers_1 = require("../helpers");
5
+ const validation_1 = require("../validation");
6
+ const linting_1 = require("../linting");
7
+ const style_1 = require("../linting/style");
8
+ const emitStyleFeatures = (props, helpers, validate) => {
9
+ const { runContainerQueryValidation, validateStyleValues, } = validation_1.defaultContainerQueryValidation;
10
+ if (!runContainerQueryValidation(props, helpers, validateStyleValues, "style", "style conditions must be valid and non-empty")) {
11
+ return;
12
+ }
13
+ if (!(0, linting_1.runContainerQueryLint)(props, helpers, style_1.lintStyleCondition, "style conditions must be valid and non-empty")) {
14
+ return;
15
+ }
16
+ if (!(0, helpers_1.applyContainerQueryValidation)(props, helpers, validate, "style")) {
17
+ return;
18
+ }
19
+ if (!props.style)
20
+ return;
21
+ const { addCondition } = helpers;
22
+ Object.entries(props.style).forEach(([name, value]) => {
23
+ if (value === undefined || value === null)
24
+ return;
25
+ if (Array.isArray(value)) {
26
+ value.forEach((entry) => {
27
+ if (entry === undefined || entry === null)
28
+ return;
29
+ addCondition(`(style(${name}: ${(0, helpers_1.formatContainerQueryValue)(entry)}))`);
30
+ });
31
+ return;
32
+ }
33
+ addCondition(`(style(${name}: ${(0, helpers_1.formatContainerQueryValue)(value)}))`);
34
+ });
35
+ };
36
+ exports.emitStyleFeatures = emitStyleFeatures;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defaultContainerQueryValidation = exports.validateCustomFeatures = exports.validateStyleValues = exports.validateAspectRatioValues = exports.validateBlockSizeValues = exports.validateInlineSizeValues = exports.validateHeightValuesPositive = exports.validateMinMaxHeight = exports.validateWidthValuesPositive = exports.validateMinMaxWidth = exports.runContainerQueryValidation = exports.createContainerQueryValidation = void 0;
4
+ const helpers_1 = require("./helpers");
5
+ const core_1 = require("../core");
6
+ const validation_1 = require("../validation");
7
+ const normalizeToArray_1 = require("../internal/normalizeToArray");
8
+ const ratio_1 = require("../ratio");
9
+ const isFiniteNumber = (value) => typeof value === "number" && Number.isFinite(value);
10
+ const assertMeasurement = (value, label) => {
11
+ (0, core_1.assertCondition)((0, core_1.isMeasurement)(value), `${label} must be a measurement`);
12
+ };
13
+ const assertMeasurementPositive = (value, label) => {
14
+ (0, core_1.assertCondition)(value.getValue() > 0, `${label} must be greater than 0`);
15
+ };
16
+ const assertRatio = (value, label) => {
17
+ (0, core_1.assertCondition)((0, core_1.isRatio)(value), `${label} must be a ratio created with r()`);
18
+ };
19
+ const assertRatioPositive = (value, label) => {
20
+ (0, core_1.assertCondition)(value.numerator() > 0, `${label} numerator must be greater than 0`);
21
+ (0, core_1.assertCondition)(value.denominator() > 0, `${label} denominator must be greater than 0`);
22
+ };
23
+ const isStyleValue = (value) => {
24
+ if (typeof value === "string")
25
+ return true;
26
+ if (isFiniteNumber(value))
27
+ return true;
28
+ if ((0, core_1.hasCssMethod)(value))
29
+ return true;
30
+ return false;
31
+ };
32
+ const createContainerQueryValidation = (core) => {
33
+ const assertCondition = core.assertCondition;
34
+ const assertMatchingUnits = core.assertMatchingUnits;
35
+ const runContainerQueryValidation = (config, helpers, check, context, fallbackMessage = "Invalid container query configuration") => {
36
+ if (!check)
37
+ return true;
38
+ try {
39
+ check(config);
40
+ return true;
41
+ }
42
+ catch (error) {
43
+ const result = (0, validation_1.toValidationResult)(error, fallbackMessage);
44
+ return (0, helpers_1.applyContainerQueryValidation)(config, helpers, () => result, context);
45
+ }
46
+ };
47
+ const validateMinMaxWidth = (props) => {
48
+ if (!props.minWidth || !props.maxWidth)
49
+ return;
50
+ if (Array.isArray(props.minWidth) || Array.isArray(props.maxWidth)) {
51
+ return;
52
+ }
53
+ assertMatchingUnits(props.minWidth, props.maxWidth, "containerQueries.minMaxWidth");
54
+ assertCondition(props.minWidth.getValue() <= props.maxWidth.getValue(), "minWidth must be less than or equal to maxWidth");
55
+ };
56
+ const validateWidthValuesPositive = (props) => {
57
+ (0, normalizeToArray_1.normalizeToArray)(props.minWidth).forEach((value) => {
58
+ assertMeasurement(value, "minWidth");
59
+ assertMeasurementPositive(value, "minWidth");
60
+ });
61
+ (0, normalizeToArray_1.normalizeToArray)(props.maxWidth).forEach((value) => {
62
+ assertMeasurement(value, "maxWidth");
63
+ assertMeasurementPositive(value, "maxWidth");
64
+ });
65
+ };
66
+ const validateMinMaxHeight = (props) => {
67
+ if (!props.minHeight || !props.maxHeight)
68
+ return;
69
+ if (Array.isArray(props.minHeight) || Array.isArray(props.maxHeight)) {
70
+ return;
71
+ }
72
+ assertMatchingUnits(props.minHeight, props.maxHeight, "containerQueries.minMaxHeight");
73
+ assertCondition(props.minHeight.getValue() <= props.maxHeight.getValue(), "minHeight must be less than or equal to maxHeight");
74
+ };
75
+ const validateHeightValuesPositive = (props) => {
76
+ (0, normalizeToArray_1.normalizeToArray)(props.minHeight).forEach((value) => {
77
+ assertMeasurement(value, "minHeight");
78
+ assertMeasurementPositive(value, "minHeight");
79
+ });
80
+ (0, normalizeToArray_1.normalizeToArray)(props.maxHeight).forEach((value) => {
81
+ assertMeasurement(value, "maxHeight");
82
+ assertMeasurementPositive(value, "maxHeight");
83
+ });
84
+ };
85
+ const validateInlineSizeValues = (props) => {
86
+ (0, normalizeToArray_1.normalizeToArray)(props.inlineSize).forEach((value) => {
87
+ assertMeasurement(value.value, "inlineSize");
88
+ assertMeasurementPositive(value.value, "inlineSize");
89
+ });
90
+ (0, normalizeToArray_1.normalizeToArray)(props.inlineSizeRange).forEach((value) => {
91
+ assertMeasurement(value.min, "inlineSizeRange.min");
92
+ assertMeasurement(value.max, "inlineSizeRange.max");
93
+ assertMeasurementPositive(value.min, "inlineSizeRange.min");
94
+ assertMeasurementPositive(value.max, "inlineSizeRange.max");
95
+ assertMatchingUnits(value.min, value.max, "containerQueries.inlineSizeRangeUnits");
96
+ assertCondition(value.min.getValue() <= value.max.getValue(), "inlineSizeRange min must be less than or equal to max");
97
+ });
98
+ };
99
+ const validateBlockSizeValues = (props) => {
100
+ (0, normalizeToArray_1.normalizeToArray)(props.blockSize).forEach((value) => {
101
+ assertMeasurement(value.value, "blockSize");
102
+ assertMeasurementPositive(value.value, "blockSize");
103
+ });
104
+ (0, normalizeToArray_1.normalizeToArray)(props.blockSizeRange).forEach((value) => {
105
+ assertMeasurement(value.min, "blockSizeRange.min");
106
+ assertMeasurement(value.max, "blockSizeRange.max");
107
+ assertMeasurementPositive(value.min, "blockSizeRange.min");
108
+ assertMeasurementPositive(value.max, "blockSizeRange.max");
109
+ assertMatchingUnits(value.min, value.max, "containerQueries.blockSizeRangeUnits");
110
+ assertCondition(value.min.getValue() <= value.max.getValue(), "blockSizeRange min must be less than or equal to max");
111
+ });
112
+ };
113
+ const validateAspectRatioValues = (props) => {
114
+ (0, normalizeToArray_1.normalizeToArray)(props.aspectRatio).forEach((value) => {
115
+ assertRatio(value, "aspectRatio");
116
+ assertRatioPositive(value, "aspectRatio");
117
+ });
118
+ (0, normalizeToArray_1.normalizeToArray)(props.minAspectRatio).forEach((value) => {
119
+ assertRatio(value, "minAspectRatio");
120
+ assertRatioPositive(value, "minAspectRatio");
121
+ });
122
+ (0, normalizeToArray_1.normalizeToArray)(props.maxAspectRatio).forEach((value) => {
123
+ assertRatio(value, "maxAspectRatio");
124
+ assertRatioPositive(value, "maxAspectRatio");
125
+ });
126
+ if (props.minAspectRatio &&
127
+ props.maxAspectRatio &&
128
+ !Array.isArray(props.minAspectRatio) &&
129
+ !Array.isArray(props.maxAspectRatio)) {
130
+ const minValue = (0, ratio_1.ratioToFloat)(props.minAspectRatio);
131
+ const maxValue = (0, ratio_1.ratioToFloat)(props.maxAspectRatio);
132
+ assertCondition(minValue <= maxValue, "minAspectRatio must be less than or equal to maxAspectRatio");
133
+ }
134
+ };
135
+ const validateStyleValues = (props) => {
136
+ if (!props.style)
137
+ return;
138
+ const entries = Object.entries(props.style);
139
+ assertCondition(entries.length > 0, "style conditions must not be empty.");
140
+ entries.forEach(([name, value]) => {
141
+ if (value === undefined || value === null)
142
+ return;
143
+ if (Array.isArray(value)) {
144
+ assertCondition(value.length > 0, `style.${name} must not be empty`);
145
+ value.forEach((entry, index) => {
146
+ assertCondition(isStyleValue(entry), `style.${name}[${index}] must be a primitive or measurement`);
147
+ });
148
+ return;
149
+ }
150
+ assertCondition(isStyleValue(value), `style.${name} must be a primitive or measurement`);
151
+ });
152
+ };
153
+ const validateCustomFeatures = (props) => {
154
+ if (!props.customFeatures)
155
+ return;
156
+ const entries = Object.entries(props.customFeatures);
157
+ assertCondition(entries.length > 0, "customFeatures should not be empty.");
158
+ entries.forEach(([name, value]) => {
159
+ const trimmedName = name.trim();
160
+ assertCondition(trimmedName.length > 0, "Custom feature name must be non-empty.");
161
+ if (value === undefined || value === null)
162
+ return;
163
+ if (Array.isArray(value)) {
164
+ value.forEach((entry, index) => {
165
+ assertCondition(isStyleValue(entry), `Custom feature "${trimmedName}[${index}]" must be a primitive or a measurement.`);
166
+ });
167
+ return;
168
+ }
169
+ assertCondition(isStyleValue(value), `Custom feature "${trimmedName}" must be a primitive or a measurement.`);
170
+ });
171
+ };
172
+ return {
173
+ runContainerQueryValidation,
174
+ validateMinMaxWidth,
175
+ validateWidthValuesPositive,
176
+ validateMinMaxHeight,
177
+ validateHeightValuesPositive,
178
+ validateInlineSizeValues,
179
+ validateBlockSizeValues,
180
+ validateAspectRatioValues,
181
+ validateStyleValues,
182
+ validateCustomFeatures,
183
+ };
184
+ };
185
+ exports.createContainerQueryValidation = createContainerQueryValidation;
186
+ const defaultContainerQueryValidation = (0, exports.createContainerQueryValidation)({
187
+ assertCondition: core_1.assertCondition,
188
+ assertMatchingUnits: core_1.assertMatchingUnits,
189
+ });
190
+ exports.defaultContainerQueryValidation = defaultContainerQueryValidation;
191
+ exports.runContainerQueryValidation = defaultContainerQueryValidation.runContainerQueryValidation, exports.validateMinMaxWidth = defaultContainerQueryValidation.validateMinMaxWidth, exports.validateWidthValuesPositive = defaultContainerQueryValidation.validateWidthValuesPositive, exports.validateMinMaxHeight = defaultContainerQueryValidation.validateMinMaxHeight, exports.validateHeightValuesPositive = defaultContainerQueryValidation.validateHeightValuesPositive, exports.validateInlineSizeValues = defaultContainerQueryValidation.validateInlineSizeValues, exports.validateBlockSizeValues = defaultContainerQueryValidation.validateBlockSizeValues, exports.validateAspectRatioValues = defaultContainerQueryValidation.validateAspectRatioValues, exports.validateStyleValues = defaultContainerQueryValidation.validateStyleValues, exports.validateCustomFeatures = defaultContainerQueryValidation.validateCustomFeatures;