css-calipers 0.7.0 โ 0.9.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/README.md +36 -1
- package/dist/cjs/libraryHelpers/vanilla-extract.js +7 -0
- package/dist/cjs/mediaQueries/factory.js +162 -0
- package/dist/cjs/mediaQueries/helpers.js +97 -0
- package/dist/cjs/mediaQueries/index.js +22 -0
- package/dist/cjs/mediaQueries/linting/core.js +19 -0
- package/dist/cjs/mediaQueries/linting/resolution.js +11 -0
- package/dist/cjs/mediaQueries/linting.js +24 -0
- package/dist/cjs/mediaQueries/mediaQueries.js +51 -0
- package/dist/cjs/mediaQueries/mediaQueryFactory.js +120 -0
- package/dist/cjs/mediaQueries/moduleRegistry.js +5 -0
- package/dist/cjs/mediaQueries/modules/custom.js +26 -0
- package/dist/cjs/mediaQueries/modules/dimensions.js +59 -0
- package/dist/cjs/mediaQueries/modules/display.js +20 -0
- package/dist/cjs/mediaQueries/modules/environment.js +20 -0
- package/dist/cjs/mediaQueries/modules/index.js +23 -0
- package/dist/cjs/mediaQueries/modules/interaction.js +26 -0
- package/dist/cjs/mediaQueries/modules/preferences.js +26 -0
- package/dist/cjs/mediaQueries/modules/resolution.js +29 -0
- package/dist/cjs/mediaQueries/types.js +2 -0
- package/dist/cjs/mediaQueries/validation.js +133 -0
- package/dist/esm/libraryHelpers/vanilla-extract.d.ts +3 -0
- package/dist/esm/libraryHelpers/vanilla-extract.d.ts.map +1 -0
- package/dist/esm/libraryHelpers/vanilla-extract.js +3 -0
- package/dist/esm/mediaQueries/factory.d.ts +29 -0
- package/dist/esm/mediaQueries/factory.d.ts.map +1 -0
- package/dist/esm/mediaQueries/factory.js +158 -0
- package/dist/esm/mediaQueries/helpers.d.ts +40 -0
- package/dist/esm/mediaQueries/helpers.d.ts.map +1 -0
- package/dist/esm/mediaQueries/helpers.js +87 -0
- package/dist/esm/mediaQueries/index.d.ts +7 -0
- package/dist/esm/mediaQueries/index.d.ts.map +1 -0
- package/dist/esm/mediaQueries/index.js +6 -0
- package/dist/esm/mediaQueries/linting/core.d.ts +5 -0
- package/dist/esm/mediaQueries/linting/core.d.ts.map +1 -0
- package/dist/esm/mediaQueries/linting/core.js +14 -0
- package/dist/esm/mediaQueries/linting/resolution.d.ts +3 -0
- package/dist/esm/mediaQueries/linting/resolution.d.ts.map +1 -0
- package/dist/esm/mediaQueries/linting/resolution.js +7 -0
- package/dist/esm/mediaQueries/linting.d.ts +4 -0
- package/dist/esm/mediaQueries/linting.d.ts.map +1 -0
- package/dist/esm/mediaQueries/linting.js +20 -0
- package/dist/esm/mediaQueries/mediaQueries.d.ts +21 -0
- package/dist/esm/mediaQueries/mediaQueries.d.ts.map +1 -0
- package/dist/esm/mediaQueries/mediaQueries.js +46 -0
- package/dist/esm/mediaQueries/moduleRegistry.d.ts +27 -0
- package/dist/esm/mediaQueries/moduleRegistry.d.ts.map +1 -0
- package/dist/esm/mediaQueries/moduleRegistry.js +1 -0
- package/dist/esm/mediaQueries/modules/custom.d.ts +10 -0
- package/dist/esm/mediaQueries/modules/custom.d.ts.map +1 -0
- package/dist/esm/mediaQueries/modules/custom.js +22 -0
- package/dist/esm/mediaQueries/modules/dimensions.d.ts +17 -0
- package/dist/esm/mediaQueries/modules/dimensions.d.ts.map +1 -0
- package/dist/esm/mediaQueries/modules/dimensions.js +55 -0
- package/dist/esm/mediaQueries/modules/display.d.ts +9 -0
- package/dist/esm/mediaQueries/modules/display.d.ts.map +1 -0
- package/dist/esm/mediaQueries/modules/display.js +16 -0
- package/dist/esm/mediaQueries/modules/environment.d.ts +9 -0
- package/dist/esm/mediaQueries/modules/environment.d.ts.map +1 -0
- package/dist/esm/mediaQueries/modules/environment.js +16 -0
- package/dist/esm/mediaQueries/modules/index.d.ts +8 -0
- package/dist/esm/mediaQueries/modules/index.d.ts.map +1 -0
- package/dist/esm/mediaQueries/modules/index.js +7 -0
- package/dist/esm/mediaQueries/modules/interaction.d.ts +11 -0
- package/dist/esm/mediaQueries/modules/interaction.d.ts.map +1 -0
- package/dist/esm/mediaQueries/modules/interaction.js +22 -0
- package/dist/esm/mediaQueries/modules/preferences.d.ts +11 -0
- package/dist/esm/mediaQueries/modules/preferences.d.ts.map +1 -0
- package/dist/esm/mediaQueries/modules/preferences.js +22 -0
- package/dist/esm/mediaQueries/modules/resolution.d.ts +10 -0
- package/dist/esm/mediaQueries/modules/resolution.d.ts.map +1 -0
- package/dist/esm/mediaQueries/modules/resolution.js +25 -0
- package/dist/esm/mediaQueries/types.d.ts +117 -0
- package/dist/esm/mediaQueries/types.d.ts.map +1 -0
- package/dist/esm/mediaQueries/types.js +1 -0
- package/dist/esm/mediaQueries/validation.d.ts +14 -0
- package/dist/esm/mediaQueries/validation.d.ts.map +1 -0
- package/dist/esm/mediaQueries/validation.js +122 -0
- package/package.json +27 -9
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/mediaQueries/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { MediaQueryBuilderHelpers } from './helpers';
|
|
2
|
+
import type { IMediaQueryCore } from './mediaQueries';
|
|
3
|
+
import type { IMediaQueryDimensions } from './modules/dimensions';
|
|
4
|
+
import type { IMediaQueryResolutionRange } from './modules/resolution';
|
|
5
|
+
export type MediaQueryValidationCheck<TConfig> = (config: TConfig) => void;
|
|
6
|
+
export declare const runMediaQueryValidation: <TConfig>(config: TConfig, helpers: MediaQueryBuilderHelpers, check?: MediaQueryValidationCheck<TConfig>, context?: string, fallbackMessage?: string) => boolean;
|
|
7
|
+
export declare const validateMinMaxWidth: (props: IMediaQueryCore) => void;
|
|
8
|
+
export declare const validateWidthValuesPositive: (props: IMediaQueryCore & IMediaQueryDimensions) => void;
|
|
9
|
+
export declare const validateMinMaxHeight: (props: IMediaQueryDimensions) => void;
|
|
10
|
+
export declare const validateHeightValuesPositive: (props: IMediaQueryDimensions) => void;
|
|
11
|
+
export declare const validateMinMaxAspectRatio: (props: IMediaQueryDimensions) => void;
|
|
12
|
+
export declare const validateAspectRatioValuesPositive: (props: IMediaQueryDimensions) => void;
|
|
13
|
+
export declare const validateResolutionValues: (props: IMediaQueryResolutionRange) => void;
|
|
14
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/mediaQueries/validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EAEzB,MAAM,WAAW,CAAC;AAGnB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAGvE,MAAM,MAAM,yBAAyB,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;AAU3E,eAAO,MAAM,uBAAuB,GAAI,OAAO,EAC7C,QAAQ,OAAO,EACf,SAAS,wBAAwB,EACjC,QAAQ,yBAAyB,CAAC,OAAO,CAAC,EAC1C,UAAU,MAAM,EAChB,wBAAqD,KACpD,OAcF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,OAAO,eAAe,KAAG,IAW5D,CAAC;AAEF,eAAO,MAAM,2BAA2B,GACtC,OAAO,eAAe,GAAG,qBAAqB,KAC7C,IAoBF,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,OAAO,qBAAqB,KAC3B,IAWF,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,OAAO,qBAAqB,KAC3B,IAoBF,CAAC;AAwBF,eAAO,MAAM,yBAAyB,GACpC,OAAO,qBAAqB,KAC3B,IAYF,CAAC;AAEF,eAAO,MAAM,iCAAiC,GAC5C,OAAO,qBAAqB,KAC3B,IA0BF,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,OAAO,0BAA0B,KAChC,IAwBF,CAAC"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { applyMediaQueryValidation } from './helpers';
|
|
2
|
+
import { assertCondition, assertMatchingUnits } from '../core';
|
|
3
|
+
const toValidationResult = (error, fallback) => {
|
|
4
|
+
if (error instanceof Error && error.message)
|
|
5
|
+
return error.message;
|
|
6
|
+
return fallback;
|
|
7
|
+
};
|
|
8
|
+
export const runMediaQueryValidation = (config, helpers, check, context, fallbackMessage = 'Invalid media query configuration') => {
|
|
9
|
+
if (!check)
|
|
10
|
+
return true;
|
|
11
|
+
try {
|
|
12
|
+
check(config);
|
|
13
|
+
return true;
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
const result = toValidationResult(error, fallbackMessage);
|
|
17
|
+
return applyMediaQueryValidation(config, helpers, () => result, context);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
export const validateMinMaxWidth = (props) => {
|
|
21
|
+
if (!props.minWidth || !props.maxWidth)
|
|
22
|
+
return;
|
|
23
|
+
assertMatchingUnits(props.minWidth, props.maxWidth, 'mediaQueries.minMaxWidth');
|
|
24
|
+
assertCondition(props.minWidth.getValue() <= props.maxWidth.getValue(), 'minWidth must be less than or equal to maxWidth');
|
|
25
|
+
};
|
|
26
|
+
export const validateWidthValuesPositive = (props) => {
|
|
27
|
+
const assertPositive = (value, label) => {
|
|
28
|
+
assertCondition(value.getValue() > 0, `${label} must be greater than 0`);
|
|
29
|
+
};
|
|
30
|
+
if (props.width) {
|
|
31
|
+
assertPositive(props.width, 'width');
|
|
32
|
+
}
|
|
33
|
+
if (props.minWidth) {
|
|
34
|
+
assertPositive(props.minWidth, 'minWidth');
|
|
35
|
+
}
|
|
36
|
+
if (props.maxWidth) {
|
|
37
|
+
assertPositive(props.maxWidth, 'maxWidth');
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
export const validateMinMaxHeight = (props) => {
|
|
41
|
+
if (!props.minHeight || !props.maxHeight)
|
|
42
|
+
return;
|
|
43
|
+
assertMatchingUnits(props.minHeight, props.maxHeight, 'mediaQueries.minMaxHeight');
|
|
44
|
+
assertCondition(props.minHeight.getValue() <= props.maxHeight.getValue(), 'minHeight must be less than or equal to maxHeight');
|
|
45
|
+
};
|
|
46
|
+
export const validateHeightValuesPositive = (props) => {
|
|
47
|
+
const assertPositive = (value, label) => {
|
|
48
|
+
assertCondition(value.getValue() > 0, `${label} must be greater than 0`);
|
|
49
|
+
};
|
|
50
|
+
if (props.height) {
|
|
51
|
+
assertPositive(props.height, 'height');
|
|
52
|
+
}
|
|
53
|
+
if (props.minHeight) {
|
|
54
|
+
assertPositive(props.minHeight, 'minHeight');
|
|
55
|
+
}
|
|
56
|
+
if (props.maxHeight) {
|
|
57
|
+
assertPositive(props.maxHeight, 'maxHeight');
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
const parseAspectRatio = (value) => {
|
|
61
|
+
if (value === undefined || value === null)
|
|
62
|
+
return null;
|
|
63
|
+
if (typeof value === 'number')
|
|
64
|
+
return Number.isFinite(value) ? value : null;
|
|
65
|
+
const trimmed = value.trim();
|
|
66
|
+
if (!trimmed)
|
|
67
|
+
return null;
|
|
68
|
+
if (trimmed.includes('/')) {
|
|
69
|
+
const [left, right] = trimmed.split('/');
|
|
70
|
+
if (left === undefined || right === undefined)
|
|
71
|
+
return null;
|
|
72
|
+
const numerator = Number(left.trim());
|
|
73
|
+
const denominator = Number(right.trim());
|
|
74
|
+
if (!Number.isFinite(numerator) || !Number.isFinite(denominator)) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
if (denominator === 0)
|
|
78
|
+
return null;
|
|
79
|
+
return numerator / denominator;
|
|
80
|
+
}
|
|
81
|
+
const parsed = Number(trimmed);
|
|
82
|
+
return Number.isFinite(parsed) ? parsed : null;
|
|
83
|
+
};
|
|
84
|
+
export const validateMinMaxAspectRatio = (props) => {
|
|
85
|
+
if (!props.minAspectRatio || !props.maxAspectRatio)
|
|
86
|
+
return;
|
|
87
|
+
const minRatio = parseAspectRatio(props.minAspectRatio);
|
|
88
|
+
const maxRatio = parseAspectRatio(props.maxAspectRatio);
|
|
89
|
+
assertCondition(minRatio !== null && maxRatio !== null, 'aspectRatio values must be valid numbers or ratio strings');
|
|
90
|
+
assertCondition(minRatio <= maxRatio, 'minAspectRatio must be less than or equal to maxAspectRatio');
|
|
91
|
+
};
|
|
92
|
+
export const validateAspectRatioValuesPositive = (props) => {
|
|
93
|
+
const assertValidPositive = (label, value) => {
|
|
94
|
+
assertCondition(value !== null && value > 0, `${label} must be a valid ratio greater than 0`);
|
|
95
|
+
};
|
|
96
|
+
if (props.aspectRatio !== undefined) {
|
|
97
|
+
assertValidPositive('aspectRatio', parseAspectRatio(props.aspectRatio));
|
|
98
|
+
}
|
|
99
|
+
if (props.minAspectRatio !== undefined) {
|
|
100
|
+
assertValidPositive('minAspectRatio', parseAspectRatio(props.minAspectRatio));
|
|
101
|
+
}
|
|
102
|
+
if (props.maxAspectRatio !== undefined) {
|
|
103
|
+
assertValidPositive('maxAspectRatio', parseAspectRatio(props.maxAspectRatio));
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
export const validateResolutionValues = (props) => {
|
|
107
|
+
const assertPositive = (value, label) => {
|
|
108
|
+
assertCondition(value.getValue() > 0, `${label} must be greater than 0`);
|
|
109
|
+
};
|
|
110
|
+
if (props.resolutionValue) {
|
|
111
|
+
assertPositive(props.resolutionValue, 'resolution');
|
|
112
|
+
}
|
|
113
|
+
if (props.minResolution) {
|
|
114
|
+
assertPositive(props.minResolution, 'minResolution');
|
|
115
|
+
}
|
|
116
|
+
if (props.maxResolution) {
|
|
117
|
+
assertPositive(props.maxResolution, 'maxResolution');
|
|
118
|
+
}
|
|
119
|
+
if (props.minResolution && props.maxResolution) {
|
|
120
|
+
assertMatchingUnits(props.minResolution, props.maxResolution, 'mediaQueries.resolutionUnits');
|
|
121
|
+
}
|
|
122
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "css-calipers",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.0",
|
|
4
4
|
"description": "Compile-time unit safety for numeric, unit-bearing CSS values via typed measurements.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -42,6 +42,11 @@
|
|
|
42
42
|
"import": "./dist/esm/index.js",
|
|
43
43
|
"require": "./dist/cjs/index.js"
|
|
44
44
|
},
|
|
45
|
+
"./mediaQueries": {
|
|
46
|
+
"types": "./dist/esm/mediaQueries/index.d.ts",
|
|
47
|
+
"import": "./dist/esm/mediaQueries/index.js",
|
|
48
|
+
"require": "./dist/cjs/mediaQueries/index.js"
|
|
49
|
+
},
|
|
45
50
|
"./units": {
|
|
46
51
|
"types": "./dist/esm/units/index.d.ts",
|
|
47
52
|
"import": "./dist/esm/units/index.js",
|
|
@@ -54,10 +59,16 @@
|
|
|
54
59
|
},
|
|
55
60
|
"./package.json": "./package.json"
|
|
56
61
|
},
|
|
62
|
+
"dependencies": {
|
|
63
|
+
"csstype": "^3.1.3"
|
|
64
|
+
},
|
|
57
65
|
"devDependencies": {
|
|
66
|
+
"@eslint/js": "^9.39.2",
|
|
58
67
|
"@types/node": "^24.10.1",
|
|
68
|
+
"@typescript-eslint/eslint-plugin": "^8.50.1",
|
|
69
|
+
"@typescript-eslint/parser": "^8.50.1",
|
|
59
70
|
"@vitest/coverage-v8": "^4.0.14",
|
|
60
|
-
"
|
|
71
|
+
"eslint": "^9.39.2",
|
|
61
72
|
"tsd": "^0.31.0",
|
|
62
73
|
"typescript": "^5.6.3",
|
|
63
74
|
"vitest": "^4.0.14"
|
|
@@ -66,17 +77,24 @@
|
|
|
66
77
|
"build": "npm run build:cjs && npm run build:esm",
|
|
67
78
|
"build:cjs": "echo \"๐ ๏ธ Building CommonJS (cjs) bundle...\" && tsc -p tsconfig.build.cjs.json",
|
|
68
79
|
"build:esm": "echo \"๐ ๏ธ Building ES module (esm) bundle...\" && tsc -p tsconfig.build.esm.json",
|
|
69
|
-
"build:test": "npm run build && npm run test
|
|
80
|
+
"build:test": "npm run build && npm run test",
|
|
70
81
|
"build:delete": "node -e \"const { existsSync, rmSync } = require('fs'); const paths = ['dist/cjs', 'dist/esm']; for (const p of paths) { console.log('Scanning', p + '...'); if (existsSync(p)) { console.log('Found', p + ', deleting...'); rmSync(p, { recursive: true, force: true }); console.log('Deleted', p); } else { console.log(p + ' not found, skipping.'); } }\"",
|
|
71
82
|
"prepublishOnly": "node -e \"if (!process.env.CSS_CALIPERS_RELEASE) { console.error('Direct npm publish is disabled; use \\\"npm run release\\\" instead.'); process.exit(1); }\"",
|
|
72
83
|
"release": "node scripts/release.mjs",
|
|
73
84
|
"release:dry": "node scripts/release.mjs --dry-run",
|
|
74
|
-
"test": "
|
|
85
|
+
"test": "npm run test:core && npm run test:mediaQueries && npm run test:dist && npm run test:types && npm run test:tsc && npm run lint",
|
|
86
|
+
"test:mediaQueries": "vitest run tests/runtime/mediaQueries/mediaQueries.src.test.ts",
|
|
87
|
+
"test:mediaQueries:cjs": "vitest run tests/runtime/mediaQueries/mediaQueries.cjs.test.ts tests/runtime/api-surface/mediaQueries.api-surface.cjs.test.ts",
|
|
88
|
+
"test:mediaQueries:esm": "vitest run tests/runtime/mediaQueries/mediaQueries.esm.test.ts tests/runtime/api-surface/mediaQueries.api-surface.esm.test.ts",
|
|
89
|
+
"test:mediaQueries:dist": "npm run test:mediaQueries:cjs && npm run test:mediaQueries:esm",
|
|
75
90
|
"test:core": "vitest run tests/runtime/core/core.src.test.ts",
|
|
76
|
-
"test:cjs": "vitest run tests/runtime/core/core.cjs.test.ts tests/runtime/api-surface/api-surface.cjs.test.ts",
|
|
77
|
-
"test:esm": "vitest run tests/runtime/core/core.esm.test.ts tests/runtime/api-surface/api-surface.esm.test.ts",
|
|
78
|
-
"test:dist": "npm run test:cjs && npm run test:esm",
|
|
79
|
-
"
|
|
80
|
-
"test:
|
|
91
|
+
"test:core:cjs": "vitest run tests/runtime/core/core.cjs.test.ts tests/runtime/api-surface/api-surface.cjs.test.ts",
|
|
92
|
+
"test:core:esm": "vitest run tests/runtime/core/core.esm.test.ts tests/runtime/api-surface/api-surface.esm.test.ts",
|
|
93
|
+
"test:core:dist": "npm run test:core:cjs && npm run test:core:esm",
|
|
94
|
+
"lint": "eslint . --max-warnings=0",
|
|
95
|
+
"test:lint": "npm run lint",
|
|
96
|
+
"test:types": "echo \"\n ๐งช Starting tsd type checks...\n\" && tsd --files tests/types/**/*.test-d.ts && echo \"โ
tsd type checks passed!\n\"",
|
|
97
|
+
"test:tsc": "tsc -p tsconfig.json --noEmit",
|
|
98
|
+
"test:dist": "npm run build && npm run test:core:dist && npm run test:mediaQueries:dist"
|
|
81
99
|
}
|
|
82
100
|
}
|