@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.
@@ -39,7 +39,7 @@ var __async = (__this, __arguments, generator) => {
39
39
  };
40
40
 
41
41
  // src/components/RichTextContent/index.tsx
42
- import React2 from "react";
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__ */ React2.createElement(
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 React3, { useState, useCallback, useEffect, useRef } from "react";
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__ */ React3.createElement(
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__ */ React3.createElement("label", { htmlFor: field.name }, field.label),
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__ */ React3.createElement(
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__ */ React3.createElement("option", { value: "" }, placeholder || "Select\u2026"),
467
- options.map((opt) => /* @__PURE__ */ React3.createElement("option", { key: opt.value, value: opt.value }, opt.label))
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__ */ React3.createElement(
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__ */ React3.createElement(
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__ */ React3.createElement(
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__ */ React3.createElement(
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__ */ React3.createElement(
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__ */ React3.createElement("label", { htmlFor: field.name }, /* @__PURE__ */ React3.createElement(
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__ */ React3.createElement("span", null, field.label))
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__ */ React3.createElement(React3.Fragment, { key: (_p = (_o = field.id) != null ? _o : field.blockName) != null ? _p : "message" }, renderMessage(field.message));
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__ */ React3.createElement("form", { onSubmit: handleSubmit, className }, (_a = form.fields) == null ? void 0 : _a.map((field) => renderFieldElement(field)), renderButton ? renderButton({ isSubmitting, label: buttonLabel }) : /* @__PURE__ */ React3.createElement(
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__ */ React.createElement("div", { className, style: containerStyle }, hasLqip && /* @__PURE__ */ React.createElement(
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__ */ React.createElement(
719
+ ), /* @__PURE__ */ React3.createElement(
720
720
  "img",
721
721
  {
722
722
  ref: imgRef,
@@ -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 };