docusaurus-plugin-glossary 3.1.0 → 3.3.0
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 +5 -0
- package/dist/chunk-22LFZL7L.js +109 -0
- package/dist/chunk-22LFZL7L.js.map +1 -0
- package/dist/chunk-7Z37JEHW.js +257 -0
- package/dist/chunk-7Z37JEHW.js.map +1 -0
- package/dist/chunk-WYKSBP3X.js +331 -0
- package/dist/chunk-WYKSBP3X.js.map +1 -0
- package/dist/client/index.cjs +55 -0
- package/dist/client/index.cjs.map +1 -0
- package/dist/client/index.js +10 -21
- package/dist/client/index.js.map +1 -0
- package/dist/components/GlossaryPage.cjs +131 -0
- package/dist/components/GlossaryPage.cjs.map +1 -0
- package/dist/components/GlossaryPage.js +75 -113
- package/dist/components/GlossaryPage.js.map +1 -0
- package/dist/index.cjs +724 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +176 -0
- package/dist/index.d.ts +85 -11
- package/dist/index.js +23 -173
- package/dist/index.js.map +1 -0
- package/dist/preset.cjs +775 -0
- package/dist/preset.cjs.map +1 -0
- package/dist/preset.d.cts +98 -0
- package/dist/preset.d.ts +8 -7
- package/dist/preset.js +79 -143
- package/dist/preset.js.map +1 -0
- package/dist/remark/glossary-terms.cjs +365 -0
- package/dist/remark/glossary-terms.cjs.map +1 -0
- package/dist/remark/glossary-terms.js +9 -440
- package/dist/remark/glossary-terms.js.map +1 -0
- package/dist/{theme/GlossaryTerm/styles.module.css → styles.module-QQW7ISLV.module.css} +2 -4
- package/dist/theme/GlossaryTerm/index.cjs +138 -0
- package/dist/theme/GlossaryTerm/index.cjs.map +1 -0
- package/dist/theme/GlossaryTerm/index.js +56 -90
- package/dist/theme/GlossaryTerm/index.js.map +1 -0
- package/dist/validation.cjs +283 -0
- package/dist/validation.cjs.map +1 -0
- package/dist/validation.d.cts +2 -0
- package/dist/validation.d.ts +2 -44
- package/dist/validation.js +11 -256
- package/dist/validation.js.map +1 -0
- package/package.json +27 -32
- package/dist/components/GlossaryPage.test.js +0 -205
- package/dist/index.d.ts.map +0 -1
- package/dist/preset.d.ts.map +0 -1
- package/dist/remark/glossary-terms.d.ts +0 -28
- package/dist/remark/glossary-terms.d.ts.map +0 -1
- package/dist/theme/GlossaryTerm/index.test.js +0 -143
- package/dist/validation.d.ts.map +0 -1
- /package/dist/{components/GlossaryPage.module.css → GlossaryPage.module-M4DEUP4X.module.css} +0 -0
|
@@ -1,138 +1,100 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
* Groups glossary terms by their first letter
|
|
8
|
-
*/
|
|
1
|
+
// src/components/GlossaryPage.js
|
|
2
|
+
import React, { useState, useMemo } from "react";
|
|
3
|
+
import Layout from "@theme/Layout";
|
|
4
|
+
import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
|
|
5
|
+
import styles from "../GlossaryPage.module-M4DEUP4X.module.css";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
7
|
function groupTermsByLetter(terms) {
|
|
10
8
|
const grouped = {};
|
|
11
|
-
|
|
12
|
-
terms.forEach(term => {
|
|
9
|
+
terms.forEach((term) => {
|
|
13
10
|
const firstLetter = term.term.charAt(0).toUpperCase();
|
|
14
11
|
if (!grouped[firstLetter]) {
|
|
15
12
|
grouped[firstLetter] = [];
|
|
16
13
|
}
|
|
17
14
|
grouped[firstLetter].push(term);
|
|
18
15
|
});
|
|
19
|
-
|
|
20
|
-
// Sort each group alphabetically
|
|
21
|
-
Object.keys(grouped).forEach(letter => {
|
|
16
|
+
Object.keys(grouped).forEach((letter) => {
|
|
22
17
|
grouped[letter].sort((a, b) => a.term.localeCompare(b.term));
|
|
23
18
|
});
|
|
24
|
-
|
|
25
19
|
return grouped;
|
|
26
20
|
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* GlossaryPage component - displays all glossary terms
|
|
30
|
-
*/
|
|
31
|
-
export default function GlossaryPage({ glossaryData }) {
|
|
21
|
+
function GlossaryPage({ glossaryData }) {
|
|
32
22
|
useDocusaurusContext();
|
|
33
|
-
const [searchTerm, setSearchTerm] = useState(
|
|
34
|
-
|
|
23
|
+
const [searchTerm, setSearchTerm] = useState("");
|
|
35
24
|
const terms = useMemo(() => glossaryData?.terms || [], [glossaryData?.terms]);
|
|
36
|
-
|
|
37
|
-
// Filter terms based on search
|
|
38
25
|
const filteredTerms = useMemo(() => {
|
|
39
26
|
if (!searchTerm) return terms;
|
|
40
|
-
|
|
41
27
|
const lowerSearch = searchTerm.toLowerCase();
|
|
42
28
|
return terms.filter(
|
|
43
|
-
term =>
|
|
44
|
-
term.term.toLowerCase().includes(lowerSearch) ||
|
|
45
|
-
term.definition.toLowerCase().includes(lowerSearch)
|
|
29
|
+
(term) => term.term.toLowerCase().includes(lowerSearch) || term.definition.toLowerCase().includes(lowerSearch)
|
|
46
30
|
);
|
|
47
31
|
}, [terms, searchTerm]);
|
|
48
|
-
|
|
49
|
-
// Group terms by first letter
|
|
50
32
|
const groupedTerms = useMemo(() => {
|
|
51
33
|
return groupTermsByLetter(filteredTerms);
|
|
52
34
|
}, [filteredTerms]);
|
|
53
|
-
|
|
54
35
|
const letters = Object.keys(groupedTerms).sort();
|
|
55
|
-
|
|
56
|
-
return (
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
{idx > 0 && ', '}
|
|
116
|
-
<a href={`#${related.toLowerCase().replace(/\s+/g, '-')}`}>
|
|
117
|
-
{related}
|
|
118
|
-
</a>
|
|
119
|
-
</React.Fragment>
|
|
120
|
-
))}
|
|
121
|
-
</div>
|
|
122
|
-
)}
|
|
123
|
-
</dd>
|
|
124
|
-
</div>
|
|
125
|
-
))}
|
|
126
|
-
</dl>
|
|
127
|
-
</section>
|
|
128
|
-
))}
|
|
129
|
-
</div>
|
|
130
|
-
)}
|
|
131
|
-
|
|
132
|
-
<footer className={styles.glossaryFooter}>
|
|
133
|
-
<p>Total terms: {terms.length}</p>
|
|
134
|
-
</footer>
|
|
135
|
-
</div>
|
|
136
|
-
</Layout>
|
|
137
|
-
);
|
|
36
|
+
const glossaryTitle = glossaryData?.title || "Glossary";
|
|
37
|
+
return /* @__PURE__ */ jsx(Layout, { title: glossaryTitle, description: "A glossary of terms and definitions", children: /* @__PURE__ */ jsxs("div", { className: styles.glossaryContainer, children: [
|
|
38
|
+
/* @__PURE__ */ jsxs("header", { className: styles.glossaryHeader, children: [
|
|
39
|
+
/* @__PURE__ */ jsx("h1", { children: glossaryTitle }),
|
|
40
|
+
/* @__PURE__ */ jsx("p", { className: styles.glossaryDescription, children: glossaryData?.description || "A collection of terms and their definitions" }),
|
|
41
|
+
/* @__PURE__ */ jsx("div", { className: styles.searchContainer, children: /* @__PURE__ */ jsx(
|
|
42
|
+
"input",
|
|
43
|
+
{
|
|
44
|
+
type: "text",
|
|
45
|
+
placeholder: "Search terms...",
|
|
46
|
+
className: styles.searchInput,
|
|
47
|
+
value: searchTerm,
|
|
48
|
+
onChange: (e) => setSearchTerm(e.target.value)
|
|
49
|
+
}
|
|
50
|
+
) })
|
|
51
|
+
] }),
|
|
52
|
+
filteredTerms.length === 0 ? /* @__PURE__ */ jsx("div", { className: styles.noResults, children: /* @__PURE__ */ jsxs("p", { children: [
|
|
53
|
+
'No terms found matching "',
|
|
54
|
+
searchTerm,
|
|
55
|
+
'"'
|
|
56
|
+
] }) }) : /* @__PURE__ */ jsxs("div", { className: styles.glossaryContent, children: [
|
|
57
|
+
/* @__PURE__ */ jsx("nav", { className: styles.letterNav, children: letters.map((letter) => /* @__PURE__ */ jsx("a", { href: `#letter-${letter}`, className: styles.letterLink, children: letter }, letter)) }),
|
|
58
|
+
letters.map((letter) => /* @__PURE__ */ jsxs("section", { id: `letter-${letter}`, className: styles.letterSection, children: [
|
|
59
|
+
/* @__PURE__ */ jsx("h2", { className: styles.letterHeading, children: letter }),
|
|
60
|
+
/* @__PURE__ */ jsx("dl", { className: styles.termList, children: groupedTerms[letter].map((term, index) => /* @__PURE__ */ jsxs(
|
|
61
|
+
"div",
|
|
62
|
+
{
|
|
63
|
+
className: styles.termItem,
|
|
64
|
+
id: term.id || term.term.toLowerCase().replace(/\s+/g, "-"),
|
|
65
|
+
children: [
|
|
66
|
+
/* @__PURE__ */ jsxs("dt", { className: styles.termName, children: [
|
|
67
|
+
term.term,
|
|
68
|
+
term.abbreviation && /* @__PURE__ */ jsxs("span", { className: styles.abbreviation, children: [
|
|
69
|
+
" (",
|
|
70
|
+
term.abbreviation,
|
|
71
|
+
")"
|
|
72
|
+
] })
|
|
73
|
+
] }),
|
|
74
|
+
/* @__PURE__ */ jsxs("dd", { className: styles.termDefinition, children: [
|
|
75
|
+
term.definition,
|
|
76
|
+
term.relatedTerms && term.relatedTerms.length > 0 && /* @__PURE__ */ jsxs("div", { className: styles.relatedTerms, children: [
|
|
77
|
+
/* @__PURE__ */ jsx("strong", { children: "Related terms:" }),
|
|
78
|
+
" ",
|
|
79
|
+
term.relatedTerms.map((related, idx) => /* @__PURE__ */ jsxs(React.Fragment, { children: [
|
|
80
|
+
idx > 0 && ", ",
|
|
81
|
+
/* @__PURE__ */ jsx("a", { href: `#${related.toLowerCase().replace(/\s+/g, "-")}`, children: related })
|
|
82
|
+
] }, idx))
|
|
83
|
+
] })
|
|
84
|
+
] })
|
|
85
|
+
]
|
|
86
|
+
},
|
|
87
|
+
`${letter}-${index}`
|
|
88
|
+
)) })
|
|
89
|
+
] }, letter))
|
|
90
|
+
] }),
|
|
91
|
+
/* @__PURE__ */ jsx("footer", { className: styles.glossaryFooter, children: /* @__PURE__ */ jsxs("p", { children: [
|
|
92
|
+
"Total terms: ",
|
|
93
|
+
terms.length
|
|
94
|
+
] }) })
|
|
95
|
+
] }) });
|
|
138
96
|
}
|
|
97
|
+
export {
|
|
98
|
+
GlossaryPage as default
|
|
99
|
+
};
|
|
100
|
+
//# sourceMappingURL=GlossaryPage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/GlossaryPage.js"],"sourcesContent":["import React, { useState, useMemo } from 'react';\nimport Layout from '@theme/Layout';\nimport useDocusaurusContext from '@docusaurus/useDocusaurusContext';\nimport styles from './GlossaryPage.module.css';\n\n/**\n * Groups glossary terms by their first letter\n */\nfunction groupTermsByLetter(terms) {\n const grouped = {};\n\n terms.forEach(term => {\n const firstLetter = term.term.charAt(0).toUpperCase();\n if (!grouped[firstLetter]) {\n grouped[firstLetter] = [];\n }\n grouped[firstLetter].push(term);\n });\n\n // Sort each group alphabetically\n Object.keys(grouped).forEach(letter => {\n grouped[letter].sort((a, b) => a.term.localeCompare(b.term));\n });\n\n return grouped;\n}\n\n/**\n * GlossaryPage component - displays all glossary terms\n */\nexport default function GlossaryPage({ glossaryData }) {\n useDocusaurusContext();\n const [searchTerm, setSearchTerm] = useState('');\n\n const terms = useMemo(() => glossaryData?.terms || [], [glossaryData?.terms]);\n\n // Filter terms based on search\n const filteredTerms = useMemo(() => {\n if (!searchTerm) return terms;\n\n const lowerSearch = searchTerm.toLowerCase();\n return terms.filter(\n term =>\n term.term.toLowerCase().includes(lowerSearch) ||\n term.definition.toLowerCase().includes(lowerSearch)\n );\n }, [terms, searchTerm]);\n\n // Group terms by first letter\n const groupedTerms = useMemo(() => {\n return groupTermsByLetter(filteredTerms);\n }, [filteredTerms]);\n\n const letters = Object.keys(groupedTerms).sort();\n\n const glossaryTitle = glossaryData?.title || 'Glossary';\n\n return (\n <Layout title={glossaryTitle} description=\"A glossary of terms and definitions\">\n <div className={styles.glossaryContainer}>\n <header className={styles.glossaryHeader}>\n <h1>{glossaryTitle}</h1>\n <p className={styles.glossaryDescription}>\n {glossaryData?.description || 'A collection of terms and their definitions'}\n </p>\n\n <div className={styles.searchContainer}>\n <input\n type=\"text\"\n placeholder=\"Search terms...\"\n className={styles.searchInput}\n value={searchTerm}\n onChange={e => setSearchTerm(e.target.value)}\n />\n </div>\n </header>\n\n {filteredTerms.length === 0 ? (\n <div className={styles.noResults}>\n <p>No terms found matching \"{searchTerm}\"</p>\n </div>\n ) : (\n <div className={styles.glossaryContent}>\n {/* Letter navigation */}\n <nav className={styles.letterNav}>\n {letters.map(letter => (\n <a key={letter} href={`#letter-${letter}`} className={styles.letterLink}>\n {letter}\n </a>\n ))}\n </nav>\n\n {/* Terms grouped by letter */}\n {letters.map(letter => (\n <section key={letter} id={`letter-${letter}`} className={styles.letterSection}>\n <h2 className={styles.letterHeading}>{letter}</h2>\n <dl className={styles.termList}>\n {groupedTerms[letter].map((term, index) => (\n <div\n key={`${letter}-${index}`}\n className={styles.termItem}\n id={term.id || term.term.toLowerCase().replace(/\\s+/g, '-')}\n >\n <dt className={styles.termName}>\n {term.term}\n {term.abbreviation && (\n <span className={styles.abbreviation}> ({term.abbreviation})</span>\n )}\n </dt>\n <dd className={styles.termDefinition}>\n {term.definition}\n {term.relatedTerms && term.relatedTerms.length > 0 && (\n <div className={styles.relatedTerms}>\n <strong>Related terms:</strong>{' '}\n {term.relatedTerms.map((related, idx) => (\n <React.Fragment key={idx}>\n {idx > 0 && ', '}\n <a href={`#${related.toLowerCase().replace(/\\s+/g, '-')}`}>\n {related}\n </a>\n </React.Fragment>\n ))}\n </div>\n )}\n </dd>\n </div>\n ))}\n </dl>\n </section>\n ))}\n </div>\n )}\n\n <footer className={styles.glossaryFooter}>\n <p>Total terms: {terms.length}</p>\n </footer>\n </div>\n </Layout>\n );\n}\n"],"mappings":"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","names":[]}
|