tw-next-image 1.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +32 -0
- package/dist/breakpoints.d.ts +10 -0
- package/dist/breakpoints.d.ts.map +1 -0
- package/dist/breakpoints.js +8 -0
- package/dist/breakpoints.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/infer-sizes/index.d.ts +4 -0
- package/dist/infer-sizes/index.d.ts.map +1 -0
- package/dist/infer-sizes/index.js +3 -0
- package/dist/infer-sizes/index.js.map +1 -0
- package/dist/infer-sizes.d.ts +3 -0
- package/dist/infer-sizes.d.ts.map +1 -0
- package/dist/infer-sizes.js +65 -0
- package/dist/infer-sizes.js.map +1 -0
- package/dist/internal/aspect-ratio.d.ts +3 -0
- package/dist/internal/aspect-ratio.d.ts.map +1 -0
- package/dist/internal/aspect-ratio.js +73 -0
- package/dist/internal/aspect-ratio.js.map +1 -0
- package/dist/internal/class-names.d.ts +3 -0
- package/dist/internal/class-names.d.ts.map +1 -0
- package/dist/internal/class-names.js +20 -0
- package/dist/internal/class-names.js.map +1 -0
- package/dist/internal/css-length.d.ts +5 -0
- package/dist/internal/css-length.d.ts.map +1 -0
- package/dist/internal/css-length.js +50 -0
- package/dist/internal/css-length.js.map +1 -0
- package/dist/internal/is-non-empty-string.d.ts +2 -0
- package/dist/internal/is-non-empty-string.d.ts.map +1 -0
- package/dist/internal/is-non-empty-string.js +4 -0
- package/dist/internal/is-non-empty-string.js.map +1 -0
- package/dist/internal/size-info.d.ts +5 -0
- package/dist/internal/size-info.d.ts.map +1 -0
- package/dist/internal/size-info.js +105 -0
- package/dist/internal/size-info.js.map +1 -0
- package/dist/internal/tailwind-length.d.ts +3 -0
- package/dist/internal/tailwind-length.d.ts.map +1 -0
- package/dist/internal/tailwind-length.js +93 -0
- package/dist/internal/tailwind-length.js.map +1 -0
- package/dist/internal/tailwind-variants.d.ts +7 -0
- package/dist/internal/tailwind-variants.d.ts.map +1 -0
- package/dist/internal/tailwind-variants.js +63 -0
- package/dist/internal/tailwind-variants.js.map +1 -0
- package/dist/smart-image/get-alt-from-src.d.ts +2 -0
- package/dist/smart-image/get-alt-from-src.d.ts.map +1 -0
- package/dist/smart-image/get-alt-from-src.js +6 -0
- package/dist/smart-image/get-alt-from-src.js.map +1 -0
- package/dist/smart-image/index.d.ts +3 -0
- package/dist/smart-image/index.d.ts.map +1 -0
- package/dist/smart-image/index.js +2 -0
- package/dist/smart-image/index.js.map +1 -0
- package/dist/smart-image/smart-image.d.ts +4 -0
- package/dist/smart-image/smart-image.d.ts.map +1 -0
- package/dist/smart-image/smart-image.js +27 -0
- package/dist/smart-image/smart-image.js.map +1 -0
- package/dist/smart-image/smart-image.types.d.ts +38 -0
- package/dist/smart-image/smart-image.types.d.ts.map +1 -0
- package/dist/smart-image/smart-image.types.js +2 -0
- package/dist/smart-image/smart-image.types.js.map +1 -0
- package/dist/types.d.ts +28 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +75 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 prb
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# tw-next-image
|
|
2
|
+
|
|
3
|
+
Tailwind-first Next.js image component with automatic `sizes` inference.
|
|
4
|
+
|
|
5
|
+
See [DOCS.md](./DOCS.md) for full examples and API reference.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
bun add tw-next-image
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Quick Start
|
|
14
|
+
|
|
15
|
+
```tsx
|
|
16
|
+
import { SmartImage } from "tw-next-image";
|
|
17
|
+
|
|
18
|
+
// sizes inferred from className
|
|
19
|
+
<SmartImage src="/logo.png" className="size-11" />
|
|
20
|
+
// → sizes="44px"
|
|
21
|
+
|
|
22
|
+
// Responsive breakpoints
|
|
23
|
+
<SmartImage src="/avatar.webp" className="size-25 lg:size-30" />
|
|
24
|
+
// → sizes="(min-width: 1024px) 120px, 100px"
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
`SmartImage` wraps `next/image` with `fill` mode—ensure the wrapper has height via `size-*`, `h-*`, `aspect-*`, or
|
|
28
|
+
inline styles.
|
|
29
|
+
|
|
30
|
+
## License
|
|
31
|
+
|
|
32
|
+
MIT
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const DEFAULT_BREAKPOINTS: {
|
|
2
|
+
readonly "2xl": 1536;
|
|
3
|
+
readonly lg: 1024;
|
|
4
|
+
readonly md: 768;
|
|
5
|
+
readonly sm: 640;
|
|
6
|
+
readonly xl: 1280;
|
|
7
|
+
};
|
|
8
|
+
export type Breakpoint = keyof typeof DEFAULT_BREAKPOINTS;
|
|
9
|
+
export type BreakpointConfig = Record<string, number>;
|
|
10
|
+
//# sourceMappingURL=breakpoints.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breakpoints.d.ts","sourceRoot":"","sources":["../src/breakpoints.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,mBAAmB;;;;;;CAMtB,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,mBAAmB,CAAC;AAE1D,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breakpoints.js","sourceRoot":"","sources":["../src/breakpoints.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,KAAK,EAAE,IAAI;IACX,EAAE,EAAE,IAAI;IACR,EAAE,EAAE,GAAG;IACP,EAAE,EAAE,GAAG;IACP,EAAE,EAAE,IAAI;CACA,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { type Breakpoint, type BreakpointConfig, DEFAULT_BREAKPOINTS } from "./breakpoints.js";
|
|
2
|
+
export { inferImageSizes } from "./infer-sizes.js";
|
|
3
|
+
export type { SmartImageProps } from "./smart-image/index.js";
|
|
4
|
+
export { SmartImage } from "./smart-image/index.js";
|
|
5
|
+
export type { InferSizesInput, InferSizesStyle, SizeInfo, StaticImageData } from "./types.js";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0C,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAInD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { type Breakpoint, type BreakpointConfig, DEFAULT_BREAKPOINTS } from "../breakpoints.js";
|
|
2
|
+
export { inferImageSizes } from "../infer-sizes.js";
|
|
3
|
+
export type { InferSizesInput, InferSizesStyle, SizeInfo, StaticImageData } from "../types.js";
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/infer-sizes/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAChG,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/infer-sizes/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAA0C,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAChG,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infer-sizes.d.ts","sourceRoot":"","sources":["../src/infer-sizes.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAY,MAAM,YAAY,CAAC;AA6E5D,wBAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,KAAK,EACL,KAAK,EACL,aAAuC,EACvC,GAAG,EACH,WAAiC,EACjC,aAAkB,GACnB,EAAE,eAAe,GAAG,MAAM,GAAG,IAAI,CAqBjC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { DEFAULT_BREAKPOINTS } from "./breakpoints.js";
|
|
2
|
+
import { getAspectRatioFromClassName, getSrcAspectRatio } from "./internal/aspect-ratio.js";
|
|
3
|
+
import { formatPx, minPx, parsePxNumber } from "./internal/css-length.js";
|
|
4
|
+
import { mergeStyleIntoSizeInfo, parseSizeInfoByBreakpoint } from "./internal/size-info.js";
|
|
5
|
+
const DEFAULT_BASE_SPACING_PX = 4;
|
|
6
|
+
function resolveWidthCandidate(info, aspectRatio) {
|
|
7
|
+
const fromWidthOrMax = (() => {
|
|
8
|
+
if (info.width && info.maxWidth) {
|
|
9
|
+
return minPx(info.width, info.maxWidth) ?? `min(${info.width}, ${info.maxWidth})`;
|
|
10
|
+
}
|
|
11
|
+
return info.width ?? info.maxWidth;
|
|
12
|
+
})();
|
|
13
|
+
if (fromWidthOrMax) {
|
|
14
|
+
return fromWidthOrMax;
|
|
15
|
+
}
|
|
16
|
+
if (!aspectRatio) {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
const height = (() => {
|
|
20
|
+
if (info.height && info.maxHeight) {
|
|
21
|
+
return (minPx(info.height, info.maxHeight) ??
|
|
22
|
+
(parsePxNumber(info.height) === null ? null : info.height) ??
|
|
23
|
+
(parsePxNumber(info.maxHeight) === null ? null : info.maxHeight));
|
|
24
|
+
}
|
|
25
|
+
return info.height ?? info.maxHeight ?? null;
|
|
26
|
+
})();
|
|
27
|
+
if (!height) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
const heightPx = parsePxNumber(height);
|
|
31
|
+
if (heightPx === null) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
return formatPx(heightPx * aspectRatio);
|
|
35
|
+
}
|
|
36
|
+
function buildBreakpointConditions(byBreakpoint, aspectRatio, breakpoints) {
|
|
37
|
+
const conditions = [];
|
|
38
|
+
const orderedBreakpoints = Object.entries(breakpoints).sort((a, b) => b[1] - a[1]);
|
|
39
|
+
for (const [breakpoint, minWidthPx] of orderedBreakpoints) {
|
|
40
|
+
const info = byBreakpoint[breakpoint];
|
|
41
|
+
if (!info) {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
const resolved = resolveWidthCandidate(info, aspectRatio);
|
|
45
|
+
if (!resolved) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
conditions.push(`(min-width: ${minWidthPx}px) ${resolved}`);
|
|
49
|
+
}
|
|
50
|
+
return conditions;
|
|
51
|
+
}
|
|
52
|
+
export function inferImageSizes({ className, style, ratio, baseSpacingPx = DEFAULT_BASE_SPACING_PX, src, breakpoints = DEFAULT_BREAKPOINTS, customSpacing = {}, }) {
|
|
53
|
+
const byBreakpoint = parseSizeInfoByBreakpoint(className, baseSpacingPx, breakpoints, customSpacing);
|
|
54
|
+
const baseInfo = byBreakpoint.base ?? {};
|
|
55
|
+
byBreakpoint.base = baseInfo;
|
|
56
|
+
mergeStyleIntoSizeInfo(baseInfo, style);
|
|
57
|
+
const aspectRatio = ratio ?? getSrcAspectRatio(src) ?? getAspectRatioFromClassName(className);
|
|
58
|
+
const resolvedBase = resolveWidthCandidate(baseInfo, aspectRatio);
|
|
59
|
+
if (!resolvedBase) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
const conditions = buildBreakpointConditions(byBreakpoint, aspectRatio, breakpoints);
|
|
63
|
+
return conditions.length === 0 ? resolvedBase : `${conditions.join(", ")}, ${resolvedBase}`;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=infer-sizes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infer-sizes.js","sourceRoot":"","sources":["../src/infer-sizes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aspect-ratio.d.ts","sourceRoot":"","sources":["../../src/internal/aspect-ratio.ts"],"names":[],"mappings":"AAkBA,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAU7D;AA8CD,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAcxF"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { parseVariantToken } from "./tailwind-variants.js";
|
|
2
|
+
const WHITESPACE_REGEX = /\s+/;
|
|
3
|
+
const ASPECT_FRACTION_REGEX = /^aspect-(\d+(?:\.\d+)?)\/(\d+(?:\.\d+)?)$/;
|
|
4
|
+
const ASPECT_ARBITRARY_REGEX = /^aspect-\[(.+)\]$/;
|
|
5
|
+
function isRecord(value) {
|
|
6
|
+
return typeof value === "object" && value !== null;
|
|
7
|
+
}
|
|
8
|
+
function isStaticImageData(value) {
|
|
9
|
+
if (!isRecord(value)) {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
return typeof value.width === "number" && typeof value.height === "number";
|
|
13
|
+
}
|
|
14
|
+
export function getSrcAspectRatio(src) {
|
|
15
|
+
if (isStaticImageData(src) && src.height !== 0) {
|
|
16
|
+
return src.width / src.height;
|
|
17
|
+
}
|
|
18
|
+
if (isRecord(src) && isStaticImageData(src.default) && src.default.height !== 0) {
|
|
19
|
+
return src.default.width / src.default.height;
|
|
20
|
+
}
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
function parseAspectRatioFromBaseToken(baseToken) {
|
|
24
|
+
if (baseToken === "aspect-square") {
|
|
25
|
+
return 1;
|
|
26
|
+
}
|
|
27
|
+
if (baseToken === "aspect-video") {
|
|
28
|
+
return 16 / 9;
|
|
29
|
+
}
|
|
30
|
+
const fractionMatch = ASPECT_FRACTION_REGEX.exec(baseToken);
|
|
31
|
+
if (fractionMatch) {
|
|
32
|
+
const numerator = Number(fractionMatch[1]);
|
|
33
|
+
const denominator = Number(fractionMatch[2]);
|
|
34
|
+
if (Number.isFinite(numerator) && Number.isFinite(denominator) && denominator !== 0) {
|
|
35
|
+
return numerator / denominator;
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
const match = ASPECT_ARBITRARY_REGEX.exec(baseToken);
|
|
40
|
+
if (!match) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
const raw = match[1]?.replaceAll("_", " ").trim();
|
|
44
|
+
if (!raw) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
if (raw.includes("/")) {
|
|
48
|
+
const [numerator, denominator] = raw.split("/", 2).map((part) => Number(part.trim()));
|
|
49
|
+
if (Number.isFinite(numerator) && Number.isFinite(denominator) && denominator !== 0) {
|
|
50
|
+
return numerator / denominator;
|
|
51
|
+
}
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
const value = Number(raw);
|
|
55
|
+
if (Number.isFinite(value) && value !== 0) {
|
|
56
|
+
return value;
|
|
57
|
+
}
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
export function getAspectRatioFromClassName(className) {
|
|
61
|
+
if (!className) {
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
for (const token of className.split(WHITESPACE_REGEX)) {
|
|
65
|
+
const { base: baseToken } = parseVariantToken(token);
|
|
66
|
+
const aspectRatio = parseAspectRatioFromBaseToken(baseToken);
|
|
67
|
+
if (aspectRatio !== null) {
|
|
68
|
+
return aspectRatio;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=aspect-ratio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aspect-ratio.js","sourceRoot":"","sources":["../../src/internal/aspect-ratio.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"class-names.d.ts","sourceRoot":"","sources":["../../src/internal/class-names.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,SAAS,CAAC;AAI/D,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,SAAS,cAAc,EAAE,GAAG,MAAM,CAqB/D"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { isNonEmptyString } from "./is-non-empty-string.js";
|
|
2
|
+
const whitespaceRegex = /\s+/;
|
|
3
|
+
export function cx(...values) {
|
|
4
|
+
if (values.length === 0) {
|
|
5
|
+
return "";
|
|
6
|
+
}
|
|
7
|
+
const tokens = [];
|
|
8
|
+
for (const value of values) {
|
|
9
|
+
if (!isNonEmptyString(value)) {
|
|
10
|
+
continue;
|
|
11
|
+
}
|
|
12
|
+
const trimmed = value.trim();
|
|
13
|
+
if (!trimmed) {
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
tokens.push(...trimmed.split(whitespaceRegex));
|
|
17
|
+
}
|
|
18
|
+
return tokens.join(" ");
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=class-names.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"class-names.js","sourceRoot":"","sources":["../../src/internal/class-names.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAI5D,MAAM,eAAe,GAAG,KAAK,CAAC;AAE9B,MAAM,UAAU,EAAE,CAAC,GAAG,MAAiC;IACrD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,SAAS;QACX,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function parseStyleLength(value: unknown): string | null;
|
|
2
|
+
export declare function parsePxNumber(length: string): number | null;
|
|
3
|
+
export declare function formatPx(value: number): string;
|
|
4
|
+
export declare function minPx(a: string, b: string): string | null;
|
|
5
|
+
//# sourceMappingURL=css-length.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css-length.d.ts","sourceRoot":"","sources":["../../src/internal/css-length.ts"],"names":[],"mappings":"AAMA,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CA2B9D;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAM3D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG9C;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOzD"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
const CSS_LENGTH_LITERAL_REGEX = /^\d+(\.\d+)?(px|rem|em|vw|vh|vmin|vmax|dvw|lvw|svw|dvh|lvh|svh)$/;
|
|
2
|
+
const CSS_FUNC_LENGTH_REGEX = /^(calc|min|max|clamp)\(.+\)$/;
|
|
3
|
+
const CSS_VAR_REGEX = /^var\(.+\)$/;
|
|
4
|
+
const PX_NUMBER_REGEX = /^(\d+(?:\.\d+)?)px$/;
|
|
5
|
+
const TRAILING_ZEROES_REGEX = /\.0+$/;
|
|
6
|
+
export function parseStyleLength(value) {
|
|
7
|
+
if (value === null || value === undefined) {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
if (typeof value === "number") {
|
|
11
|
+
return `${value}px`;
|
|
12
|
+
}
|
|
13
|
+
if (typeof value !== "string") {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
const trimmed = value.trim();
|
|
17
|
+
if (trimmed === "" || trimmed === "auto") {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
if (CSS_LENGTH_LITERAL_REGEX.test(trimmed)) {
|
|
21
|
+
return trimmed;
|
|
22
|
+
}
|
|
23
|
+
if (CSS_FUNC_LENGTH_REGEX.test(trimmed)) {
|
|
24
|
+
return trimmed;
|
|
25
|
+
}
|
|
26
|
+
if (CSS_VAR_REGEX.test(trimmed)) {
|
|
27
|
+
return trimmed;
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
export function parsePxNumber(length) {
|
|
32
|
+
const match = PX_NUMBER_REGEX.exec(length);
|
|
33
|
+
if (!match) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
return Number(match[1]);
|
|
37
|
+
}
|
|
38
|
+
export function formatPx(value) {
|
|
39
|
+
const rounded = Math.round(value * 1000) / 1000;
|
|
40
|
+
return `${String(rounded).replace(TRAILING_ZEROES_REGEX, "")}px`;
|
|
41
|
+
}
|
|
42
|
+
export function minPx(a, b) {
|
|
43
|
+
const aPx = parsePxNumber(a);
|
|
44
|
+
const bPx = parsePxNumber(b);
|
|
45
|
+
if (aPx === null || bPx === null) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
return formatPx(Math.min(aPx, bPx));
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=css-length.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"css-length.js","sourceRoot":"","sources":["../../src/internal/css-length.ts"],"names":[],"mappings":"AAAA,MAAM,wBAAwB,GAAG,kEAAkE,CAAC;AACpG,MAAM,qBAAqB,GAAG,8BAA8B,CAAC;AAC7D,MAAM,aAAa,GAAG,aAAa,CAAC;AACpC,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAC9C,MAAM,qBAAqB,GAAG,OAAO,CAAC;AAEtC,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,GAAG,KAAK,IAAI,CAAC;IACtB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC7B,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAChD,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,IAAI,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,CAAS,EAAE,CAAS;IACxC,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-non-empty-string.d.ts","sourceRoot":"","sources":["../../src/internal/is-non-empty-string.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAEhE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-non-empty-string.js","sourceRoot":"","sources":["../../src/internal/is-non-empty-string.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACvD,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { BreakpointConfig } from "../breakpoints.js";
|
|
2
|
+
import type { BreakpointKey, InferSizesStyle, SizeInfo } from "../types.js";
|
|
3
|
+
export declare function parseSizeInfoByBreakpoint(className: string | undefined, baseSpacingPx: number, breakpoints: BreakpointConfig, customSpacing?: Record<string, string>): Partial<Record<BreakpointKey, SizeInfo>>;
|
|
4
|
+
export declare function mergeStyleIntoSizeInfo(info: SizeInfo, style: InferSizesStyle | undefined): void;
|
|
5
|
+
//# sourceMappingURL=size-info.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"size-info.d.ts","sourceRoot":"","sources":["../../src/internal/size-info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAmD5E,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,gBAAgB,EAC7B,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACzC,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,CA6B1C;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,eAAe,GAAG,SAAS,QAsBxF"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { parseStyleLength } from "./css-length.js";
|
|
2
|
+
import { parseTailwindLength } from "./tailwind-length.js";
|
|
3
|
+
import { getBreakpoint, parseVariantToken } from "./tailwind-variants.js";
|
|
4
|
+
const WHITESPACE_REGEX = /\s+/;
|
|
5
|
+
const SIZE_REGEX = /^size-(.+)$/;
|
|
6
|
+
const WIDTH_REGEX = /^w-(.+)$/;
|
|
7
|
+
const MAX_WIDTH_REGEX = /^max-w-(.+)$/;
|
|
8
|
+
const HEIGHT_REGEX = /^h-(.+)$/;
|
|
9
|
+
const MAX_HEIGHT_REGEX = /^max-h-(.+)$/;
|
|
10
|
+
const SIZING_HANDLERS = [
|
|
11
|
+
{
|
|
12
|
+
apply: (info, value) => {
|
|
13
|
+
info.width = value;
|
|
14
|
+
info.height = value;
|
|
15
|
+
},
|
|
16
|
+
regex: SIZE_REGEX,
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
apply: (info, value) => {
|
|
20
|
+
info.width = value;
|
|
21
|
+
},
|
|
22
|
+
regex: WIDTH_REGEX,
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
apply: (info, value) => {
|
|
26
|
+
info.maxWidth = value;
|
|
27
|
+
},
|
|
28
|
+
regex: MAX_WIDTH_REGEX,
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
apply: (info, value) => {
|
|
32
|
+
info.height = value;
|
|
33
|
+
},
|
|
34
|
+
regex: HEIGHT_REGEX,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
apply: (info, value) => {
|
|
38
|
+
info.maxHeight = value;
|
|
39
|
+
},
|
|
40
|
+
regex: MAX_HEIGHT_REGEX,
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
export function parseSizeInfoByBreakpoint(className, baseSpacingPx, breakpoints, customSpacing = {}) {
|
|
44
|
+
const byBreakpoint = {};
|
|
45
|
+
if (!className) {
|
|
46
|
+
return byBreakpoint;
|
|
47
|
+
}
|
|
48
|
+
for (const token of className.split(WHITESPACE_REGEX)) {
|
|
49
|
+
if (!token) {
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
const { base: baseToken, variants } = parseVariantToken(token);
|
|
53
|
+
const breakpoint = getBreakpoint(variants, breakpoints);
|
|
54
|
+
const key = breakpoint ?? "base";
|
|
55
|
+
const existing = byBreakpoint[key] ?? {};
|
|
56
|
+
const didApply = applySizingBaseTokenToInfo({
|
|
57
|
+
baseSpacingPx,
|
|
58
|
+
baseToken,
|
|
59
|
+
breakpoints,
|
|
60
|
+
customSpacing,
|
|
61
|
+
info: existing,
|
|
62
|
+
});
|
|
63
|
+
if (didApply) {
|
|
64
|
+
byBreakpoint[key] = existing;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return byBreakpoint;
|
|
68
|
+
}
|
|
69
|
+
export function mergeStyleIntoSizeInfo(info, style) {
|
|
70
|
+
if (!style) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const styleWidth = parseStyleLength(style.width);
|
|
74
|
+
const styleMaxWidth = parseStyleLength(style.maxWidth);
|
|
75
|
+
const styleHeight = parseStyleLength(style.height);
|
|
76
|
+
const styleMaxHeight = parseStyleLength(style.maxHeight);
|
|
77
|
+
if (styleWidth) {
|
|
78
|
+
info.width = styleWidth;
|
|
79
|
+
}
|
|
80
|
+
if (styleMaxWidth) {
|
|
81
|
+
info.maxWidth = styleMaxWidth;
|
|
82
|
+
}
|
|
83
|
+
if (styleHeight) {
|
|
84
|
+
info.height = styleHeight;
|
|
85
|
+
}
|
|
86
|
+
if (styleMaxHeight) {
|
|
87
|
+
info.maxHeight = styleMaxHeight;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
function applySizingBaseTokenToInfo({ baseSpacingPx, baseToken, breakpoints, customSpacing, info, }) {
|
|
91
|
+
for (const handler of SIZING_HANDLERS) {
|
|
92
|
+
const match = handler.regex.exec(baseToken);
|
|
93
|
+
if (!match) {
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
const parsed = parseTailwindLength(match[1] ?? "", baseSpacingPx, breakpoints, customSpacing);
|
|
97
|
+
if (!parsed) {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
handler.apply(info, parsed);
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=size-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"size-info.js","sourceRoot":"","sources":["../../src/internal/size-info.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tailwind-length.d.ts","sourceRoot":"","sources":["../../src/internal/tailwind-length.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAK1D,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,gBAAgB,EAC7B,aAAa,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GACzC,MAAM,GAAG,IAAI,CAcf"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { formatPx } from "./css-length.js";
|
|
2
|
+
const TRAILING_ZEROES_REGEX = /\.0+$/;
|
|
3
|
+
export function parseTailwindLength(raw, baseSpacingPx, breakpoints, customSpacing = {}) {
|
|
4
|
+
if (raw === "auto" || raw === "full") {
|
|
5
|
+
return null;
|
|
6
|
+
}
|
|
7
|
+
return (parseTailwindLengthFromCustomSpacing(raw, customSpacing) ??
|
|
8
|
+
parseTailwindLengthFromScreen(raw, breakpoints) ??
|
|
9
|
+
parseTailwindLengthFromViewport(raw) ??
|
|
10
|
+
parseTailwindLengthFromFraction(raw) ??
|
|
11
|
+
parseTailwindLengthFromArbitraryBrackets(raw) ??
|
|
12
|
+
parseTailwindLengthFromArbitraryParens(raw) ??
|
|
13
|
+
parseTailwindLengthFromNumber(raw, baseSpacingPx));
|
|
14
|
+
}
|
|
15
|
+
function parseTailwindLengthFromCustomSpacing(raw, customSpacing) {
|
|
16
|
+
if (raw in customSpacing) {
|
|
17
|
+
return customSpacing[raw];
|
|
18
|
+
}
|
|
19
|
+
if (raw === "px") {
|
|
20
|
+
return "1px";
|
|
21
|
+
}
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
function parseTailwindLengthFromScreen(raw, breakpoints) {
|
|
25
|
+
if (raw === "screen") {
|
|
26
|
+
return "100vw";
|
|
27
|
+
}
|
|
28
|
+
if (!raw.startsWith("screen-")) {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
const breakpoint = raw.slice("screen-".length);
|
|
32
|
+
if (!(breakpoint in breakpoints)) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
return `${breakpoints[breakpoint]}px`;
|
|
36
|
+
}
|
|
37
|
+
function parseTailwindLengthFromViewport(raw) {
|
|
38
|
+
if (raw === "dvw" ||
|
|
39
|
+
raw === "lvw" ||
|
|
40
|
+
raw === "svw" ||
|
|
41
|
+
raw === "dvh" ||
|
|
42
|
+
raw === "lvh" ||
|
|
43
|
+
raw === "svh") {
|
|
44
|
+
return `100${raw}`;
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
function parseTailwindLengthFromFraction(raw) {
|
|
49
|
+
const [numeratorRaw, denominatorRaw] = raw.split("/", 2);
|
|
50
|
+
if (numeratorRaw === undefined || denominatorRaw === undefined) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
const numerator = Number(numeratorRaw);
|
|
54
|
+
const denominator = Number(denominatorRaw);
|
|
55
|
+
if (!(Number.isFinite(numerator) && Number.isFinite(denominator)) || denominator === 0) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
const percent = (numerator / denominator) * 100;
|
|
59
|
+
if (!Number.isFinite(percent)) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
const rounded = Math.round(percent * 1_000_000) / 1_000_000;
|
|
63
|
+
const formatted = String(rounded).replace(TRAILING_ZEROES_REGEX, "");
|
|
64
|
+
return `${formatted}%`;
|
|
65
|
+
}
|
|
66
|
+
function parseTailwindLengthFromArbitraryBrackets(raw) {
|
|
67
|
+
if (!(raw.startsWith("[") && raw.endsWith("]"))) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
const inner = raw.slice(1, -1).replaceAll("_", " ").trim();
|
|
71
|
+
return inner === "" ? null : inner;
|
|
72
|
+
}
|
|
73
|
+
function parseTailwindLengthFromArbitraryParens(raw) {
|
|
74
|
+
if (!(raw.startsWith("(") && raw.endsWith(")"))) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
const inner = raw.slice(1, -1).trim();
|
|
78
|
+
if (inner === "") {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
if (inner.startsWith("--")) {
|
|
82
|
+
return `var(${inner})`;
|
|
83
|
+
}
|
|
84
|
+
return inner;
|
|
85
|
+
}
|
|
86
|
+
function parseTailwindLengthFromNumber(raw, baseSpacingPx) {
|
|
87
|
+
const numberValue = Number(raw);
|
|
88
|
+
if (!Number.isFinite(numberValue) || numberValue < 0) {
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
return formatPx(numberValue * baseSpacingPx);
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=tailwind-length.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tailwind-length.js","sourceRoot":"","sources":["../../src/internal/tailwind-length.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { BreakpointConfig } from "../breakpoints.js";
|
|
2
|
+
export declare function parseVariantToken(token: string): {
|
|
3
|
+
base: string;
|
|
4
|
+
variants: string[];
|
|
5
|
+
};
|
|
6
|
+
export declare function getBreakpoint(variants: string[], breakpoints: BreakpointConfig): string | null;
|
|
7
|
+
//# sourceMappingURL=tailwind-variants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tailwind-variants.d.ts","sourceRoot":"","sources":["../../src/internal/tailwind-variants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAuD1D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAkBrF;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAO9F"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
function splitVariantsAndBase(token) {
|
|
2
|
+
const state = { bracketDepth: 0, current: "", parenDepth: 0, parts: [] };
|
|
3
|
+
for (const char of token) {
|
|
4
|
+
state.bracketDepth = nextBracketDepth(state.bracketDepth, state.parenDepth, char);
|
|
5
|
+
state.parenDepth = nextParenDepth(state.parenDepth, state.bracketDepth, char);
|
|
6
|
+
if (char === ":" && state.bracketDepth === 0 && state.parenDepth === 0) {
|
|
7
|
+
state.parts.push(state.current);
|
|
8
|
+
state.current = "";
|
|
9
|
+
continue;
|
|
10
|
+
}
|
|
11
|
+
state.current += char;
|
|
12
|
+
}
|
|
13
|
+
state.parts.push(state.current);
|
|
14
|
+
return state.parts;
|
|
15
|
+
}
|
|
16
|
+
function nextBracketDepth(current, parenDepth, char) {
|
|
17
|
+
if (parenDepth !== 0) {
|
|
18
|
+
return current;
|
|
19
|
+
}
|
|
20
|
+
if (char === "[") {
|
|
21
|
+
return current + 1;
|
|
22
|
+
}
|
|
23
|
+
if (char === "]" && current > 0) {
|
|
24
|
+
return current - 1;
|
|
25
|
+
}
|
|
26
|
+
return current;
|
|
27
|
+
}
|
|
28
|
+
function nextParenDepth(current, bracketDepth, char) {
|
|
29
|
+
if (bracketDepth !== 0) {
|
|
30
|
+
return current;
|
|
31
|
+
}
|
|
32
|
+
if (char === "(") {
|
|
33
|
+
return current + 1;
|
|
34
|
+
}
|
|
35
|
+
if (char === ")" && current > 0) {
|
|
36
|
+
return current - 1;
|
|
37
|
+
}
|
|
38
|
+
return current;
|
|
39
|
+
}
|
|
40
|
+
export function parseVariantToken(token) {
|
|
41
|
+
if (!token.includes(":")) {
|
|
42
|
+
return { base: token, variants: [] };
|
|
43
|
+
}
|
|
44
|
+
const parts = splitVariantsAndBase(token);
|
|
45
|
+
if (parts.length <= 1) {
|
|
46
|
+
return { base: token, variants: [] };
|
|
47
|
+
}
|
|
48
|
+
if (parts.some((part) => part === "")) {
|
|
49
|
+
return { base: token, variants: [] };
|
|
50
|
+
}
|
|
51
|
+
const base = parts.at(-1) ?? token;
|
|
52
|
+
const variants = parts.slice(0, -1).filter(Boolean);
|
|
53
|
+
return { base, variants };
|
|
54
|
+
}
|
|
55
|
+
export function getBreakpoint(variants, breakpoints) {
|
|
56
|
+
for (const variant of variants) {
|
|
57
|
+
if (variant in breakpoints) {
|
|
58
|
+
return variant;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=tailwind-variants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tailwind-variants.js","sourceRoot":"","sources":["../../src/internal/tailwind-variants.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-alt-from-src.d.ts","sourceRoot":"","sources":["../../src/smart-image/get-alt-from-src.ts"],"names":[],"mappings":"AAMA,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGjD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-alt-from-src.js","sourceRoot":"","sources":["../../src/smart-image/get-alt-from-src.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG,UAAU,CAAC;AAMlC,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;IAC5C,OAAO,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/smart-image/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/smart-image/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CSSProperties } from "react";
|
|
2
|
+
import type { SmartImageProps } from "./smart-image.types.js";
|
|
3
|
+
export declare function SmartImage<C extends string | undefined = undefined, S extends CSSProperties | undefined = undefined>({ alt, className, imgClassName, imgStyle, ratio, sizes, src, style, ...props }: SmartImageProps<C, S>): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
//# sourceMappingURL=smart-image.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smart-image.d.ts","sourceRoot":"","sources":["../../src/smart-image/smart-image.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAK3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAkB9D,wBAAgB,UAAU,CACxB,CAAC,SAAS,MAAM,GAAG,SAAS,GAAG,SAAS,EACxC,CAAC,SAAS,aAAa,GAAG,SAAS,GAAG,SAAS,EAC/C,EACA,GAAG,EACH,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,KAAK,EACL,KAAK,EACL,GAAG,EACH,KAAK,EACL,GAAG,KAAK,EACT,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,2CAwCvB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import NextImage from "next/image.js";
|
|
3
|
+
import { inferImageSizes } from "../infer-sizes.js";
|
|
4
|
+
import { cx } from "../internal/class-names.js";
|
|
5
|
+
import { getAltFromSrc } from "./get-alt-from-src.js";
|
|
6
|
+
const HAS_HEIGHT_OR_ASPECT_CLASS_REGEX = /(^|\s)(size-|h-|max-h-|aspect-)/;
|
|
7
|
+
let didWarnMissingLayoutSizing = false;
|
|
8
|
+
export function SmartImage({ alt, className, imgClassName, imgStyle, ratio, sizes, src, style, ...props }) {
|
|
9
|
+
const derivedAlt = alt ?? (props["aria-hidden"] ? "" : getAltFromSrc(typeof src === "string" ? src : ""));
|
|
10
|
+
const inferredSizes = sizes ?? inferImageSizes({ className, ratio, src, style });
|
|
11
|
+
if (!didWarnMissingLayoutSizing && process.env.NODE_ENV !== "production") {
|
|
12
|
+
const classTokens = className ?? "";
|
|
13
|
+
const hasHeightOrAspectClass = HAS_HEIGHT_OR_ASPECT_CLASS_REGEX.test(classTokens);
|
|
14
|
+
const hasHeightOrAspectStyle = Boolean(style?.height || style?.maxHeight || style?.aspectRatio);
|
|
15
|
+
if (!(hasHeightOrAspectClass || hasHeightOrAspectStyle || ratio)) {
|
|
16
|
+
didWarnMissingLayoutSizing = true;
|
|
17
|
+
console.warn("SmartImage: `fill` requires the wrapper to have a height. " +
|
|
18
|
+
"Use `size-*`/`h-*`, an `aspect-*` class, inline `style={{ aspectRatio }}`, or pass `ratio`.");
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (!inferredSizes && process.env.NODE_ENV !== "production") {
|
|
22
|
+
throw new Error("SmartImage: missing `sizes` and couldn't infer from className/style. " +
|
|
23
|
+
"Add Tailwind sizing classes (size-*, w-*, max-w-*) or pass `sizes` explicitly.");
|
|
24
|
+
}
|
|
25
|
+
return (_jsx("span", { className: cx("relative inline-block", className), style: style, children: _jsx(NextImage, { ...props, alt: derivedAlt, className: cx("object-contain", imgClassName), fill: true, sizes: inferredSizes ?? "100vw", src: src, style: imgStyle }) }));
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=smart-image.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smart-image.js","sourceRoot":"","sources":["../../src/smart-image/smart-image.tsx"],"names":[],"mappings":";AAAA,OAAO,SAAS,MAAM,eAAe,CAAC;AAGtC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,EAAE,EAAE,MAAM,4BAA4B,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,MAAM,gCAAgC,GAAG,iCAAiC,CAAC;AAE3E,IAAI,0BAA0B,GAAG,KAAK,CAAC;AAcvC,MAAM,UAAU,UAAU,CAGxB,EACA,GAAG,EACH,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,KAAK,EACL,KAAK,EACL,GAAG,EACH,KAAK,EACL,GAAG,KAAK,EACc;IACtB,MAAM,UAAU,GACd,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEzF,MAAM,aAAa,GAAG,KAAK,IAAI,eAAe,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IAEjF,IAAI,CAAC,0BAA0B,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QACzE,MAAM,WAAW,GAAG,SAAS,IAAI,EAAE,CAAC;QACpC,MAAM,sBAAsB,GAAG,gCAAgC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAClF,MAAM,sBAAsB,GAAG,OAAO,CAAC,KAAK,EAAE,MAAM,IAAI,KAAK,EAAE,SAAS,IAAI,KAAK,EAAE,WAAW,CAAC,CAAC;QAEhG,IAAI,CAAC,CAAC,sBAAsB,IAAI,sBAAsB,IAAI,KAAK,CAAC,EAAE,CAAC;YACjE,0BAA0B,GAAG,IAAI,CAAC;YAClC,OAAO,CAAC,IAAI,CACV,4DAA4D;gBAC1D,6FAA6F,CAChG,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CACb,uEAAuE;YACrE,gFAAgF,CACnF,CAAC;IACJ,CAAC;IAED,OAAO,CACL,eAAM,SAAS,EAAE,EAAE,CAAC,uBAAuB,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,YACnE,KAAC,SAAS,OACJ,KAAK,EACT,GAAG,EAAE,UAAU,EACf,SAAS,EAAE,EAAE,CAAC,gBAAgB,EAAE,YAAY,CAAC,EAC7C,IAAI,QACJ,KAAK,EAAE,aAAa,IAAI,OAAO,EAC/B,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,QAAQ,GACf,GACG,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { ImageProps as NextImageProps } from "next/image.js";
|
|
2
|
+
import type { CSSProperties } from "react";
|
|
3
|
+
type Simplify<T> = {
|
|
4
|
+
[K in keyof T]: T[K];
|
|
5
|
+
} & {};
|
|
6
|
+
type IsStringLiteral<T> = T extends string ? (string extends T ? false : true) : false;
|
|
7
|
+
type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick<T, Exclude<keyof T, Keys>> & {
|
|
8
|
+
[K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>;
|
|
9
|
+
}[Keys];
|
|
10
|
+
type NextImageBaseProps = Omit<NextImageProps, "alt" | "className" | "fill" | "height" | "sizes" | "style" | "width">;
|
|
11
|
+
type InferableTailwindLengthValue = `${number}` | `[${string}]` | `(${string})` | "container" | "edge" | "dvh" | "dvw" | "lvh" | "lvw" | "px" | "screen" | "svh" | "svw" | `screen-${string}`;
|
|
12
|
+
type HasInferableClassSizingToken<C extends string> = C extends `${string}size-${InferableTailwindLengthValue}${string}` | `${string}w-${InferableTailwindLengthValue}${string}` | `${string}max-w-${InferableTailwindLengthValue}${string}` ? true : false;
|
|
13
|
+
type IsBroadStyle<S> = [NonNullable<S>] extends [CSSProperties] ? CSSProperties extends NonNullable<S> ? true : false : false;
|
|
14
|
+
type CanInferFromClassName<C> = [NonNullable<C>] extends [string] ? IsStringLiteral<NonNullable<C>> extends true ? HasInferableClassSizingToken<NonNullable<C>> : false : false;
|
|
15
|
+
type InferableStyle = RequireAtLeastOne<CSSProperties, "maxWidth" | "width">;
|
|
16
|
+
type CanInferFromStyle<S> = [NonNullable<S>] extends [CSSProperties] ? IsBroadStyle<S> extends true ? false : NonNullable<S> extends InferableStyle ? true : false : false;
|
|
17
|
+
type SizesConstraint<C, S> = {
|
|
18
|
+
sizes: string;
|
|
19
|
+
} | (CanInferFromClassName<C> extends true ? {
|
|
20
|
+
sizes?: string;
|
|
21
|
+
} : never) | (CanInferFromStyle<S> extends true ? {
|
|
22
|
+
sizes?: string;
|
|
23
|
+
} : never) | ([NonNullable<C>] extends [string] ? IsStringLiteral<NonNullable<C>> extends false ? {
|
|
24
|
+
sizes?: string;
|
|
25
|
+
} : never : never) | (IsBroadStyle<S> extends true ? {
|
|
26
|
+
sizes?: string;
|
|
27
|
+
} : never);
|
|
28
|
+
export type SmartImageProps<C extends string | undefined = undefined, S extends CSSProperties | undefined = undefined> = Simplify<NextImageBaseProps & {
|
|
29
|
+
alt?: string;
|
|
30
|
+
className?: C;
|
|
31
|
+
style?: S;
|
|
32
|
+
imgClassName?: string;
|
|
33
|
+
imgStyle?: NextImageProps["style"];
|
|
34
|
+
ratio?: number;
|
|
35
|
+
sizes?: string;
|
|
36
|
+
} & SizesConstraint<C, S>>;
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=smart-image.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smart-image.types.d.ts","sourceRoot":"","sources":["../../src/smart-image/smart-image.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"smart-image.types.js","sourceRoot":"","sources":["../../src/smart-image/smart-image.types.ts"],"names":[],"mappings":""}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { BreakpointConfig } from "./breakpoints.js";
|
|
2
|
+
export type BreakpointKey = string | "base";
|
|
3
|
+
export type InferSizesStyle = Partial<{
|
|
4
|
+
width: number | string | null | undefined;
|
|
5
|
+
maxWidth: number | string | null | undefined;
|
|
6
|
+
height: number | string | null | undefined;
|
|
7
|
+
maxHeight: number | string | null | undefined;
|
|
8
|
+
}>;
|
|
9
|
+
export type InferSizesInput = {
|
|
10
|
+
baseSpacingPx?: number;
|
|
11
|
+
breakpoints?: BreakpointConfig;
|
|
12
|
+
className?: string;
|
|
13
|
+
customSpacing?: Record<string, string>;
|
|
14
|
+
ratio?: number;
|
|
15
|
+
src?: unknown;
|
|
16
|
+
style?: InferSizesStyle;
|
|
17
|
+
};
|
|
18
|
+
export type SizeInfo = {
|
|
19
|
+
height?: string;
|
|
20
|
+
maxHeight?: string;
|
|
21
|
+
maxWidth?: string;
|
|
22
|
+
width?: string;
|
|
23
|
+
};
|
|
24
|
+
export type StaticImageData = {
|
|
25
|
+
height: number;
|
|
26
|
+
width: number;
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,CAAC;AAE5C,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC;IACpC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1C,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC7C,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3C,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAC/C,CAAC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG;IAK5B,aAAa,CAAC,EAAE,MAAM,CAAC;IAKvB,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IAKnB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAKvC,KAAK,CAAC,EAAE,MAAM,CAAC;IAIf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,eAAe,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
{
|
|
2
|
+
"description": "Tailwind-first Next.js Image component with automatic sizes inference.",
|
|
3
|
+
"homepage": "https://github.com/PaulRBerg/tw-next-image",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"name": "tw-next-image",
|
|
7
|
+
"sideEffects": false,
|
|
8
|
+
"type": "module",
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"version": "1.0.0-beta.0",
|
|
11
|
+
"files": [
|
|
12
|
+
"dist/**",
|
|
13
|
+
"LICENSE"
|
|
14
|
+
],
|
|
15
|
+
"keywords": [
|
|
16
|
+
"nextjs",
|
|
17
|
+
"next-image",
|
|
18
|
+
"tailwindcss",
|
|
19
|
+
"tailwind",
|
|
20
|
+
"images",
|
|
21
|
+
"react"
|
|
22
|
+
],
|
|
23
|
+
"author": {
|
|
24
|
+
"name": "Paul Razvan Berg",
|
|
25
|
+
"url": "https://github.com/PaulRBerg"
|
|
26
|
+
},
|
|
27
|
+
"bugs": {
|
|
28
|
+
"url": "https://github.com/PaulRBerg/tw-next-image/issues"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@biomejs/biome": "^2.3.10",
|
|
32
|
+
"@sablier/devkit": "^1.9.1",
|
|
33
|
+
"@testing-library/jest-dom": "^6.9.1",
|
|
34
|
+
"@testing-library/react": "^16.3.1",
|
|
35
|
+
"@types/node": "^25.0.3",
|
|
36
|
+
"@types/react": "^19.2.7",
|
|
37
|
+
"@vitest/ui": "^4.0.16",
|
|
38
|
+
"husky": "^9.1.7",
|
|
39
|
+
"jsdom": "^27.3.0",
|
|
40
|
+
"lint-staged": "^16.2.7",
|
|
41
|
+
"next": "^16.0.10",
|
|
42
|
+
"prettier": "^3.7.4",
|
|
43
|
+
"react": "^19.2.3",
|
|
44
|
+
"typescript": "^5.9.3",
|
|
45
|
+
"ultracite": "^6.4.2",
|
|
46
|
+
"vitest": "^4.0.16"
|
|
47
|
+
},
|
|
48
|
+
"exports": {
|
|
49
|
+
".": {
|
|
50
|
+
"types": "./dist/index.d.ts",
|
|
51
|
+
"import": "./dist/index.js"
|
|
52
|
+
},
|
|
53
|
+
"./infer-sizes": {
|
|
54
|
+
"types": "./dist/infer-sizes/index.d.ts",
|
|
55
|
+
"import": "./dist/infer-sizes/index.js"
|
|
56
|
+
},
|
|
57
|
+
"./smart-image": {
|
|
58
|
+
"types": "./dist/smart-image/index.d.ts",
|
|
59
|
+
"import": "./dist/smart-image/index.js"
|
|
60
|
+
},
|
|
61
|
+
"./internal/*": null,
|
|
62
|
+
"./package.json": "./package.json"
|
|
63
|
+
},
|
|
64
|
+
"peerDependencies": {
|
|
65
|
+
"next": ">=13.0.0",
|
|
66
|
+
"react": ">=18.0.0"
|
|
67
|
+
},
|
|
68
|
+
"repository": {
|
|
69
|
+
"type": "git",
|
|
70
|
+
"url": "https://github.com/PaulRBerg/tw-next-image.git"
|
|
71
|
+
},
|
|
72
|
+
"scripts": {
|
|
73
|
+
"setup": "husky"
|
|
74
|
+
}
|
|
75
|
+
}
|