navne-default-ad 1.3.0 → 1.3.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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.3.2
4
+
5
+ - Keep both first-name and last-name values/placeholders visible while either name field is focused in builder mode.
6
+ - Apply interactive highlight styling only to the focused name part without changing the name row geometry.
7
+
8
+ ## 1.3.1
9
+
10
+ - Remove the last publication-only layout branch: legacy church/funeral data
11
+ no longer appears in thank-you ads for only one variant.
12
+ - Guarantee identical thank-you DOM/order for classic and publication when
13
+ equivalent data includes residual church/funeral fields.
14
+
3
15
  ## 1.3.0
4
16
 
5
17
  - Standardize classic and publication renders on one shared layout: direct,
package/dist/index.cjs CHANGED
@@ -240,7 +240,9 @@ function DefaultAd({
240
240
  const ceremonyCode = contact.ceremony?.code;
241
241
  const ceremonyLabel = contact.ceremony?.label ?? ceremonyCode;
242
242
  const secondaryFontStyle = typography.secondaryFontFamily != null ? { fontFamily: typography.secondaryFontFamily } : {};
243
- const activeNameState = interaction?.fields?.firstName?.active ? interaction.fields.firstName : interaction?.fields?.lastName?.active ? interaction.fields.lastName : void 0;
243
+ const hasActiveNamePart = Boolean(
244
+ interaction?.fields?.firstName?.active || interaction?.fields?.lastName?.active
245
+ );
244
246
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
245
247
  "div",
246
248
  {
@@ -288,10 +290,10 @@ function DefaultAd({
288
290
  }
289
291
  ),
290
292
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Text, { field: type === "thanks" ? "briefIntroduction" : "title", interaction, className: "gda-break", style: textStyle(typography.titleSize, typography.titleLeading, secondMargin), children: type === "thanks" && second ? fmt.lowercaseFirst(second) : type === "obituaries" ? second : null }),
291
- hasName && !interaction?.fields?.firstName?.active && !interaction?.fields?.lastName?.active ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Text, { className: "gda-name gda-bold gda-secondary-font", style: { ...textStyle(typography.nameSize, typography.nameLeading, nameMargin), ...secondaryFontStyle }, children: [contact.firstName, contact.lastName].filter(Boolean).join(" ") }) : hasName || interaction?.fields?.firstName?.active || interaction?.fields?.lastName?.active ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: `gda-name gda-bold gda-secondary-font ${activeNameState?.className ?? ""}`.trim(), style: { ...textStyle(typography.nameSize, typography.nameLeading, nameMargin), ...secondaryFontStyle, ...activeNameState?.style }, children: [
292
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(NamePart, { field: "firstName", value: contact.firstName, interaction }),
293
+ hasName && !interaction?.fields?.firstName?.active && !interaction?.fields?.lastName?.active ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Text, { className: "gda-name gda-bold gda-secondary-font", style: { ...textStyle(typography.nameSize, typography.nameLeading, nameMargin), ...secondaryFontStyle }, children: [contact.firstName, contact.lastName].filter(Boolean).join(" ") }) : hasName || hasActiveNamePart ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "gda-name gda-bold gda-secondary-font", style: { ...textStyle(typography.nameSize, typography.nameLeading, nameMargin), ...secondaryFontStyle }, children: [
294
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(NamePart, { field: "firstName", value: contact.firstName, interaction, showPlaceholder: hasActiveNamePart }),
293
295
  " ",
294
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(NamePart, { field: "lastName", value: contact.lastName, interaction })
296
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(NamePart, { field: "lastName", value: contact.lastName, interaction, showPlaceholder: hasActiveNamePart })
295
297
  ] }) : showEmptyNamePlaceholder ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "gda-placeholder gda-name gda-bold gda-secondary-font", style: { ...textStyle(typography.nameSize, typography.nameLeading, nameMargin), ...secondaryFontStyle }, children: emptyNamePlaceholder }) : null,
296
298
  contact.showBirthDate && (contact.birthDate || interaction?.fields?.birthDate?.active) || contact.showDeathDate && (contact.deathDate || interaction?.fields?.deathDate?.active) ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
297
299
  "div",
@@ -314,7 +316,7 @@ function DefaultAd({
314
316
  type === "obituaries" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Text, { field: "deceased", interaction, className: "gda-balance", style: textStyle(typography.bodySize, typography.bodyLeading, spacing.deceasedTop), children: text.deceased }) : null,
315
317
  type === "obituaries" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Text, { field: "memorial", interaction, className: "gda-italic gda-break", style: textStyle(typography.memorialSize, typography.memorialLeading, spacing.memorialTop), children: text.memorial }) : null,
316
318
  type === "obituaries" && (text.sender || interaction?.fields?.sender?.active) ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Text, { field: "sender", interaction, className: "gda-bold gda-secondary-font", style: { ...textStyle(typography.senderSize, typography.senderLeading, spacing.senderTop), ...secondaryFontStyle }, children: text.sender }) : null,
317
- (type === "obituaries" || variant === "publication") && ceremonyCode !== "NoCeremony" && (contact.showChurch || contact.showFuneralDate) && (contact.church || contact.funeralDate || interaction?.fields?.church?.active || interaction?.fields?.funeralDate?.active) ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "gda-text", style: textStyle(typography.ceremonySize, typography.ceremonyLeading, spacing.ceremonyTop), children: [
319
+ type === "obituaries" && ceremonyCode !== "NoCeremony" && (contact.showChurch || contact.showFuneralDate) && (contact.church || contact.funeralDate || interaction?.fields?.church?.active || interaction?.fields?.funeralDate?.active) ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "gda-text", style: textStyle(typography.ceremonySize, typography.ceremonyLeading, spacing.ceremonyTop), children: [
318
320
  contact.showChurch && (contact.church || interaction?.fields?.church?.active) ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { "data-default-ad-field": "church", ...fieldEvents("church", interaction), className: `gda-whitespace-pre-line ${interaction?.fields?.church?.active ? interaction.fields.church.className ?? "" : ""}`.trim(), style: interaction?.fields?.church?.active ? interaction.fields.church.style : void 0, children: contact.church ? contact.church.length > 15 ? `${ceremonyLabel ?? ""}
319
321
  ${contact.church}` : `${ceremonyLabel ?? ""} ${contact.church}`.trim() : interaction?.fields?.church?.placeholder }) : null,
320
322
  contact.showFuneralDate && (contact.funeralDate || interaction?.fields?.funeralDate?.active) ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { "data-default-ad-field": "funeralDate", ...fieldEvents("funeralDate", interaction), className: interaction?.fields?.funeralDate?.active ? interaction.fields.funeralDate.className : void 0, style: interaction?.fields?.funeralDate?.active ? interaction.fields.funeralDate.style : void 0, children: contact.funeralDate ? fmt.funeralDate(contact.funeralDate, Boolean(contact.hideFuneralYear)) : interaction?.fields?.funeralDate?.placeholder }) : null
@@ -335,10 +337,20 @@ function calculateHeaderMargins({ first, second, hasName, hasIcon, spacing }) {
335
337
  nameMargin: hasName ? first || second ? spacing.textToName : hasIcon ? spacing.iconToName : 0 : 0
336
338
  };
337
339
  }
338
- function NamePart({ field, value, interaction }) {
340
+ function NamePart({ field, value, interaction, showPlaceholder }) {
339
341
  const state = interaction?.fields?.[field];
340
- if (!value && !state?.active) return null;
341
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { "data-default-ad-field": field, ...fieldEvents(field, interaction), children: value || state?.placeholder });
342
+ if (!value && !showPlaceholder) return null;
343
+ const isPlaceholder = !value;
344
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
345
+ "span",
346
+ {
347
+ "data-default-ad-field": field,
348
+ ...fieldEvents(field, interaction),
349
+ className: `${isPlaceholder && !state?.active ? "gda-placeholder" : ""} ${state?.active ? `gda-name-part-active ${state.className ?? ""}` : ""}`.trim(),
350
+ style: state?.active ? state.style : void 0,
351
+ children: value || state?.placeholder
352
+ }
353
+ );
342
354
  }
343
355
  function ThankYouFields({ text, fmt, typography, spacing, interaction }) {
344
356
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/presets.ts","../src/utils.ts","../src/DefaultAd.tsx"],"sourcesContent":["export { DefaultAd } from \"./DefaultAd\";\nexport { classicDefaultAdStyle, publicationDefaultAdStyle, sharedDefaultAdLayout, styleFromLegacyTemplate } from \"./presets\";\nexport type {\n DefaultAdContact,\n DefaultAdData,\n DefaultAdFormatters,\n DefaultAdField,\n DefaultAdFieldState,\n DefaultAdInteraction,\n DefaultAdIcon,\n DefaultAdMode,\n DefaultAdProps,\n DefaultAdSpacing,\n DefaultAdStyle,\n DefaultAdTextFields,\n DefaultAdType,\n DefaultAdVariant,\n DefaultAdTypography,\n LegacyAdTemplate,\n} from \"./types\";\n","import type { DefaultAdStyle, LegacyAdTemplate } from \"./types\";\n\n/**\n * Canonical layout shared by every consumer. Typography is deliberately kept\n * out of this object so applications can still select licensed/dynamic fonts.\n */\nexport const sharedDefaultAdLayout = {\n columnsMm: 86,\n heightMm: null,\n paddingMm: 4,\n horizontalPaddingMm: 2,\n border: false,\n borderWidthPt: 1.4,\n spacing: {\n iconToText: 11,\n introToTitle: 8,\n // These values originated as unitless React styles and therefore retain\n // their established numeric geometry.\n textToName: 4.2,\n iconToName: 4.95,\n dateTop: 5.6,\n deceasedTop: 6,\n memorialTop: 6,\n senderTop: 8,\n ceremonyTop: 8,\n thanksTop: 7,\n donationTop: 7,\n sectionGapMm: 0,\n },\n} as const satisfies Readonly<DefaultAdStyle>;\n\nexport const classicDefaultAdStyle: Readonly<DefaultAdStyle> = {\n ...sharedDefaultAdLayout,\n typography: {\n fontFamily: \"var(--default-ad-font-primary, Schoolbook, Georgia, serif)\",\n secondaryFontFamily: \"var(--default-ad-font-secondary, Schoolbook, Georgia, serif)\",\n introSize: 10,\n introLeading: 12,\n titleSize: 10,\n titleLeading: 12,\n nameSize: 14,\n nameLeading: 16.8,\n dateSize: 10,\n longDateSize: 10,\n longDateLetterSpacing: \"-0.01em\",\n dateLeading: 12,\n bodySize: 10,\n bodyLeading: 12,\n memorialSize: 10,\n memorialLeading: 12,\n senderSize: 10,\n senderLeading: 12,\n ceremonySize: 10,\n ceremonyLeading: 12,\n thanksSize: 10,\n thanksLeading: 12,\n donationSize: 10,\n donationLeading: 12,\n },\n};\n\nexport const publicationDefaultAdStyle: Readonly<DefaultAdStyle> = {\n ...sharedDefaultAdLayout,\n typography: {\n ...classicDefaultAdStyle.typography,\n fontFamily: \"var(--default-ad-font-primary, Raleway, Arial, sans-serif)\",\n secondaryFontFamily: \"var(--default-ad-font-secondary, Athelas, Georgia, serif)\",\n introSize: 11,\n introLeading: 13,\n titleSize: 11,\n titleLeading: 13,\n nameSize: 17,\n nameLeading: 15,\n dateSize: 11.5,\n longDateSize: 11,\n longDateLetterSpacing: \"-0.01em\",\n bodySize: 12,\n bodyLeading: 13,\n memorialSize: 12,\n memorialLeading: 13,\n senderSize: 13,\n senderLeading: 13,\n ceremonySize: 11,\n ceremonyLeading: 13,\n thanksSize: 11,\n thanksLeading: 13,\n donationSize: 11,\n donationLeading: 13,\n },\n};\n\nexport function styleFromLegacyTemplate(template?: LegacyAdTemplate | null): DefaultAdStyle {\n if (!template) return publicationDefaultAdStyle;\n return {\n ...publicationDefaultAdStyle,\n typography: {\n ...publicationDefaultAdStyle.typography,\n fontFamily: template.font1 || publicationDefaultAdStyle.typography?.fontFamily,\n secondaryFontFamily: template.font2 || publicationDefaultAdStyle.typography?.secondaryFontFamily,\n introSize: template.introSize,\n introLeading: template.introLeading,\n titleSize: template.titleSize,\n titleLeading: template.titleLeading,\n nameSize: template.fullnameSize,\n nameLeading: template.fullnameLeading,\n ...fontPair(template.deceasedText, \"bodySize\", \"bodyLeading\"),\n ...fontPair(template.memorialText, \"memorialSize\", \"memorialLeading\"),\n ...fontPair(template.senderText, \"senderSize\", \"senderLeading\"),\n ...fontPair(template.ceremonyText, \"ceremonySize\", \"ceremonyLeading\"),\n ...fontPair(template.thanksText, \"thanksSize\", \"thanksLeading\"),\n ...fontPair(template.donationText, \"donationSize\", \"donationLeading\"),\n ...tracking(template.longDatesText),\n },\n };\n}\n\nfunction fontPair(value: string | undefined, sizeKey: string, leadingKey: string): Record<string, number> {\n if (!value) return {};\n const size = value.match(/text-\\[(-?[\\d.]+)pt\\]/)?.[1];\n const leading = value.match(/leading-\\[(-?[\\d.]+)pt\\]/)?.[1];\n return {\n ...(size ? { [sizeKey]: Number(size) } : {}),\n ...(leading ? { [leadingKey]: Number(leading) } : {}),\n };\n}\n\nfunction tracking(value: string | undefined): { longDateLetterSpacing?: string } {\n const amount = value?.match(/tracking-\\[([^\\]]+)\\]/)?.[1];\n return amount ? { longDateLetterSpacing: amount } : {};\n}\n","import type { DefaultAdFormatters } from \"./types\";\n\nexport const defaultFormatters: Required<DefaultAdFormatters> = {\n date(value) {\n const match = value.match(/^(\\d{4})-(\\d{2})-(\\d{2})/);\n return match ? `${match[3]}.${match[2]}.${match[1]}` : value;\n },\n funeralDate(value, hideYear) {\n if (!hideYear) return value;\n return value.replace(/([.\\/-])\\d{4}(?=\\D|$)/, \"\");\n },\n lowercaseFirst(value) {\n return value ? value.charAt(0).toLocaleLowerCase() + value.slice(1) : value;\n },\n};\n\nexport function mergeDefined<T extends object>(base: T, overrides?: Partial<T>): T {\n if (!overrides) return { ...base };\n return Object.fromEntries(\n Object.entries({ ...base, ...overrides }).filter(([, value]) => value !== undefined),\n ) as T;\n}\n\nexport function decodeSvgMarkup(value: string): string {\n return value\n .replace(/&lt;/g, \"<\")\n .replace(/&gt;/g, \">\")\n .replace(/&quot;/g, '\"')\n .replace(/&#(?:0*39|x0*27);/gi, \"'\")\n .replace(/&amp;/g, \"&\");\n}\n","import type { CSSProperties, ReactNode } from \"react\";\nimport { classicDefaultAdStyle } from \"./presets\";\nimport type { DefaultAdField, DefaultAdInteraction, DefaultAdProps, DefaultAdSpacing, DefaultAdTypography } from \"./types\";\nimport { decodeSvgMarkup, defaultFormatters, mergeDefined } from \"./utils\";\nimport \"./styles.css\";\n\nfunction textStyle(size: number, leading: number, marginTop: number): CSSProperties {\n return { fontSize: `${size}pt`, lineHeight: `${leading}pt`, marginTop: `${marginTop}pt` };\n}\n\nfunction Text({ children, className = \"\", style, field, interaction }: { children?: ReactNode; className?: string; style: CSSProperties; field?: DefaultAdField; interaction?: DefaultAdInteraction }) {\n const fieldState = field ? interaction?.fields?.[field] : undefined;\n const empty = children === null || children === undefined || children === \"\";\n if (empty && !fieldState?.active) return null;\n const events = field ? fieldEvents(field, interaction) : {};\n if (empty) {\n return <div className=\"gda-field-placeholder-container\"><div data-default-ad-field={field} className={`gda-text gda-field-empty ${className} ${fieldState?.className ?? \"\"}`.trim()} style={{ ...style, ...fieldState?.style }} {...events}>{fieldState?.placeholder}</div></div>;\n }\n return <div data-default-ad-field={field} className={`gda-text ${className} ${fieldState?.active ? fieldState.className ?? \"\" : \"\"}`.trim()} style={{ ...style, ...(fieldState?.active ? fieldState.style : undefined) }} {...events}>{children}</div>;\n}\n\nfunction fieldEvents(field: DefaultAdField, interaction?: DefaultAdInteraction) {\n return {\n onFocus: interaction?.onFieldFocus ? () => interaction.onFieldFocus?.(field) : undefined,\n onBlur: interaction?.onFieldBlur ? () => interaction.onFieldBlur?.(field) : undefined,\n onClick: interaction?.onFieldClick ? () => interaction.onFieldClick?.(field) : undefined,\n };\n}\n\nexport function DefaultAd({\n data,\n style,\n mode = \"published\",\n variant = \"classic\",\n rootRef,\n interaction,\n formatters,\n showEmptyNamePlaceholder = mode === \"builder\",\n emptyNamePlaceholder = \"Fornavn Efternavn\",\n className = \"\",\n rootStyle,\n ...htmlProps\n}: DefaultAdProps) {\n const typography = mergeDefined(\n classicDefaultAdStyle.typography as Required<DefaultAdTypography>,\n style?.typography,\n );\n const spacing = mergeDefined(\n classicDefaultAdStyle.spacing as Required<DefaultAdSpacing>,\n style?.spacing,\n );\n const layout = mergeDefined(classicDefaultAdStyle, style);\n const fmt = { ...defaultFormatters, ...formatters };\n const { contact, text, icon, type } = data;\n const hasName = Boolean(contact.firstName || contact.lastName);\n const first = type === \"thanks\" ? text.thanksIntro : text.intro;\n const second = type === \"thanks\" ? text.briefIntroduction : text.title;\n const firstField = type === \"thanks\" ? \"thanksIntro\" : \"intro\";\n const secondField = type === \"thanks\" ? \"briefIntroduction\" : \"title\";\n const hasVisualFirst = Boolean(first || interaction?.fields?.[firstField]?.active);\n const hasVisualSecond = Boolean(second || interaction?.fields?.[secondField]?.active);\n const hasVisualName = hasName || Boolean(interaction?.fields?.firstName?.active || interaction?.fields?.lastName?.active);\n const headerMargins = calculateHeaderMargins({\n first: hasVisualFirst, second: hasVisualSecond, hasName: hasVisualName, hasIcon: Boolean(icon), spacing,\n });\n const { firstMargin, secondMargin, nameMargin } = headerMargins;\n const isSingleColumn = Number(layout.columnsMm) === 41;\n const ceremonyCode = contact.ceremony?.code;\n const ceremonyLabel = contact.ceremony?.label ?? ceremonyCode;\n const secondaryFontStyle: CSSProperties = typography.secondaryFontFamily != null\n ? { fontFamily: typography.secondaryFontFamily }\n : {};\n const activeNameState = interaction?.fields?.firstName?.active\n ? interaction.fields.firstName\n : interaction?.fields?.lastName?.active\n ? interaction.fields.lastName\n : undefined;\n\n return (\n <div\n {...htmlProps}\n ref={rootRef}\n data-default-ad=\"\"\n data-ad-content=\"\"\n data-ad-ready=\"true\"\n data-mode={mode}\n data-variant={variant}\n className={`gda-root ${className}`.trim()}\n style={{\n width: `${layout.columnsMm}mm`,\n minWidth: `${layout.columnsMm}mm`,\n ...(layout.heightMm != null ? { height: `${layout.heightMm}mm` } : {}),\n padding: `${layout.paddingMm}mm ${layout.horizontalPaddingMm}mm`,\n border: layout.border ? `${layout.borderWidthPt}pt solid black` : 0,\n gap: `${spacing.sectionGapMm}mm`,\n ...(typography.fontFamily != null ? { fontFamily: typography.fontFamily } : {}),\n ...rootStyle,\n }}\n >\n {icon ? (\n <div className=\"gda-icon\">\n <svg className={icon.className} xmlns=\"http://www.w3.org/2000/svg\"\n width={Number(icon.width) + 16} height={Number(icon.height) + 16}\n viewBox={icon.viewBox} role={icon.title ? \"img\" : undefined} aria-label={icon.title} aria-hidden={icon.title ? undefined : true}\n dangerouslySetInnerHTML={{ __html: decodeSvgMarkup(icon.svg) }} />\n </div>\n ) : null}\n\n <Text field={type === \"thanks\" ? \"thanksIntro\" : \"intro\"} interaction={interaction} className={`${type === \"thanks\" ? \"gda-bold\" : \"\"} gda-break`}\n style={textStyle(type === \"thanks\" ? 14 : typography.introSize, typography.introLeading, firstMargin)}>\n {type === \"thanks\" && first ? first : type === \"obituaries\" ? first : null}\n </Text>\n <Text field={type === \"thanks\" ? \"briefIntroduction\" : \"title\"} interaction={interaction} className=\"gda-break\" style={textStyle(typography.titleSize, typography.titleLeading, secondMargin)}>\n {type === \"thanks\" && second ? fmt.lowercaseFirst(second) : type === \"obituaries\" ? second : null}\n </Text>\n\n {hasName && !interaction?.fields?.firstName?.active && !interaction?.fields?.lastName?.active ? (\n <Text className=\"gda-name gda-bold gda-secondary-font\" style={{ ...textStyle(typography.nameSize, typography.nameLeading, nameMargin), ...secondaryFontStyle }}>\n {[contact.firstName, contact.lastName].filter(Boolean).join(\" \")}\n </Text>\n ) : hasName || interaction?.fields?.firstName?.active || interaction?.fields?.lastName?.active ? (\n <div className={`gda-name gda-bold gda-secondary-font ${activeNameState?.className ?? \"\"}`.trim()} style={{ ...textStyle(typography.nameSize, typography.nameLeading, nameMargin), ...secondaryFontStyle, ...activeNameState?.style }}>\n <NamePart field=\"firstName\" value={contact.firstName} interaction={interaction} />{\" \"}\n <NamePart field=\"lastName\" value={contact.lastName} interaction={interaction} />\n </div>\n ) : showEmptyNamePlaceholder ? <div className=\"gda-placeholder gda-name gda-bold gda-secondary-font\" style={{ ...textStyle(typography.nameSize, typography.nameLeading, nameMargin), ...secondaryFontStyle }}>{emptyNamePlaceholder}</div> : null}\n\n {(contact.showBirthDate && (contact.birthDate || interaction?.fields?.birthDate?.active)) || (contact.showDeathDate && (contact.deathDate || interaction?.fields?.deathDate?.active)) ? (\n <div className={`gda-dates ${isSingleColumn ? \"gda-dates-single\" : \"\"}`}\n style={{ marginTop: `${spacing.dateTop}pt`, lineHeight: `${typography.dateLeading}pt`, ...(isSingleColumn ? { gap: `${spacing.dateTop}pt` } : {}) }}>\n {contact.showBirthDate && (contact.birthDate || interaction?.fields?.birthDate?.active) ? (\n <span data-default-ad-field=\"birthDate\" {...fieldEvents(\"birthDate\", interaction)} className={interaction?.fields?.birthDate?.active ? interaction.fields.birthDate.className : undefined} style={{ fontSize: `${contact.birthDate && fmt.date(contact.birthDate).length > 10 ? typography.longDateSize : typography.dateSize}pt`, ...(contact.birthDate && fmt.date(contact.birthDate).length > 10 ? { letterSpacing: typography.longDateLetterSpacing } : {}), ...(interaction?.fields?.birthDate?.active ? interaction.fields.birthDate.style : {}) }}>\n &#10043; {contact.birthDate ? fmt.date(contact.birthDate) : interaction?.fields?.birthDate?.placeholder}\n </span>\n ) : null}\n {contact.showDeathDate && (contact.deathDate || interaction?.fields?.deathDate?.active) ? (\n <span data-default-ad-field=\"deathDate\" {...fieldEvents(\"deathDate\", interaction)} className={interaction?.fields?.deathDate?.active ? interaction.fields.deathDate.className : undefined} style={{ fontSize: `${contact.deathDate && fmt.date(contact.deathDate).length > 10 ? typography.longDateSize : typography.dateSize}pt`, ...(contact.deathDate && fmt.date(contact.deathDate).length > 10 ? { letterSpacing: typography.longDateLetterSpacing } : {}), ...(interaction?.fields?.deathDate?.active ? interaction.fields.deathDate.style : {}) }}>\n <span className=\"gda-death-cross\" aria-hidden=\"true\">✝︎</span> {contact.deathDate ? fmt.date(contact.deathDate) : interaction?.fields?.deathDate?.placeholder}\n </span>\n ) : null}\n </div>\n ) : null}\n\n {type === \"obituaries\" ? <Text field=\"deceased\" interaction={interaction} className=\"gda-balance\" style={textStyle(typography.bodySize, typography.bodyLeading, spacing.deceasedTop)}>{text.deceased}</Text> : null}\n {type === \"obituaries\" ? <Text field=\"memorial\" interaction={interaction} className=\"gda-italic gda-break\" style={textStyle(typography.memorialSize, typography.memorialLeading, spacing.memorialTop)}>{text.memorial}</Text> : null}\n {type === \"obituaries\" && (text.sender || interaction?.fields?.sender?.active) ? <Text field=\"sender\" interaction={interaction} className=\"gda-bold gda-secondary-font\" style={{ ...textStyle(typography.senderSize, typography.senderLeading, spacing.senderTop), ...secondaryFontStyle }}>{text.sender}</Text> : null}\n\n {(type === \"obituaries\" || variant === \"publication\") && ceremonyCode !== \"NoCeremony\" && (contact.showChurch || contact.showFuneralDate) && (contact.church || contact.funeralDate || interaction?.fields?.church?.active || interaction?.fields?.funeralDate?.active) ? (\n <div className=\"gda-text\" style={textStyle(typography.ceremonySize, typography.ceremonyLeading, spacing.ceremonyTop)}>\n {contact.showChurch && (contact.church || interaction?.fields?.church?.active) ? <div data-default-ad-field=\"church\" {...fieldEvents(\"church\", interaction)} className={`gda-whitespace-pre-line ${interaction?.fields?.church?.active ? interaction.fields.church.className ?? \"\" : \"\"}`.trim()} style={interaction?.fields?.church?.active ? interaction.fields.church.style : undefined}>{contact.church ? (contact.church.length > 15 ? `${ceremonyLabel ?? \"\"} \\n ${contact.church}` : `${ceremonyLabel ?? \"\"} ${contact.church}`.trim()) : interaction?.fields?.church?.placeholder}</div> : null}\n {contact.showFuneralDate && (contact.funeralDate || interaction?.fields?.funeralDate?.active) ? <div data-default-ad-field=\"funeralDate\" {...fieldEvents(\"funeralDate\", interaction)} className={interaction?.fields?.funeralDate?.active ? interaction.fields.funeralDate.className : undefined} style={interaction?.fields?.funeralDate?.active ? interaction.fields.funeralDate.style : undefined}>{contact.funeralDate ? fmt.funeralDate(contact.funeralDate, Boolean(contact.hideFuneralYear)) : interaction?.fields?.funeralDate?.placeholder}</div> : null}\n </div>\n ) : null}\n\n {type === \"thanks\" ? <ThankYouFields text={text} fmt={fmt} typography={typography} spacing={spacing} interaction={interaction} /> : null}\n <Text field=\"thanks\" interaction={interaction} className=\"gda-break\" style={textStyle(typography.thanksSize, typography.thanksLeading, spacing.thanksTop)}>{text.thanks}</Text>\n {type === \"thanks\" ? <Text field=\"sender\" interaction={interaction} className=\"gda-secondary-font\" style={{ ...textStyle(typography.senderSize, typography.senderLeading, spacing.thanksTop), ...secondaryFontStyle }}>{text.sender}</Text> : null}\n {text.donation ? <div className=\"gda-divider\" style={{ marginTop: `${spacing.donationTop}pt` }} /> : null}\n {text.donation || interaction?.fields?.donation?.active ? <Text field=\"donation\" interaction={interaction} className=\"gda-donation gda-break\" style={textStyle(typography.donationSize, typography.donationLeading, spacing.donationTop)}>{text.donation}</Text> : null}\n </div>\n );\n}\n\nfunction calculateHeaderMargins({ first, second, hasName, hasIcon, spacing }: any) {\n return {\n firstMargin: first && hasIcon ? spacing.iconToText : 0,\n secondMargin: second ? (first ? spacing.introToTitle : hasIcon ? spacing.iconToText : 0) : 0,\n nameMargin: hasName ? (first || second ? spacing.textToName : hasIcon ? spacing.iconToName : 0) : 0,\n };\n}\n\nfunction NamePart({ field, value, interaction }: { field: \"firstName\" | \"lastName\"; value?: string | null; interaction?: DefaultAdInteraction }) {\n const state = interaction?.fields?.[field];\n if (!value && !state?.active) return null;\n return <span data-default-ad-field={field} {...fieldEvents(field, interaction)}>{value || state?.placeholder}</span>;\n}\n\nfunction ThankYouFields({ text, fmt, typography, spacing, interaction }: any) {\n return <>\n <Text field=\"ceremony\" interaction={interaction} className=\"gda-break\" style={textStyle(typography.bodySize, typography.bodyLeading, spacing.thanksTop)}>{text.ceremony ? fmt.lowercaseFirst(text.ceremony) : null}</Text>\n <Text field=\"message\" interaction={interaction} className=\"gda-break\" style={textStyle(typography.bodySize, typography.bodyLeading, spacing.thanksTop)}>{text.message}</Text>\n </>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACMO,IAAM,wBAAwB;AAAA,EACnC,WAAW;AAAA,EACX,UAAU;AAAA,EACV,WAAW;AAAA,EACX,qBAAqB;AAAA,EACrB,QAAQ;AAAA,EACR,eAAe;AAAA,EACf,SAAS;AAAA,IACP,YAAY;AAAA,IACZ,cAAc;AAAA;AAAA;AAAA,IAGd,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,aAAa;AAAA,IACb,aAAa;AAAA,IACb,WAAW;AAAA,IACX,aAAa;AAAA,IACb,WAAW;AAAA,IACX,aAAa;AAAA,IACb,cAAc;AAAA,EAChB;AACF;AAEO,IAAM,wBAAkD;AAAA,EAC7D,GAAG;AAAA,EACH,YAAY;AAAA,IACV,YAAY;AAAA,IACZ,qBAAqB;AAAA,IACrB,WAAW;AAAA,IACX,cAAc;AAAA,IACd,WAAW;AAAA,IACX,cAAc;AAAA,IACd,UAAU;AAAA,IACV,aAAa;AAAA,IACb,UAAU;AAAA,IACV,cAAc;AAAA,IACd,uBAAuB;AAAA,IACvB,aAAa;AAAA,IACb,UAAU;AAAA,IACV,aAAa;AAAA,IACb,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,cAAc;AAAA,IACd,iBAAiB;AAAA,EACnB;AACF;AAEO,IAAM,4BAAsD;AAAA,EACjE,GAAG;AAAA,EACH,YAAY;AAAA,IACV,GAAG,sBAAsB;AAAA,IACzB,YAAY;AAAA,IACZ,qBAAqB;AAAA,IACrB,WAAW;AAAA,IACX,cAAc;AAAA,IACd,WAAW;AAAA,IACX,cAAc;AAAA,IACd,UAAU;AAAA,IACV,aAAa;AAAA,IACb,UAAU;AAAA,IACV,cAAc;AAAA,IACd,uBAAuB;AAAA,IACvB,UAAU;AAAA,IACV,aAAa;AAAA,IACb,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,cAAc;AAAA,IACd,iBAAiB;AAAA,IACjB,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,cAAc;AAAA,IACd,iBAAiB;AAAA,EACnB;AACF;AAEO,SAAS,wBAAwB,UAAoD;AAC1F,MAAI,CAAC,SAAU,QAAO;AACtB,SAAO;AAAA,IACL,GAAG;AAAA,IACH,YAAY;AAAA,MACV,GAAG,0BAA0B;AAAA,MAC7B,YAAY,SAAS,SAAS,0BAA0B,YAAY;AAAA,MACpE,qBAAqB,SAAS,SAAS,0BAA0B,YAAY;AAAA,MAC7E,WAAW,SAAS;AAAA,MACpB,cAAc,SAAS;AAAA,MACvB,WAAW,SAAS;AAAA,MACpB,cAAc,SAAS;AAAA,MACvB,UAAU,SAAS;AAAA,MACnB,aAAa,SAAS;AAAA,MACtB,GAAG,SAAS,SAAS,cAAc,YAAY,aAAa;AAAA,MAC5D,GAAG,SAAS,SAAS,cAAc,gBAAgB,iBAAiB;AAAA,MACpE,GAAG,SAAS,SAAS,YAAY,cAAc,eAAe;AAAA,MAC9D,GAAG,SAAS,SAAS,cAAc,gBAAgB,iBAAiB;AAAA,MACpE,GAAG,SAAS,SAAS,YAAY,cAAc,eAAe;AAAA,MAC9D,GAAG,SAAS,SAAS,cAAc,gBAAgB,iBAAiB;AAAA,MACpE,GAAG,SAAS,SAAS,aAAa;AAAA,IACpC;AAAA,EACF;AACF;AAEA,SAAS,SAAS,OAA2B,SAAiB,YAA4C;AACxG,MAAI,CAAC,MAAO,QAAO,CAAC;AACpB,QAAM,OAAO,MAAM,MAAM,uBAAuB,IAAI,CAAC;AACrD,QAAM,UAAU,MAAM,MAAM,0BAA0B,IAAI,CAAC;AAC3D,SAAO;AAAA,IACL,GAAI,OAAO,EAAE,CAAC,OAAO,GAAG,OAAO,IAAI,EAAE,IAAI,CAAC;AAAA,IAC1C,GAAI,UAAU,EAAE,CAAC,UAAU,GAAG,OAAO,OAAO,EAAE,IAAI,CAAC;AAAA,EACrD;AACF;AAEA,SAAS,SAAS,OAA+D;AAC/E,QAAM,SAAS,OAAO,MAAM,uBAAuB,IAAI,CAAC;AACxD,SAAO,SAAS,EAAE,uBAAuB,OAAO,IAAI,CAAC;AACvD;;;AC/HO,IAAM,oBAAmD;AAAA,EAC9D,KAAK,OAAO;AACV,UAAM,QAAQ,MAAM,MAAM,0BAA0B;AACpD,WAAO,QAAQ,GAAG,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK;AAAA,EACzD;AAAA,EACA,YAAY,OAAO,UAAU;AAC3B,QAAI,CAAC,SAAU,QAAO;AACtB,WAAO,MAAM,QAAQ,yBAAyB,EAAE;AAAA,EAClD;AAAA,EACA,eAAe,OAAO;AACpB,WAAO,QAAQ,MAAM,OAAO,CAAC,EAAE,kBAAkB,IAAI,MAAM,MAAM,CAAC,IAAI;AAAA,EACxE;AACF;AAEO,SAAS,aAA+B,MAAS,WAA2B;AACjF,MAAI,CAAC,UAAW,QAAO,EAAE,GAAG,KAAK;AACjC,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,EAAE,GAAG,MAAM,GAAG,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,UAAU,MAAS;AAAA,EACrF;AACF;AAEO,SAAS,gBAAgB,OAAuB;AACrD,SAAO,MACJ,QAAQ,SAAS,GAAG,EACpB,QAAQ,SAAS,GAAG,EACpB,QAAQ,WAAW,GAAG,EACtB,QAAQ,uBAAuB,GAAG,EAClC,QAAQ,UAAU,GAAG;AAC1B;;;ACd4D;AAV5D,SAAS,UAAU,MAAc,SAAiB,WAAkC;AAClF,SAAO,EAAE,UAAU,GAAG,IAAI,MAAM,YAAY,GAAG,OAAO,MAAM,WAAW,GAAG,SAAS,KAAK;AAC1F;AAEA,SAAS,KAAK,EAAE,UAAU,YAAY,IAAI,OAAO,OAAO,YAAY,GAAmI;AACrM,QAAM,aAAa,QAAQ,aAAa,SAAS,KAAK,IAAI;AAC1D,QAAM,QAAQ,aAAa,QAAQ,aAAa,UAAa,aAAa;AAC1E,MAAI,SAAS,CAAC,YAAY,OAAQ,QAAO;AACzC,QAAM,SAAS,QAAQ,YAAY,OAAO,WAAW,IAAI,CAAC;AAC1D,MAAI,OAAO;AACT,WAAO,4CAAC,SAAI,WAAU,mCAAkC,sDAAC,SAAI,yBAAuB,OAAO,WAAW,4BAA4B,SAAS,IAAI,YAAY,aAAa,EAAE,GAAG,KAAK,GAAG,OAAO,EAAE,GAAG,OAAO,GAAG,YAAY,MAAM,GAAI,GAAG,QAAS,sBAAY,aAAY,GAAM;AAAA,EAC7Q;AACA,SAAO,4CAAC,SAAI,yBAAuB,OAAO,WAAW,YAAY,SAAS,IAAI,YAAY,SAAS,WAAW,aAAa,KAAK,EAAE,GAAG,KAAK,GAAG,OAAO,EAAE,GAAG,OAAO,GAAI,YAAY,SAAS,WAAW,QAAQ,OAAW,GAAI,GAAG,QAAS,UAAS;AAClP;AAEA,SAAS,YAAY,OAAuB,aAAoC;AAC9E,SAAO;AAAA,IACL,SAAS,aAAa,eAAe,MAAM,YAAY,eAAe,KAAK,IAAI;AAAA,IAC/E,QAAQ,aAAa,cAAc,MAAM,YAAY,cAAc,KAAK,IAAI;AAAA,IAC5E,SAAS,aAAa,eAAe,MAAM,YAAY,eAAe,KAAK,IAAI;AAAA,EACjF;AACF;AAEO,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AAAA,EACA,2BAA2B,SAAS;AAAA,EACpC,uBAAuB;AAAA,EACvB,YAAY;AAAA,EACZ;AAAA,EACA,GAAG;AACL,GAAmB;AACjB,QAAM,aAAa;AAAA,IACjB,sBAAsB;AAAA,IACtB,OAAO;AAAA,EACT;AACA,QAAM,UAAU;AAAA,IACd,sBAAsB;AAAA,IACtB,OAAO;AAAA,EACT;AACA,QAAM,SAAS,aAAa,uBAAuB,KAAK;AACxD,QAAM,MAAM,EAAE,GAAG,mBAAmB,GAAG,WAAW;AAClD,QAAM,EAAE,SAAS,MAAM,MAAM,KAAK,IAAI;AACtC,QAAM,UAAU,QAAQ,QAAQ,aAAa,QAAQ,QAAQ;AAC7D,QAAM,QAAQ,SAAS,WAAW,KAAK,cAAc,KAAK;AAC1D,QAAM,SAAS,SAAS,WAAW,KAAK,oBAAoB,KAAK;AACjE,QAAM,aAAa,SAAS,WAAW,gBAAgB;AACvD,QAAM,cAAc,SAAS,WAAW,sBAAsB;AAC9D,QAAM,iBAAiB,QAAQ,SAAS,aAAa,SAAS,UAAU,GAAG,MAAM;AACjF,QAAM,kBAAkB,QAAQ,UAAU,aAAa,SAAS,WAAW,GAAG,MAAM;AACpF,QAAM,gBAAgB,WAAW,QAAQ,aAAa,QAAQ,WAAW,UAAU,aAAa,QAAQ,UAAU,MAAM;AACxH,QAAM,gBAAgB,uBAAuB;AAAA,IAC3C,OAAO;AAAA,IAAgB,QAAQ;AAAA,IAAiB,SAAS;AAAA,IAAe,SAAS,QAAQ,IAAI;AAAA,IAAG;AAAA,EAClG,CAAC;AACD,QAAM,EAAE,aAAa,cAAc,WAAW,IAAI;AAClD,QAAM,iBAAiB,OAAO,OAAO,SAAS,MAAM;AACpD,QAAM,eAAe,QAAQ,UAAU;AACvC,QAAM,gBAAgB,QAAQ,UAAU,SAAS;AACjD,QAAM,qBAAoC,WAAW,uBAAuB,OACxE,EAAE,YAAY,WAAW,oBAAoB,IAC7C,CAAC;AACL,QAAM,kBAAkB,aAAa,QAAQ,WAAW,SACpD,YAAY,OAAO,YACnB,aAAa,QAAQ,UAAU,SAC7B,YAAY,OAAO,WACnB;AAEN,SACE;AAAA,IAAC;AAAA;AAAA,MACE,GAAG;AAAA,MACJ,KAAK;AAAA,MACL,mBAAgB;AAAA,MAChB,mBAAgB;AAAA,MAChB,iBAAc;AAAA,MACd,aAAW;AAAA,MACX,gBAAc;AAAA,MACd,WAAW,YAAY,SAAS,GAAG,KAAK;AAAA,MACxC,OAAO;AAAA,QACL,OAAO,GAAG,OAAO,SAAS;AAAA,QAC1B,UAAU,GAAG,OAAO,SAAS;AAAA,QAC7B,GAAI,OAAO,YAAY,OAAO,EAAE,QAAQ,GAAG,OAAO,QAAQ,KAAK,IAAI,CAAC;AAAA,QACpE,SAAS,GAAG,OAAO,SAAS,MAAM,OAAO,mBAAmB;AAAA,QAC5D,QAAQ,OAAO,SAAS,GAAG,OAAO,aAAa,mBAAmB;AAAA,QAClE,KAAK,GAAG,QAAQ,YAAY;AAAA,QAC5B,GAAI,WAAW,cAAc,OAAO,EAAE,YAAY,WAAW,WAAW,IAAI,CAAC;AAAA,QAC7E,GAAG;AAAA,MACL;AAAA,MAEC;AAAA,eACC,4CAAC,SAAI,WAAU,YACb;AAAA,UAAC;AAAA;AAAA,YAAI,WAAW,KAAK;AAAA,YAAW,OAAM;AAAA,YACpC,OAAO,OAAO,KAAK,KAAK,IAAI;AAAA,YAAI,QAAQ,OAAO,KAAK,MAAM,IAAI;AAAA,YAC9D,SAAS,KAAK;AAAA,YAAS,MAAM,KAAK,QAAQ,QAAQ;AAAA,YAAW,cAAY,KAAK;AAAA,YAAO,eAAa,KAAK,QAAQ,SAAY;AAAA,YAC3H,yBAAyB,EAAE,QAAQ,gBAAgB,KAAK,GAAG,EAAE;AAAA;AAAA,QAAG,GACpE,IACE;AAAA,QAEJ;AAAA,UAAC;AAAA;AAAA,YAAK,OAAO,SAAS,WAAW,gBAAgB;AAAA,YAAS;AAAA,YAA0B,WAAW,GAAG,SAAS,WAAW,aAAa,EAAE;AAAA,YACnI,OAAO,UAAU,SAAS,WAAW,KAAK,WAAW,WAAW,WAAW,cAAc,WAAW;AAAA,YACnG,mBAAS,YAAY,QAAQ,QAAQ,SAAS,eAAe,QAAQ;AAAA;AAAA,QACxE;AAAA,QACA,4CAAC,QAAK,OAAO,SAAS,WAAW,sBAAsB,SAAS,aAA0B,WAAU,aAAY,OAAO,UAAU,WAAW,WAAW,WAAW,cAAc,YAAY,GACzL,mBAAS,YAAY,SAAS,IAAI,eAAe,MAAM,IAAI,SAAS,eAAe,SAAS,MAC/F;AAAA,QAEC,WAAW,CAAC,aAAa,QAAQ,WAAW,UAAU,CAAC,aAAa,QAAQ,UAAU,SACrF,4CAAC,QAAK,WAAU,wCAAuC,OAAO,EAAE,GAAG,UAAU,WAAW,UAAU,WAAW,aAAa,UAAU,GAAG,GAAG,mBAAmB,GAC1J,WAAC,QAAQ,WAAW,QAAQ,QAAQ,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GACjE,IACE,WAAW,aAAa,QAAQ,WAAW,UAAU,aAAa,QAAQ,UAAU,SACtF,6CAAC,SAAI,WAAW,wCAAwC,iBAAiB,aAAa,EAAE,GAAG,KAAK,GAAG,OAAO,EAAE,GAAG,UAAU,WAAW,UAAU,WAAW,aAAa,UAAU,GAAG,GAAG,oBAAoB,GAAG,iBAAiB,MAAM,GAClO;AAAA,sDAAC,YAAS,OAAM,aAAY,OAAO,QAAQ,WAAW,aAA0B;AAAA,UAAG;AAAA,UACnF,4CAAC,YAAS,OAAM,YAAW,OAAO,QAAQ,UAAU,aAA0B;AAAA,WAChF,IACE,2BAA2B,4CAAC,SAAI,WAAU,wDAAuD,OAAO,EAAE,GAAG,UAAU,WAAW,UAAU,WAAW,aAAa,UAAU,GAAG,GAAG,mBAAmB,GAAI,gCAAqB,IAAS;AAAA,QAE3O,QAAQ,kBAAkB,QAAQ,aAAa,aAAa,QAAQ,WAAW,WAAa,QAAQ,kBAAkB,QAAQ,aAAa,aAAa,QAAQ,WAAW,UAC3K;AAAA,UAAC;AAAA;AAAA,YAAI,WAAW,aAAa,iBAAiB,qBAAqB,EAAE;AAAA,YACnE,OAAO,EAAE,WAAW,GAAG,QAAQ,OAAO,MAAM,YAAY,GAAG,WAAW,WAAW,MAAM,GAAI,iBAAiB,EAAE,KAAK,GAAG,QAAQ,OAAO,KAAK,IAAI,CAAC,EAAG;AAAA,YACjJ;AAAA,sBAAQ,kBAAkB,QAAQ,aAAa,aAAa,QAAQ,WAAW,UAC9E,6CAAC,UAAK,yBAAsB,aAAa,GAAG,YAAY,aAAa,WAAW,GAAG,WAAW,aAAa,QAAQ,WAAW,SAAS,YAAY,OAAO,UAAU,YAAY,QAAW,OAAO,EAAE,UAAU,GAAG,QAAQ,aAAa,IAAI,KAAK,QAAQ,SAAS,EAAE,SAAS,KAAK,WAAW,eAAe,WAAW,QAAQ,MAAM,GAAI,QAAQ,aAAa,IAAI,KAAK,QAAQ,SAAS,EAAE,SAAS,KAAK,EAAE,eAAe,WAAW,sBAAsB,IAAI,CAAC,GAAI,GAAI,aAAa,QAAQ,WAAW,SAAS,YAAY,OAAO,UAAU,QAAQ,CAAC,EAAG,GAAG;AAAA;AAAA,gBAC9gB,QAAQ,YAAY,IAAI,KAAK,QAAQ,SAAS,IAAI,aAAa,QAAQ,WAAW;AAAA,iBAC9F,IACE;AAAA,cACH,QAAQ,kBAAkB,QAAQ,aAAa,aAAa,QAAQ,WAAW,UAC9E,6CAAC,UAAK,yBAAsB,aAAa,GAAG,YAAY,aAAa,WAAW,GAAG,WAAW,aAAa,QAAQ,WAAW,SAAS,YAAY,OAAO,UAAU,YAAY,QAAW,OAAO,EAAE,UAAU,GAAG,QAAQ,aAAa,IAAI,KAAK,QAAQ,SAAS,EAAE,SAAS,KAAK,WAAW,eAAe,WAAW,QAAQ,MAAM,GAAI,QAAQ,aAAa,IAAI,KAAK,QAAQ,SAAS,EAAE,SAAS,KAAK,EAAE,eAAe,WAAW,sBAAsB,IAAI,CAAC,GAAI,GAAI,aAAa,QAAQ,WAAW,SAAS,YAAY,OAAO,UAAU,QAAQ,CAAC,EAAG,GACrhB;AAAA,4DAAC,UAAK,WAAU,mBAAkB,eAAY,QAAO,0BAAE;AAAA,gBAAO;AAAA,gBAAE,QAAQ,YAAY,IAAI,KAAK,QAAQ,SAAS,IAAI,aAAa,QAAQ,WAAW;AAAA,iBACpJ,IACE;AAAA;AAAA;AAAA,QACN,IACE;AAAA,QAEH,SAAS,eAAe,4CAAC,QAAK,OAAM,YAAW,aAA0B,WAAU,eAAc,OAAO,UAAU,WAAW,UAAU,WAAW,aAAa,QAAQ,WAAW,GAAI,eAAK,UAAS,IAAU;AAAA,QAC9M,SAAS,eAAe,4CAAC,QAAK,OAAM,YAAW,aAA0B,WAAU,wBAAuB,OAAO,UAAU,WAAW,cAAc,WAAW,iBAAiB,QAAQ,WAAW,GAAI,eAAK,UAAS,IAAU;AAAA,QAC/N,SAAS,iBAAiB,KAAK,UAAU,aAAa,QAAQ,QAAQ,UAAU,4CAAC,QAAK,OAAM,UAAS,aAA0B,WAAU,+BAA8B,OAAO,EAAE,GAAG,UAAU,WAAW,YAAY,WAAW,eAAe,QAAQ,SAAS,GAAG,GAAG,mBAAmB,GAAI,eAAK,QAAO,IAAU;AAAA,SAEjT,SAAS,gBAAgB,YAAY,kBAAkB,iBAAiB,iBAAiB,QAAQ,cAAc,QAAQ,qBAAqB,QAAQ,UAAU,QAAQ,eAAe,aAAa,QAAQ,QAAQ,UAAU,aAAa,QAAQ,aAAa,UAC9P,6CAAC,SAAI,WAAU,YAAW,OAAO,UAAU,WAAW,cAAc,WAAW,iBAAiB,QAAQ,WAAW,GAChH;AAAA,kBAAQ,eAAe,QAAQ,UAAU,aAAa,QAAQ,QAAQ,UAAU,4CAAC,SAAI,yBAAsB,UAAU,GAAG,YAAY,UAAU,WAAW,GAAG,WAAW,2BAA2B,aAAa,QAAQ,QAAQ,SAAS,YAAY,OAAO,OAAO,aAAa,KAAK,EAAE,GAAG,KAAK,GAAG,OAAO,aAAa,QAAQ,QAAQ,SAAS,YAAY,OAAO,OAAO,QAAQ,QAAY,kBAAQ,SAAU,QAAQ,OAAO,SAAS,KAAK,GAAG,iBAAiB,EAAE;AAAA,GAAO,QAAQ,MAAM,KAAK,GAAG,iBAAiB,EAAE,IAAI,QAAQ,MAAM,GAAG,KAAK,IAAK,aAAa,QAAQ,QAAQ,aAAY,IAAS;AAAA,UAClkB,QAAQ,oBAAoB,QAAQ,eAAe,aAAa,QAAQ,aAAa,UAAU,4CAAC,SAAI,yBAAsB,eAAe,GAAG,YAAY,eAAe,WAAW,GAAG,WAAW,aAAa,QAAQ,aAAa,SAAS,YAAY,OAAO,YAAY,YAAY,QAAW,OAAO,aAAa,QAAQ,aAAa,SAAS,YAAY,OAAO,YAAY,QAAQ,QAAY,kBAAQ,cAAc,IAAI,YAAY,QAAQ,aAAa,QAAQ,QAAQ,eAAe,CAAC,IAAI,aAAa,QAAQ,aAAa,aAAY,IAAS;AAAA,WAC/hB,IACE;AAAA,QAEH,SAAS,WAAW,4CAAC,kBAAe,MAAY,KAAU,YAAwB,SAAkB,aAA0B,IAAK;AAAA,QACpI,4CAAC,QAAK,OAAM,UAAS,aAA0B,WAAU,aAAY,OAAO,UAAU,WAAW,YAAY,WAAW,eAAe,QAAQ,SAAS,GAAI,eAAK,QAAO;AAAA,QACvK,SAAS,WAAW,4CAAC,QAAK,OAAM,UAAS,aAA0B,WAAU,sBAAqB,OAAO,EAAE,GAAG,UAAU,WAAW,YAAY,WAAW,eAAe,QAAQ,SAAS,GAAG,GAAG,mBAAmB,GAAI,eAAK,QAAO,IAAU;AAAA,QAC7O,KAAK,WAAW,4CAAC,SAAI,WAAU,eAAc,OAAO,EAAE,WAAW,GAAG,QAAQ,WAAW,KAAK,GAAG,IAAK;AAAA,QACpG,KAAK,YAAY,aAAa,QAAQ,UAAU,SAAS,4CAAC,QAAK,OAAM,YAAW,aAA0B,WAAU,0BAAyB,OAAO,UAAU,WAAW,cAAc,WAAW,iBAAiB,QAAQ,WAAW,GAAI,eAAK,UAAS,IAAU;AAAA;AAAA;AAAA,EACrQ;AAEJ;AAEA,SAAS,uBAAuB,EAAE,OAAO,QAAQ,SAAS,SAAS,QAAQ,GAAQ;AACjF,SAAO;AAAA,IACL,aAAa,SAAS,UAAU,QAAQ,aAAa;AAAA,IACrD,cAAc,SAAU,QAAQ,QAAQ,eAAe,UAAU,QAAQ,aAAa,IAAK;AAAA,IAC3F,YAAY,UAAW,SAAS,SAAS,QAAQ,aAAa,UAAU,QAAQ,aAAa,IAAK;AAAA,EACpG;AACF;AAEA,SAAS,SAAS,EAAE,OAAO,OAAO,YAAY,GAAmG;AAC/I,QAAM,QAAQ,aAAa,SAAS,KAAK;AACzC,MAAI,CAAC,SAAS,CAAC,OAAO,OAAQ,QAAO;AACrC,SAAO,4CAAC,UAAK,yBAAuB,OAAQ,GAAG,YAAY,OAAO,WAAW,GAAI,mBAAS,OAAO,aAAY;AAC/G;AAEA,SAAS,eAAe,EAAE,MAAM,KAAK,YAAY,SAAS,YAAY,GAAQ;AAC5E,SAAO,4EACL;AAAA,gDAAC,QAAK,OAAM,YAAW,aAA0B,WAAU,aAAY,OAAO,UAAU,WAAW,UAAU,WAAW,aAAa,QAAQ,SAAS,GAAI,eAAK,WAAW,IAAI,eAAe,KAAK,QAAQ,IAAI,MAAK;AAAA,IACnN,4CAAC,QAAK,OAAM,WAAU,aAA0B,WAAU,aAAY,OAAO,UAAU,WAAW,UAAU,WAAW,aAAa,QAAQ,SAAS,GAAI,eAAK,SAAQ;AAAA,KACxK;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/presets.ts","../src/utils.ts","../src/DefaultAd.tsx"],"sourcesContent":["export { DefaultAd } from \"./DefaultAd\";\nexport { classicDefaultAdStyle, publicationDefaultAdStyle, sharedDefaultAdLayout, styleFromLegacyTemplate } from \"./presets\";\nexport type {\n DefaultAdContact,\n DefaultAdData,\n DefaultAdFormatters,\n DefaultAdField,\n DefaultAdFieldState,\n DefaultAdInteraction,\n DefaultAdIcon,\n DefaultAdMode,\n DefaultAdProps,\n DefaultAdSpacing,\n DefaultAdStyle,\n DefaultAdTextFields,\n DefaultAdType,\n DefaultAdVariant,\n DefaultAdTypography,\n LegacyAdTemplate,\n} from \"./types\";\n","import type { DefaultAdStyle, LegacyAdTemplate } from \"./types\";\n\n/**\n * Canonical layout shared by every consumer. Typography is deliberately kept\n * out of this object so applications can still select licensed/dynamic fonts.\n */\nexport const sharedDefaultAdLayout = {\n columnsMm: 86,\n heightMm: null,\n paddingMm: 4,\n horizontalPaddingMm: 2,\n border: false,\n borderWidthPt: 1.4,\n spacing: {\n iconToText: 11,\n introToTitle: 8,\n // These values originated as unitless React styles and therefore retain\n // their established numeric geometry.\n textToName: 4.2,\n iconToName: 4.95,\n dateTop: 5.6,\n deceasedTop: 6,\n memorialTop: 6,\n senderTop: 8,\n ceremonyTop: 8,\n thanksTop: 7,\n donationTop: 7,\n sectionGapMm: 0,\n },\n} as const satisfies Readonly<DefaultAdStyle>;\n\nexport const classicDefaultAdStyle: Readonly<DefaultAdStyle> = {\n ...sharedDefaultAdLayout,\n typography: {\n fontFamily: \"var(--default-ad-font-primary, Schoolbook, Georgia, serif)\",\n secondaryFontFamily: \"var(--default-ad-font-secondary, Schoolbook, Georgia, serif)\",\n introSize: 10,\n introLeading: 12,\n titleSize: 10,\n titleLeading: 12,\n nameSize: 14,\n nameLeading: 16.8,\n dateSize: 10,\n longDateSize: 10,\n longDateLetterSpacing: \"-0.01em\",\n dateLeading: 12,\n bodySize: 10,\n bodyLeading: 12,\n memorialSize: 10,\n memorialLeading: 12,\n senderSize: 10,\n senderLeading: 12,\n ceremonySize: 10,\n ceremonyLeading: 12,\n thanksSize: 10,\n thanksLeading: 12,\n donationSize: 10,\n donationLeading: 12,\n },\n};\n\nexport const publicationDefaultAdStyle: Readonly<DefaultAdStyle> = {\n ...sharedDefaultAdLayout,\n typography: {\n ...classicDefaultAdStyle.typography,\n fontFamily: \"var(--default-ad-font-primary, Raleway, Arial, sans-serif)\",\n secondaryFontFamily: \"var(--default-ad-font-secondary, Athelas, Georgia, serif)\",\n introSize: 11,\n introLeading: 13,\n titleSize: 11,\n titleLeading: 13,\n nameSize: 17,\n nameLeading: 15,\n dateSize: 11.5,\n longDateSize: 11,\n longDateLetterSpacing: \"-0.01em\",\n bodySize: 12,\n bodyLeading: 13,\n memorialSize: 12,\n memorialLeading: 13,\n senderSize: 13,\n senderLeading: 13,\n ceremonySize: 11,\n ceremonyLeading: 13,\n thanksSize: 11,\n thanksLeading: 13,\n donationSize: 11,\n donationLeading: 13,\n },\n};\n\nexport function styleFromLegacyTemplate(template?: LegacyAdTemplate | null): DefaultAdStyle {\n if (!template) return publicationDefaultAdStyle;\n return {\n ...publicationDefaultAdStyle,\n typography: {\n ...publicationDefaultAdStyle.typography,\n fontFamily: template.font1 || publicationDefaultAdStyle.typography?.fontFamily,\n secondaryFontFamily: template.font2 || publicationDefaultAdStyle.typography?.secondaryFontFamily,\n introSize: template.introSize,\n introLeading: template.introLeading,\n titleSize: template.titleSize,\n titleLeading: template.titleLeading,\n nameSize: template.fullnameSize,\n nameLeading: template.fullnameLeading,\n ...fontPair(template.deceasedText, \"bodySize\", \"bodyLeading\"),\n ...fontPair(template.memorialText, \"memorialSize\", \"memorialLeading\"),\n ...fontPair(template.senderText, \"senderSize\", \"senderLeading\"),\n ...fontPair(template.ceremonyText, \"ceremonySize\", \"ceremonyLeading\"),\n ...fontPair(template.thanksText, \"thanksSize\", \"thanksLeading\"),\n ...fontPair(template.donationText, \"donationSize\", \"donationLeading\"),\n ...tracking(template.longDatesText),\n },\n };\n}\n\nfunction fontPair(value: string | undefined, sizeKey: string, leadingKey: string): Record<string, number> {\n if (!value) return {};\n const size = value.match(/text-\\[(-?[\\d.]+)pt\\]/)?.[1];\n const leading = value.match(/leading-\\[(-?[\\d.]+)pt\\]/)?.[1];\n return {\n ...(size ? { [sizeKey]: Number(size) } : {}),\n ...(leading ? { [leadingKey]: Number(leading) } : {}),\n };\n}\n\nfunction tracking(value: string | undefined): { longDateLetterSpacing?: string } {\n const amount = value?.match(/tracking-\\[([^\\]]+)\\]/)?.[1];\n return amount ? { longDateLetterSpacing: amount } : {};\n}\n","import type { DefaultAdFormatters } from \"./types\";\n\nexport const defaultFormatters: Required<DefaultAdFormatters> = {\n date(value) {\n const match = value.match(/^(\\d{4})-(\\d{2})-(\\d{2})/);\n return match ? `${match[3]}.${match[2]}.${match[1]}` : value;\n },\n funeralDate(value, hideYear) {\n if (!hideYear) return value;\n return value.replace(/([.\\/-])\\d{4}(?=\\D|$)/, \"\");\n },\n lowercaseFirst(value) {\n return value ? value.charAt(0).toLocaleLowerCase() + value.slice(1) : value;\n },\n};\n\nexport function mergeDefined<T extends object>(base: T, overrides?: Partial<T>): T {\n if (!overrides) return { ...base };\n return Object.fromEntries(\n Object.entries({ ...base, ...overrides }).filter(([, value]) => value !== undefined),\n ) as T;\n}\n\nexport function decodeSvgMarkup(value: string): string {\n return value\n .replace(/&lt;/g, \"<\")\n .replace(/&gt;/g, \">\")\n .replace(/&quot;/g, '\"')\n .replace(/&#(?:0*39|x0*27);/gi, \"'\")\n .replace(/&amp;/g, \"&\");\n}\n","import type { CSSProperties, ReactNode } from \"react\";\nimport { classicDefaultAdStyle } from \"./presets\";\nimport type { DefaultAdField, DefaultAdInteraction, DefaultAdProps, DefaultAdSpacing, DefaultAdTypography } from \"./types\";\nimport { decodeSvgMarkup, defaultFormatters, mergeDefined } from \"./utils\";\nimport \"./styles.css\";\n\nfunction textStyle(size: number, leading: number, marginTop: number): CSSProperties {\n return { fontSize: `${size}pt`, lineHeight: `${leading}pt`, marginTop: `${marginTop}pt` };\n}\n\nfunction Text({ children, className = \"\", style, field, interaction }: { children?: ReactNode; className?: string; style: CSSProperties; field?: DefaultAdField; interaction?: DefaultAdInteraction }) {\n const fieldState = field ? interaction?.fields?.[field] : undefined;\n const empty = children === null || children === undefined || children === \"\";\n if (empty && !fieldState?.active) return null;\n const events = field ? fieldEvents(field, interaction) : {};\n if (empty) {\n return <div className=\"gda-field-placeholder-container\"><div data-default-ad-field={field} className={`gda-text gda-field-empty ${className} ${fieldState?.className ?? \"\"}`.trim()} style={{ ...style, ...fieldState?.style }} {...events}>{fieldState?.placeholder}</div></div>;\n }\n return <div data-default-ad-field={field} className={`gda-text ${className} ${fieldState?.active ? fieldState.className ?? \"\" : \"\"}`.trim()} style={{ ...style, ...(fieldState?.active ? fieldState.style : undefined) }} {...events}>{children}</div>;\n}\n\nfunction fieldEvents(field: DefaultAdField, interaction?: DefaultAdInteraction) {\n return {\n onFocus: interaction?.onFieldFocus ? () => interaction.onFieldFocus?.(field) : undefined,\n onBlur: interaction?.onFieldBlur ? () => interaction.onFieldBlur?.(field) : undefined,\n onClick: interaction?.onFieldClick ? () => interaction.onFieldClick?.(field) : undefined,\n };\n}\n\nexport function DefaultAd({\n data,\n style,\n mode = \"published\",\n variant = \"classic\",\n rootRef,\n interaction,\n formatters,\n showEmptyNamePlaceholder = mode === \"builder\",\n emptyNamePlaceholder = \"Fornavn Efternavn\",\n className = \"\",\n rootStyle,\n ...htmlProps\n}: DefaultAdProps) {\n const typography = mergeDefined(\n classicDefaultAdStyle.typography as Required<DefaultAdTypography>,\n style?.typography,\n );\n const spacing = mergeDefined(\n classicDefaultAdStyle.spacing as Required<DefaultAdSpacing>,\n style?.spacing,\n );\n const layout = mergeDefined(classicDefaultAdStyle, style);\n const fmt = { ...defaultFormatters, ...formatters };\n const { contact, text, icon, type } = data;\n const hasName = Boolean(contact.firstName || contact.lastName);\n const first = type === \"thanks\" ? text.thanksIntro : text.intro;\n const second = type === \"thanks\" ? text.briefIntroduction : text.title;\n const firstField = type === \"thanks\" ? \"thanksIntro\" : \"intro\";\n const secondField = type === \"thanks\" ? \"briefIntroduction\" : \"title\";\n const hasVisualFirst = Boolean(first || interaction?.fields?.[firstField]?.active);\n const hasVisualSecond = Boolean(second || interaction?.fields?.[secondField]?.active);\n const hasVisualName = hasName || Boolean(interaction?.fields?.firstName?.active || interaction?.fields?.lastName?.active);\n const headerMargins = calculateHeaderMargins({\n first: hasVisualFirst, second: hasVisualSecond, hasName: hasVisualName, hasIcon: Boolean(icon), spacing,\n });\n const { firstMargin, secondMargin, nameMargin } = headerMargins;\n const isSingleColumn = Number(layout.columnsMm) === 41;\n const ceremonyCode = contact.ceremony?.code;\n const ceremonyLabel = contact.ceremony?.label ?? ceremonyCode;\n const secondaryFontStyle: CSSProperties = typography.secondaryFontFamily != null\n ? { fontFamily: typography.secondaryFontFamily }\n : {};\n const hasActiveNamePart = Boolean(\n interaction?.fields?.firstName?.active || interaction?.fields?.lastName?.active,\n );\n\n return (\n <div\n {...htmlProps}\n ref={rootRef}\n data-default-ad=\"\"\n data-ad-content=\"\"\n data-ad-ready=\"true\"\n data-mode={mode}\n data-variant={variant}\n className={`gda-root ${className}`.trim()}\n style={{\n width: `${layout.columnsMm}mm`,\n minWidth: `${layout.columnsMm}mm`,\n ...(layout.heightMm != null ? { height: `${layout.heightMm}mm` } : {}),\n padding: `${layout.paddingMm}mm ${layout.horizontalPaddingMm}mm`,\n border: layout.border ? `${layout.borderWidthPt}pt solid black` : 0,\n gap: `${spacing.sectionGapMm}mm`,\n ...(typography.fontFamily != null ? { fontFamily: typography.fontFamily } : {}),\n ...rootStyle,\n }}\n >\n {icon ? (\n <div className=\"gda-icon\">\n <svg className={icon.className} xmlns=\"http://www.w3.org/2000/svg\"\n width={Number(icon.width) + 16} height={Number(icon.height) + 16}\n viewBox={icon.viewBox} role={icon.title ? \"img\" : undefined} aria-label={icon.title} aria-hidden={icon.title ? undefined : true}\n dangerouslySetInnerHTML={{ __html: decodeSvgMarkup(icon.svg) }} />\n </div>\n ) : null}\n\n <Text field={type === \"thanks\" ? \"thanksIntro\" : \"intro\"} interaction={interaction} className={`${type === \"thanks\" ? \"gda-bold\" : \"\"} gda-break`}\n style={textStyle(type === \"thanks\" ? 14 : typography.introSize, typography.introLeading, firstMargin)}>\n {type === \"thanks\" && first ? first : type === \"obituaries\" ? first : null}\n </Text>\n <Text field={type === \"thanks\" ? \"briefIntroduction\" : \"title\"} interaction={interaction} className=\"gda-break\" style={textStyle(typography.titleSize, typography.titleLeading, secondMargin)}>\n {type === \"thanks\" && second ? fmt.lowercaseFirst(second) : type === \"obituaries\" ? second : null}\n </Text>\n\n {hasName && !interaction?.fields?.firstName?.active && !interaction?.fields?.lastName?.active ? (\n <Text className=\"gda-name gda-bold gda-secondary-font\" style={{ ...textStyle(typography.nameSize, typography.nameLeading, nameMargin), ...secondaryFontStyle }}>\n {[contact.firstName, contact.lastName].filter(Boolean).join(\" \")}\n </Text>\n ) : hasName || hasActiveNamePart ? (\n <div className=\"gda-name gda-bold gda-secondary-font\" style={{ ...textStyle(typography.nameSize, typography.nameLeading, nameMargin), ...secondaryFontStyle }}>\n <NamePart field=\"firstName\" value={contact.firstName} interaction={interaction} showPlaceholder={hasActiveNamePart} />{\" \"}\n <NamePart field=\"lastName\" value={contact.lastName} interaction={interaction} showPlaceholder={hasActiveNamePart} />\n </div>\n ) : showEmptyNamePlaceholder ? <div className=\"gda-placeholder gda-name gda-bold gda-secondary-font\" style={{ ...textStyle(typography.nameSize, typography.nameLeading, nameMargin), ...secondaryFontStyle }}>{emptyNamePlaceholder}</div> : null}\n\n {(contact.showBirthDate && (contact.birthDate || interaction?.fields?.birthDate?.active)) || (contact.showDeathDate && (contact.deathDate || interaction?.fields?.deathDate?.active)) ? (\n <div className={`gda-dates ${isSingleColumn ? \"gda-dates-single\" : \"\"}`}\n style={{ marginTop: `${spacing.dateTop}pt`, lineHeight: `${typography.dateLeading}pt`, ...(isSingleColumn ? { gap: `${spacing.dateTop}pt` } : {}) }}>\n {contact.showBirthDate && (contact.birthDate || interaction?.fields?.birthDate?.active) ? (\n <span data-default-ad-field=\"birthDate\" {...fieldEvents(\"birthDate\", interaction)} className={interaction?.fields?.birthDate?.active ? interaction.fields.birthDate.className : undefined} style={{ fontSize: `${contact.birthDate && fmt.date(contact.birthDate).length > 10 ? typography.longDateSize : typography.dateSize}pt`, ...(contact.birthDate && fmt.date(contact.birthDate).length > 10 ? { letterSpacing: typography.longDateLetterSpacing } : {}), ...(interaction?.fields?.birthDate?.active ? interaction.fields.birthDate.style : {}) }}>\n &#10043; {contact.birthDate ? fmt.date(contact.birthDate) : interaction?.fields?.birthDate?.placeholder}\n </span>\n ) : null}\n {contact.showDeathDate && (contact.deathDate || interaction?.fields?.deathDate?.active) ? (\n <span data-default-ad-field=\"deathDate\" {...fieldEvents(\"deathDate\", interaction)} className={interaction?.fields?.deathDate?.active ? interaction.fields.deathDate.className : undefined} style={{ fontSize: `${contact.deathDate && fmt.date(contact.deathDate).length > 10 ? typography.longDateSize : typography.dateSize}pt`, ...(contact.deathDate && fmt.date(contact.deathDate).length > 10 ? { letterSpacing: typography.longDateLetterSpacing } : {}), ...(interaction?.fields?.deathDate?.active ? interaction.fields.deathDate.style : {}) }}>\n <span className=\"gda-death-cross\" aria-hidden=\"true\">✝︎</span> {contact.deathDate ? fmt.date(contact.deathDate) : interaction?.fields?.deathDate?.placeholder}\n </span>\n ) : null}\n </div>\n ) : null}\n\n {type === \"obituaries\" ? <Text field=\"deceased\" interaction={interaction} className=\"gda-balance\" style={textStyle(typography.bodySize, typography.bodyLeading, spacing.deceasedTop)}>{text.deceased}</Text> : null}\n {type === \"obituaries\" ? <Text field=\"memorial\" interaction={interaction} className=\"gda-italic gda-break\" style={textStyle(typography.memorialSize, typography.memorialLeading, spacing.memorialTop)}>{text.memorial}</Text> : null}\n {type === \"obituaries\" && (text.sender || interaction?.fields?.sender?.active) ? <Text field=\"sender\" interaction={interaction} className=\"gda-bold gda-secondary-font\" style={{ ...textStyle(typography.senderSize, typography.senderLeading, spacing.senderTop), ...secondaryFontStyle }}>{text.sender}</Text> : null}\n\n {type === \"obituaries\" && ceremonyCode !== \"NoCeremony\" && (contact.showChurch || contact.showFuneralDate) && (contact.church || contact.funeralDate || interaction?.fields?.church?.active || interaction?.fields?.funeralDate?.active) ? (\n <div className=\"gda-text\" style={textStyle(typography.ceremonySize, typography.ceremonyLeading, spacing.ceremonyTop)}>\n {contact.showChurch && (contact.church || interaction?.fields?.church?.active) ? <div data-default-ad-field=\"church\" {...fieldEvents(\"church\", interaction)} className={`gda-whitespace-pre-line ${interaction?.fields?.church?.active ? interaction.fields.church.className ?? \"\" : \"\"}`.trim()} style={interaction?.fields?.church?.active ? interaction.fields.church.style : undefined}>{contact.church ? (contact.church.length > 15 ? `${ceremonyLabel ?? \"\"} \\n ${contact.church}` : `${ceremonyLabel ?? \"\"} ${contact.church}`.trim()) : interaction?.fields?.church?.placeholder}</div> : null}\n {contact.showFuneralDate && (contact.funeralDate || interaction?.fields?.funeralDate?.active) ? <div data-default-ad-field=\"funeralDate\" {...fieldEvents(\"funeralDate\", interaction)} className={interaction?.fields?.funeralDate?.active ? interaction.fields.funeralDate.className : undefined} style={interaction?.fields?.funeralDate?.active ? interaction.fields.funeralDate.style : undefined}>{contact.funeralDate ? fmt.funeralDate(contact.funeralDate, Boolean(contact.hideFuneralYear)) : interaction?.fields?.funeralDate?.placeholder}</div> : null}\n </div>\n ) : null}\n\n {type === \"thanks\" ? <ThankYouFields text={text} fmt={fmt} typography={typography} spacing={spacing} interaction={interaction} /> : null}\n <Text field=\"thanks\" interaction={interaction} className=\"gda-break\" style={textStyle(typography.thanksSize, typography.thanksLeading, spacing.thanksTop)}>{text.thanks}</Text>\n {type === \"thanks\" ? <Text field=\"sender\" interaction={interaction} className=\"gda-secondary-font\" style={{ ...textStyle(typography.senderSize, typography.senderLeading, spacing.thanksTop), ...secondaryFontStyle }}>{text.sender}</Text> : null}\n {text.donation ? <div className=\"gda-divider\" style={{ marginTop: `${spacing.donationTop}pt` }} /> : null}\n {text.donation || interaction?.fields?.donation?.active ? <Text field=\"donation\" interaction={interaction} className=\"gda-donation gda-break\" style={textStyle(typography.donationSize, typography.donationLeading, spacing.donationTop)}>{text.donation}</Text> : null}\n </div>\n );\n}\n\nfunction calculateHeaderMargins({ first, second, hasName, hasIcon, spacing }: any) {\n return {\n firstMargin: first && hasIcon ? spacing.iconToText : 0,\n secondMargin: second ? (first ? spacing.introToTitle : hasIcon ? spacing.iconToText : 0) : 0,\n nameMargin: hasName ? (first || second ? spacing.textToName : hasIcon ? spacing.iconToName : 0) : 0,\n };\n}\n\nfunction NamePart({ field, value, interaction, showPlaceholder }: { field: \"firstName\" | \"lastName\"; value?: string | null; interaction?: DefaultAdInteraction; showPlaceholder: boolean }) {\n const state = interaction?.fields?.[field];\n if (!value && !showPlaceholder) return null;\n const isPlaceholder = !value;\n return <span\n data-default-ad-field={field}\n {...fieldEvents(field, interaction)}\n className={`${isPlaceholder && !state?.active ? \"gda-placeholder\" : \"\"} ${state?.active ? `gda-name-part-active ${state.className ?? \"\"}` : \"\"}`.trim()}\n style={state?.active ? state.style : undefined}\n >{value || state?.placeholder}</span>;\n}\n\nfunction ThankYouFields({ text, fmt, typography, spacing, interaction }: any) {\n return <>\n <Text field=\"ceremony\" interaction={interaction} className=\"gda-break\" style={textStyle(typography.bodySize, typography.bodyLeading, spacing.thanksTop)}>{text.ceremony ? fmt.lowercaseFirst(text.ceremony) : null}</Text>\n <Text field=\"message\" interaction={interaction} className=\"gda-break\" style={textStyle(typography.bodySize, typography.bodyLeading, spacing.thanksTop)}>{text.message}</Text>\n </>;\n}\n"],"mappings":"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","names":[]}
package/dist/index.css CHANGED
@@ -78,6 +78,12 @@
78
78
  .gda-placeholder {
79
79
  opacity: .25;
80
80
  }
81
+ .gda-name-part-active {
82
+ padding-inline: 2px;
83
+ margin-inline: -2px;
84
+ box-decoration-break: clone;
85
+ -webkit-box-decoration-break: clone;
86
+ }
81
87
  .gda-field-placeholder-container {
82
88
  display: flex;
83
89
  justify-content: center;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/styles.css"],"sourcesContent":[".gda-root {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n overflow: hidden;\n color: #000;\n background: #fff;\n stroke: #000;\n text-align: center;\n box-shadow: 0 0 30px -10px rgb(0 0 0 / 30%);\n transition: all 700ms;\n}\n.gda-root *, .gda-root *::before, .gda-root *::after { box-sizing: border-box; }\n.gda-text { font-weight: 400; white-space: pre-line; }\n.gda-whitespace-pre-line { white-space: pre-line; }\n.gda-break { overflow-wrap: break-word; }\n.gda-name { white-space: normal; }\n.gda-balance { text-wrap: balance; }\n.gda-bold { font-weight: 700; }\n.gda-italic { font-style: italic; }\n.gda-secondary-font { font-family: var(--default-ad-font-secondary, inherit); }\n.gda-icon { display: flex; justify-content: center; }\n.gda-dates { display: flex; width: 100%; flex-flow: row nowrap; justify-content: center; gap: 4mm; font-weight: 400; white-space: nowrap; }\n.gda-dates-single { flex-direction: column; gap: 0; }\n.gda-death-cross { font-family: \"Times New Roman\", Times, serif; }\n.gda-divider { width: 3rem; margin-right: auto; margin-left: auto; border-top: 1.4pt solid #000; }\n.gda-donation { margin-right: 19pt; margin-left: 19pt; }\n.gda-placeholder { opacity: .25; }\n.gda-field-placeholder-container { display: flex; justify-content: center; }\n.gda-field-empty.gda-donation { margin-right: 0; margin-left: 0; }\n.gda-field-empty.gda-balance { text-wrap: initial; }\n"],"mappings":";AAAA,CAAC;AACC,cAAY;AACZ,WAAS;AACT,kBAAgB;AAChB,eAAa;AACb,YAAU;AACV,SAAO;AACP,cAAY;AACZ,UAAQ;AACR,cAAY;AACZ,cAAY,EAAE,EAAE,KAAK,MAAM,IAAI,EAAE,EAAE,EAAE,EAAE;AACvC,cAAY,IAAI;AAClB;AACA,CAbC,SAaS;AAAG,CAbZ,SAasB,CAAC;AAAU,CAbjC,SAa2C,CAAC;AAAU,cAAY;AAAY;AAC/E,CAAC;AAAW,eAAa;AAAK,eAAa;AAAU;AACrD,CAAC;AAA0B,eAAa;AAAU;AAClD,CAAC;AAAY,iBAAe;AAAY;AACxC,CAAC;AAAW,eAAa;AAAQ;AACjC,CAAC;AAAc,aAAW;AAAS;AACnC,CAAC;AAAW,eAAa;AAAK;AAC9B,CAAC;AAAa,cAAY;AAAQ;AAClC,CAAC;AAAqB,eAAa,IAAI,2BAA2B,EAAE;AAAU;AAC9E,CAAC;AAAW,WAAS;AAAM,mBAAiB;AAAQ;AACpD,CAAC;AAAY,WAAS;AAAM,SAAO;AAAM,aAAW,IAAI;AAAQ,mBAAiB;AAAQ,OAAK;AAAK,eAAa;AAAK,eAAa;AAAQ;AAC1I,CAAC;AAAmB,kBAAgB;AAAQ,OAAK;AAAG;AACpD,CAAC;AAAkB;AAAA,IAAa,iBAAiB;AAAA,IAAE,KAAK;AAAA,IAAE;AAAO;AACjE,CAAC;AAAc,SAAO;AAAM,gBAAc;AAAM,eAAa;AAAM,cAAY,MAAM,MAAM;AAAM;AACjG,CAAC;AAAe,gBAAc;AAAM,eAAa;AAAM;AACvD,CAAC;AAAkB,WAAS;AAAK;AACjC,CAAC;AAAkC,WAAS;AAAM,mBAAiB;AAAQ;AAC3E,CAAC,eAAe,CAHf;AAG+B,gBAAc;AAAG,eAAa;AAAG;AACjE,CADC,eACe,CAbf;AAa8B,aAAW;AAAS;","names":[]}
1
+ {"version":3,"sources":["../src/styles.css"],"sourcesContent":[".gda-root {\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n overflow: hidden;\n color: #000;\n background: #fff;\n stroke: #000;\n text-align: center;\n box-shadow: 0 0 30px -10px rgb(0 0 0 / 30%);\n transition: all 700ms;\n}\n.gda-root *, .gda-root *::before, .gda-root *::after { box-sizing: border-box; }\n.gda-text { font-weight: 400; white-space: pre-line; }\n.gda-whitespace-pre-line { white-space: pre-line; }\n.gda-break { overflow-wrap: break-word; }\n.gda-name { white-space: normal; }\n.gda-balance { text-wrap: balance; }\n.gda-bold { font-weight: 700; }\n.gda-italic { font-style: italic; }\n.gda-secondary-font { font-family: var(--default-ad-font-secondary, inherit); }\n.gda-icon { display: flex; justify-content: center; }\n.gda-dates { display: flex; width: 100%; flex-flow: row nowrap; justify-content: center; gap: 4mm; font-weight: 400; white-space: nowrap; }\n.gda-dates-single { flex-direction: column; gap: 0; }\n.gda-death-cross { font-family: \"Times New Roman\", Times, serif; }\n.gda-divider { width: 3rem; margin-right: auto; margin-left: auto; border-top: 1.4pt solid #000; }\n.gda-donation { margin-right: 19pt; margin-left: 19pt; }\n.gda-placeholder { opacity: .25; }\n.gda-name-part-active {\n padding-inline: 2px;\n margin-inline: -2px;\n box-decoration-break: clone;\n -webkit-box-decoration-break: clone;\n}\n.gda-field-placeholder-container { display: flex; justify-content: center; }\n.gda-field-empty.gda-donation { margin-right: 0; margin-left: 0; }\n.gda-field-empty.gda-balance { text-wrap: initial; }\n"],"mappings":";AAAA,CAAC;AACC,cAAY;AACZ,WAAS;AACT,kBAAgB;AAChB,eAAa;AACb,YAAU;AACV,SAAO;AACP,cAAY;AACZ,UAAQ;AACR,cAAY;AACZ,cAAY,EAAE,EAAE,KAAK,MAAM,IAAI,EAAE,EAAE,EAAE,EAAE;AACvC,cAAY,IAAI;AAClB;AACA,CAbC,SAaS;AAAG,CAbZ,SAasB,CAAC;AAAU,CAbjC,SAa2C,CAAC;AAAU,cAAY;AAAY;AAC/E,CAAC;AAAW,eAAa;AAAK,eAAa;AAAU;AACrD,CAAC;AAA0B,eAAa;AAAU;AAClD,CAAC;AAAY,iBAAe;AAAY;AACxC,CAAC;AAAW,eAAa;AAAQ;AACjC,CAAC;AAAc,aAAW;AAAS;AACnC,CAAC;AAAW,eAAa;AAAK;AAC9B,CAAC;AAAa,cAAY;AAAQ;AAClC,CAAC;AAAqB,eAAa,IAAI,2BAA2B,EAAE;AAAU;AAC9E,CAAC;AAAW,WAAS;AAAM,mBAAiB;AAAQ;AACpD,CAAC;AAAY,WAAS;AAAM,SAAO;AAAM,aAAW,IAAI;AAAQ,mBAAiB;AAAQ,OAAK;AAAK,eAAa;AAAK,eAAa;AAAQ;AAC1I,CAAC;AAAmB,kBAAgB;AAAQ,OAAK;AAAG;AACpD,CAAC;AAAkB;AAAA,IAAa,iBAAiB;AAAA,IAAE,KAAK;AAAA,IAAE;AAAO;AACjE,CAAC;AAAc,SAAO;AAAM,gBAAc;AAAM,eAAa;AAAM,cAAY,MAAM,MAAM;AAAM;AACjG,CAAC;AAAe,gBAAc;AAAM,eAAa;AAAM;AACvD,CAAC;AAAkB,WAAS;AAAK;AACjC,CAAC;AACC,kBAAgB;AAChB,iBAAe;AACf,wBAAsB;AACtB,gCAA8B;AAChC;AACA,CAAC;AAAkC,WAAS;AAAM,mBAAiB;AAAQ;AAC3E,CAAC,eAAe,CATf;AAS+B,gBAAc;AAAG,eAAa;AAAG;AACjE,CADC,eACe,CAnBf;AAmB8B,aAAW;AAAS;","names":[]}
package/dist/index.js CHANGED
@@ -210,7 +210,9 @@ function DefaultAd({
210
210
  const ceremonyCode = contact.ceremony?.code;
211
211
  const ceremonyLabel = contact.ceremony?.label ?? ceremonyCode;
212
212
  const secondaryFontStyle = typography.secondaryFontFamily != null ? { fontFamily: typography.secondaryFontFamily } : {};
213
- const activeNameState = interaction?.fields?.firstName?.active ? interaction.fields.firstName : interaction?.fields?.lastName?.active ? interaction.fields.lastName : void 0;
213
+ const hasActiveNamePart = Boolean(
214
+ interaction?.fields?.firstName?.active || interaction?.fields?.lastName?.active
215
+ );
214
216
  return /* @__PURE__ */ jsxs(
215
217
  "div",
216
218
  {
@@ -258,10 +260,10 @@ function DefaultAd({
258
260
  }
259
261
  ),
260
262
  /* @__PURE__ */ jsx(Text, { field: type === "thanks" ? "briefIntroduction" : "title", interaction, className: "gda-break", style: textStyle(typography.titleSize, typography.titleLeading, secondMargin), children: type === "thanks" && second ? fmt.lowercaseFirst(second) : type === "obituaries" ? second : null }),
261
- hasName && !interaction?.fields?.firstName?.active && !interaction?.fields?.lastName?.active ? /* @__PURE__ */ jsx(Text, { className: "gda-name gda-bold gda-secondary-font", style: { ...textStyle(typography.nameSize, typography.nameLeading, nameMargin), ...secondaryFontStyle }, children: [contact.firstName, contact.lastName].filter(Boolean).join(" ") }) : hasName || interaction?.fields?.firstName?.active || interaction?.fields?.lastName?.active ? /* @__PURE__ */ jsxs("div", { className: `gda-name gda-bold gda-secondary-font ${activeNameState?.className ?? ""}`.trim(), style: { ...textStyle(typography.nameSize, typography.nameLeading, nameMargin), ...secondaryFontStyle, ...activeNameState?.style }, children: [
262
- /* @__PURE__ */ jsx(NamePart, { field: "firstName", value: contact.firstName, interaction }),
263
+ hasName && !interaction?.fields?.firstName?.active && !interaction?.fields?.lastName?.active ? /* @__PURE__ */ jsx(Text, { className: "gda-name gda-bold gda-secondary-font", style: { ...textStyle(typography.nameSize, typography.nameLeading, nameMargin), ...secondaryFontStyle }, children: [contact.firstName, contact.lastName].filter(Boolean).join(" ") }) : hasName || hasActiveNamePart ? /* @__PURE__ */ jsxs("div", { className: "gda-name gda-bold gda-secondary-font", style: { ...textStyle(typography.nameSize, typography.nameLeading, nameMargin), ...secondaryFontStyle }, children: [
264
+ /* @__PURE__ */ jsx(NamePart, { field: "firstName", value: contact.firstName, interaction, showPlaceholder: hasActiveNamePart }),
263
265
  " ",
264
- /* @__PURE__ */ jsx(NamePart, { field: "lastName", value: contact.lastName, interaction })
266
+ /* @__PURE__ */ jsx(NamePart, { field: "lastName", value: contact.lastName, interaction, showPlaceholder: hasActiveNamePart })
265
267
  ] }) : showEmptyNamePlaceholder ? /* @__PURE__ */ jsx("div", { className: "gda-placeholder gda-name gda-bold gda-secondary-font", style: { ...textStyle(typography.nameSize, typography.nameLeading, nameMargin), ...secondaryFontStyle }, children: emptyNamePlaceholder }) : null,
266
268
  contact.showBirthDate && (contact.birthDate || interaction?.fields?.birthDate?.active) || contact.showDeathDate && (contact.deathDate || interaction?.fields?.deathDate?.active) ? /* @__PURE__ */ jsxs(
267
269
  "div",
@@ -284,7 +286,7 @@ function DefaultAd({
284
286
  type === "obituaries" ? /* @__PURE__ */ jsx(Text, { field: "deceased", interaction, className: "gda-balance", style: textStyle(typography.bodySize, typography.bodyLeading, spacing.deceasedTop), children: text.deceased }) : null,
285
287
  type === "obituaries" ? /* @__PURE__ */ jsx(Text, { field: "memorial", interaction, className: "gda-italic gda-break", style: textStyle(typography.memorialSize, typography.memorialLeading, spacing.memorialTop), children: text.memorial }) : null,
286
288
  type === "obituaries" && (text.sender || interaction?.fields?.sender?.active) ? /* @__PURE__ */ jsx(Text, { field: "sender", interaction, className: "gda-bold gda-secondary-font", style: { ...textStyle(typography.senderSize, typography.senderLeading, spacing.senderTop), ...secondaryFontStyle }, children: text.sender }) : null,
287
- (type === "obituaries" || variant === "publication") && ceremonyCode !== "NoCeremony" && (contact.showChurch || contact.showFuneralDate) && (contact.church || contact.funeralDate || interaction?.fields?.church?.active || interaction?.fields?.funeralDate?.active) ? /* @__PURE__ */ jsxs("div", { className: "gda-text", style: textStyle(typography.ceremonySize, typography.ceremonyLeading, spacing.ceremonyTop), children: [
289
+ type === "obituaries" && ceremonyCode !== "NoCeremony" && (contact.showChurch || contact.showFuneralDate) && (contact.church || contact.funeralDate || interaction?.fields?.church?.active || interaction?.fields?.funeralDate?.active) ? /* @__PURE__ */ jsxs("div", { className: "gda-text", style: textStyle(typography.ceremonySize, typography.ceremonyLeading, spacing.ceremonyTop), children: [
288
290
  contact.showChurch && (contact.church || interaction?.fields?.church?.active) ? /* @__PURE__ */ jsx("div", { "data-default-ad-field": "church", ...fieldEvents("church", interaction), className: `gda-whitespace-pre-line ${interaction?.fields?.church?.active ? interaction.fields.church.className ?? "" : ""}`.trim(), style: interaction?.fields?.church?.active ? interaction.fields.church.style : void 0, children: contact.church ? contact.church.length > 15 ? `${ceremonyLabel ?? ""}
289
291
  ${contact.church}` : `${ceremonyLabel ?? ""} ${contact.church}`.trim() : interaction?.fields?.church?.placeholder }) : null,
290
292
  contact.showFuneralDate && (contact.funeralDate || interaction?.fields?.funeralDate?.active) ? /* @__PURE__ */ jsx("div", { "data-default-ad-field": "funeralDate", ...fieldEvents("funeralDate", interaction), className: interaction?.fields?.funeralDate?.active ? interaction.fields.funeralDate.className : void 0, style: interaction?.fields?.funeralDate?.active ? interaction.fields.funeralDate.style : void 0, children: contact.funeralDate ? fmt.funeralDate(contact.funeralDate, Boolean(contact.hideFuneralYear)) : interaction?.fields?.funeralDate?.placeholder }) : null
@@ -305,10 +307,20 @@ function calculateHeaderMargins({ first, second, hasName, hasIcon, spacing }) {
305
307
  nameMargin: hasName ? first || second ? spacing.textToName : hasIcon ? spacing.iconToName : 0 : 0
306
308
  };
307
309
  }
308
- function NamePart({ field, value, interaction }) {
310
+ function NamePart({ field, value, interaction, showPlaceholder }) {
309
311
  const state = interaction?.fields?.[field];
310
- if (!value && !state?.active) return null;
311
- return /* @__PURE__ */ jsx("span", { "data-default-ad-field": field, ...fieldEvents(field, interaction), children: value || state?.placeholder });
312
+ if (!value && !showPlaceholder) return null;
313
+ const isPlaceholder = !value;
314
+ return /* @__PURE__ */ jsx(
315
+ "span",
316
+ {
317
+ "data-default-ad-field": field,
318
+ ...fieldEvents(field, interaction),
319
+ className: `${isPlaceholder && !state?.active ? "gda-placeholder" : ""} ${state?.active ? `gda-name-part-active ${state.className ?? ""}` : ""}`.trim(),
320
+ style: state?.active ? state.style : void 0,
321
+ children: value || state?.placeholder
322
+ }
323
+ );
312
324
  }
313
325
  function ThankYouFields({ text, fmt, typography, spacing, interaction }) {
314
326
  return /* @__PURE__ */ jsxs(Fragment, { children: [
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/presets.ts","../src/utils.ts","../src/DefaultAd.tsx"],"sourcesContent":["import type { DefaultAdStyle, LegacyAdTemplate } from \"./types\";\n\n/**\n * Canonical layout shared by every consumer. Typography is deliberately kept\n * out of this object so applications can still select licensed/dynamic fonts.\n */\nexport const sharedDefaultAdLayout = {\n columnsMm: 86,\n heightMm: null,\n paddingMm: 4,\n horizontalPaddingMm: 2,\n border: false,\n borderWidthPt: 1.4,\n spacing: {\n iconToText: 11,\n introToTitle: 8,\n // These values originated as unitless React styles and therefore retain\n // their established numeric geometry.\n textToName: 4.2,\n iconToName: 4.95,\n dateTop: 5.6,\n deceasedTop: 6,\n memorialTop: 6,\n senderTop: 8,\n ceremonyTop: 8,\n thanksTop: 7,\n donationTop: 7,\n sectionGapMm: 0,\n },\n} as const satisfies Readonly<DefaultAdStyle>;\n\nexport const classicDefaultAdStyle: Readonly<DefaultAdStyle> = {\n ...sharedDefaultAdLayout,\n typography: {\n fontFamily: \"var(--default-ad-font-primary, Schoolbook, Georgia, serif)\",\n secondaryFontFamily: \"var(--default-ad-font-secondary, Schoolbook, Georgia, serif)\",\n introSize: 10,\n introLeading: 12,\n titleSize: 10,\n titleLeading: 12,\n nameSize: 14,\n nameLeading: 16.8,\n dateSize: 10,\n longDateSize: 10,\n longDateLetterSpacing: \"-0.01em\",\n dateLeading: 12,\n bodySize: 10,\n bodyLeading: 12,\n memorialSize: 10,\n memorialLeading: 12,\n senderSize: 10,\n senderLeading: 12,\n ceremonySize: 10,\n ceremonyLeading: 12,\n thanksSize: 10,\n thanksLeading: 12,\n donationSize: 10,\n donationLeading: 12,\n },\n};\n\nexport const publicationDefaultAdStyle: Readonly<DefaultAdStyle> = {\n ...sharedDefaultAdLayout,\n typography: {\n ...classicDefaultAdStyle.typography,\n fontFamily: \"var(--default-ad-font-primary, Raleway, Arial, sans-serif)\",\n secondaryFontFamily: \"var(--default-ad-font-secondary, Athelas, Georgia, serif)\",\n introSize: 11,\n introLeading: 13,\n titleSize: 11,\n titleLeading: 13,\n nameSize: 17,\n nameLeading: 15,\n dateSize: 11.5,\n longDateSize: 11,\n longDateLetterSpacing: \"-0.01em\",\n bodySize: 12,\n bodyLeading: 13,\n memorialSize: 12,\n memorialLeading: 13,\n senderSize: 13,\n senderLeading: 13,\n ceremonySize: 11,\n ceremonyLeading: 13,\n thanksSize: 11,\n thanksLeading: 13,\n donationSize: 11,\n donationLeading: 13,\n },\n};\n\nexport function styleFromLegacyTemplate(template?: LegacyAdTemplate | null): DefaultAdStyle {\n if (!template) return publicationDefaultAdStyle;\n return {\n ...publicationDefaultAdStyle,\n typography: {\n ...publicationDefaultAdStyle.typography,\n fontFamily: template.font1 || publicationDefaultAdStyle.typography?.fontFamily,\n secondaryFontFamily: template.font2 || publicationDefaultAdStyle.typography?.secondaryFontFamily,\n introSize: template.introSize,\n introLeading: template.introLeading,\n titleSize: template.titleSize,\n titleLeading: template.titleLeading,\n nameSize: template.fullnameSize,\n nameLeading: template.fullnameLeading,\n ...fontPair(template.deceasedText, \"bodySize\", \"bodyLeading\"),\n ...fontPair(template.memorialText, \"memorialSize\", \"memorialLeading\"),\n ...fontPair(template.senderText, \"senderSize\", \"senderLeading\"),\n ...fontPair(template.ceremonyText, \"ceremonySize\", \"ceremonyLeading\"),\n ...fontPair(template.thanksText, \"thanksSize\", \"thanksLeading\"),\n ...fontPair(template.donationText, \"donationSize\", \"donationLeading\"),\n ...tracking(template.longDatesText),\n },\n };\n}\n\nfunction fontPair(value: string | undefined, sizeKey: string, leadingKey: string): Record<string, number> {\n if (!value) return {};\n const size = value.match(/text-\\[(-?[\\d.]+)pt\\]/)?.[1];\n const leading = value.match(/leading-\\[(-?[\\d.]+)pt\\]/)?.[1];\n return {\n ...(size ? { [sizeKey]: Number(size) } : {}),\n ...(leading ? { [leadingKey]: Number(leading) } : {}),\n };\n}\n\nfunction tracking(value: string | undefined): { longDateLetterSpacing?: string } {\n const amount = value?.match(/tracking-\\[([^\\]]+)\\]/)?.[1];\n return amount ? { longDateLetterSpacing: amount } : {};\n}\n","import type { DefaultAdFormatters } from \"./types\";\n\nexport const defaultFormatters: Required<DefaultAdFormatters> = {\n date(value) {\n const match = value.match(/^(\\d{4})-(\\d{2})-(\\d{2})/);\n return match ? `${match[3]}.${match[2]}.${match[1]}` : value;\n },\n funeralDate(value, hideYear) {\n if (!hideYear) return value;\n return value.replace(/([.\\/-])\\d{4}(?=\\D|$)/, \"\");\n },\n lowercaseFirst(value) {\n return value ? value.charAt(0).toLocaleLowerCase() + value.slice(1) : value;\n },\n};\n\nexport function mergeDefined<T extends object>(base: T, overrides?: Partial<T>): T {\n if (!overrides) return { ...base };\n return Object.fromEntries(\n Object.entries({ ...base, ...overrides }).filter(([, value]) => value !== undefined),\n ) as T;\n}\n\nexport function decodeSvgMarkup(value: string): string {\n return value\n .replace(/&lt;/g, \"<\")\n .replace(/&gt;/g, \">\")\n .replace(/&quot;/g, '\"')\n .replace(/&#(?:0*39|x0*27);/gi, \"'\")\n .replace(/&amp;/g, \"&\");\n}\n","import type { CSSProperties, ReactNode } from \"react\";\nimport { classicDefaultAdStyle } from \"./presets\";\nimport type { DefaultAdField, DefaultAdInteraction, DefaultAdProps, DefaultAdSpacing, DefaultAdTypography } from \"./types\";\nimport { decodeSvgMarkup, defaultFormatters, mergeDefined } from \"./utils\";\nimport \"./styles.css\";\n\nfunction textStyle(size: number, leading: number, marginTop: number): CSSProperties {\n return { fontSize: `${size}pt`, lineHeight: `${leading}pt`, marginTop: `${marginTop}pt` };\n}\n\nfunction Text({ children, className = \"\", style, field, interaction }: { children?: ReactNode; className?: string; style: CSSProperties; field?: DefaultAdField; interaction?: DefaultAdInteraction }) {\n const fieldState = field ? interaction?.fields?.[field] : undefined;\n const empty = children === null || children === undefined || children === \"\";\n if (empty && !fieldState?.active) return null;\n const events = field ? fieldEvents(field, interaction) : {};\n if (empty) {\n return <div className=\"gda-field-placeholder-container\"><div data-default-ad-field={field} className={`gda-text gda-field-empty ${className} ${fieldState?.className ?? \"\"}`.trim()} style={{ ...style, ...fieldState?.style }} {...events}>{fieldState?.placeholder}</div></div>;\n }\n return <div data-default-ad-field={field} className={`gda-text ${className} ${fieldState?.active ? fieldState.className ?? \"\" : \"\"}`.trim()} style={{ ...style, ...(fieldState?.active ? fieldState.style : undefined) }} {...events}>{children}</div>;\n}\n\nfunction fieldEvents(field: DefaultAdField, interaction?: DefaultAdInteraction) {\n return {\n onFocus: interaction?.onFieldFocus ? () => interaction.onFieldFocus?.(field) : undefined,\n onBlur: interaction?.onFieldBlur ? () => interaction.onFieldBlur?.(field) : undefined,\n onClick: interaction?.onFieldClick ? () => interaction.onFieldClick?.(field) : undefined,\n };\n}\n\nexport function DefaultAd({\n data,\n style,\n mode = \"published\",\n variant = \"classic\",\n rootRef,\n interaction,\n formatters,\n showEmptyNamePlaceholder = mode === \"builder\",\n emptyNamePlaceholder = \"Fornavn Efternavn\",\n className = \"\",\n rootStyle,\n ...htmlProps\n}: DefaultAdProps) {\n const typography = mergeDefined(\n classicDefaultAdStyle.typography as Required<DefaultAdTypography>,\n style?.typography,\n );\n const spacing = mergeDefined(\n classicDefaultAdStyle.spacing as Required<DefaultAdSpacing>,\n style?.spacing,\n );\n const layout = mergeDefined(classicDefaultAdStyle, style);\n const fmt = { ...defaultFormatters, ...formatters };\n const { contact, text, icon, type } = data;\n const hasName = Boolean(contact.firstName || contact.lastName);\n const first = type === \"thanks\" ? text.thanksIntro : text.intro;\n const second = type === \"thanks\" ? text.briefIntroduction : text.title;\n const firstField = type === \"thanks\" ? \"thanksIntro\" : \"intro\";\n const secondField = type === \"thanks\" ? \"briefIntroduction\" : \"title\";\n const hasVisualFirst = Boolean(first || interaction?.fields?.[firstField]?.active);\n const hasVisualSecond = Boolean(second || interaction?.fields?.[secondField]?.active);\n const hasVisualName = hasName || Boolean(interaction?.fields?.firstName?.active || interaction?.fields?.lastName?.active);\n const headerMargins = calculateHeaderMargins({\n first: hasVisualFirst, second: hasVisualSecond, hasName: hasVisualName, hasIcon: Boolean(icon), spacing,\n });\n const { firstMargin, secondMargin, nameMargin } = headerMargins;\n const isSingleColumn = Number(layout.columnsMm) === 41;\n const ceremonyCode = contact.ceremony?.code;\n const ceremonyLabel = contact.ceremony?.label ?? ceremonyCode;\n const secondaryFontStyle: CSSProperties = typography.secondaryFontFamily != null\n ? { fontFamily: typography.secondaryFontFamily }\n : {};\n const activeNameState = interaction?.fields?.firstName?.active\n ? interaction.fields.firstName\n : interaction?.fields?.lastName?.active\n ? interaction.fields.lastName\n : undefined;\n\n return (\n <div\n {...htmlProps}\n ref={rootRef}\n data-default-ad=\"\"\n data-ad-content=\"\"\n data-ad-ready=\"true\"\n data-mode={mode}\n data-variant={variant}\n className={`gda-root ${className}`.trim()}\n style={{\n width: `${layout.columnsMm}mm`,\n minWidth: `${layout.columnsMm}mm`,\n ...(layout.heightMm != null ? { height: `${layout.heightMm}mm` } : {}),\n padding: `${layout.paddingMm}mm ${layout.horizontalPaddingMm}mm`,\n border: layout.border ? `${layout.borderWidthPt}pt solid black` : 0,\n gap: `${spacing.sectionGapMm}mm`,\n ...(typography.fontFamily != null ? { fontFamily: typography.fontFamily } : {}),\n ...rootStyle,\n }}\n >\n {icon ? (\n <div className=\"gda-icon\">\n <svg className={icon.className} xmlns=\"http://www.w3.org/2000/svg\"\n width={Number(icon.width) + 16} height={Number(icon.height) + 16}\n viewBox={icon.viewBox} role={icon.title ? \"img\" : undefined} aria-label={icon.title} aria-hidden={icon.title ? undefined : true}\n dangerouslySetInnerHTML={{ __html: decodeSvgMarkup(icon.svg) }} />\n </div>\n ) : null}\n\n <Text field={type === \"thanks\" ? \"thanksIntro\" : \"intro\"} interaction={interaction} className={`${type === \"thanks\" ? \"gda-bold\" : \"\"} gda-break`}\n style={textStyle(type === \"thanks\" ? 14 : typography.introSize, typography.introLeading, firstMargin)}>\n {type === \"thanks\" && first ? first : type === \"obituaries\" ? first : null}\n </Text>\n <Text field={type === \"thanks\" ? \"briefIntroduction\" : \"title\"} interaction={interaction} className=\"gda-break\" style={textStyle(typography.titleSize, typography.titleLeading, secondMargin)}>\n {type === \"thanks\" && second ? fmt.lowercaseFirst(second) : type === \"obituaries\" ? second : null}\n </Text>\n\n {hasName && !interaction?.fields?.firstName?.active && !interaction?.fields?.lastName?.active ? (\n <Text className=\"gda-name gda-bold gda-secondary-font\" style={{ ...textStyle(typography.nameSize, typography.nameLeading, nameMargin), ...secondaryFontStyle }}>\n {[contact.firstName, contact.lastName].filter(Boolean).join(\" \")}\n </Text>\n ) : hasName || interaction?.fields?.firstName?.active || interaction?.fields?.lastName?.active ? (\n <div className={`gda-name gda-bold gda-secondary-font ${activeNameState?.className ?? \"\"}`.trim()} style={{ ...textStyle(typography.nameSize, typography.nameLeading, nameMargin), ...secondaryFontStyle, ...activeNameState?.style }}>\n <NamePart field=\"firstName\" value={contact.firstName} interaction={interaction} />{\" \"}\n <NamePart field=\"lastName\" value={contact.lastName} interaction={interaction} />\n </div>\n ) : showEmptyNamePlaceholder ? <div className=\"gda-placeholder gda-name gda-bold gda-secondary-font\" style={{ ...textStyle(typography.nameSize, typography.nameLeading, nameMargin), ...secondaryFontStyle }}>{emptyNamePlaceholder}</div> : null}\n\n {(contact.showBirthDate && (contact.birthDate || interaction?.fields?.birthDate?.active)) || (contact.showDeathDate && (contact.deathDate || interaction?.fields?.deathDate?.active)) ? (\n <div className={`gda-dates ${isSingleColumn ? \"gda-dates-single\" : \"\"}`}\n style={{ marginTop: `${spacing.dateTop}pt`, lineHeight: `${typography.dateLeading}pt`, ...(isSingleColumn ? { gap: `${spacing.dateTop}pt` } : {}) }}>\n {contact.showBirthDate && (contact.birthDate || interaction?.fields?.birthDate?.active) ? (\n <span data-default-ad-field=\"birthDate\" {...fieldEvents(\"birthDate\", interaction)} className={interaction?.fields?.birthDate?.active ? interaction.fields.birthDate.className : undefined} style={{ fontSize: `${contact.birthDate && fmt.date(contact.birthDate).length > 10 ? typography.longDateSize : typography.dateSize}pt`, ...(contact.birthDate && fmt.date(contact.birthDate).length > 10 ? { letterSpacing: typography.longDateLetterSpacing } : {}), ...(interaction?.fields?.birthDate?.active ? interaction.fields.birthDate.style : {}) }}>\n &#10043; {contact.birthDate ? fmt.date(contact.birthDate) : interaction?.fields?.birthDate?.placeholder}\n </span>\n ) : null}\n {contact.showDeathDate && (contact.deathDate || interaction?.fields?.deathDate?.active) ? (\n <span data-default-ad-field=\"deathDate\" {...fieldEvents(\"deathDate\", interaction)} className={interaction?.fields?.deathDate?.active ? interaction.fields.deathDate.className : undefined} style={{ fontSize: `${contact.deathDate && fmt.date(contact.deathDate).length > 10 ? typography.longDateSize : typography.dateSize}pt`, ...(contact.deathDate && fmt.date(contact.deathDate).length > 10 ? { letterSpacing: typography.longDateLetterSpacing } : {}), ...(interaction?.fields?.deathDate?.active ? interaction.fields.deathDate.style : {}) }}>\n <span className=\"gda-death-cross\" aria-hidden=\"true\">✝︎</span> {contact.deathDate ? fmt.date(contact.deathDate) : interaction?.fields?.deathDate?.placeholder}\n </span>\n ) : null}\n </div>\n ) : null}\n\n {type === \"obituaries\" ? <Text field=\"deceased\" interaction={interaction} className=\"gda-balance\" style={textStyle(typography.bodySize, typography.bodyLeading, spacing.deceasedTop)}>{text.deceased}</Text> : null}\n {type === \"obituaries\" ? <Text field=\"memorial\" interaction={interaction} className=\"gda-italic gda-break\" style={textStyle(typography.memorialSize, typography.memorialLeading, spacing.memorialTop)}>{text.memorial}</Text> : null}\n {type === \"obituaries\" && (text.sender || interaction?.fields?.sender?.active) ? <Text field=\"sender\" interaction={interaction} className=\"gda-bold gda-secondary-font\" style={{ ...textStyle(typography.senderSize, typography.senderLeading, spacing.senderTop), ...secondaryFontStyle }}>{text.sender}</Text> : null}\n\n {(type === \"obituaries\" || variant === \"publication\") && ceremonyCode !== \"NoCeremony\" && (contact.showChurch || contact.showFuneralDate) && (contact.church || contact.funeralDate || interaction?.fields?.church?.active || interaction?.fields?.funeralDate?.active) ? (\n <div className=\"gda-text\" style={textStyle(typography.ceremonySize, typography.ceremonyLeading, spacing.ceremonyTop)}>\n {contact.showChurch && (contact.church || interaction?.fields?.church?.active) ? <div data-default-ad-field=\"church\" {...fieldEvents(\"church\", interaction)} className={`gda-whitespace-pre-line ${interaction?.fields?.church?.active ? interaction.fields.church.className ?? \"\" : \"\"}`.trim()} style={interaction?.fields?.church?.active ? interaction.fields.church.style : undefined}>{contact.church ? (contact.church.length > 15 ? `${ceremonyLabel ?? \"\"} \\n ${contact.church}` : `${ceremonyLabel ?? \"\"} ${contact.church}`.trim()) : interaction?.fields?.church?.placeholder}</div> : null}\n {contact.showFuneralDate && (contact.funeralDate || interaction?.fields?.funeralDate?.active) ? <div data-default-ad-field=\"funeralDate\" {...fieldEvents(\"funeralDate\", interaction)} className={interaction?.fields?.funeralDate?.active ? interaction.fields.funeralDate.className : undefined} style={interaction?.fields?.funeralDate?.active ? interaction.fields.funeralDate.style : undefined}>{contact.funeralDate ? fmt.funeralDate(contact.funeralDate, Boolean(contact.hideFuneralYear)) : interaction?.fields?.funeralDate?.placeholder}</div> : null}\n </div>\n ) : null}\n\n {type === \"thanks\" ? <ThankYouFields text={text} fmt={fmt} typography={typography} spacing={spacing} interaction={interaction} /> : null}\n <Text field=\"thanks\" interaction={interaction} className=\"gda-break\" style={textStyle(typography.thanksSize, typography.thanksLeading, spacing.thanksTop)}>{text.thanks}</Text>\n {type === \"thanks\" ? <Text field=\"sender\" interaction={interaction} className=\"gda-secondary-font\" style={{ ...textStyle(typography.senderSize, typography.senderLeading, spacing.thanksTop), ...secondaryFontStyle }}>{text.sender}</Text> : null}\n {text.donation ? <div className=\"gda-divider\" style={{ marginTop: `${spacing.donationTop}pt` }} /> : null}\n {text.donation || interaction?.fields?.donation?.active ? <Text field=\"donation\" interaction={interaction} className=\"gda-donation gda-break\" style={textStyle(typography.donationSize, typography.donationLeading, spacing.donationTop)}>{text.donation}</Text> : null}\n </div>\n );\n}\n\nfunction calculateHeaderMargins({ first, second, hasName, hasIcon, spacing }: any) {\n return {\n firstMargin: first && hasIcon ? spacing.iconToText : 0,\n secondMargin: second ? (first ? spacing.introToTitle : hasIcon ? spacing.iconToText : 0) : 0,\n nameMargin: hasName ? (first || second ? spacing.textToName : hasIcon ? spacing.iconToName : 0) : 0,\n };\n}\n\nfunction NamePart({ field, value, interaction }: { field: \"firstName\" | \"lastName\"; value?: string | null; interaction?: DefaultAdInteraction }) {\n const state = interaction?.fields?.[field];\n if (!value && !state?.active) return null;\n return <span data-default-ad-field={field} {...fieldEvents(field, interaction)}>{value || state?.placeholder}</span>;\n}\n\nfunction ThankYouFields({ text, fmt, typography, spacing, interaction }: any) {\n return <>\n <Text field=\"ceremony\" interaction={interaction} className=\"gda-break\" style={textStyle(typography.bodySize, typography.bodyLeading, spacing.thanksTop)}>{text.ceremony ? fmt.lowercaseFirst(text.ceremony) : null}</Text>\n <Text field=\"message\" interaction={interaction} className=\"gda-break\" style={textStyle(typography.bodySize, typography.bodyLeading, spacing.thanksTop)}>{text.message}</Text>\n </>;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/presets.ts","../src/utils.ts","../src/DefaultAd.tsx"],"sourcesContent":["import type { DefaultAdStyle, LegacyAdTemplate } from \"./types\";\n\n/**\n * Canonical layout shared by every consumer. Typography is deliberately kept\n * out of this object so applications can still select licensed/dynamic fonts.\n */\nexport const sharedDefaultAdLayout = {\n columnsMm: 86,\n heightMm: null,\n paddingMm: 4,\n horizontalPaddingMm: 2,\n border: false,\n borderWidthPt: 1.4,\n spacing: {\n iconToText: 11,\n introToTitle: 8,\n // These values originated as unitless React styles and therefore retain\n // their established numeric geometry.\n textToName: 4.2,\n iconToName: 4.95,\n dateTop: 5.6,\n deceasedTop: 6,\n memorialTop: 6,\n senderTop: 8,\n ceremonyTop: 8,\n thanksTop: 7,\n donationTop: 7,\n sectionGapMm: 0,\n },\n} as const satisfies Readonly<DefaultAdStyle>;\n\nexport const classicDefaultAdStyle: Readonly<DefaultAdStyle> = {\n ...sharedDefaultAdLayout,\n typography: {\n fontFamily: \"var(--default-ad-font-primary, Schoolbook, Georgia, serif)\",\n secondaryFontFamily: \"var(--default-ad-font-secondary, Schoolbook, Georgia, serif)\",\n introSize: 10,\n introLeading: 12,\n titleSize: 10,\n titleLeading: 12,\n nameSize: 14,\n nameLeading: 16.8,\n dateSize: 10,\n longDateSize: 10,\n longDateLetterSpacing: \"-0.01em\",\n dateLeading: 12,\n bodySize: 10,\n bodyLeading: 12,\n memorialSize: 10,\n memorialLeading: 12,\n senderSize: 10,\n senderLeading: 12,\n ceremonySize: 10,\n ceremonyLeading: 12,\n thanksSize: 10,\n thanksLeading: 12,\n donationSize: 10,\n donationLeading: 12,\n },\n};\n\nexport const publicationDefaultAdStyle: Readonly<DefaultAdStyle> = {\n ...sharedDefaultAdLayout,\n typography: {\n ...classicDefaultAdStyle.typography,\n fontFamily: \"var(--default-ad-font-primary, Raleway, Arial, sans-serif)\",\n secondaryFontFamily: \"var(--default-ad-font-secondary, Athelas, Georgia, serif)\",\n introSize: 11,\n introLeading: 13,\n titleSize: 11,\n titleLeading: 13,\n nameSize: 17,\n nameLeading: 15,\n dateSize: 11.5,\n longDateSize: 11,\n longDateLetterSpacing: \"-0.01em\",\n bodySize: 12,\n bodyLeading: 13,\n memorialSize: 12,\n memorialLeading: 13,\n senderSize: 13,\n senderLeading: 13,\n ceremonySize: 11,\n ceremonyLeading: 13,\n thanksSize: 11,\n thanksLeading: 13,\n donationSize: 11,\n donationLeading: 13,\n },\n};\n\nexport function styleFromLegacyTemplate(template?: LegacyAdTemplate | null): DefaultAdStyle {\n if (!template) return publicationDefaultAdStyle;\n return {\n ...publicationDefaultAdStyle,\n typography: {\n ...publicationDefaultAdStyle.typography,\n fontFamily: template.font1 || publicationDefaultAdStyle.typography?.fontFamily,\n secondaryFontFamily: template.font2 || publicationDefaultAdStyle.typography?.secondaryFontFamily,\n introSize: template.introSize,\n introLeading: template.introLeading,\n titleSize: template.titleSize,\n titleLeading: template.titleLeading,\n nameSize: template.fullnameSize,\n nameLeading: template.fullnameLeading,\n ...fontPair(template.deceasedText, \"bodySize\", \"bodyLeading\"),\n ...fontPair(template.memorialText, \"memorialSize\", \"memorialLeading\"),\n ...fontPair(template.senderText, \"senderSize\", \"senderLeading\"),\n ...fontPair(template.ceremonyText, \"ceremonySize\", \"ceremonyLeading\"),\n ...fontPair(template.thanksText, \"thanksSize\", \"thanksLeading\"),\n ...fontPair(template.donationText, \"donationSize\", \"donationLeading\"),\n ...tracking(template.longDatesText),\n },\n };\n}\n\nfunction fontPair(value: string | undefined, sizeKey: string, leadingKey: string): Record<string, number> {\n if (!value) return {};\n const size = value.match(/text-\\[(-?[\\d.]+)pt\\]/)?.[1];\n const leading = value.match(/leading-\\[(-?[\\d.]+)pt\\]/)?.[1];\n return {\n ...(size ? { [sizeKey]: Number(size) } : {}),\n ...(leading ? { [leadingKey]: Number(leading) } : {}),\n };\n}\n\nfunction tracking(value: string | undefined): { longDateLetterSpacing?: string } {\n const amount = value?.match(/tracking-\\[([^\\]]+)\\]/)?.[1];\n return amount ? { longDateLetterSpacing: amount } : {};\n}\n","import type { DefaultAdFormatters } from \"./types\";\n\nexport const defaultFormatters: Required<DefaultAdFormatters> = {\n date(value) {\n const match = value.match(/^(\\d{4})-(\\d{2})-(\\d{2})/);\n return match ? `${match[3]}.${match[2]}.${match[1]}` : value;\n },\n funeralDate(value, hideYear) {\n if (!hideYear) return value;\n return value.replace(/([.\\/-])\\d{4}(?=\\D|$)/, \"\");\n },\n lowercaseFirst(value) {\n return value ? value.charAt(0).toLocaleLowerCase() + value.slice(1) : value;\n },\n};\n\nexport function mergeDefined<T extends object>(base: T, overrides?: Partial<T>): T {\n if (!overrides) return { ...base };\n return Object.fromEntries(\n Object.entries({ ...base, ...overrides }).filter(([, value]) => value !== undefined),\n ) as T;\n}\n\nexport function decodeSvgMarkup(value: string): string {\n return value\n .replace(/&lt;/g, \"<\")\n .replace(/&gt;/g, \">\")\n .replace(/&quot;/g, '\"')\n .replace(/&#(?:0*39|x0*27);/gi, \"'\")\n .replace(/&amp;/g, \"&\");\n}\n","import type { CSSProperties, ReactNode } from \"react\";\nimport { classicDefaultAdStyle } from \"./presets\";\nimport type { DefaultAdField, DefaultAdInteraction, DefaultAdProps, DefaultAdSpacing, DefaultAdTypography } from \"./types\";\nimport { decodeSvgMarkup, defaultFormatters, mergeDefined } from \"./utils\";\nimport \"./styles.css\";\n\nfunction textStyle(size: number, leading: number, marginTop: number): CSSProperties {\n return { fontSize: `${size}pt`, lineHeight: `${leading}pt`, marginTop: `${marginTop}pt` };\n}\n\nfunction Text({ children, className = \"\", style, field, interaction }: { children?: ReactNode; className?: string; style: CSSProperties; field?: DefaultAdField; interaction?: DefaultAdInteraction }) {\n const fieldState = field ? interaction?.fields?.[field] : undefined;\n const empty = children === null || children === undefined || children === \"\";\n if (empty && !fieldState?.active) return null;\n const events = field ? fieldEvents(field, interaction) : {};\n if (empty) {\n return <div className=\"gda-field-placeholder-container\"><div data-default-ad-field={field} className={`gda-text gda-field-empty ${className} ${fieldState?.className ?? \"\"}`.trim()} style={{ ...style, ...fieldState?.style }} {...events}>{fieldState?.placeholder}</div></div>;\n }\n return <div data-default-ad-field={field} className={`gda-text ${className} ${fieldState?.active ? fieldState.className ?? \"\" : \"\"}`.trim()} style={{ ...style, ...(fieldState?.active ? fieldState.style : undefined) }} {...events}>{children}</div>;\n}\n\nfunction fieldEvents(field: DefaultAdField, interaction?: DefaultAdInteraction) {\n return {\n onFocus: interaction?.onFieldFocus ? () => interaction.onFieldFocus?.(field) : undefined,\n onBlur: interaction?.onFieldBlur ? () => interaction.onFieldBlur?.(field) : undefined,\n onClick: interaction?.onFieldClick ? () => interaction.onFieldClick?.(field) : undefined,\n };\n}\n\nexport function DefaultAd({\n data,\n style,\n mode = \"published\",\n variant = \"classic\",\n rootRef,\n interaction,\n formatters,\n showEmptyNamePlaceholder = mode === \"builder\",\n emptyNamePlaceholder = \"Fornavn Efternavn\",\n className = \"\",\n rootStyle,\n ...htmlProps\n}: DefaultAdProps) {\n const typography = mergeDefined(\n classicDefaultAdStyle.typography as Required<DefaultAdTypography>,\n style?.typography,\n );\n const spacing = mergeDefined(\n classicDefaultAdStyle.spacing as Required<DefaultAdSpacing>,\n style?.spacing,\n );\n const layout = mergeDefined(classicDefaultAdStyle, style);\n const fmt = { ...defaultFormatters, ...formatters };\n const { contact, text, icon, type } = data;\n const hasName = Boolean(contact.firstName || contact.lastName);\n const first = type === \"thanks\" ? text.thanksIntro : text.intro;\n const second = type === \"thanks\" ? text.briefIntroduction : text.title;\n const firstField = type === \"thanks\" ? \"thanksIntro\" : \"intro\";\n const secondField = type === \"thanks\" ? \"briefIntroduction\" : \"title\";\n const hasVisualFirst = Boolean(first || interaction?.fields?.[firstField]?.active);\n const hasVisualSecond = Boolean(second || interaction?.fields?.[secondField]?.active);\n const hasVisualName = hasName || Boolean(interaction?.fields?.firstName?.active || interaction?.fields?.lastName?.active);\n const headerMargins = calculateHeaderMargins({\n first: hasVisualFirst, second: hasVisualSecond, hasName: hasVisualName, hasIcon: Boolean(icon), spacing,\n });\n const { firstMargin, secondMargin, nameMargin } = headerMargins;\n const isSingleColumn = Number(layout.columnsMm) === 41;\n const ceremonyCode = contact.ceremony?.code;\n const ceremonyLabel = contact.ceremony?.label ?? ceremonyCode;\n const secondaryFontStyle: CSSProperties = typography.secondaryFontFamily != null\n ? { fontFamily: typography.secondaryFontFamily }\n : {};\n const hasActiveNamePart = Boolean(\n interaction?.fields?.firstName?.active || interaction?.fields?.lastName?.active,\n );\n\n return (\n <div\n {...htmlProps}\n ref={rootRef}\n data-default-ad=\"\"\n data-ad-content=\"\"\n data-ad-ready=\"true\"\n data-mode={mode}\n data-variant={variant}\n className={`gda-root ${className}`.trim()}\n style={{\n width: `${layout.columnsMm}mm`,\n minWidth: `${layout.columnsMm}mm`,\n ...(layout.heightMm != null ? { height: `${layout.heightMm}mm` } : {}),\n padding: `${layout.paddingMm}mm ${layout.horizontalPaddingMm}mm`,\n border: layout.border ? `${layout.borderWidthPt}pt solid black` : 0,\n gap: `${spacing.sectionGapMm}mm`,\n ...(typography.fontFamily != null ? { fontFamily: typography.fontFamily } : {}),\n ...rootStyle,\n }}\n >\n {icon ? (\n <div className=\"gda-icon\">\n <svg className={icon.className} xmlns=\"http://www.w3.org/2000/svg\"\n width={Number(icon.width) + 16} height={Number(icon.height) + 16}\n viewBox={icon.viewBox} role={icon.title ? \"img\" : undefined} aria-label={icon.title} aria-hidden={icon.title ? undefined : true}\n dangerouslySetInnerHTML={{ __html: decodeSvgMarkup(icon.svg) }} />\n </div>\n ) : null}\n\n <Text field={type === \"thanks\" ? \"thanksIntro\" : \"intro\"} interaction={interaction} className={`${type === \"thanks\" ? \"gda-bold\" : \"\"} gda-break`}\n style={textStyle(type === \"thanks\" ? 14 : typography.introSize, typography.introLeading, firstMargin)}>\n {type === \"thanks\" && first ? first : type === \"obituaries\" ? first : null}\n </Text>\n <Text field={type === \"thanks\" ? \"briefIntroduction\" : \"title\"} interaction={interaction} className=\"gda-break\" style={textStyle(typography.titleSize, typography.titleLeading, secondMargin)}>\n {type === \"thanks\" && second ? fmt.lowercaseFirst(second) : type === \"obituaries\" ? second : null}\n </Text>\n\n {hasName && !interaction?.fields?.firstName?.active && !interaction?.fields?.lastName?.active ? (\n <Text className=\"gda-name gda-bold gda-secondary-font\" style={{ ...textStyle(typography.nameSize, typography.nameLeading, nameMargin), ...secondaryFontStyle }}>\n {[contact.firstName, contact.lastName].filter(Boolean).join(\" \")}\n </Text>\n ) : hasName || hasActiveNamePart ? (\n <div className=\"gda-name gda-bold gda-secondary-font\" style={{ ...textStyle(typography.nameSize, typography.nameLeading, nameMargin), ...secondaryFontStyle }}>\n <NamePart field=\"firstName\" value={contact.firstName} interaction={interaction} showPlaceholder={hasActiveNamePart} />{\" \"}\n <NamePart field=\"lastName\" value={contact.lastName} interaction={interaction} showPlaceholder={hasActiveNamePart} />\n </div>\n ) : showEmptyNamePlaceholder ? <div className=\"gda-placeholder gda-name gda-bold gda-secondary-font\" style={{ ...textStyle(typography.nameSize, typography.nameLeading, nameMargin), ...secondaryFontStyle }}>{emptyNamePlaceholder}</div> : null}\n\n {(contact.showBirthDate && (contact.birthDate || interaction?.fields?.birthDate?.active)) || (contact.showDeathDate && (contact.deathDate || interaction?.fields?.deathDate?.active)) ? (\n <div className={`gda-dates ${isSingleColumn ? \"gda-dates-single\" : \"\"}`}\n style={{ marginTop: `${spacing.dateTop}pt`, lineHeight: `${typography.dateLeading}pt`, ...(isSingleColumn ? { gap: `${spacing.dateTop}pt` } : {}) }}>\n {contact.showBirthDate && (contact.birthDate || interaction?.fields?.birthDate?.active) ? (\n <span data-default-ad-field=\"birthDate\" {...fieldEvents(\"birthDate\", interaction)} className={interaction?.fields?.birthDate?.active ? interaction.fields.birthDate.className : undefined} style={{ fontSize: `${contact.birthDate && fmt.date(contact.birthDate).length > 10 ? typography.longDateSize : typography.dateSize}pt`, ...(contact.birthDate && fmt.date(contact.birthDate).length > 10 ? { letterSpacing: typography.longDateLetterSpacing } : {}), ...(interaction?.fields?.birthDate?.active ? interaction.fields.birthDate.style : {}) }}>\n &#10043; {contact.birthDate ? fmt.date(contact.birthDate) : interaction?.fields?.birthDate?.placeholder}\n </span>\n ) : null}\n {contact.showDeathDate && (contact.deathDate || interaction?.fields?.deathDate?.active) ? (\n <span data-default-ad-field=\"deathDate\" {...fieldEvents(\"deathDate\", interaction)} className={interaction?.fields?.deathDate?.active ? interaction.fields.deathDate.className : undefined} style={{ fontSize: `${contact.deathDate && fmt.date(contact.deathDate).length > 10 ? typography.longDateSize : typography.dateSize}pt`, ...(contact.deathDate && fmt.date(contact.deathDate).length > 10 ? { letterSpacing: typography.longDateLetterSpacing } : {}), ...(interaction?.fields?.deathDate?.active ? interaction.fields.deathDate.style : {}) }}>\n <span className=\"gda-death-cross\" aria-hidden=\"true\">✝︎</span> {contact.deathDate ? fmt.date(contact.deathDate) : interaction?.fields?.deathDate?.placeholder}\n </span>\n ) : null}\n </div>\n ) : null}\n\n {type === \"obituaries\" ? <Text field=\"deceased\" interaction={interaction} className=\"gda-balance\" style={textStyle(typography.bodySize, typography.bodyLeading, spacing.deceasedTop)}>{text.deceased}</Text> : null}\n {type === \"obituaries\" ? <Text field=\"memorial\" interaction={interaction} className=\"gda-italic gda-break\" style={textStyle(typography.memorialSize, typography.memorialLeading, spacing.memorialTop)}>{text.memorial}</Text> : null}\n {type === \"obituaries\" && (text.sender || interaction?.fields?.sender?.active) ? <Text field=\"sender\" interaction={interaction} className=\"gda-bold gda-secondary-font\" style={{ ...textStyle(typography.senderSize, typography.senderLeading, spacing.senderTop), ...secondaryFontStyle }}>{text.sender}</Text> : null}\n\n {type === \"obituaries\" && ceremonyCode !== \"NoCeremony\" && (contact.showChurch || contact.showFuneralDate) && (contact.church || contact.funeralDate || interaction?.fields?.church?.active || interaction?.fields?.funeralDate?.active) ? (\n <div className=\"gda-text\" style={textStyle(typography.ceremonySize, typography.ceremonyLeading, spacing.ceremonyTop)}>\n {contact.showChurch && (contact.church || interaction?.fields?.church?.active) ? <div data-default-ad-field=\"church\" {...fieldEvents(\"church\", interaction)} className={`gda-whitespace-pre-line ${interaction?.fields?.church?.active ? interaction.fields.church.className ?? \"\" : \"\"}`.trim()} style={interaction?.fields?.church?.active ? interaction.fields.church.style : undefined}>{contact.church ? (contact.church.length > 15 ? `${ceremonyLabel ?? \"\"} \\n ${contact.church}` : `${ceremonyLabel ?? \"\"} ${contact.church}`.trim()) : interaction?.fields?.church?.placeholder}</div> : null}\n {contact.showFuneralDate && (contact.funeralDate || interaction?.fields?.funeralDate?.active) ? <div data-default-ad-field=\"funeralDate\" {...fieldEvents(\"funeralDate\", interaction)} className={interaction?.fields?.funeralDate?.active ? interaction.fields.funeralDate.className : undefined} style={interaction?.fields?.funeralDate?.active ? interaction.fields.funeralDate.style : undefined}>{contact.funeralDate ? fmt.funeralDate(contact.funeralDate, Boolean(contact.hideFuneralYear)) : interaction?.fields?.funeralDate?.placeholder}</div> : null}\n </div>\n ) : null}\n\n {type === \"thanks\" ? <ThankYouFields text={text} fmt={fmt} typography={typography} spacing={spacing} interaction={interaction} /> : null}\n <Text field=\"thanks\" interaction={interaction} className=\"gda-break\" style={textStyle(typography.thanksSize, typography.thanksLeading, spacing.thanksTop)}>{text.thanks}</Text>\n {type === \"thanks\" ? <Text field=\"sender\" interaction={interaction} className=\"gda-secondary-font\" style={{ ...textStyle(typography.senderSize, typography.senderLeading, spacing.thanksTop), ...secondaryFontStyle }}>{text.sender}</Text> : null}\n {text.donation ? <div className=\"gda-divider\" style={{ marginTop: `${spacing.donationTop}pt` }} /> : null}\n {text.donation || interaction?.fields?.donation?.active ? <Text field=\"donation\" interaction={interaction} className=\"gda-donation gda-break\" style={textStyle(typography.donationSize, typography.donationLeading, spacing.donationTop)}>{text.donation}</Text> : null}\n </div>\n );\n}\n\nfunction calculateHeaderMargins({ first, second, hasName, hasIcon, spacing }: any) {\n return {\n firstMargin: first && hasIcon ? spacing.iconToText : 0,\n secondMargin: second ? (first ? spacing.introToTitle : hasIcon ? spacing.iconToText : 0) : 0,\n nameMargin: hasName ? (first || second ? spacing.textToName : hasIcon ? spacing.iconToName : 0) : 0,\n };\n}\n\nfunction NamePart({ field, value, interaction, showPlaceholder }: { field: \"firstName\" | \"lastName\"; value?: string | null; interaction?: DefaultAdInteraction; showPlaceholder: boolean }) {\n const state = interaction?.fields?.[field];\n if (!value && !showPlaceholder) return null;\n const isPlaceholder = !value;\n return <span\n data-default-ad-field={field}\n {...fieldEvents(field, interaction)}\n className={`${isPlaceholder && !state?.active ? \"gda-placeholder\" : \"\"} ${state?.active ? `gda-name-part-active ${state.className ?? \"\"}` : \"\"}`.trim()}\n style={state?.active ? state.style : undefined}\n >{value || state?.placeholder}</span>;\n}\n\nfunction ThankYouFields({ text, fmt, typography, spacing, interaction }: any) {\n return <>\n <Text field=\"ceremony\" interaction={interaction} className=\"gda-break\" style={textStyle(typography.bodySize, typography.bodyLeading, spacing.thanksTop)}>{text.ceremony ? fmt.lowercaseFirst(text.ceremony) : null}</Text>\n <Text field=\"message\" interaction={interaction} className=\"gda-break\" style={textStyle(typography.bodySize, typography.bodyLeading, spacing.thanksTop)}>{text.message}</Text>\n </>;\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "navne-default-ad",
3
- "version": "1.3.0",
3
+ "version": "1.3.2",
4
4
  "description": "Reusable obituary and thank-you advertisement renderer",
5
5
  "license": "UNLICENSED",
6
6
  "sideEffects": ["**/*.css"],