@01.software/sdk 0.2.1 → 0.2.2
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/{auth-DHZs286d.d.ts → auth-BwIP4t_T.d.ts} +1 -1
- package/dist/{auth-E6a6eSB4.d.cts → auth-BwRoNck8.d.cts} +1 -1
- package/dist/auth.d.cts +2 -2
- package/dist/auth.d.ts +2 -2
- package/dist/components.cjs +3 -3
- package/dist/components.cjs.map +1 -1
- package/dist/components.d.cts +93 -6
- package/dist/components.d.ts +93 -6
- package/dist/components.js +20 -20
- package/dist/components.js.map +1 -1
- package/dist/image-TT8lTsk5.d.cts +82 -0
- package/dist/image-TT8lTsk5.d.ts +82 -0
- package/dist/index.cjs +0 -659
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -11
- package/dist/index.d.ts +7 -11
- package/dist/index.js +0 -653
- package/dist/index.js.map +1 -1
- package/dist/metadata.d.cts +1 -1
- package/dist/metadata.d.ts +1 -1
- package/dist/{payload-types-CmDse9mQ.d.cts → payload-types-DPdUroGM.d.cts} +1 -1
- package/dist/{payload-types-CmDse9mQ.d.ts → payload-types-DPdUroGM.d.ts} +1 -1
- package/dist/{webhook-BpQ3M57n.d.cts → webhook-4iCoQzsv.d.cts} +1 -1
- package/dist/{webhook-DNIikEHk.d.ts → webhook-DRpqvA6W.d.ts} +1 -1
- package/dist/webhook.d.cts +2 -2
- package/dist/webhook.d.ts +2 -2
- package/package.json +18 -19
- package/dist/index-4y8p5Pjy.d.ts +0 -174
- package/dist/index-BIkaO8Go.d.cts +0 -174
package/dist/components.js
CHANGED
|
@@ -39,7 +39,7 @@ var __async = (__this, __arguments, generator) => {
|
|
|
39
39
|
};
|
|
40
40
|
|
|
41
41
|
// src/components/RichTextContent/index.tsx
|
|
42
|
-
import
|
|
42
|
+
import React from "react";
|
|
43
43
|
import {
|
|
44
44
|
defaultJSXConverters,
|
|
45
45
|
LinkJSXConverter,
|
|
@@ -51,7 +51,7 @@ function RichTextContent({
|
|
|
51
51
|
internalDocToHref,
|
|
52
52
|
blocks
|
|
53
53
|
}) {
|
|
54
|
-
return /* @__PURE__ */
|
|
54
|
+
return /* @__PURE__ */ React.createElement(
|
|
55
55
|
RichText,
|
|
56
56
|
{
|
|
57
57
|
data,
|
|
@@ -66,7 +66,7 @@ function RichTextContent({
|
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
// src/components/FormRenderer/index.tsx
|
|
69
|
-
import
|
|
69
|
+
import React2, { useState, useCallback, useEffect, useRef } from "react";
|
|
70
70
|
|
|
71
71
|
// src/components/FormRenderer/countries.ts
|
|
72
72
|
var COUNTRIES = [
|
|
@@ -437,14 +437,14 @@ function FormRenderer({
|
|
|
437
437
|
value: (_a2 = values[field.name]) != null ? _a2 : "",
|
|
438
438
|
onChange: (v) => handleChange(field.name, v)
|
|
439
439
|
};
|
|
440
|
-
const el = /* @__PURE__ */
|
|
440
|
+
const el = /* @__PURE__ */ React2.createElement(
|
|
441
441
|
"div",
|
|
442
442
|
{
|
|
443
443
|
key: (_b = field.id) != null ? _b : field.name,
|
|
444
444
|
className: fieldClassName,
|
|
445
445
|
style
|
|
446
446
|
},
|
|
447
|
-
field.label && /* @__PURE__ */
|
|
447
|
+
field.label && /* @__PURE__ */ React2.createElement("label", { htmlFor: field.name }, field.label),
|
|
448
448
|
input
|
|
449
449
|
);
|
|
450
450
|
return renderField ? renderField(field, context, el) : el;
|
|
@@ -454,7 +454,7 @@ function FormRenderer({
|
|
|
454
454
|
return wrapField(
|
|
455
455
|
field,
|
|
456
456
|
style,
|
|
457
|
-
/* @__PURE__ */
|
|
457
|
+
/* @__PURE__ */ React2.createElement(
|
|
458
458
|
"select",
|
|
459
459
|
{
|
|
460
460
|
id: field.name,
|
|
@@ -463,8 +463,8 @@ function FormRenderer({
|
|
|
463
463
|
required: (_b = field.required) != null ? _b : false,
|
|
464
464
|
onChange: (e) => handleChange(field.name, e.target.value)
|
|
465
465
|
},
|
|
466
|
-
/* @__PURE__ */
|
|
467
|
-
options.map((opt) => /* @__PURE__ */
|
|
466
|
+
/* @__PURE__ */ React2.createElement("option", { value: "" }, placeholder || "Select\u2026"),
|
|
467
|
+
options.map((opt) => /* @__PURE__ */ React2.createElement("option", { key: opt.value, value: opt.value }, opt.label))
|
|
468
468
|
)
|
|
469
469
|
);
|
|
470
470
|
};
|
|
@@ -476,7 +476,7 @@ function FormRenderer({
|
|
|
476
476
|
return wrapField(
|
|
477
477
|
field,
|
|
478
478
|
style,
|
|
479
|
-
/* @__PURE__ */
|
|
479
|
+
/* @__PURE__ */ React2.createElement(
|
|
480
480
|
"input",
|
|
481
481
|
{
|
|
482
482
|
type: "text",
|
|
@@ -493,7 +493,7 @@ function FormRenderer({
|
|
|
493
493
|
return wrapField(
|
|
494
494
|
field,
|
|
495
495
|
style,
|
|
496
|
-
/* @__PURE__ */
|
|
496
|
+
/* @__PURE__ */ React2.createElement(
|
|
497
497
|
"input",
|
|
498
498
|
{
|
|
499
499
|
type: "email",
|
|
@@ -509,7 +509,7 @@ function FormRenderer({
|
|
|
509
509
|
return wrapField(
|
|
510
510
|
field,
|
|
511
511
|
style,
|
|
512
|
-
/* @__PURE__ */
|
|
512
|
+
/* @__PURE__ */ React2.createElement(
|
|
513
513
|
"input",
|
|
514
514
|
{
|
|
515
515
|
type: "number",
|
|
@@ -530,7 +530,7 @@ function FormRenderer({
|
|
|
530
530
|
return wrapField(
|
|
531
531
|
field,
|
|
532
532
|
style,
|
|
533
|
-
/* @__PURE__ */
|
|
533
|
+
/* @__PURE__ */ React2.createElement(
|
|
534
534
|
"textarea",
|
|
535
535
|
{
|
|
536
536
|
id: field.name,
|
|
@@ -546,14 +546,14 @@ function FormRenderer({
|
|
|
546
546
|
value: (_j = values[field.name]) != null ? _j : false,
|
|
547
547
|
onChange: (v) => handleChange(field.name, v)
|
|
548
548
|
};
|
|
549
|
-
const el = /* @__PURE__ */
|
|
549
|
+
const el = /* @__PURE__ */ React2.createElement(
|
|
550
550
|
"div",
|
|
551
551
|
{
|
|
552
552
|
key: (_k = field.id) != null ? _k : field.name,
|
|
553
553
|
className: fieldClassName,
|
|
554
554
|
style
|
|
555
555
|
},
|
|
556
|
-
/* @__PURE__ */
|
|
556
|
+
/* @__PURE__ */ React2.createElement("label", { htmlFor: field.name }, /* @__PURE__ */ React2.createElement(
|
|
557
557
|
"input",
|
|
558
558
|
{
|
|
559
559
|
type: "checkbox",
|
|
@@ -563,7 +563,7 @@ function FormRenderer({
|
|
|
563
563
|
required: (_l = field.required) != null ? _l : false,
|
|
564
564
|
onChange: (e) => handleChange(field.name, e.target.checked)
|
|
565
565
|
}
|
|
566
|
-
), field.label && /* @__PURE__ */
|
|
566
|
+
), field.label && /* @__PURE__ */ React2.createElement("span", null, field.label))
|
|
567
567
|
);
|
|
568
568
|
return renderField ? renderField(field, context, el) : el;
|
|
569
569
|
}
|
|
@@ -580,7 +580,7 @@ function FormRenderer({
|
|
|
580
580
|
return renderSelectField(field, style, US_STATES);
|
|
581
581
|
case "message":
|
|
582
582
|
if (renderMessage && field.message) {
|
|
583
|
-
return /* @__PURE__ */
|
|
583
|
+
return /* @__PURE__ */ React2.createElement(React2.Fragment, { key: (_p = (_o = field.id) != null ? _o : field.blockName) != null ? _p : "message" }, renderMessage(field.message));
|
|
584
584
|
}
|
|
585
585
|
return null;
|
|
586
586
|
default:
|
|
@@ -588,7 +588,7 @@ function FormRenderer({
|
|
|
588
588
|
}
|
|
589
589
|
};
|
|
590
590
|
const buttonLabel = form.submitButtonLabel || "Submit";
|
|
591
|
-
return /* @__PURE__ */
|
|
591
|
+
return /* @__PURE__ */ React2.createElement("form", { onSubmit: handleSubmit, className }, (_a = form.fields) == null ? void 0 : _a.map((field) => renderFieldElement(field)), renderButton ? renderButton({ isSubmitting, label: buttonLabel }) : /* @__PURE__ */ React2.createElement(
|
|
592
592
|
"button",
|
|
593
593
|
{
|
|
594
594
|
type: "submit",
|
|
@@ -600,7 +600,7 @@ function FormRenderer({
|
|
|
600
600
|
}
|
|
601
601
|
|
|
602
602
|
// src/components/Image/index.tsx
|
|
603
|
-
import { useCallback as useCallback2, useState as useState2 } from "react";
|
|
603
|
+
import React3, { useCallback as useCallback2, useState as useState2 } from "react";
|
|
604
604
|
|
|
605
605
|
// src/utils/image.ts
|
|
606
606
|
var IMAGE_SIZES = [384, 768, 1536];
|
|
@@ -708,7 +708,7 @@ function Image({
|
|
|
708
708
|
transition: "opacity 0.3s ease",
|
|
709
709
|
pointerEvents: "none"
|
|
710
710
|
});
|
|
711
|
-
return /* @__PURE__ */
|
|
711
|
+
return /* @__PURE__ */ React3.createElement("div", { className, style: containerStyle }, hasLqip && /* @__PURE__ */ React3.createElement(
|
|
712
712
|
"img",
|
|
713
713
|
{
|
|
714
714
|
"aria-hidden": true,
|
|
@@ -716,7 +716,7 @@ function Image({
|
|
|
716
716
|
src: image.lqip,
|
|
717
717
|
style: lqipStyle
|
|
718
718
|
}
|
|
719
|
-
), /* @__PURE__ */
|
|
719
|
+
), /* @__PURE__ */ React3.createElement(
|
|
720
720
|
"img",
|
|
721
721
|
{
|
|
722
722
|
ref: imgRef,
|
package/dist/components.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/RichTextContent/index.tsx","../src/components/FormRenderer/index.tsx","../src/components/FormRenderer/countries.ts","../src/components/Image/index.tsx","../src/utils/image.ts"],"sourcesContent":["'use client'\n\nimport React from 'react'\nimport {\n SerializedBlockNode,\n SerializedLinkNode,\n} from '@payloadcms/richtext-lexical'\nimport {\n SerializedEditorState,\n SerializedLexicalNode,\n} from '@payloadcms/richtext-lexical/lexical'\nimport {\n defaultJSXConverters,\n JSXConverter,\n LinkJSXConverter,\n RichText,\n} from '@payloadcms/richtext-lexical/react'\n\nexport type RichTextData = SerializedEditorState<SerializedLexicalNode>\n\nexport interface RichTextContentProps {\n data: RichTextData\n className?: string\n internalDocToHref?: (args: { linkNode: SerializedLinkNode }) => string\n blocks?: {\n Iframe?: JSXConverter<\n SerializedBlockNode<{\n blockName?: string | null\n blockType: string\n url: string\n }>\n >\n Player?: JSXConverter<\n SerializedBlockNode<{\n blockName?: string | null\n blockType: string\n url: string\n }>\n >\n }\n}\n\nexport function RichTextContent({\n data,\n className,\n internalDocToHref,\n blocks,\n}: RichTextContentProps) {\n return (\n <RichText\n data={data}\n className={className}\n converters={{\n ...defaultJSXConverters,\n ...LinkJSXConverter({\n internalDocToHref,\n }),\n blocks: blocks\n ? (blocks as Record<\n string,\n JSXConverter<\n SerializedBlockNode<{\n blockName?: string | null\n blockType: string\n }>\n >\n >)\n : undefined,\n }}\n />\n )\n}\n","'use client'\n\nimport React, { useState, useCallback, useEffect, useRef } from 'react'\nimport type { Form } from '../../payload-types'\nimport type { RichTextData } from '../RichTextContent'\nimport { COUNTRIES, US_STATES } from './countries'\n\nexport type FormField = NonNullable<Form['fields']>[number]\nexport type InputField = Exclude<FormField, { blockType: 'message' }>\nexport type FormValues = Record<string, string | number | boolean>\nexport type SubmissionData = { field: string; value: string }[]\n\nexport function toSubmissionData(values: FormValues): SubmissionData {\n return Object.entries(values).map(([field, value]) => ({\n field,\n value: String(value),\n }))\n}\n\nexport interface FieldRenderContext {\n value: string | number | boolean\n onChange: (value: string | number | boolean) => void\n}\n\nexport interface FormRendererProps {\n form: Form\n onSubmit: (data: FormValues) => void | Promise<void>\n className?: string\n fieldClassName?: string\n buttonClassName?: string\n renderField?: (\n field: FormField,\n context: FieldRenderContext,\n defaultRender: React.ReactElement,\n ) => React.ReactElement\n renderMessage?: (data: RichTextData) => React.ReactElement\n renderButton?: (props: {\n isSubmitting: boolean\n label: string\n }) => React.ReactElement\n}\n\nfunction getInitialValues(fields: Form['fields']): FormValues {\n const values: FormValues = {}\n if (!fields) return values\n for (const field of fields) {\n if (field.blockType === 'message') continue\n if (field.blockType === 'checkbox') {\n values[field.name] = field.defaultValue ?? false\n } else if (\n field.blockType === 'number' ||\n field.blockType === 'text' ||\n field.blockType === 'textarea' ||\n field.blockType === 'select'\n ) {\n values[field.name] = field.defaultValue ?? ''\n } else {\n values[field.name] = ''\n }\n }\n return values\n}\n\nexport function FormRenderer({\n form,\n onSubmit,\n className,\n fieldClassName,\n buttonClassName,\n renderField,\n renderMessage,\n renderButton,\n}: FormRendererProps) {\n const [values, setValues] = useState<FormValues>(() =>\n getInitialValues(form.fields),\n )\n const [isSubmitting, setIsSubmitting] = useState(false)\n const submittingRef = useRef(false)\n\n useEffect(() => {\n setValues(getInitialValues(form.fields))\n // eslint-disable-next-line react-hooks/exhaustive-deps -- reset only on form identity change\n }, [form.id])\n\n const handleChange = useCallback(\n (name: string, value: string | number | boolean) => {\n setValues((prev) => ({ ...prev, [name]: value }))\n },\n [],\n )\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n if (submittingRef.current) return\n submittingRef.current = true\n setIsSubmitting(true)\n try {\n await onSubmit(values)\n } finally {\n submittingRef.current = false\n setIsSubmitting(false)\n }\n }\n\n const wrapField = (\n field: InputField,\n style: React.CSSProperties | undefined,\n input: React.ReactNode,\n ): React.ReactElement => {\n const context: FieldRenderContext = {\n value: values[field.name] ?? '',\n onChange: (v) => handleChange(field.name, v),\n }\n const el = (\n <div\n key={field.id ?? field.name}\n className={fieldClassName}\n style={style}\n >\n {field.label && <label htmlFor={field.name}>{field.label}</label>}\n {input}\n </div>\n )\n return renderField ? renderField(field, context, el) : el\n }\n\n const renderSelectField = (\n field: InputField,\n style: React.CSSProperties | undefined,\n options: readonly { value: string; label: string }[],\n placeholder?: string,\n ): React.ReactElement =>\n wrapField(\n field,\n style,\n <select\n id={field.name}\n name={field.name}\n value={String(values[field.name] ?? '')}\n required={field.required ?? false}\n onChange={(e) => handleChange(field.name, e.target.value)}\n >\n <option value=\"\">{placeholder || 'Select…'}</option>\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>,\n )\n\n const renderFieldElement = (field: FormField): React.ReactElement | null => {\n const style =\n field.blockType !== 'message' && field.width\n ? { width: `${field.width}%` }\n : undefined\n\n switch (field.blockType) {\n case 'text':\n return wrapField(\n field,\n style,\n <input\n type=\"text\"\n id={field.name}\n name={field.name}\n value={String(values[field.name] ?? '')}\n placeholder={field.placeholder ?? undefined}\n required={field.required ?? false}\n onChange={(e) => handleChange(field.name, e.target.value)}\n />,\n )\n case 'email':\n return wrapField(\n field,\n style,\n <input\n type=\"email\"\n id={field.name}\n name={field.name}\n value={String(values[field.name] ?? '')}\n required={field.required ?? false}\n onChange={(e) => handleChange(field.name, e.target.value)}\n />,\n )\n case 'number':\n return wrapField(\n field,\n style,\n <input\n type=\"number\"\n id={field.name}\n name={field.name}\n value={String(values[field.name] ?? '')}\n required={field.required ?? false}\n onChange={(e) => {\n const v = e.target.value\n if (v === '') return handleChange(field.name, '')\n const n = Number(v)\n if (Number.isFinite(n)) handleChange(field.name, n)\n }}\n />,\n )\n case 'textarea':\n return wrapField(\n field,\n style,\n <textarea\n id={field.name}\n name={field.name}\n value={String(values[field.name] ?? '')}\n required={field.required ?? false}\n onChange={(e) => handleChange(field.name, e.target.value)}\n />,\n )\n case 'checkbox': {\n const context: FieldRenderContext = {\n value: values[field.name] ?? false,\n onChange: (v) => handleChange(field.name, v),\n }\n const el = (\n <div\n key={field.id ?? field.name}\n className={fieldClassName}\n style={style}\n >\n <label htmlFor={field.name}>\n <input\n type=\"checkbox\"\n id={field.name}\n name={field.name}\n checked={Boolean(values[field.name])}\n required={field.required ?? false}\n onChange={(e) => handleChange(field.name, e.target.checked)}\n />\n {field.label && <span>{field.label}</span>}\n </label>\n </div>\n )\n return renderField ? renderField(field, context, el) : el\n }\n case 'select':\n return renderSelectField(\n field,\n style,\n field.options ?? [],\n field.placeholder ?? undefined,\n )\n case 'country':\n return renderSelectField(field, style, COUNTRIES)\n case 'state':\n return renderSelectField(field, style, US_STATES)\n case 'message':\n if (renderMessage && field.message) {\n return (\n <React.Fragment key={field.id ?? field.blockName ?? 'message'}>\n {renderMessage(field.message as RichTextData)}\n </React.Fragment>\n )\n }\n return null\n default:\n return null\n }\n }\n\n const buttonLabel = form.submitButtonLabel || 'Submit'\n\n return (\n <form onSubmit={handleSubmit} className={className}>\n {form.fields?.map((field) => renderFieldElement(field))}\n {renderButton ? (\n renderButton({ isSubmitting, label: buttonLabel })\n ) : (\n <button\n type=\"submit\"\n disabled={isSubmitting}\n className={buttonClassName}\n >\n {buttonLabel}\n </button>\n )}\n </form>\n )\n}\n","/** ISO 3166-1 country list (code → name) */\nexport const COUNTRIES: readonly { value: string; label: string }[] = [\n { value: 'AF', label: 'Afghanistan' },\n { value: 'AX', label: 'Åland Islands' },\n { value: 'AL', label: 'Albania' },\n { value: 'DZ', label: 'Algeria' },\n { value: 'AS', label: 'American Samoa' },\n { value: 'AD', label: 'Andorra' },\n { value: 'AO', label: 'Angola' },\n { value: 'AI', label: 'Anguilla' },\n { value: 'AQ', label: 'Antarctica' },\n { value: 'AG', label: 'Antigua and Barbuda' },\n { value: 'AR', label: 'Argentina' },\n { value: 'AM', label: 'Armenia' },\n { value: 'AW', label: 'Aruba' },\n { value: 'AU', label: 'Australia' },\n { value: 'AT', label: 'Austria' },\n { value: 'AZ', label: 'Azerbaijan' },\n { value: 'BS', label: 'Bahamas' },\n { value: 'BH', label: 'Bahrain' },\n { value: 'BD', label: 'Bangladesh' },\n { value: 'BB', label: 'Barbados' },\n { value: 'BY', label: 'Belarus' },\n { value: 'BE', label: 'Belgium' },\n { value: 'BZ', label: 'Belize' },\n { value: 'BJ', label: 'Benin' },\n { value: 'BM', label: 'Bermuda' },\n { value: 'BT', label: 'Bhutan' },\n { value: 'BO', label: 'Bolivia' },\n { value: 'BA', label: 'Bosnia and Herzegovina' },\n { value: 'BW', label: 'Botswana' },\n { value: 'BV', label: 'Bouvet Island' },\n { value: 'BR', label: 'Brazil' },\n { value: 'IO', label: 'British Indian Ocean Territory' },\n { value: 'BN', label: 'Brunei Darussalam' },\n { value: 'BG', label: 'Bulgaria' },\n { value: 'BF', label: 'Burkina Faso' },\n { value: 'BI', label: 'Burundi' },\n { value: 'KH', label: 'Cambodia' },\n { value: 'CM', label: 'Cameroon' },\n { value: 'CA', label: 'Canada' },\n { value: 'CV', label: 'Cape Verde' },\n { value: 'KY', label: 'Cayman Islands' },\n { value: 'CF', label: 'Central African Republic' },\n { value: 'TD', label: 'Chad' },\n { value: 'CL', label: 'Chile' },\n { value: 'CN', label: 'China' },\n { value: 'CX', label: 'Christmas Island' },\n { value: 'CC', label: 'Cocos (Keeling) Islands' },\n { value: 'CO', label: 'Colombia' },\n { value: 'KM', label: 'Comoros' },\n { value: 'CG', label: 'Congo' },\n { value: 'CD', label: 'Congo, Democratic Republic' },\n { value: 'CK', label: 'Cook Islands' },\n { value: 'CR', label: 'Costa Rica' },\n { value: 'CI', label: \"Côte d'Ivoire\" },\n { value: 'HR', label: 'Croatia' },\n { value: 'CU', label: 'Cuba' },\n { value: 'CY', label: 'Cyprus' },\n { value: 'CZ', label: 'Czech Republic' },\n { value: 'DK', label: 'Denmark' },\n { value: 'DJ', label: 'Djibouti' },\n { value: 'DM', label: 'Dominica' },\n { value: 'DO', label: 'Dominican Republic' },\n { value: 'EC', label: 'Ecuador' },\n { value: 'EG', label: 'Egypt' },\n { value: 'SV', label: 'El Salvador' },\n { value: 'GQ', label: 'Equatorial Guinea' },\n { value: 'ER', label: 'Eritrea' },\n { value: 'EE', label: 'Estonia' },\n { value: 'ET', label: 'Ethiopia' },\n { value: 'FK', label: 'Falkland Islands' },\n { value: 'FO', label: 'Faroe Islands' },\n { value: 'FJ', label: 'Fiji' },\n { value: 'FI', label: 'Finland' },\n { value: 'FR', label: 'France' },\n { value: 'GF', label: 'French Guiana' },\n { value: 'PF', label: 'French Polynesia' },\n { value: 'TF', label: 'French Southern Territories' },\n { value: 'GA', label: 'Gabon' },\n { value: 'GM', label: 'Gambia' },\n { value: 'GE', label: 'Georgia' },\n { value: 'DE', label: 'Germany' },\n { value: 'GH', label: 'Ghana' },\n { value: 'GI', label: 'Gibraltar' },\n { value: 'GR', label: 'Greece' },\n { value: 'GL', label: 'Greenland' },\n { value: 'GD', label: 'Grenada' },\n { value: 'GP', label: 'Guadeloupe' },\n { value: 'GU', label: 'Guam' },\n { value: 'GT', label: 'Guatemala' },\n { value: 'GG', label: 'Guernsey' },\n { value: 'GN', label: 'Guinea' },\n { value: 'GW', label: 'Guinea-Bissau' },\n { value: 'GY', label: 'Guyana' },\n { value: 'HT', label: 'Haiti' },\n { value: 'VA', label: 'Holy See (Vatican)' },\n { value: 'HN', label: 'Honduras' },\n { value: 'HK', label: 'Hong Kong' },\n { value: 'HU', label: 'Hungary' },\n { value: 'IS', label: 'Iceland' },\n { value: 'IN', label: 'India' },\n { value: 'ID', label: 'Indonesia' },\n { value: 'IR', label: 'Iran' },\n { value: 'IQ', label: 'Iraq' },\n { value: 'IE', label: 'Ireland' },\n { value: 'IM', label: 'Isle of Man' },\n { value: 'IL', label: 'Israel' },\n { value: 'IT', label: 'Italy' },\n { value: 'JM', label: 'Jamaica' },\n { value: 'JP', label: 'Japan' },\n { value: 'JE', label: 'Jersey' },\n { value: 'JO', label: 'Jordan' },\n { value: 'KZ', label: 'Kazakhstan' },\n { value: 'KE', label: 'Kenya' },\n { value: 'KI', label: 'Kiribati' },\n { value: 'KP', label: 'Korea, North' },\n { value: 'KR', label: 'Korea, South' },\n { value: 'KW', label: 'Kuwait' },\n { value: 'KG', label: 'Kyrgyzstan' },\n { value: 'LA', label: 'Laos' },\n { value: 'LV', label: 'Latvia' },\n { value: 'LB', label: 'Lebanon' },\n { value: 'LS', label: 'Lesotho' },\n { value: 'LR', label: 'Liberia' },\n { value: 'LY', label: 'Libya' },\n { value: 'LI', label: 'Liechtenstein' },\n { value: 'LT', label: 'Lithuania' },\n { value: 'LU', label: 'Luxembourg' },\n { value: 'MO', label: 'Macao' },\n { value: 'MK', label: 'North Macedonia' },\n { value: 'MG', label: 'Madagascar' },\n { value: 'MW', label: 'Malawi' },\n { value: 'MY', label: 'Malaysia' },\n { value: 'MV', label: 'Maldives' },\n { value: 'ML', label: 'Mali' },\n { value: 'MT', label: 'Malta' },\n { value: 'MH', label: 'Marshall Islands' },\n { value: 'MQ', label: 'Martinique' },\n { value: 'MR', label: 'Mauritania' },\n { value: 'MU', label: 'Mauritius' },\n { value: 'YT', label: 'Mayotte' },\n { value: 'MX', label: 'Mexico' },\n { value: 'FM', label: 'Micronesia' },\n { value: 'MD', label: 'Moldova' },\n { value: 'MC', label: 'Monaco' },\n { value: 'MN', label: 'Mongolia' },\n { value: 'ME', label: 'Montenegro' },\n { value: 'MS', label: 'Montserrat' },\n { value: 'MA', label: 'Morocco' },\n { value: 'MZ', label: 'Mozambique' },\n { value: 'MM', label: 'Myanmar' },\n { value: 'NA', label: 'Namibia' },\n { value: 'NR', label: 'Nauru' },\n { value: 'NP', label: 'Nepal' },\n { value: 'NL', label: 'Netherlands' },\n { value: 'NC', label: 'New Caledonia' },\n { value: 'NZ', label: 'New Zealand' },\n { value: 'NI', label: 'Nicaragua' },\n { value: 'NE', label: 'Niger' },\n { value: 'NG', label: 'Nigeria' },\n { value: 'NU', label: 'Niue' },\n { value: 'NF', label: 'Norfolk Island' },\n { value: 'MP', label: 'Northern Mariana Islands' },\n { value: 'NO', label: 'Norway' },\n { value: 'OM', label: 'Oman' },\n { value: 'PK', label: 'Pakistan' },\n { value: 'PW', label: 'Palau' },\n { value: 'PS', label: 'Palestine' },\n { value: 'PA', label: 'Panama' },\n { value: 'PG', label: 'Papua New Guinea' },\n { value: 'PY', label: 'Paraguay' },\n { value: 'PE', label: 'Peru' },\n { value: 'PH', label: 'Philippines' },\n { value: 'PN', label: 'Pitcairn' },\n { value: 'PL', label: 'Poland' },\n { value: 'PT', label: 'Portugal' },\n { value: 'PR', label: 'Puerto Rico' },\n { value: 'QA', label: 'Qatar' },\n { value: 'RE', label: 'Réunion' },\n { value: 'RO', label: 'Romania' },\n { value: 'RU', label: 'Russian Federation' },\n { value: 'RW', label: 'Rwanda' },\n { value: 'BL', label: 'Saint Barthélemy' },\n { value: 'SH', label: 'Saint Helena' },\n { value: 'KN', label: 'Saint Kitts and Nevis' },\n { value: 'LC', label: 'Saint Lucia' },\n { value: 'MF', label: 'Saint Martin' },\n { value: 'PM', label: 'Saint Pierre and Miquelon' },\n { value: 'VC', label: 'Saint Vincent and the Grenadines' },\n { value: 'WS', label: 'Samoa' },\n { value: 'SM', label: 'San Marino' },\n { value: 'ST', label: 'Sao Tome and Principe' },\n { value: 'SA', label: 'Saudi Arabia' },\n { value: 'SN', label: 'Senegal' },\n { value: 'RS', label: 'Serbia' },\n { value: 'SC', label: 'Seychelles' },\n { value: 'SL', label: 'Sierra Leone' },\n { value: 'SG', label: 'Singapore' },\n { value: 'SX', label: 'Sint Maarten' },\n { value: 'SK', label: 'Slovakia' },\n { value: 'SI', label: 'Slovenia' },\n { value: 'SB', label: 'Solomon Islands' },\n { value: 'SO', label: 'Somalia' },\n { value: 'ZA', label: 'South Africa' },\n { value: 'GS', label: 'South Georgia' },\n { value: 'SS', label: 'South Sudan' },\n { value: 'ES', label: 'Spain' },\n { value: 'LK', label: 'Sri Lanka' },\n { value: 'SD', label: 'Sudan' },\n { value: 'SR', label: 'Suriname' },\n { value: 'SJ', label: 'Svalbard and Jan Mayen' },\n { value: 'SZ', label: 'Eswatini' },\n { value: 'SE', label: 'Sweden' },\n { value: 'CH', label: 'Switzerland' },\n { value: 'SY', label: 'Syria' },\n { value: 'TW', label: 'Taiwan' },\n { value: 'TJ', label: 'Tajikistan' },\n { value: 'TZ', label: 'Tanzania' },\n { value: 'TH', label: 'Thailand' },\n { value: 'TL', label: 'Timor-Leste' },\n { value: 'TG', label: 'Togo' },\n { value: 'TK', label: 'Tokelau' },\n { value: 'TO', label: 'Tonga' },\n { value: 'TT', label: 'Trinidad and Tobago' },\n { value: 'TN', label: 'Tunisia' },\n { value: 'TR', label: 'Turkey' },\n { value: 'TM', label: 'Turkmenistan' },\n { value: 'TC', label: 'Turks and Caicos Islands' },\n { value: 'TV', label: 'Tuvalu' },\n { value: 'UG', label: 'Uganda' },\n { value: 'UA', label: 'Ukraine' },\n { value: 'AE', label: 'United Arab Emirates' },\n { value: 'GB', label: 'United Kingdom' },\n { value: 'US', label: 'United States' },\n { value: 'UM', label: 'U.S. Minor Outlying Islands' },\n { value: 'UY', label: 'Uruguay' },\n { value: 'UZ', label: 'Uzbekistan' },\n { value: 'VU', label: 'Vanuatu' },\n { value: 'VE', label: 'Venezuela' },\n { value: 'VN', label: 'Vietnam' },\n { value: 'VG', label: 'Virgin Islands, British' },\n { value: 'VI', label: 'Virgin Islands, U.S.' },\n { value: 'WF', label: 'Wallis and Futuna' },\n { value: 'EH', label: 'Western Sahara' },\n { value: 'YE', label: 'Yemen' },\n { value: 'ZM', label: 'Zambia' },\n { value: 'ZW', label: 'Zimbabwe' },\n] as const\n\n/** US states (code → name) */\nexport const US_STATES: readonly { value: string; label: string }[] = [\n { value: 'AL', label: 'Alabama' },\n { value: 'AK', label: 'Alaska' },\n { value: 'AZ', label: 'Arizona' },\n { value: 'AR', label: 'Arkansas' },\n { value: 'CA', label: 'California' },\n { value: 'CO', label: 'Colorado' },\n { value: 'CT', label: 'Connecticut' },\n { value: 'DE', label: 'Delaware' },\n { value: 'FL', label: 'Florida' },\n { value: 'GA', label: 'Georgia' },\n { value: 'HI', label: 'Hawaii' },\n { value: 'ID', label: 'Idaho' },\n { value: 'IL', label: 'Illinois' },\n { value: 'IN', label: 'Indiana' },\n { value: 'IA', label: 'Iowa' },\n { value: 'KS', label: 'Kansas' },\n { value: 'KY', label: 'Kentucky' },\n { value: 'LA', label: 'Louisiana' },\n { value: 'ME', label: 'Maine' },\n { value: 'MD', label: 'Maryland' },\n { value: 'MA', label: 'Massachusetts' },\n { value: 'MI', label: 'Michigan' },\n { value: 'MN', label: 'Minnesota' },\n { value: 'MS', label: 'Mississippi' },\n { value: 'MO', label: 'Missouri' },\n { value: 'MT', label: 'Montana' },\n { value: 'NE', label: 'Nebraska' },\n { value: 'NV', label: 'Nevada' },\n { value: 'NH', label: 'New Hampshire' },\n { value: 'NJ', label: 'New Jersey' },\n { value: 'NM', label: 'New Mexico' },\n { value: 'NY', label: 'New York' },\n { value: 'NC', label: 'North Carolina' },\n { value: 'ND', label: 'North Dakota' },\n { value: 'OH', label: 'Ohio' },\n { value: 'OK', label: 'Oklahoma' },\n { value: 'OR', label: 'Oregon' },\n { value: 'PA', label: 'Pennsylvania' },\n { value: 'RI', label: 'Rhode Island' },\n { value: 'SC', label: 'South Carolina' },\n { value: 'SD', label: 'South Dakota' },\n { value: 'TN', label: 'Tennessee' },\n { value: 'TX', label: 'Texas' },\n { value: 'UT', label: 'Utah' },\n { value: 'VT', label: 'Vermont' },\n { value: 'VA', label: 'Virginia' },\n { value: 'WA', label: 'Washington' },\n { value: 'WV', label: 'West Virginia' },\n { value: 'WI', label: 'Wisconsin' },\n { value: 'WY', label: 'Wyoming' },\n { value: 'DC', label: 'District of Columbia' },\n] as const\n","'use client'\n\nimport { useCallback, useState } from 'react'\nimport type { CSSProperties } from 'react'\nimport type { ImageData } from '../../utils/image'\nimport { getImageSrcSet, getImagePlaceholderStyle } from '../../utils/image'\n\nexport interface ImageProps {\n /** Payload image document */\n image: ImageData\n /** Display width in CSS pixels (for selecting optimal srcset size) */\n width?: number\n /** Device pixel ratio (default: 1) */\n dpr?: number\n /** Placeholder strategy (default: 'blur') */\n placeholder?: 'blur' | 'color' | 'none'\n /** Container className */\n className?: string\n /** Container style */\n style?: CSSProperties\n /** Inner `<img>` className */\n imgClassName?: string\n /** Inner `<img>` style */\n imgStyle?: CSSProperties\n /** HTML sizes attribute */\n sizes?: string\n /** Loading strategy (default: 'lazy') */\n loading?: 'lazy' | 'eager'\n /** Callback when image finishes loading */\n onLoad?: () => void\n /** Object-fit for the image (default: 'cover') */\n objectFit?: 'cover' | 'contain' | 'fill' | 'none' | 'scale-down'\n}\n\n/**\n * Image component with blur-up / color placeholder support.\n *\n * Uses LQIP (Low Quality Image Placeholder) for a smooth blur-up effect,\n * falling back to palette color or no placeholder.\n */\nexport function Image({\n image,\n width,\n dpr = 1,\n placeholder = 'blur',\n className,\n style,\n imgClassName,\n imgStyle,\n sizes,\n loading = 'lazy',\n onLoad,\n objectFit = 'cover',\n}: ImageProps) {\n const [loaded, setLoaded] = useState(false)\n\n const aspectRatio =\n image.width && image.height ? `${image.width} / ${image.height}` : undefined\n\n const srcSet = getImageSrcSet(image)\n const src = image.url ?? undefined\n\n const placeholderStyle = getImagePlaceholderStyle(image, {\n type: placeholder,\n })\n const hasLqip = placeholder === 'blur' && !!image.lqip\n const hasColorPlaceholder =\n !hasLqip && Object.keys(placeholderStyle).length > 0\n\n // Callback ref: detect SSR-cached images that are already loaded\n const imgRef = useCallback(\n (node: HTMLImageElement | null) => {\n if (node && node.complete && node.naturalWidth > 0) {\n setLoaded(true)\n onLoad?.()\n }\n },\n [onLoad],\n )\n\n const handleLoad = useCallback(() => {\n setLoaded(true)\n onLoad?.()\n }, [onLoad])\n\n // Container styles\n const containerStyle: CSSProperties = {\n position: 'relative',\n overflow: 'hidden',\n ...(aspectRatio ? { aspectRatio } : {}),\n ...(hasColorPlaceholder ? placeholderStyle : {}),\n ...style,\n }\n\n // Shared img base styles\n const imgBase: CSSProperties = {\n display: 'block',\n width: '100%',\n height: '100%',\n objectFit,\n }\n\n // Main image styles\n const mainImgStyle: CSSProperties = {\n ...imgBase,\n opacity: loaded ? 1 : 0,\n transition: 'opacity 0.3s ease',\n ...imgStyle,\n }\n\n // LQIP overlay styles\n const lqipStyle: CSSProperties = {\n ...imgBase,\n position: 'absolute',\n top: 0,\n left: 0,\n filter: 'blur(20px)',\n transform: 'scale(1.1)',\n opacity: loaded ? 0 : 1,\n transition: 'opacity 0.3s ease',\n pointerEvents: 'none',\n }\n\n return (\n <div className={className} style={containerStyle}>\n {hasLqip && (\n <img\n aria-hidden\n alt=\"\"\n src={image.lqip!}\n style={lqipStyle}\n />\n )}\n <img\n ref={imgRef}\n alt={image.alt ?? ''}\n src={src}\n srcSet={srcSet || undefined}\n sizes={sizes}\n width={width ? width * dpr : undefined}\n loading={loading}\n onLoad={handleLoad}\n className={imgClassName}\n style={mainImgStyle}\n />\n </div>\n )\n}\n","/** Palette colors extracted from an image */\nexport interface ImagePalette {\n vibrant?: string | null\n muted?: string | null\n darkVibrant?: string | null\n darkMuted?: string | null\n lightVibrant?: string | null\n lightMuted?: string | null\n}\n\n/** Common image data shape from Payload CMS upload collections */\nexport interface ImageData {\n url?: string | null\n width?: number | null\n height?: number | null\n alt?: string | null\n lqip?: string | null\n palette?: ImagePalette | null\n sizes?: Record<\n string,\n | {\n url?: string | null\n width?: number | null\n height?: number | null\n }\n | undefined\n >\n}\n\n/** Pre-generated image size breakpoints (px) */\nexport const IMAGE_SIZES = [384, 768, 1536] as const\n\n/**\n * Returns the optimal image URL for a given display width.\n *\n * Picks the smallest pre-generated size whose width >= displayWidth × dpr.\n * Falls back to the original URL when no matching size exists.\n *\n * @param image - Payload image document\n * @param displayWidth - CSS pixel width the image will be displayed at\n * @param dpr - Device pixel ratio (default: 1)\n * @returns URL string, or empty string if no URL is available\n */\nexport function getImageUrl(\n image: ImageData,\n displayWidth: number,\n dpr: number = 1,\n): string {\n const target = displayWidth * dpr\n const sizes = image.sizes\n\n if (sizes) {\n for (const size of IMAGE_SIZES) {\n if (size >= target) {\n const entry = sizes[String(size)]\n if (entry?.url) return entry.url\n }\n }\n }\n\n return image.url ?? ''\n}\n\n/**\n * Generates an HTML `srcset` attribute string from pre-generated sizes.\n *\n * Includes all available sizes plus the original image.\n * Example output: `\"url-384 384w, url-768 768w, url-1536 1536w, url-original 2000w\"`\n *\n * @param image - Payload image document\n * @returns srcset string, or empty string if no URLs are available\n */\nexport function getImageSrcSet(image: ImageData): string {\n const parts: string[] = []\n const sizes = image.sizes\n\n if (sizes) {\n for (const size of IMAGE_SIZES) {\n const entry = sizes[String(size)]\n if (entry?.url && entry.width) {\n parts.push(`${entry.url} ${entry.width}w`)\n }\n }\n }\n\n if (image.url && image.width) {\n parts.push(`${image.url} ${image.width}w`)\n }\n\n return parts.join(', ')\n}\n\n/**\n * Returns the LQIP (Low Quality Image Placeholder) data URL for an image.\n *\n * @param image - Payload image document\n * @returns LQIP data URL string, or undefined if not available\n */\nexport function getImageLqip(image: ImageData): string | undefined {\n return image.lqip ?? undefined\n}\n\n/**\n * Returns the extracted color palette for an image.\n *\n * @param image - Payload image document\n * @returns ImagePalette object, or undefined if not available\n */\nexport function getImagePalette(image: ImageData): ImagePalette | undefined {\n return image.palette ?? undefined\n}\n\n/** Options for `getImagePlaceholderStyle` */\nexport interface ImagePlaceholderOptions {\n /** Placeholder strategy (default: 'blur') */\n type?: 'blur' | 'color' | 'none'\n /** Which palette color to use for 'color' strategy (default: 'muted') */\n paletteColor?: keyof ImagePalette\n}\n\n/**\n * Returns inline CSS styles for an image placeholder.\n *\n * - `blur`: uses LQIP as background, falls back to palette color, then empty\n * - `color`: uses palette color as background, falls back to empty\n * - `none`: always returns empty\n *\n * @param image - Payload image document\n * @param options - Placeholder options\n * @returns CSS style object compatible with React CSSProperties\n */\nexport function getImagePlaceholderStyle(\n image: ImageData,\n options?: ImagePlaceholderOptions,\n): Record<string, string> {\n const type = options?.type ?? 'blur'\n const paletteColor = options?.paletteColor ?? 'muted'\n\n if (type === 'none') return {}\n\n const color = image.palette?.[paletteColor]\n\n if (type === 'blur') {\n const lqip = image.lqip\n if (lqip) {\n return {\n backgroundImage: `url(${lqip})`,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n }\n }\n // Cascade: fall back to color\n if (color) {\n return { backgroundColor: color }\n }\n return {}\n }\n\n // type === 'color'\n if (color) {\n return { backgroundColor: color }\n }\n return {}\n}\n"],"mappings":"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","names":["React","React","React","_a","React","useCallback","useState","useState","useCallback"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/RichTextContent/index.tsx","../src/components/FormRenderer/index.tsx","../src/components/FormRenderer/countries.ts","../src/components/Image/index.tsx","../src/utils/image.ts"],"sourcesContent":["'use client'\n\nimport React from 'react'\nimport {\n SerializedBlockNode,\n SerializedLinkNode,\n} from '@payloadcms/richtext-lexical'\nimport {\n SerializedEditorState,\n SerializedLexicalNode,\n} from '@payloadcms/richtext-lexical/lexical'\nimport {\n defaultJSXConverters,\n JSXConverter,\n LinkJSXConverter,\n RichText,\n} from '@payloadcms/richtext-lexical/react'\n\nexport type RichTextData = SerializedEditorState<SerializedLexicalNode>\n\nexport interface RichTextContentProps {\n data: RichTextData\n className?: string\n internalDocToHref?: (args: { linkNode: SerializedLinkNode }) => string\n blocks?: {\n Iframe?: JSXConverter<\n SerializedBlockNode<{\n blockName?: string | null\n blockType: string\n url: string\n }>\n >\n Player?: JSXConverter<\n SerializedBlockNode<{\n blockName?: string | null\n blockType: string\n url: string\n }>\n >\n }\n}\n\nexport function RichTextContent({\n data,\n className,\n internalDocToHref,\n blocks,\n}: RichTextContentProps) {\n return (\n <RichText\n data={data}\n className={className}\n converters={{\n ...defaultJSXConverters,\n ...LinkJSXConverter({\n internalDocToHref,\n }),\n blocks: blocks\n ? (blocks as Record<\n string,\n JSXConverter<\n SerializedBlockNode<{\n blockName?: string | null\n blockType: string\n }>\n >\n >)\n : undefined,\n }}\n />\n )\n}\n","'use client'\n\nimport React, { useState, useCallback, useEffect, useRef } from 'react'\nimport type { Form } from '../../payload-types'\nimport type { RichTextData } from '../RichTextContent'\nimport { COUNTRIES, US_STATES } from './countries'\n\nexport type FormField = NonNullable<Form['fields']>[number]\nexport type InputField = Exclude<FormField, { blockType: 'message' }>\nexport type FormValues = Record<string, string | number | boolean>\nexport type SubmissionData = { field: string; value: string }[]\n\nexport function toSubmissionData(values: FormValues): SubmissionData {\n return Object.entries(values).map(([field, value]) => ({\n field,\n value: String(value),\n }))\n}\n\nexport interface FieldRenderContext {\n value: string | number | boolean\n onChange: (value: string | number | boolean) => void\n}\n\nexport interface FormRendererProps {\n form: Form\n onSubmit: (data: FormValues) => void | Promise<void>\n className?: string\n fieldClassName?: string\n buttonClassName?: string\n renderField?: (\n field: FormField,\n context: FieldRenderContext,\n defaultRender: React.ReactElement,\n ) => React.ReactElement\n renderMessage?: (data: RichTextData) => React.ReactElement\n renderButton?: (props: {\n isSubmitting: boolean\n label: string\n }) => React.ReactElement\n}\n\nfunction getInitialValues(fields: Form['fields']): FormValues {\n const values: FormValues = {}\n if (!fields) return values\n for (const field of fields) {\n if (field.blockType === 'message') continue\n if (field.blockType === 'checkbox') {\n values[field.name] = field.defaultValue ?? false\n } else if (\n field.blockType === 'number' ||\n field.blockType === 'text' ||\n field.blockType === 'textarea' ||\n field.blockType === 'select'\n ) {\n values[field.name] = field.defaultValue ?? ''\n } else {\n values[field.name] = ''\n }\n }\n return values\n}\n\nexport function FormRenderer({\n form,\n onSubmit,\n className,\n fieldClassName,\n buttonClassName,\n renderField,\n renderMessage,\n renderButton,\n}: FormRendererProps) {\n const [values, setValues] = useState<FormValues>(() =>\n getInitialValues(form.fields),\n )\n const [isSubmitting, setIsSubmitting] = useState(false)\n const submittingRef = useRef(false)\n\n useEffect(() => {\n setValues(getInitialValues(form.fields))\n // eslint-disable-next-line react-hooks/exhaustive-deps -- reset only on form identity change\n }, [form.id])\n\n const handleChange = useCallback(\n (name: string, value: string | number | boolean) => {\n setValues((prev) => ({ ...prev, [name]: value }))\n },\n [],\n )\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n if (submittingRef.current) return\n submittingRef.current = true\n setIsSubmitting(true)\n try {\n await onSubmit(values)\n } finally {\n submittingRef.current = false\n setIsSubmitting(false)\n }\n }\n\n const wrapField = (\n field: InputField,\n style: React.CSSProperties | undefined,\n input: React.ReactNode,\n ): React.ReactElement => {\n const context: FieldRenderContext = {\n value: values[field.name] ?? '',\n onChange: (v) => handleChange(field.name, v),\n }\n const el = (\n <div\n key={field.id ?? field.name}\n className={fieldClassName}\n style={style}\n >\n {field.label && <label htmlFor={field.name}>{field.label}</label>}\n {input}\n </div>\n )\n return renderField ? renderField(field, context, el) : el\n }\n\n const renderSelectField = (\n field: InputField,\n style: React.CSSProperties | undefined,\n options: readonly { value: string; label: string }[],\n placeholder?: string,\n ): React.ReactElement =>\n wrapField(\n field,\n style,\n <select\n id={field.name}\n name={field.name}\n value={String(values[field.name] ?? '')}\n required={field.required ?? false}\n onChange={(e) => handleChange(field.name, e.target.value)}\n >\n <option value=\"\">{placeholder || 'Select…'}</option>\n {options.map((opt) => (\n <option key={opt.value} value={opt.value}>\n {opt.label}\n </option>\n ))}\n </select>,\n )\n\n const renderFieldElement = (field: FormField): React.ReactElement | null => {\n const style =\n field.blockType !== 'message' && field.width\n ? { width: `${field.width}%` }\n : undefined\n\n switch (field.blockType) {\n case 'text':\n return wrapField(\n field,\n style,\n <input\n type=\"text\"\n id={field.name}\n name={field.name}\n value={String(values[field.name] ?? '')}\n placeholder={field.placeholder ?? undefined}\n required={field.required ?? false}\n onChange={(e) => handleChange(field.name, e.target.value)}\n />,\n )\n case 'email':\n return wrapField(\n field,\n style,\n <input\n type=\"email\"\n id={field.name}\n name={field.name}\n value={String(values[field.name] ?? '')}\n required={field.required ?? false}\n onChange={(e) => handleChange(field.name, e.target.value)}\n />,\n )\n case 'number':\n return wrapField(\n field,\n style,\n <input\n type=\"number\"\n id={field.name}\n name={field.name}\n value={String(values[field.name] ?? '')}\n required={field.required ?? false}\n onChange={(e) => {\n const v = e.target.value\n if (v === '') return handleChange(field.name, '')\n const n = Number(v)\n if (Number.isFinite(n)) handleChange(field.name, n)\n }}\n />,\n )\n case 'textarea':\n return wrapField(\n field,\n style,\n <textarea\n id={field.name}\n name={field.name}\n value={String(values[field.name] ?? '')}\n required={field.required ?? false}\n onChange={(e) => handleChange(field.name, e.target.value)}\n />,\n )\n case 'checkbox': {\n const context: FieldRenderContext = {\n value: values[field.name] ?? false,\n onChange: (v) => handleChange(field.name, v),\n }\n const el = (\n <div\n key={field.id ?? field.name}\n className={fieldClassName}\n style={style}\n >\n <label htmlFor={field.name}>\n <input\n type=\"checkbox\"\n id={field.name}\n name={field.name}\n checked={Boolean(values[field.name])}\n required={field.required ?? false}\n onChange={(e) => handleChange(field.name, e.target.checked)}\n />\n {field.label && <span>{field.label}</span>}\n </label>\n </div>\n )\n return renderField ? renderField(field, context, el) : el\n }\n case 'select':\n return renderSelectField(\n field,\n style,\n field.options ?? [],\n field.placeholder ?? undefined,\n )\n case 'country':\n return renderSelectField(field, style, COUNTRIES)\n case 'state':\n return renderSelectField(field, style, US_STATES)\n case 'message':\n if (renderMessage && field.message) {\n return (\n <React.Fragment key={field.id ?? field.blockName ?? 'message'}>\n {renderMessage(field.message as RichTextData)}\n </React.Fragment>\n )\n }\n return null\n default:\n return null\n }\n }\n\n const buttonLabel = form.submitButtonLabel || 'Submit'\n\n return (\n <form onSubmit={handleSubmit} className={className}>\n {form.fields?.map((field) => renderFieldElement(field))}\n {renderButton ? (\n renderButton({ isSubmitting, label: buttonLabel })\n ) : (\n <button\n type=\"submit\"\n disabled={isSubmitting}\n className={buttonClassName}\n >\n {buttonLabel}\n </button>\n )}\n </form>\n )\n}\n","/** ISO 3166-1 country list (code → name) */\nexport const COUNTRIES: readonly { value: string; label: string }[] = [\n { value: 'AF', label: 'Afghanistan' },\n { value: 'AX', label: 'Åland Islands' },\n { value: 'AL', label: 'Albania' },\n { value: 'DZ', label: 'Algeria' },\n { value: 'AS', label: 'American Samoa' },\n { value: 'AD', label: 'Andorra' },\n { value: 'AO', label: 'Angola' },\n { value: 'AI', label: 'Anguilla' },\n { value: 'AQ', label: 'Antarctica' },\n { value: 'AG', label: 'Antigua and Barbuda' },\n { value: 'AR', label: 'Argentina' },\n { value: 'AM', label: 'Armenia' },\n { value: 'AW', label: 'Aruba' },\n { value: 'AU', label: 'Australia' },\n { value: 'AT', label: 'Austria' },\n { value: 'AZ', label: 'Azerbaijan' },\n { value: 'BS', label: 'Bahamas' },\n { value: 'BH', label: 'Bahrain' },\n { value: 'BD', label: 'Bangladesh' },\n { value: 'BB', label: 'Barbados' },\n { value: 'BY', label: 'Belarus' },\n { value: 'BE', label: 'Belgium' },\n { value: 'BZ', label: 'Belize' },\n { value: 'BJ', label: 'Benin' },\n { value: 'BM', label: 'Bermuda' },\n { value: 'BT', label: 'Bhutan' },\n { value: 'BO', label: 'Bolivia' },\n { value: 'BA', label: 'Bosnia and Herzegovina' },\n { value: 'BW', label: 'Botswana' },\n { value: 'BV', label: 'Bouvet Island' },\n { value: 'BR', label: 'Brazil' },\n { value: 'IO', label: 'British Indian Ocean Territory' },\n { value: 'BN', label: 'Brunei Darussalam' },\n { value: 'BG', label: 'Bulgaria' },\n { value: 'BF', label: 'Burkina Faso' },\n { value: 'BI', label: 'Burundi' },\n { value: 'KH', label: 'Cambodia' },\n { value: 'CM', label: 'Cameroon' },\n { value: 'CA', label: 'Canada' },\n { value: 'CV', label: 'Cape Verde' },\n { value: 'KY', label: 'Cayman Islands' },\n { value: 'CF', label: 'Central African Republic' },\n { value: 'TD', label: 'Chad' },\n { value: 'CL', label: 'Chile' },\n { value: 'CN', label: 'China' },\n { value: 'CX', label: 'Christmas Island' },\n { value: 'CC', label: 'Cocos (Keeling) Islands' },\n { value: 'CO', label: 'Colombia' },\n { value: 'KM', label: 'Comoros' },\n { value: 'CG', label: 'Congo' },\n { value: 'CD', label: 'Congo, Democratic Republic' },\n { value: 'CK', label: 'Cook Islands' },\n { value: 'CR', label: 'Costa Rica' },\n { value: 'CI', label: \"Côte d'Ivoire\" },\n { value: 'HR', label: 'Croatia' },\n { value: 'CU', label: 'Cuba' },\n { value: 'CY', label: 'Cyprus' },\n { value: 'CZ', label: 'Czech Republic' },\n { value: 'DK', label: 'Denmark' },\n { value: 'DJ', label: 'Djibouti' },\n { value: 'DM', label: 'Dominica' },\n { value: 'DO', label: 'Dominican Republic' },\n { value: 'EC', label: 'Ecuador' },\n { value: 'EG', label: 'Egypt' },\n { value: 'SV', label: 'El Salvador' },\n { value: 'GQ', label: 'Equatorial Guinea' },\n { value: 'ER', label: 'Eritrea' },\n { value: 'EE', label: 'Estonia' },\n { value: 'ET', label: 'Ethiopia' },\n { value: 'FK', label: 'Falkland Islands' },\n { value: 'FO', label: 'Faroe Islands' },\n { value: 'FJ', label: 'Fiji' },\n { value: 'FI', label: 'Finland' },\n { value: 'FR', label: 'France' },\n { value: 'GF', label: 'French Guiana' },\n { value: 'PF', label: 'French Polynesia' },\n { value: 'TF', label: 'French Southern Territories' },\n { value: 'GA', label: 'Gabon' },\n { value: 'GM', label: 'Gambia' },\n { value: 'GE', label: 'Georgia' },\n { value: 'DE', label: 'Germany' },\n { value: 'GH', label: 'Ghana' },\n { value: 'GI', label: 'Gibraltar' },\n { value: 'GR', label: 'Greece' },\n { value: 'GL', label: 'Greenland' },\n { value: 'GD', label: 'Grenada' },\n { value: 'GP', label: 'Guadeloupe' },\n { value: 'GU', label: 'Guam' },\n { value: 'GT', label: 'Guatemala' },\n { value: 'GG', label: 'Guernsey' },\n { value: 'GN', label: 'Guinea' },\n { value: 'GW', label: 'Guinea-Bissau' },\n { value: 'GY', label: 'Guyana' },\n { value: 'HT', label: 'Haiti' },\n { value: 'VA', label: 'Holy See (Vatican)' },\n { value: 'HN', label: 'Honduras' },\n { value: 'HK', label: 'Hong Kong' },\n { value: 'HU', label: 'Hungary' },\n { value: 'IS', label: 'Iceland' },\n { value: 'IN', label: 'India' },\n { value: 'ID', label: 'Indonesia' },\n { value: 'IR', label: 'Iran' },\n { value: 'IQ', label: 'Iraq' },\n { value: 'IE', label: 'Ireland' },\n { value: 'IM', label: 'Isle of Man' },\n { value: 'IL', label: 'Israel' },\n { value: 'IT', label: 'Italy' },\n { value: 'JM', label: 'Jamaica' },\n { value: 'JP', label: 'Japan' },\n { value: 'JE', label: 'Jersey' },\n { value: 'JO', label: 'Jordan' },\n { value: 'KZ', label: 'Kazakhstan' },\n { value: 'KE', label: 'Kenya' },\n { value: 'KI', label: 'Kiribati' },\n { value: 'KP', label: 'Korea, North' },\n { value: 'KR', label: 'Korea, South' },\n { value: 'KW', label: 'Kuwait' },\n { value: 'KG', label: 'Kyrgyzstan' },\n { value: 'LA', label: 'Laos' },\n { value: 'LV', label: 'Latvia' },\n { value: 'LB', label: 'Lebanon' },\n { value: 'LS', label: 'Lesotho' },\n { value: 'LR', label: 'Liberia' },\n { value: 'LY', label: 'Libya' },\n { value: 'LI', label: 'Liechtenstein' },\n { value: 'LT', label: 'Lithuania' },\n { value: 'LU', label: 'Luxembourg' },\n { value: 'MO', label: 'Macao' },\n { value: 'MK', label: 'North Macedonia' },\n { value: 'MG', label: 'Madagascar' },\n { value: 'MW', label: 'Malawi' },\n { value: 'MY', label: 'Malaysia' },\n { value: 'MV', label: 'Maldives' },\n { value: 'ML', label: 'Mali' },\n { value: 'MT', label: 'Malta' },\n { value: 'MH', label: 'Marshall Islands' },\n { value: 'MQ', label: 'Martinique' },\n { value: 'MR', label: 'Mauritania' },\n { value: 'MU', label: 'Mauritius' },\n { value: 'YT', label: 'Mayotte' },\n { value: 'MX', label: 'Mexico' },\n { value: 'FM', label: 'Micronesia' },\n { value: 'MD', label: 'Moldova' },\n { value: 'MC', label: 'Monaco' },\n { value: 'MN', label: 'Mongolia' },\n { value: 'ME', label: 'Montenegro' },\n { value: 'MS', label: 'Montserrat' },\n { value: 'MA', label: 'Morocco' },\n { value: 'MZ', label: 'Mozambique' },\n { value: 'MM', label: 'Myanmar' },\n { value: 'NA', label: 'Namibia' },\n { value: 'NR', label: 'Nauru' },\n { value: 'NP', label: 'Nepal' },\n { value: 'NL', label: 'Netherlands' },\n { value: 'NC', label: 'New Caledonia' },\n { value: 'NZ', label: 'New Zealand' },\n { value: 'NI', label: 'Nicaragua' },\n { value: 'NE', label: 'Niger' },\n { value: 'NG', label: 'Nigeria' },\n { value: 'NU', label: 'Niue' },\n { value: 'NF', label: 'Norfolk Island' },\n { value: 'MP', label: 'Northern Mariana Islands' },\n { value: 'NO', label: 'Norway' },\n { value: 'OM', label: 'Oman' },\n { value: 'PK', label: 'Pakistan' },\n { value: 'PW', label: 'Palau' },\n { value: 'PS', label: 'Palestine' },\n { value: 'PA', label: 'Panama' },\n { value: 'PG', label: 'Papua New Guinea' },\n { value: 'PY', label: 'Paraguay' },\n { value: 'PE', label: 'Peru' },\n { value: 'PH', label: 'Philippines' },\n { value: 'PN', label: 'Pitcairn' },\n { value: 'PL', label: 'Poland' },\n { value: 'PT', label: 'Portugal' },\n { value: 'PR', label: 'Puerto Rico' },\n { value: 'QA', label: 'Qatar' },\n { value: 'RE', label: 'Réunion' },\n { value: 'RO', label: 'Romania' },\n { value: 'RU', label: 'Russian Federation' },\n { value: 'RW', label: 'Rwanda' },\n { value: 'BL', label: 'Saint Barthélemy' },\n { value: 'SH', label: 'Saint Helena' },\n { value: 'KN', label: 'Saint Kitts and Nevis' },\n { value: 'LC', label: 'Saint Lucia' },\n { value: 'MF', label: 'Saint Martin' },\n { value: 'PM', label: 'Saint Pierre and Miquelon' },\n { value: 'VC', label: 'Saint Vincent and the Grenadines' },\n { value: 'WS', label: 'Samoa' },\n { value: 'SM', label: 'San Marino' },\n { value: 'ST', label: 'Sao Tome and Principe' },\n { value: 'SA', label: 'Saudi Arabia' },\n { value: 'SN', label: 'Senegal' },\n { value: 'RS', label: 'Serbia' },\n { value: 'SC', label: 'Seychelles' },\n { value: 'SL', label: 'Sierra Leone' },\n { value: 'SG', label: 'Singapore' },\n { value: 'SX', label: 'Sint Maarten' },\n { value: 'SK', label: 'Slovakia' },\n { value: 'SI', label: 'Slovenia' },\n { value: 'SB', label: 'Solomon Islands' },\n { value: 'SO', label: 'Somalia' },\n { value: 'ZA', label: 'South Africa' },\n { value: 'GS', label: 'South Georgia' },\n { value: 'SS', label: 'South Sudan' },\n { value: 'ES', label: 'Spain' },\n { value: 'LK', label: 'Sri Lanka' },\n { value: 'SD', label: 'Sudan' },\n { value: 'SR', label: 'Suriname' },\n { value: 'SJ', label: 'Svalbard and Jan Mayen' },\n { value: 'SZ', label: 'Eswatini' },\n { value: 'SE', label: 'Sweden' },\n { value: 'CH', label: 'Switzerland' },\n { value: 'SY', label: 'Syria' },\n { value: 'TW', label: 'Taiwan' },\n { value: 'TJ', label: 'Tajikistan' },\n { value: 'TZ', label: 'Tanzania' },\n { value: 'TH', label: 'Thailand' },\n { value: 'TL', label: 'Timor-Leste' },\n { value: 'TG', label: 'Togo' },\n { value: 'TK', label: 'Tokelau' },\n { value: 'TO', label: 'Tonga' },\n { value: 'TT', label: 'Trinidad and Tobago' },\n { value: 'TN', label: 'Tunisia' },\n { value: 'TR', label: 'Turkey' },\n { value: 'TM', label: 'Turkmenistan' },\n { value: 'TC', label: 'Turks and Caicos Islands' },\n { value: 'TV', label: 'Tuvalu' },\n { value: 'UG', label: 'Uganda' },\n { value: 'UA', label: 'Ukraine' },\n { value: 'AE', label: 'United Arab Emirates' },\n { value: 'GB', label: 'United Kingdom' },\n { value: 'US', label: 'United States' },\n { value: 'UM', label: 'U.S. Minor Outlying Islands' },\n { value: 'UY', label: 'Uruguay' },\n { value: 'UZ', label: 'Uzbekistan' },\n { value: 'VU', label: 'Vanuatu' },\n { value: 'VE', label: 'Venezuela' },\n { value: 'VN', label: 'Vietnam' },\n { value: 'VG', label: 'Virgin Islands, British' },\n { value: 'VI', label: 'Virgin Islands, U.S.' },\n { value: 'WF', label: 'Wallis and Futuna' },\n { value: 'EH', label: 'Western Sahara' },\n { value: 'YE', label: 'Yemen' },\n { value: 'ZM', label: 'Zambia' },\n { value: 'ZW', label: 'Zimbabwe' },\n] as const\n\n/** US states (code → name) */\nexport const US_STATES: readonly { value: string; label: string }[] = [\n { value: 'AL', label: 'Alabama' },\n { value: 'AK', label: 'Alaska' },\n { value: 'AZ', label: 'Arizona' },\n { value: 'AR', label: 'Arkansas' },\n { value: 'CA', label: 'California' },\n { value: 'CO', label: 'Colorado' },\n { value: 'CT', label: 'Connecticut' },\n { value: 'DE', label: 'Delaware' },\n { value: 'FL', label: 'Florida' },\n { value: 'GA', label: 'Georgia' },\n { value: 'HI', label: 'Hawaii' },\n { value: 'ID', label: 'Idaho' },\n { value: 'IL', label: 'Illinois' },\n { value: 'IN', label: 'Indiana' },\n { value: 'IA', label: 'Iowa' },\n { value: 'KS', label: 'Kansas' },\n { value: 'KY', label: 'Kentucky' },\n { value: 'LA', label: 'Louisiana' },\n { value: 'ME', label: 'Maine' },\n { value: 'MD', label: 'Maryland' },\n { value: 'MA', label: 'Massachusetts' },\n { value: 'MI', label: 'Michigan' },\n { value: 'MN', label: 'Minnesota' },\n { value: 'MS', label: 'Mississippi' },\n { value: 'MO', label: 'Missouri' },\n { value: 'MT', label: 'Montana' },\n { value: 'NE', label: 'Nebraska' },\n { value: 'NV', label: 'Nevada' },\n { value: 'NH', label: 'New Hampshire' },\n { value: 'NJ', label: 'New Jersey' },\n { value: 'NM', label: 'New Mexico' },\n { value: 'NY', label: 'New York' },\n { value: 'NC', label: 'North Carolina' },\n { value: 'ND', label: 'North Dakota' },\n { value: 'OH', label: 'Ohio' },\n { value: 'OK', label: 'Oklahoma' },\n { value: 'OR', label: 'Oregon' },\n { value: 'PA', label: 'Pennsylvania' },\n { value: 'RI', label: 'Rhode Island' },\n { value: 'SC', label: 'South Carolina' },\n { value: 'SD', label: 'South Dakota' },\n { value: 'TN', label: 'Tennessee' },\n { value: 'TX', label: 'Texas' },\n { value: 'UT', label: 'Utah' },\n { value: 'VT', label: 'Vermont' },\n { value: 'VA', label: 'Virginia' },\n { value: 'WA', label: 'Washington' },\n { value: 'WV', label: 'West Virginia' },\n { value: 'WI', label: 'Wisconsin' },\n { value: 'WY', label: 'Wyoming' },\n { value: 'DC', label: 'District of Columbia' },\n] as const\n","'use client'\n\nimport React, { useCallback, useState } from 'react'\nimport type { CSSProperties } from 'react'\nimport type { ImageData } from '../../utils/image'\nimport { getImageSrcSet, getImagePlaceholderStyle } from '../../utils/image'\n\nexport interface ImageProps {\n /** Payload image document */\n image: ImageData\n /** Display width in CSS pixels (for selecting optimal srcset size) */\n width?: number\n /** Device pixel ratio (default: 1) */\n dpr?: number\n /** Placeholder strategy (default: 'blur') */\n placeholder?: 'blur' | 'color' | 'none'\n /** Container className */\n className?: string\n /** Container style */\n style?: CSSProperties\n /** Inner `<img>` className */\n imgClassName?: string\n /** Inner `<img>` style */\n imgStyle?: CSSProperties\n /** HTML sizes attribute */\n sizes?: string\n /** Loading strategy (default: 'lazy') */\n loading?: 'lazy' | 'eager'\n /** Callback when image finishes loading */\n onLoad?: () => void\n /** Object-fit for the image (default: 'cover') */\n objectFit?: 'cover' | 'contain' | 'fill' | 'none' | 'scale-down'\n}\n\n/**\n * Image component with blur-up / color placeholder support.\n *\n * Uses LQIP (Low Quality Image Placeholder) for a smooth blur-up effect,\n * falling back to palette color or no placeholder.\n */\nexport function Image({\n image,\n width,\n dpr = 1,\n placeholder = 'blur',\n className,\n style,\n imgClassName,\n imgStyle,\n sizes,\n loading = 'lazy',\n onLoad,\n objectFit = 'cover',\n}: ImageProps) {\n const [loaded, setLoaded] = useState(false)\n\n const aspectRatio =\n image.width && image.height ? `${image.width} / ${image.height}` : undefined\n\n const srcSet = getImageSrcSet(image)\n const src = image.url ?? undefined\n\n const placeholderStyle = getImagePlaceholderStyle(image, {\n type: placeholder,\n })\n const hasLqip = placeholder === 'blur' && !!image.lqip\n const hasColorPlaceholder =\n !hasLqip && Object.keys(placeholderStyle).length > 0\n\n // Callback ref: detect SSR-cached images that are already loaded\n const imgRef = useCallback(\n (node: HTMLImageElement | null) => {\n if (node && node.complete && node.naturalWidth > 0) {\n setLoaded(true)\n onLoad?.()\n }\n },\n [onLoad],\n )\n\n const handleLoad = useCallback(() => {\n setLoaded(true)\n onLoad?.()\n }, [onLoad])\n\n // Container styles\n const containerStyle: CSSProperties = {\n position: 'relative',\n overflow: 'hidden',\n ...(aspectRatio ? { aspectRatio } : {}),\n ...(hasColorPlaceholder ? placeholderStyle : {}),\n ...style,\n }\n\n // Shared img base styles\n const imgBase: CSSProperties = {\n display: 'block',\n width: '100%',\n height: '100%',\n objectFit,\n }\n\n // Main image styles\n const mainImgStyle: CSSProperties = {\n ...imgBase,\n opacity: loaded ? 1 : 0,\n transition: 'opacity 0.3s ease',\n ...imgStyle,\n }\n\n // LQIP overlay styles\n const lqipStyle: CSSProperties = {\n ...imgBase,\n position: 'absolute',\n top: 0,\n left: 0,\n filter: 'blur(20px)',\n transform: 'scale(1.1)',\n opacity: loaded ? 0 : 1,\n transition: 'opacity 0.3s ease',\n pointerEvents: 'none',\n }\n\n return (\n <div className={className} style={containerStyle}>\n {hasLqip && (\n <img\n aria-hidden\n alt=\"\"\n src={image.lqip!}\n style={lqipStyle}\n />\n )}\n <img\n ref={imgRef}\n alt={image.alt ?? ''}\n src={src}\n srcSet={srcSet || undefined}\n sizes={sizes}\n width={width ? width * dpr : undefined}\n loading={loading}\n onLoad={handleLoad}\n className={imgClassName}\n style={mainImgStyle}\n />\n </div>\n )\n}\n","/** Palette colors extracted from an image */\nexport interface ImagePalette {\n vibrant?: string | null\n muted?: string | null\n darkVibrant?: string | null\n darkMuted?: string | null\n lightVibrant?: string | null\n lightMuted?: string | null\n}\n\n/** Common image data shape from Payload CMS upload collections */\nexport interface ImageData {\n url?: string | null\n width?: number | null\n height?: number | null\n alt?: string | null\n lqip?: string | null\n palette?: ImagePalette | null\n sizes?: Record<\n string,\n | {\n url?: string | null\n width?: number | null\n height?: number | null\n }\n | undefined\n >\n}\n\n/** Pre-generated image size breakpoints (px) */\nexport const IMAGE_SIZES = [384, 768, 1536] as const\n\n/**\n * Returns the optimal image URL for a given display width.\n *\n * Picks the smallest pre-generated size whose width >= displayWidth × dpr.\n * Falls back to the original URL when no matching size exists.\n *\n * @param image - Payload image document\n * @param displayWidth - CSS pixel width the image will be displayed at\n * @param dpr - Device pixel ratio (default: 1)\n * @returns URL string, or empty string if no URL is available\n */\nexport function getImageUrl(\n image: ImageData,\n displayWidth: number,\n dpr: number = 1,\n): string {\n const target = displayWidth * dpr\n const sizes = image.sizes\n\n if (sizes) {\n for (const size of IMAGE_SIZES) {\n if (size >= target) {\n const entry = sizes[String(size)]\n if (entry?.url) return entry.url\n }\n }\n }\n\n return image.url ?? ''\n}\n\n/**\n * Generates an HTML `srcset` attribute string from pre-generated sizes.\n *\n * Includes all available sizes plus the original image.\n * Example output: `\"url-384 384w, url-768 768w, url-1536 1536w, url-original 2000w\"`\n *\n * @param image - Payload image document\n * @returns srcset string, or empty string if no URLs are available\n */\nexport function getImageSrcSet(image: ImageData): string {\n const parts: string[] = []\n const sizes = image.sizes\n\n if (sizes) {\n for (const size of IMAGE_SIZES) {\n const entry = sizes[String(size)]\n if (entry?.url && entry.width) {\n parts.push(`${entry.url} ${entry.width}w`)\n }\n }\n }\n\n if (image.url && image.width) {\n parts.push(`${image.url} ${image.width}w`)\n }\n\n return parts.join(', ')\n}\n\n/**\n * Returns the LQIP (Low Quality Image Placeholder) data URL for an image.\n *\n * @param image - Payload image document\n * @returns LQIP data URL string, or undefined if not available\n */\nexport function getImageLqip(image: ImageData): string | undefined {\n return image.lqip ?? undefined\n}\n\n/**\n * Returns the extracted color palette for an image.\n *\n * @param image - Payload image document\n * @returns ImagePalette object, or undefined if not available\n */\nexport function getImagePalette(image: ImageData): ImagePalette | undefined {\n return image.palette ?? undefined\n}\n\n/** Options for `getImagePlaceholderStyle` */\nexport interface ImagePlaceholderOptions {\n /** Placeholder strategy (default: 'blur') */\n type?: 'blur' | 'color' | 'none'\n /** Which palette color to use for 'color' strategy (default: 'muted') */\n paletteColor?: keyof ImagePalette\n}\n\n/**\n * Returns inline CSS styles for an image placeholder.\n *\n * - `blur`: uses LQIP as background, falls back to palette color, then empty\n * - `color`: uses palette color as background, falls back to empty\n * - `none`: always returns empty\n *\n * @param image - Payload image document\n * @param options - Placeholder options\n * @returns CSS style object compatible with React CSSProperties\n */\nexport function getImagePlaceholderStyle(\n image: ImageData,\n options?: ImagePlaceholderOptions,\n): Record<string, string> {\n const type = options?.type ?? 'blur'\n const paletteColor = options?.paletteColor ?? 'muted'\n\n if (type === 'none') return {}\n\n const color = image.palette?.[paletteColor]\n\n if (type === 'blur') {\n const lqip = image.lqip\n if (lqip) {\n return {\n backgroundImage: `url(${lqip})`,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n }\n }\n // Cascade: fall back to color\n if (color) {\n return { backgroundColor: color }\n }\n return {}\n }\n\n // type === 'color'\n if (color) {\n return { backgroundColor: color }\n }\n return {}\n}\n"],"mappings":"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","names":["React","_a","React","React","useCallback","useState","useState","useCallback","React"]}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/** Palette colors extracted from an image */
|
|
2
|
+
interface ImagePalette {
|
|
3
|
+
vibrant?: string | null;
|
|
4
|
+
muted?: string | null;
|
|
5
|
+
darkVibrant?: string | null;
|
|
6
|
+
darkMuted?: string | null;
|
|
7
|
+
lightVibrant?: string | null;
|
|
8
|
+
lightMuted?: string | null;
|
|
9
|
+
}
|
|
10
|
+
/** Common image data shape from Payload CMS upload collections */
|
|
11
|
+
interface ImageData {
|
|
12
|
+
url?: string | null;
|
|
13
|
+
width?: number | null;
|
|
14
|
+
height?: number | null;
|
|
15
|
+
alt?: string | null;
|
|
16
|
+
lqip?: string | null;
|
|
17
|
+
palette?: ImagePalette | null;
|
|
18
|
+
sizes?: Record<string, {
|
|
19
|
+
url?: string | null;
|
|
20
|
+
width?: number | null;
|
|
21
|
+
height?: number | null;
|
|
22
|
+
} | undefined>;
|
|
23
|
+
}
|
|
24
|
+
/** Pre-generated image size breakpoints (px) */
|
|
25
|
+
declare const IMAGE_SIZES: readonly [384, 768, 1536];
|
|
26
|
+
/**
|
|
27
|
+
* Returns the optimal image URL for a given display width.
|
|
28
|
+
*
|
|
29
|
+
* Picks the smallest pre-generated size whose width >= displayWidth × dpr.
|
|
30
|
+
* Falls back to the original URL when no matching size exists.
|
|
31
|
+
*
|
|
32
|
+
* @param image - Payload image document
|
|
33
|
+
* @param displayWidth - CSS pixel width the image will be displayed at
|
|
34
|
+
* @param dpr - Device pixel ratio (default: 1)
|
|
35
|
+
* @returns URL string, or empty string if no URL is available
|
|
36
|
+
*/
|
|
37
|
+
declare function getImageUrl(image: ImageData, displayWidth: number, dpr?: number): string;
|
|
38
|
+
/**
|
|
39
|
+
* Generates an HTML `srcset` attribute string from pre-generated sizes.
|
|
40
|
+
*
|
|
41
|
+
* Includes all available sizes plus the original image.
|
|
42
|
+
* Example output: `"url-384 384w, url-768 768w, url-1536 1536w, url-original 2000w"`
|
|
43
|
+
*
|
|
44
|
+
* @param image - Payload image document
|
|
45
|
+
* @returns srcset string, or empty string if no URLs are available
|
|
46
|
+
*/
|
|
47
|
+
declare function getImageSrcSet(image: ImageData): string;
|
|
48
|
+
/**
|
|
49
|
+
* Returns the LQIP (Low Quality Image Placeholder) data URL for an image.
|
|
50
|
+
*
|
|
51
|
+
* @param image - Payload image document
|
|
52
|
+
* @returns LQIP data URL string, or undefined if not available
|
|
53
|
+
*/
|
|
54
|
+
declare function getImageLqip(image: ImageData): string | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* Returns the extracted color palette for an image.
|
|
57
|
+
*
|
|
58
|
+
* @param image - Payload image document
|
|
59
|
+
* @returns ImagePalette object, or undefined if not available
|
|
60
|
+
*/
|
|
61
|
+
declare function getImagePalette(image: ImageData): ImagePalette | undefined;
|
|
62
|
+
/** Options for `getImagePlaceholderStyle` */
|
|
63
|
+
interface ImagePlaceholderOptions {
|
|
64
|
+
/** Placeholder strategy (default: 'blur') */
|
|
65
|
+
type?: 'blur' | 'color' | 'none';
|
|
66
|
+
/** Which palette color to use for 'color' strategy (default: 'muted') */
|
|
67
|
+
paletteColor?: keyof ImagePalette;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Returns inline CSS styles for an image placeholder.
|
|
71
|
+
*
|
|
72
|
+
* - `blur`: uses LQIP as background, falls back to palette color, then empty
|
|
73
|
+
* - `color`: uses palette color as background, falls back to empty
|
|
74
|
+
* - `none`: always returns empty
|
|
75
|
+
*
|
|
76
|
+
* @param image - Payload image document
|
|
77
|
+
* @param options - Placeholder options
|
|
78
|
+
* @returns CSS style object compatible with React CSSProperties
|
|
79
|
+
*/
|
|
80
|
+
declare function getImagePlaceholderStyle(image: ImageData, options?: ImagePlaceholderOptions): Record<string, string>;
|
|
81
|
+
|
|
82
|
+
export { type ImageData as I, type ImagePalette as a, IMAGE_SIZES as b, getImageSrcSet as c, getImageLqip as d, getImagePalette as e, type ImagePlaceholderOptions as f, getImageUrl as g, getImagePlaceholderStyle as h };
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/** Palette colors extracted from an image */
|
|
2
|
+
interface ImagePalette {
|
|
3
|
+
vibrant?: string | null;
|
|
4
|
+
muted?: string | null;
|
|
5
|
+
darkVibrant?: string | null;
|
|
6
|
+
darkMuted?: string | null;
|
|
7
|
+
lightVibrant?: string | null;
|
|
8
|
+
lightMuted?: string | null;
|
|
9
|
+
}
|
|
10
|
+
/** Common image data shape from Payload CMS upload collections */
|
|
11
|
+
interface ImageData {
|
|
12
|
+
url?: string | null;
|
|
13
|
+
width?: number | null;
|
|
14
|
+
height?: number | null;
|
|
15
|
+
alt?: string | null;
|
|
16
|
+
lqip?: string | null;
|
|
17
|
+
palette?: ImagePalette | null;
|
|
18
|
+
sizes?: Record<string, {
|
|
19
|
+
url?: string | null;
|
|
20
|
+
width?: number | null;
|
|
21
|
+
height?: number | null;
|
|
22
|
+
} | undefined>;
|
|
23
|
+
}
|
|
24
|
+
/** Pre-generated image size breakpoints (px) */
|
|
25
|
+
declare const IMAGE_SIZES: readonly [384, 768, 1536];
|
|
26
|
+
/**
|
|
27
|
+
* Returns the optimal image URL for a given display width.
|
|
28
|
+
*
|
|
29
|
+
* Picks the smallest pre-generated size whose width >= displayWidth × dpr.
|
|
30
|
+
* Falls back to the original URL when no matching size exists.
|
|
31
|
+
*
|
|
32
|
+
* @param image - Payload image document
|
|
33
|
+
* @param displayWidth - CSS pixel width the image will be displayed at
|
|
34
|
+
* @param dpr - Device pixel ratio (default: 1)
|
|
35
|
+
* @returns URL string, or empty string if no URL is available
|
|
36
|
+
*/
|
|
37
|
+
declare function getImageUrl(image: ImageData, displayWidth: number, dpr?: number): string;
|
|
38
|
+
/**
|
|
39
|
+
* Generates an HTML `srcset` attribute string from pre-generated sizes.
|
|
40
|
+
*
|
|
41
|
+
* Includes all available sizes plus the original image.
|
|
42
|
+
* Example output: `"url-384 384w, url-768 768w, url-1536 1536w, url-original 2000w"`
|
|
43
|
+
*
|
|
44
|
+
* @param image - Payload image document
|
|
45
|
+
* @returns srcset string, or empty string if no URLs are available
|
|
46
|
+
*/
|
|
47
|
+
declare function getImageSrcSet(image: ImageData): string;
|
|
48
|
+
/**
|
|
49
|
+
* Returns the LQIP (Low Quality Image Placeholder) data URL for an image.
|
|
50
|
+
*
|
|
51
|
+
* @param image - Payload image document
|
|
52
|
+
* @returns LQIP data URL string, or undefined if not available
|
|
53
|
+
*/
|
|
54
|
+
declare function getImageLqip(image: ImageData): string | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* Returns the extracted color palette for an image.
|
|
57
|
+
*
|
|
58
|
+
* @param image - Payload image document
|
|
59
|
+
* @returns ImagePalette object, or undefined if not available
|
|
60
|
+
*/
|
|
61
|
+
declare function getImagePalette(image: ImageData): ImagePalette | undefined;
|
|
62
|
+
/** Options for `getImagePlaceholderStyle` */
|
|
63
|
+
interface ImagePlaceholderOptions {
|
|
64
|
+
/** Placeholder strategy (default: 'blur') */
|
|
65
|
+
type?: 'blur' | 'color' | 'none';
|
|
66
|
+
/** Which palette color to use for 'color' strategy (default: 'muted') */
|
|
67
|
+
paletteColor?: keyof ImagePalette;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Returns inline CSS styles for an image placeholder.
|
|
71
|
+
*
|
|
72
|
+
* - `blur`: uses LQIP as background, falls back to palette color, then empty
|
|
73
|
+
* - `color`: uses palette color as background, falls back to empty
|
|
74
|
+
* - `none`: always returns empty
|
|
75
|
+
*
|
|
76
|
+
* @param image - Payload image document
|
|
77
|
+
* @param options - Placeholder options
|
|
78
|
+
* @returns CSS style object compatible with React CSSProperties
|
|
79
|
+
*/
|
|
80
|
+
declare function getImagePlaceholderStyle(image: ImageData, options?: ImagePlaceholderOptions): Record<string, string>;
|
|
81
|
+
|
|
82
|
+
export { type ImageData as I, type ImagePalette as a, IMAGE_SIZES as b, getImageSrcSet as c, getImageLqip as d, getImagePalette as e, type ImagePlaceholderOptions as f, getImageUrl as g, getImagePlaceholderStyle as h };
|