tw-next-image 1.0.0-beta.0 → 1.0.0-beta.1
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 +11 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/class-names.d.ts +3 -1
- package/dist/internal/class-names.d.ts.map +1 -1
- package/dist/internal/class-names.js +12 -2
- package/dist/internal/class-names.js.map +1 -1
- package/dist/smart-image/create-smart-image.d.ts +3 -0
- package/dist/smart-image/create-smart-image.d.ts.map +1 -0
- package/dist/smart-image/create-smart-image.js +53 -0
- package/dist/smart-image/create-smart-image.js.map +1 -0
- package/dist/smart-image/create-smart-image.types.d.ts +11 -0
- package/dist/smart-image/create-smart-image.types.d.ts.map +1 -0
- package/dist/smart-image/create-smart-image.types.js +2 -0
- package/dist/smart-image/create-smart-image.types.js.map +1 -0
- package/dist/smart-image/index.d.ts +2 -0
- package/dist/smart-image/index.d.ts.map +1 -1
- package/dist/smart-image/index.js +1 -0
- package/dist/smart-image/index.js.map +1 -1
- package/dist/smart-image/smart-image.d.ts +1 -1
- package/dist/smart-image/smart-image.d.ts.map +1 -1
- package/dist/smart-image/smart-image.js +4 -25
- package/dist/smart-image/smart-image.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -27,6 +27,17 @@ import { SmartImage } from "tw-next-image";
|
|
|
27
27
|
`SmartImage` wraps `next/image` with `fill` mode—ensure the wrapper has height via `size-*`, `h-*`, `aspect-*`, or
|
|
28
28
|
inline styles.
|
|
29
29
|
|
|
30
|
+
## Custom `tailwind-merge` (Recommended)
|
|
31
|
+
|
|
32
|
+
If your app has a custom `tailwind-merge` config, inject it via `createSmartImage`:
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
import { createSmartImage } from "tw-next-image";
|
|
36
|
+
import { customTwMerge } from "./tailwind/merge";
|
|
37
|
+
|
|
38
|
+
export const SmartImage = createSmartImage({ cx: customTwMerge });
|
|
39
|
+
```
|
|
40
|
+
|
|
30
41
|
## License
|
|
31
42
|
|
|
32
43
|
MIT
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { type Breakpoint, type BreakpointConfig, DEFAULT_BREAKPOINTS } from "./breakpoints.js";
|
|
2
2
|
export { inferImageSizes } from "./infer-sizes.js";
|
|
3
3
|
export type { SmartImageProps } from "./smart-image/index.js";
|
|
4
|
-
export { SmartImage } from "./smart-image/index.js";
|
|
4
|
+
export { SmartImage, createSmartImage } from "./smart-image/index.js";
|
|
5
|
+
export type { CreateSmartImageOptions, SmartImageClassNameFn, SmartImageComponent, } from "./smart-image/index.js";
|
|
5
6
|
export type { InferSizesInput, InferSizesStyle, SizeInfo, StaticImageData } from "./types.js";
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +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;
|
|
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,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACtE,YAAY,EACV,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export { DEFAULT_BREAKPOINTS } from "./breakpoints.js";
|
|
2
2
|
export { inferImageSizes } from "./infer-sizes.js";
|
|
3
|
-
export { SmartImage } from "./smart-image/index.js";
|
|
3
|
+
export { SmartImage, createSmartImage } from "./smart-image/index.js";
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +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"}
|
|
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,gBAAgB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
export type ClassNameValue =
|
|
1
|
+
export type ClassNameValue = ClassNameArray | string | null | undefined | 0 | 0n | false;
|
|
2
|
+
type ClassNameArray = ClassNameValue[];
|
|
2
3
|
export declare function cx(...values: readonly ClassNameValue[]): string;
|
|
4
|
+
export {};
|
|
3
5
|
//# sourceMappingURL=class-names.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class-names.d.ts","sourceRoot":"","sources":["../../src/internal/class-names.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG,
|
|
1
|
+
{"version":3,"file":"class-names.d.ts","sourceRoot":"","sources":["../../src/internal/class-names.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;AACzF,KAAK,cAAc,GAAG,cAAc,EAAE,CAAC;AAIvC,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,SAAS,cAAc,EAAE,GAAG,MAAM,CAU/D"}
|
|
@@ -5,7 +5,18 @@ export function cx(...values) {
|
|
|
5
5
|
return "";
|
|
6
6
|
}
|
|
7
7
|
const tokens = [];
|
|
8
|
+
appendTokens(tokens, values);
|
|
9
|
+
return tokens.join(" ");
|
|
10
|
+
}
|
|
11
|
+
function appendTokens(out, values) {
|
|
8
12
|
for (const value of values) {
|
|
13
|
+
if (!value) {
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
if (Array.isArray(value)) {
|
|
17
|
+
appendTokens(out, value);
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
9
20
|
if (!isNonEmptyString(value)) {
|
|
10
21
|
continue;
|
|
11
22
|
}
|
|
@@ -13,8 +24,7 @@ export function cx(...values) {
|
|
|
13
24
|
if (!trimmed) {
|
|
14
25
|
continue;
|
|
15
26
|
}
|
|
16
|
-
|
|
27
|
+
out.push(...trimmed.split(whitespaceRegex));
|
|
17
28
|
}
|
|
18
|
-
return tokens.join(" ");
|
|
19
29
|
}
|
|
20
30
|
//# sourceMappingURL=class-names.js.map
|
|
@@ -1 +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;
|
|
1
|
+
{"version":3,"file":"class-names.js","sourceRoot":"","sources":["../../src/internal/class-names.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAK5D,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,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE7B,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,YAAY,CAAC,GAAa,EAAE,MAAiC;IACpE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,SAAS;QACX,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACzB,SAAS;QACX,CAAC;QAED,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,GAAG,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-smart-image.d.ts","sourceRoot":"","sources":["../../src/smart-image/create-smart-image.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AA+DlG,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,uBAA4B,GAAG,mBAAmB,CAqD3F"}
|
|
@@ -0,0 +1,53 @@
|
|
|
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 as defaultCx } 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
|
+
function getDerivedAlt({ alt, ariaHidden, src, }) {
|
|
8
|
+
if (alt !== undefined) {
|
|
9
|
+
return alt;
|
|
10
|
+
}
|
|
11
|
+
const isAriaHidden = ariaHidden === true || ariaHidden === "true";
|
|
12
|
+
if (isAriaHidden) {
|
|
13
|
+
return "";
|
|
14
|
+
}
|
|
15
|
+
return getAltFromSrc(typeof src === "string" ? src : "");
|
|
16
|
+
}
|
|
17
|
+
function warnMissingLayoutSizingOnce({ className, ratio, style, shouldWarn, didWarn, }) {
|
|
18
|
+
if (!shouldWarn || didWarn) {
|
|
19
|
+
return didWarn;
|
|
20
|
+
}
|
|
21
|
+
const classTokens = className ?? "";
|
|
22
|
+
const hasHeightOrAspectClass = HAS_HEIGHT_OR_ASPECT_CLASS_REGEX.test(classTokens);
|
|
23
|
+
const hasHeightOrAspectStyle = Boolean(style?.height || style?.maxHeight || style?.aspectRatio);
|
|
24
|
+
if (hasHeightOrAspectClass || hasHeightOrAspectStyle || ratio) {
|
|
25
|
+
return didWarn;
|
|
26
|
+
}
|
|
27
|
+
console.warn("SmartImage: `fill` requires the wrapper to have a height. " +
|
|
28
|
+
"Use `size-*`/`h-*`, an `aspect-*` class, inline `style={{ aspectRatio }}`, or pass `ratio`.");
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
export function createSmartImage(options = {}) {
|
|
32
|
+
const cx = options.cx ?? defaultCx;
|
|
33
|
+
const baseWrapperClassName = options.wrapperClassName ?? "relative inline-block";
|
|
34
|
+
const baseImgClassName = options.imgClassName ?? "object-contain";
|
|
35
|
+
let didWarnMissingLayoutSizing = false;
|
|
36
|
+
return function SmartImage({ alt, className, imgClassName, imgStyle, ratio, sizes, src, style, ...props }) {
|
|
37
|
+
const derivedAlt = getDerivedAlt({ alt, ariaHidden: props["aria-hidden"], src });
|
|
38
|
+
const inferredSizes = sizes ?? inferImageSizes({ className, ratio, src, style });
|
|
39
|
+
didWarnMissingLayoutSizing = warnMissingLayoutSizingOnce({
|
|
40
|
+
className,
|
|
41
|
+
didWarn: didWarnMissingLayoutSizing,
|
|
42
|
+
ratio,
|
|
43
|
+
shouldWarn: process.env.NODE_ENV !== "production",
|
|
44
|
+
style,
|
|
45
|
+
});
|
|
46
|
+
if (!inferredSizes && process.env.NODE_ENV !== "production") {
|
|
47
|
+
throw new Error("SmartImage: missing `sizes` and couldn't infer from className/style. " +
|
|
48
|
+
"Add Tailwind sizing classes (size-*, w-*, max-w-*) or pass `sizes` explicitly.");
|
|
49
|
+
}
|
|
50
|
+
return (_jsx("span", { className: cx(baseWrapperClassName, className), style: style, children: _jsx(NextImage, { ...props, alt: derivedAlt, className: cx(baseImgClassName, imgClassName), fill: true, sizes: inferredSizes ?? "100vw", src: src, style: imgStyle }) }));
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=create-smart-image.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-smart-image.js","sourceRoot":"","sources":["../../src/smart-image/create-smart-image.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CSSProperties } from "react";
|
|
2
|
+
import type { ClassNameValue } from "../internal/class-names.js";
|
|
3
|
+
import type { SmartImageProps } from "./smart-image.types.js";
|
|
4
|
+
export type SmartImageClassNameFn = (...values: readonly ClassNameValue[]) => string;
|
|
5
|
+
export type CreateSmartImageOptions = {
|
|
6
|
+
cx?: SmartImageClassNameFn;
|
|
7
|
+
wrapperClassName?: ClassNameValue;
|
|
8
|
+
imgClassName?: ClassNameValue;
|
|
9
|
+
};
|
|
10
|
+
export type SmartImageComponent = <C extends string | undefined = undefined, S extends CSSProperties | undefined = undefined>(props: SmartImageProps<C, S>) => React.ReactElement;
|
|
11
|
+
//# sourceMappingURL=create-smart-image.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-smart-image.types.d.ts","sourceRoot":"","sources":["../../src/smart-image/create-smart-image.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,MAAM,qBAAqB,GAAG,CAAC,GAAG,MAAM,EAAE,SAAS,cAAc,EAAE,KAAK,MAAM,CAAC;AAErF,MAAM,MAAM,uBAAuB,GAAG;IAOpC,EAAE,CAAC,EAAE,qBAAqB,CAAC;IAE3B,gBAAgB,CAAC,EAAE,cAAc,CAAC;IAElC,YAAY,CAAC,EAAE,cAAc,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAChC,CAAC,SAAS,MAAM,GAAG,SAAS,GAAG,SAAS,EACxC,CAAC,SAAS,aAAa,GAAG,SAAS,GAAG,SAAS,EAE/C,KAAK,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,KACzB,KAAK,CAAC,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-smart-image.types.js","sourceRoot":"","sources":["../../src/smart-image/create-smart-image.types.ts"],"names":[],"mappings":""}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { SmartImage } from "./smart-image.js";
|
|
2
|
+
export { createSmartImage } from "./create-smart-image.js";
|
|
3
|
+
export type { CreateSmartImageOptions, SmartImageClassNameFn, SmartImageComponent } from "./create-smart-image.types.js";
|
|
2
4
|
export type { SmartImageProps } from "./smart-image.types.js";
|
|
3
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +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"}
|
|
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,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACzH,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/smart-image/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/smart-image/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { CSSProperties } from "react";
|
|
2
2
|
import type { SmartImageProps } from "./smart-image.types.js";
|
|
3
|
-
export declare function SmartImage<C extends string | undefined = undefined, S extends CSSProperties | undefined = undefined>(
|
|
3
|
+
export declare function SmartImage<C extends string | undefined = undefined, S extends CSSProperties | undefined = undefined>(props: SmartImageProps<C, S>): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
4
4
|
//# sourceMappingURL=smart-image.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smart-image.d.ts","sourceRoot":"","sources":["../../src/smart-image/smart-image.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"smart-image.d.ts","sourceRoot":"","sources":["../../src/smart-image/smart-image.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAG3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAgB9D,wBAAgB,UAAU,CACxB,CAAC,SAAS,MAAM,GAAG,SAAS,GAAG,SAAS,EACxC,CAAC,SAAS,aAAa,GAAG,SAAS,GAAG,SAAS,EAC/C,KAAK,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,8FAE7B"}
|
|
@@ -1,27 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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 }) }));
|
|
1
|
+
import { createSmartImage } from "./create-smart-image.js";
|
|
2
|
+
const SmartImageImpl = createSmartImage();
|
|
3
|
+
export function SmartImage(props) {
|
|
4
|
+
return SmartImageImpl(props);
|
|
26
5
|
}
|
|
27
6
|
//# sourceMappingURL=smart-image.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smart-image.js","sourceRoot":"","sources":["../../src/smart-image/smart-image.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"smart-image.js","sourceRoot":"","sources":["../../src/smart-image/smart-image.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAG3D,MAAM,cAAc,GAAG,gBAAgB,EAAE,CAAC;AAc1C,MAAM,UAAU,UAAU,CAGxB,KAA4B;IAC5B,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC"}
|