@san-siva/blogkit 1.0.12 → 1.1.1
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/README.md +64 -13
- package/dist/cjs/components/Blog.js +3 -118
- package/dist/cjs/components/Blog.js.map +1 -1
- package/dist/cjs/components/BlogHeader.js +4 -4
- package/dist/cjs/components/BlogHeader.js.map +1 -1
- package/dist/cjs/components/BlogLink.js +4 -23
- package/dist/cjs/components/BlogLink.js.map +1 -1
- package/dist/cjs/components/BlogSection.js +4 -29
- package/dist/cjs/components/BlogSection.js.map +1 -1
- package/dist/cjs/components/Callout.js +3 -4
- package/dist/cjs/components/Callout.js.map +1 -1
- package/dist/cjs/components/CodeBlock.js +3 -25
- package/dist/cjs/components/CodeBlock.js.map +1 -1
- package/dist/cjs/components/Mermaid.js +3 -46
- package/dist/cjs/components/Mermaid.js.map +1 -1
- package/dist/cjs/components/Table.js +2 -7
- package/dist/cjs/components/Table.js.map +1 -1
- package/dist/cjs/dynamicComponents/BlogDynamic.js +178 -0
- package/dist/cjs/dynamicComponents/BlogDynamic.js.map +1 -0
- package/dist/cjs/dynamicComponents/BlogHeaderDynamic.js +13 -0
- package/dist/cjs/dynamicComponents/BlogHeaderDynamic.js.map +1 -0
- package/dist/cjs/dynamicComponents/BlogLinkDynamic.js +35 -0
- package/dist/cjs/dynamicComponents/BlogLinkDynamic.js.map +1 -0
- package/dist/cjs/dynamicComponents/BlogSectionDynamic.js +50 -0
- package/dist/cjs/dynamicComponents/BlogSectionDynamic.js.map +1 -0
- package/dist/cjs/dynamicComponents/CalloutDynamic.js +14 -0
- package/dist/cjs/dynamicComponents/CalloutDynamic.js.map +1 -0
- package/dist/cjs/dynamicComponents/CodeBlockDynamic.js +38 -0
- package/dist/cjs/dynamicComponents/CodeBlockDynamic.js.map +1 -0
- package/dist/cjs/dynamicComponents/MermaidDynamic.js +59 -0
- package/dist/cjs/dynamicComponents/MermaidDynamic.js.map +1 -0
- package/dist/cjs/dynamicComponents/TableDynamic.js +18 -0
- package/dist/cjs/dynamicComponents/TableDynamic.js.map +1 -0
- package/dist/cjs/index.css +2 -0
- package/dist/cjs/index.css.map +1 -0
- package/dist/cjs/staticComponents/BlogLinkStatic.js +17 -0
- package/dist/cjs/staticComponents/BlogLinkStatic.js.map +1 -0
- package/dist/cjs/staticComponents/BlogSectionStatic.js +19 -0
- package/dist/cjs/staticComponents/BlogSectionStatic.js.map +1 -0
- package/dist/cjs/staticComponents/BlogStatic.js +13 -0
- package/dist/cjs/staticComponents/BlogStatic.js.map +1 -0
- package/dist/cjs/staticComponents/CodeBlockStatic.js +13 -0
- package/dist/cjs/staticComponents/CodeBlockStatic.js.map +1 -0
- package/dist/cjs/staticComponents/MermaidStatic.js +13 -0
- package/dist/cjs/staticComponents/MermaidStatic.js.map +1 -0
- package/dist/cjs/styles/Blog.module.scss.js +0 -4
- package/dist/cjs/styles/Blog.module.scss.js.map +1 -1
- package/dist/cjs/styles/BlogHeader.module.scss.js +0 -4
- package/dist/cjs/styles/BlogHeader.module.scss.js.map +1 -1
- package/dist/cjs/styles/BlogLink.module.scss.js +0 -4
- package/dist/cjs/styles/BlogLink.module.scss.js.map +1 -1
- package/dist/cjs/styles/BlogSection.module.scss.js +0 -4
- package/dist/cjs/styles/BlogSection.module.scss.js.map +1 -1
- package/dist/cjs/styles/Callout.module.scss.js +0 -4
- package/dist/cjs/styles/Callout.module.scss.js.map +1 -1
- package/dist/cjs/styles/CodeBlock.module.scss.js +1 -5
- package/dist/cjs/styles/CodeBlock.module.scss.js.map +1 -1
- package/dist/cjs/styles/Mermaid.module.scss.js +0 -4
- package/dist/cjs/styles/Mermaid.module.scss.js.map +1 -1
- package/dist/cjs/styles/Table.module.scss.js +0 -4
- package/dist/cjs/styles/Table.module.scss.js.map +1 -1
- package/dist/esm/components/Blog.js +5 -120
- package/dist/esm/components/Blog.js.map +1 -1
- package/dist/esm/components/BlogHeader.js +5 -5
- package/dist/esm/components/BlogHeader.js.map +1 -1
- package/dist/esm/components/BlogLink.js +6 -25
- package/dist/esm/components/BlogLink.js.map +1 -1
- package/dist/esm/components/BlogSection.js +6 -31
- package/dist/esm/components/BlogSection.js.map +1 -1
- package/dist/esm/components/Callout.js +4 -5
- package/dist/esm/components/Callout.js.map +1 -1
- package/dist/esm/components/CodeBlock.js +5 -27
- package/dist/esm/components/CodeBlock.js.map +1 -1
- package/dist/esm/components/Mermaid.js +5 -48
- package/dist/esm/components/Mermaid.js.map +1 -1
- package/dist/esm/components/Table.js +3 -8
- package/dist/esm/components/Table.js.map +1 -1
- package/dist/esm/dynamicComponents/BlogDynamic.js +174 -0
- package/dist/esm/dynamicComponents/BlogDynamic.js.map +1 -0
- package/dist/esm/dynamicComponents/BlogHeaderDynamic.js +9 -0
- package/dist/esm/dynamicComponents/BlogHeaderDynamic.js.map +1 -0
- package/dist/esm/dynamicComponents/BlogLinkDynamic.js +31 -0
- package/dist/esm/dynamicComponents/BlogLinkDynamic.js.map +1 -0
- package/dist/esm/dynamicComponents/BlogSectionDynamic.js +46 -0
- package/dist/esm/dynamicComponents/BlogSectionDynamic.js.map +1 -0
- package/dist/esm/dynamicComponents/CalloutDynamic.js +10 -0
- package/dist/esm/dynamicComponents/CalloutDynamic.js.map +1 -0
- package/dist/esm/dynamicComponents/CodeBlockDynamic.js +34 -0
- package/dist/esm/dynamicComponents/CodeBlockDynamic.js.map +1 -0
- package/dist/esm/dynamicComponents/MermaidDynamic.js +55 -0
- package/dist/esm/dynamicComponents/MermaidDynamic.js.map +1 -0
- package/dist/esm/dynamicComponents/TableDynamic.js +14 -0
- package/dist/esm/dynamicComponents/TableDynamic.js.map +1 -0
- package/dist/esm/index.css +2 -0
- package/dist/esm/index.css.map +1 -0
- package/dist/esm/staticComponents/BlogLinkStatic.js +13 -0
- package/dist/esm/staticComponents/BlogLinkStatic.js.map +1 -0
- package/dist/esm/staticComponents/BlogSectionStatic.js +15 -0
- package/dist/esm/staticComponents/BlogSectionStatic.js.map +1 -0
- package/dist/esm/staticComponents/BlogStatic.js +9 -0
- package/dist/esm/staticComponents/BlogStatic.js.map +1 -0
- package/dist/esm/staticComponents/CodeBlockStatic.js +9 -0
- package/dist/esm/staticComponents/CodeBlockStatic.js.map +1 -0
- package/dist/esm/staticComponents/MermaidStatic.js +9 -0
- package/dist/esm/staticComponents/MermaidStatic.js.map +1 -0
- package/dist/esm/styles/Blog.module.scss.js +0 -4
- package/dist/esm/styles/Blog.module.scss.js.map +1 -1
- package/dist/esm/styles/BlogHeader.module.scss.js +0 -4
- package/dist/esm/styles/BlogHeader.module.scss.js.map +1 -1
- package/dist/esm/styles/BlogLink.module.scss.js +0 -4
- package/dist/esm/styles/BlogLink.module.scss.js.map +1 -1
- package/dist/esm/styles/BlogSection.module.scss.js +0 -4
- package/dist/esm/styles/BlogSection.module.scss.js.map +1 -1
- package/dist/esm/styles/Callout.module.scss.js +0 -4
- package/dist/esm/styles/Callout.module.scss.js.map +1 -1
- package/dist/esm/styles/CodeBlock.module.scss.js +1 -5
- package/dist/esm/styles/CodeBlock.module.scss.js.map +1 -1
- package/dist/esm/styles/Mermaid.module.scss.js +0 -4
- package/dist/esm/styles/Mermaid.module.scss.js.map +1 -1
- package/dist/esm/styles/Table.module.scss.js +0 -4
- package/dist/esm/styles/Table.module.scss.js.map +1 -1
- package/dist/types/components/Blog.d.ts +0 -4
- package/dist/types/components/Blog.d.ts.map +1 -1
- package/dist/types/components/BlogHeader.d.ts +2 -2
- package/dist/types/components/BlogHeader.d.ts.map +1 -1
- package/dist/types/components/BlogLink.d.ts +2 -2
- package/dist/types/components/BlogLink.d.ts.map +1 -1
- package/dist/types/components/BlogSection.d.ts +5 -4
- package/dist/types/components/BlogSection.d.ts.map +1 -1
- package/dist/types/components/Callout.d.ts +1 -1
- package/dist/types/components/Callout.d.ts.map +1 -1
- package/dist/types/components/CodeBlock.d.ts +2 -3
- package/dist/types/components/CodeBlock.d.ts.map +1 -1
- package/dist/types/components/Mermaid.d.ts.map +1 -1
- package/dist/types/components/Table.d.ts.map +1 -1
- package/dist/types/components/index.d.ts +0 -1
- package/dist/types/components/index.d.ts.map +1 -1
- package/dist/types/dynamicComponents/BlogDynamic.d.ts +12 -0
- package/dist/types/dynamicComponents/BlogDynamic.d.ts.map +1 -0
- package/dist/types/dynamicComponents/BlogHeaderDynamic.d.ts +8 -0
- package/dist/types/dynamicComponents/BlogHeaderDynamic.d.ts.map +1 -0
- package/dist/types/dynamicComponents/BlogLinkDynamic.d.ts +9 -0
- package/dist/types/dynamicComponents/BlogLinkDynamic.d.ts.map +1 -0
- package/dist/types/dynamicComponents/BlogSectionDynamic.d.ts +11 -0
- package/dist/types/dynamicComponents/BlogSectionDynamic.d.ts.map +1 -0
- package/dist/types/dynamicComponents/CalloutDynamic.d.ts +10 -0
- package/dist/types/dynamicComponents/CalloutDynamic.d.ts.map +1 -0
- package/dist/types/dynamicComponents/CodeBlockDynamic.d.ts +10 -0
- package/dist/types/dynamicComponents/CodeBlockDynamic.d.ts.map +1 -0
- package/dist/types/dynamicComponents/MermaidDynamic.d.ts +9 -0
- package/dist/types/dynamicComponents/MermaidDynamic.d.ts.map +1 -0
- package/dist/types/dynamicComponents/TableDynamic.d.ts +10 -0
- package/dist/types/dynamicComponents/TableDynamic.d.ts.map +1 -0
- package/dist/types/index.d.ts +0 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/staticComponents/BlogLinkStatic.d.ts +9 -0
- package/dist/types/staticComponents/BlogLinkStatic.d.ts.map +1 -0
- package/dist/types/staticComponents/BlogSectionStatic.d.ts +10 -0
- package/dist/types/staticComponents/BlogSectionStatic.d.ts.map +1 -0
- package/dist/types/staticComponents/BlogStatic.d.ts +7 -0
- package/dist/types/staticComponents/BlogStatic.d.ts.map +1 -0
- package/dist/types/staticComponents/CodeBlockStatic.d.ts +9 -0
- package/dist/types/staticComponents/CodeBlockStatic.d.ts.map +1 -0
- package/dist/types/staticComponents/MermaidStatic.d.ts +9 -0
- package/dist/types/staticComponents/MermaidStatic.d.ts.map +1 -0
- package/package.json +8 -2
- package/src/components/Blog.tsx +7 -195
- package/src/components/BlogHeader.tsx +10 -23
- package/src/components/BlogLink.tsx +28 -58
- package/src/components/BlogSection.tsx +32 -57
- package/src/components/Callout.tsx +12 -11
- package/src/components/CodeBlock.tsx +23 -55
- package/src/components/Mermaid.tsx +21 -55
- package/src/components/Table.tsx +7 -34
- package/src/components/index.ts +0 -2
- package/src/dynamicComponents/BlogDynamic.tsx +264 -0
- package/src/dynamicComponents/BlogHeaderDynamic.tsx +32 -0
- package/src/dynamicComponents/BlogLinkDynamic.tsx +74 -0
- package/src/dynamicComponents/BlogSectionDynamic.tsx +90 -0
- package/src/dynamicComponents/CalloutDynamic.tsx +27 -0
- package/src/dynamicComponents/CodeBlockDynamic.tsx +76 -0
- package/src/dynamicComponents/MermaidDynamic.tsx +78 -0
- package/src/dynamicComponents/TableDynamic.tsx +54 -0
- package/src/index.ts +0 -3
- package/src/staticComponents/BlogLinkStatic.tsx +45 -0
- package/src/staticComponents/BlogSectionStatic.tsx +40 -0
- package/src/staticComponents/BlogStatic.tsx +16 -0
- package/src/staticComponents/CodeBlockStatic.tsx +34 -0
- package/src/staticComponents/MermaidStatic.tsx +26 -0
- package/src/styles/Blog.module.scss +19 -7
- package/src/styles/CodeBlock.module.scss +46 -41
- package/src/styles/CodeBlock.module.scss.d.ts +1 -0
- package/dist/cjs/node_modules/style-inject/dist/style-inject.es.js +0 -33
- package/dist/cjs/node_modules/style-inject/dist/style-inject.es.js.map +0 -1
- package/dist/esm/node_modules/style-inject/dist/style-inject.es.js +0 -29
- package/dist/esm/node_modules/style-inject/dist/style-inject.es.js.map +0 -1
|
@@ -3,15 +3,10 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
-
var
|
|
6
|
+
var TableDynamic = require('../dynamicComponents/TableDynamic.js');
|
|
7
7
|
|
|
8
8
|
const Table = ({ rows = [], headers = [], hasMarginUp = false, hasMarginDown = false, }) => {
|
|
9
|
-
|
|
10
|
-
return (jsxRuntime.jsxs("div", { className: `${Table_module.default.table}
|
|
11
|
-
${hasMarginUp ? Table_module.default['margin-top--1'] : ''}
|
|
12
|
-
${hasMarginDown ? Table_module.default['margin-bottom--2'] : ''}`, style: {
|
|
13
|
-
gridTemplateColumns: `repeat(${columnCount}, 1fr)`,
|
|
14
|
-
}, children: [jsxRuntime.jsx("div", { className: `${Table_module.default['table__header']}`, children: headers.map((header, index) => (jsxRuntime.jsx("div", { className: `${Table_module.default['table__header__cell']}`, children: header }, typeof header === 'string' ? header : index))) }), rows.map((row, index) => (jsxRuntime.jsx("div", { className: `${Table_module.default['table__row']}`, children: row.map((cell, cellIndex) => (jsxRuntime.jsx("div", { className: `${Table_module.default['table__row__cell']}`, children: cell }, typeof cell === 'string' ? cell : cellIndex))) }, index)))] }));
|
|
9
|
+
return (jsxRuntime.jsx(TableDynamic.default, { rows: rows, headers: headers, hasMarginUp: hasMarginUp, hasMarginDown: hasMarginDown }));
|
|
15
10
|
};
|
|
16
11
|
|
|
17
12
|
exports.default = Table;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.js","sources":["../../../src/components/Table.tsx"],"sourcesContent":["import { ReactNode } from 'react';\nimport
|
|
1
|
+
{"version":3,"file":"Table.js","sources":["../../../src/components/Table.tsx"],"sourcesContent":["import { ReactNode } from 'react';\nimport TableDynamic from '../dynamicComponents/TableDynamic';\n\ninterface TableProperties {\n\trows?: ReactNode[][];\n\theaders?: ReactNode[];\n\thasMarginUp?: boolean;\n\thasMarginDown?: boolean;\n}\n\nconst Table = ({\n\trows = [],\n\theaders = [],\n\thasMarginUp = false,\n\thasMarginDown = false,\n}: TableProperties) => {\n\treturn (\n\t\t<TableDynamic\n\t\t\trows={rows}\n\t\t\theaders={headers}\n\t\t\thasMarginUp={hasMarginUp}\n\t\t\thasMarginDown={hasMarginDown}\n\t\t/>\n\t);\n};\n\nexport default Table;\n"],"names":["_jsx","TableDynamic"],"mappings":";;;;;;;AAUA,MAAM,KAAK,GAAG,CAAC,EACd,IAAI,GAAG,EAAE,EACT,OAAO,GAAG,EAAE,EACZ,WAAW,GAAG,KAAK,EACnB,aAAa,GAAG,KAAK,GACJ,KAAI;IACrB,QACCA,eAACC,oBAAY,EAAA,EACZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,EAAA,CAC3B;AAEJ;;;;"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
var react = require('react');
|
|
8
|
+
var web = require('@react-spring/web');
|
|
9
|
+
var Blog_module = require('../styles/Blog.module.scss.js');
|
|
10
|
+
|
|
11
|
+
const Blog = ({ children, title = 'In this article' }) => {
|
|
12
|
+
const sectionReferences = react.useRef(new Map());
|
|
13
|
+
const [categoryTitles, setCategoryTitles] = react.useState(new Map());
|
|
14
|
+
const [visibleTitle, setVisibleTitle] = react.useState(null);
|
|
15
|
+
const [showTOC, setShowTOC] = react.useState(false);
|
|
16
|
+
const updateTimerRef = react.useRef(null);
|
|
17
|
+
const showTOCTimerRef = react.useRef(null);
|
|
18
|
+
const sortByDomPosition = react.useCallback(([, a], [, b]) => {
|
|
19
|
+
const position = a.el.compareDocumentPosition(b.el);
|
|
20
|
+
if (position & Node.DOCUMENT_POSITION_FOLLOWING) {
|
|
21
|
+
return -1; // a comes before b
|
|
22
|
+
}
|
|
23
|
+
else if (position & Node.DOCUMENT_POSITION_PRECEDING) {
|
|
24
|
+
return 1; // b comes before a
|
|
25
|
+
}
|
|
26
|
+
return 0;
|
|
27
|
+
}, []);
|
|
28
|
+
const debounceShowTOC = react.useCallback(() => {
|
|
29
|
+
if (showTOC)
|
|
30
|
+
return;
|
|
31
|
+
if (showTOCTimerRef.current) {
|
|
32
|
+
clearTimeout(showTOCTimerRef.current);
|
|
33
|
+
}
|
|
34
|
+
showTOCTimerRef.current = setTimeout(() => {
|
|
35
|
+
setShowTOC(true);
|
|
36
|
+
}, 200);
|
|
37
|
+
}, [showTOC]);
|
|
38
|
+
const updateCategoryTitles = react.useCallback(() => {
|
|
39
|
+
const now = Date.now();
|
|
40
|
+
const newCategoryTitles = new Map();
|
|
41
|
+
// Sort sections by their DOM position to maintain correct order
|
|
42
|
+
const sectionsArray = Array.from(sectionReferences.current.entries());
|
|
43
|
+
sectionsArray.sort(sortByDomPosition);
|
|
44
|
+
let firstSectionId = null;
|
|
45
|
+
for (const [id, { title, el, isSubSection }] of sectionsArray) {
|
|
46
|
+
if (!firstSectionId) {
|
|
47
|
+
firstSectionId = id;
|
|
48
|
+
}
|
|
49
|
+
newCategoryTitles.set(id, {
|
|
50
|
+
el,
|
|
51
|
+
title,
|
|
52
|
+
lastUpdatedAt: now,
|
|
53
|
+
isSubSection,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
if (newCategoryTitles.size === 0)
|
|
57
|
+
return;
|
|
58
|
+
setCategoryTitles(newCategoryTitles);
|
|
59
|
+
debounceShowTOC();
|
|
60
|
+
if (visibleTitle)
|
|
61
|
+
return;
|
|
62
|
+
setVisibleTitle(firstSectionId);
|
|
63
|
+
}, [visibleTitle, sortByDomPosition]);
|
|
64
|
+
const debounceUpdateCategoryTitles = react.useCallback(() => {
|
|
65
|
+
// Clear existing timer and set a new one to batch updates
|
|
66
|
+
if (updateTimerRef.current) {
|
|
67
|
+
clearTimeout(updateTimerRef.current);
|
|
68
|
+
}
|
|
69
|
+
updateTimerRef.current = setTimeout(() => {
|
|
70
|
+
updateCategoryTitles();
|
|
71
|
+
}, 50);
|
|
72
|
+
}, [updateCategoryTitles]);
|
|
73
|
+
react.useEffect(() => {
|
|
74
|
+
const observers = new Map();
|
|
75
|
+
for (const [id, { el }] of categoryTitles) {
|
|
76
|
+
const observer = new IntersectionObserver(([entry]) => {
|
|
77
|
+
if (!entry.isIntersecting)
|
|
78
|
+
return;
|
|
79
|
+
setVisibleTitle(visibleId => {
|
|
80
|
+
if (visibleId === id && !entry.isIntersecting)
|
|
81
|
+
return null;
|
|
82
|
+
if (entry.isIntersecting)
|
|
83
|
+
return id;
|
|
84
|
+
return visibleId;
|
|
85
|
+
});
|
|
86
|
+
}, { threshold: 0.1 });
|
|
87
|
+
observers.set(id, observer);
|
|
88
|
+
observer.observe(el);
|
|
89
|
+
}
|
|
90
|
+
return () => {
|
|
91
|
+
for (const observer of observers.values()) {
|
|
92
|
+
observer.disconnect();
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
}, [categoryTitles.size]);
|
|
96
|
+
react.useEffect(() => {
|
|
97
|
+
return () => {
|
|
98
|
+
if (updateTimerRef.current) {
|
|
99
|
+
clearTimeout(updateTimerRef.current);
|
|
100
|
+
}
|
|
101
|
+
if (showTOCTimerRef.current) {
|
|
102
|
+
clearTimeout(showTOCTimerRef.current);
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
}, []);
|
|
106
|
+
const handleSectionReference = react.useCallback((element) => {
|
|
107
|
+
if (!element)
|
|
108
|
+
return;
|
|
109
|
+
const { parentRef, childRefs } = element;
|
|
110
|
+
// Add parent section reference
|
|
111
|
+
if (parentRef) {
|
|
112
|
+
const id = parentRef.dataset.id;
|
|
113
|
+
const title = parentRef.dataset.title;
|
|
114
|
+
if (id && title) {
|
|
115
|
+
sectionReferences.current.set(id, {
|
|
116
|
+
el: parentRef,
|
|
117
|
+
title,
|
|
118
|
+
isSubSection: false,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Add child section references
|
|
123
|
+
if (Array.isArray(childRefs)) {
|
|
124
|
+
for (const childRef of childRefs) {
|
|
125
|
+
if (!childRef)
|
|
126
|
+
continue;
|
|
127
|
+
const id = childRef.dataset.id;
|
|
128
|
+
const title = childRef.dataset.title;
|
|
129
|
+
if (id && title) {
|
|
130
|
+
sectionReferences.current.set(id, {
|
|
131
|
+
el: childRef,
|
|
132
|
+
title,
|
|
133
|
+
isSubSection: true,
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
debounceUpdateCategoryTitles();
|
|
139
|
+
}, [debounceUpdateCategoryTitles]);
|
|
140
|
+
const handleClickCategoryTitle = (error) => {
|
|
141
|
+
const id = error.currentTarget.dataset.id;
|
|
142
|
+
const index = error.currentTarget.dataset.idx;
|
|
143
|
+
if (!id || !index)
|
|
144
|
+
return;
|
|
145
|
+
const { el } = categoryTitles.get(id) || {};
|
|
146
|
+
if (!el)
|
|
147
|
+
return;
|
|
148
|
+
const top = el.getBoundingClientRect().top + document.body.scrollTop - 100;
|
|
149
|
+
document.body.scrollTo({
|
|
150
|
+
top,
|
|
151
|
+
behavior: 'smooth',
|
|
152
|
+
});
|
|
153
|
+
const timer = setTimeout(() => {
|
|
154
|
+
setVisibleTitle(id);
|
|
155
|
+
clearTimeout(timer);
|
|
156
|
+
}, 1000);
|
|
157
|
+
};
|
|
158
|
+
const sidebarStyle = web.useSpring({
|
|
159
|
+
opacity: showTOC ? 1 : 0,
|
|
160
|
+
transform: showTOC ? 'translateX(0)' : 'translateX(80px)',
|
|
161
|
+
config: { tension: 280, friction: 60 },
|
|
162
|
+
});
|
|
163
|
+
return (jsxRuntime.jsxs("div", { className: Blog_module.default.blog, children: [jsxRuntime.jsx("div", { className: Blog_module.default['blog__content'], children: react.Children.map(children, child => {
|
|
164
|
+
if (!react.isValidElement(child))
|
|
165
|
+
return child;
|
|
166
|
+
return react.cloneElement(child, {
|
|
167
|
+
ref: handleSectionReference,
|
|
168
|
+
});
|
|
169
|
+
}) }), jsxRuntime.jsxs(web.animated.div, { className: Blog_module.default['blog__sidebar'], style: sidebarStyle, children: [jsxRuntime.jsx("p", { className: `${Blog_module.default['margin-bottom--3']} ${Blog_module.default['category__header']}`, children: title }), [...categoryTitles].map(([id, { title, isSubSection }], index, array) => {
|
|
170
|
+
const isNextSectionSubSection = array[index + 1]?.[1]?.isSubSection;
|
|
171
|
+
return (jsxRuntime.jsx("p", { "data-idx": index, "data-id": id, className: `${Blog_module.default['category__title']} ${id === visibleTitle ? Blog_module.default['category__title--active'] : ''} ${isSubSection ? Blog_module.default['category__title--sub'] : ''} ${isSubSection && !isNextSectionSubSection
|
|
172
|
+
? Blog_module.default['margin-bottom-imp--2']
|
|
173
|
+
: ''}`, onClick: handleClickCategoryTitle, children: title }, id));
|
|
174
|
+
})] })] }));
|
|
175
|
+
};
|
|
176
|
+
|
|
177
|
+
exports.default = Blog;
|
|
178
|
+
//# sourceMappingURL=BlogDynamic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlogDynamic.js","sources":["../../../src/dynamicComponents/BlogDynamic.tsx"],"sourcesContent":["'use client';\n\nimport {\n\tChildren,\n\tcloneElement,\n\tisValidElement,\n\tuseCallback,\n\tuseEffect,\n\tuseRef,\n\tuseState,\n} from 'react';\nimport { useSpring, animated } from '@react-spring/web';\n\nimport type { MouseEvent, ReactNode, RefAttributes } from 'react';\n\nimport styles from '../styles/Blog.module.scss';\n\ninterface BlogProperties {\n\tchildren: ReactNode;\n\ttitle?: string;\n}\n\nexport interface ForwardedReference {\n\tparentRef: HTMLDivElement;\n\tchildRefs: HTMLDivElement[];\n}\n\ninterface SectionReferenceValue {\n\tel: HTMLElement;\n\ttitle: string;\n\tisSubSection: boolean;\n}\n\ntype SectionReference = Map<string, SectionReferenceValue>;\n\ninterface CategoryTitleValue extends SectionReferenceValue {\n\tlastUpdatedAt: number;\n}\n\ntype CategoryTitle = Map<string, CategoryTitleValue>;\n\nconst Blog = ({ children, title = 'In this article' }: BlogProperties) => {\n\tconst sectionReferences = useRef<SectionReference>(new Map());\n\tconst [categoryTitles, setCategoryTitles] = useState<CategoryTitle>(\n\t\tnew Map()\n\t);\n\tconst [visibleTitle, setVisibleTitle] = useState<string | null>(null);\n\tconst [showTOC, setShowTOC] = useState(false);\n\n\tconst updateTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\tconst showTOCTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n\tconst sortByDomPosition = useCallback(\n\t\t(\n\t\t\t[, a]: [string, SectionReferenceValue],\n\t\t\t[, b]: [string, SectionReferenceValue]\n\t\t) => {\n\t\t\tconst position = a.el.compareDocumentPosition(b.el);\n\t\t\tif (position & Node.DOCUMENT_POSITION_FOLLOWING) {\n\t\t\t\treturn -1; // a comes before b\n\t\t\t} else if (position & Node.DOCUMENT_POSITION_PRECEDING) {\n\t\t\t\treturn 1; // b comes before a\n\t\t\t}\n\t\t\treturn 0;\n\t\t},\n\t\t[]\n\t);\n\n\tconst debounceShowTOC = useCallback(() => {\n\t\tif (showTOC) return;\n\t\tif (showTOCTimerRef.current) {\n\t\t\tclearTimeout(showTOCTimerRef.current);\n\t\t}\n\t\tshowTOCTimerRef.current = setTimeout(() => {\n\t\t\tsetShowTOC(true);\n\t\t}, 200);\n\t}, [showTOC]);\n\n\tconst updateCategoryTitles = useCallback(() => {\n\t\tconst now = Date.now();\n\t\tconst newCategoryTitles = new Map<string, CategoryTitleValue>();\n\n\t\t// Sort sections by their DOM position to maintain correct order\n\t\tconst sectionsArray = Array.from(sectionReferences.current.entries());\n\t\tsectionsArray.sort(sortByDomPosition);\n\n\t\tlet firstSectionId: string | null = null;\n\t\tfor (const [id, { title, el, isSubSection }] of sectionsArray) {\n\t\t\tif (!firstSectionId) {\n\t\t\t\tfirstSectionId = id;\n\t\t\t}\n\t\t\tnewCategoryTitles.set(id, {\n\t\t\t\tel,\n\t\t\t\ttitle,\n\t\t\t\tlastUpdatedAt: now,\n\t\t\t\tisSubSection,\n\t\t\t});\n\t\t}\n\n\t\tif (newCategoryTitles.size === 0) return;\n\n\t\tsetCategoryTitles(newCategoryTitles);\n\t\tdebounceShowTOC();\n\n\t\tif (visibleTitle) return;\n\t\tsetVisibleTitle(firstSectionId);\n\t}, [visibleTitle, sortByDomPosition]);\n\n\tconst debounceUpdateCategoryTitles = useCallback(() => {\n\t\t// Clear existing timer and set a new one to batch updates\n\t\tif (updateTimerRef.current) {\n\t\t\tclearTimeout(updateTimerRef.current);\n\t\t}\n\t\tupdateTimerRef.current = setTimeout(() => {\n\t\t\tupdateCategoryTitles();\n\t\t}, 50);\n\t}, [updateCategoryTitles]);\n\n\tuseEffect(() => {\n\t\tconst observers = new Map<string, IntersectionObserver>();\n\t\tfor (const [id, { el }] of categoryTitles) {\n\t\t\tconst observer = new IntersectionObserver(\n\t\t\t\t([entry]) => {\n\t\t\t\t\tif (!entry.isIntersecting) return;\n\t\t\t\t\tsetVisibleTitle(visibleId => {\n\t\t\t\t\t\tif (visibleId === id && !entry.isIntersecting) return null;\n\t\t\t\t\t\tif (entry.isIntersecting) return id;\n\t\t\t\t\t\treturn visibleId;\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\t{ threshold: 0.1 }\n\t\t\t);\n\t\t\tobservers.set(id, observer);\n\t\t\tobserver.observe(el);\n\t\t}\n\t\treturn () => {\n\t\t\tfor (const observer of observers.values()) {\n\t\t\t\tobserver.disconnect();\n\t\t\t}\n\t\t};\n\t}, [categoryTitles.size]);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (updateTimerRef.current) {\n\t\t\t\tclearTimeout(updateTimerRef.current);\n\t\t\t}\n\t\t\tif (showTOCTimerRef.current) {\n\t\t\t\tclearTimeout(showTOCTimerRef.current);\n\t\t\t}\n\t\t};\n\t}, []);\n\n\tconst handleSectionReference = useCallback(\n\t\t(element: ForwardedReference) => {\n\t\t\tif (!element) return;\n\t\t\tconst { parentRef, childRefs } = element;\n\n\t\t\t// Add parent section reference\n\t\t\tif (parentRef) {\n\t\t\t\tconst id = parentRef.dataset.id;\n\t\t\t\tconst title = parentRef.dataset.title;\n\t\t\t\tif (id && title) {\n\t\t\t\t\tsectionReferences.current.set(id, {\n\t\t\t\t\t\tel: parentRef,\n\t\t\t\t\t\ttitle,\n\t\t\t\t\t\tisSubSection: false,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add child section references\n\t\t\tif (Array.isArray(childRefs)) {\n\t\t\t\tfor (const childRef of childRefs) {\n\t\t\t\t\tif (!childRef) continue;\n\t\t\t\t\tconst id = childRef.dataset.id;\n\t\t\t\t\tconst title = childRef.dataset.title;\n\t\t\t\t\tif (id && title) {\n\t\t\t\t\t\tsectionReferences.current.set(id, {\n\t\t\t\t\t\t\tel: childRef,\n\t\t\t\t\t\t\ttitle,\n\t\t\t\t\t\t\tisSubSection: true,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdebounceUpdateCategoryTitles();\n\t\t},\n\t\t[debounceUpdateCategoryTitles]\n\t);\n\n\tconst handleClickCategoryTitle = (\n\t\terror: MouseEvent<HTMLParagraphElement>\n\t) => {\n\t\tconst id = error.currentTarget.dataset.id;\n\t\tconst index = error.currentTarget.dataset.idx;\n\t\tif (!id || !index) return;\n\n\t\tconst { el } = categoryTitles.get(id) || {};\n\t\tif (!el) return;\n\n\t\tconst top = el.getBoundingClientRect().top + document.body.scrollTop - 100;\n\t\tdocument.body.scrollTo({\n\t\t\ttop,\n\t\t\tbehavior: 'smooth',\n\t\t});\n\n\t\tconst timer = setTimeout(() => {\n\t\t\tsetVisibleTitle(id);\n\t\t\tclearTimeout(timer);\n\t\t}, 1000);\n\t};\n\n\tconst sidebarStyle = useSpring({\n\t\topacity: showTOC ? 1 : 0,\n\t\ttransform: showTOC ? 'translateX(0)' : 'translateX(80px)',\n\t\tconfig: { tension: 280, friction: 60 },\n\t});\n\n\treturn (\n\t\t<div className={styles.blog}>\n\t\t\t<div className={styles['blog__content']}>\n\t\t\t\t{Children.map(children, child => {\n\t\t\t\t\tif (!isValidElement(child)) return child;\n\t\t\t\t\treturn cloneElement(child, {\n\t\t\t\t\t\tref: handleSectionReference,\n\t\t\t\t\t} as RefAttributes<ForwardedReference>);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t\t<animated.div className={styles['blog__sidebar']} style={sidebarStyle}>\n\t\t\t\t<p\n\t\t\t\t\tclassName={`${styles['margin-bottom--3']} ${styles['category__header']}`}\n\t\t\t\t>\n\t\t\t\t\t{title}\n\t\t\t\t</p>\n\t\t\t\t{[...categoryTitles].map(\n\t\t\t\t\t([id, { title, isSubSection }], index, array) => {\n\t\t\t\t\t\tconst isNextSectionSubSection = array[index + 1]?.[1]?.isSubSection;\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\tkey={id}\n\t\t\t\t\t\t\t\tdata-idx={index}\n\t\t\t\t\t\t\t\tdata-id={id}\n\t\t\t\t\t\t\t\tclassName={`${styles['category__title']} ${\n\t\t\t\t\t\t\t\t\tid === visibleTitle ? styles['category__title--active'] : ''\n\t\t\t\t\t\t\t\t} ${isSubSection ? styles['category__title--sub'] : ''} ${\n\t\t\t\t\t\t\t\t\tisSubSection && !isNextSectionSubSection\n\t\t\t\t\t\t\t\t\t\t? styles['margin-bottom-imp--2']\n\t\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\tonClick={handleClickCategoryTitle}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t)}\n\t\t\t</animated.div>\n\t\t</div>\n\t);\n};\n\nexport default Blog;\n"],"names":["useRef","useState","useCallback","useEffect","useSpring","_jsxs","styles","_jsx","Children","isValidElement","cloneElement","animated"],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var react = require('react');
|
|
7
|
+
var BlogHeader_module = require('../styles/BlogHeader.module.scss.js');
|
|
8
|
+
|
|
9
|
+
const renderLineBreaks = (array) => array.map((element, index, array) => (jsxRuntime.jsxs(react.Fragment, { children: [element, index === array.length - 1 ? null : jsxRuntime.jsx("br", {})] }, element)));
|
|
10
|
+
const BlogHeader = ({ title, desc, isDescCite = true }) => (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("h1", { className: `${BlogHeader_module.default['blog-header']}`, children: renderLineBreaks(title) }), isDescCite ? (jsxRuntime.jsx("cite", { className: `${BlogHeader_module.default['blog-date']}`, children: renderLineBreaks(desc) })) : (jsxRuntime.jsx("p", { className: `${BlogHeader_module.default['blog-date']}`, children: renderLineBreaks(desc) }))] }));
|
|
11
|
+
|
|
12
|
+
exports.default = BlogHeader;
|
|
13
|
+
//# sourceMappingURL=BlogHeaderDynamic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlogHeaderDynamic.js","sources":["../../../src/dynamicComponents/BlogHeaderDynamic.tsx"],"sourcesContent":["import { Fragment } from 'react';\n\nimport styles from '../styles/BlogHeader.module.scss';\n\ninterface BlogProperties {\n\ttitle: string[];\n\tdesc: string[];\n\tisDescCite?: boolean;\n}\n\nconst renderLineBreaks = (array: string[]) =>\n\tarray.map((element, index, array) => (\n\t\t<Fragment key={element}>\n\t\t\t{element}\n\t\t\t{index === array.length - 1 ? null : <br />}\n\t\t</Fragment>\n\t));\n\nconst BlogHeader = ({ title, desc, isDescCite = true }: BlogProperties) => (\n\t\t<>\n\t\t\t<h1 className={`${styles['blog-header']}`}>{renderLineBreaks(title)}</h1>\n\t\t\t{isDescCite ? (\n\t\t\t\t<cite className={`${styles['blog-date']}`}>\n\t\t\t\t\t{renderLineBreaks(desc)}\n\t\t\t\t</cite>\n\t\t\t) : (\n\t\t\t\t<p className={`${styles['blog-date']}`}>{renderLineBreaks(desc)}</p>\n\t\t\t)}\n\t\t</>\n\t);\n\nexport default BlogHeader;\n"],"names":["_jsxs","Fragment","_jsx","_Fragment","styles"],"mappings":";;;;;;;;AAUA,MAAM,gBAAgB,GAAG,CAAC,KAAe,KACxC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,MAC/BA,eAAA,CAACC,cAAQ,eACP,OAAO,EACP,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAGC,cAAA,CAAA,IAAA,EAAA,EAAA,CAAM,KAF7B,OAAO,CAGX,CACX,CAAC;AAEH,MAAM,UAAU,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,EAAkB,MACpEF,eAAA,CAAAG,mBAAA,EAAA,EAAA,QAAA,EAAA,CACCD,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAE,GAAGE,yBAAM,CAAC,aAAa,CAAC,EAAE,EAAA,QAAA,EAAG,gBAAgB,CAAC,KAAK,CAAC,EAAA,CAAM,EACxE,UAAU,IACVF,cAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAE,CAAA,EAAGE,yBAAM,CAAC,WAAW,CAAC,CAAA,CAAE,EAAA,QAAA,EACvC,gBAAgB,CAAC,IAAI,CAAC,EAAA,CACjB,KAEPF,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAE,CAAA,EAAGE,yBAAM,CAAC,WAAW,CAAC,CAAA,CAAE,EAAA,QAAA,EAAG,gBAAgB,CAAC,IAAI,CAAC,EAAA,CAAK,CACpE,CAAA,EAAA,CACC;;;;"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
var react = require('react');
|
|
8
|
+
var web = require('@react-spring/web');
|
|
9
|
+
var BlogLink_module = require('../styles/BlogLink.module.scss.js');
|
|
10
|
+
var index = require('../utils/index.js');
|
|
11
|
+
|
|
12
|
+
const DEFAULT_LINE_END = 18;
|
|
13
|
+
const DEFAULT_POLYLINE_POINTS = '12 5, 19 12, 12 19';
|
|
14
|
+
const MOVED_POLYLINE_POINTS = '15 5, 22 12, 15 19';
|
|
15
|
+
const BlogLink = ({ title = '', desc = '', isInProgress = false, href }) => {
|
|
16
|
+
const [isHovered, setIsHovered] = react.useState(false);
|
|
17
|
+
const link = href || `/blog/${index.generateUrlForBlogTitle(title)}`;
|
|
18
|
+
const svgColor = web.useSpring({
|
|
19
|
+
stroke: isHovered ? '#4242fa' : 'transparent',
|
|
20
|
+
});
|
|
21
|
+
const polyLine = web.useSpring({
|
|
22
|
+
points: isHovered ? MOVED_POLYLINE_POINTS : DEFAULT_POLYLINE_POINTS,
|
|
23
|
+
config: { duration: 200 },
|
|
24
|
+
});
|
|
25
|
+
const lineEnd = web.useSpring({
|
|
26
|
+
x2: isHovered ? `${DEFAULT_LINE_END + 2}` : `${DEFAULT_LINE_END}`,
|
|
27
|
+
config: { duration: 200 },
|
|
28
|
+
});
|
|
29
|
+
if (isInProgress)
|
|
30
|
+
return null;
|
|
31
|
+
return (jsxRuntime.jsxs("a", { className: BlogLink_module.default['blog-link'], onMouseEnter: () => setIsHovered(true), onMouseLeave: () => setIsHovered(false), href: link, rel: "noopener noreferrer", children: [jsxRuntime.jsx("h6", { className: BlogLink_module.default['blog-link__title'], children: title }), jsxRuntime.jsx("p", { className: BlogLink_module.default['blog-link__description'], children: desc }), jsxRuntime.jsxs("div", { className: BlogLink_module.default['blog-link__read-more'], children: [jsxRuntime.jsx("p", { children: "Read More" }), jsxRuntime.jsxs(web.animated.svg, { xmlns: "http://www.w3.org/2000/svg", width: "18px", height: "18px", viewBox: "0 0 24 24", fill: "none", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", style: svgColor, children: [jsxRuntime.jsx(web.animated.line, { x1: "5", y1: "12", y2: "12", x2: lineEnd.x2 }), jsxRuntime.jsx(web.animated.polyline, { points: polyLine.points })] })] })] }));
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
exports.default = BlogLink;
|
|
35
|
+
//# sourceMappingURL=BlogLinkDynamic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlogLinkDynamic.js","sources":["../../../src/dynamicComponents/BlogLinkDynamic.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\n\nimport { animated, useSpring } from '@react-spring/web';\n\nimport styles from '../styles/BlogLink.module.scss';\n\nimport { generateUrlForBlogTitle } from '../utils';\n\ninterface Properties {\n\ttitle: string;\n\tdesc?: string;\n\tisInProgress?: boolean;\n\thref?: string;\n}\n\nconst DEFAULT_LINE_END = 18;\nconst DEFAULT_POLYLINE_POINTS = '12 5, 19 12, 12 19';\nconst MOVED_POLYLINE_POINTS = '15 5, 22 12, 15 19';\n\nconst BlogLink = ({ title = '', desc = '', isInProgress = false, href }: Properties) => {\n\tconst [isHovered, setIsHovered] = useState(false);\n\n\tconst link = href || `/blog/${generateUrlForBlogTitle(title)}`;\n\n\tconst svgColor = useSpring({\n\t\tstroke: isHovered ? '#4242fa' : 'transparent',\n\t});\n\n\tconst polyLine = useSpring({\n\t\tpoints: isHovered ? MOVED_POLYLINE_POINTS : DEFAULT_POLYLINE_POINTS,\n\t\tconfig: { duration: 200 },\n\t});\n\n\tconst lineEnd = useSpring({\n\t\tx2: isHovered ? `${DEFAULT_LINE_END + 2}` : `${DEFAULT_LINE_END}`,\n\t\tconfig: { duration: 200 },\n\t});\n\n\tif (isInProgress) return null;\n\n\treturn (\n\t\t<a\n\t\t\tclassName={styles['blog-link']}\n\t\t\tonMouseEnter={() => setIsHovered(true)}\n\t\t\tonMouseLeave={() => setIsHovered(false)}\n\t\t\thref={link}\n\t\t\trel=\"noopener noreferrer\"\n\t\t>\n\t\t\t<h6 className={styles['blog-link__title']}>{title}</h6>\n\t\t\t<p className={styles['blog-link__description']}>{desc}</p>\n\t\t\t<div className={styles['blog-link__read-more']}>\n\t\t\t\t<p>Read More</p>\n\t\t\t\t<animated.svg\n\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\twidth=\"18px\"\n\t\t\t\t\theight=\"18px\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\tstyle={svgColor as any}\n\t\t\t\t>\n\t\t\t\t\t<animated.line x1=\"5\" y1=\"12\" y2=\"12\" x2={lineEnd.x2 as any}></animated.line>\n\t\t\t\t\t<animated.polyline points={polyLine.points as any} />\n\t\t\t\t</animated.svg>\n\t\t\t</div>\n\t\t</a>\n\t);\n};\n\nexport default BlogLink;\n"],"names":["useState","generateUrlForBlogTitle","useSpring","_jsxs","styles","_jsx","animated"],"mappings":";;;;;;;;;;AAiBA,MAAM,gBAAgB,GAAG,EAAE;AAC3B,MAAM,uBAAuB,GAAG,oBAAoB;AACpD,MAAM,qBAAqB,GAAG,oBAAoB;AAElD,MAAM,QAAQ,GAAG,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE,YAAY,GAAG,KAAK,EAAE,IAAI,EAAc,KAAI;IACtF,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC;IAEjD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAA,MAAA,EAASC,6BAAuB,CAAC,KAAK,CAAC,CAAA,CAAE;IAE9D,MAAM,QAAQ,GAAGC,aAAS,CAAC;QAC1B,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,aAAa;AAC7C,KAAA,CAAC;IAEF,MAAM,QAAQ,GAAGA,aAAS,CAAC;QAC1B,MAAM,EAAE,SAAS,GAAG,qBAAqB,GAAG,uBAAuB;AACnE,QAAA,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE;AACzB,KAAA,CAAC;IAEF,MAAM,OAAO,GAAGA,aAAS,CAAC;AACzB,QAAA,EAAE,EAAE,SAAS,GAAG,CAAA,EAAG,gBAAgB,GAAG,CAAC,EAAE,GAAG,CAAA,EAAG,gBAAgB,CAAA,CAAE;AACjE,QAAA,MAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE;AACzB,KAAA,CAAC;AAEF,IAAA,IAAI,YAAY;AAAE,QAAA,OAAO,IAAI;AAE7B,IAAA,QACCC,eAAA,CAAA,GAAA,EAAA,EACC,SAAS,EAAEC,uBAAM,CAAC,WAAW,CAAC,EAC9B,YAAY,EAAE,MAAM,YAAY,CAAC,IAAI,CAAC,EACtC,YAAY,EAAE,MAAM,YAAY,CAAC,KAAK,CAAC,EACvC,IAAI,EAAE,IAAI,EACV,GAAG,EAAC,qBAAqB,EAAA,QAAA,EAAA,CAEzBC,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAED,uBAAM,CAAC,kBAAkB,CAAC,EAAA,QAAA,EAAG,KAAK,EAAA,CAAM,EACvDC,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAED,uBAAM,CAAC,wBAAwB,CAAC,EAAA,QAAA,EAAG,IAAI,EAAA,CAAK,EAC1DD,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAEC,uBAAM,CAAC,sBAAsB,CAAC,aAC7CC,cAAA,CAAA,GAAA,EAAA,EAAA,QAAA,EAAA,WAAA,EAAA,CAAgB,EAChBF,eAAA,CAACG,YAAQ,CAAC,GAAG,EAAA,EACZ,KAAK,EAAC,4BAA4B,EAClC,KAAK,EAAC,MAAM,EACZ,MAAM,EAAC,MAAM,EACb,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,WAAW,EAAC,GAAG,EACf,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,KAAK,EAAE,QAAe,aAEtBD,cAAA,CAACC,YAAQ,CAAC,IAAI,EAAA,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAE,OAAO,CAAC,EAAS,EAAA,CAAkB,EAC7ED,cAAA,CAACC,YAAQ,CAAC,QAAQ,IAAC,MAAM,EAAE,QAAQ,CAAC,MAAa,EAAA,CAAI,CAAA,EAAA,CACvC,CAAA,EAAA,CACV,CAAA,EAAA,CACH;AAEN;;;;"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var react = require('react');
|
|
7
|
+
var BlogSection_module = require('../styles/BlogSection.module.scss.js');
|
|
8
|
+
var index = require('../utils/index.js');
|
|
9
|
+
|
|
10
|
+
const BlogSection = react.forwardRef(({ title = '', category = '', children = null, increaseMarginBottom = false, }, forwardedReference) => {
|
|
11
|
+
const titleWithCategory = category ? `${category} - ${title}` : title;
|
|
12
|
+
const id = index.generateIdForBlogTitle(titleWithCategory);
|
|
13
|
+
const parentReference = react.useRef(null);
|
|
14
|
+
const childReferences = react.useRef([]);
|
|
15
|
+
const imperativeHandleRef = react.useRef(null);
|
|
16
|
+
react.useImperativeHandle(forwardedReference, () => {
|
|
17
|
+
const handle = {
|
|
18
|
+
parentRef: parentReference.current,
|
|
19
|
+
childRefs: childReferences.current,
|
|
20
|
+
};
|
|
21
|
+
imperativeHandleRef.current = handle;
|
|
22
|
+
return handle;
|
|
23
|
+
});
|
|
24
|
+
const handleChildReferences = (element) => {
|
|
25
|
+
if (!element)
|
|
26
|
+
return;
|
|
27
|
+
const { parentRef: subParentReference } = element;
|
|
28
|
+
if (!subParentReference)
|
|
29
|
+
return;
|
|
30
|
+
childReferences.current.push(subParentReference);
|
|
31
|
+
// Re-trigger parent ref callback with updated children
|
|
32
|
+
if (typeof forwardedReference === 'function' && imperativeHandleRef.current) {
|
|
33
|
+
forwardedReference(imperativeHandleRef.current);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
return (jsxRuntime.jsxs("div", { className: `${BlogSection_module.default['blog-section']}
|
|
37
|
+
${increaseMarginBottom
|
|
38
|
+
? BlogSection_module.default['margin-bottom--9']
|
|
39
|
+
: BlogSection_module.default['margin-bottom--6']}`, "data-title": title, "data-id": id, ref: parentReference, children: [title ? (jsxRuntime.jsx("h4", { className: BlogSection_module.default['blog-section__title'], children: title })) : null, react.Children.map(children, child => {
|
|
40
|
+
if (!react.isValidElement(child))
|
|
41
|
+
return child;
|
|
42
|
+
return react.cloneElement(child, {
|
|
43
|
+
ref: handleChildReferences,
|
|
44
|
+
});
|
|
45
|
+
})] }));
|
|
46
|
+
});
|
|
47
|
+
BlogSection.displayName = 'BlogSection';
|
|
48
|
+
|
|
49
|
+
exports.default = BlogSection;
|
|
50
|
+
//# sourceMappingURL=BlogSectionDynamic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlogSectionDynamic.js","sources":["../../../src/dynamicComponents/BlogSectionDynamic.tsx"],"sourcesContent":["import {\n\tChildren,\n\tcloneElement,\n\tforwardRef,\n\tisValidElement,\n\tuseImperativeHandle,\n\tuseRef,\n} from 'react';\n\nimport type { ReactNode, RefAttributes } from 'react';\n\nimport styles from '../styles/BlogSection.module.scss';\n\nimport type { ForwardedReference } from './BlogDynamic';\nimport { generateIdForBlogTitle } from '../utils';\n\ninterface BlogProperties {\n\ttitle?: string;\n\tcategory?: string;\n\tchildren?: ReactNode;\n\tincreaseMarginBottom?: boolean;\n}\n\nconst BlogSection = forwardRef<ForwardedReference, BlogProperties>(\n\t(\n\t\t{\n\t\t\ttitle = '',\n\t\t\tcategory = '',\n\t\t\tchildren = null,\n\t\t\tincreaseMarginBottom = false,\n\t\t}: BlogProperties,\n\t\tforwardedReference\n\t) => {\n\t\tconst titleWithCategory = category ? `${category} - ${title}` : title;\n\t\tconst id = generateIdForBlogTitle(titleWithCategory);\n\n\t\tconst parentReference = useRef<ForwardedReference['parentRef']>(null);\n\t\tconst childReferences = useRef<ForwardedReference['childRefs']>([]);\n\t\tconst imperativeHandleRef = useRef<ForwardedReference | null>(null);\n\n\t\tuseImperativeHandle(forwardedReference, () => {\n\t\t\tconst handle = {\n\t\t\t\tparentRef: parentReference.current!,\n\t\t\t\tchildRefs: childReferences.current!,\n\t\t\t};\n\t\t\timperativeHandleRef.current = handle;\n\t\t\treturn handle;\n\t\t});\n\n\t\tconst handleChildReferences = (element: ForwardedReference | null) => {\n\t\t\tif (!element) return;\n\t\t\tconst { parentRef: subParentReference } = element;\n\t\t\tif (!subParentReference) return;\n\t\t\tchildReferences.current.push(subParentReference);\n\n\t\t\t// Re-trigger parent ref callback with updated children\n\t\t\tif (typeof forwardedReference === 'function' && imperativeHandleRef.current) {\n\t\t\t\tforwardedReference(imperativeHandleRef.current);\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t<div\n\t\t\t\tclassName={`${styles['blog-section']}\n\t\t\t\t\t${\n\t\t\t\t\t\tincreaseMarginBottom\n\t\t\t\t\t\t\t? styles['margin-bottom--9']\n\t\t\t\t\t\t\t: styles['margin-bottom--6']\n\t\t\t\t\t}`}\n\t\t\t\tdata-title={title}\n\t\t\t\tdata-id={id}\n\t\t\t\tref={parentReference}\n\t\t\t>\n\t\t\t\t{title ? (\n\t\t\t\t\t<h4 className={styles['blog-section__title']}>{title}</h4>\n\t\t\t\t) : null}\n\t\t\t\t{Children.map(children, child => {\n\t\t\t\t\tif (!isValidElement(child)) return child;\n\t\t\t\t\treturn cloneElement(child, {\n\t\t\t\t\t\tref: handleChildReferences,\n\t\t\t\t\t} as RefAttributes<ForwardedReference>);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t);\n\t}\n);\n\nBlogSection.displayName = 'BlogSection';\n\nexport default BlogSection;\n"],"names":["forwardRef","generateIdForBlogTitle","useRef","useImperativeHandle","_jsxs","styles","_jsx","Children","isValidElement","cloneElement"],"mappings":";;;;;;;;;AAuBA,MAAM,WAAW,GAAGA,gBAAU,CAC7B,CACC,EACC,KAAK,GAAG,EAAE,EACV,QAAQ,GAAG,EAAE,EACb,QAAQ,GAAG,IAAI,EACf,oBAAoB,GAAG,KAAK,GACZ,EACjB,kBAAkB,KACf;AACH,IAAA,MAAM,iBAAiB,GAAG,QAAQ,GAAG,CAAA,EAAG,QAAQ,CAAA,GAAA,EAAM,KAAK,CAAA,CAAE,GAAG,KAAK;AACrE,IAAA,MAAM,EAAE,GAAGC,4BAAsB,CAAC,iBAAiB,CAAC;AAEpD,IAAA,MAAM,eAAe,GAAGC,YAAM,CAAkC,IAAI,CAAC;AACrE,IAAA,MAAM,eAAe,GAAGA,YAAM,CAAkC,EAAE,CAAC;AACnE,IAAA,MAAM,mBAAmB,GAAGA,YAAM,CAA4B,IAAI,CAAC;AAEnE,IAAAC,yBAAmB,CAAC,kBAAkB,EAAE,MAAK;AAC5C,QAAA,MAAM,MAAM,GAAG;YACd,SAAS,EAAE,eAAe,CAAC,OAAQ;YACnC,SAAS,EAAE,eAAe,CAAC,OAAQ;SACnC;AACD,QAAA,mBAAmB,CAAC,OAAO,GAAG,MAAM;AACpC,QAAA,OAAO,MAAM;AACd,IAAA,CAAC,CAAC;AAEF,IAAA,MAAM,qBAAqB,GAAG,CAAC,OAAkC,KAAI;AACpE,QAAA,IAAI,CAAC,OAAO;YAAE;AACd,QAAA,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAE,GAAG,OAAO;AACjD,QAAA,IAAI,CAAC,kBAAkB;YAAE;AACzB,QAAA,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC;;QAGhD,IAAI,OAAO,kBAAkB,KAAK,UAAU,IAAI,mBAAmB,CAAC,OAAO,EAAE;AAC5E,YAAA,kBAAkB,CAAC,mBAAmB,CAAC,OAAO,CAAC;QAChD;AACD,IAAA,CAAC;IAED,QACCC,yBACC,SAAS,EAAE,GAAGC,0BAAM,CAAC,cAAc,CAAC;OAElC;AACC,cAAEA,0BAAM,CAAC,kBAAkB;cACzBA,0BAAM,CAAC,kBAAkB,CAC7B,CAAA,CAAE,EAAA,YAAA,EACS,KAAK,EAAA,SAAA,EACR,EAAE,EACX,GAAG,EAAE,eAAe,EAAA,QAAA,EAAA,CAEnB,KAAK,IACLC,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAED,0BAAM,CAAC,qBAAqB,CAAC,EAAA,QAAA,EAAG,KAAK,EAAA,CAAM,IACvD,IAAI,EACPE,cAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,IAAG;AAC/B,gBAAA,IAAI,CAACC,oBAAc,CAAC,KAAK,CAAC;AAAE,oBAAA,OAAO,KAAK;gBACxC,OAAOC,kBAAY,CAAC,KAAK,EAAE;AAC1B,oBAAA,GAAG,EAAE,qBAAqB;AACW,iBAAA,CAAC;YACxC,CAAC,CAAC,CAAA,EAAA,CACG;AAER,CAAC;AAGF,WAAW,CAAC,WAAW,GAAG,aAAa;;;;"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var Callout_module = require('../styles/Callout.module.scss.js');
|
|
7
|
+
|
|
8
|
+
const Callout = ({ children, type = 'info', hasMarginUp = false, hasMarginDown = false }) => {
|
|
9
|
+
const className = `${Callout_module.default.callout} ${Callout_module.default[`callout--${type}`]} ${hasMarginUp ? Callout_module.default['margin-top--1'] : ''} ${hasMarginDown ? Callout_module.default['margin-bottom--2'] : ''}`;
|
|
10
|
+
return (jsxRuntime.jsxs("div", { className: className, children: [jsxRuntime.jsx("div", { className: Callout_module.default.callout__icon }), jsxRuntime.jsx("div", { className: Callout_module.default.callout__wrapper, children: children })] }));
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
exports.default = Callout;
|
|
14
|
+
//# sourceMappingURL=CalloutDynamic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CalloutDynamic.js","sources":["../../../src/dynamicComponents/CalloutDynamic.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport styles from '../styles/Callout.module.scss';\n\ninterface CalloutProperties {\n\tchildren?: ReactNode;\n\ttype: 'info' | 'warning' | 'error' | 'success';\n\thasMarginUp?: boolean;\n\thasMarginDown?: boolean;\n}\n\nconst Callout = ({ children, type = 'info',\n\thasMarginUp = false,\n\thasMarginDown = false\n}: CalloutProperties) => {\n\tconst className = `${styles.callout} ${styles[`callout--${type}`]} ${\n\t\thasMarginUp ? styles['margin-top--1'] : ''\n\t} ${hasMarginDown ? styles['margin-bottom--2'] : ''}`;\n\treturn (\n\t\t<div className={className}>\n\t\t\t<div className={styles.callout__icon}/>\n\t\t\t<div className={styles.callout__wrapper}>{children}</div>\n\t\t</div>\n\t);\n};\n\nexport default Callout;\n"],"names":["styles","_jsxs","_jsx"],"mappings":";;;;;;;AAWA,MAAM,OAAO,GAAG,CAAC,EAAE,QAAQ,EAAE,IAAI,GAAG,MAAM,EACzC,WAAW,GAAG,KAAK,EACnB,aAAa,GAAG,KAAK,EACF,KAAI;AACvB,IAAA,MAAM,SAAS,GAAG,CAAA,EAAGA,sBAAM,CAAC,OAAO,IAAIA,sBAAM,CAAC,CAAA,SAAA,EAAY,IAAI,EAAE,CAAC,CAAA,CAAA,EAChE,WAAW,GAAGA,sBAAM,CAAC,eAAe,CAAC,GAAG,EACzC,CAAA,CAAA,EAAI,aAAa,GAAGA,sBAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,EAAE;IACrD,QACCC,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,SAAS,aACxBC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAEF,sBAAM,CAAC,aAAa,GAAG,EACvCE,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAEF,sBAAM,CAAC,gBAAgB,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAO,CAAA,EAAA,CACpD;AAER;;;;"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
var react = require('react');
|
|
8
|
+
var reactSyntaxHighlighter = require('react-syntax-highlighter');
|
|
9
|
+
var prism = require('react-syntax-highlighter/dist/esm/styles/prism');
|
|
10
|
+
require('prismjs/themes/prism-tomorrow.css');
|
|
11
|
+
var CodeBlock_module = require('../styles/CodeBlock.module.scss.js');
|
|
12
|
+
|
|
13
|
+
const SH = reactSyntaxHighlighter.Prism;
|
|
14
|
+
const CodeBlock = ({ language = 'javascript', code = '', hasMarginUp = false, hasMarginDown = false, }) => {
|
|
15
|
+
const [isCopyMode, setCopyMode] = react.useState(false);
|
|
16
|
+
const copyToClipboard = async () => {
|
|
17
|
+
try {
|
|
18
|
+
await navigator.clipboard.writeText(code);
|
|
19
|
+
setCopyMode(true);
|
|
20
|
+
setTimeout(() => {
|
|
21
|
+
setCopyMode(false);
|
|
22
|
+
}, 1000);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
console.error('Failed to copy:', error);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
const lineNumberStyle = {
|
|
29
|
+
color: '#95a1b1',
|
|
30
|
+
fontSize: '0.9em',
|
|
31
|
+
paddingRight: '1em',
|
|
32
|
+
marginRight: '8px',
|
|
33
|
+
};
|
|
34
|
+
return (jsxRuntime.jsxs("div", { className: `${CodeBlock_module.default['code-block']} ${hasMarginUp ? CodeBlock_module.default['margin-top--1'] : ''} ${hasMarginDown ? CodeBlock_module.default['margin-bottom--2'] : ''}`, children: [jsxRuntime.jsxs("div", { className: CodeBlock_module.default['code-block__header'], children: [jsxRuntime.jsx("div", { className: CodeBlock_module.default['code-block__header__title'], children: language }), jsxRuntime.jsx("div", { className: `${CodeBlock_module.default['code-block__header__copy']} ${isCopyMode ? CodeBlock_module.default['code-block__header__copy--active'] : ''}`, onClick: copyToClipboard })] }), jsxRuntime.jsx("div", { className: CodeBlock_module.default['code-block__wrapper'], children: jsxRuntime.jsx(SH, { language: language, style: prism.dracula, showLineNumbers: true, lineNumberStyle: lineNumberStyle, children: code }) })] }));
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
exports.default = CodeBlock;
|
|
38
|
+
//# sourceMappingURL=CodeBlockDynamic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeBlockDynamic.js","sources":["../../../src/dynamicComponents/CodeBlockDynamic.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\nimport { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';\nimport { dracula } from 'react-syntax-highlighter/dist/esm/styles/prism';\n\nimport 'prismjs/themes/prism-tomorrow.css';\n\nconst SH = SyntaxHighlighter as any;\n\nimport styles from '../styles/CodeBlock.module.scss';\n\ninterface Properties {\n\thasMarginUp?: boolean;\n\thasMarginDown?: boolean;\n\tlanguage?: string;\n\tcode?: string;\n}\n\nconst CodeBlock = ({\n\tlanguage = 'javascript',\n\tcode = '',\n\thasMarginUp = false,\n\thasMarginDown = false,\n}: Properties) => {\n\tconst [isCopyMode, setCopyMode] = useState(false);\n\n\tconst copyToClipboard = async () => {\n\t\ttry {\n\t\t\tawait navigator.clipboard.writeText(code);\n\t\t\tsetCopyMode(true);\n\t\t\tsetTimeout(() => {\n\t\t\t\tsetCopyMode(false);\n\t\t\t}, 1000);\n\t\t} catch (error) {\n\t\t\tconsole.error('Failed to copy:', error);\n\t\t}\n\t};\n\n\tconst lineNumberStyle = {\n\t\tcolor: '#95a1b1',\n\t\tfontSize: '0.9em',\n\t\tpaddingRight: '1em',\n\t\tmarginRight: '8px',\n\t};\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`${styles['code-block']} ${hasMarginUp ? styles['margin-top--1'] : ''} ${\n\t\t\t\thasMarginDown ? styles['margin-bottom--2'] : ''\n\t\t\t}`}\n\t\t>\n\t\t\t<div className={styles['code-block__header']}>\n\t\t\t\t<div className={styles['code-block__header__title']}>{language}</div>\n\t\t\t\t<div\n\t\t\t\t\tclassName={`${styles['code-block__header__copy']} ${\n\t\t\t\t\t\tisCopyMode ? styles['code-block__header__copy--active'] : ''\n\t\t\t\t\t}`}\n\t\t\t\t\tonClick={copyToClipboard}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div className={styles['code-block__wrapper']}>\n\t\t\t\t<SH\n\t\t\t\t\tlanguage={language}\n\t\t\t\t\tstyle={dracula}\n\t\t\t\t\tshowLineNumbers\n\t\t\t\t\tlineNumberStyle={lineNumberStyle}\n\t\t\t\t>\n\t\t\t\t\t{code}\n\t\t\t\t</SH>\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default CodeBlock;\n"],"names":["SyntaxHighlighter","useState","_jsxs","styles","_jsx","dracula"],"mappings":";;;;;;;;;;;AAQA,MAAM,EAAE,GAAGA,4BAAwB;AAWnC,MAAM,SAAS,GAAG,CAAC,EAClB,QAAQ,GAAG,YAAY,EACvB,IAAI,GAAG,EAAE,EACT,WAAW,GAAG,KAAK,EACnB,aAAa,GAAG,KAAK,GACT,KAAI;IAChB,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,GAAGC,cAAQ,CAAC,KAAK,CAAC;AAEjD,IAAA,MAAM,eAAe,GAAG,YAAW;AAClC,QAAA,IAAI;YACH,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC;YACzC,WAAW,CAAC,IAAI,CAAC;YACjB,UAAU,CAAC,MAAK;gBACf,WAAW,CAAC,KAAK,CAAC;YACnB,CAAC,EAAE,IAAI,CAAC;QACT;QAAE,OAAO,KAAK,EAAE;AACf,YAAA,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC;QACxC;AACD,IAAA,CAAC;AAED,IAAA,MAAM,eAAe,GAAG;AACvB,QAAA,KAAK,EAAE,SAAS;AAChB,QAAA,QAAQ,EAAE,OAAO;AACjB,QAAA,YAAY,EAAE,KAAK;AACnB,QAAA,WAAW,EAAE,KAAK;KAClB;IAED,QACCC,eAAA,CAAA,KAAA,EAAA,EACC,SAAS,EAAE,CAAA,EAAGC,wBAAM,CAAC,YAAY,CAAC,CAAA,CAAA,EAAI,WAAW,GAAGA,wBAAM,CAAC,eAAe,CAAC,GAAG,EAAE,CAAA,CAAA,EAC/E,aAAa,GAAGA,wBAAM,CAAC,kBAAkB,CAAC,GAAG,EAC9C,CAAA,CAAE,EAAA,QAAA,EAAA,CAEFD,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAEC,wBAAM,CAAC,oBAAoB,CAAC,EAAA,QAAA,EAAA,CAC3CC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAED,wBAAM,CAAC,2BAA2B,CAAC,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAO,EACrEC,cAAA,CAAA,KAAA,EAAA,EACC,SAAS,EAAE,CAAA,EAAGD,wBAAM,CAAC,0BAA0B,CAAC,CAAA,CAAA,EAC/C,UAAU,GAAGA,wBAAM,CAAC,kCAAkC,CAAC,GAAG,EAC3D,CAAA,CAAE,EACF,OAAO,EAAE,eAAe,EAAA,CACvB,CAAA,EAAA,CACG,EACNC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAED,wBAAM,CAAC,qBAAqB,CAAC,EAAA,QAAA,EAC5CC,cAAA,CAAC,EAAE,EAAA,EACF,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAEC,aAAO,EACd,eAAe,EAAA,IAAA,EACf,eAAe,EAAE,eAAe,EAAA,QAAA,EAE/B,IAAI,EAAA,CACD,EAAA,CACA,CAAA,EAAA,CACD;AAER;;;;"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
5
|
+
|
|
6
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
+
var react = require('react');
|
|
8
|
+
var mermaid = require('mermaid');
|
|
9
|
+
var Mermaid_module = require('../styles/Mermaid.module.scss.js');
|
|
10
|
+
|
|
11
|
+
mermaid.initialize({
|
|
12
|
+
startOnLoad: false,
|
|
13
|
+
theme: 'default',
|
|
14
|
+
timeline: {
|
|
15
|
+
useMaxWidth: true,
|
|
16
|
+
diagramMarginX: 0,
|
|
17
|
+
},
|
|
18
|
+
flowchart: {
|
|
19
|
+
useMaxWidth: true,
|
|
20
|
+
diagramPadding: 0,
|
|
21
|
+
},
|
|
22
|
+
sequence: {
|
|
23
|
+
useMaxWidth: true,
|
|
24
|
+
diagramMarginX: 0,
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
const Mermaid = ({ code = '', id = '', hasMarginUp = false, hasMarginDown = false, }) => {
|
|
28
|
+
const [enabled, setEnabled] = react.useState(false);
|
|
29
|
+
const mermaidReference = react.useRef(null);
|
|
30
|
+
const initializeMermaid = react.useCallback(async () => {
|
|
31
|
+
try {
|
|
32
|
+
if (!mermaidReference.current || !code)
|
|
33
|
+
return;
|
|
34
|
+
const { svg, bindFunctions } = await mermaid.render(`mermaid-diagram-${id}`, code);
|
|
35
|
+
if (!svg)
|
|
36
|
+
return;
|
|
37
|
+
mermaidReference.current.innerHTML = svg || '';
|
|
38
|
+
bindFunctions?.(mermaidReference.current);
|
|
39
|
+
setEnabled(true);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
console.error('Failed to render Mermaid diagram:', error);
|
|
43
|
+
}
|
|
44
|
+
}, [code, id]);
|
|
45
|
+
react.useEffect(() => {
|
|
46
|
+
if (!code || !mermaidReference.current)
|
|
47
|
+
return;
|
|
48
|
+
const timer = setTimeout(async () => {
|
|
49
|
+
await initializeMermaid();
|
|
50
|
+
}, 100);
|
|
51
|
+
return () => clearTimeout(timer);
|
|
52
|
+
}, [code, initializeMermaid]);
|
|
53
|
+
return (jsxRuntime.jsxs("div", { className: `${Mermaid_module.default.mermaid}
|
|
54
|
+
${hasMarginUp ? Mermaid_module.default['margin-top--1'] : ''}
|
|
55
|
+
${hasMarginDown ? Mermaid_module.default['margin-bottom--2'] : ''}`, children: [enabled ? null : jsxRuntime.jsx("p", { children: "Diagram Loading..." }), jsxRuntime.jsx("div", { ref: mermaidReference, id: id })] }));
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
exports.default = Mermaid;
|
|
59
|
+
//# sourceMappingURL=MermaidDynamic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MermaidDynamic.js","sources":["../../../src/dynamicComponents/MermaidDynamic.tsx"],"sourcesContent":["'use client';\n\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\nimport mermaid from 'mermaid';\n\nimport styles from '../styles/Mermaid.module.scss';\n\ninterface MermaidProperties {\n\tcode: string;\n\tid: string;\n\thasMarginUp?: boolean;\n\thasMarginDown?: boolean;\n}\n\nmermaid.initialize({\n\tstartOnLoad: false,\n\ttheme: 'default',\n\ttimeline: {\n\t\tuseMaxWidth: true,\n\t\tdiagramMarginX: 0,\n\t},\n\tflowchart: {\n\t\tuseMaxWidth: true,\n\t\tdiagramPadding: 0,\n\t},\n\tsequence: {\n\t\tuseMaxWidth: true,\n\t\tdiagramMarginX: 0,\n\t},\n});\n\nconst Mermaid = ({\n\tcode = '',\n\tid = '',\n\thasMarginUp = false,\n\thasMarginDown = false,\n}: MermaidProperties) => {\n\tconst [enabled, setEnabled] = useState(false);\n\tconst mermaidReference = useRef<HTMLDivElement>(null);\n\n\tconst initializeMermaid = useCallback(async () => {\n\t\ttry {\n\t\t\tif (!mermaidReference.current || !code) return;\n\t\t\tconst { svg, bindFunctions } = await mermaid.render(\n\t\t\t\t`mermaid-diagram-${id}`,\n\t\t\t\tcode\n\t\t\t);\n\t\t\tif (!svg) return;\n\t\t\tmermaidReference.current.innerHTML = svg || '';\n\t\t\tbindFunctions?.(mermaidReference.current);\n\t\t\tsetEnabled(true);\n\t\t} catch (error) {\n\t\t\tconsole.error('Failed to render Mermaid diagram:', error);\n\t\t}\n\t}, [code, id]);\n\n\tuseEffect(() => {\n\t\tif (!code || !mermaidReference.current) return;\n\t\tconst timer = setTimeout(async () => {\n\t\t\tawait initializeMermaid();\n\t\t}, 100);\n\t\treturn () => clearTimeout(timer);\n\t}, [code, initializeMermaid]);\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`${styles.mermaid}\n\t\t\t\t${hasMarginUp ? styles['margin-top--1'] : ''}\n\t\t\t\t${hasMarginDown ? styles['margin-bottom--2'] : ''}`}\n\t\t>\n\t\t\t{enabled ? null : <p>Diagram Loading...</p>}\n\t\t\t<div ref={mermaidReference} id={id}></div>\n\t\t</div>\n\t);\n};\n\nexport default Mermaid;\n"],"names":["useState","useRef","useCallback","useEffect","_jsxs","styles","_jsx"],"mappings":";;;;;;;;;AAeA,OAAO,CAAC,UAAU,CAAC;AAClB,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,KAAK,EAAE,SAAS;AAChB,IAAA,QAAQ,EAAE;AACT,QAAA,WAAW,EAAE,IAAI;AACjB,QAAA,cAAc,EAAE,CAAC;AACjB,KAAA;AACD,IAAA,SAAS,EAAE;AACV,QAAA,WAAW,EAAE,IAAI;AACjB,QAAA,cAAc,EAAE,CAAC;AACjB,KAAA;AACD,IAAA,QAAQ,EAAE;AACT,QAAA,WAAW,EAAE,IAAI;AACjB,QAAA,cAAc,EAAE,CAAC;AACjB,KAAA;AACD,CAAA,CAAC;AAEF,MAAM,OAAO,GAAG,CAAC,EAChB,IAAI,GAAG,EAAE,EACT,EAAE,GAAG,EAAE,EACP,WAAW,GAAG,KAAK,EACnB,aAAa,GAAG,KAAK,GACF,KAAI;IACvB,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC;AAC7C,IAAA,MAAM,gBAAgB,GAAGC,YAAM,CAAiB,IAAI,CAAC;AAErD,IAAA,MAAM,iBAAiB,GAAGC,iBAAW,CAAC,YAAW;AAChD,QAAA,IAAI;AACH,YAAA,IAAI,CAAC,gBAAgB,CAAC,OAAO,IAAI,CAAC,IAAI;gBAAE;AACxC,YAAA,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,MAAM,OAAO,CAAC,MAAM,CAClD,CAAA,gBAAA,EAAmB,EAAE,EAAE,EACvB,IAAI,CACJ;AACD,YAAA,IAAI,CAAC,GAAG;gBAAE;YACV,gBAAgB,CAAC,OAAO,CAAC,SAAS,GAAG,GAAG,IAAI,EAAE;AAC9C,YAAA,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC;YACzC,UAAU,CAAC,IAAI,CAAC;QACjB;QAAE,OAAO,KAAK,EAAE;AACf,YAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC;QAC1D;AACD,IAAA,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAEdC,eAAS,CAAC,MAAK;AACd,QAAA,IAAI,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO;YAAE;AACxC,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,YAAW;YACnC,MAAM,iBAAiB,EAAE;QAC1B,CAAC,EAAE,GAAG,CAAC;AACP,QAAA,OAAO,MAAM,YAAY,CAAC,KAAK,CAAC;AACjC,IAAA,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;AAE7B,IAAA,QACCC,eAAA,CAAA,KAAA,EAAA,EACC,SAAS,EAAE,CAAA,EAAGC,sBAAM,CAAC,OAAO;MACzB,WAAW,GAAGA,sBAAM,CAAC,eAAe,CAAC,GAAG,EAAE;AAC1C,IAAA,EAAA,aAAa,GAAGA,sBAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAA,CAAE,EAAA,QAAA,EAAA,CAEnD,OAAO,GAAG,IAAI,GAAGC,cAAA,CAAA,GAAA,EAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,CAAyB,EAC3CA,wBAAK,GAAG,EAAE,gBAAgB,EAAE,EAAE,EAAE,EAAE,EAAA,CAAQ,CAAA,EAAA,CACrC;AAER;;;;"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var Table_module = require('../styles/Table.module.scss.js');
|
|
7
|
+
|
|
8
|
+
const Table = ({ rows = [], headers = [], hasMarginUp = false, hasMarginDown = false, }) => {
|
|
9
|
+
const columnCount = headers.length;
|
|
10
|
+
return (jsxRuntime.jsxs("div", { className: `${Table_module.default.table}
|
|
11
|
+
${hasMarginUp ? Table_module.default['margin-top--1'] : ''}
|
|
12
|
+
${hasMarginDown ? Table_module.default['margin-bottom--2'] : ''}`, style: {
|
|
13
|
+
gridTemplateColumns: `repeat(${columnCount}, 1fr)`,
|
|
14
|
+
}, children: [jsxRuntime.jsx("div", { className: `${Table_module.default['table__header']}`, children: headers.map((header, index) => (jsxRuntime.jsx("div", { className: `${Table_module.default['table__header__cell']}`, children: header }, typeof header === 'string' ? header : index))) }), rows.map((row, index) => (jsxRuntime.jsx("div", { className: `${Table_module.default['table__row']}`, children: row.map((cell, cellIndex) => (jsxRuntime.jsx("div", { className: `${Table_module.default['table__row__cell']}`, children: cell }, typeof cell === 'string' ? cell : cellIndex))) }, index)))] }));
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
exports.default = Table;
|
|
18
|
+
//# sourceMappingURL=TableDynamic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TableDynamic.js","sources":["../../../src/dynamicComponents/TableDynamic.tsx"],"sourcesContent":["import { ReactNode } from 'react';\nimport styles from '../styles/Table.module.scss';\n\ninterface TableProperties {\n\trows?: ReactNode[][];\n\theaders?: ReactNode[];\n\thasMarginUp?: boolean;\n\thasMarginDown?: boolean;\n}\n\nconst Table = ({\n\trows = [],\n\theaders = [],\n\thasMarginUp = false,\n\thasMarginDown = false,\n}: TableProperties) => {\n\tconst columnCount = headers.length;\n\n\treturn (\n\t\t<div\n\t\t\tclassName={`${styles.table}\n\t\t\t\t${hasMarginUp ? styles['margin-top--1'] : ''}\n\t\t\t\t${hasMarginDown ? styles['margin-bottom--2'] : ''}`}\n\t\t\tstyle={{\n\t\t\t\tgridTemplateColumns: `repeat(${columnCount}, 1fr)`,\n\t\t\t}}\n\t\t>\n\t\t\t<div className={`${styles['table__header']}`}>\n\t\t\t\t{headers.map((header, index) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={typeof header === 'string' ? header : index}\n\t\t\t\t\t\tclassName={`${styles['table__header__cell']}`}\n\t\t\t\t\t>\n\t\t\t\t\t\t{header}\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t\t{rows.map((row, index) => (\n\t\t\t\t<div key={index} className={`${styles['table__row']}`}>\n\t\t\t\t\t{row.map((cell, cellIndex) => (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={typeof cell === 'string' ? cell : cellIndex}\n\t\t\t\t\t\t\tclassName={`${styles['table__row__cell']}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{cell}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t))}\n\t\t</div>\n\t);\n};\n\nexport default Table;\n"],"names":["_jsxs","styles","_jsx"],"mappings":";;;;;;;AAUA,MAAM,KAAK,GAAG,CAAC,EACd,IAAI,GAAG,EAAE,EACT,OAAO,GAAG,EAAE,EACZ,WAAW,GAAG,KAAK,EACnB,aAAa,GAAG,KAAK,GACJ,KAAI;AACrB,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM;AAElC,IAAA,QACCA,eAAA,CAAA,KAAA,EAAA,EACC,SAAS,EAAE,CAAA,EAAGC,oBAAM,CAAC,KAAK;MACvB,WAAW,GAAGA,oBAAM,CAAC,eAAe,CAAC,GAAG,EAAE;AAC1C,IAAA,EAAA,aAAa,GAAGA,oBAAM,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAA,CAAE,EACpD,KAAK,EAAE;YACN,mBAAmB,EAAE,CAAA,OAAA,EAAU,WAAW,CAAA,MAAA,CAAQ;SAClD,EAAA,QAAA,EAAA,CAEDC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,CAAA,EAAGD,oBAAM,CAAC,eAAe,CAAC,CAAA,CAAE,EAAA,QAAA,EAC1C,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,MAC1BC,cAAA,CAAA,KAAA,EAAA,EAEC,SAAS,EAAE,CAAA,EAAGD,oBAAM,CAAC,qBAAqB,CAAC,CAAA,CAAE,EAAA,QAAA,EAE5C,MAAM,EAAA,EAHF,OAAO,MAAM,KAAK,QAAQ,GAAG,MAAM,GAAG,KAAK,CAI3C,CACN,CAAC,EAAA,CACG,EACL,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,MACpBC,cAAA,CAAA,KAAA,EAAA,EAAiB,SAAS,EAAE,CAAA,EAAGD,oBAAM,CAAC,YAAY,CAAC,CAAA,CAAE,EAAA,QAAA,EACnD,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,MACxBC,cAAA,CAAA,KAAA,EAAA,EAEC,SAAS,EAAE,CAAA,EAAGD,oBAAM,CAAC,kBAAkB,CAAC,CAAA,CAAE,EAAA,QAAA,EAEzC,IAAI,EAAA,EAHA,OAAO,IAAI,KAAK,QAAQ,GAAG,IAAI,GAAG,SAAS,CAI3C,CACN,CAAC,EAAA,EARO,KAAK,CAST,CACN,CAAC,CAAA,EAAA,CACG;AAER;;;;"}
|