@adminide-stack/yantra-help-browser 12.0.16-alpha.11 → 12.0.16-alpha.14
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/lib/components/SidebarSearch.d.ts +8 -0
- package/lib/components/SidebarSearch.d.ts.map +1 -0
- package/lib/components/SidebarSearch.js +111 -0
- package/lib/components/SidebarSearch.js.map +1 -0
- package/lib/pages/ArticlePage/ArticlePage.d.ts +3 -0
- package/lib/pages/ArticlePage/ArticlePage.d.ts.map +1 -0
- package/lib/pages/ArticlePage/ArticlePage.js +222 -0
- package/lib/pages/ArticlePage/ArticlePage.js.map +1 -0
- package/lib/pages/ArticlePage/ArticlePageLayout.d.ts +3 -0
- package/lib/pages/ArticlePage/ArticlePageLayout.d.ts.map +1 -0
- package/lib/pages/ArticlePage/ArticlePageLayout.js +250 -0
- package/lib/pages/ArticlePage/ArticlePageLayout.js.map +1 -0
- package/lib/pages/ArticlePage/index.d.ts +2 -3
- package/lib/pages/ArticlePage/index.d.ts.map +1 -1
- package/lib/pages/ArticlePage/index.js +4 -189
- package/lib/pages/ArticlePage/index.js.map +1 -1
- package/lib/pages/CategoryCollection/index.d.ts.map +1 -1
- package/lib/pages/CategoryCollection/index.js +2 -2
- package/lib/pages/CategoryCollection/index.js.map +1 -1
- package/lib/utils/docsNavigation.d.ts +9 -0
- package/lib/utils/docsNavigation.d.ts.map +1 -0
- package/lib/utils/docsNavigation.js +37 -0
- package/lib/utils/docsNavigation.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarSearch.d.ts","sourceRoot":"","sources":["../../src/components/SidebarSearch.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAK3D,UAAU,kBAAkB;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAwHtD,CAAC"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import {jsxs,jsx}from'react/jsx-runtime';import {useState,useRef,useEffect}from'react';import {useNavigate}from'@remix-run/react';import {FiSearch}from'@react-icons/all-files/fi/FiSearch.js';import {searchArticles,getCategoryById}from'../utils/markdownLoader.js';const SidebarSearch = ({
|
|
2
|
+
className = '',
|
|
3
|
+
placeholder = 'Search...'
|
|
4
|
+
}) => {
|
|
5
|
+
const navigate = useNavigate();
|
|
6
|
+
const [searchQuery, setSearchQuery] = useState('');
|
|
7
|
+
const [searchResults, setSearchResults] = useState([]);
|
|
8
|
+
const [showDropdown, setShowDropdown] = useState(false);
|
|
9
|
+
const [selectedIndex, setSelectedIndex] = useState(-1);
|
|
10
|
+
const searchContainerRef = useRef(null);
|
|
11
|
+
const inputRef = useRef(null);
|
|
12
|
+
// Perform search as user types
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
if (searchQuery.trim().length > 0) {
|
|
15
|
+
const results = searchArticles(searchQuery);
|
|
16
|
+
setSearchResults(results.slice(0, 5)); // Limit to 5 results for sidebar
|
|
17
|
+
setShowDropdown(true);
|
|
18
|
+
setSelectedIndex(-1);
|
|
19
|
+
} else {
|
|
20
|
+
setSearchResults([]);
|
|
21
|
+
setShowDropdown(false);
|
|
22
|
+
}
|
|
23
|
+
}, [searchQuery]);
|
|
24
|
+
// Close dropdown when clicking outside
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
const handleClickOutside = event => {
|
|
27
|
+
const target = event.target;
|
|
28
|
+
if (searchContainerRef.current && !searchContainerRef.current.contains(target)) {
|
|
29
|
+
const dropdown = document.querySelector('[data-sidebar-search-dropdown]');
|
|
30
|
+
if (!dropdown || !dropdown.contains(target)) {
|
|
31
|
+
setShowDropdown(false);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
document.addEventListener('mousedown', handleClickOutside);
|
|
36
|
+
return () => {
|
|
37
|
+
document.removeEventListener('mousedown', handleClickOutside);
|
|
38
|
+
};
|
|
39
|
+
}, []);
|
|
40
|
+
const handleSearch = e => {
|
|
41
|
+
e.preventDefault();
|
|
42
|
+
if (searchResults.length > 0) {
|
|
43
|
+
const firstResult = searchResults[0];
|
|
44
|
+
navigate(`/help-center/${firstResult.categoryId}/${firstResult.slug}`);
|
|
45
|
+
setShowDropdown(false);
|
|
46
|
+
setSearchQuery('');
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const handleInputChange = e => {
|
|
50
|
+
setSearchQuery(e.target.value);
|
|
51
|
+
};
|
|
52
|
+
const handleInputFocus = () => {
|
|
53
|
+
if (searchResults.length > 0) {
|
|
54
|
+
setShowDropdown(true);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
const handleResultClick = article => {
|
|
58
|
+
if (!article || !article.categoryId || !article.slug) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
setShowDropdown(false);
|
|
62
|
+
setSearchQuery('');
|
|
63
|
+
navigate(`/help-center/${article.categoryId}/${article.slug}`);
|
|
64
|
+
};
|
|
65
|
+
return jsxs("div", {
|
|
66
|
+
className: `relative w-full ${className}`,
|
|
67
|
+
ref: searchContainerRef,
|
|
68
|
+
children: [jsx("form", {
|
|
69
|
+
onSubmit: handleSearch,
|
|
70
|
+
className: "relative",
|
|
71
|
+
children: jsxs("div", {
|
|
72
|
+
className: "relative",
|
|
73
|
+
children: [jsx("div", {
|
|
74
|
+
className: "pointer-events-none absolute inset-y-0 left-0 flex items-center pl-3",
|
|
75
|
+
children: jsx(FiSearch, {
|
|
76
|
+
className: "h-4 w-4 text-gray-400",
|
|
77
|
+
"aria-hidden": "true"
|
|
78
|
+
})
|
|
79
|
+
}), jsx("input", {
|
|
80
|
+
ref: inputRef,
|
|
81
|
+
type: "text",
|
|
82
|
+
className: "block w-full rounded-md border border-gray-300 dark:border-gray-700 bg-white dark:bg-gray-800 py-2 pl-10 pr-3 text-sm text-gray-900 dark:text-white placeholder-gray-500 dark:placeholder-gray-400 focus:border-blue-500 focus:outline-none focus:ring-1 focus:ring-blue-500",
|
|
83
|
+
placeholder: placeholder,
|
|
84
|
+
value: searchQuery,
|
|
85
|
+
onChange: handleInputChange,
|
|
86
|
+
onFocus: handleInputFocus
|
|
87
|
+
})]
|
|
88
|
+
})
|
|
89
|
+
}), showDropdown && searchResults.length > 0 && jsx("div", {
|
|
90
|
+
"data-sidebar-search-dropdown": true,
|
|
91
|
+
className: "absolute z-50 mt-1 w-full bg-white dark:bg-gray-800 rounded-md shadow-lg border border-gray-200 dark:border-gray-700 max-h-64 overflow-y-auto",
|
|
92
|
+
children: jsx("div", {
|
|
93
|
+
className: "py-1",
|
|
94
|
+
children: searchResults.map((article, index) => {
|
|
95
|
+
const category = getCategoryById(article.categoryId);
|
|
96
|
+
return jsxs("div", {
|
|
97
|
+
onClick: () => handleResultClick(article),
|
|
98
|
+
className: `block px-4 py-2 text-sm hover:bg-gray-50 dark:hover:bg-gray-700 cursor-pointer ${selectedIndex === index ? 'bg-gray-50 dark:bg-gray-700' : ''}`,
|
|
99
|
+
children: [jsx("div", {
|
|
100
|
+
className: "font-medium text-gray-900 dark:text-gray-100",
|
|
101
|
+
children: article.title
|
|
102
|
+
}), category && jsx("div", {
|
|
103
|
+
className: "text-xs text-gray-500 dark:text-gray-400 mt-0.5",
|
|
104
|
+
children: category.title
|
|
105
|
+
})]
|
|
106
|
+
}, article.id);
|
|
107
|
+
})
|
|
108
|
+
})
|
|
109
|
+
})]
|
|
110
|
+
});
|
|
111
|
+
};export{SidebarSearch};//# sourceMappingURL=SidebarSearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SidebarSearch.js","sources":["../../src/components/SidebarSearch.tsx"],"sourcesContent":[null],"names":[],"mappings":"uQAUO,MAAM,aAAa,GAAiC,CAAC;AACxD,EAAA,SAAc,GAAA,EAAA;aACI,GAAA;MACZ;QACA,QAAa,GAAA,WAAiB,EAAA;QAC9B,CAAA,WAAc,EAAA,cAAkB,CAAA,GAAA,QAAI,CAAA,EAAA,CAAA;AAC1C,EAAA,MAAA,CAAA,+BAAkD,CAAA,GAAM,QAAA,CAAA,EAAA,CAAA;AACxD,EAAA,MAAA,CAAA,YAAiB,EAAA,eAA+B,CAAA,GAAA,QAAA,CAAA,KAAA,CAAA;QAEjB,CAAA,aAAA,EAAA,gBAAA,CAAA,GAAA,QAAA,CAAA,EAAA,CAAA;QACtB,kBAAM,GAAA,MAAA,CAAA,IAAA,CAAA;QACX,QAAI,GAAA,MAAgB,CAAA,IAAE,CAAC;AACnB;AACA,EAAA,SAAA,CAAA,MAAA;mBACe,CAAA,IAAA,EAAA,CAAA,MAAM,GAAC,CAAA,EAAA;AACtB,MAAA,MAAA,OAAA,GAAA,cAAqB,CAAA,WAAA,CAAA;sBACxB,CAAA,OAAA,CAAA,KAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA;qBAAO,CAAA,IAAA,CAAA;sBACY,CAAA,EAAA,CAAA;;sBAEnB,CAAA,EAAA,CAAA;AACL,MAAG,eAAc,CAAC,KAAA,CAAA;;KAGT,CAAA,WAAI,CAAE,CAAA;AACX;AACI,EAAA,SAAA,CAAA,MAAM;AACN,IAAA,MAAA,kBAAsB,GAAA,KAAQ,IAAA;kBACpB,GAAA,KAAA,CAAA,MAAW;4BACJ,CAAA,OAAK,IAAA,CAAA,kBAAyB,CAAA,OAAG,CAAA,QAAA,CAAA,MAAA,CAAA,EAAA;sBAC3B,GAAA,QAAA,CAAA,aAAQ,CAAA,gCAAA,CAAA;qBAC1B,IAAA,CAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,EAAA;yBACJ,CAAA,KAAA,CAAA;AACL;AAEA;AACA,KAAA;AACI,IAAA,QAAA,CAAA,gBAA4B,CAAA,WAAC,oBAAa,CAAA;AAC9C,IAAA,OAAE,MAAA;MACL,QAAM,CAAA,mBAAA,CAAA,WAAA,EAAA,kBAAA,CAAA;AAEP,KAAA;QACI;AACA,EAAA,MAAA,oBAAkB;AACd,IAAA,CAAA,CAAA;qBACS,CAAgB,MAAA,GAAA,CAAA,EAAA;YACzB,WAAe,GAAA,aAAQ,CAAA,CAAA,CAAA;cACT,CAAA,CAAA,aAAG,EAAE,WAAA,CAAA,UAAA,CAAA,CAAA,EAAA,WAAA,CAAA,IAAA,CAAA,CAAA,CAAA;qBACtB,CAAA,KAAA,CAAA;AACL,MAAE,cAAA,CAAA,EAAA,CAAA;AAEF;AACI,GAAA;AACJ,EAAA,MAAE,iBAAA,GAAA,CAAA,IAAA;IAEF,cAAM,CAAA,CAAA,CAAA,MAAmB,CAAA,KAAK,CAAA;AAC1B,GAAA;wBACmB,GAAA,MAAM;QACzB,aAAC,CAAA,MAAA,GAAA,CAAA,EAAA;AACL,MAAE,eAAA,CAAA,IAAA,CAAA;AAEF;AACI,GAAA;yBACW,GAAA,OAAA,IAAA;QACX,CAAC,OAAA,IAAA,CAAA,OAAA,CAAA,UAAA,IAAA,CAAA,OAAA,CAAA,IAAA,EAAA;;;mBAIwB,CAAA,KAAA,CAAA;AAC7B,IAAA,cAAE,CAAA,EAAA,CAAA;IAEF,QACI,eAAK,EAAS,OAAA,CAAA,qBAA8B,CAAA,IAAA,CAAA,CAAA,CAAA;;;AA2C5B,IAAA,SAAA,EAAA,CAAA,gBAGX,EAER,SAAC,CAAA,CAAA;AACN,IAAE,GAAA,EAAA,kBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArticlePage.d.ts","sourceRoot":"","sources":["../../../src/pages/ArticlePage/ArticlePage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAM3D,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAwP/B,CAAC"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import {jsx,jsxs}from'react/jsx-runtime';import {useState,useRef,useEffect}from'react';import {useParams,Link}from'@remix-run/react';import {cn}from'../../utils/index.js';import {getCategoryById,loadArticleContent}from'../../utils/markdownLoader.js';const ArticlePage = () => {
|
|
2
|
+
const {
|
|
3
|
+
categoryId,
|
|
4
|
+
articleSlug
|
|
5
|
+
} = useParams();
|
|
6
|
+
const [article, setArticle] = useState(null);
|
|
7
|
+
const [loading, setLoading] = useState(true);
|
|
8
|
+
const [activeHeadingId, setActiveHeadingId] = useState('');
|
|
9
|
+
const observerRef = useRef(null);
|
|
10
|
+
useEffect(() => {
|
|
11
|
+
if (articleSlug) {
|
|
12
|
+
const loadContent = async () => {
|
|
13
|
+
const articleData = await loadArticleContent(articleSlug);
|
|
14
|
+
setArticle(articleData);
|
|
15
|
+
setLoading(false);
|
|
16
|
+
};
|
|
17
|
+
loadContent();
|
|
18
|
+
}
|
|
19
|
+
}, [articleSlug]);
|
|
20
|
+
// Scroll spy functionality
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
if (!article?.headings || article.headings.length === 0) return;
|
|
23
|
+
// Clean up previous observer
|
|
24
|
+
if (observerRef.current) {
|
|
25
|
+
observerRef.current.disconnect();
|
|
26
|
+
}
|
|
27
|
+
// Create new intersection observer
|
|
28
|
+
observerRef.current = new IntersectionObserver(entries => {
|
|
29
|
+
entries.forEach(entry => {
|
|
30
|
+
if (entry.isIntersecting) {
|
|
31
|
+
setActiveHeadingId(entry.target.id);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}, {
|
|
35
|
+
rootMargin: '-20% 0px -70% 0px',
|
|
36
|
+
threshold: 0
|
|
37
|
+
});
|
|
38
|
+
// Observe all headings
|
|
39
|
+
article.headings.forEach(heading => {
|
|
40
|
+
const element = document.getElementById(heading.id);
|
|
41
|
+
if (element && observerRef.current) {
|
|
42
|
+
observerRef.current.observe(element);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
// Cleanup function
|
|
46
|
+
return () => {
|
|
47
|
+
if (observerRef.current) {
|
|
48
|
+
observerRef.current.disconnect();
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}, [article]);
|
|
52
|
+
if (loading) {
|
|
53
|
+
return jsx("div", {
|
|
54
|
+
className: "min-h-screen bg-background text-foreground overflow-x-hidden",
|
|
55
|
+
children: jsx("div", {
|
|
56
|
+
className: "w-full max-w-[90rem] mx-auto px-4 sm:px-6 lg:px-8 xl:px-16 py-16",
|
|
57
|
+
children: jsxs("div", {
|
|
58
|
+
className: "animate-pulse",
|
|
59
|
+
children: [jsx("div", {
|
|
60
|
+
className: "h-8 bg-muted rounded w-1/3 mb-4"
|
|
61
|
+
}), jsx("div", {
|
|
62
|
+
className: "h-4 bg-muted rounded w-1/2 mb-8"
|
|
63
|
+
}), jsxs("div", {
|
|
64
|
+
className: "space-y-4",
|
|
65
|
+
children: [jsx("div", {
|
|
66
|
+
className: "h-4 bg-muted rounded"
|
|
67
|
+
}), jsx("div", {
|
|
68
|
+
className: "h-4 bg-muted rounded w-5/6"
|
|
69
|
+
}), jsx("div", {
|
|
70
|
+
className: "h-4 bg-muted rounded w-4/6"
|
|
71
|
+
})]
|
|
72
|
+
})]
|
|
73
|
+
})
|
|
74
|
+
})
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
if (!article) {
|
|
78
|
+
return jsx("div", {
|
|
79
|
+
className: "min-h-screen bg-background text-foreground mt-20 overflow-x-hidden",
|
|
80
|
+
children: jsxs("div", {
|
|
81
|
+
className: "w-full max-w-[90rem] mx-auto px-4 sm:px-6 lg:px-8 xl:px-16 py-16",
|
|
82
|
+
children: [jsx("h1", {
|
|
83
|
+
className: "text-2xl font-bold",
|
|
84
|
+
children: "Article not found"
|
|
85
|
+
}), jsx(Link, {
|
|
86
|
+
to: "/help-center",
|
|
87
|
+
className: "mt-4 text-primary hover:text-primary/80",
|
|
88
|
+
children: "\u2190 Back to Help Center"
|
|
89
|
+
})]
|
|
90
|
+
})
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
const category = getCategoryById(article.categoryId || categoryId || '');
|
|
94
|
+
const categoryArticles = category?.articles ?? [];
|
|
95
|
+
const currentIndex = categoryArticles.findIndex(a => a.slug === article.slug);
|
|
96
|
+
const previousArticle = currentIndex > 0 ? categoryArticles[currentIndex - 1] : null;
|
|
97
|
+
const nextArticle = currentIndex >= 0 && currentIndex < categoryArticles.length - 1 ? categoryArticles[currentIndex + 1] : null;
|
|
98
|
+
return jsx("div", {
|
|
99
|
+
className: "min-h-screen bg-background text-foreground scroll-smooth overflow-x-hidden",
|
|
100
|
+
children: jsxs("div", {
|
|
101
|
+
className: "flex flex-col w-full",
|
|
102
|
+
children: [jsx("div", {
|
|
103
|
+
className: "w-full max-w-[90rem] mx-auto px-4 sm:px-6 lg:px-8 xl:px-16 pt-8",
|
|
104
|
+
children: jsxs("nav", {
|
|
105
|
+
className: "flex items-center space-x-2 text-sm text-muted-foreground",
|
|
106
|
+
children: [jsx(Link, {
|
|
107
|
+
to: "/help-center",
|
|
108
|
+
className: "hover:text-foreground",
|
|
109
|
+
children: "All Collections"
|
|
110
|
+
}), jsx("span", {
|
|
111
|
+
children: "\u203A"
|
|
112
|
+
}), jsx(Link, {
|
|
113
|
+
to: `/help-center/${article.categoryId}`,
|
|
114
|
+
className: "hover:text-foreground",
|
|
115
|
+
children: getCategoryById(article.categoryId)?.title || article.categoryId
|
|
116
|
+
}), jsx("span", {
|
|
117
|
+
children: "\u203A"
|
|
118
|
+
}), jsx("span", {
|
|
119
|
+
className: "text-primary",
|
|
120
|
+
children: article.title
|
|
121
|
+
})]
|
|
122
|
+
})
|
|
123
|
+
}), jsx("main", {
|
|
124
|
+
className: "w-full py-8",
|
|
125
|
+
children: jsx("div", {
|
|
126
|
+
className: "max-w-[90rem] mx-auto px-4 sm:px-6 lg:px-8 xl:px-16 relative",
|
|
127
|
+
children: jsxs("div", {
|
|
128
|
+
className: "flex flex-col xl:flex-row gap-8 xl:gap-12",
|
|
129
|
+
children: [jsxs("div", {
|
|
130
|
+
className: "flex-1 min-w-0 max-w-5xl",
|
|
131
|
+
children: [jsxs("div", {
|
|
132
|
+
className: "mb-8",
|
|
133
|
+
children: [jsx("h1", {
|
|
134
|
+
className: "text-3xl md:text-4xl font-bold text-foreground mb-4",
|
|
135
|
+
children: article.title
|
|
136
|
+
}), jsx("p", {
|
|
137
|
+
className: "text-lg text-muted-foreground mb-6",
|
|
138
|
+
children: article.description
|
|
139
|
+
}), jsxs("div", {
|
|
140
|
+
className: "flex items-center space-x-4 text-sm text-muted-foreground",
|
|
141
|
+
children: [jsxs("div", {
|
|
142
|
+
className: "flex items-center",
|
|
143
|
+
children: [jsx("div", {
|
|
144
|
+
className: "mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-muted text-xs text-foreground",
|
|
145
|
+
children: article.author.charAt(0)
|
|
146
|
+
}), jsxs("span", {
|
|
147
|
+
children: ["Written by ", article.author]
|
|
148
|
+
})]
|
|
149
|
+
}), jsx("span", {
|
|
150
|
+
children: "\u2022"
|
|
151
|
+
}), jsxs("span", {
|
|
152
|
+
children: ["Updated ", article.updatedAt]
|
|
153
|
+
})]
|
|
154
|
+
})]
|
|
155
|
+
}), jsx("div", {
|
|
156
|
+
className: "prose prose-lg max-w-none w-full overflow-x-hidden",
|
|
157
|
+
children: jsx("div", {
|
|
158
|
+
className: cn('prose-headings:text-foreground prose-p:text-muted-foreground prose-strong:text-foreground prose-a:text-primary prose-a:no-underline hover:prose-a:underline prose-ul:text-muted-foreground prose-ol:text-muted-foreground prose-li:text-muted-foreground prose-blockquote:text-muted-foreground prose-code:text-foreground prose-code:bg-muted prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-pre:bg-muted prose-pre:text-foreground prose-pre:overflow-x-auto'),
|
|
159
|
+
dangerouslySetInnerHTML: {
|
|
160
|
+
__html: article.htmlContent
|
|
161
|
+
}
|
|
162
|
+
})
|
|
163
|
+
}), (previousArticle || nextArticle) && jsxs("div", {
|
|
164
|
+
className: "mt-12 grid grid-cols-1 md:grid-cols-2 gap-4",
|
|
165
|
+
children: [previousArticle ? jsxs(Link, {
|
|
166
|
+
to: `/help-center/${previousArticle.categoryId}/${previousArticle.slug}`,
|
|
167
|
+
className: cn('group rounded-lg border border-border bg-background px-6 py-4', 'hover:bg-muted/30 transition-colors'),
|
|
168
|
+
children: [jsx("div", {
|
|
169
|
+
className: "text-sm text-muted-foreground",
|
|
170
|
+
children: "Previous"
|
|
171
|
+
}), jsxs("div", {
|
|
172
|
+
className: "mt-1 text-primary font-semibold group-hover:underline",
|
|
173
|
+
children: ["\u00AB ", previousArticle.title]
|
|
174
|
+
})]
|
|
175
|
+
}) : jsx("div", {
|
|
176
|
+
className: "hidden md:block"
|
|
177
|
+
}), nextArticle ? jsxs(Link, {
|
|
178
|
+
to: `/help-center/${nextArticle.categoryId}/${nextArticle.slug}`,
|
|
179
|
+
className: cn('group rounded-lg border border-border bg-background px-6 py-4', 'hover:bg-muted/30 transition-colors md:text-right'),
|
|
180
|
+
children: [jsx("div", {
|
|
181
|
+
className: "text-sm text-muted-foreground",
|
|
182
|
+
children: "Next"
|
|
183
|
+
}), jsxs("div", {
|
|
184
|
+
className: "mt-1 text-primary font-semibold group-hover:underline",
|
|
185
|
+
children: [nextArticle.title, " \u00BB"]
|
|
186
|
+
})]
|
|
187
|
+
}) : jsx("div", {
|
|
188
|
+
className: "hidden md:block"
|
|
189
|
+
})]
|
|
190
|
+
})]
|
|
191
|
+
}), article.headings && article.headings.length > 0 && jsx("aside", {
|
|
192
|
+
className: "hidden xl:block xl:w-80 xl:flex-shrink-0",
|
|
193
|
+
children: jsxs("div", {
|
|
194
|
+
className: "fixed top-20 flex flex-col h-[calc(100vh-3rem)]",
|
|
195
|
+
children: [jsx("div", {
|
|
196
|
+
className: "mb-4 flex-shrink-0",
|
|
197
|
+
children: jsxs("h2", {
|
|
198
|
+
className: "text-sm font-semibold text-primary flex items-center",
|
|
199
|
+
children: [jsx("span", {
|
|
200
|
+
className: "mr-2",
|
|
201
|
+
children: "\u2630"
|
|
202
|
+
}), "On this page"]
|
|
203
|
+
})
|
|
204
|
+
}), jsx("nav", {
|
|
205
|
+
className: "space-y-1 flex-1 overflow-y-auto overflow-x-hidden min-h-0",
|
|
206
|
+
children: article.headings.map((heading, index) => {
|
|
207
|
+
const isActive = activeHeadingId === heading.id;
|
|
208
|
+
return jsx("a", {
|
|
209
|
+
href: `#${heading.id}`,
|
|
210
|
+
className: cn('relative block text-sm transition-colors py-1 pl-4', 'border-l-2 border-transparent', isActive ? 'text-primary border-l-primary bg-muted/20' : 'text-muted-foreground hover:text-primary hover:border-l-primary', heading.level === 1 ? 'font-semibold' : heading.level === 2 ? 'ml-2' : heading.level === 3 ? 'ml-4' : heading.level === 4 ? 'ml-6' : heading.level === 5 ? 'ml-8' : 'ml-10'),
|
|
211
|
+
children: heading.text
|
|
212
|
+
}, index);
|
|
213
|
+
})
|
|
214
|
+
})]
|
|
215
|
+
})
|
|
216
|
+
})]
|
|
217
|
+
})
|
|
218
|
+
})
|
|
219
|
+
})]
|
|
220
|
+
})
|
|
221
|
+
});
|
|
222
|
+
};export{ArticlePage};//# sourceMappingURL=ArticlePage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArticlePage.js","sources":["../../../src/pages/ArticlePage/ArticlePage.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs"],"mappings":"0PAMO,MAAM,WAAW,GAAa,MAAK;QAChC;IACN,UAAc;IACd;MACM,SAAgB,EAAA;AACtB,EAAA,MAAA,CAAA,mBAAoB,CAAA,GAAoC,QAAM,CAAA,IAAA,CAAA;QAErD,CAAA,SAAM,UAAA,CAAA,GAAA,QAAA,CAAA,IAAA,CAAA;QACX,CAAI,iBAAc,kBAAA,CAAA,GAAA,QAAA,CAAA,EAAA,CAAA;AACd,EAAA,MAAA,WAAiB,GAAA,MAAA,CAAA,IAAQ,CAAA;AACrB,EAAA,SAAA,CAAA,MAAA;mBACU,EAAA;uBACA,GAAA,YAAQ;AACtB,QAAA,MAAE,WAAA,GAAA,MAAA,kBAAA,CAAA,WAAA,CAAA;AACF,QAAA,UAAA,CAAA,WAAc,CAAA;QAClB,UAAC,CAAA,KAAA,CAAA;AACL,OAAG;MAEwB,WAAA,EAAA;;iBAEX,CAAA,CAAA;;WAEiB,CAAA,MAAA;AAC7B,IAAA,IAAA,CAAA,OAAe,EAAA,QAAQ,IAAA,OAAG,CAAA,QAAA,CAAA,MAAA,KAAA,CAAA,EAAA;AACtB;QACJ,WAAC,CAAA,OAAA,EAAA;iBAEkC,CAAA,OAAA,CAAA,UAAA,EAAA;;AAG3B;AACI,IAAA,WAAA,CAAA,OAAS,GAAC,IAAc,oBAAG,CAAA,OAAA,IAAA;AACvB,MAAA,OAAA,CAAA,OAAA,CAAA,KAAA,IAAA;iBACH,CAAA,cAAA,EAAA;AACL,UAAA,kBAAG,CAAA,KAAA,CAAA,MAAA,CAAA,EAAA,CAAA;AACP;AAEI,OAAA,CAAA;AACA,KAAA,EAAA;AACH,MAAA,UACH,EAAA,mBAAA;eAEqB,EAAA;;;AAGnB,IAAA,OAAA,CAAA,gBAAe,CAAA,OAAA,IAAY;AACvB,MAAA,MAAA,OAAA,GAAA,QAAmB,CAAA,cAAS,CAAA,OAAS,CAAA,EAAA,CAAA;iBACxC,IAAA,WAAA,CAAA,OAAA,EAAA;AACL,QAAA,WAAG,CAAA,OAAA,CAAA,OAAA,CAAA,OAAA,CAAA;;AAGH,KAAA,CAAA;AACI;AACI,IAAA,OAAA,MAAA;qBACH,CAAA,OAAA,EAAA;AACL,QAAA,WAAE,CAAA,OAAA,CAAA,UAAA,EAAA;AACN;AAEA,KAAA;aACgE,CAAA,CAAA;MAoB/D,OAAA,EAAA;IAED,OAAYA,GAAA,CAAA,KAAG,EAAA;AACX,MAAA,SAAO,EACH,8DAAmF;MAS1F,QAAA,EAAAA,GAAA,CAAA,KAAA,EAAA;AAED,QAAA,SAAc,EAAA,kEAA2D;AACzE,QAAA,oBAAyB,EAAA;AACzB,UAAM,0BAAe;AACrB,UAAM,cAAe,CAAG,KAAA,EAAA;YAClB,SAAW,EACb;AAEJ,WAAO,CACH,EAAKA,GAAA,CAAA,KAAA,EAAA;AA4GmC,YAAA,SAAA,EAAA;AACA,WAAA,CAAA,EAAAC,IAAA,CAAA,KAAA,EAAA;AAQgB,YAAA,SAAA,EAAA,WAAA;AACA,YAAA,QAAA,EAAA,CAAAD,GAAA,CAAA,KAAA,EAAA;AAEA,cAAA,SAAA,EAAA;AACA,aAAA,CAAA,EAAAA,GAAA,CAAA,KAAA,EAAA;AACE,cAAA,SAAA,EAAA;AACA,aAAA,CAAA,EAAAA,GAAA,CAAA,KAAA,EAAA;AACE,cAAA,SAAA,EAAA;AACA,aAAA,CAAA;AACE,WAAA,CAAA;AACA,SAAA;AACE,OAAA;;;AAkBxE,EAAE,IAAA,CAAA,OAAA,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArticlePageLayout.d.ts","sourceRoot":"","sources":["../../../src/pages/ArticlePage/ArticlePageLayout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAO3D,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAyS/D,CAAC"}
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import {jsxs,jsx}from'react/jsx-runtime';import {useState,useRef,useEffect}from'react';import {useLocation,Outlet,Link}from'@remix-run/react';import {SidebarSearch}from'../../components/SidebarSearch.js';import {getDocsNavigation}from'../../utils/docsNavigation.js';import {useTheme}from'@admin-layout/tailwind-ui';import {cn}from'../../utils/index.js';const ArticlePageLayout = ({
|
|
2
|
+
children
|
|
3
|
+
}) => {
|
|
4
|
+
const location = useLocation();
|
|
5
|
+
const [navItems] = useState(getDocsNavigation());
|
|
6
|
+
const [expandedItems, setExpandedItems] = useState(new Set());
|
|
7
|
+
const [headings, setHeadings] = useState([]);
|
|
8
|
+
const [activeHeadingId, setActiveHeadingId] = useState('');
|
|
9
|
+
const observerRef = useRef(null);
|
|
10
|
+
const {
|
|
11
|
+
setMode,
|
|
12
|
+
mode
|
|
13
|
+
} = useTheme();
|
|
14
|
+
const isDark = mode === 'dark';
|
|
15
|
+
// Auto-expand items that contain the active path
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
const activePath = location.pathname;
|
|
18
|
+
const newExpanded = new Set();
|
|
19
|
+
function checkAndExpand(items, pathPrefix = '') {
|
|
20
|
+
items.forEach(item => {
|
|
21
|
+
const itemPath = pathPrefix ? `${pathPrefix}/${item.title}` : item.title;
|
|
22
|
+
if (item.path && activePath.startsWith(item.path)) {
|
|
23
|
+
newExpanded.add(itemPath);
|
|
24
|
+
if (item.children && item.children.length > 0) {
|
|
25
|
+
checkAndExpand(item.children, itemPath);
|
|
26
|
+
}
|
|
27
|
+
} else if (item.children && item.children.length > 0) {
|
|
28
|
+
// Check if any child is active
|
|
29
|
+
const hasActiveChild = item.children.some(child => child.path && activePath.startsWith(child.path));
|
|
30
|
+
if (hasActiveChild) {
|
|
31
|
+
newExpanded.add(itemPath);
|
|
32
|
+
checkAndExpand(item.children, itemPath);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
checkAndExpand(navItems);
|
|
38
|
+
setExpandedItems(newExpanded);
|
|
39
|
+
}, [location.pathname, navItems]);
|
|
40
|
+
// Toggle item expansion
|
|
41
|
+
const toggleItem = itemPath => {
|
|
42
|
+
setExpandedItems(prev => {
|
|
43
|
+
const newSet = new Set(prev);
|
|
44
|
+
if (newSet.has(itemPath)) {
|
|
45
|
+
newSet.delete(itemPath);
|
|
46
|
+
} else {
|
|
47
|
+
newSet.add(itemPath);
|
|
48
|
+
}
|
|
49
|
+
return newSet;
|
|
50
|
+
});
|
|
51
|
+
};
|
|
52
|
+
// Extract headings from the current page content
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
// Wait for content to load, then extract headings
|
|
55
|
+
const extractHeadings = () => {
|
|
56
|
+
const contentArea = document.querySelector('[data-content-area]');
|
|
57
|
+
if (contentArea) {
|
|
58
|
+
const headingElements = contentArea.querySelectorAll('h1, h2, h3, h4, h5, h6');
|
|
59
|
+
const extractedHeadings = [];
|
|
60
|
+
headingElements.forEach(heading => {
|
|
61
|
+
const id = heading.id || heading.textContent?.toLowerCase().replace(/\s+/g, '-').replace(/[^\w-]/g, '') || '';
|
|
62
|
+
if (id) {
|
|
63
|
+
extractedHeadings.push({
|
|
64
|
+
id,
|
|
65
|
+
text: heading.textContent || '',
|
|
66
|
+
level: parseInt(heading.tagName.charAt(1))
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
setHeadings(extractedHeadings);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
// Extract immediately
|
|
74
|
+
extractHeadings();
|
|
75
|
+
// Also extract after a short delay to catch dynamically loaded content
|
|
76
|
+
const timeoutId = setTimeout(extractHeadings, 100);
|
|
77
|
+
// Use MutationObserver to watch for content changes
|
|
78
|
+
const observer = new MutationObserver(extractHeadings);
|
|
79
|
+
const contentArea = document.querySelector('[data-content-area]');
|
|
80
|
+
if (contentArea) {
|
|
81
|
+
observer.observe(contentArea, {
|
|
82
|
+
childList: true,
|
|
83
|
+
subtree: true
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
return () => {
|
|
87
|
+
clearTimeout(timeoutId);
|
|
88
|
+
observer.disconnect();
|
|
89
|
+
};
|
|
90
|
+
}, [location.pathname]);
|
|
91
|
+
// Scroll spy for table of contents
|
|
92
|
+
useEffect(() => {
|
|
93
|
+
if (headings.length === 0) return;
|
|
94
|
+
// Clean up previous observer
|
|
95
|
+
if (observerRef.current) {
|
|
96
|
+
observerRef.current.disconnect();
|
|
97
|
+
}
|
|
98
|
+
// Create new intersection observer
|
|
99
|
+
observerRef.current = new IntersectionObserver(entries => {
|
|
100
|
+
entries.forEach(entry => {
|
|
101
|
+
if (entry.isIntersecting) {
|
|
102
|
+
setActiveHeadingId(entry.target.id);
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
}, {
|
|
106
|
+
rootMargin: '-20% 0px -70% 0px',
|
|
107
|
+
threshold: 0
|
|
108
|
+
});
|
|
109
|
+
// Observe all headings
|
|
110
|
+
headings.forEach(heading => {
|
|
111
|
+
const element = document.getElementById(heading.id);
|
|
112
|
+
if (element && observerRef.current) {
|
|
113
|
+
observerRef.current.observe(element);
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
// Cleanup function
|
|
117
|
+
return () => {
|
|
118
|
+
if (observerRef.current) {
|
|
119
|
+
observerRef.current.disconnect();
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
}, [headings]);
|
|
123
|
+
// Determine active section based on current path
|
|
124
|
+
const isActivePath = path => {
|
|
125
|
+
if (!path) return false;
|
|
126
|
+
return location.pathname === path || location.pathname.startsWith(path + '/');
|
|
127
|
+
};
|
|
128
|
+
// Recursive component to render navigation items
|
|
129
|
+
const renderNavItem = (item, level = 0, pathPrefix = '') => {
|
|
130
|
+
const itemPath = pathPrefix ? `${pathPrefix}/${item.title}` : item.title;
|
|
131
|
+
const hasChildren = item.children && item.children.length > 0;
|
|
132
|
+
const isExpanded = expandedItems.has(itemPath);
|
|
133
|
+
const isActive = item.path ? isActivePath(item.path) : false;
|
|
134
|
+
const indentLevel = level * 16; // 16px per level
|
|
135
|
+
return jsxs("li", {
|
|
136
|
+
className: "w-full",
|
|
137
|
+
children: [jsx("div", {
|
|
138
|
+
className: "flex items-center w-full",
|
|
139
|
+
children: hasChildren ? jsxs("button", {
|
|
140
|
+
onClick: e => {
|
|
141
|
+
e.preventDefault();
|
|
142
|
+
toggleItem(itemPath);
|
|
143
|
+
},
|
|
144
|
+
className: cn('flex items-center justify-between w-full px-3 py-2 text-sm rounded-md transition-colors text-left', isActive ? 'bg-primary/10 dark:bg-primary/20 text-primary dark:text-primary font-medium' : 'text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800'),
|
|
145
|
+
style: {
|
|
146
|
+
paddingLeft: `${12 + indentLevel}px`
|
|
147
|
+
},
|
|
148
|
+
children: [jsx("span", {
|
|
149
|
+
className: "flex-1",
|
|
150
|
+
children: item.title
|
|
151
|
+
}), jsx("svg", {
|
|
152
|
+
className: cn('w-4 h-4 transition-transform flex-shrink-0 ml-2', isExpanded ? 'rotate-90' : ''),
|
|
153
|
+
fill: "none",
|
|
154
|
+
stroke: "currentColor",
|
|
155
|
+
viewBox: "0 0 24 24",
|
|
156
|
+
children: jsx("path", {
|
|
157
|
+
strokeLinecap: "round",
|
|
158
|
+
strokeLinejoin: "round",
|
|
159
|
+
strokeWidth: 2,
|
|
160
|
+
d: "M9 5l7 7-7 7"
|
|
161
|
+
})
|
|
162
|
+
})]
|
|
163
|
+
}) : jsx(Link, {
|
|
164
|
+
to: item.path || '#',
|
|
165
|
+
className: cn('block px-3 py-2 text-sm rounded-md transition-colors', isActive ? 'bg-primary/10 dark:bg-primary/20 text-primary dark:text-primary font-medium' : 'text-gray-700 dark:text-gray-300 hover:bg-gray-50 dark:hover:bg-gray-800'),
|
|
166
|
+
style: {
|
|
167
|
+
paddingLeft: `${12 + indentLevel}px`
|
|
168
|
+
},
|
|
169
|
+
children: item.title
|
|
170
|
+
})
|
|
171
|
+
}), hasChildren && isExpanded && jsx("ul", {
|
|
172
|
+
className: "mt-1 space-y-1",
|
|
173
|
+
children: item.children.map(child => renderNavItem(child, level + 1, itemPath))
|
|
174
|
+
})]
|
|
175
|
+
}, itemPath);
|
|
176
|
+
};
|
|
177
|
+
return jsxs("div", {
|
|
178
|
+
className: "min-h-screen bg-background text-foreground mt-20",
|
|
179
|
+
children: [jsx("aside", {
|
|
180
|
+
className: "hidden lg:block fixed left-0 top-20 h-screen w-64 z-10",
|
|
181
|
+
children: jsxs("div", {
|
|
182
|
+
className: "flex flex-col h-[calc(100vh-64px)] w-64 border-r border-gray-200 dark:border-gray-800 bg-background text-foreground",
|
|
183
|
+
children: [jsx("div", {
|
|
184
|
+
className: "sticky top-0 z-20 p-4 pb-0 bg-background text-foreground ",
|
|
185
|
+
children: jsx("div", {
|
|
186
|
+
className: "mb-4",
|
|
187
|
+
children: jsx(SidebarSearch, {
|
|
188
|
+
placeholder: "Search..."
|
|
189
|
+
})
|
|
190
|
+
})
|
|
191
|
+
}), jsx("nav", {
|
|
192
|
+
className: "flex-1 overflow-y-auto p-4 min-h-0",
|
|
193
|
+
children: jsx("ul", {
|
|
194
|
+
className: "space-y-1",
|
|
195
|
+
children: navItems.map(item => renderNavItem(item))
|
|
196
|
+
})
|
|
197
|
+
}), jsx("div", {
|
|
198
|
+
className: "p-4 border-t border-gray-200 dark:border-gray-800 flex-shrink-0",
|
|
199
|
+
children: jsxs("div", {
|
|
200
|
+
className: "flex items-center justify-center gap-2",
|
|
201
|
+
children: [jsx("div", {
|
|
202
|
+
className: cn('p-1.5 rounded-full transition-colors cursor-pointer', !isDark ? 'bg-gray-100 dark:bg-gray-700' : 'bg-transparent'),
|
|
203
|
+
onClick: () => setMode('light'),
|
|
204
|
+
children: jsx("svg", {
|
|
205
|
+
className: "w-4 h-4 text-gray-700 dark:text-gray-300",
|
|
206
|
+
fill: "none",
|
|
207
|
+
stroke: "currentColor",
|
|
208
|
+
viewBox: "0 0 24 24",
|
|
209
|
+
children: jsx("path", {
|
|
210
|
+
strokeLinecap: "round",
|
|
211
|
+
strokeLinejoin: "round",
|
|
212
|
+
strokeWidth: 2,
|
|
213
|
+
d: "M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z"
|
|
214
|
+
})
|
|
215
|
+
})
|
|
216
|
+
}), jsx("div", {
|
|
217
|
+
className: cn('p-1.5 rounded-full transition-colors cursor-pointer', isDark ? 'bg-gray-100 dark:bg-gray-700' : 'bg-transparent'),
|
|
218
|
+
onClick: () => setMode('dark'),
|
|
219
|
+
children: jsx("svg", {
|
|
220
|
+
className: "w-4 h-4 text-gray-700 dark:text-gray-300",
|
|
221
|
+
fill: "none",
|
|
222
|
+
stroke: "currentColor",
|
|
223
|
+
viewBox: "0 0 24 24",
|
|
224
|
+
children: jsx("path", {
|
|
225
|
+
strokeLinecap: "round",
|
|
226
|
+
strokeLinejoin: "round",
|
|
227
|
+
strokeWidth: 2,
|
|
228
|
+
d: "M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z"
|
|
229
|
+
})
|
|
230
|
+
})
|
|
231
|
+
})]
|
|
232
|
+
})
|
|
233
|
+
})]
|
|
234
|
+
})
|
|
235
|
+
}), jsx("main", {
|
|
236
|
+
className: "lg:pl-64 flex flex-col min-h-screen",
|
|
237
|
+
children: jsx("div", {
|
|
238
|
+
className: "flex-1 flex",
|
|
239
|
+
children: jsx("div", {
|
|
240
|
+
className: "flex-1 min-w-0",
|
|
241
|
+
children: jsx("div", {
|
|
242
|
+
className: "max-w-6xl mx-auto px-6 py-8",
|
|
243
|
+
"data-content-area": true,
|
|
244
|
+
children: children || jsx(Outlet, {})
|
|
245
|
+
})
|
|
246
|
+
})
|
|
247
|
+
})
|
|
248
|
+
})]
|
|
249
|
+
});
|
|
250
|
+
};export{ArticlePageLayout};//# sourceMappingURL=ArticlePageLayout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArticlePageLayout.js","sources":["../../../src/pages/ArticlePage/ArticlePageLayout.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pages/ArticlePage/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pages/ArticlePage/index.tsx"],"names":[],"mappings":"AAGA,QAAA,MAAM,gBAAgB,+CAMrB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
|
@@ -1,190 +1,5 @@
|
|
|
1
|
-
import {jsx
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
articleSlug
|
|
5
|
-
} = useParams();
|
|
6
|
-
const [article, setArticle] = useState(null);
|
|
7
|
-
const [loading, setLoading] = useState(true);
|
|
8
|
-
const [activeHeadingId, setActiveHeadingId] = useState('');
|
|
9
|
-
const observerRef = useRef(null);
|
|
10
|
-
useEffect(() => {
|
|
11
|
-
if (articleSlug) {
|
|
12
|
-
const loadContent = async () => {
|
|
13
|
-
const articleData = await loadArticleContent(articleSlug);
|
|
14
|
-
setArticle(articleData);
|
|
15
|
-
setLoading(false);
|
|
16
|
-
};
|
|
17
|
-
loadContent();
|
|
18
|
-
}
|
|
19
|
-
}, [articleSlug]);
|
|
20
|
-
// Scroll spy functionality
|
|
21
|
-
useEffect(() => {
|
|
22
|
-
if (!article?.headings || article.headings.length === 0) return;
|
|
23
|
-
// Clean up previous observer
|
|
24
|
-
if (observerRef.current) {
|
|
25
|
-
observerRef.current.disconnect();
|
|
26
|
-
}
|
|
27
|
-
// Create new intersection observer
|
|
28
|
-
observerRef.current = new IntersectionObserver(entries => {
|
|
29
|
-
entries.forEach(entry => {
|
|
30
|
-
if (entry.isIntersecting) {
|
|
31
|
-
setActiveHeadingId(entry.target.id);
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
}, {
|
|
35
|
-
rootMargin: '-20% 0px -70% 0px',
|
|
36
|
-
threshold: 0
|
|
37
|
-
});
|
|
38
|
-
// Observe all headings
|
|
39
|
-
article.headings.forEach(heading => {
|
|
40
|
-
const element = document.getElementById(heading.id);
|
|
41
|
-
if (element && observerRef.current) {
|
|
42
|
-
observerRef.current.observe(element);
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
// Cleanup function
|
|
46
|
-
return () => {
|
|
47
|
-
if (observerRef.current) {
|
|
48
|
-
observerRef.current.disconnect();
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
}, [article]);
|
|
52
|
-
const handleSearch = query => {
|
|
53
|
-
console.log('Searching for:', query);
|
|
54
|
-
// Implement search functionality
|
|
55
|
-
};
|
|
56
|
-
if (loading) {
|
|
57
|
-
return jsx("div", {
|
|
58
|
-
className: "min-h-screen bg-background text-foreground",
|
|
59
|
-
children: jsx("div", {
|
|
60
|
-
className: "container mx-auto px-16 py-16",
|
|
61
|
-
children: jsxs("div", {
|
|
62
|
-
className: "animate-pulse",
|
|
63
|
-
children: [jsx("div", {
|
|
64
|
-
className: "h-8 bg-muted rounded w-1/3 mb-4"
|
|
65
|
-
}), jsx("div", {
|
|
66
|
-
className: "h-4 bg-muted rounded w-1/2 mb-8"
|
|
67
|
-
}), jsxs("div", {
|
|
68
|
-
className: "space-y-4",
|
|
69
|
-
children: [jsx("div", {
|
|
70
|
-
className: "h-4 bg-muted rounded"
|
|
71
|
-
}), jsx("div", {
|
|
72
|
-
className: "h-4 bg-muted rounded w-5/6"
|
|
73
|
-
}), jsx("div", {
|
|
74
|
-
className: "h-4 bg-muted rounded w-4/6"
|
|
75
|
-
})]
|
|
76
|
-
})]
|
|
77
|
-
})
|
|
78
|
-
})
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
if (!article) {
|
|
82
|
-
return jsx("div", {
|
|
83
|
-
className: "min-h-screen bg-background text-foreground mt-20",
|
|
84
|
-
children: jsxs("div", {
|
|
85
|
-
className: "container mx-auto px-16 py-16",
|
|
86
|
-
children: [jsx("h1", {
|
|
87
|
-
className: "text-2xl font-bold",
|
|
88
|
-
children: "Article not found"
|
|
89
|
-
}), jsx(Link, {
|
|
90
|
-
to: "/help-center",
|
|
91
|
-
className: "mt-4 text-primary hover:text-primary/80",
|
|
92
|
-
children: "\u2190 Back to Help Center"
|
|
93
|
-
})]
|
|
94
|
-
})
|
|
95
|
-
});
|
|
96
|
-
}
|
|
97
|
-
return jsxs("div", {
|
|
98
|
-
className: "min-h-screen bg-background text-foreground scroll-smooth",
|
|
99
|
-
children: [jsx("div", {
|
|
100
|
-
className: "relative overflow-hidden",
|
|
101
|
-
children: jsx(HelpCenterHeader, {
|
|
102
|
-
onSearch: handleSearch
|
|
103
|
-
})
|
|
104
|
-
}), jsxs("div", {
|
|
105
|
-
className: "flex flex-col ml-auto w-[80%]",
|
|
106
|
-
children: [jsx("div", {
|
|
107
|
-
className: "container mx-auto px-4 md:px-16 pt-8",
|
|
108
|
-
children: jsxs("nav", {
|
|
109
|
-
className: "flex items-center space-x-2 text-sm text-muted-foreground",
|
|
110
|
-
children: [jsx(Link, {
|
|
111
|
-
to: "/help-center",
|
|
112
|
-
className: "hover:text-foreground",
|
|
113
|
-
children: "All Collections"
|
|
114
|
-
}), jsx("span", {
|
|
115
|
-
children: "\u203A"
|
|
116
|
-
}), jsx(Link, {
|
|
117
|
-
to: `/help-center/${article.categoryId}`,
|
|
118
|
-
className: "hover:text-foreground",
|
|
119
|
-
children: getCategoryById(article.categoryId)?.title || article.categoryId
|
|
120
|
-
}), jsx("span", {
|
|
121
|
-
children: "\u203A"
|
|
122
|
-
}), jsx("span", {
|
|
123
|
-
className: "text-foreground",
|
|
124
|
-
children: article.title
|
|
125
|
-
})]
|
|
126
|
-
})
|
|
127
|
-
}), jsx("main", {
|
|
128
|
-
className: "container mx-auto px-4 md:px-16 py-8",
|
|
129
|
-
children: jsxs("div", {
|
|
130
|
-
className: "flex flex-col lg:flex-row gap-8",
|
|
131
|
-
children: [jsxs("div", {
|
|
132
|
-
className: "flex-1 max-w-4xl mx-auto lg:mx-0",
|
|
133
|
-
children: [jsxs("div", {
|
|
134
|
-
className: "mb-8",
|
|
135
|
-
children: [jsx("h1", {
|
|
136
|
-
className: "text-3xl md:text-4xl font-bold text-foreground mb-4",
|
|
137
|
-
children: article.title
|
|
138
|
-
}), jsx("p", {
|
|
139
|
-
className: "text-lg text-muted-foreground mb-6",
|
|
140
|
-
children: article.description
|
|
141
|
-
}), jsxs("div", {
|
|
142
|
-
className: "flex items-center space-x-4 text-sm text-muted-foreground",
|
|
143
|
-
children: [jsxs("div", {
|
|
144
|
-
className: "flex items-center",
|
|
145
|
-
children: [jsx("div", {
|
|
146
|
-
className: "mr-2 flex h-6 w-6 items-center justify-center rounded-full bg-muted text-xs text-foreground",
|
|
147
|
-
children: article.author.charAt(0)
|
|
148
|
-
}), jsxs("span", {
|
|
149
|
-
children: ["Written by ", article.author]
|
|
150
|
-
})]
|
|
151
|
-
}), jsx("span", {
|
|
152
|
-
children: "\u2022"
|
|
153
|
-
}), jsxs("span", {
|
|
154
|
-
children: ["Updated ", article.updatedAt]
|
|
155
|
-
})]
|
|
156
|
-
})]
|
|
157
|
-
}), jsx("div", {
|
|
158
|
-
className: "prose prose-lg max-w-none",
|
|
159
|
-
children: jsx("div", {
|
|
160
|
-
className: cn('prose-headings:text-foreground prose-p:text-muted-foreground prose-strong:text-foreground prose-a:text-primary prose-a:no-underline hover:prose-a:underline prose-ul:text-muted-foreground prose-ol:text-muted-foreground prose-li:text-muted-foreground prose-blockquote:text-muted-foreground prose-code:text-foreground prose-code:bg-muted prose-code:px-1 prose-code:py-0.5 prose-code:rounded prose-pre:bg-muted prose-pre:text-foreground'),
|
|
161
|
-
dangerouslySetInnerHTML: {
|
|
162
|
-
__html: article.htmlContent
|
|
163
|
-
}
|
|
164
|
-
})
|
|
165
|
-
})]
|
|
166
|
-
}), jsx("aside", {
|
|
167
|
-
className: "w-full lg:w-80 flex-shrink-0",
|
|
168
|
-
children: jsx("div", {
|
|
169
|
-
className: "sticky top-[6rem]",
|
|
170
|
-
children: jsx("nav", {
|
|
171
|
-
className: "space-y-1",
|
|
172
|
-
children: article.headings && article.headings.length > 0 ? article.headings.map((heading, index) => {
|
|
173
|
-
const isActive = activeHeadingId === heading.id;
|
|
174
|
-
return jsx("a", {
|
|
175
|
-
href: `#${heading.id}`,
|
|
176
|
-
className: cn('relative block text-sm transition-colors py-1 pl-4', 'border-l-2 border-transparent', isActive ? 'text-foreground border-l-foreground bg-muted/20' : 'text-muted-foreground hover:text-foreground hover:border-l-muted-foreground', heading.level === 1 ? 'font-semibold' : heading.level === 2 ? 'ml-2' : heading.level === 3 ? 'ml-4' : heading.level === 4 ? 'ml-6' : heading.level === 5 ? 'ml-8' : 'ml-10'),
|
|
177
|
-
children: heading.text
|
|
178
|
-
}, index);
|
|
179
|
-
}) : jsx("p", {
|
|
180
|
-
className: "text-sm text-muted-foreground",
|
|
181
|
-
children: "No headings found"
|
|
182
|
-
})
|
|
183
|
-
})
|
|
184
|
-
})
|
|
185
|
-
})]
|
|
186
|
-
})
|
|
187
|
-
})]
|
|
188
|
-
})]
|
|
1
|
+
import {jsx}from'react/jsx-runtime';import {ArticlePage}from'./ArticlePage.js';import {ArticlePageLayout}from'./ArticlePageLayout.js';const ArticlePageIndex = () => {
|
|
2
|
+
return jsx(ArticlePageLayout, {
|
|
3
|
+
children: jsx(ArticlePage, {})
|
|
189
4
|
});
|
|
190
|
-
};export{
|
|
5
|
+
};export{ArticlePageIndex as default};//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/pages/ArticlePage/index.tsx"],"sourcesContent":[null],"names":["_jsx"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/pages/ArticlePage/index.tsx"],"sourcesContent":[null],"names":["_jsx"],"mappings":"sIAGM,MAAA,gBAAgB,GAAG,MAAK;SACnBA,qBACe,EAAA;AAI1B,IAAE,QAAA,EAAAA,GAAA,CAAA,WAAA,EAAA,EAAA;AAEF,GAAA,CAAA;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pages/CategoryCollection/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/pages/CategoryCollection/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,QAAA,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAsGnC,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
|
|
@@ -51,7 +51,7 @@ import {jsx,jsxs}from'react/jsx-runtime';import {useParams,Link}from'@remix-run/
|
|
|
51
51
|
}), jsx("span", {
|
|
52
52
|
children: "\u203A"
|
|
53
53
|
}), jsx("span", {
|
|
54
|
-
className: "text-
|
|
54
|
+
className: "text-primary",
|
|
55
55
|
children: category.title
|
|
56
56
|
})]
|
|
57
57
|
})
|
|
@@ -89,7 +89,7 @@ import {jsx,jsxs}from'react/jsx-runtime';import {useParams,Link}from'@remix-run/
|
|
|
89
89
|
className: "space-y-4",
|
|
90
90
|
children: category.articles.map(article => jsxs(Link, {
|
|
91
91
|
to: `/help-center/${categoryId}/${article.slug}`,
|
|
92
|
-
className: cn(
|
|
92
|
+
className: cn('group flex cursor-pointer items-center justify-between rounded-lg border border-border bg-card p-6 transition-all hover:border-primary/50 hover:bg-primary/5'),
|
|
93
93
|
children: [jsxs("div", {
|
|
94
94
|
className: "flex-1",
|
|
95
95
|
children: [jsx("h3", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/pages/CategoryCollection/index.tsx"],"sourcesContent":[null],"names":["_jsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/pages/CategoryCollection/index.tsx"],"sourcesContent":[null],"names":["_jsx"],"mappings":"6TAOM,MAAA,sBAAsB,GAAa,MAAK;AAC1C,EAAA,MAAA;AAEA,IAAA;AAEA,GAAA,GAAA,SAAkB,EAAA;AACd,EAAA,MAAA,QAAQ,GAAG,4BAA0B,CAAA,UAAA,CAAA,GAAA,IAAA;QACrC,YAAiC,GAAA,KAAA,IAAA;AACrC,IAAA,OAAE,CAAA,GAAA,CAAA,gBAAA,EAAA,KAAA,CAAA;AAEF;AACI,GAAA;AACI,EAAA,MAAA,UAAM,eAAgB;gBACf,IAAA,eAAc,EAAA;YACxB,aAAA,GAAA,eAAA,CAAA,QAAA,CAAA;AACD,MAAA,OAAAA,iBAAY,EAAA;AAChB,QAAE,KAAA,EAAA,EAAA;QAEE,MAAS,EAAA;AACT,OAAA,CAAA;;IAYJ,OAAO,IACE;AAsEb,GAAE;AAEF,EAAA,IAAA,CAAA,QAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface NavItem {
|
|
2
|
+
title: string;
|
|
3
|
+
path: string;
|
|
4
|
+
children?: NavItem[];
|
|
5
|
+
isFile: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function buildDocsNavigation(): NavItem[];
|
|
8
|
+
export declare function getDocsNavigation(): NavItem[];
|
|
9
|
+
//# sourceMappingURL=docsNavigation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docsNavigation.d.ts","sourceRoot":"","sources":["../../src/utils/docsNavigation.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,OAAO;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;CACnB;AAGD,wBAAgB,mBAAmB,IAAI,OAAO,EAAE,CA+B/C;AAKD,wBAAgB,iBAAiB,IAAI,OAAO,EAAE,CAK7C"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import {getAllCategoriesMetadata}from'./markdownLoader.js';// Utility to build navigation tree from category metadata (not folder structure)
|
|
2
|
+
// Build navigation tree from category metadata
|
|
3
|
+
function buildDocsNavigation() {
|
|
4
|
+
const categories = getAllCategoriesMetadata();
|
|
5
|
+
const navItems = [];
|
|
6
|
+
for (const category of categories) {
|
|
7
|
+
// Create category node
|
|
8
|
+
const categoryItem = {
|
|
9
|
+
title: category.title,
|
|
10
|
+
path: `/help-center/${category.id}`,
|
|
11
|
+
children: [],
|
|
12
|
+
isFile: false
|
|
13
|
+
};
|
|
14
|
+
// Create a flat list of articles under each category
|
|
15
|
+
// Path format: /help/:categoryId/:slug (e.g., /help/adminide-modules/adminide-modules-account-auth0-login)
|
|
16
|
+
const articleItems = category.articles.map(article => ({
|
|
17
|
+
title: article.title,
|
|
18
|
+
path: `/help-center/${category.id}/${article.slug}`,
|
|
19
|
+
children: [],
|
|
20
|
+
isFile: true
|
|
21
|
+
}));
|
|
22
|
+
// If there are articles, add them as children
|
|
23
|
+
if (articleItems.length > 0) {
|
|
24
|
+
categoryItem.children = articleItems;
|
|
25
|
+
}
|
|
26
|
+
navItems.push(categoryItem);
|
|
27
|
+
}
|
|
28
|
+
return navItems;
|
|
29
|
+
}
|
|
30
|
+
// Get navigation tree (cached)
|
|
31
|
+
let cachedNavigation = null;
|
|
32
|
+
function getDocsNavigation() {
|
|
33
|
+
if (!cachedNavigation) {
|
|
34
|
+
cachedNavigation = buildDocsNavigation();
|
|
35
|
+
}
|
|
36
|
+
return cachedNavigation;
|
|
37
|
+
}export{buildDocsNavigation,getDocsNavigation};//# sourceMappingURL=docsNavigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docsNavigation.js","sources":["../../src/utils/docsNavigation.ts"],"sourcesContent":[null],"names":[],"mappings":"2DAAA;AAWA;SACgB,mBAAmB,GAAA;AAC/B,EAAA,MAAA,UAAgB,GAAA,wBAA2B,EAAA;QACrC,QAAA,GAAsB,EAAA;AAE5B,EAAA,KAAA,MAAW,QAAA,IAAY,UAAA,EAAU;;AAE7B,IAAA,MAAA;aACS,QAAU,CAAA,KAAA;AACf,MAAA,IAAA,EAAA,CAAA,aAAM,EAAA,QAAwB,CAAA,EAAA,CAAA,CAAA;AAC9B,MAAA,QAAA,EAAA,EAAA;AACA,MAAA,MAAA,EAAA;;;;AAKJ,IAAA,MAAA,YAAkB,GAAA,QAAsB,CAAA,QAAS,CAAA,GAAA,CAAC,OAAK,KAAgB;aAC9D,OAAS,CAAA,KAAA;YACd,CAAI,uBAA0B,CAAA,EAAA,CAAA,CAAA,EAAC,OAAM,CAAA,IAAA,CAAO,CAAC;AAC7C,MAAA,QAAA,EAAA,EAAA;AACA,MAAA,MAAA,EAAA;AACH,KAAA,CAAA,CAAA;;AAGD,IAAA,IAAA,mBAAiB,GAAA,CAAM,EAAG;AACtB,MAAA,YAAA,CAAA,QAAa,GAAA,YAAW;;AAG5B,IAAA,QAAA,CAAA,IAAS,CAAA,YAAK,CAAA;;AAGlB,EAAA,OAAA;AACJ;AAEA;AACA,IAAI,gBAAgB,GAAqB,IAAI;SAE7B,iBAAiB,GAAA;MACzB,CAAA,gBAAiB,EAAA;oBACD,GAAA,mBAAsB,EAAA;;AAE1C,EAAA,OAAA;AACJ"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adminide-stack/yantra-help-browser",
|
|
3
|
-
"version": "12.0.16-alpha.
|
|
3
|
+
"version": "12.0.16-alpha.14",
|
|
4
4
|
"description": "Sample core for higher packages to depend on",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"author": "Yantra App",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"watch": "yarn build:lib:watch"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@admin-layout/tailwind-ui": "12.2.4-alpha.
|
|
24
|
+
"@admin-layout/tailwind-ui": "12.2.4-alpha.12",
|
|
25
25
|
"@pubngo-stack/icons": "8.0.7",
|
|
26
26
|
"@react-icons/all-files": "^4.1.0",
|
|
27
27
|
"marked": "7.0.5",
|
|
@@ -64,5 +64,5 @@
|
|
|
64
64
|
"typescript": {
|
|
65
65
|
"definition": "lib/index.d.ts"
|
|
66
66
|
},
|
|
67
|
-
"gitHead": "
|
|
67
|
+
"gitHead": "78f3b3f39175399dfa3b5a858233c95533ec3f5d"
|
|
68
68
|
}
|