@opinly/next 0.1.9 → 0.1.10

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 (74) hide show
  1. package/dist/components/author-page/index.cjs +1 -2
  2. package/dist/components/author-page/index.cjs.map +1 -1
  3. package/dist/components/author-page/index.js +1 -2
  4. package/dist/components/author-page/index.js.map +1 -1
  5. package/dist/components/authors-page/index.cjs +1 -2
  6. package/dist/components/authors-page/index.cjs.map +1 -1
  7. package/dist/components/authors-page/index.js +1 -2
  8. package/dist/components/authors-page/index.js.map +1 -1
  9. package/dist/components/blog-post/_components/content.cjs +18 -1
  10. package/dist/components/blog-post/_components/content.cjs.map +1 -1
  11. package/dist/components/blog-post/_components/content.js +18 -1
  12. package/dist/components/blog-post/_components/content.js.map +1 -1
  13. package/dist/components/blog-post/_components/table-of-contents.cjs +2 -2
  14. package/dist/components/blog-post/_components/table-of-contents.cjs.map +1 -1
  15. package/dist/components/blog-post/_components/table-of-contents.js +2 -2
  16. package/dist/components/blog-post/_components/table-of-contents.js.map +1 -1
  17. package/dist/components/blog-post/_helpers/json-ld.cjs +1 -2
  18. package/dist/components/blog-post/_helpers/json-ld.cjs.map +1 -1
  19. package/dist/components/blog-post/_helpers/json-ld.js +1 -2
  20. package/dist/components/blog-post/_helpers/json-ld.js.map +1 -1
  21. package/dist/components/home-page/folders.cjs +98 -0
  22. package/dist/components/home-page/folders.cjs.map +1 -0
  23. package/dist/components/home-page/folders.d.cts +9 -0
  24. package/dist/components/home-page/folders.d.ts +9 -0
  25. package/dist/components/home-page/folders.js +63 -0
  26. package/dist/components/home-page/folders.js.map +1 -0
  27. package/dist/components/home-page/index.cjs +44 -0
  28. package/dist/components/home-page/index.cjs.map +1 -0
  29. package/dist/components/home-page/index.d.cts +11 -0
  30. package/dist/components/home-page/index.d.ts +11 -0
  31. package/dist/components/home-page/index.js +20 -0
  32. package/dist/components/home-page/index.js.map +1 -0
  33. package/dist/components/{home-page.cjs → home-page/pagination.cjs} +48 -28
  34. package/dist/components/home-page/pagination.cjs.map +1 -0
  35. package/dist/components/home-page/pagination.d.cts +10 -0
  36. package/dist/components/home-page/pagination.d.ts +10 -0
  37. package/dist/components/home-page/pagination.js +57 -0
  38. package/dist/components/home-page/pagination.js.map +1 -0
  39. package/dist/components/home-page/top-posts.cjs +52 -0
  40. package/dist/components/home-page/top-posts.cjs.map +1 -0
  41. package/dist/components/home-page/top-posts.d.cts +9 -0
  42. package/dist/components/home-page/top-posts.d.ts +9 -0
  43. package/dist/components/home-page/top-posts.js +28 -0
  44. package/dist/components/home-page/top-posts.js.map +1 -0
  45. package/dist/components/opinly-blog.cjs +3 -2
  46. package/dist/components/opinly-blog.cjs.map +1 -1
  47. package/dist/components/opinly-blog.d.cts +5 -2
  48. package/dist/components/opinly-blog.d.ts +5 -2
  49. package/dist/components/opinly-blog.js +3 -2
  50. package/dist/components/opinly-blog.js.map +1 -1
  51. package/dist/components/post-preview.cjs +25 -7
  52. package/dist/components/post-preview.cjs.map +1 -1
  53. package/dist/components/post-preview.d.cts +3 -4
  54. package/dist/components/post-preview.d.ts +3 -4
  55. package/dist/components/post-preview.js +23 -6
  56. package/dist/components/post-preview.js.map +1 -1
  57. package/dist/index.cjs +1 -3
  58. package/dist/index.cjs.map +1 -1
  59. package/dist/index.d.cts +0 -1
  60. package/dist/index.d.ts +0 -1
  61. package/dist/index.js +0 -1
  62. package/dist/index.js.map +1 -1
  63. package/package.json +3 -2
  64. package/dist/components/home-page.cjs.map +0 -1
  65. package/dist/components/home-page.d.cts +0 -12
  66. package/dist/components/home-page.d.ts +0 -12
  67. package/dist/components/home-page.js +0 -37
  68. package/dist/components/home-page.js.map +0 -1
  69. package/dist/utils/images.cjs +0 -35
  70. package/dist/utils/images.cjs.map +0 -1
  71. package/dist/utils/images.d.cts +0 -3
  72. package/dist/utils/images.d.ts +0 -3
  73. package/dist/utils/images.js +0 -11
  74. package/dist/utils/images.js.map +0 -1
@@ -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 home_page_exports = {};
30
- __export(home_page_exports, {
31
- HomePage: () => HomePage
29
+ var pagination_exports = {};
30
+ __export(pagination_exports, {
31
+ HomePagePagination: () => HomePagePagination
32
32
  });
33
- module.exports = __toCommonJS(home_page_exports);
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 import_post_preview = require("./post-preview");
37
- const HomePage = ({
38
- homePage,
36
+ var import_merge = require("../../utils/merge");
37
+ const HomePagePagination = async ({
38
+ client,
39
39
  page
40
40
  }) => {
41
- const { posts, folders, count } = homePage;
42
- console.log("posts", JSON.stringify(posts, null, 2));
43
- const currentPage = page;
44
- const totalPages = Math.ceil(count / 10);
45
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "max-w-7xl mx-auto px-4 py-10", children: [
46
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-10", children: posts.map((post) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_post_preview.PostPreview, { post }, post.slug)) }),
47
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex justify-center items-center mt-10 gap-2", children: Array.from({ length: totalPages }, (_, i) => i + 1).map((p) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
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: `px-3 py-1 border rounded ${p === currentPage ? "bg-black text-white" : "hover:bg-gray-100 text-gray-700"}`,
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
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "flex flex-wrap gap-2 mb-10", children: folders.map((folder) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
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
- HomePage
89
+ HomePagePagination
70
90
  });
71
- //# sourceMappingURL=home-page.cjs.map
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 };
@@ -0,0 +1,57 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import Link from "next/link";
3
+ import { cn } from "../../utils/merge";
4
+ const HomePagePagination = async ({
5
+ client,
6
+ page
7
+ }) => {
8
+ const count = await client.client.content.postsCount.query();
9
+ const totalPages = Math.ceil(count / 9);
10
+ const pages = [];
11
+ if (totalPages <= 5) {
12
+ for (let i = 1; i <= totalPages; i++) {
13
+ pages.push(i);
14
+ }
15
+ } else {
16
+ let start, end;
17
+ if (page <= 3) {
18
+ start = 1;
19
+ end = 5;
20
+ } else if (page >= totalPages - 2) {
21
+ start = totalPages - 4;
22
+ end = totalPages;
23
+ } else {
24
+ start = page - 2;
25
+ end = page + 2;
26
+ }
27
+ if (start > 1) {
28
+ pages.push(1);
29
+ if (start > 2) pages.push("ellipsis");
30
+ }
31
+ for (let i = start; i <= end; i++) {
32
+ pages.push(i);
33
+ }
34
+ if (end < totalPages) {
35
+ if (end < totalPages - 1) pages.push("ellipsis");
36
+ pages.push(totalPages);
37
+ }
38
+ }
39
+ return /* @__PURE__ */ jsx("nav", { "aria-label": "Pagination", children: /* @__PURE__ */ jsx("div", { className: "flex items-center space-x-1", children: pages.map(
40
+ (p, idx) => p === "ellipsis" ? /* @__PURE__ */ jsx("span", { className: "px-2", children: "\u2026" }, `el-${idx}`) : /* @__PURE__ */ jsx(
41
+ Link,
42
+ {
43
+ href: `?page=${p}`,
44
+ className: cn(
45
+ "w-10 h-10 flex items-center justify-center rounded-md",
46
+ page === p ? "bg-primary text-white bg-black" : "border border-gray-200 dark:border-gray-700"
47
+ ),
48
+ children: p
49
+ },
50
+ p
51
+ )
52
+ ) }) });
53
+ };
54
+ export {
55
+ HomePagePagination
56
+ };
57
+ //# sourceMappingURL=pagination.js.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":"AA+DY;AA9DZ,OAAO,UAAU;AACjB,SAAS,UAAU;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,oBAAC,SAAI,cAAW,cACd,8BAAC,SAAI,WAAU,+BACZ,gBAAM;AAAA,IAAI,CAAC,GAAG,QACb,MAAM,aACJ,oBAAC,UAAuB,WAAU,QAAO,sBAA9B,MAAM,GAAG,EAEpB,IAEA;AAAA,MAAC;AAAA;AAAA,QAEC,MAAM,SAAS,CAAC;AAAA,QAChB,WAAW;AAAA,UACT;AAAA,UACA,SAAS,IACL,mCACA;AAAA,QACN;AAAA,QAEC;AAAA;AAAA,MATI;AAAA,IAUP;AAAA,EAEJ,GACF,GACF;AAEJ;","names":[]}
@@ -0,0 +1,52 @@
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 top_posts_exports = {};
20
+ __export(top_posts_exports, {
21
+ TopPosts: () => TopPosts
22
+ });
23
+ module.exports = __toCommonJS(top_posts_exports);
24
+ var import_jsx_runtime = require("react/jsx-runtime");
25
+ var import_post_preview = require("../post-preview");
26
+ var import_react = require("react");
27
+ const TopPostsServer = async ({
28
+ client,
29
+ page
30
+ }) => {
31
+ const posts = await client.client.content.paginatedPosts.query({
32
+ page
33
+ });
34
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: posts.map((post) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_post_preview.PostPreview, { post }, "top-posts-" + post.slug)) });
35
+ };
36
+ const TopPosts = ({
37
+ client,
38
+ page
39
+ }) => {
40
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
41
+ import_react.Suspense,
42
+ {
43
+ fallback: Array.from({ length: 9 }).map((_, i) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_post_preview.PostPreviewSkeleton, {}, i)),
44
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TopPostsServer, { client, page })
45
+ }
46
+ );
47
+ };
48
+ // Annotate the CommonJS export names for ESM import in node:
49
+ 0 && (module.exports = {
50
+ TopPosts
51
+ });
52
+ //# sourceMappingURL=top-posts.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/home-page/top-posts.tsx"],"sourcesContent":["import { Opinly, OpinlyClient } from \"@opinly/backend\";\nimport { PostPreview, PostPreviewSkeleton } from \"../post-preview\";\nimport { Suspense } from \"react\";\n\nconst TopPostsServer = async ({\n client,\n page,\n}: {\n client: Opinly;\n page: number;\n}) => {\n // await new Promise(() => {});\n\n const posts = await client.client.content.paginatedPosts.query({\n page,\n });\n\n return (\n <>\n {posts.map((post) => (\n <PostPreview key={\"top-posts-\" + post.slug} post={post} />\n ))}\n </>\n );\n};\n\nexport const TopPosts = ({\n client,\n page,\n}: {\n client: Opinly;\n page: number;\n}) => {\n return (\n <Suspense\n fallback={Array.from({ length: 9 }).map((_, i) => (\n <PostPreviewSkeleton key={i} />\n ))}\n >\n <TopPostsServer client={client} page={page} />\n </Suspense>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBI;AAjBJ,0BAAiD;AACjD,mBAAyB;AAEzB,MAAM,iBAAiB,OAAO;AAAA,EAC5B;AAAA,EACA;AACF,MAGM;AAGJ,QAAM,QAAQ,MAAM,OAAO,OAAO,QAAQ,eAAe,MAAM;AAAA,IAC7D;AAAA,EACF,CAAC;AAED,SACE,2EACG,gBAAM,IAAI,CAAC,SACV,4CAAC,mCAA2C,QAA1B,eAAe,KAAK,IAAkB,CACzD,GACH;AAEJ;AAEO,MAAM,WAAW,CAAC;AAAA,EACvB;AAAA,EACA;AACF,MAGM;AACJ,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,MAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAC1C,4CAAC,6CAAyB,CAAG,CAC9B;AAAA,MAED,sDAAC,kBAAe,QAAgB,MAAY;AAAA;AAAA,EAC9C;AAEJ;","names":[]}
@@ -0,0 +1,9 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { Opinly } from '@opinly/backend';
3
+
4
+ declare const TopPosts: ({ client, page, }: {
5
+ client: Opinly;
6
+ page: number;
7
+ }) => react_jsx_runtime.JSX.Element;
8
+
9
+ export { TopPosts };
@@ -0,0 +1,9 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { Opinly } from '@opinly/backend';
3
+
4
+ declare const TopPosts: ({ client, page, }: {
5
+ client: Opinly;
6
+ page: number;
7
+ }) => react_jsx_runtime.JSX.Element;
8
+
9
+ export { TopPosts };
@@ -0,0 +1,28 @@
1
+ import { Fragment, jsx } from "react/jsx-runtime";
2
+ import { PostPreview, PostPreviewSkeleton } from "../post-preview";
3
+ import { Suspense } from "react";
4
+ const TopPostsServer = async ({
5
+ client,
6
+ page
7
+ }) => {
8
+ const posts = await client.client.content.paginatedPosts.query({
9
+ page
10
+ });
11
+ return /* @__PURE__ */ jsx(Fragment, { children: posts.map((post) => /* @__PURE__ */ jsx(PostPreview, { post }, "top-posts-" + post.slug)) });
12
+ };
13
+ const TopPosts = ({
14
+ client,
15
+ page
16
+ }) => {
17
+ return /* @__PURE__ */ jsx(
18
+ Suspense,
19
+ {
20
+ fallback: Array.from({ length: 9 }).map((_, i) => /* @__PURE__ */ jsx(PostPreviewSkeleton, {}, i)),
21
+ children: /* @__PURE__ */ jsx(TopPostsServer, { client, page })
22
+ }
23
+ );
24
+ };
25
+ export {
26
+ TopPosts
27
+ };
28
+ //# sourceMappingURL=top-posts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/home-page/top-posts.tsx"],"sourcesContent":["import { Opinly, OpinlyClient } from \"@opinly/backend\";\nimport { PostPreview, PostPreviewSkeleton } from \"../post-preview\";\nimport { Suspense } from \"react\";\n\nconst TopPostsServer = async ({\n client,\n page,\n}: {\n client: Opinly;\n page: number;\n}) => {\n // await new Promise(() => {});\n\n const posts = await client.client.content.paginatedPosts.query({\n page,\n });\n\n return (\n <>\n {posts.map((post) => (\n <PostPreview key={\"top-posts-\" + post.slug} post={post} />\n ))}\n </>\n );\n};\n\nexport const TopPosts = ({\n client,\n page,\n}: {\n client: Opinly;\n page: number;\n}) => {\n return (\n <Suspense\n fallback={Array.from({ length: 9 }).map((_, i) => (\n <PostPreviewSkeleton key={i} />\n ))}\n >\n <TopPostsServer client={client} page={page} />\n </Suspense>\n );\n};\n"],"mappings":"AAkBI,mBAEI,WAFJ;AAjBJ,SAAS,aAAa,2BAA2B;AACjD,SAAS,gBAAgB;AAEzB,MAAM,iBAAiB,OAAO;AAAA,EAC5B;AAAA,EACA;AACF,MAGM;AAGJ,QAAM,QAAQ,MAAM,OAAO,OAAO,QAAQ,eAAe,MAAM;AAAA,IAC7D;AAAA,EACF,CAAC;AAED,SACE,gCACG,gBAAM,IAAI,CAAC,SACV,oBAAC,eAA2C,QAA1B,eAAe,KAAK,IAAkB,CACzD,GACH;AAEJ;AAEO,MAAM,WAAW,CAAC;AAAA,EACvB;AAAA,EACA;AACF,MAGM;AACJ,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,MAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MAC1C,oBAAC,yBAAyB,CAAG,CAC9B;AAAA,MAED,8BAAC,kBAAe,QAAgB,MAAY;AAAA;AAAA,EAC9C;AAEJ;","names":[]}