@opinly/next 0.1.9 → 0.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/author-page/index.cjs +1 -2
- package/dist/components/author-page/index.cjs.map +1 -1
- package/dist/components/author-page/index.js +1 -2
- package/dist/components/author-page/index.js.map +1 -1
- package/dist/components/authors-page/index.cjs +1 -2
- package/dist/components/authors-page/index.cjs.map +1 -1
- package/dist/components/authors-page/index.js +1 -2
- package/dist/components/authors-page/index.js.map +1 -1
- package/dist/components/blog-post/_components/content.cjs +37 -8
- package/dist/components/blog-post/_components/content.cjs.map +1 -1
- package/dist/components/blog-post/_components/content.js +37 -8
- package/dist/components/blog-post/_components/content.js.map +1 -1
- package/dist/components/blog-post/_components/table-of-contents.cjs +1 -2
- package/dist/components/blog-post/_components/table-of-contents.cjs.map +1 -1
- package/dist/components/blog-post/_components/table-of-contents.js +1 -2
- package/dist/components/blog-post/_components/table-of-contents.js.map +1 -1
- package/dist/components/blog-post/_helpers/json-ld.cjs +1 -2
- package/dist/components/blog-post/_helpers/json-ld.cjs.map +1 -1
- package/dist/components/blog-post/_helpers/json-ld.js +1 -2
- package/dist/components/blog-post/_helpers/json-ld.js.map +1 -1
- package/dist/components/blog-post/index.cjs +0 -1
- package/dist/components/blog-post/index.cjs.map +1 -1
- package/dist/components/blog-post/index.js +0 -1
- package/dist/components/blog-post/index.js.map +1 -1
- package/dist/components/home-page/folders.cjs +98 -0
- package/dist/components/home-page/folders.cjs.map +1 -0
- package/dist/components/home-page/folders.d.cts +9 -0
- package/dist/components/home-page/folders.d.ts +9 -0
- package/dist/components/home-page/folders.js +63 -0
- package/dist/components/home-page/folders.js.map +1 -0
- package/dist/components/home-page/index.cjs +44 -0
- package/dist/components/home-page/index.cjs.map +1 -0
- package/dist/components/home-page/index.d.cts +11 -0
- package/dist/components/home-page/index.d.ts +11 -0
- package/dist/components/home-page/index.js +20 -0
- package/dist/components/home-page/index.js.map +1 -0
- package/dist/components/{home-page.cjs → home-page/pagination.cjs} +48 -28
- package/dist/components/home-page/pagination.cjs.map +1 -0
- package/dist/components/home-page/pagination.d.cts +10 -0
- package/dist/components/home-page/pagination.d.ts +10 -0
- package/dist/components/home-page/pagination.js +57 -0
- package/dist/components/home-page/pagination.js.map +1 -0
- package/dist/components/home-page/top-posts.cjs +52 -0
- package/dist/components/home-page/top-posts.cjs.map +1 -0
- package/dist/components/home-page/top-posts.d.cts +9 -0
- package/dist/components/home-page/top-posts.d.ts +9 -0
- package/dist/components/home-page/top-posts.js +28 -0
- package/dist/components/home-page/top-posts.js.map +1 -0
- package/dist/components/opinly-blog.cjs +3 -2
- package/dist/components/opinly-blog.cjs.map +1 -1
- package/dist/components/opinly-blog.d.cts +5 -2
- package/dist/components/opinly-blog.d.ts +5 -2
- package/dist/components/opinly-blog.js +3 -2
- package/dist/components/opinly-blog.js.map +1 -1
- package/dist/components/post-preview.cjs +25 -7
- package/dist/components/post-preview.cjs.map +1 -1
- package/dist/components/post-preview.d.cts +3 -4
- package/dist/components/post-preview.d.ts +3 -4
- package/dist/components/post-preview.js +23 -6
- package/dist/components/post-preview.js.map +1 -1
- package/dist/index.cjs +1 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
- package/dist/components/home-page.cjs.map +0 -1
- package/dist/components/home-page.d.cts +0 -12
- package/dist/components/home-page.d.ts +0 -12
- package/dist/components/home-page.js +0 -37
- package/dist/components/home-page.js.map +0 -1
- package/dist/utils/images.cjs +0 -35
- package/dist/utils/images.cjs.map +0 -1
- package/dist/utils/images.d.cts +0 -3
- package/dist/utils/images.d.ts +0 -3
- package/dist/utils/images.js +0 -11
- package/dist/utils/images.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
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\";\
|
|
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(node.content)}</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}/${post.folder ? `${post.folder.slug + \"/\"}${post.slug}` : post.slug}`,\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 = (\n post: BlogPostRes\n): WithContext<BreadcrumbList> => {\n const itemListElement = [\n {\n \"@type\": \"ListItem\",\n position: 1,\n name: \"Company Name\",\n item: opinlyConfig.siteUrl,\n },\n {\n \"@type\": \"ListItem\",\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 \"@type\": \"ListItem\",\n position: 3,\n name: post.folder.name,\n item: `${opinlyConfig.blogUrl}/blog/${post.folder.slug}`,\n });\n\n itemListElement.push({\n \"@type\": \"ListItem\",\n position: 4,\n name: post.title,\n item: `${opinlyConfig.blogUrl}/blog/${post.folder.slug}/${post.slug}`,\n });\n } else {\n itemListElement.push({\n \"@type\": \"ListItem\",\n position: 3,\n name: post.title,\n item: `${opinlyConfig.blogUrl}/blog/${post.slug}`,\n });\n }\n\n return {\n \"@context\": \"https://schema.org\",\n \"@type\": \"BreadcrumbList\",\n itemListElement: itemListElement as ListItem[],\n };\n};\n"],"mappings":"AAQA,SAAS,oBAAoB;AAItB,SAAS,wBAAwB,SAA8B;AACpE,MAAI,CAAC,SAAS,QAAS,QAAO;AAE9B,MAAI,aAAa;AAEjB,UAAQ,QAAQ,QAAQ,CAAC,SAAS;AAChC,YAAQ,KAAK,MAAM;AAAA,MACjB,KAAK;AACH,sBAAc,MAAM,qBAAqB,KAAK,OAAO,CAAC;AACtD;AAAA,MACF,KAAK;AACH,cAAM,eAAe,KAAK,OAAO,SAAS;AAC1C,sBAAc,KAAK,YAAY,IAAI,qBAAqB,KAAK,OAAO,CAAC,MAAM,YAAY;AACvF;AAAA,MACF,KAAK;AACH,sBAAc,OAAO,qBAAqB,KAAK,OAAO,CAAC;AACvD;AAAA,MACF,KAAK;AACH,sBAAc,OAAO,qBAAqB,KAAK,OAAO,CAAC;AACvD;AAAA,MACF,KAAK;AACH,sBAAc,OAAO,qBAAqB,KAAK,OAAO,CAAC;AACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASF;AAEE;AAAA,IACJ;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAEA,SAAS,qBACP,OACQ;AACR,MAAI,CAAC,MAAO,QAAO;AAEnB,MAAI,eAAe;AACnB,QAAM,QAAQ,CAAC,UAAU;AACvB,QAAI,MAAM,SAAS,QAAQ;AACzB,UAAI,OAAO,MAAM,QAAQ;AACzB,UAAI,MAAM,OAAO;AACf,cAAM,MAAM,QAAQ,CAAC,SAAS;AAC5B,cAAI,KAAK,SAAS,OAAQ,QAAO,WAAW,IAAI;AAChD,cAAI,KAAK,SAAS,SAAU,QAAO,OAAO,IAAI;AAC9C,cAAI,KAAK,SAAS,UAAU,KAAK,OAAO,MAAM;AAC5C,mBAAO,YAAY,KAAK,MAAM,IAAI,KAAK,IAAI;AAAA,UAC7C;AAAA,QACF,CAAC;AAAA,MACH;AACA,sBAAgB;AAAA,IAClB;AAAA,EAMF,CAAC;AACD,SAAO;AACT;AAEO,MAAM,eAAe,CAC1B,SACyB;AACzB,SAAO;AAAA,IACL,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,YAAY,KAAK,IAAI,CAAC,SAAS;AAAA,MAC7B,SAAS;AAAA,MACT,MAAM,IAAI;AAAA,MACV,gBAAgB;AAAA,QACd,SAAS;AAAA,QACT,MAAM,IAAI;AAAA,MACZ;AAAA,IACF,EAAE;AAAA,EACJ;AACF;AAEO,MAAM,uBAAuB,CAClC,SAC6B;AAC7B,SAAO;AAAA,IACL,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,UAAU,KAAK;AAAA,IACf,aAAa,KAAK,eAAe;AAAA,IACjC,KAAK,GAAG,aAAa,OAAO,IAAI,KAAK,SAAS,GAAG,KAAK,OAAO,OAAO,GAAG,GAAG,KAAK,IAAI,KAAK,KAAK,IAAI;AAAA,IACjG,eAAe,KAAK,oBAAoB;AAAA,IACxC,cAAc,KAAK,cAAc;AAAA,IACjC,OAAO,KAAK,WAAW,UACnB;AAAA,MACE,SAAS;AAAA,MACT,KAAK,GAAG,aAAa,SAAS,IAAI,KAAK,UAAU,OAAO;AAAA,IAC1D,IACA;AAAA,IACJ,QAAQ,KAAK,SACT;AAAA,MACE,SAAS;AAAA,MACT,MAAM,KAAK,OAAO;AAAA,MAClB,KAAK,GAAG,aAAa,OAAO,WAAW,KAAK,OAAO,IAAI;AAAA,MACvD,aAAa,KAAK,OAAO,OAAO;AAAA,IAClC,IACA;AAAA,IACJ,qBAAqB;AAAA,IACrB,aAAa,wBAAwB,KAAK,OAAsB;AAAA,EAClE;AACF;AAEO,MAAM,sBAAsB,CACjC,SACgC;AAChC,QAAM,kBAAkB;AAAA,IACtB;AAAA,MACE,SAAS;AAAA,MACT,UAAU;AAAA,MACV,MAAM;AAAA,MACN,MAAM,aAAa;AAAA,IACrB;AAAA,IACA;AAAA,MACE,SAAS;AAAA,MACT,UAAU;AAAA,MACV,MAAM,KAAK,QAAQ,QAAQ;AAAA,MAC3B,MAAM,GAAG,aAAa,OAAO;AAAA,IAC/B;AAAA,EACF;AAEA,MAAI,KAAK,QAAQ;AACf,oBAAgB,KAAK;AAAA,MACnB,SAAS;AAAA,MACT,UAAU;AAAA,MACV,MAAM,KAAK,OAAO;AAAA,MAClB,MAAM,GAAG,aAAa,OAAO,SAAS,KAAK,OAAO,IAAI;AAAA,IACxD,CAAC;AAED,oBAAgB,KAAK;AAAA,MACnB,SAAS;AAAA,MACT,UAAU;AAAA,MACV,MAAM,KAAK;AAAA,MACX,MAAM,GAAG,aAAa,OAAO,SAAS,KAAK,OAAO,IAAI,IAAI,KAAK,IAAI;AAAA,IACrE,CAAC;AAAA,EACH,OAAO;AACL,oBAAgB,KAAK;AAAA,MACnB,SAAS;AAAA,MACT,UAAU;AAAA,MACV,MAAM,KAAK;AAAA,MACX,MAAM,GAAG,aAAa,OAAO,SAAS,KAAK,IAAI;AAAA,IACjD,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL,YAAY;AAAA,IACZ,SAAS;AAAA,IACT;AAAA,EACF;AACF;","names":[]}
|
|
@@ -48,7 +48,6 @@ const BlogPost = ({
|
|
|
48
48
|
classNames = {}
|
|
49
49
|
}) => {
|
|
50
50
|
const content = post.content;
|
|
51
|
-
console.log("content", content);
|
|
52
51
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
53
52
|
post.faqs && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
54
53
|
import_script.default,
|
|
@@ -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
|
|
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 +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
|
|
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,98 @@
|
|
|
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 folders_exports = {};
|
|
30
|
+
__export(folders_exports, {
|
|
31
|
+
HomePageFolders: () => HomePageFolders,
|
|
32
|
+
HomePageFoldersSkeleton: () => HomePageFoldersSkeleton
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(folders_exports);
|
|
35
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
36
|
+
var import_link = __toESM(require("next/link"), 1);
|
|
37
|
+
var import_post_preview = require("../post-preview");
|
|
38
|
+
var import_lucide_react = require("lucide-react");
|
|
39
|
+
var import_react = require("react");
|
|
40
|
+
const HomePageFoldersSkeleton = () => {
|
|
41
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: Array(2).fill(null).map((_, sectionIdx) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-4 mb-5", children: [
|
|
42
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "animate-pulse space-y-2", children: [
|
|
43
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-8 w-1/3 bg-gray-200 dark:bg-gray-700 rounded" }),
|
|
44
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-4 w-1/2 bg-gray-200 dark:bg-gray-700 rounded" })
|
|
45
|
+
] }),
|
|
46
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-10", children: [
|
|
47
|
+
Array(3).fill(null).map((__, postIdx) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "animate-pulse space-y-3", children: [
|
|
48
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "w-full h-48 bg-gray-200 dark:bg-gray-700 rounded-lg" }),
|
|
49
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-5 w-3/4 bg-gray-200 dark:bg-gray-700 rounded" }),
|
|
50
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-4 w-full bg-gray-200 dark:bg-gray-700 rounded" })
|
|
51
|
+
] }, postIdx)),
|
|
52
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex justify-center items-center animate-pulse", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-4 w-48 bg-gray-200 dark:bg-gray-700 rounded" }) })
|
|
53
|
+
] })
|
|
54
|
+
] }, sectionIdx)) });
|
|
55
|
+
};
|
|
56
|
+
const HomePageFoldersServer = async ({ client }) => {
|
|
57
|
+
const folders = await client.client.content.homePageFolders.query();
|
|
58
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: folders.map((folder) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-4 ", children: [
|
|
59
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-col gap-2 mb-20", children: [
|
|
60
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
61
|
+
import_link.default,
|
|
62
|
+
{
|
|
63
|
+
href: `/blog/${folder.slug}`,
|
|
64
|
+
className: "text-3xl",
|
|
65
|
+
children: folder.title
|
|
66
|
+
},
|
|
67
|
+
folder.slug
|
|
68
|
+
),
|
|
69
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-sm text-gray-500", children: folder.description })
|
|
70
|
+
] }),
|
|
71
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-10 mb-20", children: [
|
|
72
|
+
folder.posts.filter((post) => post !== null).map((post) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_post_preview.PostPreview, { post }, post.slug)),
|
|
73
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex justify-center w-full h-full items-center ", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
74
|
+
import_link.default,
|
|
75
|
+
{
|
|
76
|
+
href: `/blog/${folder.slug}`,
|
|
77
|
+
className: "flex items-center gap-2",
|
|
78
|
+
children: [
|
|
79
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
|
|
80
|
+
"View all posts in ",
|
|
81
|
+
folder.title
|
|
82
|
+
] }),
|
|
83
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.ArrowRight, { className: "w-4 h-4" })
|
|
84
|
+
]
|
|
85
|
+
}
|
|
86
|
+
) })
|
|
87
|
+
] })
|
|
88
|
+
] })) });
|
|
89
|
+
};
|
|
90
|
+
const HomePageFolders = ({ client }) => {
|
|
91
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.Suspense, { fallback: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(HomePageFoldersSkeleton, {}), children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(HomePageFoldersServer, { client }) });
|
|
92
|
+
};
|
|
93
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
94
|
+
0 && (module.exports = {
|
|
95
|
+
HomePageFolders,
|
|
96
|
+
HomePageFoldersSkeleton
|
|
97
|
+
});
|
|
98
|
+
//# sourceMappingURL=folders.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/home-page/folders.tsx"],"sourcesContent":["import Link from \"next/link\";\nimport { PostPreview } from \"../post-preview\";\nimport { ArrowRight } from \"lucide-react\";\nimport { Opinly } from \"@opinly/backend\";\nimport { Suspense } from \"react\";\n\nexport const HomePageFoldersSkeleton = () => {\n return (\n <>\n {Array(2) // render 2 folder sections\n .fill(null)\n .map((_, sectionIdx) => (\n <div key={sectionIdx} className=\"space-y-4 mb-5\">\n {/* Folder title + description */}\n <div className=\"animate-pulse space-y-2\">\n <div className=\"h-8 w-1/3 bg-gray-200 dark:bg-gray-700 rounded\" />\n <div className=\"h-4 w-1/2 bg-gray-200 dark:bg-gray-700 rounded\" />\n </div>\n\n {/* Posts grid */}\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-10\">\n {Array(3) // 3 post placeholders\n .fill(null)\n .map((__, postIdx) => (\n <div key={postIdx} className=\"animate-pulse space-y-3\">\n {/* Image */}\n <div className=\"w-full h-48 bg-gray-200 dark:bg-gray-700 rounded-lg\" />\n {/* Title bar */}\n <div className=\"h-5 w-3/4 bg-gray-200 dark:bg-gray-700 rounded\" />\n {/* Description line */}\n <div className=\"h-4 w-full bg-gray-200 dark:bg-gray-700 rounded\" />\n </div>\n ))}\n\n {/* “View all” link */}\n <div className=\"flex justify-center items-center animate-pulse\">\n <div className=\"h-4 w-48 bg-gray-200 dark:bg-gray-700 rounded\" />\n </div>\n </div>\n </div>\n ))}\n </>\n );\n};\n\nconst HomePageFoldersServer = async ({ client }: { client: Opinly }) => {\n const folders = await client.client.content.homePageFolders.query();\n\n return (\n <>\n {folders.map((folder) => (\n <div className=\"space-y-4 \">\n <div className=\"flex flex-col gap-2 mb-20\">\n <Link\n key={folder.slug}\n href={`/blog/${folder.slug}`}\n className=\"text-3xl\"\n >\n {folder.title}\n </Link>\n <p className=\"text-sm text-gray-500\">{folder.description}</p>\n </div>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-10 mb-20\">\n {folder.posts\n .filter((post) => post !== null)\n .map((post) => (\n <PostPreview key={post.slug} post={post as any} />\n ))}\n <div className=\"flex justify-center w-full h-full items-center \">\n <Link\n href={`/blog/${folder.slug}`}\n className=\"flex items-center gap-2\"\n >\n <span>View all posts in {folder.title}</span>\n <ArrowRight className=\"w-4 h-4\" />\n </Link>\n </div>\n </div>\n </div>\n ))}\n </>\n );\n};\n\nexport const HomePageFolders = ({ client }: { client: Opinly }) => {\n return (\n <Suspense fallback={<HomePageFoldersSkeleton />}>\n <HomePageFoldersServer client={client} />\n </Suspense>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQI;AARJ,kBAAiB;AACjB,0BAA4B;AAC5B,0BAA2B;AAE3B,mBAAyB;AAElB,MAAM,0BAA0B,MAAM;AAC3C,SACE,2EACG,gBAAM,CAAC,EACL,KAAK,IAAI,EACT,IAAI,CAAC,GAAG,eACP,6CAAC,SAAqB,WAAU,kBAE9B;AAAA,iDAAC,SAAI,WAAU,2BACb;AAAA,kDAAC,SAAI,WAAU,kDAAiD;AAAA,MAChE,4CAAC,SAAI,WAAU,kDAAiD;AAAA,OAClE;AAAA,IAGA,6CAAC,SAAI,WAAU,yDACZ;AAAA,YAAM,CAAC,EACL,KAAK,IAAI,EACT,IAAI,CAAC,IAAI,YACR,6CAAC,SAAkB,WAAU,2BAE3B;AAAA,oDAAC,SAAI,WAAU,uDAAsD;AAAA,QAErE,4CAAC,SAAI,WAAU,kDAAiD;AAAA,QAEhE,4CAAC,SAAI,WAAU,mDAAkD;AAAA,WANzD,OAOV,CACD;AAAA,MAGH,4CAAC,SAAI,WAAU,kDACb,sDAAC,SAAI,WAAU,iDAAgD,GACjE;AAAA,OACF;AAAA,OA1BQ,UA2BV,CACD,GACL;AAEJ;AAEA,MAAM,wBAAwB,OAAO,EAAE,OAAO,MAA0B;AACtE,QAAM,UAAU,MAAM,OAAO,OAAO,QAAQ,gBAAgB,MAAM;AAElE,SACE,2EACG,kBAAQ,IAAI,CAAC,WACZ,6CAAC,SAAI,WAAU,cACb;AAAA,iDAAC,SAAI,WAAU,6BACb;AAAA;AAAA,QAAC,YAAAA;AAAA,QAAA;AAAA,UAEC,MAAM,SAAS,OAAO,IAAI;AAAA,UAC1B,WAAU;AAAA,UAET,iBAAO;AAAA;AAAA,QAJH,OAAO;AAAA,MAKd;AAAA,MACA,4CAAC,OAAE,WAAU,yBAAyB,iBAAO,aAAY;AAAA,OAC3D;AAAA,IACA,6CAAC,SAAI,WAAU,+DACZ;AAAA,aAAO,MACL,OAAO,CAAC,SAAS,SAAS,IAAI,EAC9B,IAAI,CAAC,SACJ,4CAAC,mCAA4B,QAAX,KAAK,IAAyB,CACjD;AAAA,MACH,4CAAC,SAAI,WAAU,mDACb;AAAA,QAAC,YAAAA;AAAA,QAAA;AAAA,UACC,MAAM,SAAS,OAAO,IAAI;AAAA,UAC1B,WAAU;AAAA,UAEV;AAAA,yDAAC,UAAK;AAAA;AAAA,cAAmB,OAAO;AAAA,eAAM;AAAA,YACtC,4CAAC,kCAAW,WAAU,WAAU;AAAA;AAAA;AAAA,MAClC,GACF;AAAA,OACF;AAAA,KACF,CACD,GACH;AAEJ;AAEO,MAAM,kBAAkB,CAAC,EAAE,OAAO,MAA0B;AACjE,SACE,4CAAC,yBAAS,UAAU,4CAAC,2BAAwB,GAC3C,sDAAC,yBAAsB,QAAgB,GACzC;AAEJ;","names":["Link"]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { Opinly } from '@opinly/backend';
|
|
3
|
+
|
|
4
|
+
declare const HomePageFoldersSkeleton: () => react_jsx_runtime.JSX.Element;
|
|
5
|
+
declare const HomePageFolders: ({ client }: {
|
|
6
|
+
client: Opinly;
|
|
7
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
8
|
+
|
|
9
|
+
export { HomePageFolders, HomePageFoldersSkeleton };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { Opinly } from '@opinly/backend';
|
|
3
|
+
|
|
4
|
+
declare const HomePageFoldersSkeleton: () => react_jsx_runtime.JSX.Element;
|
|
5
|
+
declare const HomePageFolders: ({ client }: {
|
|
6
|
+
client: Opinly;
|
|
7
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
8
|
+
|
|
9
|
+
export { HomePageFolders, HomePageFoldersSkeleton };
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import Link from "next/link";
|
|
3
|
+
import { PostPreview } from "../post-preview";
|
|
4
|
+
import { ArrowRight } from "lucide-react";
|
|
5
|
+
import { Suspense } from "react";
|
|
6
|
+
const HomePageFoldersSkeleton = () => {
|
|
7
|
+
return /* @__PURE__ */ jsx(Fragment, { children: Array(2).fill(null).map((_, sectionIdx) => /* @__PURE__ */ jsxs("div", { className: "space-y-4 mb-5", children: [
|
|
8
|
+
/* @__PURE__ */ jsxs("div", { className: "animate-pulse space-y-2", children: [
|
|
9
|
+
/* @__PURE__ */ jsx("div", { className: "h-8 w-1/3 bg-gray-200 dark:bg-gray-700 rounded" }),
|
|
10
|
+
/* @__PURE__ */ jsx("div", { className: "h-4 w-1/2 bg-gray-200 dark:bg-gray-700 rounded" })
|
|
11
|
+
] }),
|
|
12
|
+
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-10", children: [
|
|
13
|
+
Array(3).fill(null).map((__, postIdx) => /* @__PURE__ */ jsxs("div", { className: "animate-pulse space-y-3", children: [
|
|
14
|
+
/* @__PURE__ */ jsx("div", { className: "w-full h-48 bg-gray-200 dark:bg-gray-700 rounded-lg" }),
|
|
15
|
+
/* @__PURE__ */ jsx("div", { className: "h-5 w-3/4 bg-gray-200 dark:bg-gray-700 rounded" }),
|
|
16
|
+
/* @__PURE__ */ jsx("div", { className: "h-4 w-full bg-gray-200 dark:bg-gray-700 rounded" })
|
|
17
|
+
] }, postIdx)),
|
|
18
|
+
/* @__PURE__ */ jsx("div", { className: "flex justify-center items-center animate-pulse", children: /* @__PURE__ */ jsx("div", { className: "h-4 w-48 bg-gray-200 dark:bg-gray-700 rounded" }) })
|
|
19
|
+
] })
|
|
20
|
+
] }, sectionIdx)) });
|
|
21
|
+
};
|
|
22
|
+
const HomePageFoldersServer = async ({ client }) => {
|
|
23
|
+
const folders = await client.client.content.homePageFolders.query();
|
|
24
|
+
return /* @__PURE__ */ jsx(Fragment, { children: folders.map((folder) => /* @__PURE__ */ jsxs("div", { className: "space-y-4 ", children: [
|
|
25
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 mb-20", children: [
|
|
26
|
+
/* @__PURE__ */ jsx(
|
|
27
|
+
Link,
|
|
28
|
+
{
|
|
29
|
+
href: `/blog/${folder.slug}`,
|
|
30
|
+
className: "text-3xl",
|
|
31
|
+
children: folder.title
|
|
32
|
+
},
|
|
33
|
+
folder.slug
|
|
34
|
+
),
|
|
35
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm text-gray-500", children: folder.description })
|
|
36
|
+
] }),
|
|
37
|
+
/* @__PURE__ */ jsxs("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-10 mb-20", children: [
|
|
38
|
+
folder.posts.filter((post) => post !== null).map((post) => /* @__PURE__ */ jsx(PostPreview, { post }, post.slug)),
|
|
39
|
+
/* @__PURE__ */ jsx("div", { className: "flex justify-center w-full h-full items-center ", children: /* @__PURE__ */ jsxs(
|
|
40
|
+
Link,
|
|
41
|
+
{
|
|
42
|
+
href: `/blog/${folder.slug}`,
|
|
43
|
+
className: "flex items-center gap-2",
|
|
44
|
+
children: [
|
|
45
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
46
|
+
"View all posts in ",
|
|
47
|
+
folder.title
|
|
48
|
+
] }),
|
|
49
|
+
/* @__PURE__ */ jsx(ArrowRight, { className: "w-4 h-4" })
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
) })
|
|
53
|
+
] })
|
|
54
|
+
] })) });
|
|
55
|
+
};
|
|
56
|
+
const HomePageFolders = ({ client }) => {
|
|
57
|
+
return /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(HomePageFoldersSkeleton, {}), children: /* @__PURE__ */ jsx(HomePageFoldersServer, { client }) });
|
|
58
|
+
};
|
|
59
|
+
export {
|
|
60
|
+
HomePageFolders,
|
|
61
|
+
HomePageFoldersSkeleton
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=folders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/home-page/folders.tsx"],"sourcesContent":["import Link from \"next/link\";\nimport { PostPreview } from \"../post-preview\";\nimport { ArrowRight } from \"lucide-react\";\nimport { Opinly } from \"@opinly/backend\";\nimport { Suspense } from \"react\";\n\nexport const HomePageFoldersSkeleton = () => {\n return (\n <>\n {Array(2) // render 2 folder sections\n .fill(null)\n .map((_, sectionIdx) => (\n <div key={sectionIdx} className=\"space-y-4 mb-5\">\n {/* Folder title + description */}\n <div className=\"animate-pulse space-y-2\">\n <div className=\"h-8 w-1/3 bg-gray-200 dark:bg-gray-700 rounded\" />\n <div className=\"h-4 w-1/2 bg-gray-200 dark:bg-gray-700 rounded\" />\n </div>\n\n {/* Posts grid */}\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-10\">\n {Array(3) // 3 post placeholders\n .fill(null)\n .map((__, postIdx) => (\n <div key={postIdx} className=\"animate-pulse space-y-3\">\n {/* Image */}\n <div className=\"w-full h-48 bg-gray-200 dark:bg-gray-700 rounded-lg\" />\n {/* Title bar */}\n <div className=\"h-5 w-3/4 bg-gray-200 dark:bg-gray-700 rounded\" />\n {/* Description line */}\n <div className=\"h-4 w-full bg-gray-200 dark:bg-gray-700 rounded\" />\n </div>\n ))}\n\n {/* “View all” link */}\n <div className=\"flex justify-center items-center animate-pulse\">\n <div className=\"h-4 w-48 bg-gray-200 dark:bg-gray-700 rounded\" />\n </div>\n </div>\n </div>\n ))}\n </>\n );\n};\n\nconst HomePageFoldersServer = async ({ client }: { client: Opinly }) => {\n const folders = await client.client.content.homePageFolders.query();\n\n return (\n <>\n {folders.map((folder) => (\n <div className=\"space-y-4 \">\n <div className=\"flex flex-col gap-2 mb-20\">\n <Link\n key={folder.slug}\n href={`/blog/${folder.slug}`}\n className=\"text-3xl\"\n >\n {folder.title}\n </Link>\n <p className=\"text-sm text-gray-500\">{folder.description}</p>\n </div>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-10 mb-20\">\n {folder.posts\n .filter((post) => post !== null)\n .map((post) => (\n <PostPreview key={post.slug} post={post as any} />\n ))}\n <div className=\"flex justify-center w-full h-full items-center \">\n <Link\n href={`/blog/${folder.slug}`}\n className=\"flex items-center gap-2\"\n >\n <span>View all posts in {folder.title}</span>\n <ArrowRight className=\"w-4 h-4\" />\n </Link>\n </div>\n </div>\n </div>\n ))}\n </>\n );\n};\n\nexport const HomePageFolders = ({ client }: { client: Opinly }) => {\n return (\n <Suspense fallback={<HomePageFoldersSkeleton />}>\n <HomePageFoldersServer client={client} />\n </Suspense>\n );\n};\n"],"mappings":"AAQI,mBAOU,KADF,YANR;AARJ,OAAO,UAAU;AACjB,SAAS,mBAAmB;AAC5B,SAAS,kBAAkB;AAE3B,SAAS,gBAAgB;AAElB,MAAM,0BAA0B,MAAM;AAC3C,SACE,gCACG,gBAAM,CAAC,EACL,KAAK,IAAI,EACT,IAAI,CAAC,GAAG,eACP,qBAAC,SAAqB,WAAU,kBAE9B;AAAA,yBAAC,SAAI,WAAU,2BACb;AAAA,0BAAC,SAAI,WAAU,kDAAiD;AAAA,MAChE,oBAAC,SAAI,WAAU,kDAAiD;AAAA,OAClE;AAAA,IAGA,qBAAC,SAAI,WAAU,yDACZ;AAAA,YAAM,CAAC,EACL,KAAK,IAAI,EACT,IAAI,CAAC,IAAI,YACR,qBAAC,SAAkB,WAAU,2BAE3B;AAAA,4BAAC,SAAI,WAAU,uDAAsD;AAAA,QAErE,oBAAC,SAAI,WAAU,kDAAiD;AAAA,QAEhE,oBAAC,SAAI,WAAU,mDAAkD;AAAA,WANzD,OAOV,CACD;AAAA,MAGH,oBAAC,SAAI,WAAU,kDACb,8BAAC,SAAI,WAAU,iDAAgD,GACjE;AAAA,OACF;AAAA,OA1BQ,UA2BV,CACD,GACL;AAEJ;AAEA,MAAM,wBAAwB,OAAO,EAAE,OAAO,MAA0B;AACtE,QAAM,UAAU,MAAM,OAAO,OAAO,QAAQ,gBAAgB,MAAM;AAElE,SACE,gCACG,kBAAQ,IAAI,CAAC,WACZ,qBAAC,SAAI,WAAU,cACb;AAAA,yBAAC,SAAI,WAAU,6BACb;AAAA;AAAA,QAAC;AAAA;AAAA,UAEC,MAAM,SAAS,OAAO,IAAI;AAAA,UAC1B,WAAU;AAAA,UAET,iBAAO;AAAA;AAAA,QAJH,OAAO;AAAA,MAKd;AAAA,MACA,oBAAC,OAAE,WAAU,yBAAyB,iBAAO,aAAY;AAAA,OAC3D;AAAA,IACA,qBAAC,SAAI,WAAU,+DACZ;AAAA,aAAO,MACL,OAAO,CAAC,SAAS,SAAS,IAAI,EAC9B,IAAI,CAAC,SACJ,oBAAC,eAA4B,QAAX,KAAK,IAAyB,CACjD;AAAA,MACH,oBAAC,SAAI,WAAU,mDACb;AAAA,QAAC;AAAA;AAAA,UACC,MAAM,SAAS,OAAO,IAAI;AAAA,UAC1B,WAAU;AAAA,UAEV;AAAA,iCAAC,UAAK;AAAA;AAAA,cAAmB,OAAO;AAAA,eAAM;AAAA,YACtC,oBAAC,cAAW,WAAU,WAAU;AAAA;AAAA;AAAA,MAClC,GACF;AAAA,OACF;AAAA,KACF,CACD,GACH;AAEJ;AAEO,MAAM,kBAAkB,CAAC,EAAE,OAAO,MAA0B;AACjE,SACE,oBAAC,YAAS,UAAU,oBAAC,2BAAwB,GAC3C,8BAAC,yBAAsB,QAAgB,GACzC;AAEJ;","names":[]}
|
|
@@ -0,0 +1,44 @@
|
|
|
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 home_page_exports = {};
|
|
20
|
+
__export(home_page_exports, {
|
|
21
|
+
HomePage: () => HomePage
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(home_page_exports);
|
|
24
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
25
|
+
var import_react = require("react");
|
|
26
|
+
var import_top_posts = require("./top-posts");
|
|
27
|
+
var import_folders = require("./folders");
|
|
28
|
+
var import_pagination = require("./pagination");
|
|
29
|
+
const HomePage = ({
|
|
30
|
+
searchParams,
|
|
31
|
+
client
|
|
32
|
+
}) => {
|
|
33
|
+
const parsedPage = searchParams.page ? parseInt(searchParams.page) : 1;
|
|
34
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "max-w-7xl mx-auto px-4 py-10", children: [
|
|
35
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-10", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_top_posts.TopPosts, { client, page: parsedPage }) }),
|
|
36
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex justify-center items-center mt-10 gap-2", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_pagination.HomePagePagination, { client, page: parsedPage }) }),
|
|
37
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex flex-col gap-10 mt-20", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.Suspense, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_folders.HomePageFolders, { client }) }) })
|
|
38
|
+
] });
|
|
39
|
+
};
|
|
40
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
41
|
+
0 && (module.exports = {
|
|
42
|
+
HomePage
|
|
43
|
+
});
|
|
44
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/home-page/index.tsx"],"sourcesContent":["import Link from \"next/link\";\nimport { Opinly } from \"@opinly/backend\";\nimport { Suspense } from \"react\";\nimport { TopPosts } from \"./top-posts\";\nimport { HomePageFolders } from \"./folders\";\nimport { cn } from \"../../utils/merge\";\nimport { HomePagePagination } from \"./pagination\";\n\nexport const HomePage = ({\n searchParams,\n client,\n}: {\n client: Opinly;\n searchParams: { page?: string };\n}) => {\n const parsedPage = searchParams.page ? parseInt(searchParams.page) : 1;\n\n return (\n <div className=\"max-w-7xl mx-auto px-4 py-10\">\n {/* Posts Grid */}\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-10\">\n <TopPosts client={client} page={parsedPage} />\n </div>\n\n {/* Pagination */}\n <div className=\"flex justify-center items-center mt-10 gap-2\">\n <HomePagePagination client={client} page={parsedPage} />\n </div>\n\n {/* Folder tags */}\n <div className=\"flex flex-col gap-10 mt-20\">\n <Suspense>\n <HomePageFolders client={client} />\n </Suspense>\n </div>\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBI;AAhBJ,mBAAyB;AACzB,uBAAyB;AACzB,qBAAgC;AAEhC,wBAAmC;AAE5B,MAAM,WAAW,CAAC;AAAA,EACvB;AAAA,EACA;AACF,MAGM;AACJ,QAAM,aAAa,aAAa,OAAO,SAAS,aAAa,IAAI,IAAI;AAErE,SACE,6CAAC,SAAI,WAAU,gCAEb;AAAA,gDAAC,SAAI,WAAU,yDACb,sDAAC,6BAAS,QAAgB,MAAM,YAAY,GAC9C;AAAA,IAGA,4CAAC,SAAI,WAAU,gDACb,sDAAC,wCAAmB,QAAgB,MAAM,YAAY,GACxD;AAAA,IAGA,4CAAC,SAAI,WAAU,8BACb,sDAAC,yBACC,sDAAC,kCAAgB,QAAgB,GACnC,GACF;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { Opinly } from '@opinly/backend';
|
|
3
|
+
|
|
4
|
+
declare const HomePage: ({ searchParams, client, }: {
|
|
5
|
+
client: Opinly;
|
|
6
|
+
searchParams: {
|
|
7
|
+
page?: string;
|
|
8
|
+
};
|
|
9
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
10
|
+
|
|
11
|
+
export { HomePage };
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { Opinly } from '@opinly/backend';
|
|
3
|
+
|
|
4
|
+
declare const HomePage: ({ searchParams, client, }: {
|
|
5
|
+
client: Opinly;
|
|
6
|
+
searchParams: {
|
|
7
|
+
page?: string;
|
|
8
|
+
};
|
|
9
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
10
|
+
|
|
11
|
+
export { HomePage };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Suspense } from "react";
|
|
3
|
+
import { TopPosts } from "./top-posts";
|
|
4
|
+
import { HomePageFolders } from "./folders";
|
|
5
|
+
import { HomePagePagination } from "./pagination";
|
|
6
|
+
const HomePage = ({
|
|
7
|
+
searchParams,
|
|
8
|
+
client
|
|
9
|
+
}) => {
|
|
10
|
+
const parsedPage = searchParams.page ? parseInt(searchParams.page) : 1;
|
|
11
|
+
return /* @__PURE__ */ jsxs("div", { className: "max-w-7xl mx-auto px-4 py-10", children: [
|
|
12
|
+
/* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-10", children: /* @__PURE__ */ jsx(TopPosts, { client, page: parsedPage }) }),
|
|
13
|
+
/* @__PURE__ */ jsx("div", { className: "flex justify-center items-center mt-10 gap-2", children: /* @__PURE__ */ jsx(HomePagePagination, { client, page: parsedPage }) }),
|
|
14
|
+
/* @__PURE__ */ jsx("div", { className: "flex flex-col gap-10 mt-20", children: /* @__PURE__ */ jsx(Suspense, { children: /* @__PURE__ */ jsx(HomePageFolders, { client }) }) })
|
|
15
|
+
] });
|
|
16
|
+
};
|
|
17
|
+
export {
|
|
18
|
+
HomePage
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/home-page/index.tsx"],"sourcesContent":["import Link from \"next/link\";\nimport { Opinly } from \"@opinly/backend\";\nimport { Suspense } from \"react\";\nimport { TopPosts } from \"./top-posts\";\nimport { HomePageFolders } from \"./folders\";\nimport { cn } from \"../../utils/merge\";\nimport { HomePagePagination } from \"./pagination\";\n\nexport const HomePage = ({\n searchParams,\n client,\n}: {\n client: Opinly;\n searchParams: { page?: string };\n}) => {\n const parsedPage = searchParams.page ? parseInt(searchParams.page) : 1;\n\n return (\n <div className=\"max-w-7xl mx-auto px-4 py-10\">\n {/* Posts Grid */}\n <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-10\">\n <TopPosts client={client} page={parsedPage} />\n </div>\n\n {/* Pagination */}\n <div className=\"flex justify-center items-center mt-10 gap-2\">\n <HomePagePagination client={client} page={parsedPage} />\n </div>\n\n {/* Folder tags */}\n <div className=\"flex flex-col gap-10 mt-20\">\n <Suspense>\n <HomePageFolders client={client} />\n </Suspense>\n </div>\n </div>\n );\n};\n"],"mappings":"AAkBI,SAGI,KAHJ;AAhBJ,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AACzB,SAAS,uBAAuB;AAEhC,SAAS,0BAA0B;AAE5B,MAAM,WAAW,CAAC;AAAA,EACvB;AAAA,EACA;AACF,MAGM;AACJ,QAAM,aAAa,aAAa,OAAO,SAAS,aAAa,IAAI,IAAI;AAErE,SACE,qBAAC,SAAI,WAAU,gCAEb;AAAA,wBAAC,SAAI,WAAU,yDACb,8BAAC,YAAS,QAAgB,MAAM,YAAY,GAC9C;AAAA,IAGA,oBAAC,SAAI,WAAU,gDACb,8BAAC,sBAAmB,QAAgB,MAAM,YAAY,GACxD;AAAA,IAGA,oBAAC,SAAI,WAAU,8BACb,8BAAC,YACC,8BAAC,mBAAgB,QAAgB,GACnC,GACF;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -26,46 +26,66 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
26
26
|
mod
|
|
27
27
|
));
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
var
|
|
30
|
-
__export(
|
|
31
|
-
|
|
29
|
+
var pagination_exports = {};
|
|
30
|
+
__export(pagination_exports, {
|
|
31
|
+
HomePagePagination: () => HomePagePagination
|
|
32
32
|
});
|
|
33
|
-
module.exports = __toCommonJS(
|
|
33
|
+
module.exports = __toCommonJS(pagination_exports);
|
|
34
34
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
35
35
|
var import_link = __toESM(require("next/link"), 1);
|
|
36
|
-
var
|
|
37
|
-
const
|
|
38
|
-
|
|
36
|
+
var import_merge = require("../../utils/merge");
|
|
37
|
+
const HomePagePagination = async ({
|
|
38
|
+
client,
|
|
39
39
|
page
|
|
40
40
|
}) => {
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
41
|
+
const count = await client.client.content.postsCount.query();
|
|
42
|
+
const totalPages = Math.ceil(count / 9);
|
|
43
|
+
const pages = [];
|
|
44
|
+
if (totalPages <= 5) {
|
|
45
|
+
for (let i = 1; i <= totalPages; i++) {
|
|
46
|
+
pages.push(i);
|
|
47
|
+
}
|
|
48
|
+
} else {
|
|
49
|
+
let start, end;
|
|
50
|
+
if (page <= 3) {
|
|
51
|
+
start = 1;
|
|
52
|
+
end = 5;
|
|
53
|
+
} else if (page >= totalPages - 2) {
|
|
54
|
+
start = totalPages - 4;
|
|
55
|
+
end = totalPages;
|
|
56
|
+
} else {
|
|
57
|
+
start = page - 2;
|
|
58
|
+
end = page + 2;
|
|
59
|
+
}
|
|
60
|
+
if (start > 1) {
|
|
61
|
+
pages.push(1);
|
|
62
|
+
if (start > 2) pages.push("ellipsis");
|
|
63
|
+
}
|
|
64
|
+
for (let i = start; i <= end; i++) {
|
|
65
|
+
pages.push(i);
|
|
66
|
+
}
|
|
67
|
+
if (end < totalPages) {
|
|
68
|
+
if (end < totalPages - 1) pages.push("ellipsis");
|
|
69
|
+
pages.push(totalPages);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("nav", { "aria-label": "Pagination", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex items-center space-x-1", children: pages.map(
|
|
73
|
+
(p, idx) => p === "ellipsis" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "px-2", children: "\u2026" }, `el-${idx}`) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
48
74
|
import_link.default,
|
|
49
75
|
{
|
|
50
76
|
href: `?page=${p}`,
|
|
51
|
-
className:
|
|
77
|
+
className: (0, import_merge.cn)(
|
|
78
|
+
"w-10 h-10 flex items-center justify-center rounded-md",
|
|
79
|
+
page === p ? "bg-primary text-white bg-black" : "border border-gray-200 dark:border-gray-700"
|
|
80
|
+
),
|
|
52
81
|
children: p
|
|
53
82
|
},
|
|
54
83
|
p
|
|
55
|
-
)
|
|
56
|
-
|
|
57
|
-
import_link.default,
|
|
58
|
-
{
|
|
59
|
-
href: `/blog/${folder.slug}`,
|
|
60
|
-
className: "px-4 py-1 bg-gray-100 text-sm rounded-full hover:bg-gray-200",
|
|
61
|
-
children: folder.title
|
|
62
|
-
},
|
|
63
|
-
folder.slug
|
|
64
|
-
)) })
|
|
65
|
-
] });
|
|
84
|
+
)
|
|
85
|
+
) }) });
|
|
66
86
|
};
|
|
67
87
|
// Annotate the CommonJS export names for ESM import in node:
|
|
68
88
|
0 && (module.exports = {
|
|
69
|
-
|
|
89
|
+
HomePagePagination
|
|
70
90
|
});
|
|
71
|
-
//# sourceMappingURL=
|
|
91
|
+
//# sourceMappingURL=pagination.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/components/home-page/pagination.tsx"],"sourcesContent":["import React from \"react\";\nimport Link from \"next/link\";\nimport { cn } from \"../../utils/merge\";\nimport { Opinly } from \"@opinly/backend\";\n\ninterface HomePagePaginationProps {\n client: Opinly;\n page: number;\n}\n\nexport const HomePagePagination = async ({\n client,\n page,\n}: HomePagePaginationProps) => {\n const count = await client.client.content.postsCount.query();\n const totalPages = Math.ceil(count / 9);\n\n // build a list of page labels: either a number or the string \"ellipsis\"\n const pages: (number | \"ellipsis\")[] = [];\n\n if (totalPages <= 5) {\n // Show every page\n for (let i = 1; i <= totalPages; i++) {\n pages.push(i);\n }\n } else {\n // determine sliding window\n let start: number, end: number;\n\n if (page <= 3) {\n start = 1;\n end = 5;\n } else if (page >= totalPages - 2) {\n start = totalPages - 4;\n end = totalPages;\n } else {\n start = page - 2;\n end = page + 2;\n }\n\n // first page + leading ellipsis\n if (start > 1) {\n pages.push(1);\n if (start > 2) pages.push(\"ellipsis\");\n }\n\n // window of pages\n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n\n // trailing ellipsis + last page\n if (end < totalPages) {\n if (end < totalPages - 1) pages.push(\"ellipsis\");\n pages.push(totalPages);\n }\n }\n\n return (\n <nav aria-label=\"Pagination\">\n <div className=\"flex items-center space-x-1\">\n {pages.map((p, idx) =>\n p === \"ellipsis\" ? (\n <span key={`el-${idx}`} className=\"px-2\">\n …\n </span>\n ) : (\n <Link\n key={p}\n href={`?page=${p}`}\n className={cn(\n \"w-10 h-10 flex items-center justify-center rounded-md\",\n page === p\n ? \"bg-primary text-white bg-black\"\n : \"border border-gray-200 dark:border-gray-700\"\n )}\n >\n {p}\n </Link>\n )\n )}\n </div>\n </nav>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA+DY;AA9DZ,kBAAiB;AACjB,mBAAmB;AAQZ,MAAM,qBAAqB,OAAO;AAAA,EACvC;AAAA,EACA;AACF,MAA+B;AAC7B,QAAM,QAAQ,MAAM,OAAO,OAAO,QAAQ,WAAW,MAAM;AAC3D,QAAM,aAAa,KAAK,KAAK,QAAQ,CAAC;AAGtC,QAAM,QAAiC,CAAC;AAExC,MAAI,cAAc,GAAG;AAEnB,aAAS,IAAI,GAAG,KAAK,YAAY,KAAK;AACpC,YAAM,KAAK,CAAC;AAAA,IACd;AAAA,EACF,OAAO;AAEL,QAAI,OAAe;AAEnB,QAAI,QAAQ,GAAG;AACb,cAAQ;AACR,YAAM;AAAA,IACR,WAAW,QAAQ,aAAa,GAAG;AACjC,cAAQ,aAAa;AACrB,YAAM;AAAA,IACR,OAAO;AACL,cAAQ,OAAO;AACf,YAAM,OAAO;AAAA,IACf;AAGA,QAAI,QAAQ,GAAG;AACb,YAAM,KAAK,CAAC;AACZ,UAAI,QAAQ,EAAG,OAAM,KAAK,UAAU;AAAA,IACtC;AAGA,aAAS,IAAI,OAAO,KAAK,KAAK,KAAK;AACjC,YAAM,KAAK,CAAC;AAAA,IACd;AAGA,QAAI,MAAM,YAAY;AACpB,UAAI,MAAM,aAAa,EAAG,OAAM,KAAK,UAAU;AAC/C,YAAM,KAAK,UAAU;AAAA,IACvB;AAAA,EACF;AAEA,SACE,4CAAC,SAAI,cAAW,cACd,sDAAC,SAAI,WAAU,+BACZ,gBAAM;AAAA,IAAI,CAAC,GAAG,QACb,MAAM,aACJ,4CAAC,UAAuB,WAAU,QAAO,sBAA9B,MAAM,GAAG,EAEpB,IAEA;AAAA,MAAC,YAAAA;AAAA,MAAA;AAAA,QAEC,MAAM,SAAS,CAAC;AAAA,QAChB,eAAW;AAAA,UACT;AAAA,UACA,SAAS,IACL,mCACA;AAAA,QACN;AAAA,QAEC;AAAA;AAAA,MATI;AAAA,IAUP;AAAA,EAEJ,GACF,GACF;AAEJ;","names":["Link"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { Opinly } from '@opinly/backend';
|
|
3
|
+
|
|
4
|
+
interface HomePagePaginationProps {
|
|
5
|
+
client: Opinly;
|
|
6
|
+
page: number;
|
|
7
|
+
}
|
|
8
|
+
declare const HomePagePagination: ({ client, page, }: HomePagePaginationProps) => Promise<react_jsx_runtime.JSX.Element>;
|
|
9
|
+
|
|
10
|
+
export { HomePagePagination };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { Opinly } from '@opinly/backend';
|
|
3
|
+
|
|
4
|
+
interface HomePagePaginationProps {
|
|
5
|
+
client: Opinly;
|
|
6
|
+
page: number;
|
|
7
|
+
}
|
|
8
|
+
declare const HomePagePagination: ({ client, page, }: HomePagePaginationProps) => Promise<react_jsx_runtime.JSX.Element>;
|
|
9
|
+
|
|
10
|
+
export { HomePagePagination };
|