@makeswift/runtime 0.11.8 → 0.11.9

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/dist/Image.cjs.js CHANGED
@@ -85,7 +85,8 @@ const ImageComponent = React.forwardRef(function Image2({
85
85
  opacity,
86
86
  boxShadow,
87
87
  placeholder = placeholders.placeholders.image,
88
- className
88
+ className,
89
+ priority
89
90
  }, ref) {
90
91
  const fileId = tsPattern.match(file).with(tsPattern.P.string, (v) => v).with({
91
92
  type: "makeswift-file",
@@ -144,9 +145,11 @@ const ImageComponent = React.forwardRef(function Image2({
144
145
  sizes: imageSizes(breakpoints, width),
145
146
  alt: altText,
146
147
  width: dimensions.width,
147
- height: dimensions.height
148
+ height: dimensions.height,
149
+ priority
148
150
  }) : /* @__PURE__ */ jsxRuntime.jsx(NextImage__default["default"], {
149
151
  src: imageSrc,
152
+ priority,
150
153
  sizes: imageSizes(breakpoints, width),
151
154
  alt: altText != null ? altText : "",
152
155
  width: dimensions.width,
@@ -1 +1 @@
1
- {"version":3,"file":"Image.cjs.js","sources":["../src/components/builtin/Image/Image.tsx"],"sourcesContent":["import { useState, useEffect, Ref, forwardRef } from 'react'\nimport NextImage from 'next/image'\nimport type NextLegacyImageType from 'next/legacy/image'\n\nimport {\n ElementIDValue,\n ImageValue,\n LinkValue,\n ResponsiveOpacityValue,\n TextInputValue,\n WidthValue,\n} from '../../../prop-controllers/descriptors'\nimport { Breakpoints, findBreakpointOverride } from '../../../state/modules/breakpoints'\nimport { placeholders } from '../../utils/placeholders'\nimport { Link } from '../../shared/Link'\nimport { cx } from '@emotion/css'\nimport { useStyle } from '../../../runtimes/react/use-style'\nimport { useResponsiveStyle, useResponsiveWidth } from '../../utils/responsive-style'\nimport { useFile } from '../../../runtimes/react/hooks/makeswift-api'\nimport { major as nextMajorVersion } from '../../../next/next-version'\nimport { useBreakpoints } from '../../../runtimes/react'\nimport { match, P } from 'ts-pattern'\n\nconst NextLegacyImage = NextImage as typeof NextLegacyImageType\n\ntype Props = {\n id?: ElementIDValue\n file?: ImageValue\n altText?: TextInputValue\n link?: LinkValue\n width?: WidthValue\n margin?: string\n padding?: string\n border?: string\n borderRadius?: string\n boxShadow?: string\n opacity?: ResponsiveOpacityValue\n placeholder?: { src: string; dimensions: { width: number; height: number } }\n className?: string\n}\n\nfunction loadImage(src: string): Promise<HTMLImageElement> {\n return new Promise<HTMLImageElement>((resolve, reject) => {\n const image = new Image()\n\n image.onload = () => resolve(image)\n image.onerror = reject\n image.src = src\n })\n}\n\nfunction imageSizes(breakpoints: Breakpoints, width?: Props['width']): string {\n const baseDevice = breakpoints.find(breakpoint => breakpoint.maxWidth == null)\n const baseWidth = baseDevice && width && findBreakpointOverride(breakpoints, width, baseDevice.id)\n const baseWidthSize =\n baseWidth == null || baseWidth.value.unit !== 'px' ? '100vw' : `${baseWidth.value.value}px`\n\n return breakpoints\n .map(breakpoint => {\n const override = findBreakpointOverride(breakpoints, width, breakpoint.id)\n\n if (override == null || breakpoint.maxWidth == null || override.value.unit !== 'px') {\n return null\n }\n\n return `(max-width: ${breakpoint.maxWidth}px) ${Math.min(\n breakpoint.maxWidth,\n override.value.value,\n )}px`\n })\n .filter((size): size is NonNullable<typeof size> => size != null)\n .reduce((sourceSizes, sourceSize) => `${sourceSize}, ${sourceSizes}`, baseWidthSize)\n}\n\ntype Dimensions = {\n width: number\n height: number\n}\n\nconst ImageComponent = forwardRef(function Image(\n {\n id,\n width,\n margin,\n padding,\n file,\n border,\n borderRadius,\n altText,\n link,\n opacity,\n boxShadow,\n placeholder = placeholders.image,\n className,\n }: Props,\n ref: Ref<HTMLAnchorElement & HTMLDivElement>,\n) {\n const fileId = match(file)\n .with(P.string, v => v)\n .with({ type: 'makeswift-file', version: 1 }, v => v.id)\n .otherwise(() => null)\n const fileData = useFile(fileId)\n const imageSrc = match([file, fileData])\n .with([P.any, P.not(P.nullish)], ([, fileData]) => fileData.publicUrl)\n .with([{ type: 'external-file', version: 1 }, P.any], ([file]) => file.url)\n .otherwise(() => placeholder.src)\n const dataDimensions = match([file, fileData, imageSrc])\n .with(\n [{ type: 'external-file', version: 1, width: P.number, height: P.number }, P.any, P.any],\n ([externalFile]) => ({ width: externalFile.width, height: externalFile.height }),\n )\n .with([P.any, P.not(P.nullish), P.any], ([, data]) => data.dimensions)\n .with([P.any, P.any, placeholder.src], () => placeholder.dimensions)\n .otherwise(() => null)\n const [measuredDimensions, setMeasuredDimensions] = useState<Dimensions | null>(null)\n const breakpoints = useBreakpoints()\n\n useEffect(() => {\n if (dataDimensions) return\n\n let cleanedUp = false\n\n loadImage(imageSrc)\n .then(image => {\n if (!cleanedUp) {\n setMeasuredDimensions({ width: image.naturalWidth, height: image.naturalHeight })\n }\n })\n .catch(console.error)\n\n return () => {\n cleanedUp = true\n }\n }, [dataDimensions, imageSrc])\n\n const dimensions = dataDimensions ?? measuredDimensions\n const Container = link ? Link : 'div'\n const containerClassName = cx(\n useStyle({ lineHeight: 0, overflow: 'hidden' }),\n useStyle(useResponsiveWidth(width, dimensions?.width)),\n useStyle(useResponsiveStyle([opacity] as const, ([opacity = 1]) => ({ opacity }))),\n margin,\n padding,\n border,\n borderRadius,\n boxShadow,\n className,\n )\n\n if (!dimensions) return null\n\n return (\n <Container link={link} ref={ref} id={id} className={containerClassName}>\n {nextMajorVersion < 13 ? (\n <NextLegacyImage\n layout=\"responsive\"\n src={imageSrc}\n sizes={imageSizes(breakpoints, width)}\n alt={altText}\n width={dimensions.width}\n height={dimensions.height}\n />\n ) : (\n <NextImage\n src={imageSrc}\n sizes={imageSizes(breakpoints, width)}\n alt={altText ?? ''}\n width={dimensions.width}\n height={dimensions.height}\n style={{\n width: '100%',\n height: 'auto',\n }}\n />\n )}\n </Container>\n )\n})\n\nexport default ImageComponent\n"],"names":["NextLegacyImage","NextImage","src","Promise","resolve","reject","image","Image","onload","onerror","breakpoints","width","baseDevice","find","breakpoint","maxWidth","baseWidth","findBreakpointOverride","id","baseWidthSize","value","unit","map","override","Math","min","filter","size","reduce","sourceSizes","sourceSize","ImageComponent","forwardRef","margin","padding","file","border","borderRadius","altText","link","opacity","boxShadow","placeholder","placeholders","className","ref","fileId","match","with","P","string","v","type","version","otherwise","fileData","useFile","imageSrc","any","not","nullish","publicUrl","url","dataDimensions","number","height","externalFile","data","dimensions","measuredDimensions","setMeasuredDimensions","useState","useBreakpoints","useEffect","cleanedUp","then","naturalWidth","naturalHeight","catch","console","error","Container","Link","containerClassName","cx","useStyle","lineHeight","overflow","useResponsiveWidth","useResponsiveStyle","nextMajorVersion","_jsx","imageSizes"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,MAAMA,kBAAkBC,mBAAAA;AAkBxB,mBAAmBC,KAAwC;AAClD,SAAA,IAAIC,QAA0B,CAACC,SAASC,WAAW;AAClDC,UAAAA,QAAQ,IAAIC;AAEZC,UAAAA,SAAS,MAAMJ,QAAQE,KAAD;AAC5BA,UAAMG,UAAUJ;AAChBC,UAAMJ,MAAMA;AAAAA,EAAAA,CALP;AAOR;AAED,oBAAoBQ,aAA0BC,OAAgC;AAC5E,QAAMC,aAAaF,YAAYG,KAAKC,CAAcA,eAAAA,WAAWC,YAAY,IAAtD;AACnB,QAAMC,YAAYJ,cAAcD,SAASM,kBAAAA,uBAAuBP,aAAaC,OAAOC,WAAWM,EAAhC;AACzDC,QAAAA,gBACJH,aAAa,QAAQA,UAAUI,MAAMC,SAAS,OAAO,UAAW,GAAEL,UAAUI,MAAMA;AAE7EV,SAAAA,YACJY,IAAIR,CAAc,eAAA;AACXS,UAAAA,WAAWN,kBAAAA,uBAAuBP,aAAaC,OAAOG,WAAWI,EAAhC;AAEnCK,QAAAA,YAAY,QAAQT,WAAWC,YAAY,QAAQQ,SAASH,MAAMC,SAAS,MAAM;AAC5E,aAAA;AAAA,IACR;AAEO,WAAA,eAAcP,WAAWC,eAAeS,KAAKC,IACnDX,WAAWC,UACXQ,SAASH,MAAMA,KAF+B;AAAA,EAAA,CAR7C,EAaJM,OAAO,CAACC,SAA2CA,QAAQ,IAbvD,EAcJC,OAAO,CAACC,aAAaC,eAAgB,GAAEA,eAAeD,eAAeV,aAdjE;AAeR;AAOKY,MAAAA,iBAAiBC,MAAAA,WAAW,gBAChC;AAAA,EACEd;AAAAA,EACAP;AAAAA,EACAsB;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC;AAAAA,EACAC,cAAcC,aAAarC,aAAAA;AAAAA,EAC3BsC;AAAAA,GAEFC,KACA;AACMC,QAAAA,SAASC,UAAAA,MAAMZ,IAAD,EACjBa,KAAKC,YAAEC,QAAQC,CAAAA,MAAKA,CADR,EAEZH,KAAK;AAAA,IAAEI,MAAM;AAAA,IAAkBC,SAAS;AAAA,EAAA,GAAKF,CAAKA,MAAAA,EAAEjC,EAFxC,EAGZoC,UAAU,MAAM,IAHJ;AAITC,QAAAA,WAAWC,aAAQV,MAAD;AAClBW,QAAAA,WAAWV,gBAAM,CAACZ,MAAMoB,QAAP,CAAD,EACnBP,KAAK,CAACC,UAAAA,EAAES,KAAKT,UAAAA,EAAEU,IAAIV,UAAEW,EAAAA,OAAR,CAAR,GAA2B,CAAC,CAAA,EAAGL,eAAcA,UAASM,SAD7C,EAEdb,KAAK,CAAC;AAAA,IAAEI,MAAM;AAAA,IAAiBC,SAAS;AAAA,EAAKJ,GAAAA,YAAES,GAA1C,GAAgD,CAAC,CAACvB,WAAUA,MAAK2B,GAFxD,EAGdR,UAAU,MAAMZ,YAAYxC,GAHd;AAIX6D,QAAAA,iBAAiBhB,gBAAM,CAACZ,MAAMoB,UAAUE,QAAjB,CAAD,EACzBT,KACC,CAAC;AAAA,IAAEI,MAAM;AAAA,IAAiBC,SAAS;AAAA,IAAG1C,OAAOsC,UAAEe,EAAAA;AAAAA,IAAQC,QAAQhB,UAAEe,EAAAA;AAAAA,EAAAA,GAAUf,UAAAA,EAAES,KAAKT,UAAAA,EAAES,GAApF,GACA,CAAC,CAACQ,kBAAmB;AAAA,IAAEvD,OAAOuD,aAAavD;AAAAA,IAAOsD,QAAQC,aAAaD;AAAAA,EAAAA,EAHpD,EAKpBjB,KAAK,CAACC,UAAAA,EAAES,KAAKT,UAAEU,EAAAA,IAAIV,UAAEW,EAAAA,OAAR,GAAkBX,UAAAA,EAAES,GAA5B,GAAkC,CAAC,CAAA,EAAGS,UAAUA,KAAKC,UALtC,EAMpBpB,KAAK,CAACC,UAAAA,EAAES,KAAKT,UAAAA,EAAES,KAAKhB,YAAYxC,GAA3B,GAAiC,MAAMwC,YAAY0B,UANpC,EAOpBd,UAAU,MAAM,IAPI;AAQvB,QAAM,CAACe,oBAAoBC,yBAAyBC,MAAAA,SAA4B,IAApB;AACtD7D,QAAAA,cAAc8D,KAAAA;AAEpBC,QAAAA,UAAU,MAAM;AACVV,QAAAA;AAAgB;AAEhBW,QAAAA,YAAY;AAENjB,cAAAA,QAAD,EACNkB,KAAKrE,CAAS,UAAA;AACT,UAAA,CAACoE,WAAW;AACQ,8BAAA;AAAA,UAAE/D,OAAOL,MAAMsE;AAAAA,UAAcX,QAAQ3D,MAAMuE;AAAAA,QAAAA,CAA5C;AAAA,MACtB;AAAA,IAJL,CAAA,EAMGC,MAAMC,QAAQC,KANjB;AAQA,WAAO,MAAM;AACC,kBAAA;AAAA,IAAA;AAAA,EADd,GAGC,CAACjB,gBAAgBN,QAAjB,CAhBM;AAkBT,QAAMW,aAAaL,0CAAkBM;AAC/BY,QAAAA,YAAY1C,OAAO2C,MAAO,OAAA;AAC1BC,QAAAA,qBAAqBC,OACzBC,mBAAS;AAAA,IAAEC,YAAY;AAAA,IAAGC,UAAU;AAAA,EAAA,CAA5B,GACRF,UAAAA,SAASG,KAAmB7E,mBAAAA,OAAOyD,yCAAYzD,KAApB,CAAnB,GACR0E,UAAAA,SAASI,wBAAmB,CAACjD,OAAD,GAAoB,CAAC,CAACA,WAAU,OAAQ;AAAA,IAAEA,SAAAA;AAAAA,EAAAA,EAA3C,CAAnB,GACRP,QACAC,SACAE,QACAC,cACAI,WACAG,SAT2B;AAY7B,MAAI,CAACwB;AAAmB,WAAA;AAExB,wCACG,WAAD;AAAA,IAAW;AAAA,IAAY;AAAA,IAAU;AAAA,IAAQ,WAAWe;AAAAA,IAApD,UACGO,YAAAA,QAAmB,KAClBC,2BAAAA,IAAC,iBAAD;AAAA,MACE,QAAO;AAAA,MACP,KAAKlC;AAAAA,MACL,OAAOmC,WAAWlF,aAAaC,KAAd;AAAA,MACjB,KAAK2B;AAAAA,MACL,OAAO8B,WAAWzD;AAAAA,MAClB,QAAQyD,WAAWH;AAAAA,IAAAA,CAPtB,IAUC0B,2BAAA,IAAC1F,+BAAD;AAAA,MACE,KAAKwD;AAAAA,MACL,OAAOmC,WAAWlF,aAAaC,KAAd;AAAA,MACjB,KAAK2B,4BAAW;AAAA,MAChB,OAAO8B,WAAWzD;AAAAA,MAClB,QAAQyD,WAAWH;AAAAA,MACnB,OAAO;AAAA,QACLtD,OAAO;AAAA,QACPsD,QAAQ;AAAA,MAFH;AAAA,IAAA,CANT;AAAA,EAAA,CAZN;AA0BD,CAlGgC;;"}
1
+ {"version":3,"file":"Image.cjs.js","sources":["../src/components/builtin/Image/Image.tsx"],"sourcesContent":["import { useState, useEffect, Ref, forwardRef } from 'react'\nimport NextImage from 'next/image'\nimport type NextLegacyImageType from 'next/legacy/image'\n\nimport {\n ElementIDValue,\n ImageValue,\n LinkValue,\n ResponsiveOpacityValue,\n TextInputValue,\n WidthValue,\n} from '../../../prop-controllers/descriptors'\nimport { Breakpoints, findBreakpointOverride } from '../../../state/modules/breakpoints'\nimport { placeholders } from '../../utils/placeholders'\nimport { Link } from '../../shared/Link'\nimport { cx } from '@emotion/css'\nimport { useStyle } from '../../../runtimes/react/use-style'\nimport { useResponsiveStyle, useResponsiveWidth } from '../../utils/responsive-style'\nimport { useFile } from '../../../runtimes/react/hooks/makeswift-api'\nimport { major as nextMajorVersion } from '../../../next/next-version'\nimport { useBreakpoints } from '../../../runtimes/react'\nimport { match, P } from 'ts-pattern'\n\nconst NextLegacyImage = NextImage as typeof NextLegacyImageType\n\ntype Props = {\n id?: ElementIDValue\n file?: ImageValue\n altText?: TextInputValue\n link?: LinkValue\n width?: WidthValue\n margin?: string\n padding?: string\n border?: string\n borderRadius?: string\n boxShadow?: string\n opacity?: ResponsiveOpacityValue\n placeholder?: { src: string; dimensions: { width: number; height: number } }\n className?: string\n priority?: boolean\n}\n\nfunction loadImage(src: string): Promise<HTMLImageElement> {\n return new Promise<HTMLImageElement>((resolve, reject) => {\n const image = new Image()\n\n image.onload = () => resolve(image)\n image.onerror = reject\n image.src = src\n })\n}\n\nfunction imageSizes(breakpoints: Breakpoints, width?: Props['width']): string {\n const baseDevice = breakpoints.find(breakpoint => breakpoint.maxWidth == null)\n const baseWidth = baseDevice && width && findBreakpointOverride(breakpoints, width, baseDevice.id)\n const baseWidthSize =\n baseWidth == null || baseWidth.value.unit !== 'px' ? '100vw' : `${baseWidth.value.value}px`\n\n return breakpoints\n .map(breakpoint => {\n const override = findBreakpointOverride(breakpoints, width, breakpoint.id)\n\n if (override == null || breakpoint.maxWidth == null || override.value.unit !== 'px') {\n return null\n }\n\n return `(max-width: ${breakpoint.maxWidth}px) ${Math.min(\n breakpoint.maxWidth,\n override.value.value,\n )}px`\n })\n .filter((size): size is NonNullable<typeof size> => size != null)\n .reduce((sourceSizes, sourceSize) => `${sourceSize}, ${sourceSizes}`, baseWidthSize)\n}\n\ntype Dimensions = {\n width: number\n height: number\n}\n\nconst ImageComponent = forwardRef(function Image(\n {\n id,\n width,\n margin,\n padding,\n file,\n border,\n borderRadius,\n altText,\n link,\n opacity,\n boxShadow,\n placeholder = placeholders.image,\n className,\n priority,\n }: Props,\n ref: Ref<HTMLAnchorElement & HTMLDivElement>,\n) {\n const fileId = match(file)\n .with(P.string, v => v)\n .with({ type: 'makeswift-file', version: 1 }, v => v.id)\n .otherwise(() => null)\n const fileData = useFile(fileId)\n const imageSrc = match([file, fileData])\n .with([P.any, P.not(P.nullish)], ([, fileData]) => fileData.publicUrl)\n .with([{ type: 'external-file', version: 1 }, P.any], ([file]) => file.url)\n .otherwise(() => placeholder.src)\n const dataDimensions = match([file, fileData, imageSrc])\n .with(\n [{ type: 'external-file', version: 1, width: P.number, height: P.number }, P.any, P.any],\n ([externalFile]) => ({ width: externalFile.width, height: externalFile.height }),\n )\n .with([P.any, P.not(P.nullish), P.any], ([, data]) => data.dimensions)\n .with([P.any, P.any, placeholder.src], () => placeholder.dimensions)\n .otherwise(() => null)\n const [measuredDimensions, setMeasuredDimensions] = useState<Dimensions | null>(null)\n const breakpoints = useBreakpoints()\n\n useEffect(() => {\n if (dataDimensions) return\n\n let cleanedUp = false\n\n loadImage(imageSrc)\n .then(image => {\n if (!cleanedUp) {\n setMeasuredDimensions({ width: image.naturalWidth, height: image.naturalHeight })\n }\n })\n .catch(console.error)\n\n return () => {\n cleanedUp = true\n }\n }, [dataDimensions, imageSrc])\n\n const dimensions = dataDimensions ?? measuredDimensions\n const Container = link ? Link : 'div'\n const containerClassName = cx(\n useStyle({ lineHeight: 0, overflow: 'hidden' }),\n useStyle(useResponsiveWidth(width, dimensions?.width)),\n useStyle(useResponsiveStyle([opacity] as const, ([opacity = 1]) => ({ opacity }))),\n margin,\n padding,\n border,\n borderRadius,\n boxShadow,\n className,\n )\n\n if (!dimensions) return null\n\n return (\n <Container link={link} ref={ref} id={id} className={containerClassName}>\n {nextMajorVersion < 13 ? (\n <NextLegacyImage\n layout=\"responsive\"\n src={imageSrc}\n sizes={imageSizes(breakpoints, width)}\n alt={altText}\n width={dimensions.width}\n height={dimensions.height}\n priority={priority}\n />\n ) : (\n <NextImage\n src={imageSrc}\n priority={priority}\n sizes={imageSizes(breakpoints, width)}\n alt={altText ?? ''}\n width={dimensions.width}\n height={dimensions.height}\n style={{\n width: '100%',\n height: 'auto',\n }}\n />\n )}\n </Container>\n )\n})\n\nexport default ImageComponent\n"],"names":["NextLegacyImage","NextImage","src","Promise","resolve","reject","image","Image","onload","onerror","breakpoints","width","baseDevice","find","breakpoint","maxWidth","baseWidth","findBreakpointOverride","id","baseWidthSize","value","unit","map","override","Math","min","filter","size","reduce","sourceSizes","sourceSize","ImageComponent","forwardRef","margin","padding","file","border","borderRadius","altText","link","opacity","boxShadow","placeholder","placeholders","className","priority","ref","fileId","match","with","P","string","v","type","version","otherwise","fileData","useFile","imageSrc","any","not","nullish","publicUrl","url","dataDimensions","number","height","externalFile","data","dimensions","measuredDimensions","setMeasuredDimensions","useState","useBreakpoints","useEffect","cleanedUp","then","naturalWidth","naturalHeight","catch","console","error","Container","Link","containerClassName","cx","useStyle","lineHeight","overflow","useResponsiveWidth","useResponsiveStyle","nextMajorVersion","_jsx","imageSizes"],"mappings":"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"}
package/dist/Image.es.js CHANGED
@@ -79,7 +79,8 @@ const ImageComponent = forwardRef(function Image2({
79
79
  opacity,
80
80
  boxShadow,
81
81
  placeholder = placeholders.image,
82
- className
82
+ className,
83
+ priority
83
84
  }, ref) {
84
85
  const fileId = match(file).with(P.string, (v) => v).with({
85
86
  type: "makeswift-file",
@@ -138,9 +139,11 @@ const ImageComponent = forwardRef(function Image2({
138
139
  sizes: imageSizes(breakpoints, width),
139
140
  alt: altText,
140
141
  width: dimensions.width,
141
- height: dimensions.height
142
+ height: dimensions.height,
143
+ priority
142
144
  }) : /* @__PURE__ */ jsx(NextImage, {
143
145
  src: imageSrc,
146
+ priority,
144
147
  sizes: imageSizes(breakpoints, width),
145
148
  alt: altText != null ? altText : "",
146
149
  width: dimensions.width,
@@ -1 +1 @@
1
- {"version":3,"file":"Image.es.js","sources":["../src/components/builtin/Image/Image.tsx"],"sourcesContent":["import { useState, useEffect, Ref, forwardRef } from 'react'\nimport NextImage from 'next/image'\nimport type NextLegacyImageType from 'next/legacy/image'\n\nimport {\n ElementIDValue,\n ImageValue,\n LinkValue,\n ResponsiveOpacityValue,\n TextInputValue,\n WidthValue,\n} from '../../../prop-controllers/descriptors'\nimport { Breakpoints, findBreakpointOverride } from '../../../state/modules/breakpoints'\nimport { placeholders } from '../../utils/placeholders'\nimport { Link } from '../../shared/Link'\nimport { cx } from '@emotion/css'\nimport { useStyle } from '../../../runtimes/react/use-style'\nimport { useResponsiveStyle, useResponsiveWidth } from '../../utils/responsive-style'\nimport { useFile } from '../../../runtimes/react/hooks/makeswift-api'\nimport { major as nextMajorVersion } from '../../../next/next-version'\nimport { useBreakpoints } from '../../../runtimes/react'\nimport { match, P } from 'ts-pattern'\n\nconst NextLegacyImage = NextImage as typeof NextLegacyImageType\n\ntype Props = {\n id?: ElementIDValue\n file?: ImageValue\n altText?: TextInputValue\n link?: LinkValue\n width?: WidthValue\n margin?: string\n padding?: string\n border?: string\n borderRadius?: string\n boxShadow?: string\n opacity?: ResponsiveOpacityValue\n placeholder?: { src: string; dimensions: { width: number; height: number } }\n className?: string\n}\n\nfunction loadImage(src: string): Promise<HTMLImageElement> {\n return new Promise<HTMLImageElement>((resolve, reject) => {\n const image = new Image()\n\n image.onload = () => resolve(image)\n image.onerror = reject\n image.src = src\n })\n}\n\nfunction imageSizes(breakpoints: Breakpoints, width?: Props['width']): string {\n const baseDevice = breakpoints.find(breakpoint => breakpoint.maxWidth == null)\n const baseWidth = baseDevice && width && findBreakpointOverride(breakpoints, width, baseDevice.id)\n const baseWidthSize =\n baseWidth == null || baseWidth.value.unit !== 'px' ? '100vw' : `${baseWidth.value.value}px`\n\n return breakpoints\n .map(breakpoint => {\n const override = findBreakpointOverride(breakpoints, width, breakpoint.id)\n\n if (override == null || breakpoint.maxWidth == null || override.value.unit !== 'px') {\n return null\n }\n\n return `(max-width: ${breakpoint.maxWidth}px) ${Math.min(\n breakpoint.maxWidth,\n override.value.value,\n )}px`\n })\n .filter((size): size is NonNullable<typeof size> => size != null)\n .reduce((sourceSizes, sourceSize) => `${sourceSize}, ${sourceSizes}`, baseWidthSize)\n}\n\ntype Dimensions = {\n width: number\n height: number\n}\n\nconst ImageComponent = forwardRef(function Image(\n {\n id,\n width,\n margin,\n padding,\n file,\n border,\n borderRadius,\n altText,\n link,\n opacity,\n boxShadow,\n placeholder = placeholders.image,\n className,\n }: Props,\n ref: Ref<HTMLAnchorElement & HTMLDivElement>,\n) {\n const fileId = match(file)\n .with(P.string, v => v)\n .with({ type: 'makeswift-file', version: 1 }, v => v.id)\n .otherwise(() => null)\n const fileData = useFile(fileId)\n const imageSrc = match([file, fileData])\n .with([P.any, P.not(P.nullish)], ([, fileData]) => fileData.publicUrl)\n .with([{ type: 'external-file', version: 1 }, P.any], ([file]) => file.url)\n .otherwise(() => placeholder.src)\n const dataDimensions = match([file, fileData, imageSrc])\n .with(\n [{ type: 'external-file', version: 1, width: P.number, height: P.number }, P.any, P.any],\n ([externalFile]) => ({ width: externalFile.width, height: externalFile.height }),\n )\n .with([P.any, P.not(P.nullish), P.any], ([, data]) => data.dimensions)\n .with([P.any, P.any, placeholder.src], () => placeholder.dimensions)\n .otherwise(() => null)\n const [measuredDimensions, setMeasuredDimensions] = useState<Dimensions | null>(null)\n const breakpoints = useBreakpoints()\n\n useEffect(() => {\n if (dataDimensions) return\n\n let cleanedUp = false\n\n loadImage(imageSrc)\n .then(image => {\n if (!cleanedUp) {\n setMeasuredDimensions({ width: image.naturalWidth, height: image.naturalHeight })\n }\n })\n .catch(console.error)\n\n return () => {\n cleanedUp = true\n }\n }, [dataDimensions, imageSrc])\n\n const dimensions = dataDimensions ?? measuredDimensions\n const Container = link ? Link : 'div'\n const containerClassName = cx(\n useStyle({ lineHeight: 0, overflow: 'hidden' }),\n useStyle(useResponsiveWidth(width, dimensions?.width)),\n useStyle(useResponsiveStyle([opacity] as const, ([opacity = 1]) => ({ opacity }))),\n margin,\n padding,\n border,\n borderRadius,\n boxShadow,\n className,\n )\n\n if (!dimensions) return null\n\n return (\n <Container link={link} ref={ref} id={id} className={containerClassName}>\n {nextMajorVersion < 13 ? (\n <NextLegacyImage\n layout=\"responsive\"\n src={imageSrc}\n sizes={imageSizes(breakpoints, width)}\n alt={altText}\n width={dimensions.width}\n height={dimensions.height}\n />\n ) : (\n <NextImage\n src={imageSrc}\n sizes={imageSizes(breakpoints, width)}\n alt={altText ?? ''}\n width={dimensions.width}\n height={dimensions.height}\n style={{\n width: '100%',\n height: 'auto',\n }}\n />\n )}\n </Container>\n )\n})\n\nexport default ImageComponent\n"],"names":["NextLegacyImage","NextImage","src","Promise","resolve","reject","image","Image","onload","onerror","breakpoints","width","baseDevice","find","breakpoint","maxWidth","baseWidth","findBreakpointOverride","id","baseWidthSize","value","unit","map","override","Math","min","filter","size","reduce","sourceSizes","sourceSize","ImageComponent","forwardRef","margin","padding","file","border","borderRadius","altText","link","opacity","boxShadow","placeholder","placeholders","className","ref","fileId","match","with","P","string","v","type","version","otherwise","fileData","useFile","imageSrc","any","not","nullish","publicUrl","url","dataDimensions","number","height","externalFile","data","dimensions","measuredDimensions","setMeasuredDimensions","useState","useBreakpoints","useEffect","cleanedUp","then","naturalWidth","naturalHeight","catch","console","error","Container","Link","containerClassName","cx","useStyle","lineHeight","overflow","useResponsiveWidth","useResponsiveStyle","nextMajorVersion","_jsx","imageSizes"],"mappings":"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"}
1
+ {"version":3,"file":"Image.es.js","sources":["../src/components/builtin/Image/Image.tsx"],"sourcesContent":["import { useState, useEffect, Ref, forwardRef } from 'react'\nimport NextImage from 'next/image'\nimport type NextLegacyImageType from 'next/legacy/image'\n\nimport {\n ElementIDValue,\n ImageValue,\n LinkValue,\n ResponsiveOpacityValue,\n TextInputValue,\n WidthValue,\n} from '../../../prop-controllers/descriptors'\nimport { Breakpoints, findBreakpointOverride } from '../../../state/modules/breakpoints'\nimport { placeholders } from '../../utils/placeholders'\nimport { Link } from '../../shared/Link'\nimport { cx } from '@emotion/css'\nimport { useStyle } from '../../../runtimes/react/use-style'\nimport { useResponsiveStyle, useResponsiveWidth } from '../../utils/responsive-style'\nimport { useFile } from '../../../runtimes/react/hooks/makeswift-api'\nimport { major as nextMajorVersion } from '../../../next/next-version'\nimport { useBreakpoints } from '../../../runtimes/react'\nimport { match, P } from 'ts-pattern'\n\nconst NextLegacyImage = NextImage as typeof NextLegacyImageType\n\ntype Props = {\n id?: ElementIDValue\n file?: ImageValue\n altText?: TextInputValue\n link?: LinkValue\n width?: WidthValue\n margin?: string\n padding?: string\n border?: string\n borderRadius?: string\n boxShadow?: string\n opacity?: ResponsiveOpacityValue\n placeholder?: { src: string; dimensions: { width: number; height: number } }\n className?: string\n priority?: boolean\n}\n\nfunction loadImage(src: string): Promise<HTMLImageElement> {\n return new Promise<HTMLImageElement>((resolve, reject) => {\n const image = new Image()\n\n image.onload = () => resolve(image)\n image.onerror = reject\n image.src = src\n })\n}\n\nfunction imageSizes(breakpoints: Breakpoints, width?: Props['width']): string {\n const baseDevice = breakpoints.find(breakpoint => breakpoint.maxWidth == null)\n const baseWidth = baseDevice && width && findBreakpointOverride(breakpoints, width, baseDevice.id)\n const baseWidthSize =\n baseWidth == null || baseWidth.value.unit !== 'px' ? '100vw' : `${baseWidth.value.value}px`\n\n return breakpoints\n .map(breakpoint => {\n const override = findBreakpointOverride(breakpoints, width, breakpoint.id)\n\n if (override == null || breakpoint.maxWidth == null || override.value.unit !== 'px') {\n return null\n }\n\n return `(max-width: ${breakpoint.maxWidth}px) ${Math.min(\n breakpoint.maxWidth,\n override.value.value,\n )}px`\n })\n .filter((size): size is NonNullable<typeof size> => size != null)\n .reduce((sourceSizes, sourceSize) => `${sourceSize}, ${sourceSizes}`, baseWidthSize)\n}\n\ntype Dimensions = {\n width: number\n height: number\n}\n\nconst ImageComponent = forwardRef(function Image(\n {\n id,\n width,\n margin,\n padding,\n file,\n border,\n borderRadius,\n altText,\n link,\n opacity,\n boxShadow,\n placeholder = placeholders.image,\n className,\n priority,\n }: Props,\n ref: Ref<HTMLAnchorElement & HTMLDivElement>,\n) {\n const fileId = match(file)\n .with(P.string, v => v)\n .with({ type: 'makeswift-file', version: 1 }, v => v.id)\n .otherwise(() => null)\n const fileData = useFile(fileId)\n const imageSrc = match([file, fileData])\n .with([P.any, P.not(P.nullish)], ([, fileData]) => fileData.publicUrl)\n .with([{ type: 'external-file', version: 1 }, P.any], ([file]) => file.url)\n .otherwise(() => placeholder.src)\n const dataDimensions = match([file, fileData, imageSrc])\n .with(\n [{ type: 'external-file', version: 1, width: P.number, height: P.number }, P.any, P.any],\n ([externalFile]) => ({ width: externalFile.width, height: externalFile.height }),\n )\n .with([P.any, P.not(P.nullish), P.any], ([, data]) => data.dimensions)\n .with([P.any, P.any, placeholder.src], () => placeholder.dimensions)\n .otherwise(() => null)\n const [measuredDimensions, setMeasuredDimensions] = useState<Dimensions | null>(null)\n const breakpoints = useBreakpoints()\n\n useEffect(() => {\n if (dataDimensions) return\n\n let cleanedUp = false\n\n loadImage(imageSrc)\n .then(image => {\n if (!cleanedUp) {\n setMeasuredDimensions({ width: image.naturalWidth, height: image.naturalHeight })\n }\n })\n .catch(console.error)\n\n return () => {\n cleanedUp = true\n }\n }, [dataDimensions, imageSrc])\n\n const dimensions = dataDimensions ?? measuredDimensions\n const Container = link ? Link : 'div'\n const containerClassName = cx(\n useStyle({ lineHeight: 0, overflow: 'hidden' }),\n useStyle(useResponsiveWidth(width, dimensions?.width)),\n useStyle(useResponsiveStyle([opacity] as const, ([opacity = 1]) => ({ opacity }))),\n margin,\n padding,\n border,\n borderRadius,\n boxShadow,\n className,\n )\n\n if (!dimensions) return null\n\n return (\n <Container link={link} ref={ref} id={id} className={containerClassName}>\n {nextMajorVersion < 13 ? (\n <NextLegacyImage\n layout=\"responsive\"\n src={imageSrc}\n sizes={imageSizes(breakpoints, width)}\n alt={altText}\n width={dimensions.width}\n height={dimensions.height}\n priority={priority}\n />\n ) : (\n <NextImage\n src={imageSrc}\n priority={priority}\n sizes={imageSizes(breakpoints, width)}\n alt={altText ?? ''}\n width={dimensions.width}\n height={dimensions.height}\n style={{\n width: '100%',\n height: 'auto',\n }}\n />\n )}\n </Container>\n )\n})\n\nexport default ImageComponent\n"],"names":["NextLegacyImage","NextImage","src","Promise","resolve","reject","image","Image","onload","onerror","breakpoints","width","baseDevice","find","breakpoint","maxWidth","baseWidth","findBreakpointOverride","id","baseWidthSize","value","unit","map","override","Math","min","filter","size","reduce","sourceSizes","sourceSize","ImageComponent","forwardRef","margin","padding","file","border","borderRadius","altText","link","opacity","boxShadow","placeholder","placeholders","className","priority","ref","fileId","match","with","P","string","v","type","version","otherwise","fileData","useFile","imageSrc","any","not","nullish","publicUrl","url","dataDimensions","number","height","externalFile","data","dimensions","measuredDimensions","setMeasuredDimensions","useState","useBreakpoints","useEffect","cleanedUp","then","naturalWidth","naturalHeight","catch","console","error","Container","Link","containerClassName","cx","useStyle","lineHeight","overflow","useResponsiveWidth","useResponsiveStyle","nextMajorVersion","_jsx","imageSizes"],"mappings":"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"}
package/dist/index.cjs.js CHANGED
@@ -1239,7 +1239,7 @@ async function fonts(_req, res, { getFonts } = {}) {
1239
1239
  const fonts2 = (_a = await (getFonts == null ? void 0 : getFonts())) != null ? _a : [];
1240
1240
  return res.json(fonts2);
1241
1241
  }
1242
- const version = "0.11.8";
1242
+ const version = "0.11.9";
1243
1243
  async function handler(req, res, { apiKey, siteVersions }) {
1244
1244
  if (req.query.secret !== apiKey) {
1245
1245
  return res.status(401).json({ message: "Unauthorized" });
@@ -2205,7 +2205,8 @@ function registerComponent$5(runtime) {
2205
2205
  border: reactPage.Border({ format: reactPage.Border.Format.ClassName }),
2206
2206
  borderRadius: reactPage.BorderRadius({ format: reactPage.BorderRadius.Format.ClassName }),
2207
2207
  boxShadow: reactPage.Shadows({ format: reactPage.Shadows.Format.ClassName }),
2208
- opacity: reactPage.ResponsiveOpacity()
2208
+ opacity: reactPage.ResponsiveOpacity(),
2209
+ priority: reactPage.Checkbox({ label: "Priority" })
2209
2210
  }
2210
2211
  });
2211
2212
  }