@opinly/next 0.1.8 → 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.
- package/dist/components/author-page/index.cjs +2 -3
- package/dist/components/author-page/index.cjs.map +1 -1
- package/dist/components/author-page/index.js +2 -3
- package/dist/components/author-page/index.js.map +1 -1
- package/dist/components/authors-page/index.cjs +2 -3
- package/dist/components/authors-page/index.cjs.map +1 -1
- package/dist/components/authors-page/index.js +2 -3
- package/dist/components/authors-page/index.js.map +1 -1
- package/dist/components/blog-post/_components/content.cjs +18 -1
- package/dist/components/blog-post/_components/content.cjs.map +1 -1
- package/dist/components/blog-post/_components/content.js +18 -1
- package/dist/components/blog-post/_components/content.js.map +1 -1
- package/dist/components/blog-post/_components/share.cjs +1 -1
- package/dist/components/blog-post/_components/share.cjs.map +1 -1
- package/dist/components/blog-post/_components/share.js +1 -1
- package/dist/components/blog-post/_components/share.js.map +1 -1
- package/dist/components/blog-post/_components/table-of-contents.cjs +3 -3
- package/dist/components/blog-post/_components/table-of-contents.cjs.map +1 -1
- package/dist/components/blog-post/_components/table-of-contents.js +3 -3
- package/dist/components/blog-post/_components/table-of-contents.js.map +1 -1
- package/dist/components/blog-post/_helpers/json-ld.cjs +2 -3
- package/dist/components/blog-post/_helpers/json-ld.cjs.map +1 -1
- package/dist/components/blog-post/_helpers/json-ld.js +2 -3
- package/dist/components/blog-post/_helpers/json-ld.js.map +1 -1
- package/dist/components/blog-post/index.cjs +1 -1
- package/dist/components/blog-post/index.cjs.map +1 -1
- package/dist/components/blog-post/index.js +1 -1
- package/dist/components/blog-post/index.js.map +1 -1
- package/dist/components/bread-crumbs.cjs +1 -1
- package/dist/components/bread-crumbs.cjs.map +1 -1
- package/dist/components/bread-crumbs.js +1 -1
- package/dist/components/bread-crumbs.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 +26 -8
- 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 +24 -7
- 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/dist/utils/dates.cjs +33 -0
- package/dist/utils/dates.cjs.map +1 -0
- package/dist/utils/dates.d.cts +3 -0
- package/dist/utils/dates.d.ts +3 -0
- package/dist/utils/dates.js +9 -0
- package/dist/utils/dates.js.map +1 -0
- package/dist/utils/generate-metadata.cjs +60 -0
- package/dist/utils/generate-metadata.cjs.map +1 -0
- package/dist/utils/generate-metadata.d.cts +6 -0
- package/dist/utils/generate-metadata.d.ts +6 -0
- package/dist/utils/generate-metadata.js +36 -0
- package/dist/utils/generate-metadata.js.map +1 -0
- package/dist/utils/merge.cjs +33 -0
- package/dist/utils/merge.cjs.map +1 -0
- package/dist/utils/merge.d.cts +5 -0
- package/dist/utils/merge.d.ts +5 -0
- package/dist/utils/merge.js +9 -0
- package/dist/utils/merge.js.map +1 -0
- package/dist/utils/sdk-config.cjs +55 -0
- package/dist/utils/sdk-config.cjs.map +1 -0
- package/dist/utils/sdk-config.d.cts +12 -0
- package/dist/utils/sdk-config.d.ts +12 -0
- package/dist/utils/sdk-config.js +30 -0
- package/dist/utils/sdk-config.js.map +1 -0
- 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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/dates.ts"],"sourcesContent":["export const formatDate = (iso: string) =>\n new Date(iso).toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"2-digit\",\n year: \"numeric\",\n });\n"],"mappings":"AAAO,MAAM,aAAa,CAAC,QACzB,IAAI,KAAK,GAAG,EAAE,mBAAmB,SAAS;AAAA,EACxC,OAAO;AAAA,EACP,KAAK;AAAA,EACL,MAAM;AACR,CAAC;","names":[]}
|
|
@@ -0,0 +1,60 @@
|
|
|
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 generate_metadata_exports = {};
|
|
20
|
+
__export(generate_metadata_exports, {
|
|
21
|
+
generateMetadata: () => generateMetadata
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(generate_metadata_exports);
|
|
24
|
+
var import_sdk_config = require("./sdk-config");
|
|
25
|
+
const generateMetadata = async (client, params, parent) => {
|
|
26
|
+
const blog = await client.content.blog(params);
|
|
27
|
+
if (blog.type === "not-found") {
|
|
28
|
+
return parent;
|
|
29
|
+
}
|
|
30
|
+
const previousImages = (await parent).openGraph?.images || [];
|
|
31
|
+
if (blog.type === "post") {
|
|
32
|
+
const openGraphImageKey = blog.data?.titleFile?.fileKey;
|
|
33
|
+
const images = openGraphImageKey ? [`${import_sdk_config.opinlyConfig.imagesUrl}/${openGraphImageKey}`, ...previousImages] : previousImages;
|
|
34
|
+
return {
|
|
35
|
+
...parent,
|
|
36
|
+
title: blog.data.title,
|
|
37
|
+
openGraph: {
|
|
38
|
+
images,
|
|
39
|
+
type: "article",
|
|
40
|
+
authors: blog.data.author && [
|
|
41
|
+
`${import_sdk_config.opinlyConfig.blogUrl}/authors/${blog.data.author.slug}`
|
|
42
|
+
]
|
|
43
|
+
},
|
|
44
|
+
// keywords: [blog.data.keywords],
|
|
45
|
+
authors: blog.data.author && [
|
|
46
|
+
{
|
|
47
|
+
name: blog.data.author.name,
|
|
48
|
+
url: `${import_sdk_config.opinlyConfig.blogUrl}/authors/${blog.data.author.slug}`
|
|
49
|
+
}
|
|
50
|
+
],
|
|
51
|
+
other: {}
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
return parent;
|
|
55
|
+
};
|
|
56
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
57
|
+
0 && (module.exports = {
|
|
58
|
+
generateMetadata
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=generate-metadata.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/generate-metadata.ts"],"sourcesContent":["import { Opinly, OpinlyPageProps } from \"@opinly/backend\";\nimport type { Metadata, ResolvingMetadata } from \"next\";\nimport { opinlyConfig } from \"./sdk-config\";\n\nexport const generateMetadata = async (\n client: Opinly,\n params: OpinlyPageProps,\n parent: ResolvingMetadata\n): Promise<Metadata> => {\n const blog = await client.content.blog(params);\n\n if (blog.type === \"not-found\") {\n return parent as Metadata;\n }\n\n const previousImages = (await parent).openGraph?.images || [];\n\n if (blog.type === \"post\") {\n const openGraphImageKey = blog.data?.titleFile?.fileKey;\n\n const images = openGraphImageKey\n ? [`${opinlyConfig.imagesUrl}/${openGraphImageKey}`, ...previousImages]\n : previousImages;\n\n return {\n ...(parent as Metadata),\n title: blog.data.title,\n\n openGraph: {\n images: images,\n type: \"article\",\n authors: blog.data.author && [\n `${opinlyConfig.blogUrl}/authors/${blog.data.author.slug}`,\n ],\n },\n\n // keywords: [blog.data.keywords],\n authors: blog.data.author && [\n {\n name: blog.data.author.name,\n url: `${opinlyConfig.blogUrl}/authors/${blog.data.author.slug}`,\n },\n ],\n other: {},\n };\n }\n\n return parent as Metadata;\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,wBAA6B;AAEtB,MAAM,mBAAmB,OAC9B,QACA,QACA,WACsB;AACtB,QAAM,OAAO,MAAM,OAAO,QAAQ,KAAK,MAAM;AAE7C,MAAI,KAAK,SAAS,aAAa;AAC7B,WAAO;AAAA,EACT;AAEA,QAAM,kBAAkB,MAAM,QAAQ,WAAW,UAAU,CAAC;AAE5D,MAAI,KAAK,SAAS,QAAQ;AACxB,UAAM,oBAAoB,KAAK,MAAM,WAAW;AAEhD,UAAM,SAAS,oBACX,CAAC,GAAG,+BAAa,SAAS,IAAI,iBAAiB,IAAI,GAAG,cAAc,IACpE;AAEJ,WAAO;AAAA,MACL,GAAI;AAAA,MACJ,OAAO,KAAK,KAAK;AAAA,MAEjB,WAAW;AAAA,QACT;AAAA,QACA,MAAM;AAAA,QACN,SAAS,KAAK,KAAK,UAAU;AAAA,UAC3B,GAAG,+BAAa,OAAO,YAAY,KAAK,KAAK,OAAO,IAAI;AAAA,QAC1D;AAAA,MACF;AAAA;AAAA,MAGA,SAAS,KAAK,KAAK,UAAU;AAAA,QAC3B;AAAA,UACE,MAAM,KAAK,KAAK,OAAO;AAAA,UACvB,KAAK,GAAG,+BAAa,OAAO,YAAY,KAAK,KAAK,OAAO,IAAI;AAAA,QAC/D;AAAA,MACF;AAAA,MACA,OAAO,CAAC;AAAA,IACV;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Opinly, OpinlyPageProps } from '@opinly/backend';
|
|
2
|
+
import { ResolvingMetadata, Metadata } from 'next';
|
|
3
|
+
|
|
4
|
+
declare const generateMetadata: (client: Opinly, params: OpinlyPageProps, parent: ResolvingMetadata) => Promise<Metadata>;
|
|
5
|
+
|
|
6
|
+
export { generateMetadata };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Opinly, OpinlyPageProps } from '@opinly/backend';
|
|
2
|
+
import { ResolvingMetadata, Metadata } from 'next';
|
|
3
|
+
|
|
4
|
+
declare const generateMetadata: (client: Opinly, params: OpinlyPageProps, parent: ResolvingMetadata) => Promise<Metadata>;
|
|
5
|
+
|
|
6
|
+
export { generateMetadata };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { opinlyConfig } from "./sdk-config";
|
|
2
|
+
const generateMetadata = async (client, params, parent) => {
|
|
3
|
+
const blog = await client.content.blog(params);
|
|
4
|
+
if (blog.type === "not-found") {
|
|
5
|
+
return parent;
|
|
6
|
+
}
|
|
7
|
+
const previousImages = (await parent).openGraph?.images || [];
|
|
8
|
+
if (blog.type === "post") {
|
|
9
|
+
const openGraphImageKey = blog.data?.titleFile?.fileKey;
|
|
10
|
+
const images = openGraphImageKey ? [`${opinlyConfig.imagesUrl}/${openGraphImageKey}`, ...previousImages] : previousImages;
|
|
11
|
+
return {
|
|
12
|
+
...parent,
|
|
13
|
+
title: blog.data.title,
|
|
14
|
+
openGraph: {
|
|
15
|
+
images,
|
|
16
|
+
type: "article",
|
|
17
|
+
authors: blog.data.author && [
|
|
18
|
+
`${opinlyConfig.blogUrl}/authors/${blog.data.author.slug}`
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
// keywords: [blog.data.keywords],
|
|
22
|
+
authors: blog.data.author && [
|
|
23
|
+
{
|
|
24
|
+
name: blog.data.author.name,
|
|
25
|
+
url: `${opinlyConfig.blogUrl}/authors/${blog.data.author.slug}`
|
|
26
|
+
}
|
|
27
|
+
],
|
|
28
|
+
other: {}
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
return parent;
|
|
32
|
+
};
|
|
33
|
+
export {
|
|
34
|
+
generateMetadata
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=generate-metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/generate-metadata.ts"],"sourcesContent":["import { Opinly, OpinlyPageProps } from \"@opinly/backend\";\nimport type { Metadata, ResolvingMetadata } from \"next\";\nimport { opinlyConfig } from \"./sdk-config\";\n\nexport const generateMetadata = async (\n client: Opinly,\n params: OpinlyPageProps,\n parent: ResolvingMetadata\n): Promise<Metadata> => {\n const blog = await client.content.blog(params);\n\n if (blog.type === \"not-found\") {\n return parent as Metadata;\n }\n\n const previousImages = (await parent).openGraph?.images || [];\n\n if (blog.type === \"post\") {\n const openGraphImageKey = blog.data?.titleFile?.fileKey;\n\n const images = openGraphImageKey\n ? [`${opinlyConfig.imagesUrl}/${openGraphImageKey}`, ...previousImages]\n : previousImages;\n\n return {\n ...(parent as Metadata),\n title: blog.data.title,\n\n openGraph: {\n images: images,\n type: \"article\",\n authors: blog.data.author && [\n `${opinlyConfig.blogUrl}/authors/${blog.data.author.slug}`,\n ],\n },\n\n // keywords: [blog.data.keywords],\n authors: blog.data.author && [\n {\n name: blog.data.author.name,\n url: `${opinlyConfig.blogUrl}/authors/${blog.data.author.slug}`,\n },\n ],\n other: {},\n };\n }\n\n return parent as Metadata;\n};\n"],"mappings":"AAEA,SAAS,oBAAoB;AAEtB,MAAM,mBAAmB,OAC9B,QACA,QACA,WACsB;AACtB,QAAM,OAAO,MAAM,OAAO,QAAQ,KAAK,MAAM;AAE7C,MAAI,KAAK,SAAS,aAAa;AAC7B,WAAO;AAAA,EACT;AAEA,QAAM,kBAAkB,MAAM,QAAQ,WAAW,UAAU,CAAC;AAE5D,MAAI,KAAK,SAAS,QAAQ;AACxB,UAAM,oBAAoB,KAAK,MAAM,WAAW;AAEhD,UAAM,SAAS,oBACX,CAAC,GAAG,aAAa,SAAS,IAAI,iBAAiB,IAAI,GAAG,cAAc,IACpE;AAEJ,WAAO;AAAA,MACL,GAAI;AAAA,MACJ,OAAO,KAAK,KAAK;AAAA,MAEjB,WAAW;AAAA,QACT;AAAA,QACA,MAAM;AAAA,QACN,SAAS,KAAK,KAAK,UAAU;AAAA,UAC3B,GAAG,aAAa,OAAO,YAAY,KAAK,KAAK,OAAO,IAAI;AAAA,QAC1D;AAAA,MACF;AAAA;AAAA,MAGA,SAAS,KAAK,KAAK,UAAU;AAAA,QAC3B;AAAA,UACE,MAAM,KAAK,KAAK,OAAO;AAAA,UACvB,KAAK,GAAG,aAAa,OAAO,YAAY,KAAK,KAAK,OAAO,IAAI;AAAA,QAC/D;AAAA,MACF;AAAA,MACA,OAAO,CAAC;AAAA,IACV;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,33 @@
|
|
|
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 merge_exports = {};
|
|
20
|
+
__export(merge_exports, {
|
|
21
|
+
cn: () => cn
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(merge_exports);
|
|
24
|
+
var import_clsx = require("clsx");
|
|
25
|
+
var import_tailwind_merge = require("tailwind-merge");
|
|
26
|
+
const cn = (...inputs) => {
|
|
27
|
+
return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
|
|
28
|
+
};
|
|
29
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
30
|
+
0 && (module.exports = {
|
|
31
|
+
cn
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=merge.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/merge.ts"],"sourcesContent":["import { ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport const cn = (...inputs: ClassValue[]) => {\n return twMerge(clsx(inputs));\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAiC;AACjC,4BAAwB;AAEjB,MAAM,KAAK,IAAI,WAAyB;AAC7C,aAAO,mCAAQ,kBAAK,MAAM,CAAC;AAC7B;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/merge.ts"],"sourcesContent":["import { ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport const cn = (...inputs: ClassValue[]) => {\n return twMerge(clsx(inputs));\n};\n"],"mappings":"AAAA,SAAqB,YAAY;AACjC,SAAS,eAAe;AAEjB,MAAM,KAAK,IAAI,WAAyB;AAC7C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;","names":[]}
|
|
@@ -0,0 +1,55 @@
|
|
|
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 sdk_config_exports = {};
|
|
20
|
+
__export(sdk_config_exports, {
|
|
21
|
+
opinlyConfig: () => opinlyConfig,
|
|
22
|
+
setOpinlyConfig: () => setOpinlyConfig
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(sdk_config_exports);
|
|
25
|
+
const siteUrl = process.env.OPINLY_SITE_URL;
|
|
26
|
+
const opinlyEnvVars = {
|
|
27
|
+
OPINLY_IMAGES_PREFIX: process.env.OPINLY_IMAGES_PREFIX,
|
|
28
|
+
OPINLY_SITE_URL: process.env.OPINLY_SITE_URL,
|
|
29
|
+
OPINLY_BLOG_PREFIX: process.env.OPINLY_BLOG_PREFIX,
|
|
30
|
+
OPINLY_CDN_URL: process.env.OPINLY_CDN_URL,
|
|
31
|
+
OPINLY_SITE_NAME: process.env.OPINLY_SITE_NAME
|
|
32
|
+
};
|
|
33
|
+
Object.entries(opinlyEnvVars).forEach(([key, value]) => {
|
|
34
|
+
if (!value) {
|
|
35
|
+
throw new Error(`OPINLY ERROR: env var ${key} is not set`);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
let opinlyConfig = {
|
|
39
|
+
cdnUrl: process.env.OPINLY_CDN_URL || "https://cdn.opinly.ai",
|
|
40
|
+
siteUrl: process.env.OPINLY_SITE_URL,
|
|
41
|
+
imagesPrefix: process.env.OPINLY_IMAGES_PREFIX,
|
|
42
|
+
imagesUrl: `${process.env.OPINLY_SITE_URL}${process.env.OPINLY_IMAGES_PREFIX}`,
|
|
43
|
+
blogPrefix: process.env.OPINLY_BLOG_PREFIX,
|
|
44
|
+
blogUrl: `${process.env.OPINLY_SITE_URL}${process.env.OPINLY_BLOG_PREFIX}`,
|
|
45
|
+
siteName: process.env.OPINLY_SITE_NAME
|
|
46
|
+
};
|
|
47
|
+
function setOpinlyConfig(newConfig) {
|
|
48
|
+
opinlyConfig = { ...opinlyConfig, ...newConfig };
|
|
49
|
+
}
|
|
50
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
51
|
+
0 && (module.exports = {
|
|
52
|
+
opinlyConfig,
|
|
53
|
+
setOpinlyConfig
|
|
54
|
+
});
|
|
55
|
+
//# sourceMappingURL=sdk-config.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/sdk-config.ts"],"sourcesContent":["const siteUrl = process.env.OPINLY_SITE_URL;\n\nconst opinlyEnvVars = {\n OPINLY_IMAGES_PREFIX: process.env.OPINLY_IMAGES_PREFIX as string,\n OPINLY_SITE_URL: process.env.OPINLY_SITE_URL as string,\n OPINLY_BLOG_PREFIX: process.env.OPINLY_BLOG_PREFIX as string,\n OPINLY_CDN_URL: process.env.OPINLY_CDN_URL as string,\n OPINLY_SITE_NAME: process.env.OPINLY_SITE_NAME as string,\n};\n\nObject.entries(opinlyEnvVars).forEach(([key, value]) => {\n if (!value) {\n throw new Error(`OPINLY ERROR: env var ${key} is not set`);\n }\n});\n\nexport let opinlyConfig: {\n cdnUrl: string;\n imagesPrefix: string;\n imagesUrl: string;\n siteUrl: string;\n blogPrefix: string;\n blogUrl: string;\n siteName: string;\n} = {\n cdnUrl: process.env.OPINLY_CDN_URL || \"https://cdn.opinly.ai\",\n siteUrl: process.env.OPINLY_SITE_URL as string,\n imagesPrefix: process.env.OPINLY_IMAGES_PREFIX as string,\n imagesUrl: `${process.env.OPINLY_SITE_URL as string}${process.env.OPINLY_IMAGES_PREFIX as string}`,\n blogPrefix: process.env.OPINLY_BLOG_PREFIX as string,\n blogUrl: `${process.env.OPINLY_SITE_URL as string}${process.env.OPINLY_BLOG_PREFIX as string}`,\n siteName: process.env.OPINLY_SITE_NAME as string,\n};\n\nexport function setOpinlyConfig(newConfig: typeof opinlyConfig) {\n opinlyConfig = { ...opinlyConfig, ...newConfig };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAM,UAAU,QAAQ,IAAI;AAE5B,MAAM,gBAAgB;AAAA,EACpB,sBAAsB,QAAQ,IAAI;AAAA,EAClC,iBAAiB,QAAQ,IAAI;AAAA,EAC7B,oBAAoB,QAAQ,IAAI;AAAA,EAChC,gBAAgB,QAAQ,IAAI;AAAA,EAC5B,kBAAkB,QAAQ,IAAI;AAChC;AAEA,OAAO,QAAQ,aAAa,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACtD,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,yBAAyB,GAAG,aAAa;AAAA,EAC3D;AACF,CAAC;AAEM,IAAI,eAQP;AAAA,EACF,QAAQ,QAAQ,IAAI,kBAAkB;AAAA,EACtC,SAAS,QAAQ,IAAI;AAAA,EACrB,cAAc,QAAQ,IAAI;AAAA,EAC1B,WAAW,GAAG,QAAQ,IAAI,eAAyB,GAAG,QAAQ,IAAI,oBAA8B;AAAA,EAChG,YAAY,QAAQ,IAAI;AAAA,EACxB,SAAS,GAAG,QAAQ,IAAI,eAAyB,GAAG,QAAQ,IAAI,kBAA4B;AAAA,EAC5F,UAAU,QAAQ,IAAI;AACxB;AAEO,SAAS,gBAAgB,WAAgC;AAC9D,iBAAe,EAAE,GAAG,cAAc,GAAG,UAAU;AACjD;","names":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
declare let opinlyConfig: {
|
|
2
|
+
cdnUrl: string;
|
|
3
|
+
imagesPrefix: string;
|
|
4
|
+
imagesUrl: string;
|
|
5
|
+
siteUrl: string;
|
|
6
|
+
blogPrefix: string;
|
|
7
|
+
blogUrl: string;
|
|
8
|
+
siteName: string;
|
|
9
|
+
};
|
|
10
|
+
declare function setOpinlyConfig(newConfig: typeof opinlyConfig): void;
|
|
11
|
+
|
|
12
|
+
export { opinlyConfig, setOpinlyConfig };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
declare let opinlyConfig: {
|
|
2
|
+
cdnUrl: string;
|
|
3
|
+
imagesPrefix: string;
|
|
4
|
+
imagesUrl: string;
|
|
5
|
+
siteUrl: string;
|
|
6
|
+
blogPrefix: string;
|
|
7
|
+
blogUrl: string;
|
|
8
|
+
siteName: string;
|
|
9
|
+
};
|
|
10
|
+
declare function setOpinlyConfig(newConfig: typeof opinlyConfig): void;
|
|
11
|
+
|
|
12
|
+
export { opinlyConfig, setOpinlyConfig };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
const siteUrl = process.env.OPINLY_SITE_URL;
|
|
2
|
+
const opinlyEnvVars = {
|
|
3
|
+
OPINLY_IMAGES_PREFIX: process.env.OPINLY_IMAGES_PREFIX,
|
|
4
|
+
OPINLY_SITE_URL: process.env.OPINLY_SITE_URL,
|
|
5
|
+
OPINLY_BLOG_PREFIX: process.env.OPINLY_BLOG_PREFIX,
|
|
6
|
+
OPINLY_CDN_URL: process.env.OPINLY_CDN_URL,
|
|
7
|
+
OPINLY_SITE_NAME: process.env.OPINLY_SITE_NAME
|
|
8
|
+
};
|
|
9
|
+
Object.entries(opinlyEnvVars).forEach(([key, value]) => {
|
|
10
|
+
if (!value) {
|
|
11
|
+
throw new Error(`OPINLY ERROR: env var ${key} is not set`);
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
let opinlyConfig = {
|
|
15
|
+
cdnUrl: process.env.OPINLY_CDN_URL || "https://cdn.opinly.ai",
|
|
16
|
+
siteUrl: process.env.OPINLY_SITE_URL,
|
|
17
|
+
imagesPrefix: process.env.OPINLY_IMAGES_PREFIX,
|
|
18
|
+
imagesUrl: `${process.env.OPINLY_SITE_URL}${process.env.OPINLY_IMAGES_PREFIX}`,
|
|
19
|
+
blogPrefix: process.env.OPINLY_BLOG_PREFIX,
|
|
20
|
+
blogUrl: `${process.env.OPINLY_SITE_URL}${process.env.OPINLY_BLOG_PREFIX}`,
|
|
21
|
+
siteName: process.env.OPINLY_SITE_NAME
|
|
22
|
+
};
|
|
23
|
+
function setOpinlyConfig(newConfig) {
|
|
24
|
+
opinlyConfig = { ...opinlyConfig, ...newConfig };
|
|
25
|
+
}
|
|
26
|
+
export {
|
|
27
|
+
opinlyConfig,
|
|
28
|
+
setOpinlyConfig
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=sdk-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/utils/sdk-config.ts"],"sourcesContent":["const siteUrl = process.env.OPINLY_SITE_URL;\n\nconst opinlyEnvVars = {\n OPINLY_IMAGES_PREFIX: process.env.OPINLY_IMAGES_PREFIX as string,\n OPINLY_SITE_URL: process.env.OPINLY_SITE_URL as string,\n OPINLY_BLOG_PREFIX: process.env.OPINLY_BLOG_PREFIX as string,\n OPINLY_CDN_URL: process.env.OPINLY_CDN_URL as string,\n OPINLY_SITE_NAME: process.env.OPINLY_SITE_NAME as string,\n};\n\nObject.entries(opinlyEnvVars).forEach(([key, value]) => {\n if (!value) {\n throw new Error(`OPINLY ERROR: env var ${key} is not set`);\n }\n});\n\nexport let opinlyConfig: {\n cdnUrl: string;\n imagesPrefix: string;\n imagesUrl: string;\n siteUrl: string;\n blogPrefix: string;\n blogUrl: string;\n siteName: string;\n} = {\n cdnUrl: process.env.OPINLY_CDN_URL || \"https://cdn.opinly.ai\",\n siteUrl: process.env.OPINLY_SITE_URL as string,\n imagesPrefix: process.env.OPINLY_IMAGES_PREFIX as string,\n imagesUrl: `${process.env.OPINLY_SITE_URL as string}${process.env.OPINLY_IMAGES_PREFIX as string}`,\n blogPrefix: process.env.OPINLY_BLOG_PREFIX as string,\n blogUrl: `${process.env.OPINLY_SITE_URL as string}${process.env.OPINLY_BLOG_PREFIX as string}`,\n siteName: process.env.OPINLY_SITE_NAME as string,\n};\n\nexport function setOpinlyConfig(newConfig: typeof opinlyConfig) {\n opinlyConfig = { ...opinlyConfig, ...newConfig };\n}\n"],"mappings":"AAAA,MAAM,UAAU,QAAQ,IAAI;AAE5B,MAAM,gBAAgB;AAAA,EACpB,sBAAsB,QAAQ,IAAI;AAAA,EAClC,iBAAiB,QAAQ,IAAI;AAAA,EAC7B,oBAAoB,QAAQ,IAAI;AAAA,EAChC,gBAAgB,QAAQ,IAAI;AAAA,EAC5B,kBAAkB,QAAQ,IAAI;AAChC;AAEA,OAAO,QAAQ,aAAa,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACtD,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,yBAAyB,GAAG,aAAa;AAAA,EAC3D;AACF,CAAC;AAEM,IAAI,eAQP;AAAA,EACF,QAAQ,QAAQ,IAAI,kBAAkB;AAAA,EACtC,SAAS,QAAQ,IAAI;AAAA,EACrB,cAAc,QAAQ,IAAI;AAAA,EAC1B,WAAW,GAAG,QAAQ,IAAI,eAAyB,GAAG,QAAQ,IAAI,oBAA8B;AAAA,EAChG,YAAY,QAAQ,IAAI;AAAA,EACxB,SAAS,GAAG,QAAQ,IAAI,eAAyB,GAAG,QAAQ,IAAI,kBAA4B;AAAA,EAC5F,UAAU,QAAQ,IAAI;AACxB;AAEO,SAAS,gBAAgB,WAAgC;AAC9D,iBAAe,EAAE,GAAG,cAAc,GAAG,UAAU;AACjD;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opinly/next",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.10",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"private": false,
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"react-syntax-highlighter": "^15.6.1",
|
|
30
30
|
"schema-dts": "^1.1.5",
|
|
31
31
|
"tailwind-merge": "^1.14.0",
|
|
32
|
-
"@opinly/backend": "0.1.
|
|
32
|
+
"@opinly/backend": "0.1.10"
|
|
33
33
|
},
|
|
34
34
|
"engines": {
|
|
35
35
|
"node": ">=16"
|
|
@@ -60,6 +60,7 @@
|
|
|
60
60
|
},
|
|
61
61
|
"scripts": {
|
|
62
62
|
"build": "tsup",
|
|
63
|
+
"dev": "tsup --config tsup.config.ts --watch",
|
|
63
64
|
"lint": "eslint src/",
|
|
64
65
|
"clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist"
|
|
65
66
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/home-page.tsx"],"sourcesContent":["import Link from \"next/link\";\n\nimport { Opinly } from \"@opinly/backend\";\nimport { PostPreview } from \"./post-preview\";\n\ntype HomePage = Extract<\n Awaited<ReturnType<Opinly[\"content\"][\"blog\"]>>,\n { type: \"home\" }\n>[\"data\"];\n\nexport const HomePage = ({\n homePage,\n page,\n}: {\n homePage: HomePage;\n page: number | null | undefined;\n}) => {\n const { posts, folders, count } = homePage;\n\n console.log(\"posts\", JSON.stringify(posts, null, 2));\n\n const currentPage = page;\n const totalPages = Math.ceil(count / 10);\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 {posts.map((post) => (\n <PostPreview key={post.slug} post={post} />\n ))}\n </div>\n\n {/* Pagination */}\n <div className=\"flex justify-center items-center mt-10 gap-2\">\n {Array.from({ length: totalPages }, (_, i) => i + 1).map((p) => (\n <Link\n key={p}\n href={`?page=${p}`}\n className={`px-3 py-1 border rounded ${\n p === currentPage\n ? \"bg-black text-white\"\n : \"hover:bg-gray-100 text-gray-700\"\n }`}\n >\n {p}\n </Link>\n ))}\n </div>\n\n {/* Folder tags */}\n <div className=\"flex flex-wrap gap-2 mb-10\">\n {folders.map((folder) => (\n <Link\n key={folder.slug}\n href={`/blog/${folder.slug}`}\n className=\"px-4 py-1 bg-gray-100 text-sm rounded-full hover:bg-gray-200\"\n >\n {folder.title}\n </Link>\n ))}\n </div>\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAyBI;AAzBJ,kBAAiB;AAGjB,0BAA4B;AAOrB,MAAM,WAAW,CAAC;AAAA,EACvB;AAAA,EACA;AACF,MAGM;AACJ,QAAM,EAAE,OAAO,SAAS,MAAM,IAAI;AAElC,UAAQ,IAAI,SAAS,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAEnD,QAAM,cAAc;AACpB,QAAM,aAAa,KAAK,KAAK,QAAQ,EAAE;AAEvC,SACE,6CAAC,SAAI,WAAU,gCAEb;AAAA,gDAAC,SAAI,WAAU,yDACZ,gBAAM,IAAI,CAAC,SACV,4CAAC,mCAA4B,QAAX,KAAK,IAAkB,CAC1C,GACH;AAAA,IAGA,4CAAC,SAAI,WAAU,gDACZ,gBAAM,KAAK,EAAE,QAAQ,WAAW,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,EAAE,IAAI,CAAC,MACxD;AAAA,MAAC,YAAAA;AAAA,MAAA;AAAA,QAEC,MAAM,SAAS,CAAC;AAAA,QAChB,WAAW,4BACT,MAAM,cACF,wBACA,iCACN;AAAA,QAEC;AAAA;AAAA,MARI;AAAA,IASP,CACD,GACH;AAAA,IAGA,4CAAC,SAAI,WAAU,8BACZ,kBAAQ,IAAI,CAAC,WACZ;AAAA,MAAC,YAAAA;AAAA,MAAA;AAAA,QAEC,MAAM,SAAS,OAAO,IAAI;AAAA,QAC1B,WAAU;AAAA,QAET,iBAAO;AAAA;AAAA,MAJH,OAAO;AAAA,IAKd,CACD,GACH;AAAA,KACF;AAEJ;","names":["Link"]}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { Opinly } from '@opinly/backend';
|
|
3
|
-
|
|
4
|
-
type HomePage = Extract<Awaited<ReturnType<Opinly["content"]["blog"]>>, {
|
|
5
|
-
type: "home";
|
|
6
|
-
}>["data"];
|
|
7
|
-
declare const HomePage: ({ homePage, page, }: {
|
|
8
|
-
homePage: HomePage;
|
|
9
|
-
page: number | null | undefined;
|
|
10
|
-
}) => react_jsx_runtime.JSX.Element;
|
|
11
|
-
|
|
12
|
-
export { HomePage };
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { Opinly } from '@opinly/backend';
|
|
3
|
-
|
|
4
|
-
type HomePage = Extract<Awaited<ReturnType<Opinly["content"]["blog"]>>, {
|
|
5
|
-
type: "home";
|
|
6
|
-
}>["data"];
|
|
7
|
-
declare const HomePage: ({ homePage, page, }: {
|
|
8
|
-
homePage: HomePage;
|
|
9
|
-
page: number | null | undefined;
|
|
10
|
-
}) => react_jsx_runtime.JSX.Element;
|
|
11
|
-
|
|
12
|
-
export { HomePage };
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
-
import Link from "next/link";
|
|
3
|
-
import { PostPreview } from "./post-preview";
|
|
4
|
-
const HomePage = ({
|
|
5
|
-
homePage,
|
|
6
|
-
page
|
|
7
|
-
}) => {
|
|
8
|
-
const { posts, folders, count } = homePage;
|
|
9
|
-
console.log("posts", JSON.stringify(posts, null, 2));
|
|
10
|
-
const currentPage = page;
|
|
11
|
-
const totalPages = Math.ceil(count / 10);
|
|
12
|
-
return /* @__PURE__ */ jsxs("div", { className: "max-w-7xl mx-auto px-4 py-10", children: [
|
|
13
|
-
/* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-10", children: posts.map((post) => /* @__PURE__ */ jsx(PostPreview, { post }, post.slug)) }),
|
|
14
|
-
/* @__PURE__ */ jsx("div", { className: "flex justify-center items-center mt-10 gap-2", children: Array.from({ length: totalPages }, (_, i) => i + 1).map((p) => /* @__PURE__ */ jsx(
|
|
15
|
-
Link,
|
|
16
|
-
{
|
|
17
|
-
href: `?page=${p}`,
|
|
18
|
-
className: `px-3 py-1 border rounded ${p === currentPage ? "bg-black text-white" : "hover:bg-gray-100 text-gray-700"}`,
|
|
19
|
-
children: p
|
|
20
|
-
},
|
|
21
|
-
p
|
|
22
|
-
)) }),
|
|
23
|
-
/* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2 mb-10", children: folders.map((folder) => /* @__PURE__ */ jsx(
|
|
24
|
-
Link,
|
|
25
|
-
{
|
|
26
|
-
href: `/blog/${folder.slug}`,
|
|
27
|
-
className: "px-4 py-1 bg-gray-100 text-sm rounded-full hover:bg-gray-200",
|
|
28
|
-
children: folder.title
|
|
29
|
-
},
|
|
30
|
-
folder.slug
|
|
31
|
-
)) })
|
|
32
|
-
] });
|
|
33
|
-
};
|
|
34
|
-
export {
|
|
35
|
-
HomePage
|
|
36
|
-
};
|
|
37
|
-
//# sourceMappingURL=home-page.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/home-page.tsx"],"sourcesContent":["import Link from \"next/link\";\n\nimport { Opinly } from \"@opinly/backend\";\nimport { PostPreview } from \"./post-preview\";\n\ntype HomePage = Extract<\n Awaited<ReturnType<Opinly[\"content\"][\"blog\"]>>,\n { type: \"home\" }\n>[\"data\"];\n\nexport const HomePage = ({\n homePage,\n page,\n}: {\n homePage: HomePage;\n page: number | null | undefined;\n}) => {\n const { posts, folders, count } = homePage;\n\n console.log(\"posts\", JSON.stringify(posts, null, 2));\n\n const currentPage = page;\n const totalPages = Math.ceil(count / 10);\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 {posts.map((post) => (\n <PostPreview key={post.slug} post={post} />\n ))}\n </div>\n\n {/* Pagination */}\n <div className=\"flex justify-center items-center mt-10 gap-2\">\n {Array.from({ length: totalPages }, (_, i) => i + 1).map((p) => (\n <Link\n key={p}\n href={`?page=${p}`}\n className={`px-3 py-1 border rounded ${\n p === currentPage\n ? \"bg-black text-white\"\n : \"hover:bg-gray-100 text-gray-700\"\n }`}\n >\n {p}\n </Link>\n ))}\n </div>\n\n {/* Folder tags */}\n <div className=\"flex flex-wrap gap-2 mb-10\">\n {folders.map((folder) => (\n <Link\n key={folder.slug}\n href={`/blog/${folder.slug}`}\n className=\"px-4 py-1 bg-gray-100 text-sm rounded-full hover:bg-gray-200\"\n >\n {folder.title}\n </Link>\n ))}\n </div>\n </div>\n );\n};\n"],"mappings":"AAyBI,SAIM,KAJN;AAzBJ,OAAO,UAAU;AAGjB,SAAS,mBAAmB;AAOrB,MAAM,WAAW,CAAC;AAAA,EACvB;AAAA,EACA;AACF,MAGM;AACJ,QAAM,EAAE,OAAO,SAAS,MAAM,IAAI;AAElC,UAAQ,IAAI,SAAS,KAAK,UAAU,OAAO,MAAM,CAAC,CAAC;AAEnD,QAAM,cAAc;AACpB,QAAM,aAAa,KAAK,KAAK,QAAQ,EAAE;AAEvC,SACE,qBAAC,SAAI,WAAU,gCAEb;AAAA,wBAAC,SAAI,WAAU,yDACZ,gBAAM,IAAI,CAAC,SACV,oBAAC,eAA4B,QAAX,KAAK,IAAkB,CAC1C,GACH;AAAA,IAGA,oBAAC,SAAI,WAAU,gDACZ,gBAAM,KAAK,EAAE,QAAQ,WAAW,GAAG,CAAC,GAAG,MAAM,IAAI,CAAC,EAAE,IAAI,CAAC,MACxD;AAAA,MAAC;AAAA;AAAA,QAEC,MAAM,SAAS,CAAC;AAAA,QAChB,WAAW,4BACT,MAAM,cACF,wBACA,iCACN;AAAA,QAEC;AAAA;AAAA,MARI;AAAA,IASP,CACD,GACH;AAAA,IAGA,oBAAC,SAAI,WAAU,8BACZ,kBAAQ,IAAI,CAAC,WACZ;AAAA,MAAC;AAAA;AAAA,QAEC,MAAM,SAAS,OAAO,IAAI;AAAA,QAC1B,WAAU;AAAA,QAET,iBAAO;AAAA;AAAA,MAJH,OAAO;AAAA,IAKd,CACD,GACH;AAAA,KACF;AAEJ;","names":[]}
|