@opinly/next 0.1.14 → 0.1.16

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 (153) hide show
  1. package/dist/components/author-page/_helpers/json-ld.cjs +2 -0
  2. package/dist/components/author-page/_helpers/json-ld.js +0 -1
  3. package/dist/components/author-page/index.cjs +84 -0
  4. package/dist/components/author-page/{index.mjs.map → index.cjs.map} +1 -1
  5. package/dist/components/author-page/index.js +23 -57
  6. package/dist/components/author-page/index.js.map +1 -1
  7. package/dist/components/authors-page/index.cjs +105 -0
  8. package/dist/components/authors-page/{index.mjs.map → index.cjs.map} +1 -1
  9. package/dist/components/authors-page/index.js +29 -63
  10. package/dist/components/authors-page/index.js.map +1 -1
  11. package/dist/components/blog-post/_components/content.cjs +160 -0
  12. package/dist/components/blog-post/_components/{content.mjs.map → content.cjs.map} +1 -1
  13. package/dist/components/blog-post/_components/content.js +29 -63
  14. package/dist/components/blog-post/_components/content.js.map +1 -1
  15. package/dist/components/blog-post/_components/faq.cjs +39 -0
  16. package/dist/components/blog-post/_components/{faq.mjs.map → faq.cjs.map} +1 -1
  17. package/dist/components/blog-post/_components/faq.js +8 -32
  18. package/dist/components/blog-post/_components/faq.js.map +1 -1
  19. package/dist/components/blog-post/_components/share.cjs +100 -0
  20. package/dist/components/blog-post/_components/{share.mjs.map → share.cjs.map} +1 -1
  21. package/dist/components/blog-post/_components/share.js +24 -58
  22. package/dist/components/blog-post/_components/share.js.map +1 -1
  23. package/dist/components/blog-post/_components/table-of-contents.cjs +82 -0
  24. package/dist/components/blog-post/_components/{table-of-contents.mjs.map → table-of-contents.cjs.map} +1 -1
  25. package/dist/components/blog-post/_components/table-of-contents.js +24 -58
  26. package/dist/components/blog-post/_components/table-of-contents.js.map +1 -1
  27. package/dist/components/blog-post/_helpers/calc-reading-time.cjs +2 -0
  28. package/dist/components/blog-post/_helpers/calc-reading-time.js +0 -1
  29. package/dist/components/blog-post/_helpers/extract-headings.cjs +44 -0
  30. package/dist/components/blog-post/_helpers/{extract-headings.mjs.map → extract-headings.cjs.map} +1 -1
  31. package/dist/components/blog-post/_helpers/extract-headings.js +2 -26
  32. package/dist/components/blog-post/_helpers/extract-headings.js.map +1 -1
  33. package/dist/components/blog-post/_helpers/{json-ld.mjs → json-ld.cjs} +39 -12
  34. package/dist/components/blog-post/_helpers/{json-ld.mjs.map → json-ld.cjs.map} +1 -1
  35. package/dist/components/blog-post/_helpers/json-ld.js +11 -38
  36. package/dist/components/blog-post/_helpers/json-ld.js.map +1 -1
  37. package/dist/components/blog-post/_helpers/reading-time.cjs +50 -0
  38. package/dist/components/blog-post/_helpers/{reading-time.mjs.map → reading-time.cjs.map} +1 -1
  39. package/dist/components/blog-post/_helpers/reading-time.js +2 -27
  40. package/dist/components/blog-post/_helpers/reading-time.js.map +1 -1
  41. package/dist/components/blog-post/_types/blog-post.cjs +17 -0
  42. package/dist/components/blog-post/_types/blog-post.cjs.map +1 -0
  43. package/dist/components/blog-post/_types/blog-post.js +0 -16
  44. package/dist/components/blog-post/_types/blog-post.js.map +1 -1
  45. package/dist/components/blog-post/_types/class-names.cjs +17 -0
  46. package/dist/components/blog-post/_types/class-names.cjs.map +1 -0
  47. package/dist/components/blog-post/_types/class-names.js +0 -16
  48. package/dist/components/blog-post/_types/class-names.js.map +1 -1
  49. package/dist/components/blog-post/index.cjs +148 -0
  50. package/dist/components/blog-post/{index.mjs.map → index.cjs.map} +1 -1
  51. package/dist/components/blog-post/index.js +47 -77
  52. package/dist/components/blog-post/index.js.map +1 -1
  53. package/dist/components/bread-crumbs.cjs +60 -0
  54. package/dist/components/{bread-crumbs.mjs.map → bread-crumbs.cjs.map} +1 -1
  55. package/dist/components/bread-crumbs.js +13 -47
  56. package/dist/components/bread-crumbs.js.map +1 -1
  57. package/dist/components/folder-page/index.cjs +61 -0
  58. package/dist/components/folder-page/{index.mjs.map → index.cjs.map} +1 -1
  59. package/dist/components/folder-page/index.js +12 -36
  60. package/dist/components/folder-page/index.js.map +1 -1
  61. package/dist/components/home-page/folders.cjs +98 -0
  62. package/dist/components/home-page/{folders.mjs.map → folders.cjs.map} +1 -1
  63. package/dist/components/home-page/folders.js +29 -64
  64. package/dist/components/home-page/folders.js.map +1 -1
  65. package/dist/components/home-page/index.cjs +44 -0
  66. package/dist/components/home-page/{index.mjs.map → index.cjs.map} +1 -1
  67. package/dist/components/home-page/index.js +11 -35
  68. package/dist/components/home-page/index.js.map +1 -1
  69. package/dist/components/home-page/pagination.cjs +91 -0
  70. package/dist/components/home-page/{pagination.mjs.map → pagination.cjs.map} +1 -1
  71. package/dist/components/home-page/pagination.js +9 -43
  72. package/dist/components/home-page/pagination.js.map +1 -1
  73. package/dist/components/home-page/top-posts.cjs +52 -0
  74. package/dist/components/home-page/{top-posts.mjs.map → top-posts.cjs.map} +1 -1
  75. package/dist/components/home-page/top-posts.js +10 -34
  76. package/dist/components/home-page/top-posts.js.map +1 -1
  77. package/dist/components/not-found.cjs +60 -0
  78. package/dist/components/{not-found.mjs.map → not-found.cjs.map} +1 -1
  79. package/dist/components/not-found.js +15 -49
  80. package/dist/components/not-found.js.map +1 -1
  81. package/dist/components/opinly-blog.cjs +57 -0
  82. package/dist/components/{opinly-blog.mjs.map → opinly-blog.cjs.map} +1 -1
  83. package/dist/components/opinly-blog.js +15 -39
  84. package/dist/components/opinly-blog.js.map +1 -1
  85. package/dist/components/post-preview.cjs +112 -0
  86. package/dist/components/{post-preview.mjs.map → post-preview.cjs.map} +1 -1
  87. package/dist/components/post-preview.js +42 -77
  88. package/dist/components/post-preview.js.map +1 -1
  89. package/dist/index.cjs +25 -0
  90. package/dist/index.cjs.map +1 -0
  91. package/dist/index.d.cts +3 -0
  92. package/dist/index.d.ts +3 -0
  93. package/dist/index.js +2 -22
  94. package/dist/index.js.map +1 -1
  95. package/dist/utils/dates.cjs +33 -0
  96. package/dist/utils/{dates.mjs.map → dates.cjs.map} +1 -1
  97. package/dist/utils/dates.js +2 -26
  98. package/dist/utils/dates.js.map +1 -1
  99. package/dist/utils/generate-metadata.cjs +62 -0
  100. package/dist/utils/generate-metadata.cjs.map +1 -0
  101. package/dist/utils/generate-metadata.js +9 -31
  102. package/dist/utils/generate-metadata.js.map +1 -1
  103. package/dist/utils/merge.cjs +33 -0
  104. package/dist/utils/{merge.mjs.map → merge.cjs.map} +1 -1
  105. package/dist/utils/merge.js +5 -29
  106. package/dist/utils/merge.js.map +1 -1
  107. package/dist/utils/sdk-config.cjs +51 -0
  108. package/dist/utils/sdk-config.cjs.map +1 -0
  109. package/dist/utils/sdk-config.d.cts +10 -2
  110. package/dist/utils/sdk-config.d.ts +10 -2
  111. package/dist/utils/sdk-config.js +3 -34
  112. package/dist/utils/sdk-config.js.map +1 -1
  113. package/dist/utils/with-opinly-config.cjs +115 -0
  114. package/dist/utils/with-opinly-config.cjs.map +1 -0
  115. package/dist/utils/with-opinly-config.d.cts +39 -0
  116. package/dist/utils/with-opinly-config.d.ts +39 -0
  117. package/dist/utils/with-opinly-config.js +91 -0
  118. package/dist/utils/with-opinly-config.js.map +1 -0
  119. package/package.json +3 -2
  120. package/dist/components/author-page/_helpers/json-ld.mjs +0 -1
  121. package/dist/components/author-page/index.mjs +0 -50
  122. package/dist/components/authors-page/index.mjs +0 -71
  123. package/dist/components/blog-post/_components/content.mjs +0 -126
  124. package/dist/components/blog-post/_components/faq.mjs +0 -15
  125. package/dist/components/blog-post/_components/share.mjs +0 -66
  126. package/dist/components/blog-post/_components/table-of-contents.mjs +0 -48
  127. package/dist/components/blog-post/_helpers/calc-reading-time.mjs +0 -1
  128. package/dist/components/blog-post/_helpers/extract-headings.mjs +0 -20
  129. package/dist/components/blog-post/_helpers/reading-time.mjs +0 -25
  130. package/dist/components/blog-post/_types/blog-post.mjs +0 -1
  131. package/dist/components/blog-post/_types/blog-post.mjs.map +0 -1
  132. package/dist/components/blog-post/_types/class-names.mjs +0 -1
  133. package/dist/components/blog-post/_types/class-names.mjs.map +0 -1
  134. package/dist/components/blog-post/index.mjs +0 -118
  135. package/dist/components/bread-crumbs.mjs +0 -26
  136. package/dist/components/folder-page/index.mjs +0 -37
  137. package/dist/components/home-page/folders.mjs +0 -63
  138. package/dist/components/home-page/index.mjs +0 -20
  139. package/dist/components/home-page/pagination.mjs +0 -57
  140. package/dist/components/home-page/top-posts.mjs +0 -28
  141. package/dist/components/not-found.mjs +0 -26
  142. package/dist/components/opinly-blog.mjs +0 -33
  143. package/dist/components/post-preview.mjs +0 -77
  144. package/dist/index.mjs +0 -2
  145. package/dist/index.mjs.map +0 -1
  146. package/dist/utils/dates.mjs +0 -9
  147. package/dist/utils/generate-metadata.mjs +0 -36
  148. package/dist/utils/generate-metadata.mjs.map +0 -1
  149. package/dist/utils/merge.mjs +0 -9
  150. package/dist/utils/sdk-config.mjs +0 -32
  151. package/dist/utils/sdk-config.mjs.map +0 -1
  152. /package/dist/components/author-page/_helpers/{json-ld.mjs.map → json-ld.cjs.map} +0 -0
  153. /package/dist/components/blog-post/_helpers/{calc-reading-time.mjs.map → calc-reading-time.cjs.map} +0 -0
@@ -1,134 +1,105 @@
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_script = __toESM(require("next/script"), 1);
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 {
6
+ genBlogPostingJSONLD,
7
+ genBreadcrumbJSONLD,
8
+ genFaqJSONLD
9
+ } from "./_helpers/json-ld";
10
+ import { FAQS } from "./_components/faq";
11
+ import { calculateReadingTime } from "./_helpers/reading-time";
12
+ import { Content } from "./_components/content";
13
+ import { TableOfContents } from "./_components/table-of-contents";
14
+ import { BreadCrumbs } from "../bread-crumbs";
15
+ import { formatDate } from "../../utils/dates";
16
+ import Script from "next/script";
46
17
  const BlogPost = ({
47
18
  post,
48
19
  classNames = {}
49
20
  }) => {
50
21
  const content = post.content;
51
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
52
- post.faqs && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
53
- import_script.default,
22
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
23
+ post.faqs && /* @__PURE__ */ jsx(
24
+ Script,
54
25
  {
55
26
  strategy: "beforeInteractive",
56
27
  type: "application/ld+json",
57
28
  dangerouslySetInnerHTML: {
58
- __html: JSON.stringify((0, import_json_ld.genFaqJSONLD)(post.faqs)).replace(
29
+ __html: JSON.stringify(genFaqJSONLD(post.faqs)).replace(
59
30
  /</g,
60
31
  "\\u003c"
61
32
  )
62
33
  }
63
34
  }
64
35
  ),
65
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
66
- import_script.default,
36
+ /* @__PURE__ */ jsx(
37
+ Script,
67
38
  {
68
39
  strategy: "beforeInteractive",
69
40
  type: "application/ld+json",
70
41
  dangerouslySetInnerHTML: {
71
- __html: JSON.stringify((0, import_json_ld.genBlogPostingJSONLD)(post))
42
+ __html: JSON.stringify(genBlogPostingJSONLD(post))
72
43
  }
73
44
  }
74
45
  ),
75
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
76
- import_script.default,
46
+ /* @__PURE__ */ jsx(
47
+ Script,
77
48
  {
78
49
  strategy: "beforeInteractive",
79
50
  type: "application/ld+json",
80
51
  dangerouslySetInnerHTML: {
81
- __html: JSON.stringify((0, import_json_ld.genBreadcrumbJSONLD)(post))
52
+ __html: JSON.stringify(genBreadcrumbJSONLD(post))
82
53
  }
83
54
  }
84
55
  ),
85
- /* @__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: [
86
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "bg-orange-600", children: [
87
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
88
- import_bread_crumbs.BreadCrumbs,
56
+ /* @__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: [
57
+ /* @__PURE__ */ jsxs("div", { className: "bg-orange-600", children: [
58
+ /* @__PURE__ */ jsx(
59
+ BreadCrumbs,
89
60
  {
90
61
  breadcrumbs: [
91
62
  post.folder && {
92
- url: `${import_sdk_config.opinlyConfig.blogPrefix}/${post.folder.slug}`,
63
+ url: `${opinlyConfig.blogPrefix}/${post.folder.slug}`,
93
64
  name: post.folder.name
94
65
  }
95
66
  ]
96
67
  }
97
68
  ),
98
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h1", { className: "text-4xl font-bold mb-2 leading-tight", children: post.title }),
99
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "text-sm mb-4", children: [
69
+ /* @__PURE__ */ jsx("h1", { className: "text-4xl font-bold mb-2 leading-tight", children: post.title }),
70
+ /* @__PURE__ */ jsxs("div", { className: "text-sm mb-4", children: [
100
71
  "Author:",
101
72
  " ",
102
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
103
- import_link.default,
73
+ /* @__PURE__ */ jsx(
74
+ Link,
104
75
  {
105
- href: `${import_sdk_config.opinlyConfig.blogPrefix}/authors/${post.author?.slug}`,
76
+ href: `${opinlyConfig.blogPrefix}/authors/${post.author?.slug}`,
106
77
  className: "font-medium",
107
78
  children: post.author?.name
108
79
  }
109
80
  ),
110
81
  " ",
111
82
  "\xB7 ",
112
- (0, import_reading_time.calculateReadingTime)(content),
83
+ calculateReadingTime(content),
113
84
  " min read \xB7",
114
85
  " ",
115
- (0, import_dates.formatDate)(post.firstPublishedAt) || "Today"
86
+ formatDate(post.firstPublishedAt) || "Today"
116
87
  ] })
117
88
  ] }),
118
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
89
+ /* @__PURE__ */ jsxs(
119
90
  "div",
120
91
  {
121
- className: (0, import_merge.cn)(
92
+ className: cn(
122
93
  "flex flex-col-reverse md:flex-row mx-auto mt-10 gap-12 relative w-full ",
123
94
  classNames.container
124
95
  ),
125
96
  children: [
126
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("article", { className: "w-full lg:w-2/3 order-2 lg:order-1 flex items-start space-x-4", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "prose w-full", children: [
127
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_content.Content, { content, classNames }),
128
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_faq.FAQS, { faqs: post.faqs })
97
+ /* @__PURE__ */ jsx("article", { className: "w-full lg:w-2/3 order-2 lg:order-1 flex items-start space-x-4", children: /* @__PURE__ */ jsxs("div", { className: "prose w-full", children: [
98
+ /* @__PURE__ */ jsx(Content, { content, classNames }),
99
+ /* @__PURE__ */ jsx(FAQS, { faqs: post.faqs })
129
100
  ] }) }),
130
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "block md:min-w-72 md:sticky md:top-20 md:self-start", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
131
- import_table_of_contents.TableOfContents,
101
+ /* @__PURE__ */ jsx("div", { className: "block md:min-w-72 md:sticky md:top-20 md:self-start", children: /* @__PURE__ */ jsx(
102
+ TableOfContents,
132
103
  {
133
104
  content,
134
105
  author: post.author,
@@ -141,8 +112,7 @@ const BlogPost = ({
141
112
  ] }) })
142
113
  ] });
143
114
  };
144
- // Annotate the CommonJS export names for ESM import in node:
145
- 0 && (module.exports = {
115
+ export {
146
116
  BlogPost
147
- });
117
+ };
148
118
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
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 {\n genBlogPostingJSONLD,\n genBreadcrumbJSONLD,\n genFaqJSONLD,\n} 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\";\n\nexport const BlogPost = ({\n post,\n classNames = {},\n}: {\n post: BlogPostRes;\n classNames?: BlogComponentClassNames;\n notFoundComponent?: React.ReactNode;\n}) => {\n const content = post.content as JSONContent;\n\n return (\n <>\n {/* <Head>\n <> */}\n {post.faqs && (\n <Script\n strategy=\"beforeInteractive\"\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{\n __html: JSON.stringify(genFaqJSONLD(post.faqs)).replace(\n /</g,\n \"\\\\u003c\"\n ),\n }}\n />\n )}\n <Script\n strategy=\"beforeInteractive\"\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{\n __html: JSON.stringify(genBlogPostingJSONLD(post)),\n }}\n />\n <Script\n strategy=\"beforeInteractive\"\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{\n __html: JSON.stringify(genBreadcrumbJSONLD(post)),\n }}\n />\n {/* </>\n </Head> */}\n\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 className=\"bg-orange-600\">\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-4xl font-bold mb-2 leading-tight\">\n {post.title}\n </h1>\n <div className=\"text-sm mb-4\">\n Author:{\" \"}\n <Link\n href={`${opinlyConfig.blogPrefix}/authors/${post.author?.slug}`}\n className=\"font-medium\"\n >\n {post.author?.name}\n </Link>{\" \"}\n · {calculateReadingTime(content)} min read ·{\" \"}\n {formatDate(post.firstPublishedAt as string) || \"Today\"}\n </div>\n </div>\n\n <div\n className={cn(\n \"flex flex-col-reverse md:flex-row mx-auto mt-10 gap-12 relative w-full \",\n classNames.container\n )}\n >\n <article className=\"w-full lg:w-2/3 order-2 lg:order-1 flex items-start space-x-4\">\n <div className=\"prose w-full\">\n <Content content={content} classNames={classNames} />\n <FAQS faqs={post.faqs} />\n </div>\n </article>\n <div className=\"block md:min-w-72 md:sticky md:top-20 md:self-start\">\n <TableOfContents\n content={content}\n author={post.author}\n post={post}\n />\n </div>\n </div>\n </div>\n {/* <div className=\"hidden md:block \">\n <TableOfContents\n content={content}\n author={post.post.author}\n post={post}\n />\n </div> */}\n </div>\n </>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA+BI;AA7BJ,kBAAiB;AACjB,mBAAmB;AACnB,wBAA6B;AAE7B,qBAIO;AAEP,iBAAqB;AACrB,0BAAqC;AACrC,qBAAwB;AACxB,+BAAgC;AAChC,0BAA4B;AAC5B,mBAA2B;AAC3B,oBAAmB;AAEZ,MAAM,WAAW,CAAC;AAAA,EACvB;AAAA,EACA,aAAa,CAAC;AAChB,MAIM;AACJ,QAAM,UAAU,KAAK;AAErB,SACE,4EAGG;AAAA,SAAK,QACJ;AAAA,MAAC,cAAAA;AAAA,MAAA;AAAA,QACC,UAAS;AAAA,QACT,MAAK;AAAA,QACL,yBAAyB;AAAA,UACvB,QAAQ,KAAK,cAAU,6BAAa,KAAK,IAAI,CAAC,EAAE;AAAA,YAC9C;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA;AAAA,IACF;AAAA,IAEF;AAAA,MAAC,cAAAA;AAAA,MAAA;AAAA,QACC,UAAS;AAAA,QACT,MAAK;AAAA,QACL,yBAAyB;AAAA,UACvB,QAAQ,KAAK,cAAU,qCAAqB,IAAI,CAAC;AAAA,QACnD;AAAA;AAAA,IACF;AAAA,IACA;AAAA,MAAC,cAAAA;AAAA,MAAA;AAAA,QACC,UAAS;AAAA,QACT,MAAK;AAAA,QACL,yBAAyB;AAAA,UACvB,QAAQ,KAAK,cAAU,oCAAoB,IAAI,CAAC;AAAA,QAClD;AAAA;AAAA,IACF;AAAA,IAIA,4CAAC,SAAI,WAAU,2DACb,uDAAC,SAAI,WAAU,+BACb;AAAA,mDAAC,SAAI,WAAU,iBACb;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,yCACX,eAAK,OACR;AAAA,QACA,6CAAC,SAAI,WAAU,gBAAe;AAAA;AAAA,UACpB;AAAA,UACR;AAAA,YAAC,YAAAC;AAAA,YAAA;AAAA,cACC,MAAM,GAAG,+BAAa,UAAU,YAAY,KAAK,QAAQ,IAAI;AAAA,cAC7D,WAAU;AAAA,cAET,eAAK,QAAQ;AAAA;AAAA,UAChB;AAAA,UAAQ;AAAA,UAAI;AAAA,cACT,0CAAqB,OAAO;AAAA,UAAE;AAAA,UAAY;AAAA,cAC5C,yBAAW,KAAK,gBAA0B,KAAK;AAAA,WAClD;AAAA,SACF;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,eAAW;AAAA,YACT;AAAA,YACA,WAAW;AAAA,UACb;AAAA,UAEA;AAAA,wDAAC,aAAQ,WAAU,iEACjB,uDAAC,SAAI,WAAU,gBACb;AAAA,0DAAC,0BAAQ,SAAkB,YAAwB;AAAA,cACnD,4CAAC,mBAAK,MAAM,KAAK,MAAM;AAAA,eACzB,GACF;AAAA,YACA,4CAAC,SAAI,WAAU,uDACb;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA,QAAQ,KAAK;AAAA,gBACb;AAAA;AAAA,YACF,GACF;AAAA;AAAA;AAAA,MACF;AAAA,OACF,GAQF;AAAA,KACF;AAEJ;","names":["Script","Link"]}
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 {\n genBlogPostingJSONLD,\n genBreadcrumbJSONLD,\n genFaqJSONLD,\n} 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\";\n\nexport const BlogPost = ({\n post,\n classNames = {},\n}: {\n post: BlogPostRes;\n classNames?: BlogComponentClassNames;\n notFoundComponent?: React.ReactNode;\n}) => {\n const content = post.content as JSONContent;\n\n return (\n <>\n {/* <Head>\n <> */}\n {post.faqs && (\n <Script\n strategy=\"beforeInteractive\"\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{\n __html: JSON.stringify(genFaqJSONLD(post.faqs)).replace(\n /</g,\n \"\\\\u003c\"\n ),\n }}\n />\n )}\n <Script\n strategy=\"beforeInteractive\"\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{\n __html: JSON.stringify(genBlogPostingJSONLD(post)),\n }}\n />\n <Script\n strategy=\"beforeInteractive\"\n type=\"application/ld+json\"\n dangerouslySetInnerHTML={{\n __html: JSON.stringify(genBreadcrumbJSONLD(post)),\n }}\n />\n {/* </>\n </Head> */}\n\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 className=\"bg-orange-600\">\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-4xl font-bold mb-2 leading-tight\">\n {post.title}\n </h1>\n <div className=\"text-sm mb-4\">\n Author:{\" \"}\n <Link\n href={`${opinlyConfig.blogPrefix}/authors/${post.author?.slug}`}\n className=\"font-medium\"\n >\n {post.author?.name}\n </Link>{\" \"}\n · {calculateReadingTime(content)} min read ·{\" \"}\n {formatDate(post.firstPublishedAt as string) || \"Today\"}\n </div>\n </div>\n\n <div\n className={cn(\n \"flex flex-col-reverse md:flex-row mx-auto mt-10 gap-12 relative w-full \",\n classNames.container\n )}\n >\n <article className=\"w-full lg:w-2/3 order-2 lg:order-1 flex items-start space-x-4\">\n <div className=\"prose w-full\">\n <Content content={content} classNames={classNames} />\n <FAQS faqs={post.faqs} />\n </div>\n </article>\n <div className=\"block md:min-w-72 md:sticky md:top-20 md:self-start\">\n <TableOfContents\n content={content}\n author={post.author}\n post={post}\n />\n </div>\n </div>\n </div>\n {/* <div className=\"hidden md:block \">\n <TableOfContents\n content={content}\n author={post.post.author}\n post={post}\n />\n </div> */}\n </div>\n </>\n );\n};\n"],"mappings":"AA+BI,mBAII,KA2CI,YA/CR;AA7BJ,OAAO,UAAU;AACjB,SAAS,UAAU;AACnB,SAAS,oBAAoB;AAE7B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,YAAY;AACrB,SAAS,4BAA4B;AACrC,SAAS,eAAe;AACxB,SAAS,uBAAuB;AAChC,SAAS,mBAAmB;AAC5B,SAAS,kBAAkB;AAC3B,OAAO,YAAY;AAEZ,MAAM,WAAW,CAAC;AAAA,EACvB;AAAA,EACA,aAAa,CAAC;AAChB,MAIM;AACJ,QAAM,UAAU,KAAK;AAErB,SACE,iCAGG;AAAA,SAAK,QACJ;AAAA,MAAC;AAAA;AAAA,QACC,UAAS;AAAA,QACT,MAAK;AAAA,QACL,yBAAyB;AAAA,UACvB,QAAQ,KAAK,UAAU,aAAa,KAAK,IAAI,CAAC,EAAE;AAAA,YAC9C;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA;AAAA,IACF;AAAA,IAEF;AAAA,MAAC;AAAA;AAAA,QACC,UAAS;AAAA,QACT,MAAK;AAAA,QACL,yBAAyB;AAAA,UACvB,QAAQ,KAAK,UAAU,qBAAqB,IAAI,CAAC;AAAA,QACnD;AAAA;AAAA,IACF;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,UAAS;AAAA,QACT,MAAK;AAAA,QACL,yBAAyB;AAAA,UACvB,QAAQ,KAAK,UAAU,oBAAoB,IAAI,CAAC;AAAA,QAClD;AAAA;AAAA,IACF;AAAA,IAIA,oBAAC,SAAI,WAAU,2DACb,+BAAC,SAAI,WAAU,+BACb;AAAA,2BAAC,SAAI,WAAU,iBACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,aAAa;AAAA,cACX,KAAK,UAAU;AAAA,gBACb,KAAK,GAAG,aAAa,UAAU,IAAI,KAAK,OAAO,IAAI;AAAA,gBACnD,MAAM,KAAK,OAAO;AAAA,cACpB;AAAA,YACF;AAAA;AAAA,QACF;AAAA,QAEA,oBAAC,QAAG,WAAU,yCACX,eAAK,OACR;AAAA,QACA,qBAAC,SAAI,WAAU,gBAAe;AAAA;AAAA,UACpB;AAAA,UACR;AAAA,YAAC;AAAA;AAAA,cACC,MAAM,GAAG,aAAa,UAAU,YAAY,KAAK,QAAQ,IAAI;AAAA,cAC7D,WAAU;AAAA,cAET,eAAK,QAAQ;AAAA;AAAA,UAChB;AAAA,UAAQ;AAAA,UAAI;AAAA,UACT,qBAAqB,OAAO;AAAA,UAAE;AAAA,UAAY;AAAA,UAC5C,WAAW,KAAK,gBAA0B,KAAK;AAAA,WAClD;AAAA,SACF;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,YACT;AAAA,YACA,WAAW;AAAA,UACb;AAAA,UAEA;AAAA,gCAAC,aAAQ,WAAU,iEACjB,+BAAC,SAAI,WAAU,gBACb;AAAA,kCAAC,WAAQ,SAAkB,YAAwB;AAAA,cACnD,oBAAC,QAAK,MAAM,KAAK,MAAM;AAAA,eACzB,GACF;AAAA,YACA,oBAAC,SAAI,WAAU,uDACb;AAAA,cAAC;AAAA;AAAA,gBACC;AAAA,gBACA,QAAQ,KAAK;AAAA,gBACb;AAAA;AAAA,YACF,GACF;AAAA;AAAA;AAAA,MACF;AAAA,OACF,GAQF;AAAA,KACF;AAEJ;","names":[]}
@@ -0,0 +1,60 @@
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 bread_crumbs_exports = {};
30
+ __export(bread_crumbs_exports, {
31
+ BreadCrumbs: () => BreadCrumbs
32
+ });
33
+ module.exports = __toCommonJS(bread_crumbs_exports);
34
+ var import_jsx_runtime = require("react/jsx-runtime");
35
+ var import_link = __toESM(require("next/link"), 1);
36
+ var import_react = require("react");
37
+ var import_sdk_config = require("../utils/sdk-config");
38
+ const BreadCrumbs = ({
39
+ breadcrumbs
40
+ }) => {
41
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("nav", { className: "text-sm text-orange-100 text-muted-foreground mb-4", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("ol", { className: "list-reset flex space-x-2", children: [
42
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_link.default, { href: "/", className: "font-bold", children: import_sdk_config.opinlyConfig.siteName }),
43
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "/" }),
44
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_link.default, { href: import_sdk_config.opinlyConfig.blogPrefix, className: "font-bold", children: "Blog" }),
45
+ breadcrumbs?.map((breadcrumb, index) => {
46
+ if (!breadcrumb) {
47
+ return null;
48
+ }
49
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_react.Fragment, { children: [
50
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "/" }),
51
+ breadcrumb.url ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_link.default, { href: breadcrumb.url, className: "font-bold", children: breadcrumb.name }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "font-bold", children: breadcrumb.name })
52
+ ] }, index);
53
+ })
54
+ ] }) });
55
+ };
56
+ // Annotate the CommonJS export names for ESM import in node:
57
+ 0 && (module.exports = {
58
+ BreadCrumbs
59
+ });
60
+ //# sourceMappingURL=bread-crumbs.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/bread-crumbs.tsx"],"sourcesContent":["import Link from \"next/link\";\nimport { Fragment } from \"react\";\nimport { opinlyConfig } from \"../utils/sdk-config\";\n\nexport const BreadCrumbs = ({\n breadcrumbs,\n}: {\n breadcrumbs?: (\n | {\n name: string;\n url?: string;\n }\n | null\n | undefined\n )[];\n}) => {\n return (\n <nav className=\"text-sm text-orange-100 text-muted-foreground mb-4\">\n <ol className=\"list-reset flex space-x-2\">\n <Link href=\"/\" className=\"font-bold\">\n {opinlyConfig.siteName}\n </Link>\n <span>/</span>\n <Link href={opinlyConfig.blogPrefix} className=\"font-bold\">\n Blog\n </Link>\n {breadcrumbs?.map((breadcrumb, index) => {\n if (!breadcrumb) {\n return null;\n }\n\n return (\n <Fragment key={index}>\n <span>/</span>\n {breadcrumb.url ? (\n <Link href={breadcrumb.url} className=\"font-bold\">\n {breadcrumb.name}\n </Link>\n ) : (\n <span className=\"font-bold\">{breadcrumb.name}</span>\n )}\n </Fragment>\n );\n })}\n </ol>\n </nav>\n );\n};\n"],"mappings":"AAmBQ,cAaI,YAbJ;AAnBR,OAAO,UAAU;AACjB,SAAS,gBAAgB;AACzB,SAAS,oBAAoB;AAEtB,MAAM,cAAc,CAAC;AAAA,EAC1B;AACF,MASM;AACJ,SACE,oBAAC,SAAI,WAAU,sDACb,+BAAC,QAAG,WAAU,6BACZ;AAAA,wBAAC,QAAK,MAAK,KAAI,WAAU,aACtB,uBAAa,UAChB;AAAA,IACA,oBAAC,UAAK,eAAC;AAAA,IACP,oBAAC,QAAK,MAAM,aAAa,YAAY,WAAU,aAAY,kBAE3D;AAAA,IACC,aAAa,IAAI,CAAC,YAAY,UAAU;AACvC,UAAI,CAAC,YAAY;AACf,eAAO;AAAA,MACT;AAEA,aACE,qBAAC,YACC;AAAA,4BAAC,UAAK,eAAC;AAAA,QACN,WAAW,MACV,oBAAC,QAAK,MAAM,WAAW,KAAK,WAAU,aACnC,qBAAW,MACd,IAEA,oBAAC,UAAK,WAAU,aAAa,qBAAW,MAAK;AAAA,WAPlC,KASf;AAAA,IAEJ,CAAC;AAAA,KACH,GACF;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../src/components/bread-crumbs.tsx"],"sourcesContent":["import Link from \"next/link\";\nimport { Fragment } from \"react\";\nimport { opinlyConfig } from \"../utils/sdk-config\";\n\nexport const BreadCrumbs = ({\n breadcrumbs,\n}: {\n breadcrumbs?: (\n | {\n name: string;\n url?: string;\n }\n | null\n | undefined\n )[];\n}) => {\n return (\n <nav className=\"text-sm text-orange-100 text-muted-foreground mb-4\">\n <ol className=\"list-reset flex space-x-2\">\n <Link href=\"/\" className=\"font-bold\">\n {opinlyConfig.siteName}\n </Link>\n <span>/</span>\n <Link href={opinlyConfig.blogPrefix} className=\"font-bold\">\n Blog\n </Link>\n {breadcrumbs?.map((breadcrumb, index) => {\n if (!breadcrumb) {\n return null;\n }\n\n return (\n <Fragment key={index}>\n <span>/</span>\n {breadcrumb.url ? (\n <Link href={breadcrumb.url} className=\"font-bold\">\n {breadcrumb.name}\n </Link>\n ) : (\n <span className=\"font-bold\">{breadcrumb.name}</span>\n )}\n </Fragment>\n );\n })}\n </ol>\n </nav>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBQ;AAnBR,kBAAiB;AACjB,mBAAyB;AACzB,wBAA6B;AAEtB,MAAM,cAAc,CAAC;AAAA,EAC1B;AACF,MASM;AACJ,SACE,4CAAC,SAAI,WAAU,sDACb,uDAAC,QAAG,WAAU,6BACZ;AAAA,gDAAC,YAAAA,SAAA,EAAK,MAAK,KAAI,WAAU,aACtB,yCAAa,UAChB;AAAA,IACA,4CAAC,UAAK,eAAC;AAAA,IACP,4CAAC,YAAAA,SAAA,EAAK,MAAM,+BAAa,YAAY,WAAU,aAAY,kBAE3D;AAAA,IACC,aAAa,IAAI,CAAC,YAAY,UAAU;AACvC,UAAI,CAAC,YAAY;AACf,eAAO;AAAA,MACT;AAEA,aACE,6CAAC,yBACC;AAAA,oDAAC,UAAK,eAAC;AAAA,QACN,WAAW,MACV,4CAAC,YAAAA,SAAA,EAAK,MAAM,WAAW,KAAK,WAAU,aACnC,qBAAW,MACd,IAEA,4CAAC,UAAK,WAAU,aAAa,qBAAW,MAAK;AAAA,WAPlC,KASf;AAAA,IAEJ,CAAC;AAAA,KACH,GACF;AAEJ;","names":["Link"]}
@@ -1,60 +1,26 @@
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 bread_crumbs_exports = {};
30
- __export(bread_crumbs_exports, {
31
- BreadCrumbs: () => BreadCrumbs
32
- });
33
- module.exports = __toCommonJS(bread_crumbs_exports);
34
- var import_jsx_runtime = require("react/jsx-runtime");
35
- var import_link = __toESM(require("next/link"), 1);
36
- var import_react = require("react");
37
- var import_sdk_config = require("../utils/sdk-config");
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import Link from "next/link";
3
+ import { Fragment } from "react";
4
+ import { opinlyConfig } from "../utils/sdk-config";
38
5
  const BreadCrumbs = ({
39
6
  breadcrumbs
40
7
  }) => {
41
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("nav", { className: "text-sm text-orange-100 text-muted-foreground mb-4", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("ol", { className: "list-reset flex space-x-2", children: [
42
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_link.default, { href: "/", className: "font-bold", children: import_sdk_config.opinlyConfig.siteName }),
43
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "/" }),
44
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_link.default, { href: import_sdk_config.opinlyConfig.blogPrefix, className: "font-bold", children: "Blog" }),
8
+ return /* @__PURE__ */ jsx("nav", { className: "text-sm text-orange-100 text-muted-foreground mb-4", children: /* @__PURE__ */ jsxs("ol", { className: "list-reset flex space-x-2", children: [
9
+ /* @__PURE__ */ jsx(Link, { href: "/", className: "font-bold", children: opinlyConfig.siteName }),
10
+ /* @__PURE__ */ jsx("span", { children: "/" }),
11
+ /* @__PURE__ */ jsx(Link, { href: opinlyConfig.blogPrefix, className: "font-bold", children: "Blog" }),
45
12
  breadcrumbs?.map((breadcrumb, index) => {
46
13
  if (!breadcrumb) {
47
14
  return null;
48
15
  }
49
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_react.Fragment, { children: [
50
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: "/" }),
51
- breadcrumb.url ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_link.default, { href: breadcrumb.url, className: "font-bold", children: breadcrumb.name }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "font-bold", children: breadcrumb.name })
16
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
17
+ /* @__PURE__ */ jsx("span", { children: "/" }),
18
+ breadcrumb.url ? /* @__PURE__ */ jsx(Link, { href: breadcrumb.url, className: "font-bold", children: breadcrumb.name }) : /* @__PURE__ */ jsx("span", { className: "font-bold", children: breadcrumb.name })
52
19
  ] }, index);
53
20
  })
54
21
  ] }) });
55
22
  };
56
- // Annotate the CommonJS export names for ESM import in node:
57
- 0 && (module.exports = {
23
+ export {
58
24
  BreadCrumbs
59
- });
25
+ };
60
26
  //# sourceMappingURL=bread-crumbs.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/components/bread-crumbs.tsx"],"sourcesContent":["import Link from \"next/link\";\nimport { Fragment } from \"react\";\nimport { opinlyConfig } from \"../utils/sdk-config\";\n\nexport const BreadCrumbs = ({\n breadcrumbs,\n}: {\n breadcrumbs?: (\n | {\n name: string;\n url?: string;\n }\n | null\n | undefined\n )[];\n}) => {\n return (\n <nav className=\"text-sm text-orange-100 text-muted-foreground mb-4\">\n <ol className=\"list-reset flex space-x-2\">\n <Link href=\"/\" className=\"font-bold\">\n {opinlyConfig.siteName}\n </Link>\n <span>/</span>\n <Link href={opinlyConfig.blogPrefix} className=\"font-bold\">\n Blog\n </Link>\n {breadcrumbs?.map((breadcrumb, index) => {\n if (!breadcrumb) {\n return null;\n }\n\n return (\n <Fragment key={index}>\n <span>/</span>\n {breadcrumb.url ? (\n <Link href={breadcrumb.url} className=\"font-bold\">\n {breadcrumb.name}\n </Link>\n ) : (\n <span className=\"font-bold\">{breadcrumb.name}</span>\n )}\n </Fragment>\n );\n })}\n </ol>\n </nav>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBQ;AAnBR,kBAAiB;AACjB,mBAAyB;AACzB,wBAA6B;AAEtB,MAAM,cAAc,CAAC;AAAA,EAC1B;AACF,MASM;AACJ,SACE,4CAAC,SAAI,WAAU,sDACb,uDAAC,QAAG,WAAU,6BACZ;AAAA,gDAAC,YAAAA,SAAA,EAAK,MAAK,KAAI,WAAU,aACtB,yCAAa,UAChB;AAAA,IACA,4CAAC,UAAK,eAAC;AAAA,IACP,4CAAC,YAAAA,SAAA,EAAK,MAAM,+BAAa,YAAY,WAAU,aAAY,kBAE3D;AAAA,IACC,aAAa,IAAI,CAAC,YAAY,UAAU;AACvC,UAAI,CAAC,YAAY;AACf,eAAO;AAAA,MACT;AAEA,aACE,6CAAC,yBACC;AAAA,oDAAC,UAAK,eAAC;AAAA,QACN,WAAW,MACV,4CAAC,YAAAA,SAAA,EAAK,MAAM,WAAW,KAAK,WAAU,aACnC,qBAAW,MACd,IAEA,4CAAC,UAAK,WAAU,aAAa,qBAAW,MAAK;AAAA,WAPlC,KASf;AAAA,IAEJ,CAAC;AAAA,KACH,GACF;AAEJ;","names":["Link"]}
1
+ {"version":3,"sources":["../../src/components/bread-crumbs.tsx"],"sourcesContent":["import Link from \"next/link\";\nimport { Fragment } from \"react\";\nimport { opinlyConfig } from \"../utils/sdk-config\";\n\nexport const BreadCrumbs = ({\n breadcrumbs,\n}: {\n breadcrumbs?: (\n | {\n name: string;\n url?: string;\n }\n | null\n | undefined\n )[];\n}) => {\n return (\n <nav className=\"text-sm text-orange-100 text-muted-foreground mb-4\">\n <ol className=\"list-reset flex space-x-2\">\n <Link href=\"/\" className=\"font-bold\">\n {opinlyConfig.siteName}\n </Link>\n <span>/</span>\n <Link href={opinlyConfig.blogPrefix} className=\"font-bold\">\n Blog\n </Link>\n {breadcrumbs?.map((breadcrumb, index) => {\n if (!breadcrumb) {\n return null;\n }\n\n return (\n <Fragment key={index}>\n <span>/</span>\n {breadcrumb.url ? (\n <Link href={breadcrumb.url} className=\"font-bold\">\n {breadcrumb.name}\n </Link>\n ) : (\n <span className=\"font-bold\">{breadcrumb.name}</span>\n )}\n </Fragment>\n );\n })}\n </ol>\n </nav>\n );\n};\n"],"mappings":"AAmBQ,cAaI,YAbJ;AAnBR,OAAO,UAAU;AACjB,SAAS,gBAAgB;AACzB,SAAS,oBAAoB;AAEtB,MAAM,cAAc,CAAC;AAAA,EAC1B;AACF,MASM;AACJ,SACE,oBAAC,SAAI,WAAU,sDACb,+BAAC,QAAG,WAAU,6BACZ;AAAA,wBAAC,QAAK,MAAK,KAAI,WAAU,aACtB,uBAAa,UAChB;AAAA,IACA,oBAAC,UAAK,eAAC;AAAA,IACP,oBAAC,QAAK,MAAM,aAAa,YAAY,WAAU,aAAY,kBAE3D;AAAA,IACC,aAAa,IAAI,CAAC,YAAY,UAAU;AACvC,UAAI,CAAC,YAAY;AACf,eAAO;AAAA,MACT;AAEA,aACE,qBAAC,YACC;AAAA,4BAAC,UAAK,eAAC;AAAA,QACN,WAAW,MACV,oBAAC,QAAK,MAAM,WAAW,KAAK,WAAU,aACnC,qBAAW,MACd,IAEA,oBAAC,UAAK,WAAU,aAAa,qBAAW,MAAK;AAAA,WAPlC,KASf;AAAA,IAEJ,CAAC;AAAA,KACH,GACF;AAEJ;","names":[]}
@@ -0,0 +1,61 @@
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 folder_page_exports = {};
20
+ __export(folder_page_exports, {
21
+ FolderPage: () => FolderPage
22
+ });
23
+ module.exports = __toCommonJS(folder_page_exports);
24
+ var import_jsx_runtime = require("react/jsx-runtime");
25
+ var import_post_preview = require("../post-preview");
26
+ var import_bread_crumbs = require("../bread-crumbs");
27
+ const FolderPage = ({
28
+ folder
29
+ }) => {
30
+ console.log("folder", JSON.stringify(folder, null, 2));
31
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "max-w-6xl mx-auto px-4 py-10", children: [
32
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_bread_crumbs.BreadCrumbs, {}),
33
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h1", { className: "text-4xl font-bold mb-2", children: folder.name }),
34
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-muted-foreground max-w-2xl mb-8", children: folder.description || `Explore articles about ${folder.name}.` }),
35
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8", children: [
36
+ folder.posts.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-muted-foreground", children: "No posts added yet" }),
37
+ folder.posts.map((post) => {
38
+ console.log("post.image", post.image);
39
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_post_preview.PostPreview, { post }, post.slug);
40
+ })
41
+ ] })
42
+ ] });
43
+ };
44
+ function formatDate(dateStr) {
45
+ return new Date(dateStr).toLocaleDateString("en-GB", {
46
+ day: "2-digit",
47
+ month: "short",
48
+ year: "numeric"
49
+ });
50
+ }
51
+ function formatMinutes(description) {
52
+ if (!description) return "5 min read";
53
+ const words = description.split(" ").length;
54
+ const mins = Math.ceil(words / 200);
55
+ return `${mins} min read`;
56
+ }
57
+ // Annotate the CommonJS export names for ESM import in node:
58
+ 0 && (module.exports = {
59
+ FolderPage
60
+ });
61
+ //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/folder-page/index.tsx"],"sourcesContent":["import { Opinly } from \"@opinly/backend\";\nimport { PostPreview } from \"../post-preview\";\nimport { BreadCrumbs } from \"../bread-crumbs\";\n\nexport const FolderPage = ({\n folder,\n}: {\n folder: Extract<\n Awaited<ReturnType<Opinly[\"content\"][\"blog\"]>>,\n { type: \"folder\" }\n >[\"data\"];\n}) => {\n console.log(\"folder\", JSON.stringify(folder, null, 2));\n return (\n <div className=\"max-w-6xl mx-auto px-4 py-10\">\n <BreadCrumbs />\n\n <h1 className=\"text-4xl font-bold mb-2\">{folder.name}</h1>\n <p className=\"text-muted-foreground max-w-2xl mb-8\">\n {folder.description || `Explore articles about ${folder.name}.`}\n </p>\n\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8\">\n {folder.posts.length === 0 && (\n <div className=\"text-muted-foreground\">No posts added yet</div>\n )}\n {folder.posts.map((post) => {\n console.log(\"post.image\", post.image);\n return <PostPreview key={post.slug} post={post} />;\n })}\n </div>\n </div>\n );\n};\n\nfunction formatDate(dateStr: string) {\n return new Date(dateStr).toLocaleDateString(\"en-GB\", {\n day: \"2-digit\",\n month: \"short\",\n year: \"numeric\",\n });\n}\n\nfunction formatMinutes(description: string | null) {\n // Fake estimate based on length of description\n if (!description) return \"5 min read\";\n const words = description.split(\" \").length;\n const mins = Math.ceil(words / 200);\n return `${mins} min read`;\n}\n"],"mappings":"AAeM,cAOA,YAPA;AAdN,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAErB,MAAM,aAAa,CAAC;AAAA,EACzB;AACF,MAKM;AACJ,UAAQ,IAAI,UAAU,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AACrD,SACE,qBAAC,SAAI,WAAU,gCACb;AAAA,wBAAC,eAAY;AAAA,IAEb,oBAAC,QAAG,WAAU,2BAA2B,iBAAO,MAAK;AAAA,IACrD,oBAAC,OAAE,WAAU,wCACV,iBAAO,eAAe,0BAA0B,OAAO,IAAI,KAC9D;AAAA,IAEA,qBAAC,SAAI,WAAU,wDACZ;AAAA,aAAO,MAAM,WAAW,KACvB,oBAAC,SAAI,WAAU,yBAAwB,gCAAkB;AAAA,MAE1D,OAAO,MAAM,IAAI,CAAC,SAAS;AAC1B,gBAAQ,IAAI,cAAc,KAAK,KAAK;AACpC,eAAO,oBAAC,eAA4B,QAAX,KAAK,IAAkB;AAAA,MAClD,CAAC;AAAA,OACH;AAAA,KACF;AAEJ;AAEA,SAAS,WAAW,SAAiB;AACnC,SAAO,IAAI,KAAK,OAAO,EAAE,mBAAmB,SAAS;AAAA,IACnD,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,EACR,CAAC;AACH;AAEA,SAAS,cAAc,aAA4B;AAEjD,MAAI,CAAC,YAAa,QAAO;AACzB,QAAM,QAAQ,YAAY,MAAM,GAAG,EAAE;AACrC,QAAM,OAAO,KAAK,KAAK,QAAQ,GAAG;AAClC,SAAO,GAAG,IAAI;AAChB;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/folder-page/index.tsx"],"sourcesContent":["import { Opinly } from \"@opinly/backend\";\nimport { PostPreview } from \"../post-preview\";\nimport { BreadCrumbs } from \"../bread-crumbs\";\n\nexport const FolderPage = ({\n folder,\n}: {\n folder: Extract<\n Awaited<ReturnType<Opinly[\"content\"][\"blog\"]>>,\n { type: \"folder\" }\n >[\"data\"];\n}) => {\n console.log(\"folder\", JSON.stringify(folder, null, 2));\n return (\n <div className=\"max-w-6xl mx-auto px-4 py-10\">\n <BreadCrumbs />\n\n <h1 className=\"text-4xl font-bold mb-2\">{folder.name}</h1>\n <p className=\"text-muted-foreground max-w-2xl mb-8\">\n {folder.description || `Explore articles about ${folder.name}.`}\n </p>\n\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8\">\n {folder.posts.length === 0 && (\n <div className=\"text-muted-foreground\">No posts added yet</div>\n )}\n {folder.posts.map((post) => {\n console.log(\"post.image\", post.image);\n return <PostPreview key={post.slug} post={post} />;\n })}\n </div>\n </div>\n );\n};\n\nfunction formatDate(dateStr: string) {\n return new Date(dateStr).toLocaleDateString(\"en-GB\", {\n day: \"2-digit\",\n month: \"short\",\n year: \"numeric\",\n });\n}\n\nfunction formatMinutes(description: string | null) {\n // Fake estimate based on length of description\n if (!description) return \"5 min read\";\n const words = description.split(\" \").length;\n const mins = Math.ceil(words / 200);\n return `${mins} min read`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAeM;AAdN,0BAA4B;AAC5B,0BAA4B;AAErB,MAAM,aAAa,CAAC;AAAA,EACzB;AACF,MAKM;AACJ,UAAQ,IAAI,UAAU,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AACrD,SACE,6CAAC,SAAI,WAAU,gCACb;AAAA,gDAAC,mCAAY;AAAA,IAEb,4CAAC,QAAG,WAAU,2BAA2B,iBAAO,MAAK;AAAA,IACrD,4CAAC,OAAE,WAAU,wCACV,iBAAO,eAAe,0BAA0B,OAAO,IAAI,KAC9D;AAAA,IAEA,6CAAC,SAAI,WAAU,wDACZ;AAAA,aAAO,MAAM,WAAW,KACvB,4CAAC,SAAI,WAAU,yBAAwB,gCAAkB;AAAA,MAE1D,OAAO,MAAM,IAAI,CAAC,SAAS;AAC1B,gBAAQ,IAAI,cAAc,KAAK,KAAK;AACpC,eAAO,4CAAC,mCAA4B,QAAX,KAAK,IAAkB;AAAA,MAClD,CAAC;AAAA,OACH;AAAA,KACF;AAEJ;AAEA,SAAS,WAAW,SAAiB;AACnC,SAAO,IAAI,KAAK,OAAO,EAAE,mBAAmB,SAAS;AAAA,IACnD,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,EACR,CAAC;AACH;AAEA,SAAS,cAAc,aAA4B;AAEjD,MAAI,CAAC,YAAa,QAAO;AACzB,QAAM,QAAQ,YAAY,MAAM,GAAG,EAAE;AACrC,QAAM,OAAO,KAAK,KAAK,QAAQ,GAAG;AAClC,SAAO,GAAG,IAAI;AAChB;","names":[]}
@@ -1,42 +1,19 @@
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 folder_page_exports = {};
20
- __export(folder_page_exports, {
21
- FolderPage: () => FolderPage
22
- });
23
- module.exports = __toCommonJS(folder_page_exports);
24
- var import_jsx_runtime = require("react/jsx-runtime");
25
- var import_post_preview = require("../post-preview");
26
- var import_bread_crumbs = require("../bread-crumbs");
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { PostPreview } from "../post-preview";
3
+ import { BreadCrumbs } from "../bread-crumbs";
27
4
  const FolderPage = ({
28
5
  folder
29
6
  }) => {
30
7
  console.log("folder", JSON.stringify(folder, null, 2));
31
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "max-w-6xl mx-auto px-4 py-10", children: [
32
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_bread_crumbs.BreadCrumbs, {}),
33
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h1", { className: "text-4xl font-bold mb-2", children: folder.name }),
34
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-muted-foreground max-w-2xl mb-8", children: folder.description || `Explore articles about ${folder.name}.` }),
35
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8", children: [
36
- folder.posts.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-muted-foreground", children: "No posts added yet" }),
8
+ return /* @__PURE__ */ jsxs("div", { className: "max-w-6xl mx-auto px-4 py-10", children: [
9
+ /* @__PURE__ */ jsx(BreadCrumbs, {}),
10
+ /* @__PURE__ */ jsx("h1", { className: "text-4xl font-bold mb-2", children: folder.name }),
11
+ /* @__PURE__ */ jsx("p", { className: "text-muted-foreground max-w-2xl mb-8", children: folder.description || `Explore articles about ${folder.name}.` }),
12
+ /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8", children: [
13
+ folder.posts.length === 0 && /* @__PURE__ */ jsx("div", { className: "text-muted-foreground", children: "No posts added yet" }),
37
14
  folder.posts.map((post) => {
38
15
  console.log("post.image", post.image);
39
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_post_preview.PostPreview, { post }, post.slug);
16
+ return /* @__PURE__ */ jsx(PostPreview, { post }, post.slug);
40
17
  })
41
18
  ] })
42
19
  ] });
@@ -54,8 +31,7 @@ function formatMinutes(description) {
54
31
  const mins = Math.ceil(words / 200);
55
32
  return `${mins} min read`;
56
33
  }
57
- // Annotate the CommonJS export names for ESM import in node:
58
- 0 && (module.exports = {
34
+ export {
59
35
  FolderPage
60
- });
36
+ };
61
37
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/folder-page/index.tsx"],"sourcesContent":["import { Opinly } from \"@opinly/backend\";\nimport { PostPreview } from \"../post-preview\";\nimport { BreadCrumbs } from \"../bread-crumbs\";\n\nexport const FolderPage = ({\n folder,\n}: {\n folder: Extract<\n Awaited<ReturnType<Opinly[\"content\"][\"blog\"]>>,\n { type: \"folder\" }\n >[\"data\"];\n}) => {\n console.log(\"folder\", JSON.stringify(folder, null, 2));\n return (\n <div className=\"max-w-6xl mx-auto px-4 py-10\">\n <BreadCrumbs />\n\n <h1 className=\"text-4xl font-bold mb-2\">{folder.name}</h1>\n <p className=\"text-muted-foreground max-w-2xl mb-8\">\n {folder.description || `Explore articles about ${folder.name}.`}\n </p>\n\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8\">\n {folder.posts.length === 0 && (\n <div className=\"text-muted-foreground\">No posts added yet</div>\n )}\n {folder.posts.map((post) => {\n console.log(\"post.image\", post.image);\n return <PostPreview key={post.slug} post={post} />;\n })}\n </div>\n </div>\n );\n};\n\nfunction formatDate(dateStr: string) {\n return new Date(dateStr).toLocaleDateString(\"en-GB\", {\n day: \"2-digit\",\n month: \"short\",\n year: \"numeric\",\n });\n}\n\nfunction formatMinutes(description: string | null) {\n // Fake estimate based on length of description\n if (!description) return \"5 min read\";\n const words = description.split(\" \").length;\n const mins = Math.ceil(words / 200);\n return `${mins} min read`;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAeM;AAdN,0BAA4B;AAC5B,0BAA4B;AAErB,MAAM,aAAa,CAAC;AAAA,EACzB;AACF,MAKM;AACJ,UAAQ,IAAI,UAAU,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AACrD,SACE,6CAAC,SAAI,WAAU,gCACb;AAAA,gDAAC,mCAAY;AAAA,IAEb,4CAAC,QAAG,WAAU,2BAA2B,iBAAO,MAAK;AAAA,IACrD,4CAAC,OAAE,WAAU,wCACV,iBAAO,eAAe,0BAA0B,OAAO,IAAI,KAC9D;AAAA,IAEA,6CAAC,SAAI,WAAU,wDACZ;AAAA,aAAO,MAAM,WAAW,KACvB,4CAAC,SAAI,WAAU,yBAAwB,gCAAkB;AAAA,MAE1D,OAAO,MAAM,IAAI,CAAC,SAAS;AAC1B,gBAAQ,IAAI,cAAc,KAAK,KAAK;AACpC,eAAO,4CAAC,mCAA4B,QAAX,KAAK,IAAkB;AAAA,MAClD,CAAC;AAAA,OACH;AAAA,KACF;AAEJ;AAEA,SAAS,WAAW,SAAiB;AACnC,SAAO,IAAI,KAAK,OAAO,EAAE,mBAAmB,SAAS;AAAA,IACnD,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,EACR,CAAC;AACH;AAEA,SAAS,cAAc,aAA4B;AAEjD,MAAI,CAAC,YAAa,QAAO;AACzB,QAAM,QAAQ,YAAY,MAAM,GAAG,EAAE;AACrC,QAAM,OAAO,KAAK,KAAK,QAAQ,GAAG;AAClC,SAAO,GAAG,IAAI;AAChB;","names":[]}
1
+ {"version":3,"sources":["../../../src/components/folder-page/index.tsx"],"sourcesContent":["import { Opinly } from \"@opinly/backend\";\nimport { PostPreview } from \"../post-preview\";\nimport { BreadCrumbs } from \"../bread-crumbs\";\n\nexport const FolderPage = ({\n folder,\n}: {\n folder: Extract<\n Awaited<ReturnType<Opinly[\"content\"][\"blog\"]>>,\n { type: \"folder\" }\n >[\"data\"];\n}) => {\n console.log(\"folder\", JSON.stringify(folder, null, 2));\n return (\n <div className=\"max-w-6xl mx-auto px-4 py-10\">\n <BreadCrumbs />\n\n <h1 className=\"text-4xl font-bold mb-2\">{folder.name}</h1>\n <p className=\"text-muted-foreground max-w-2xl mb-8\">\n {folder.description || `Explore articles about ${folder.name}.`}\n </p>\n\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8\">\n {folder.posts.length === 0 && (\n <div className=\"text-muted-foreground\">No posts added yet</div>\n )}\n {folder.posts.map((post) => {\n console.log(\"post.image\", post.image);\n return <PostPreview key={post.slug} post={post} />;\n })}\n </div>\n </div>\n );\n};\n\nfunction formatDate(dateStr: string) {\n return new Date(dateStr).toLocaleDateString(\"en-GB\", {\n day: \"2-digit\",\n month: \"short\",\n year: \"numeric\",\n });\n}\n\nfunction formatMinutes(description: string | null) {\n // Fake estimate based on length of description\n if (!description) return \"5 min read\";\n const words = description.split(\" \").length;\n const mins = Math.ceil(words / 200);\n return `${mins} min read`;\n}\n"],"mappings":"AAeM,cAOA,YAPA;AAdN,SAAS,mBAAmB;AAC5B,SAAS,mBAAmB;AAErB,MAAM,aAAa,CAAC;AAAA,EACzB;AACF,MAKM;AACJ,UAAQ,IAAI,UAAU,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AACrD,SACE,qBAAC,SAAI,WAAU,gCACb;AAAA,wBAAC,eAAY;AAAA,IAEb,oBAAC,QAAG,WAAU,2BAA2B,iBAAO,MAAK;AAAA,IACrD,oBAAC,OAAE,WAAU,wCACV,iBAAO,eAAe,0BAA0B,OAAO,IAAI,KAC9D;AAAA,IAEA,qBAAC,SAAI,WAAU,wDACZ;AAAA,aAAO,MAAM,WAAW,KACvB,oBAAC,SAAI,WAAU,yBAAwB,gCAAkB;AAAA,MAE1D,OAAO,MAAM,IAAI,CAAC,SAAS;AAC1B,gBAAQ,IAAI,cAAc,KAAK,KAAK;AACpC,eAAO,oBAAC,eAA4B,QAAX,KAAK,IAAkB;AAAA,MAClD,CAAC;AAAA,OACH;AAAA,KACF;AAEJ;AAEA,SAAS,WAAW,SAAiB;AACnC,SAAO,IAAI,KAAK,OAAO,EAAE,mBAAmB,SAAS;AAAA,IACnD,KAAK;AAAA,IACL,OAAO;AAAA,IACP,MAAM;AAAA,EACR,CAAC;AACH;AAEA,SAAS,cAAc,aAA4B;AAEjD,MAAI,CAAC,YAAa,QAAO;AACzB,QAAM,QAAQ,YAAY,MAAM,GAAG,EAAE;AACrC,QAAM,OAAO,KAAK,KAAK,QAAQ,GAAG;AAClC,SAAO,GAAG,IAAI;AAChB;","names":[]}