@opinly/next 0.1.26 → 1.0.0-alpha.0

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 (209) hide show
  1. package/dist/config.cjs +16 -7
  2. package/dist/config.cjs.map +1 -1
  3. package/dist/config.d.cts +7 -2
  4. package/dist/config.d.ts +7 -2
  5. package/dist/config.js +16 -7
  6. package/dist/config.js.map +1 -1
  7. package/dist/index.cjs +33 -3
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.d.cts +12 -6
  10. package/dist/index.d.ts +12 -6
  11. package/dist/index.js +26 -1
  12. package/dist/index.js.map +1 -1
  13. package/dist/json-ld.cjs +61 -0
  14. package/dist/json-ld.cjs.map +1 -0
  15. package/dist/json-ld.d.cts +17 -0
  16. package/dist/json-ld.d.ts +17 -0
  17. package/dist/json-ld.js +38 -0
  18. package/dist/json-ld.js.map +1 -0
  19. package/dist/utils/generate-metadata.cjs +23 -79
  20. package/dist/utils/generate-metadata.cjs.map +1 -1
  21. package/dist/utils/generate-metadata.d.cts +11 -2
  22. package/dist/utils/generate-metadata.d.ts +11 -2
  23. package/dist/utils/generate-metadata.js +23 -79
  24. package/dist/utils/generate-metadata.js.map +1 -1
  25. package/dist/utils/generate-sitemap-xml.cjs.map +1 -1
  26. package/dist/utils/generate-sitemap-xml.d.cts +5 -3
  27. package/dist/utils/generate-sitemap-xml.d.ts +5 -3
  28. package/dist/utils/generate-sitemap-xml.js.map +1 -1
  29. package/dist/utils/sdk-config.cjs +6 -2
  30. package/dist/utils/sdk-config.cjs.map +1 -1
  31. package/dist/utils/sdk-config.d.cts +4 -0
  32. package/dist/utils/sdk-config.d.ts +4 -0
  33. package/dist/utils/sdk-config.js +6 -2
  34. package/dist/utils/sdk-config.js.map +1 -1
  35. package/package.json +6 -20
  36. package/dist/components/author-page/_helpers/json-ld.cjs +0 -44
  37. package/dist/components/author-page/_helpers/json-ld.cjs.map +0 -1
  38. package/dist/components/author-page/_helpers/json-ld.d.cts +0 -8
  39. package/dist/components/author-page/_helpers/json-ld.d.ts +0 -8
  40. package/dist/components/author-page/_helpers/json-ld.js +0 -20
  41. package/dist/components/author-page/_helpers/json-ld.js.map +0 -1
  42. package/dist/components/author-page/index.cjs +0 -104
  43. package/dist/components/author-page/index.cjs.map +0 -1
  44. package/dist/components/author-page/index.d.cts +0 -10
  45. package/dist/components/author-page/index.d.ts +0 -10
  46. package/dist/components/author-page/index.js +0 -70
  47. package/dist/components/author-page/index.js.map +0 -1
  48. package/dist/components/authors-page/_helpers/json-ld.cjs +0 -53
  49. package/dist/components/authors-page/_helpers/json-ld.cjs.map +0 -1
  50. package/dist/components/authors-page/_helpers/json-ld.d.cts +0 -8
  51. package/dist/components/authors-page/_helpers/json-ld.d.ts +0 -8
  52. package/dist/components/authors-page/_helpers/json-ld.js +0 -29
  53. package/dist/components/authors-page/_helpers/json-ld.js.map +0 -1
  54. package/dist/components/authors-page/index.cjs +0 -121
  55. package/dist/components/authors-page/index.cjs.map +0 -1
  56. package/dist/components/authors-page/index.d.cts +0 -10
  57. package/dist/components/authors-page/index.d.ts +0 -10
  58. package/dist/components/authors-page/index.js +0 -87
  59. package/dist/components/authors-page/index.js.map +0 -1
  60. package/dist/components/blog-post/_components/content.cjs +0 -157
  61. package/dist/components/blog-post/_components/content.cjs.map +0 -1
  62. package/dist/components/blog-post/_components/content.d.cts +0 -10
  63. package/dist/components/blog-post/_components/content.d.ts +0 -10
  64. package/dist/components/blog-post/_components/content.js +0 -123
  65. package/dist/components/blog-post/_components/content.js.map +0 -1
  66. package/dist/components/blog-post/_components/faq.cjs +0 -39
  67. package/dist/components/blog-post/_components/faq.cjs.map +0 -1
  68. package/dist/components/blog-post/_components/faq.d.cts +0 -9
  69. package/dist/components/blog-post/_components/faq.d.ts +0 -9
  70. package/dist/components/blog-post/_components/faq.js +0 -15
  71. package/dist/components/blog-post/_components/faq.js.map +0 -1
  72. package/dist/components/blog-post/_components/share.cjs +0 -100
  73. package/dist/components/blog-post/_components/share.cjs.map +0 -1
  74. package/dist/components/blog-post/_components/share.d.cts +0 -9
  75. package/dist/components/blog-post/_components/share.d.ts +0 -9
  76. package/dist/components/blog-post/_components/share.js +0 -66
  77. package/dist/components/blog-post/_components/share.js.map +0 -1
  78. package/dist/components/blog-post/_components/table-of-contents.cjs +0 -111
  79. package/dist/components/blog-post/_components/table-of-contents.cjs.map +0 -1
  80. package/dist/components/blog-post/_components/table-of-contents.d.cts +0 -14
  81. package/dist/components/blog-post/_components/table-of-contents.d.ts +0 -14
  82. package/dist/components/blog-post/_components/table-of-contents.js +0 -77
  83. package/dist/components/blog-post/_components/table-of-contents.js.map +0 -1
  84. package/dist/components/blog-post/_helpers/calc-reading-time.cjs +0 -2
  85. package/dist/components/blog-post/_helpers/calc-reading-time.cjs.map +0 -1
  86. package/dist/components/blog-post/_helpers/calc-reading-time.d.cts +0 -2
  87. package/dist/components/blog-post/_helpers/calc-reading-time.d.ts +0 -2
  88. package/dist/components/blog-post/_helpers/calc-reading-time.js +0 -1
  89. package/dist/components/blog-post/_helpers/calc-reading-time.js.map +0 -1
  90. package/dist/components/blog-post/_helpers/extract-headings.cjs +0 -45
  91. package/dist/components/blog-post/_helpers/extract-headings.cjs.map +0 -1
  92. package/dist/components/blog-post/_helpers/extract-headings.d.cts +0 -9
  93. package/dist/components/blog-post/_helpers/extract-headings.d.ts +0 -9
  94. package/dist/components/blog-post/_helpers/extract-headings.js +0 -21
  95. package/dist/components/blog-post/_helpers/extract-headings.js.map +0 -1
  96. package/dist/components/blog-post/_helpers/json-ld.cjs +0 -162
  97. package/dist/components/blog-post/_helpers/json-ld.cjs.map +0 -1
  98. package/dist/components/blog-post/_helpers/json-ld.d.cts +0 -15
  99. package/dist/components/blog-post/_helpers/json-ld.d.ts +0 -15
  100. package/dist/components/blog-post/_helpers/json-ld.js +0 -135
  101. package/dist/components/blog-post/_helpers/json-ld.js.map +0 -1
  102. package/dist/components/blog-post/_helpers/reading-time.cjs +0 -50
  103. package/dist/components/blog-post/_helpers/reading-time.cjs.map +0 -1
  104. package/dist/components/blog-post/_helpers/reading-time.d.cts +0 -6
  105. package/dist/components/blog-post/_helpers/reading-time.d.ts +0 -6
  106. package/dist/components/blog-post/_helpers/reading-time.js +0 -25
  107. package/dist/components/blog-post/_helpers/reading-time.js.map +0 -1
  108. package/dist/components/blog-post/_types/blog-post.cjs +0 -17
  109. package/dist/components/blog-post/_types/blog-post.cjs.map +0 -1
  110. package/dist/components/blog-post/_types/blog-post.d.cts +0 -7
  111. package/dist/components/blog-post/_types/blog-post.d.ts +0 -7
  112. package/dist/components/blog-post/_types/blog-post.js +0 -1
  113. package/dist/components/blog-post/_types/blog-post.js.map +0 -1
  114. package/dist/components/blog-post/_types/class-names.cjs +0 -17
  115. package/dist/components/blog-post/_types/class-names.cjs.map +0 -1
  116. package/dist/components/blog-post/_types/class-names.d.cts +0 -12
  117. package/dist/components/blog-post/_types/class-names.d.ts +0 -12
  118. package/dist/components/blog-post/_types/class-names.js +0 -1
  119. package/dist/components/blog-post/_types/class-names.js.map +0 -1
  120. package/dist/components/blog-post/index.cjs +0 -133
  121. package/dist/components/blog-post/index.cjs.map +0 -1
  122. package/dist/components/blog-post/index.d.cts +0 -15
  123. package/dist/components/blog-post/index.d.ts +0 -15
  124. package/dist/components/blog-post/index.js +0 -99
  125. package/dist/components/blog-post/index.js.map +0 -1
  126. package/dist/components/bread-crumbs.cjs +0 -60
  127. package/dist/components/bread-crumbs.cjs.map +0 -1
  128. package/dist/components/bread-crumbs.d.cts +0 -10
  129. package/dist/components/bread-crumbs.d.ts +0 -10
  130. package/dist/components/bread-crumbs.js +0 -26
  131. package/dist/components/bread-crumbs.js.map +0 -1
  132. package/dist/components/folder-page/_helpers/json-ld.cjs +0 -43
  133. package/dist/components/folder-page/_helpers/json-ld.cjs.map +0 -1
  134. package/dist/components/folder-page/_helpers/json-ld.d.cts +0 -8
  135. package/dist/components/folder-page/_helpers/json-ld.d.ts +0 -8
  136. package/dist/components/folder-page/_helpers/json-ld.js +0 -19
  137. package/dist/components/folder-page/_helpers/json-ld.js.map +0 -1
  138. package/dist/components/folder-page/index.cjs +0 -84
  139. package/dist/components/folder-page/index.cjs.map +0 -1
  140. package/dist/components/folder-page/index.d.cts +0 -10
  141. package/dist/components/folder-page/index.d.ts +0 -10
  142. package/dist/components/folder-page/index.js +0 -60
  143. package/dist/components/folder-page/index.js.map +0 -1
  144. package/dist/components/home-page/_helpers/json-ld.cjs +0 -43
  145. package/dist/components/home-page/_helpers/json-ld.cjs.map +0 -1
  146. package/dist/components/home-page/_helpers/json-ld.d.cts +0 -3
  147. package/dist/components/home-page/_helpers/json-ld.d.ts +0 -3
  148. package/dist/components/home-page/_helpers/json-ld.js +0 -19
  149. package/dist/components/home-page/_helpers/json-ld.js.map +0 -1
  150. package/dist/components/home-page/folders.cjs +0 -108
  151. package/dist/components/home-page/folders.cjs.map +0 -1
  152. package/dist/components/home-page/folders.d.cts +0 -11
  153. package/dist/components/home-page/folders.d.ts +0 -11
  154. package/dist/components/home-page/folders.js +0 -73
  155. package/dist/components/home-page/folders.js.map +0 -1
  156. package/dist/components/home-page/index.cjs +0 -50
  157. package/dist/components/home-page/index.cjs.map +0 -1
  158. package/dist/components/home-page/index.d.cts +0 -14
  159. package/dist/components/home-page/index.d.ts +0 -14
  160. package/dist/components/home-page/index.js +0 -26
  161. package/dist/components/home-page/index.js.map +0 -1
  162. package/dist/components/home-page/pagination.cjs +0 -97
  163. package/dist/components/home-page/pagination.cjs.map +0 -1
  164. package/dist/components/home-page/pagination.d.cts +0 -9
  165. package/dist/components/home-page/pagination.d.ts +0 -9
  166. package/dist/components/home-page/pagination.js +0 -63
  167. package/dist/components/home-page/pagination.js.map +0 -1
  168. package/dist/components/home-page/top-posts.cjs +0 -35
  169. package/dist/components/home-page/top-posts.cjs.map +0 -1
  170. package/dist/components/home-page/top-posts.d.cts +0 -10
  171. package/dist/components/home-page/top-posts.d.ts +0 -10
  172. package/dist/components/home-page/top-posts.js +0 -11
  173. package/dist/components/home-page/top-posts.js.map +0 -1
  174. package/dist/components/json-ld.cjs +0 -92
  175. package/dist/components/json-ld.cjs.map +0 -1
  176. package/dist/components/json-ld.d.cts +0 -13
  177. package/dist/components/json-ld.d.ts +0 -13
  178. package/dist/components/json-ld.js +0 -57
  179. package/dist/components/json-ld.js.map +0 -1
  180. package/dist/components/opinly-blog.cjs +0 -57
  181. package/dist/components/opinly-blog.cjs.map +0 -1
  182. package/dist/components/opinly-blog.d.cts +0 -15
  183. package/dist/components/opinly-blog.d.ts +0 -15
  184. package/dist/components/opinly-blog.js +0 -33
  185. package/dist/components/opinly-blog.js.map +0 -1
  186. package/dist/components/post-preview.cjs +0 -114
  187. package/dist/components/post-preview.cjs.map +0 -1
  188. package/dist/components/post-preview.d.cts +0 -10
  189. package/dist/components/post-preview.d.ts +0 -10
  190. package/dist/components/post-preview.js +0 -79
  191. package/dist/components/post-preview.js.map +0 -1
  192. package/dist/pages/index.cjs +0 -23
  193. package/dist/pages/index.cjs.map +0 -1
  194. package/dist/pages/index.d.cts +0 -3
  195. package/dist/pages/index.d.ts +0 -3
  196. package/dist/pages/index.js +0 -2
  197. package/dist/pages/index.js.map +0 -1
  198. package/dist/pages/opinly-blog-pages.cjs +0 -127
  199. package/dist/pages/opinly-blog-pages.cjs.map +0 -1
  200. package/dist/pages/opinly-blog-pages.d.cts +0 -9
  201. package/dist/pages/opinly-blog-pages.d.ts +0 -9
  202. package/dist/pages/opinly-blog-pages.js +0 -103
  203. package/dist/pages/opinly-blog-pages.js.map +0 -1
  204. package/dist/utils/json-ld.cjs +0 -2
  205. package/dist/utils/json-ld.cjs.map +0 -1
  206. package/dist/utils/json-ld.d.cts +0 -2
  207. package/dist/utils/json-ld.d.ts +0 -2
  208. package/dist/utils/json-ld.js +0 -1
  209. package/dist/utils/json-ld.js.map +0 -1
@@ -1,135 +0,0 @@
1
- import { opinlyConfig } from "../../../utils/sdk-config";
2
- function generateArticleBodyHtml(content) {
3
- if (!content?.content) return "";
4
- let htmlString = "";
5
- content.content.forEach((node) => {
6
- switch (node.type) {
7
- case "paragraph":
8
- htmlString += `<p>${generateChildrenHtml(node.content)}</p>`;
9
- break;
10
- case "heading":
11
- const headingLevel = node.attrs?.level || 1;
12
- htmlString += `<h${headingLevel}>${generateChildrenHtml(
13
- node.content
14
- )}</h${headingLevel}>`;
15
- break;
16
- case "bulletList":
17
- htmlString += `<ul>${generateChildrenHtml(node.content)}</ul>`;
18
- break;
19
- case "orderedList":
20
- htmlString += `<ol>${generateChildrenHtml(node.content)}</ol>`;
21
- break;
22
- case "listItem":
23
- htmlString += `<li>${generateChildrenHtml(node.content)}</li>`;
24
- break;
25
- // Add other node types if they contain text content relevant for articleBody
26
- // For images, you might just skip them or include an <img> tag if semantic
27
- // For example:
28
- // case "image":
29
- // if (node.attrs?.src) {
30
- // htmlString += `<img src="${replaceImageHostname(node.attrs.src, opinlyConfig.imagesPrefix)}" alt="${node.attrs?.alt || ''}" />`;
31
- // }
32
- // break;
33
- default:
34
- break;
35
- }
36
- });
37
- return htmlString;
38
- }
39
- function generateChildrenHtml(nodes) {
40
- if (!nodes) return "";
41
- let childrenHtml = "";
42
- nodes.forEach((child) => {
43
- if (child.type === "text") {
44
- let text = child.text || "";
45
- if (child.marks) {
46
- child.marks.forEach((mark) => {
47
- if (mark.type === "bold") text = `<strong>${text}</strong>`;
48
- if (mark.type === "italic") text = `<em>${text}</em>`;
49
- if (mark.type === "link" && mark.attrs?.href) {
50
- text = `<a href="${mark.attrs.href}">${text}</a>`;
51
- }
52
- });
53
- }
54
- childrenHtml += text;
55
- }
56
- });
57
- return childrenHtml;
58
- }
59
- const genFaqJSONLD = (faqs) => {
60
- return {
61
- "@context": "https://schema.org",
62
- "@type": "FAQPage",
63
- mainEntity: faqs.map((faq) => ({
64
- "@type": "Question",
65
- name: faq.question,
66
- acceptedAnswer: {
67
- "@type": "Answer",
68
- text: faq.answer
69
- }
70
- }))
71
- };
72
- };
73
- const genBlogPostingJSONLD = (post) => {
74
- return {
75
- "@context": "https://schema.org",
76
- "@type": "BlogPosting",
77
- headline: post.title,
78
- description: post.description || void 0,
79
- url: `${opinlyConfig.blogUrl}/${post.folder ? `${post.folder.slug + "/"}${post.slug}` : post.slug}`,
80
- datePublished: post.firstPublishedAt || void 0,
81
- dateModified: post.modifiedAt || void 0,
82
- image: post.titleFile?.fileKey ? {
83
- "@type": "ImageObject",
84
- url: `${opinlyConfig.imagesUrl}/${post.titleFile.fileKey}`
85
- } : void 0,
86
- author: post.author ? {
87
- "@type": "Person",
88
- name: post.author.name,
89
- url: `${opinlyConfig.blogUrl}/author/${post.author.slug}`,
90
- description: post.author.bio || void 0
91
- } : void 0,
92
- isAccessibleForFree: true,
93
- articleBody: generateArticleBodyHtml(post.content)
94
- };
95
- };
96
- const genBreadcrumbJSONLD = (post) => {
97
- const itemListElement = [
98
- {
99
- position: 1,
100
- name: opinlyConfig.siteName,
101
- item: opinlyConfig.siteUrl
102
- },
103
- {
104
- position: 2,
105
- name: post.folder?.name || "Blog",
106
- item: `${opinlyConfig.blogUrl}/blog`
107
- }
108
- ];
109
- if (post.folder) {
110
- itemListElement.push({
111
- position: 3,
112
- name: post.folder.name,
113
- item: `${opinlyConfig.blogUrl}/blog/${post.folder.slug}`
114
- });
115
- itemListElement.push({
116
- position: 4,
117
- name: post.title,
118
- item: `${opinlyConfig.blogUrl}/blog/${post.folder.slug}/${post.slug}`
119
- });
120
- } else {
121
- itemListElement.push({
122
- position: 3,
123
- name: post.title,
124
- item: `${opinlyConfig.blogUrl}/blog/${post.slug}`
125
- });
126
- }
127
- return itemListElement;
128
- };
129
- export {
130
- genBlogPostingJSONLD,
131
- genBreadcrumbJSONLD,
132
- genFaqJSONLD,
133
- generateArticleBodyHtml
134
- };
135
- //# sourceMappingURL=json-ld.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/components/blog-post/_helpers/json-ld.ts"],"sourcesContent":["import {\n BlogPosting,\n BreadcrumbList,\n FAQPage,\n WithContext,\n ListItem,\n} from \"schema-dts\";\nimport { BlogPostRes } from \"../_types/blog-post\";\nimport { opinlyConfig } from \"../../../utils/sdk-config\";\nimport { JSONContent } from \"@tiptap/core\";\n\n// Add this function somewhere in your BlogPost component file\nexport function generateArticleBodyHtml(content: JSONContent): string {\n if (!content?.content) return \"\";\n\n let htmlString = \"\";\n\n content.content.forEach((node) => {\n switch (node.type) {\n case \"paragraph\":\n htmlString += `<p>${generateChildrenHtml(node.content)}</p>`;\n break;\n case \"heading\":\n const headingLevel = node.attrs?.level || 1;\n htmlString += `<h${headingLevel}>${generateChildrenHtml(\n node.content\n )}</h${headingLevel}>`;\n break;\n case \"bulletList\":\n htmlString += `<ul>${generateChildrenHtml(node.content)}</ul>`;\n break;\n case \"orderedList\":\n htmlString += `<ol>${generateChildrenHtml(node.content)}</ol>`;\n break;\n case \"listItem\":\n htmlString += `<li>${generateChildrenHtml(node.content)}</li>`;\n break;\n // Add other node types if they contain text content relevant for articleBody\n // For images, you might just skip them or include an <img> tag if semantic\n // For example:\n // case \"image\":\n // if (node.attrs?.src) {\n // htmlString += `<img src=\"${replaceImageHostname(node.attrs.src, opinlyConfig.imagesPrefix)}\" alt=\"${node.attrs?.alt || ''}\" />`;\n // }\n // break;\n default:\n // Handle other block types or just ignore them for articleBody\n break;\n }\n });\n\n return htmlString;\n}\n\nfunction generateChildrenHtml(\n nodes: JSONContent[\"content\"] | undefined\n): string {\n if (!nodes) return \"\";\n\n let childrenHtml = \"\";\n nodes.forEach((child) => {\n if (child.type === \"text\") {\n let text = child.text || \"\";\n if (child.marks) {\n child.marks.forEach((mark) => {\n if (mark.type === \"bold\") text = `<strong>${text}</strong>`;\n if (mark.type === \"italic\") text = `<em>${text}</em>`;\n if (mark.type === \"link\" && mark.attrs?.href) {\n text = `<a href=\"${mark.attrs.href}\">${text}</a>`;\n }\n });\n }\n childrenHtml += text;\n }\n // If you have nested content within child nodes, you might need a recursive call here\n // For example, if a list item can contain paragraphs\n // if (child.content) {\n // childrenHtml += generateChildrenHtml(child.content);\n // }\n });\n return childrenHtml;\n}\n\nexport const genFaqJSONLD = (\n faqs: NonNullable<BlogPostRes[\"faqs\"]>\n): WithContext<FAQPage> => {\n return {\n \"@context\": \"https://schema.org\",\n \"@type\": \"FAQPage\",\n mainEntity: faqs.map((faq) => ({\n \"@type\": \"Question\",\n name: faq.question,\n acceptedAnswer: {\n \"@type\": \"Answer\",\n text: faq.answer,\n },\n })),\n };\n};\n\nexport const genBlogPostingJSONLD = (\n post: BlogPostRes\n): WithContext<BlogPosting> => {\n return {\n \"@context\": \"https://schema.org\",\n \"@type\": \"BlogPosting\",\n headline: post.title,\n description: post.description || undefined,\n url: `${opinlyConfig.blogUrl}/${\n post.folder ? `${post.folder.slug + \"/\"}${post.slug}` : post.slug\n }`,\n datePublished: post.firstPublishedAt || undefined,\n dateModified: post.modifiedAt || undefined,\n image: post.titleFile?.fileKey\n ? {\n \"@type\": \"ImageObject\",\n url: `${opinlyConfig.imagesUrl}/${post.titleFile.fileKey}`,\n }\n : undefined,\n author: post.author\n ? {\n \"@type\": \"Person\",\n name: post.author.name,\n url: `${opinlyConfig.blogUrl}/author/${post.author.slug}`,\n description: post.author.bio || undefined,\n }\n : undefined,\n isAccessibleForFree: true,\n articleBody: generateArticleBodyHtml(post.content as JSONContent),\n };\n};\n\nexport const genBreadcrumbJSONLD = (post: BlogPostRes) => {\n const itemListElement = [\n {\n position: 1,\n name: opinlyConfig.siteName,\n item: opinlyConfig.siteUrl,\n },\n {\n position: 2,\n name: post.folder?.name || \"Blog\",\n item: `${opinlyConfig.blogUrl}/blog`,\n },\n ];\n\n if (post.folder) {\n itemListElement.push({\n position: 3,\n name: post.folder.name,\n item: `${opinlyConfig.blogUrl}/blog/${post.folder.slug}`,\n });\n\n itemListElement.push({\n position: 4,\n name: post.title,\n item: `${opinlyConfig.blogUrl}/blog/${post.folder.slug}/${post.slug}`,\n });\n } else {\n itemListElement.push({\n position: 3,\n name: post.title,\n item: `${opinlyConfig.blogUrl}/blog/${post.slug}`,\n });\n }\n\n return itemListElement;\n};\n"],"mappings":"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","names":[]}
@@ -1,50 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var reading_time_exports = {};
20
- __export(reading_time_exports, {
21
- calculateReadingTime: () => calculateReadingTime,
22
- countWords: () => countWords
23
- });
24
- module.exports = __toCommonJS(reading_time_exports);
25
- const countWords = (content) => {
26
- if (!content?.content) return 0;
27
- let wordCount = 0;
28
- const countWords2 = (nodes) => {
29
- for (const node of nodes) {
30
- if (node.type === "text" && node.text) {
31
- const words = node.text.trim().split(/\s+/).filter(Boolean);
32
- wordCount += words.length;
33
- }
34
- if (node.content) countWords2(node.content);
35
- }
36
- };
37
- countWords2(content.content);
38
- return wordCount;
39
- };
40
- function calculateReadingTime(content) {
41
- const wordCount = countWords(content);
42
- const readingTimeMinutes = Math.ceil(wordCount / 200);
43
- return readingTimeMinutes;
44
- }
45
- // Annotate the CommonJS export names for ESM import in node:
46
- 0 && (module.exports = {
47
- calculateReadingTime,
48
- countWords
49
- });
50
- //# sourceMappingURL=reading-time.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/components/blog-post/_helpers/reading-time.ts"],"sourcesContent":["import { JSONContent } from \"@tiptap/core\";\n\nexport const countWords = (content: JSONContent | undefined): number => {\n if (!content?.content) return 0;\n\n let wordCount = 0;\n\n const countWords = (nodes: any[]) => {\n for (const node of nodes) {\n if (node.type === \"text\" && node.text) {\n const words = node.text.trim().split(/\\s+/).filter(Boolean);\n wordCount += words.length;\n }\n if (node.content) countWords(node.content);\n }\n };\n\n countWords(content.content);\n\n return wordCount;\n};\n\nexport function calculateReadingTime(content: JSONContent): number {\n const wordCount = countWords(content);\n\n const readingTimeMinutes = Math.ceil(wordCount / 200);\n return readingTimeMinutes;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,MAAM,aAAa,CAAC,YAA6C;AACtE,MAAI,CAAC,SAAS,QAAS,QAAO;AAE9B,MAAI,YAAY;AAEhB,QAAMA,cAAa,CAAC,UAAiB;AACnC,eAAW,QAAQ,OAAO;AACxB,UAAI,KAAK,SAAS,UAAU,KAAK,MAAM;AACrC,cAAM,QAAQ,KAAK,KAAK,KAAK,EAAE,MAAM,KAAK,EAAE,OAAO,OAAO;AAC1D,qBAAa,MAAM;AAAA,MACrB;AACA,UAAI,KAAK,QAAS,CAAAA,YAAW,KAAK,OAAO;AAAA,IAC3C;AAAA,EACF;AAEA,EAAAA,YAAW,QAAQ,OAAO;AAE1B,SAAO;AACT;AAEO,SAAS,qBAAqB,SAA8B;AACjE,QAAM,YAAY,WAAW,OAAO;AAEpC,QAAM,qBAAqB,KAAK,KAAK,YAAY,GAAG;AACpD,SAAO;AACT;","names":["countWords"]}
@@ -1,6 +0,0 @@
1
- import { JSONContent } from '@tiptap/core';
2
-
3
- declare const countWords: (content: JSONContent | undefined) => number;
4
- declare function calculateReadingTime(content: JSONContent): number;
5
-
6
- export { calculateReadingTime, countWords };
@@ -1,6 +0,0 @@
1
- import { JSONContent } from '@tiptap/core';
2
-
3
- declare const countWords: (content: JSONContent | undefined) => number;
4
- declare function calculateReadingTime(content: JSONContent): number;
5
-
6
- export { calculateReadingTime, countWords };
@@ -1,25 +0,0 @@
1
- const countWords = (content) => {
2
- if (!content?.content) return 0;
3
- let wordCount = 0;
4
- const countWords2 = (nodes) => {
5
- for (const node of nodes) {
6
- if (node.type === "text" && node.text) {
7
- const words = node.text.trim().split(/\s+/).filter(Boolean);
8
- wordCount += words.length;
9
- }
10
- if (node.content) countWords2(node.content);
11
- }
12
- };
13
- countWords2(content.content);
14
- return wordCount;
15
- };
16
- function calculateReadingTime(content) {
17
- const wordCount = countWords(content);
18
- const readingTimeMinutes = Math.ceil(wordCount / 200);
19
- return readingTimeMinutes;
20
- }
21
- export {
22
- calculateReadingTime,
23
- countWords
24
- };
25
- //# sourceMappingURL=reading-time.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/components/blog-post/_helpers/reading-time.ts"],"sourcesContent":["import { JSONContent } from \"@tiptap/core\";\n\nexport const countWords = (content: JSONContent | undefined): number => {\n if (!content?.content) return 0;\n\n let wordCount = 0;\n\n const countWords = (nodes: any[]) => {\n for (const node of nodes) {\n if (node.type === \"text\" && node.text) {\n const words = node.text.trim().split(/\\s+/).filter(Boolean);\n wordCount += words.length;\n }\n if (node.content) countWords(node.content);\n }\n };\n\n countWords(content.content);\n\n return wordCount;\n};\n\nexport function calculateReadingTime(content: JSONContent): number {\n const wordCount = countWords(content);\n\n const readingTimeMinutes = Math.ceil(wordCount / 200);\n return readingTimeMinutes;\n}\n"],"mappings":"AAEO,MAAM,aAAa,CAAC,YAA6C;AACtE,MAAI,CAAC,SAAS,QAAS,QAAO;AAE9B,MAAI,YAAY;AAEhB,QAAMA,cAAa,CAAC,UAAiB;AACnC,eAAW,QAAQ,OAAO;AACxB,UAAI,KAAK,SAAS,UAAU,KAAK,MAAM;AACrC,cAAM,QAAQ,KAAK,KAAK,KAAK,EAAE,MAAM,KAAK,EAAE,OAAO,OAAO;AAC1D,qBAAa,MAAM;AAAA,MACrB;AACA,UAAI,KAAK,QAAS,CAAAA,YAAW,KAAK,OAAO;AAAA,IAC3C;AAAA,EACF;AAEA,EAAAA,YAAW,QAAQ,OAAO;AAE1B,SAAO;AACT;AAEO,SAAS,qBAAqB,SAA8B;AACjE,QAAM,YAAY,WAAW,OAAO;AAEpC,QAAM,qBAAqB,KAAK,KAAK,YAAY,GAAG;AACpD,SAAO;AACT;","names":["countWords"]}
@@ -1,17 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __copyProps = (to, from, except, desc) => {
7
- if (from && typeof from === "object" || typeof from === "function") {
8
- for (let key of __getOwnPropNames(from))
9
- if (!__hasOwnProp.call(to, key) && key !== except)
10
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
- }
12
- return to;
13
- };
14
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
- var blog_post_exports = {};
16
- module.exports = __toCommonJS(blog_post_exports);
17
- //# sourceMappingURL=blog-post.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/components/blog-post/_types/blog-post.ts"],"sourcesContent":["import type { Opinly } from \"@opinly/backend\";\n\nexport type BlogPostRes = Extract<\n Awaited<ReturnType<Opinly[\"content\"][\"blog\"]>>,\n { type: \"post\" }\n>[\"data\"];\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1,7 +0,0 @@
1
- import { Opinly } from '@opinly/backend';
2
-
3
- type BlogPostRes = Extract<Awaited<ReturnType<Opinly["content"]["blog"]>>, {
4
- type: "post";
5
- }>["data"];
6
-
7
- export type { BlogPostRes };
@@ -1,7 +0,0 @@
1
- import { Opinly } from '@opinly/backend';
2
-
3
- type BlogPostRes = Extract<Awaited<ReturnType<Opinly["content"]["blog"]>>, {
4
- type: "post";
5
- }>["data"];
6
-
7
- export type { BlogPostRes };
@@ -1 +0,0 @@
1
- //# sourceMappingURL=blog-post.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,17 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __copyProps = (to, from, except, desc) => {
7
- if (from && typeof from === "object" || typeof from === "function") {
8
- for (let key of __getOwnPropNames(from))
9
- if (!__hasOwnProp.call(to, key) && key !== except)
10
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
- }
12
- return to;
13
- };
14
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
- var class_names_exports = {};
16
- module.exports = __toCommonJS(class_names_exports);
17
- //# sourceMappingURL=class-names.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/components/blog-post/_types/class-names.ts"],"sourcesContent":["export type BlogComponentClassNames = {\n paragraph?: string;\n heading?: string;\n image?: string;\n bulletList?: string;\n orderedList?: string;\n listItem?: string;\n link?: string;\n container?: string;\n};\n"],"mappings":";;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1,12 +0,0 @@
1
- type BlogComponentClassNames = {
2
- paragraph?: string;
3
- heading?: string;
4
- image?: string;
5
- bulletList?: string;
6
- orderedList?: string;
7
- listItem?: string;
8
- link?: string;
9
- container?: string;
10
- };
11
-
12
- export type { BlogComponentClassNames };
@@ -1,12 +0,0 @@
1
- type BlogComponentClassNames = {
2
- paragraph?: string;
3
- heading?: string;
4
- image?: string;
5
- bulletList?: string;
6
- orderedList?: string;
7
- listItem?: string;
8
- link?: string;
9
- container?: string;
10
- };
11
-
12
- export type { BlogComponentClassNames };
@@ -1 +0,0 @@
1
- //# sourceMappingURL=class-names.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,133 +0,0 @@
1
- "use strict";
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __copyProps = (to, from, except, desc) => {
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (let key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(to, key) && key !== except)
16
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
- }
18
- return to;
19
- };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var blog_post_exports = {};
30
- __export(blog_post_exports, {
31
- BlogPost: () => BlogPost
32
- });
33
- module.exports = __toCommonJS(blog_post_exports);
34
- var import_jsx_runtime = require("react/jsx-runtime");
35
- var import_link = __toESM(require("next/link"), 1);
36
- var import_merge = require("../../utils/merge");
37
- var import_sdk_config = require("../../utils/sdk-config");
38
- var import_json_ld = require("./_helpers/json-ld");
39
- var import_faq = require("./_components/faq");
40
- var import_reading_time = require("./_helpers/reading-time");
41
- var import_content = require("./_components/content");
42
- var import_table_of_contents = require("./_components/table-of-contents");
43
- var import_bread_crumbs = require("../bread-crumbs");
44
- var import_dates = require("../../utils/dates");
45
- var import_json_ld2 = require("../json-ld");
46
- const BlogPost = ({
47
- post,
48
- classNames = {},
49
- cta
50
- }) => {
51
- const content = post.content;
52
- const breadcrumbItems = [];
53
- if (post.folder) {
54
- breadcrumbItems.push({
55
- slugNoPrefixSlash: post.folder.slug,
56
- name: post.folder.name
57
- });
58
- }
59
- breadcrumbItems.push({
60
- slugNoPrefixSlash: post.slug,
61
- name: post.title
62
- });
63
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
64
- post.faqs && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_json_ld2.OpinlyJSONLD, { content: JSON.stringify((0, import_json_ld.genFaqJSONLD)(post.faqs)) }),
65
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_json_ld2.OpinlyJSONLD, { content: JSON.stringify((0, import_json_ld.genBlogPostingJSONLD)(post)) }),
66
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_json_ld2.OpinlyBreadCrumbJsonLd, { items: breadcrumbItems }),
67
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "max-w-7xl mx-auto px-4 py-24 flex items-start space-x-8", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-col gap-12 w-full", children: [
68
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
69
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
70
- import_bread_crumbs.BreadCrumbs,
71
- {
72
- breadcrumbs: [
73
- post.folder && {
74
- url: `${import_sdk_config.opinlyConfig.blogPrefix}/${post.folder.slug}`,
75
- name: post.folder.name
76
- }
77
- ]
78
- }
79
- ),
80
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h1", { className: "text-op-heading text-4xl font-bold mb-2 leading-tight", children: post.title }),
81
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "text-sm mb-4 text-op-muted space-x-1", children: [
82
- post.author && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
83
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
84
- import_link.default,
85
- {
86
- href: `${import_sdk_config.opinlyConfig.blogPrefix}/authors/${post.author?.slug}`,
87
- className: "font-medium",
88
- children: post.author?.name
89
- }
90
- ),
91
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-op-muted", children: "\xB7" })
92
- ] }),
93
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
94
- (0, import_reading_time.calculateReadingTime)(content),
95
- " min read ",
96
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "\xB7" })
97
- ] }),
98
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: (0, import_dates.formatDate)(post.firstPublishedAt) || "Today" })
99
- ] })
100
- ] }),
101
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
102
- "div",
103
- {
104
- className: (0, import_merge.cn)(
105
- "flex md:space-x-12 flex-col mx-auto w-full",
106
- "md:flex-row-reverse",
107
- classNames.container
108
- ),
109
- children: [
110
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("article", { className: "w-full md:w-3/4 order-2 md:order-1 flex items-start", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "prose w-full ", children: [
111
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_content.Content, { content, classNames }),
112
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_faq.FAQS, { faqs: post.faqs })
113
- ] }) }),
114
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex md:w-1/4 md:sticky md:top-20", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
115
- import_table_of_contents.TableOfContents,
116
- {
117
- content,
118
- author: post.author,
119
- post,
120
- cta
121
- }
122
- ) })
123
- ]
124
- }
125
- )
126
- ] }) })
127
- ] });
128
- };
129
- // Annotate the CommonJS export names for ESM import in node:
130
- 0 && (module.exports = {
131
- BlogPost
132
- });
133
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/components/blog-post/index.tsx"],"sourcesContent":["import React from \"react\";\nimport { JSONContent } from \"@tiptap/core\";\nimport Link from \"next/link\";\nimport { cn } from \"../../utils/merge\";\nimport { opinlyConfig } from \"../../utils/sdk-config\";\nimport { BlogPostRes } from \"./_types/blog-post\";\nimport { genBlogPostingJSONLD, genFaqJSONLD } from \"./_helpers/json-ld\";\nimport { BlogComponentClassNames } from \"./_types/class-names\";\nimport { FAQS } from \"./_components/faq\";\nimport { calculateReadingTime } from \"./_helpers/reading-time\";\nimport { Content } from \"./_components/content\";\nimport { TableOfContents } from \"./_components/table-of-contents\";\nimport { BreadCrumbs } from \"../bread-crumbs\";\nimport { formatDate } from \"../../utils/dates\";\nimport Script from \"next/script\";\nimport { OpinlyBreadCrumbJsonLd, OpinlyJSONLD } from \"../json-ld\";\n\nexport type BlogPostProps = {\n cta?: React.ReactNode;\n};\n\nexport const BlogPost = ({\n post,\n classNames = {},\n cta,\n}: {\n post: BlogPostRes;\n classNames?: BlogComponentClassNames;\n} & BlogPostProps) => {\n const content = post.content as JSONContent;\n\n const breadcrumbItems = [];\n\n if (post.folder) {\n breadcrumbItems.push({\n slugNoPrefixSlash: post.folder.slug,\n name: post.folder.name,\n });\n }\n\n breadcrumbItems.push({\n slugNoPrefixSlash: post.slug,\n name: post.title,\n });\n\n return (\n <>\n {post.faqs && (\n <OpinlyJSONLD content={JSON.stringify(genFaqJSONLD(post.faqs))} />\n )}\n <OpinlyJSONLD content={JSON.stringify(genBlogPostingJSONLD(post))} />\n <OpinlyBreadCrumbJsonLd items={breadcrumbItems} />\n <div className=\"max-w-7xl mx-auto px-4 py-24 flex items-start space-x-8\">\n <div className=\"flex flex-col gap-12 w-full\">\n <div>\n <BreadCrumbs\n breadcrumbs={[\n post.folder && {\n url: `${opinlyConfig.blogPrefix}/${post.folder.slug}`,\n name: post.folder.name,\n },\n ]}\n />\n\n <h1 className=\"text-op-heading text-4xl font-bold mb-2 leading-tight\">\n {post.title}\n </h1>\n <div className=\"text-sm mb-4 text-op-muted space-x-1\">\n {post.author && (\n <>\n <Link\n href={`${opinlyConfig.blogPrefix}/authors/${post.author?.slug}`}\n className=\"font-medium\"\n >\n {post.author?.name}\n </Link>\n <span className=\"text-op-muted\">·</span>\n </>\n )}\n <span>\n {calculateReadingTime(content)} min read <span>·</span>\n </span>\n <span>\n {formatDate(post.firstPublishedAt as string) || \"Today\"}\n </span>\n </div>\n </div>\n\n <div\n className={cn(\n \"flex md:space-x-12 flex-col mx-auto w-full\",\n \"md:flex-row-reverse\",\n classNames.container\n )}\n >\n <article className=\"w-full md:w-3/4 order-2 md:order-1 flex items-start\">\n <div className=\"prose w-full \">\n <Content content={content} classNames={classNames} />\n <FAQS faqs={post.faqs} />\n </div>\n </article>\n <div className=\"flex md:w-1/4 md:sticky md:top-20\">\n <TableOfContents\n content={content}\n author={post.author}\n post={post}\n cta={cta}\n />\n </div>\n </div>\n </div>\n </div>\n </>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAgDQ;AA9CR,kBAAiB;AACjB,mBAAmB;AACnB,wBAA6B;AAE7B,qBAAmD;AAEnD,iBAAqB;AACrB,0BAAqC;AACrC,qBAAwB;AACxB,+BAAgC;AAChC,0BAA4B;AAC5B,mBAA2B;AAE3B,IAAAA,kBAAqD;AAM9C,MAAM,WAAW,CAAC;AAAA,EACvB;AAAA,EACA,aAAa,CAAC;AAAA,EACd;AACF,MAGsB;AACpB,QAAM,UAAU,KAAK;AAErB,QAAM,kBAAkB,CAAC;AAEzB,MAAI,KAAK,QAAQ;AACf,oBAAgB,KAAK;AAAA,MACnB,mBAAmB,KAAK,OAAO;AAAA,MAC/B,MAAM,KAAK,OAAO;AAAA,IACpB,CAAC;AAAA,EACH;AAEA,kBAAgB,KAAK;AAAA,IACnB,mBAAmB,KAAK;AAAA,IACxB,MAAM,KAAK;AAAA,EACb,CAAC;AAED,SACE,4EACG;AAAA,SAAK,QACJ,4CAAC,gCAAa,SAAS,KAAK,cAAU,6BAAa,KAAK,IAAI,CAAC,GAAG;AAAA,IAElE,4CAAC,gCAAa,SAAS,KAAK,cAAU,qCAAqB,IAAI,CAAC,GAAG;AAAA,IACnE,4CAAC,0CAAuB,OAAO,iBAAiB;AAAA,IAChD,4CAAC,SAAI,WAAU,2DACb,uDAAC,SAAI,WAAU,+BACb;AAAA,mDAAC,SACC;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,aAAa;AAAA,cACX,KAAK,UAAU;AAAA,gBACb,KAAK,GAAG,+BAAa,UAAU,IAAI,KAAK,OAAO,IAAI;AAAA,gBACnD,MAAM,KAAK,OAAO;AAAA,cACpB;AAAA,YACF;AAAA;AAAA,QACF;AAAA,QAEA,4CAAC,QAAG,WAAU,yDACX,eAAK,OACR;AAAA,QACA,6CAAC,SAAI,WAAU,wCACZ;AAAA,eAAK,UACJ,4EACE;AAAA;AAAA,cAAC,YAAAC;AAAA,cAAA;AAAA,gBACC,MAAM,GAAG,+BAAa,UAAU,YAAY,KAAK,QAAQ,IAAI;AAAA,gBAC7D,WAAU;AAAA,gBAET,eAAK,QAAQ;AAAA;AAAA,YAChB;AAAA,YACA,4CAAC,UAAK,WAAU,iBAAgB,kBAAC;AAAA,aACnC;AAAA,UAEF,6CAAC,UACE;AAAA,0DAAqB,OAAO;AAAA,YAAE;AAAA,YAAU,4CAAC,UAAK,kBAAC;AAAA,aAClD;AAAA,UACA,4CAAC,UACE,uCAAW,KAAK,gBAA0B,KAAK,SAClD;AAAA,WACF;AAAA,SACF;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,eAAW;AAAA,YACT;AAAA,YACA;AAAA,YACA,WAAW;AAAA,UACb;AAAA,UAEA;AAAA,wDAAC,aAAQ,WAAU,uDACjB,uDAAC,SAAI,WAAU,iBACb;AAAA,0DAAC,0BAAQ,SAAkB,YAAwB;AAAA,cACnD,4CAAC,mBAAK,MAAM,KAAK,MAAM;AAAA,eACzB,GACF;AAAA,YACA,4CAAC,SAAI,WAAU,qCACb;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA,QAAQ,KAAK;AAAA,gBACb;AAAA,gBACA;AAAA;AAAA,YACF,GACF;AAAA;AAAA;AAAA,MACF;AAAA,OACF,GACF;AAAA,KACF;AAEJ;","names":["import_json_ld","Link"]}
@@ -1,15 +0,0 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import React from 'react';
3
- import { BlogPostRes } from './_types/blog-post.cjs';
4
- import { BlogComponentClassNames } from './_types/class-names.cjs';
5
- import '@opinly/backend';
6
-
7
- type BlogPostProps = {
8
- cta?: React.ReactNode;
9
- };
10
- declare const BlogPost: ({ post, classNames, cta, }: {
11
- post: BlogPostRes;
12
- classNames?: BlogComponentClassNames;
13
- } & BlogPostProps) => react_jsx_runtime.JSX.Element;
14
-
15
- export { BlogPost, type BlogPostProps };
@@ -1,15 +0,0 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import React from 'react';
3
- import { BlogPostRes } from './_types/blog-post.js';
4
- import { BlogComponentClassNames } from './_types/class-names.js';
5
- import '@opinly/backend';
6
-
7
- type BlogPostProps = {
8
- cta?: React.ReactNode;
9
- };
10
- declare const BlogPost: ({ post, classNames, cta, }: {
11
- post: BlogPostRes;
12
- classNames?: BlogComponentClassNames;
13
- } & BlogPostProps) => react_jsx_runtime.JSX.Element;
14
-
15
- export { BlogPost, type BlogPostProps };
@@ -1,99 +0,0 @@
1
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
- import Link from "next/link";
3
- import { cn } from "../../utils/merge";
4
- import { opinlyConfig } from "../../utils/sdk-config";
5
- import { genBlogPostingJSONLD, genFaqJSONLD } from "./_helpers/json-ld";
6
- import { FAQS } from "./_components/faq";
7
- import { calculateReadingTime } from "./_helpers/reading-time";
8
- import { Content } from "./_components/content";
9
- import { TableOfContents } from "./_components/table-of-contents";
10
- import { BreadCrumbs } from "../bread-crumbs";
11
- import { formatDate } from "../../utils/dates";
12
- import { OpinlyBreadCrumbJsonLd, OpinlyJSONLD } from "../json-ld";
13
- const BlogPost = ({
14
- post,
15
- classNames = {},
16
- cta
17
- }) => {
18
- const content = post.content;
19
- const breadcrumbItems = [];
20
- if (post.folder) {
21
- breadcrumbItems.push({
22
- slugNoPrefixSlash: post.folder.slug,
23
- name: post.folder.name
24
- });
25
- }
26
- breadcrumbItems.push({
27
- slugNoPrefixSlash: post.slug,
28
- name: post.title
29
- });
30
- return /* @__PURE__ */ jsxs(Fragment, { children: [
31
- post.faqs && /* @__PURE__ */ jsx(OpinlyJSONLD, { content: JSON.stringify(genFaqJSONLD(post.faqs)) }),
32
- /* @__PURE__ */ jsx(OpinlyJSONLD, { content: JSON.stringify(genBlogPostingJSONLD(post)) }),
33
- /* @__PURE__ */ jsx(OpinlyBreadCrumbJsonLd, { items: breadcrumbItems }),
34
- /* @__PURE__ */ jsx("div", { className: "max-w-7xl mx-auto px-4 py-24 flex items-start space-x-8", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-12 w-full", children: [
35
- /* @__PURE__ */ jsxs("div", { children: [
36
- /* @__PURE__ */ jsx(
37
- BreadCrumbs,
38
- {
39
- breadcrumbs: [
40
- post.folder && {
41
- url: `${opinlyConfig.blogPrefix}/${post.folder.slug}`,
42
- name: post.folder.name
43
- }
44
- ]
45
- }
46
- ),
47
- /* @__PURE__ */ jsx("h1", { className: "text-op-heading text-4xl font-bold mb-2 leading-tight", children: post.title }),
48
- /* @__PURE__ */ jsxs("div", { className: "text-sm mb-4 text-op-muted space-x-1", children: [
49
- post.author && /* @__PURE__ */ jsxs(Fragment, { children: [
50
- /* @__PURE__ */ jsx(
51
- Link,
52
- {
53
- href: `${opinlyConfig.blogPrefix}/authors/${post.author?.slug}`,
54
- className: "font-medium",
55
- children: post.author?.name
56
- }
57
- ),
58
- /* @__PURE__ */ jsx("span", { className: "text-op-muted", children: "\xB7" })
59
- ] }),
60
- /* @__PURE__ */ jsxs("span", { children: [
61
- calculateReadingTime(content),
62
- " min read ",
63
- /* @__PURE__ */ jsx("span", { children: "\xB7" })
64
- ] }),
65
- /* @__PURE__ */ jsx("span", { children: formatDate(post.firstPublishedAt) || "Today" })
66
- ] })
67
- ] }),
68
- /* @__PURE__ */ jsxs(
69
- "div",
70
- {
71
- className: cn(
72
- "flex md:space-x-12 flex-col mx-auto w-full",
73
- "md:flex-row-reverse",
74
- classNames.container
75
- ),
76
- children: [
77
- /* @__PURE__ */ jsx("article", { className: "w-full md:w-3/4 order-2 md:order-1 flex items-start", children: /* @__PURE__ */ jsxs("div", { className: "prose w-full ", children: [
78
- /* @__PURE__ */ jsx(Content, { content, classNames }),
79
- /* @__PURE__ */ jsx(FAQS, { faqs: post.faqs })
80
- ] }) }),
81
- /* @__PURE__ */ jsx("div", { className: "flex md:w-1/4 md:sticky md:top-20", children: /* @__PURE__ */ jsx(
82
- TableOfContents,
83
- {
84
- content,
85
- author: post.author,
86
- post,
87
- cta
88
- }
89
- ) })
90
- ]
91
- }
92
- )
93
- ] }) })
94
- ] });
95
- };
96
- export {
97
- BlogPost
98
- };
99
- //# sourceMappingURL=index.js.map