@wix/web5-core 1.63.30 → 1.63.31

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.
Files changed (23) hide show
  1. package/dist/cjs/component/componentDefinitions/ComparisonSectionDefinition.js +1 -1
  2. package/dist/cjs/component/componentDefinitions/ComparisonSectionDefinition.js.map +1 -1
  3. package/dist/cjs/component/componentDefinitions/HeroEntitySectionDefinition.js +1 -1
  4. package/dist/cjs/component/componentDefinitions/HeroEntitySectionDefinition.js.map +1 -1
  5. package/dist/cjs/component/componentDefinitions/HeroSectionDefinition.js +1 -1
  6. package/dist/cjs/component/componentDefinitions/HeroSectionDefinition.js.map +1 -1
  7. package/dist/cjs/component/componentDefinitions/NextStepsSectionDefinition.js +2 -2
  8. package/dist/cjs/component/componentDefinitions/NextStepsSectionDefinition.js.map +1 -1
  9. package/dist/cjs/component/componentDefinitions/parse-utils.js +87 -30
  10. package/dist/cjs/component/componentDefinitions/parse-utils.js.map +1 -1
  11. package/dist/esm/component/componentDefinitions/ComparisonSectionDefinition.js +2 -2
  12. package/dist/esm/component/componentDefinitions/ComparisonSectionDefinition.js.map +1 -1
  13. package/dist/esm/component/componentDefinitions/HeroEntitySectionDefinition.js +2 -2
  14. package/dist/esm/component/componentDefinitions/HeroEntitySectionDefinition.js.map +1 -1
  15. package/dist/esm/component/componentDefinitions/HeroSectionDefinition.js +2 -2
  16. package/dist/esm/component/componentDefinitions/HeroSectionDefinition.js.map +1 -1
  17. package/dist/esm/component/componentDefinitions/NextStepsSectionDefinition.js +3 -3
  18. package/dist/esm/component/componentDefinitions/NextStepsSectionDefinition.js.map +1 -1
  19. package/dist/esm/component/componentDefinitions/parse-utils.js +86 -30
  20. package/dist/esm/component/componentDefinitions/parse-utils.js.map +1 -1
  21. package/dist/types/component/componentDefinitions/parse-utils.d.ts +41 -7
  22. package/dist/types/component/componentDefinitions/parse-utils.d.ts.map +1 -1
  23. package/package.json +2 -2
@@ -39,26 +39,13 @@ export function bodyText(parts) {
39
39
  }
40
40
 
41
41
  /**
42
- * Body copy as markdown, with inline links intact and paragraph breaks kept.
42
+ * Group a run of inline parts back into paragraphs.
43
43
  *
44
- * `bodyText` reads text parts only, so a paragraph carrying an inline link
45
- * `Try narrowing to [men](web5://ask/…) instead` arrives as `t + link + t`
46
- * and comes back as `"Try narrowing to\n\ninstead"`: label and url both
47
- * deleted, and the sentence broken in two at the gap. That is DL #134's list
48
- * bug in a different helper, and it is why an ask link in prose never reached
49
- * the page.
50
- *
51
- * `inlinePartsToMarkdown` already rebuilds a run of inline parts with links
52
- * intact, but it flattens to one line, which is wrong for multi-paragraph
53
- * copy. So group first: `astToParts` marks every part after the first of a
54
- * given AST node with `meta.continuesNode`, which is exactly "same paragraph,
55
- * keep going". Parts without it open a new paragraph.
56
- *
57
- * Kept separate from `bodyText` deliberately — the other seven callers hand
58
- * their result to consumers that do not render markdown, and would show a
59
- * visitor a raw `[label](url)`.
44
+ * `astToParts` marks every part after the first of a given AST node with
45
+ * `meta.continuesNode`, which is exactly "same paragraph, keep going". Parts
46
+ * without it open a new paragraph.
60
47
  */
61
- export function bodyMarkdown(parts) {
48
+ function inlineParagraphs(parts) {
62
49
  const paragraphs = [];
63
50
  for (const part of parts) {
64
51
  var _part$meta;
@@ -71,9 +58,78 @@ export function bodyMarkdown(parts) {
71
58
  paragraphs.push([part]);
72
59
  }
73
60
  }
61
+ return paragraphs;
62
+ }
63
+ function paragraphsToMarkdown(paragraphs) {
74
64
  return paragraphs.map(inlinePartsToMarkdown).map(paragraph => paragraph.trim()).filter(Boolean).join('\n\n');
75
65
  }
76
66
 
67
+ /**
68
+ * Body copy as markdown, with inline links intact and paragraph breaks kept.
69
+ *
70
+ * `bodyText` reads text parts only, so a paragraph carrying an inline link —
71
+ * `Try narrowing to [men](web5://ask/…) instead` — arrives as `t + link + t`
72
+ * and comes back as `"Try narrowing to\n\ninstead"`: label and url both
73
+ * deleted, and the sentence broken in two at the gap. That is DL #134's list
74
+ * bug in a different helper, and it is why an ask link in prose never reached
75
+ * the page. A bare `support@shop.example` is the same bug with no author in
76
+ * sight: GFM autolinks an email into a `link` node, so plain prose loses the
77
+ * address.
78
+ *
79
+ * `inlinePartsToMarkdown` already rebuilds a run of inline parts with links
80
+ * intact, but it flattens to one line, which is wrong for multi-paragraph
81
+ * copy — hence `inlineParagraphs` first.
82
+ *
83
+ * This keeps EVERY link, including one standing alone as its own block. That
84
+ * is right for `textBlock`, whose section consumes nothing but the copy. It is
85
+ * wrong for a section that already spends its links elsewhere — see
86
+ * {@link proseBodyMarkdown}.
87
+ *
88
+ * Kept separate from `bodyText` deliberately, but not for the reason this
89
+ * comment used to give. Of the four callers still on `bodyText`:
90
+ * `ErrorSectionDefinition` and `CtaBannerSectionDefinition` do hand their
91
+ * result to a consumer that renders it raw (`ErrorSection` prints the copy in
92
+ * a `<p>`, `CtaBannerSection` the same), so markdown there would show a
93
+ * visitor a literal `[label](url)`. `FeatureCardsSectionDefinition` does NOT —
94
+ * both `FeatureCardsSection` renderers in this repo put `card.description`
95
+ * through `MarkdownText`, so it loses inline links exactly like the sections
96
+ * fixed here; it is left alone only because its callers were not verified end
97
+ * to end. `FeatureSection9PlusDefinition` has no registered renderer at all.
98
+ */
99
+ export function bodyMarkdown(parts) {
100
+ return paragraphsToMarkdown(inlineParagraphs(parts));
101
+ }
102
+
103
+ /**
104
+ * Body copy as markdown for a section that spends some of its links on another
105
+ * slot — hero buttons, a comparison CTA, entity items.
106
+ *
107
+ * Same fix as {@link bodyMarkdown} for the case that matters — a link INSIDE a
108
+ * sentence survives instead of being deleted with its label — but it drops the
109
+ * two shapes those sections have already claimed, so nothing renders twice:
110
+ *
111
+ * - A paragraph that is nothing but links. `[Get started](/) [Learn more](/x)`
112
+ * under a hero h1 is the button row `HeroSectionDefinition` turns into
113
+ * `buttons`; the trailing link after a comparison table is its `ctaText` /
114
+ * `ctaHref`. Whole-paragraph is the right test because a link that is part
115
+ * of a sentence always shares its paragraph with the text around it.
116
+ * - Everything from the first `web5://entity/…` link onward, which is item
117
+ * copy rather than section copy — `HeroEntitySectionDefinition` reads those
118
+ * links (and the text after each) into `items`. Same cut
119
+ * {@link entitySectionBodyText} makes, for the same reason.
120
+ *
121
+ * Nothing is lost by either rule: the dropped links are exactly the ones the
122
+ * section renders through some other prop.
123
+ */
124
+ export function proseBodyMarkdown(parts) {
125
+ const firstEntityLinkIndex = parts.findIndex(p => {
126
+ var _meta;
127
+ return p.type === 'link' && isEntityHref((_meta = p.meta) == null ? void 0 : _meta.href);
128
+ });
129
+ const sectionParts = firstEntityLinkIndex >= 0 ? parts.slice(0, firstEntityLinkIndex) : parts;
130
+ return paragraphsToMarkdown(inlineParagraphs(sectionParts).filter(paragraph => !paragraph.every(part => part.type === 'link')));
131
+ }
132
+
77
133
  /**
78
134
  * Entity sections may be authored as one paragraph per entity:
79
135
  * `[Product](web5://entity/...) - why it matches`.
@@ -82,8 +138,8 @@ export function bodyMarkdown(parts) {
82
138
  */
83
139
  export function entitySectionBodyText(parts) {
84
140
  const firstEntityLinkIndex = parts.findIndex(p => {
85
- var _meta;
86
- return p.type === 'link' && isEntityHref((_meta = p.meta) == null ? void 0 : _meta.href);
141
+ var _meta2;
142
+ return p.type === 'link' && isEntityHref((_meta2 = p.meta) == null ? void 0 : _meta2.href);
87
143
  });
88
144
  const sectionParts = firstEntityLinkIndex >= 0 ? parts.slice(0, firstEntityLinkIndex) : parts;
89
145
  return sectionParts.filter(p => p.type === 'text' || p.type === 'richText').map(markdownOrText).filter(Boolean).join('\n\n');
@@ -275,8 +331,8 @@ export function inlinePartsToMarkdown(parts) {
275
331
  return parts.reduce((text, part) => {
276
332
  var _part$meta2;
277
333
  if (part.type === 'link') {
278
- var _meta2, _part$content;
279
- const href = ((_meta2 = part.meta) == null ? void 0 : _meta2.href) ?? '';
334
+ var _meta3, _part$content;
335
+ const href = ((_meta3 = part.meta) == null ? void 0 : _meta3.href) ?? '';
280
336
  const label = ((_part$content = part.content) == null ? void 0 : _part$content.trim()) ?? '';
281
337
  return appendInlineToken(text, href ? `[${label}](${href})` : label);
282
338
  }
@@ -382,8 +438,8 @@ export function extractEntityRefs(parts) {
382
438
  var _list$meta4, _item$meta4;
383
439
  const itemParts = ((_item$meta4 = item.meta) == null ? void 0 : _item$meta4.parts) ?? [];
384
440
  const entityLinks = itemParts.filter(p => {
385
- var _meta3;
386
- return p.type === 'link' && isEntityHref((_meta3 = p.meta) == null ? void 0 : _meta3.href);
441
+ var _meta4;
442
+ return p.type === 'link' && isEntityHref((_meta4 = p.meta) == null ? void 0 : _meta4.href);
387
443
  });
388
444
  for (const link of entityLinks) {
389
445
  const parsed = parseEntityUrl(link.meta.href);
@@ -442,18 +498,18 @@ export function extractEntityRefs(parts) {
442
498
  if (linkIndex >= 0) {
443
499
  // Scan following parts for description, image, callout, and list items
444
500
  for (let j = linkIndex + 1; j < parts.length; j++) {
445
- var _meta4, _p$content3;
501
+ var _meta5, _p$content3;
446
502
  const p = parts[j];
447
503
  // Stop at next entity link
448
- if (p.type === 'link' && isEntityHref((_meta4 = p.meta) == null ? void 0 : _meta4.href)) {
504
+ if (p.type === 'link' && isEntityHref((_meta5 = p.meta) == null ? void 0 : _meta5.href)) {
449
505
  break;
450
506
  }
451
507
  if (p.type === 'text' && (_p$content3 = p.content) != null && _p$content3.trim()) {
452
508
  const text = markdownOrText(p);
453
509
  description = description ? `${description} ${text}` : text;
454
510
  } else if (p.type === 'image' && !markdownImageUrl) {
455
- var _meta5;
456
- markdownImageUrl = (_meta5 = p.meta) == null ? void 0 : _meta5.src;
511
+ var _meta6;
512
+ markdownImageUrl = (_meta6 = p.meta) == null ? void 0 : _meta6.src;
457
513
  } else if ((p.type === 'callout' || p.type === 'blockquote') && !callout) {
458
514
  var _p$meta4;
459
515
  const raw = ((_p$meta4 = p.meta) == null || (_p$meta4 = _p$meta4.markdown) == null ? void 0 : _p$meta4.trim()) || str(p);
@@ -465,8 +521,8 @@ export function extractEntityRefs(parts) {
465
521
  };
466
522
  }
467
523
  } else if (p.type === 'list') {
468
- for (const item of ((_meta6 = p.meta) == null ? void 0 : _meta6.items) ?? []) {
469
- var _meta6;
524
+ for (const item of ((_meta7 = p.meta) == null ? void 0 : _meta7.items) ?? []) {
525
+ var _meta7;
470
526
  const text = extractListItemText(item);
471
527
  if (text) {
472
528
  features.push(text);
@@ -1 +1 @@
1
- {"version":3,"names":["getPartsByType","getHeading","getImages","getLinks","parseWeb5Url","Web5UrlType","isWeb5EntityUrl","str","p","_p$content","content","trim","markdownOrText","_p$meta","meta","markdown","normalizeEntityDescription","description","replace","stripMarkdown","md","headingText","parts","level","heading","headingMarkdown","_meta$markdown","bodyText","textParts","richTextParts","map","filter","Boolean","join","bodyMarkdown","paragraphs","part","_part$meta","type","continuesNode","length","push","inlinePartsToMarkdown","paragraph","entitySectionBodyText","firstEntityLinkIndex","findIndex","_meta","isEntityHref","href","sectionParts","slice","linksToHeroButtons","links","lists","flatMap","l","_l$meta","items","item","_item$meta","i","_l$content","id","text","variant","onClick","firstImageSrc","_img$meta","images","img","src","undefined","firstLink","_link$content","link","blockquoteText","bqs","_p$meta2","calloutFromParts","_p$meta3","calloutParts","raw","parsed","parseCalloutTag","kind","listToMarkdown","lines","list","_list$meta","extractListItemText","parseEntityUrl","url","trimmedUrl","ENTITY","entityType","entityId","parseTableValue","value","normalized","toLowerCase","parseKpiItem","trimmed","boldMatch","match","title","afterBold","indexOf","appendInlineToken","current","token","test","reduce","_part$meta2","_meta2","_part$content","label","_item$meta2","partsToMarkdown","inline","_part$meta3","_part$meta4","repeat","_list$meta2","_item$meta3","toUpperCase","generatePartId","Math","random","toString","extractNestedListItems","itemParts","nestedLists","features","nested","_list$meta3","extractEntityRefs","entities","_list$meta4","_item$meta4","entityLinks","_meta3","_link$content2","_images$","_p$content2","callout","_calloutParts$0$meta","parsed2","linkText","entityUrl","markdownImageUrl","markdownFeatures","topLinks","_l$meta2","some","e","_link$content3","linkIndex","j","_meta4","_p$content3","_meta5","_p$meta4","parsedCallout","_meta6"],"sources":["../../../../src/component/componentDefinitions/parse-utils.ts"],"sourcesContent":["import type {\n Part,\n ListPart,\n LinkPart,\n ListItemPart,\n ImagePart,\n} from '../../parts/parts';\nimport {\n getPartsByType,\n getHeading,\n getImages,\n getLinks,\n} from '../../parts/parts';\nimport { parseWeb5Url } from '../../utils/entityLinkParser';\nimport { Web5UrlType, isWeb5EntityUrl } from '../../types/link-types';\nimport type { Callout } from '../../types/callout';\nimport type { HeroButton } from '../types';\n\nfunction str(p: Part | undefined): string {\n return p?.content?.trim() ?? '';\n}\n\nfunction markdownOrText(p: Part): string {\n return ((p.meta?.markdown as string)?.trim() || str(p)).trim();\n}\n\nfunction normalizeEntityDescription(description: string): string {\n return description\n .replace(/^[\\s\\u2013\\u2014-]+/, '')\n .replace(/^[:\\s]+/, '')\n .trim();\n}\n\n/** Strip basic markdown formatting to get plain text */\nexport function stripMarkdown(md: string): string {\n return md\n .replace(/\\*\\*(.+?)\\*\\*/g, '$1')\n .replace(/__(.+?)__/g, '$1')\n .replace(/\\*(.+?)\\*/g, '$1')\n .replace(/_(.+?)_/g, '$1')\n .replace(/~~(.+?)~~/g, '$1')\n .replace(/`(.+?)`/g, '$1')\n .replace(/\\[([^\\]]+)\\]\\([^)]+\\)/g, '$1')\n .trim();\n}\n\nexport function headingText(parts: Part[], level?: number): string {\n const heading = getHeading(parts, level);\n return str(heading);\n}\n\n/** Like headingText but preserves inline markdown formatting (bold, italic, etc.) */\nexport function headingMarkdown(parts: Part[], level?: number): string {\n const heading = getHeading(parts, level);\n if (!heading) {\n return '';\n }\n const meta = heading.meta as Record<string, unknown>;\n return (meta?.markdown as string)?.trim() || str(heading);\n}\n\nexport function bodyText(parts: Part[]): string {\n const textParts = getPartsByType<Part>(parts, 'text');\n const richTextParts = getPartsByType<Part>(parts, 'richText');\n return [...textParts, ...richTextParts]\n .map(markdownOrText)\n .filter(Boolean)\n .join('\\n\\n');\n}\n\n/**\n * Body copy as markdown, with inline links intact and paragraph breaks kept.\n *\n * `bodyText` reads text parts only, so a paragraph carrying an inline link —\n * `Try narrowing to [men](web5://ask/…) instead` — arrives as `t + link + t`\n * and comes back as `\"Try narrowing to\\n\\ninstead\"`: label and url both\n * deleted, and the sentence broken in two at the gap. That is DL #134's list\n * bug in a different helper, and it is why an ask link in prose never reached\n * the page.\n *\n * `inlinePartsToMarkdown` already rebuilds a run of inline parts with links\n * intact, but it flattens to one line, which is wrong for multi-paragraph\n * copy. So group first: `astToParts` marks every part after the first of a\n * given AST node with `meta.continuesNode`, which is exactly \"same paragraph,\n * keep going\". Parts without it open a new paragraph.\n *\n * Kept separate from `bodyText` deliberately — the other seven callers hand\n * their result to consumers that do not render markdown, and would show a\n * visitor a raw `[label](url)`.\n */\nexport function bodyMarkdown(parts: Part[]): string {\n const paragraphs: Part[][] = [];\n\n for (const part of parts) {\n if (\n part.type !== 'text' &&\n part.type !== 'richText' &&\n part.type !== 'link'\n ) {\n continue;\n }\n if (part.meta?.continuesNode && paragraphs.length > 0) {\n paragraphs[paragraphs.length - 1].push(part);\n } else {\n paragraphs.push([part]);\n }\n }\n\n return paragraphs\n .map(inlinePartsToMarkdown)\n .map((paragraph) => paragraph.trim())\n .filter(Boolean)\n .join('\\n\\n');\n}\n\n/**\n * Entity sections may be authored as one paragraph per entity:\n * `[Product](web5://entity/...) - why it matches`.\n * In that shape, text after the first entity link is item copy rather than\n * section copy, so only keep prose that appears before the first entity link.\n */\nexport function entitySectionBodyText(parts: Part[]): string {\n const firstEntityLinkIndex = parts.findIndex(\n (p) => p.type === 'link' && isEntityHref((p as LinkPart).meta?.href),\n );\n const sectionParts =\n firstEntityLinkIndex >= 0 ? parts.slice(0, firstEntityLinkIndex) : parts;\n\n return sectionParts\n .filter((p) => p.type === 'text' || p.type === 'richText')\n .map(markdownOrText)\n .filter(Boolean)\n .join('\\n\\n');\n}\n\n/** Build HeroButton[] from link parts — aligned to HeroSection1Button shape */\nexport function linksToHeroButtons(parts: Part[]): HeroButton[] {\n let links = getLinks(parts);\n if (!links.length) {\n const lists = getPartsByType<ListPart>(parts, 'list');\n links = lists.flatMap((l) =>\n (l.meta?.items ?? []).flatMap((item) =>\n ((item.meta?.parts ?? []) as Part[]).filter(\n (p): p is LinkPart => p.type === 'link',\n ),\n ),\n );\n }\n return links.map(\n (l, i): HeroButton => ({\n id: `btn-${i}`,\n text: l.content?.trim() || 'Learn more',\n variant: i === 0 ? 'primary' : 'secondary',\n onClick: l.meta.href,\n }),\n );\n}\n\n/** Return just the src URL string of the first image part */\nexport function firstImageSrc(parts: Part[]): string | undefined {\n const images = getImages(parts);\n const img = images[0];\n return img?.meta?.src || undefined;\n}\n\n/** Return the first link as { text, href } */\nexport function firstLink(\n parts: Part[],\n): { text: string; href: string } | undefined {\n const links = getLinks(parts);\n const link = links[0];\n if (!link) {\n return undefined;\n }\n return { text: link.content?.trim() || '', href: link.meta.href };\n}\n\n/** Extract text content from blockquote parts, preserving markdown formatting when available */\nexport function blockquoteText(parts: Part[]): string | undefined {\n const bqs = getPartsByType<Part>(parts, 'blockquote');\n if (bqs.length === 0) {\n return undefined;\n }\n const text = bqs\n .map((p) => (p.meta?.markdown as string)?.trim() || str(p))\n .filter(Boolean)\n .join('\\n');\n return text || undefined;\n}\n\n/** Extract first callout from parts as a Callout object */\nexport function calloutFromParts(parts: Part[]): Callout | undefined {\n const calloutParts = getPartsByType<Part>(parts, 'callout');\n if (calloutParts.length === 0) {\n return undefined;\n }\n const p = calloutParts[0];\n const raw = (p.meta?.markdown as string)?.trim() || str(p);\n const parsed = parseCalloutTag(raw);\n return parsed.text ? { text: parsed.text, kind: parsed.kind } : undefined;\n}\n\n/** Convert list parts to a markdown-like string */\nexport function listToMarkdown(parts: Part[]): string | undefined {\n const lists = getPartsByType<ListPart>(parts, 'list');\n if (lists.length === 0) {\n return undefined;\n }\n const lines: string[] = [];\n for (const list of lists) {\n const items = list.meta?.items ?? [];\n for (const item of items) {\n const text = extractListItemText(item);\n if (text) {\n lines.push(`- ${text}`);\n }\n }\n }\n return lines.length > 0 ? lines.join('\\n') : undefined;\n}\n\n/**\n * Parse a web5://entity/ URL into entityType and entityId.\n * Delegates to the central `parseWeb5Url` parser.\n */\nexport function parseEntityUrl(\n url: string,\n): { entityType: string; entityId: string } | null {\n const trimmedUrl = url?.trim();\n if (!trimmedUrl || !isWeb5EntityUrl(trimmedUrl)) {\n return null;\n }\n const parsed = parseWeb5Url(trimmedUrl);\n if (\n parsed?.type !== Web5UrlType.ENTITY ||\n !parsed.entityType ||\n !parsed.entityId\n ) {\n return null;\n }\n return { entityType: parsed.entityType, entityId: parsed.entityId };\n}\n\n/**\n * Parse a table cell value into boolean or string.\n * Ported from web50-server-ui comparisonSectionParser.tsx.\n */\nexport function parseTableValue(value: string): boolean | string {\n const normalized = value.trim().toLowerCase();\n\n if (\n normalized === 'true' ||\n normalized === 'yes' ||\n normalized === '✓' ||\n normalized === 'check' ||\n normalized === 'y'\n ) {\n return true;\n }\n if (\n normalized === 'false' ||\n normalized === 'no' ||\n normalized === '✗' ||\n normalized === 'x' ||\n normalized === 'n' ||\n normalized === ''\n ) {\n return false;\n }\n\n return value.trim();\n}\n\n/**\n * Parse a KPI item from markdown text.\n * The first **bold** segment becomes the title; everything after it (leading \":\" stripped) is the description.\n */\nexport function parseKpiItem(\n markdown: string,\n): { title: string; description: string } | null {\n const trimmed = markdown.trim();\n if (!trimmed) {\n return null;\n }\n const boldMatch = trimmed.match(/\\*\\*(.+?)\\*\\*/);\n if (!boldMatch) {\n return null;\n }\n const title = boldMatch[1].trim();\n const afterBold = trimmed.slice(\n trimmed.indexOf(boldMatch[0]) + boldMatch[0].length,\n );\n const description = afterBold.replace(/^[:\\s]+/, '').trim();\n return { title, description };\n}\n\n/** Join inline tokens the way prose reads: single spaces, none before punctuation. */\nfunction appendInlineToken(current: string, token: string): string {\n const trimmed = token.trim();\n if (!trimmed) {\n return current;\n }\n if (!current) {\n return trimmed;\n }\n if (/^[,.;:!?)]/.test(trimmed)) {\n return `${current}${trimmed}`;\n }\n return `${current} ${trimmed}`;\n}\n\n/**\n * Serialize a run of inline parts back to markdown, preserving links and\n * inline emphasis.\n *\n * Concatenating `part.content` alone silently deletes links: a `link` part\n * keeps its label in `content` and its url in `meta.href`, so a filter that\n * reads only text parts turns `Read the [pricing page](/pricing) first` into\n * `Read the first` — url and label both vanish, with nothing in the output to\n * show anything was lost.\n *\n * `content` is also the *plain* text of a text part — `nodesToParts` strips\n * inline formatting and keeps the original in `meta.markdown` whenever the two\n * differ. Reading `content` therefore drops emphasis the same way it used to\n * drop links: `The **4 oz size** is best` becomes `The 4 oz size is best`.\n * Prefer `meta.markdown`, which is exactly the segment's own markdown.\n */\nexport function inlinePartsToMarkdown(parts: Part[]): string {\n return parts.reduce((text, part) => {\n if (part.type === 'link') {\n const href = (part as LinkPart).meta?.href ?? '';\n const label = part.content?.trim() ?? '';\n return appendInlineToken(text, href ? `[${label}](${href})` : label);\n }\n return appendInlineToken(\n text,\n (part.meta?.markdown as string | undefined) ?? part.content ?? '',\n );\n }, '');\n}\n\nexport function extractListItemText(item: ListItemPart): string {\n if (item.content) {\n return item.content;\n }\n if (item.meta?.parts) {\n return (item.meta.parts as Part[])\n .map((p) => p.content)\n .filter(Boolean)\n .join(' ');\n }\n return '';\n}\n\n/**\n * Reconstruct markdown-like content from parts.\n *\n * `part.content` is the *plain* text — `nodesToParts` strips inline\n * formatting and preserves the original markdown (bold, italic, links) in\n * `part.meta.markdown` when they differ. Prefer it so markdown-rendering\n * consumers (e.g. the fallback section's ReactMarkdown) keep `**bold**`.\n */\nexport function partsToMarkdown(sectionParts: Part[]): string {\n const inline = (part: Part): string =>\n (part.meta?.markdown as string | undefined) ?? part.content;\n const lines: string[] = [];\n for (const part of sectionParts) {\n if (part.type === 'heading') {\n const level = (part.meta as { level: number })?.level ?? 2;\n lines.push(`${'#'.repeat(level)} ${inline(part)}`);\n } else if (part.type === 'text' || part.type === 'richText') {\n lines.push(inline(part));\n } else if (part.type === 'list') {\n const list = part as ListPart;\n for (const item of list.meta?.items ?? []) {\n lines.push(\n `- ${(item.meta?.markdown as string | undefined) ?? extractListItemText(item)}`,\n );\n }\n } else if (part.type === 'blockquote' || part.type === 'callout') {\n lines.push(`> ${inline(part)}`);\n }\n }\n return lines.join('\\n\\n');\n}\n\n/**\n * Extract callout kind tag from blockquote text.\n * Handles [!NOTE], [!TIP], [!IMPORTANT], [!WARNING], [!CAUTION] GFM syntax.\n */\nexport function parseCalloutTag(text: string): { text: string; kind?: string } {\n const match = text.match(/^\\[!(\\w+)\\]\\s*(.*)/s);\n if (match) {\n return { kind: match[1].toUpperCase(), text: match[2].trim() };\n }\n return { text: text.trim() };\n}\n\n/** Generate a simple unique ID */\nexport function generatePartId(): string {\n return Math.random().toString(36).slice(2, 10);\n}\n\nfunction isEntityHref(href: string | undefined): boolean {\n return !!href && isWeb5EntityUrl(href);\n}\n\nexport interface EntityRef {\n entityId: string;\n entityType: string;\n linkText: string;\n entityUrl: string;\n description: string;\n markdownImageUrl?: string;\n markdownFeatures?: string[];\n callout?: Callout;\n}\n\n/**\n * Extract text from nested list items within a list item's parts.\n */\nfunction extractNestedListItems(itemParts: Part[]): string[] {\n const nestedLists = itemParts.filter((p): p is ListPart => p.type === 'list');\n const features: string[] = [];\n for (const list of nestedLists) {\n for (const nested of list.meta?.items ?? []) {\n const text = extractListItemText(nested);\n if (text) {\n features.push(text);\n }\n }\n }\n return features;\n}\n\n/**\n * Extract entity references from list items containing web5://entity/ links.\n * Also extracts markdownFeatures from nested list items within each entity item.\n */\nexport function extractEntityRefs(parts: Part[]): EntityRef[] {\n const entities: EntityRef[] = [];\n const lists = getPartsByType<ListPart>(parts, 'list');\n\n for (const list of lists) {\n for (const item of list.meta?.items ?? []) {\n const itemParts = (item.meta?.parts ?? []) as Part[];\n const entityLinks = itemParts.filter(\n (p): p is LinkPart =>\n p.type === 'link' && isEntityHref((p as LinkPart).meta?.href),\n );\n\n for (const link of entityLinks) {\n const parsed = parseEntityUrl(link.meta.href);\n if (parsed) {\n const images = itemParts.filter(\n (p): p is ImagePart => p.type === 'image',\n );\n const textParts = itemParts.filter(\n (p) => p.type === 'text' && p.content?.trim(),\n );\n const description = normalizeEntityDescription(\n textParts.map(markdownOrText).join(' '),\n );\n const features = extractNestedListItems(itemParts);\n const calloutParts = itemParts.filter(\n (p) => p.type === 'callout' || p.type === 'blockquote',\n );\n let callout: Callout | undefined;\n if (calloutParts.length > 0) {\n const raw =\n (calloutParts[0].meta?.markdown as string)?.trim() ||\n str(calloutParts[0]);\n const parsed2 = parseCalloutTag(raw);\n if (parsed2.text) {\n callout = { text: parsed2.text, kind: parsed2.kind };\n }\n }\n entities.push({\n entityId: parsed.entityId,\n entityType: parsed.entityType,\n linkText: link.content?.trim() || '',\n entityUrl: link.meta.href,\n description,\n markdownImageUrl: images[0]?.meta?.src,\n markdownFeatures: features.length > 0 ? features : undefined,\n callout,\n });\n }\n }\n }\n }\n\n // Also check top-level links (with surrounding context for description/image/list)\n const topLinks = getLinks(parts).filter((l) => isEntityHref(l.meta?.href));\n for (const link of topLinks) {\n const parsed = parseEntityUrl(link.meta.href);\n if (parsed && !entities.some((e) => e.entityId === parsed.entityId)) {\n // Look for description text and image after this link in the parts array\n const linkIndex = parts.indexOf(link);\n let description = '';\n let markdownImageUrl: string | undefined;\n let callout: Callout | undefined;\n const features: string[] = [];\n\n if (linkIndex >= 0) {\n // Scan following parts for description, image, callout, and list items\n for (let j = linkIndex + 1; j < parts.length; j++) {\n const p = parts[j];\n // Stop at next entity link\n if (p.type === 'link' && isEntityHref((p as LinkPart).meta?.href)) {\n break;\n }\n if (p.type === 'text' && p.content?.trim()) {\n const text = markdownOrText(p);\n description = description\n ? `${description} ${text}`\n : text;\n } else if (p.type === 'image' && !markdownImageUrl) {\n markdownImageUrl = (p as ImagePart).meta?.src;\n } else if (\n (p.type === 'callout' || p.type === 'blockquote') &&\n !callout\n ) {\n const raw = (p.meta?.markdown as string)?.trim() || str(p);\n const parsedCallout = parseCalloutTag(raw);\n if (parsedCallout.text) {\n callout = { text: parsedCallout.text, kind: parsedCallout.kind };\n }\n } else if (p.type === 'list') {\n for (const item of (p as ListPart).meta?.items ?? []) {\n const text = extractListItemText(item);\n if (text) {\n features.push(text);\n }\n }\n }\n }\n }\n\n entities.push({\n entityId: parsed.entityId,\n entityType: parsed.entityType,\n linkText: link.content?.trim() || '',\n entityUrl: link.meta.href,\n description: normalizeEntityDescription(description),\n markdownImageUrl,\n markdownFeatures: features.length > 0 ? features : undefined,\n callout,\n });\n }\n }\n\n return entities;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["getPartsByType","getHeading","getImages","getLinks","parseWeb5Url","Web5UrlType","isWeb5EntityUrl","str","p","_p$content","content","trim","markdownOrText","_p$meta","meta","markdown","normalizeEntityDescription","description","replace","stripMarkdown","md","headingText","parts","level","heading","headingMarkdown","_meta$markdown","bodyText","textParts","richTextParts","map","filter","Boolean","join","inlineParagraphs","paragraphs","part","_part$meta","type","continuesNode","length","push","paragraphsToMarkdown","inlinePartsToMarkdown","paragraph","bodyMarkdown","proseBodyMarkdown","firstEntityLinkIndex","findIndex","_meta","isEntityHref","href","sectionParts","slice","every","entitySectionBodyText","_meta2","linksToHeroButtons","links","lists","flatMap","l","_l$meta","items","item","_item$meta","i","_l$content","id","text","variant","onClick","firstImageSrc","_img$meta","images","img","src","undefined","firstLink","_link$content","link","blockquoteText","bqs","_p$meta2","calloutFromParts","_p$meta3","calloutParts","raw","parsed","parseCalloutTag","kind","listToMarkdown","lines","list","_list$meta","extractListItemText","parseEntityUrl","url","trimmedUrl","ENTITY","entityType","entityId","parseTableValue","value","normalized","toLowerCase","parseKpiItem","trimmed","boldMatch","match","title","afterBold","indexOf","appendInlineToken","current","token","test","reduce","_part$meta2","_meta3","_part$content","label","_item$meta2","partsToMarkdown","inline","_part$meta3","_part$meta4","repeat","_list$meta2","_item$meta3","toUpperCase","generatePartId","Math","random","toString","extractNestedListItems","itemParts","nestedLists","features","nested","_list$meta3","extractEntityRefs","entities","_list$meta4","_item$meta4","entityLinks","_meta4","_link$content2","_images$","_p$content2","callout","_calloutParts$0$meta","parsed2","linkText","entityUrl","markdownImageUrl","markdownFeatures","topLinks","_l$meta2","some","e","_link$content3","linkIndex","j","_meta5","_p$content3","_meta6","_p$meta4","parsedCallout","_meta7"],"sources":["../../../../src/component/componentDefinitions/parse-utils.ts"],"sourcesContent":["import type {\n Part,\n ListPart,\n LinkPart,\n ListItemPart,\n ImagePart,\n} from '../../parts/parts';\nimport {\n getPartsByType,\n getHeading,\n getImages,\n getLinks,\n} from '../../parts/parts';\nimport { parseWeb5Url } from '../../utils/entityLinkParser';\nimport { Web5UrlType, isWeb5EntityUrl } from '../../types/link-types';\nimport type { Callout } from '../../types/callout';\nimport type { HeroButton } from '../types';\n\nfunction str(p: Part | undefined): string {\n return p?.content?.trim() ?? '';\n}\n\nfunction markdownOrText(p: Part): string {\n return ((p.meta?.markdown as string)?.trim() || str(p)).trim();\n}\n\nfunction normalizeEntityDescription(description: string): string {\n return description\n .replace(/^[\\s\\u2013\\u2014-]+/, '')\n .replace(/^[:\\s]+/, '')\n .trim();\n}\n\n/** Strip basic markdown formatting to get plain text */\nexport function stripMarkdown(md: string): string {\n return md\n .replace(/\\*\\*(.+?)\\*\\*/g, '$1')\n .replace(/__(.+?)__/g, '$1')\n .replace(/\\*(.+?)\\*/g, '$1')\n .replace(/_(.+?)_/g, '$1')\n .replace(/~~(.+?)~~/g, '$1')\n .replace(/`(.+?)`/g, '$1')\n .replace(/\\[([^\\]]+)\\]\\([^)]+\\)/g, '$1')\n .trim();\n}\n\nexport function headingText(parts: Part[], level?: number): string {\n const heading = getHeading(parts, level);\n return str(heading);\n}\n\n/** Like headingText but preserves inline markdown formatting (bold, italic, etc.) */\nexport function headingMarkdown(parts: Part[], level?: number): string {\n const heading = getHeading(parts, level);\n if (!heading) {\n return '';\n }\n const meta = heading.meta as Record<string, unknown>;\n return (meta?.markdown as string)?.trim() || str(heading);\n}\n\nexport function bodyText(parts: Part[]): string {\n const textParts = getPartsByType<Part>(parts, 'text');\n const richTextParts = getPartsByType<Part>(parts, 'richText');\n return [...textParts, ...richTextParts]\n .map(markdownOrText)\n .filter(Boolean)\n .join('\\n\\n');\n}\n\n/**\n * Group a run of inline parts back into paragraphs.\n *\n * `astToParts` marks every part after the first of a given AST node with\n * `meta.continuesNode`, which is exactly \"same paragraph, keep going\". Parts\n * without it open a new paragraph.\n */\nfunction inlineParagraphs(parts: Part[]): Part[][] {\n const paragraphs: Part[][] = [];\n\n for (const part of parts) {\n if (\n part.type !== 'text' &&\n part.type !== 'richText' &&\n part.type !== 'link'\n ) {\n continue;\n }\n if (part.meta?.continuesNode && paragraphs.length > 0) {\n paragraphs[paragraphs.length - 1].push(part);\n } else {\n paragraphs.push([part]);\n }\n }\n\n return paragraphs;\n}\n\nfunction paragraphsToMarkdown(paragraphs: Part[][]): string {\n return paragraphs\n .map(inlinePartsToMarkdown)\n .map((paragraph) => paragraph.trim())\n .filter(Boolean)\n .join('\\n\\n');\n}\n\n/**\n * Body copy as markdown, with inline links intact and paragraph breaks kept.\n *\n * `bodyText` reads text parts only, so a paragraph carrying an inline link —\n * `Try narrowing to [men](web5://ask/…) instead` — arrives as `t + link + t`\n * and comes back as `\"Try narrowing to\\n\\ninstead\"`: label and url both\n * deleted, and the sentence broken in two at the gap. That is DL #134's list\n * bug in a different helper, and it is why an ask link in prose never reached\n * the page. A bare `support@shop.example` is the same bug with no author in\n * sight: GFM autolinks an email into a `link` node, so plain prose loses the\n * address.\n *\n * `inlinePartsToMarkdown` already rebuilds a run of inline parts with links\n * intact, but it flattens to one line, which is wrong for multi-paragraph\n * copy — hence `inlineParagraphs` first.\n *\n * This keeps EVERY link, including one standing alone as its own block. That\n * is right for `textBlock`, whose section consumes nothing but the copy. It is\n * wrong for a section that already spends its links elsewhere — see\n * {@link proseBodyMarkdown}.\n *\n * Kept separate from `bodyText` deliberately, but not for the reason this\n * comment used to give. Of the four callers still on `bodyText`:\n * `ErrorSectionDefinition` and `CtaBannerSectionDefinition` do hand their\n * result to a consumer that renders it raw (`ErrorSection` prints the copy in\n * a `<p>`, `CtaBannerSection` the same), so markdown there would show a\n * visitor a literal `[label](url)`. `FeatureCardsSectionDefinition` does NOT —\n * both `FeatureCardsSection` renderers in this repo put `card.description`\n * through `MarkdownText`, so it loses inline links exactly like the sections\n * fixed here; it is left alone only because its callers were not verified end\n * to end. `FeatureSection9PlusDefinition` has no registered renderer at all.\n */\nexport function bodyMarkdown(parts: Part[]): string {\n return paragraphsToMarkdown(inlineParagraphs(parts));\n}\n\n/**\n * Body copy as markdown for a section that spends some of its links on another\n * slot — hero buttons, a comparison CTA, entity items.\n *\n * Same fix as {@link bodyMarkdown} for the case that matters — a link INSIDE a\n * sentence survives instead of being deleted with its label — but it drops the\n * two shapes those sections have already claimed, so nothing renders twice:\n *\n * - A paragraph that is nothing but links. `[Get started](/) [Learn more](/x)`\n * under a hero h1 is the button row `HeroSectionDefinition` turns into\n * `buttons`; the trailing link after a comparison table is its `ctaText` /\n * `ctaHref`. Whole-paragraph is the right test because a link that is part\n * of a sentence always shares its paragraph with the text around it.\n * - Everything from the first `web5://entity/…` link onward, which is item\n * copy rather than section copy — `HeroEntitySectionDefinition` reads those\n * links (and the text after each) into `items`. Same cut\n * {@link entitySectionBodyText} makes, for the same reason.\n *\n * Nothing is lost by either rule: the dropped links are exactly the ones the\n * section renders through some other prop.\n */\nexport function proseBodyMarkdown(parts: Part[]): string {\n const firstEntityLinkIndex = parts.findIndex(\n (p) => p.type === 'link' && isEntityHref((p as LinkPart).meta?.href),\n );\n const sectionParts =\n firstEntityLinkIndex >= 0 ? parts.slice(0, firstEntityLinkIndex) : parts;\n\n return paragraphsToMarkdown(\n inlineParagraphs(sectionParts).filter(\n (paragraph) => !paragraph.every((part) => part.type === 'link'),\n ),\n );\n}\n\n/**\n * Entity sections may be authored as one paragraph per entity:\n * `[Product](web5://entity/...) - why it matches`.\n * In that shape, text after the first entity link is item copy rather than\n * section copy, so only keep prose that appears before the first entity link.\n */\nexport function entitySectionBodyText(parts: Part[]): string {\n const firstEntityLinkIndex = parts.findIndex(\n (p) => p.type === 'link' && isEntityHref((p as LinkPart).meta?.href),\n );\n const sectionParts =\n firstEntityLinkIndex >= 0 ? parts.slice(0, firstEntityLinkIndex) : parts;\n\n return sectionParts\n .filter((p) => p.type === 'text' || p.type === 'richText')\n .map(markdownOrText)\n .filter(Boolean)\n .join('\\n\\n');\n}\n\n/** Build HeroButton[] from link parts — aligned to HeroSection1Button shape */\nexport function linksToHeroButtons(parts: Part[]): HeroButton[] {\n let links = getLinks(parts);\n if (!links.length) {\n const lists = getPartsByType<ListPart>(parts, 'list');\n links = lists.flatMap((l) =>\n (l.meta?.items ?? []).flatMap((item) =>\n ((item.meta?.parts ?? []) as Part[]).filter(\n (p): p is LinkPart => p.type === 'link',\n ),\n ),\n );\n }\n return links.map(\n (l, i): HeroButton => ({\n id: `btn-${i}`,\n text: l.content?.trim() || 'Learn more',\n variant: i === 0 ? 'primary' : 'secondary',\n onClick: l.meta.href,\n }),\n );\n}\n\n/** Return just the src URL string of the first image part */\nexport function firstImageSrc(parts: Part[]): string | undefined {\n const images = getImages(parts);\n const img = images[0];\n return img?.meta?.src || undefined;\n}\n\n/** Return the first link as { text, href } */\nexport function firstLink(\n parts: Part[],\n): { text: string; href: string } | undefined {\n const links = getLinks(parts);\n const link = links[0];\n if (!link) {\n return undefined;\n }\n return { text: link.content?.trim() || '', href: link.meta.href };\n}\n\n/** Extract text content from blockquote parts, preserving markdown formatting when available */\nexport function blockquoteText(parts: Part[]): string | undefined {\n const bqs = getPartsByType<Part>(parts, 'blockquote');\n if (bqs.length === 0) {\n return undefined;\n }\n const text = bqs\n .map((p) => (p.meta?.markdown as string)?.trim() || str(p))\n .filter(Boolean)\n .join('\\n');\n return text || undefined;\n}\n\n/** Extract first callout from parts as a Callout object */\nexport function calloutFromParts(parts: Part[]): Callout | undefined {\n const calloutParts = getPartsByType<Part>(parts, 'callout');\n if (calloutParts.length === 0) {\n return undefined;\n }\n const p = calloutParts[0];\n const raw = (p.meta?.markdown as string)?.trim() || str(p);\n const parsed = parseCalloutTag(raw);\n return parsed.text ? { text: parsed.text, kind: parsed.kind } : undefined;\n}\n\n/** Convert list parts to a markdown-like string */\nexport function listToMarkdown(parts: Part[]): string | undefined {\n const lists = getPartsByType<ListPart>(parts, 'list');\n if (lists.length === 0) {\n return undefined;\n }\n const lines: string[] = [];\n for (const list of lists) {\n const items = list.meta?.items ?? [];\n for (const item of items) {\n const text = extractListItemText(item);\n if (text) {\n lines.push(`- ${text}`);\n }\n }\n }\n return lines.length > 0 ? lines.join('\\n') : undefined;\n}\n\n/**\n * Parse a web5://entity/ URL into entityType and entityId.\n * Delegates to the central `parseWeb5Url` parser.\n */\nexport function parseEntityUrl(\n url: string,\n): { entityType: string; entityId: string } | null {\n const trimmedUrl = url?.trim();\n if (!trimmedUrl || !isWeb5EntityUrl(trimmedUrl)) {\n return null;\n }\n const parsed = parseWeb5Url(trimmedUrl);\n if (\n parsed?.type !== Web5UrlType.ENTITY ||\n !parsed.entityType ||\n !parsed.entityId\n ) {\n return null;\n }\n return { entityType: parsed.entityType, entityId: parsed.entityId };\n}\n\n/**\n * Parse a table cell value into boolean or string.\n * Ported from web50-server-ui comparisonSectionParser.tsx.\n */\nexport function parseTableValue(value: string): boolean | string {\n const normalized = value.trim().toLowerCase();\n\n if (\n normalized === 'true' ||\n normalized === 'yes' ||\n normalized === '✓' ||\n normalized === 'check' ||\n normalized === 'y'\n ) {\n return true;\n }\n if (\n normalized === 'false' ||\n normalized === 'no' ||\n normalized === '✗' ||\n normalized === 'x' ||\n normalized === 'n' ||\n normalized === ''\n ) {\n return false;\n }\n\n return value.trim();\n}\n\n/**\n * Parse a KPI item from markdown text.\n * The first **bold** segment becomes the title; everything after it (leading \":\" stripped) is the description.\n */\nexport function parseKpiItem(\n markdown: string,\n): { title: string; description: string } | null {\n const trimmed = markdown.trim();\n if (!trimmed) {\n return null;\n }\n const boldMatch = trimmed.match(/\\*\\*(.+?)\\*\\*/);\n if (!boldMatch) {\n return null;\n }\n const title = boldMatch[1].trim();\n const afterBold = trimmed.slice(\n trimmed.indexOf(boldMatch[0]) + boldMatch[0].length,\n );\n const description = afterBold.replace(/^[:\\s]+/, '').trim();\n return { title, description };\n}\n\n/** Join inline tokens the way prose reads: single spaces, none before punctuation. */\nfunction appendInlineToken(current: string, token: string): string {\n const trimmed = token.trim();\n if (!trimmed) {\n return current;\n }\n if (!current) {\n return trimmed;\n }\n if (/^[,.;:!?)]/.test(trimmed)) {\n return `${current}${trimmed}`;\n }\n return `${current} ${trimmed}`;\n}\n\n/**\n * Serialize a run of inline parts back to markdown, preserving links and\n * inline emphasis.\n *\n * Concatenating `part.content` alone silently deletes links: a `link` part\n * keeps its label in `content` and its url in `meta.href`, so a filter that\n * reads only text parts turns `Read the [pricing page](/pricing) first` into\n * `Read the first` — url and label both vanish, with nothing in the output to\n * show anything was lost.\n *\n * `content` is also the *plain* text of a text part — `nodesToParts` strips\n * inline formatting and keeps the original in `meta.markdown` whenever the two\n * differ. Reading `content` therefore drops emphasis the same way it used to\n * drop links: `The **4 oz size** is best` becomes `The 4 oz size is best`.\n * Prefer `meta.markdown`, which is exactly the segment's own markdown.\n */\nexport function inlinePartsToMarkdown(parts: Part[]): string {\n return parts.reduce((text, part) => {\n if (part.type === 'link') {\n const href = (part as LinkPart).meta?.href ?? '';\n const label = part.content?.trim() ?? '';\n return appendInlineToken(text, href ? `[${label}](${href})` : label);\n }\n return appendInlineToken(\n text,\n (part.meta?.markdown as string | undefined) ?? part.content ?? '',\n );\n }, '');\n}\n\nexport function extractListItemText(item: ListItemPart): string {\n if (item.content) {\n return item.content;\n }\n if (item.meta?.parts) {\n return (item.meta.parts as Part[])\n .map((p) => p.content)\n .filter(Boolean)\n .join(' ');\n }\n return '';\n}\n\n/**\n * Reconstruct markdown-like content from parts.\n *\n * `part.content` is the *plain* text — `nodesToParts` strips inline\n * formatting and preserves the original markdown (bold, italic, links) in\n * `part.meta.markdown` when they differ. Prefer it so markdown-rendering\n * consumers (e.g. the fallback section's ReactMarkdown) keep `**bold**`.\n */\nexport function partsToMarkdown(sectionParts: Part[]): string {\n const inline = (part: Part): string =>\n (part.meta?.markdown as string | undefined) ?? part.content;\n const lines: string[] = [];\n for (const part of sectionParts) {\n if (part.type === 'heading') {\n const level = (part.meta as { level: number })?.level ?? 2;\n lines.push(`${'#'.repeat(level)} ${inline(part)}`);\n } else if (part.type === 'text' || part.type === 'richText') {\n lines.push(inline(part));\n } else if (part.type === 'list') {\n const list = part as ListPart;\n for (const item of list.meta?.items ?? []) {\n lines.push(\n `- ${(item.meta?.markdown as string | undefined) ?? extractListItemText(item)}`,\n );\n }\n } else if (part.type === 'blockquote' || part.type === 'callout') {\n lines.push(`> ${inline(part)}`);\n }\n }\n return lines.join('\\n\\n');\n}\n\n/**\n * Extract callout kind tag from blockquote text.\n * Handles [!NOTE], [!TIP], [!IMPORTANT], [!WARNING], [!CAUTION] GFM syntax.\n */\nexport function parseCalloutTag(text: string): { text: string; kind?: string } {\n const match = text.match(/^\\[!(\\w+)\\]\\s*(.*)/s);\n if (match) {\n return { kind: match[1].toUpperCase(), text: match[2].trim() };\n }\n return { text: text.trim() };\n}\n\n/** Generate a simple unique ID */\nexport function generatePartId(): string {\n return Math.random().toString(36).slice(2, 10);\n}\n\nfunction isEntityHref(href: string | undefined): boolean {\n return !!href && isWeb5EntityUrl(href);\n}\n\nexport interface EntityRef {\n entityId: string;\n entityType: string;\n linkText: string;\n entityUrl: string;\n description: string;\n markdownImageUrl?: string;\n markdownFeatures?: string[];\n callout?: Callout;\n}\n\n/**\n * Extract text from nested list items within a list item's parts.\n */\nfunction extractNestedListItems(itemParts: Part[]): string[] {\n const nestedLists = itemParts.filter((p): p is ListPart => p.type === 'list');\n const features: string[] = [];\n for (const list of nestedLists) {\n for (const nested of list.meta?.items ?? []) {\n const text = extractListItemText(nested);\n if (text) {\n features.push(text);\n }\n }\n }\n return features;\n}\n\n/**\n * Extract entity references from list items containing web5://entity/ links.\n * Also extracts markdownFeatures from nested list items within each entity item.\n */\nexport function extractEntityRefs(parts: Part[]): EntityRef[] {\n const entities: EntityRef[] = [];\n const lists = getPartsByType<ListPart>(parts, 'list');\n\n for (const list of lists) {\n for (const item of list.meta?.items ?? []) {\n const itemParts = (item.meta?.parts ?? []) as Part[];\n const entityLinks = itemParts.filter(\n (p): p is LinkPart =>\n p.type === 'link' && isEntityHref((p as LinkPart).meta?.href),\n );\n\n for (const link of entityLinks) {\n const parsed = parseEntityUrl(link.meta.href);\n if (parsed) {\n const images = itemParts.filter(\n (p): p is ImagePart => p.type === 'image',\n );\n const textParts = itemParts.filter(\n (p) => p.type === 'text' && p.content?.trim(),\n );\n const description = normalizeEntityDescription(\n textParts.map(markdownOrText).join(' '),\n );\n const features = extractNestedListItems(itemParts);\n const calloutParts = itemParts.filter(\n (p) => p.type === 'callout' || p.type === 'blockquote',\n );\n let callout: Callout | undefined;\n if (calloutParts.length > 0) {\n const raw =\n (calloutParts[0].meta?.markdown as string)?.trim() ||\n str(calloutParts[0]);\n const parsed2 = parseCalloutTag(raw);\n if (parsed2.text) {\n callout = { text: parsed2.text, kind: parsed2.kind };\n }\n }\n entities.push({\n entityId: parsed.entityId,\n entityType: parsed.entityType,\n linkText: link.content?.trim() || '',\n entityUrl: link.meta.href,\n description,\n markdownImageUrl: images[0]?.meta?.src,\n markdownFeatures: features.length > 0 ? features : undefined,\n callout,\n });\n }\n }\n }\n }\n\n // Also check top-level links (with surrounding context for description/image/list)\n const topLinks = getLinks(parts).filter((l) => isEntityHref(l.meta?.href));\n for (const link of topLinks) {\n const parsed = parseEntityUrl(link.meta.href);\n if (parsed && !entities.some((e) => e.entityId === parsed.entityId)) {\n // Look for description text and image after this link in the parts array\n const linkIndex = parts.indexOf(link);\n let description = '';\n let markdownImageUrl: string | undefined;\n let callout: Callout | undefined;\n const features: string[] = [];\n\n if (linkIndex >= 0) {\n // Scan following parts for description, image, callout, and list items\n for (let j = linkIndex + 1; j < parts.length; j++) {\n const p = parts[j];\n // Stop at next entity link\n if (p.type === 'link' && isEntityHref((p as LinkPart).meta?.href)) {\n break;\n }\n if (p.type === 'text' && p.content?.trim()) {\n const text = markdownOrText(p);\n description = description\n ? `${description} ${text}`\n : text;\n } else if (p.type === 'image' && !markdownImageUrl) {\n markdownImageUrl = (p as ImagePart).meta?.src;\n } else if (\n (p.type === 'callout' || p.type === 'blockquote') &&\n !callout\n ) {\n const raw = (p.meta?.markdown as string)?.trim() || str(p);\n const parsedCallout = parseCalloutTag(raw);\n if (parsedCallout.text) {\n callout = { text: parsedCallout.text, kind: parsedCallout.kind };\n }\n } else if (p.type === 'list') {\n for (const item of (p as ListPart).meta?.items ?? []) {\n const text = extractListItemText(item);\n if (text) {\n features.push(text);\n }\n }\n }\n }\n }\n\n entities.push({\n entityId: parsed.entityId,\n entityType: parsed.entityType,\n linkText: link.content?.trim() || '',\n entityUrl: link.meta.href,\n description: normalizeEntityDescription(description),\n markdownImageUrl,\n markdownFeatures: features.length > 0 ? features : undefined,\n callout,\n });\n }\n }\n\n return entities;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -15,19 +15,53 @@ export declare function bodyText(parts: Part[]): string;
15
15
  * and comes back as `"Try narrowing to\n\ninstead"`: label and url both
16
16
  * deleted, and the sentence broken in two at the gap. That is DL #134's list
17
17
  * bug in a different helper, and it is why an ask link in prose never reached
18
- * the page.
18
+ * the page. A bare `support@shop.example` is the same bug with no author in
19
+ * sight: GFM autolinks an email into a `link` node, so plain prose loses the
20
+ * address.
19
21
  *
20
22
  * `inlinePartsToMarkdown` already rebuilds a run of inline parts with links
21
23
  * intact, but it flattens to one line, which is wrong for multi-paragraph
22
- * copy. So group first: `astToParts` marks every part after the first of a
23
- * given AST node with `meta.continuesNode`, which is exactly "same paragraph,
24
- * keep going". Parts without it open a new paragraph.
24
+ * copy hence `inlineParagraphs` first.
25
25
  *
26
- * Kept separate from `bodyText` deliberately the other seven callers hand
27
- * their result to consumers that do not render markdown, and would show a
28
- * visitor a raw `[label](url)`.
26
+ * This keeps EVERY link, including one standing alone as its own block. That
27
+ * is right for `textBlock`, whose section consumes nothing but the copy. It is
28
+ * wrong for a section that already spends its links elsewhere — see
29
+ * {@link proseBodyMarkdown}.
30
+ *
31
+ * Kept separate from `bodyText` deliberately, but not for the reason this
32
+ * comment used to give. Of the four callers still on `bodyText`:
33
+ * `ErrorSectionDefinition` and `CtaBannerSectionDefinition` do hand their
34
+ * result to a consumer that renders it raw (`ErrorSection` prints the copy in
35
+ * a `<p>`, `CtaBannerSection` the same), so markdown there would show a
36
+ * visitor a literal `[label](url)`. `FeatureCardsSectionDefinition` does NOT —
37
+ * both `FeatureCardsSection` renderers in this repo put `card.description`
38
+ * through `MarkdownText`, so it loses inline links exactly like the sections
39
+ * fixed here; it is left alone only because its callers were not verified end
40
+ * to end. `FeatureSection9PlusDefinition` has no registered renderer at all.
29
41
  */
30
42
  export declare function bodyMarkdown(parts: Part[]): string;
43
+ /**
44
+ * Body copy as markdown for a section that spends some of its links on another
45
+ * slot — hero buttons, a comparison CTA, entity items.
46
+ *
47
+ * Same fix as {@link bodyMarkdown} for the case that matters — a link INSIDE a
48
+ * sentence survives instead of being deleted with its label — but it drops the
49
+ * two shapes those sections have already claimed, so nothing renders twice:
50
+ *
51
+ * - A paragraph that is nothing but links. `[Get started](/) [Learn more](/x)`
52
+ * under a hero h1 is the button row `HeroSectionDefinition` turns into
53
+ * `buttons`; the trailing link after a comparison table is its `ctaText` /
54
+ * `ctaHref`. Whole-paragraph is the right test because a link that is part
55
+ * of a sentence always shares its paragraph with the text around it.
56
+ * - Everything from the first `web5://entity/…` link onward, which is item
57
+ * copy rather than section copy — `HeroEntitySectionDefinition` reads those
58
+ * links (and the text after each) into `items`. Same cut
59
+ * {@link entitySectionBodyText} makes, for the same reason.
60
+ *
61
+ * Nothing is lost by either rule: the dropped links are exactly the ones the
62
+ * section renders through some other prop.
63
+ */
64
+ export declare function proseBodyMarkdown(parts: Part[]): string;
31
65
  /**
32
66
  * Entity sections may be authored as one paragraph per entity:
33
67
  * `[Product](web5://entity/...) - why it matches`.
@@ -1 +1 @@
1
- {"version":3,"file":"parse-utils.d.ts","sourceRoot":"","sources":["../../../../src/component/componentDefinitions/parse-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,IAAI,EAGJ,YAAY,EAEb,MAAM,mBAAmB,CAAC;AAS3B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAiB3C,wDAAwD;AACxD,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAUhD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAGjE;AAED,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAOrE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAO9C;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAuBlD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAY3D;AAED,+EAA+E;AAC/E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,UAAU,EAAE,CAoB9D;AAED,6DAA6D;AAC7D,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,SAAS,CAI/D;AAED,8CAA8C;AAC9C,wBAAgB,SAAS,CACvB,KAAK,EAAE,IAAI,EAAE,GACZ;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAO5C;AAED,gGAAgG;AAChG,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,SAAS,CAUhE;AAED,2DAA2D;AAC3D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,GAAG,SAAS,CASnE;AAED,mDAAmD;AACnD,wBAAgB,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,SAAS,CAgBhE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,GACV;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAcjD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAwB/D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,GACf;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAe/C;AAiBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,CAY3D;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAW9D;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,IAAI,EAAE,GAAG,MAAM,CAsB5D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAM7E;AAED,kCAAkC;AAClC,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAMD,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAmBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,SAAS,EAAE,CAkH5D"}
1
+ {"version":3,"file":"parse-utils.d.ts","sourceRoot":"","sources":["../../../../src/component/componentDefinitions/parse-utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@wix/web5-core",
3
3
  "license": "MIT",
4
- "version": "1.63.30",
4
+ "version": "1.63.31",
5
5
  "author": {
6
6
  "name": "tsachis",
7
7
  "email": "tsachis@wix.com"
@@ -100,5 +100,5 @@
100
100
  "wallaby": {
101
101
  "autoDetect": true
102
102
  },
103
- "falconPackageHash": "5d5229ba091d38dade3fdf0f8a9d5937b63a7aa6ed28309e01da0e24"
103
+ "falconPackageHash": "523f94109d3641d2438b8fd67c07456611f125cd752e25b892491a6f"
104
104
  }