@sp-days-framework/docusaurus-plugin-interactive-tasks 1.0.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.
Files changed (173) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +339 -0
  3. package/lib/contexts/DocTaskCounterContext.d.ts +15 -0
  4. package/lib/contexts/DocTaskCounterContext.d.ts.map +1 -0
  5. package/lib/contexts/DocTaskCounterContext.js +7 -0
  6. package/lib/contexts/DocTaskCounterContext.js.map +1 -0
  7. package/lib/contexts/TaskContext.d.ts +72 -0
  8. package/lib/contexts/TaskContext.d.ts.map +1 -0
  9. package/lib/contexts/TaskContext.js +6 -0
  10. package/lib/contexts/TaskContext.js.map +1 -0
  11. package/lib/index.d.ts +14 -0
  12. package/lib/index.d.ts.map +1 -0
  13. package/lib/index.js +59 -0
  14. package/lib/index.js.map +1 -0
  15. package/lib/plugin/TaskRegistryPlugin.d.ts +27 -0
  16. package/lib/plugin/TaskRegistryPlugin.d.ts.map +1 -0
  17. package/lib/plugin/TaskRegistryPlugin.js +328 -0
  18. package/lib/plugin/TaskRegistryPlugin.js.map +1 -0
  19. package/lib/plugin/remarkTaskDirective.d.ts +29 -0
  20. package/lib/plugin/remarkTaskDirective.d.ts.map +1 -0
  21. package/lib/plugin/remarkTaskDirective.js +277 -0
  22. package/lib/plugin/remarkTaskDirective.js.map +1 -0
  23. package/lib/theme/DocRoot/Layout/index.d.ts +14 -0
  24. package/lib/theme/DocRoot/Layout/index.d.ts.map +1 -0
  25. package/lib/theme/DocRoot/Layout/index.js +27 -0
  26. package/lib/theme/DocRoot/Layout/index.js.map +1 -0
  27. package/lib/theme/DocRoot/index.d.ts +22 -0
  28. package/lib/theme/DocRoot/index.d.ts.map +1 -0
  29. package/lib/theme/DocRoot/index.js +33 -0
  30. package/lib/theme/DocRoot/index.js.map +1 -0
  31. package/lib/theme/DocSidebar/Desktop/CollapseButton/index.d.ts +4 -0
  32. package/lib/theme/DocSidebar/Desktop/CollapseButton/index.d.ts.map +1 -0
  33. package/lib/theme/DocSidebar/Desktop/CollapseButton/index.js +24 -0
  34. package/lib/theme/DocSidebar/Desktop/CollapseButton/index.js.map +1 -0
  35. package/lib/theme/DocSidebar/Desktop/CollapseButton/styles.module.css +40 -0
  36. package/lib/theme/DocSidebar/Desktop/Content/index.d.ts +4 -0
  37. package/lib/theme/DocSidebar/Desktop/Content/index.d.ts.map +1 -0
  38. package/lib/theme/DocSidebar/Desktop/Content/index.js +67 -0
  39. package/lib/theme/DocSidebar/Desktop/Content/index.js.map +1 -0
  40. package/lib/theme/DocSidebar/Desktop/Content/styles.module.css +16 -0
  41. package/lib/theme/DocSidebar/Desktop/index.d.ts +6 -0
  42. package/lib/theme/DocSidebar/Desktop/index.d.ts.map +1 -0
  43. package/lib/theme/DocSidebar/Desktop/index.js +21 -0
  44. package/lib/theme/DocSidebar/Desktop/index.js.map +1 -0
  45. package/lib/theme/DocSidebar/Desktop/styles.module.css +37 -0
  46. package/lib/theme/DocSidebar/Mobile/index.d.ts +6 -0
  47. package/lib/theme/DocSidebar/Mobile/index.d.ts.map +1 -0
  48. package/lib/theme/DocSidebar/Mobile/index.js +29 -0
  49. package/lib/theme/DocSidebar/Mobile/index.js.map +1 -0
  50. package/lib/theme/DocSidebar/index.d.ts +4 -0
  51. package/lib/theme/DocSidebar/index.d.ts.map +1 -0
  52. package/lib/theme/DocSidebar/index.js +21 -0
  53. package/lib/theme/DocSidebar/index.js.map +1 -0
  54. package/lib/theme/DocSidebarItem/Category/index.d.ts +4 -0
  55. package/lib/theme/DocSidebarItem/Category/index.d.ts.map +1 -0
  56. package/lib/theme/DocSidebarItem/Category/index.js +316 -0
  57. package/lib/theme/DocSidebarItem/Category/index.js.map +1 -0
  58. package/lib/theme/DocSidebarItem/Category/styles.module.css +187 -0
  59. package/lib/theme/DocSidebarItem/Html/index.d.ts +4 -0
  60. package/lib/theme/DocSidebarItem/Html/index.d.ts.map +1 -0
  61. package/lib/theme/DocSidebarItem/Html/index.js +17 -0
  62. package/lib/theme/DocSidebarItem/Html/index.js.map +1 -0
  63. package/lib/theme/DocSidebarItem/Html/styles.module.css +6 -0
  64. package/lib/theme/DocSidebarItem/Link/index.d.ts +6 -0
  65. package/lib/theme/DocSidebarItem/Link/index.d.ts.map +1 -0
  66. package/lib/theme/DocSidebarItem/Link/index.js +149 -0
  67. package/lib/theme/DocSidebarItem/Link/index.js.map +1 -0
  68. package/lib/theme/DocSidebarItem/Link/styles.module.css +197 -0
  69. package/lib/theme/DocSidebarItem/index.d.ts +4 -0
  70. package/lib/theme/DocSidebarItem/index.d.ts.map +1 -0
  71. package/lib/theme/DocSidebarItem/index.js +22 -0
  72. package/lib/theme/DocSidebarItem/index.js.map +1 -0
  73. package/lib/theme/DocSidebarItems/index.d.ts +6 -0
  74. package/lib/theme/DocSidebarItems/index.d.ts.map +1 -0
  75. package/lib/theme/DocSidebarItems/index.js +48 -0
  76. package/lib/theme/DocSidebarItems/index.js.map +1 -0
  77. package/lib/theme/DocTaskCounterProvider/index.d.ts +20 -0
  78. package/lib/theme/DocTaskCounterProvider/index.d.ts.map +1 -0
  79. package/lib/theme/DocTaskCounterProvider/index.js +105 -0
  80. package/lib/theme/DocTaskCounterProvider/index.js.map +1 -0
  81. package/lib/theme/MDXComponents.d.ts +19 -0
  82. package/lib/theme/MDXComponents.d.ts.map +1 -0
  83. package/lib/theme/MDXComponents.js +52 -0
  84. package/lib/theme/MDXComponents.js.map +1 -0
  85. package/lib/theme/Root.d.ts +9 -0
  86. package/lib/theme/Root.d.ts.map +1 -0
  87. package/lib/theme/Root.js +105 -0
  88. package/lib/theme/Root.js.map +1 -0
  89. package/lib/theme/Task/Hint/index.d.ts +14 -0
  90. package/lib/theme/Task/Hint/index.d.ts.map +1 -0
  91. package/lib/theme/Task/Hint/index.js +23 -0
  92. package/lib/theme/Task/Hint/index.js.map +1 -0
  93. package/lib/theme/Task/Hint/styles.module.css +72 -0
  94. package/lib/theme/Task/Solution/index.d.ts +14 -0
  95. package/lib/theme/Task/Solution/index.d.ts.map +1 -0
  96. package/lib/theme/Task/Solution/index.js +23 -0
  97. package/lib/theme/Task/Solution/index.js.map +1 -0
  98. package/lib/theme/Task/Solution/styles.module.css +71 -0
  99. package/lib/theme/Task/Text/index.d.ts +14 -0
  100. package/lib/theme/Task/Text/index.d.ts.map +1 -0
  101. package/lib/theme/Task/Text/index.js +18 -0
  102. package/lib/theme/Task/Text/index.js.map +1 -0
  103. package/lib/theme/Task/Text/styles.module.css +39 -0
  104. package/lib/theme/Task/index.d.ts +11 -0
  105. package/lib/theme/Task/index.d.ts.map +1 -0
  106. package/lib/theme/Task/index.js +286 -0
  107. package/lib/theme/Task/index.js.map +1 -0
  108. package/lib/theme/Task/styles.module.css +529 -0
  109. package/lib/theme/TaskAutoHideToggle/index.d.ts +10 -0
  110. package/lib/theme/TaskAutoHideToggle/index.d.ts.map +1 -0
  111. package/lib/theme/TaskAutoHideToggle/index.js +79 -0
  112. package/lib/theme/TaskAutoHideToggle/index.js.map +1 -0
  113. package/lib/theme/TaskAutoHideToggle/styles.module.css +41 -0
  114. package/lib/theme/TaskExample/index.d.ts +16 -0
  115. package/lib/theme/TaskExample/index.d.ts.map +1 -0
  116. package/lib/theme/TaskExample/index.js +249 -0
  117. package/lib/theme/TaskExample/index.js.map +1 -0
  118. package/lib/theme/TaskPlaceholder/README.md +119 -0
  119. package/lib/theme/TaskPlaceholder/index.d.ts +23 -0
  120. package/lib/theme/TaskPlaceholder/index.d.ts.map +1 -0
  121. package/lib/theme/TaskPlaceholder/index.js +293 -0
  122. package/lib/theme/TaskPlaceholder/index.js.map +1 -0
  123. package/lib/theme/TaskProgression/index.d.ts +11 -0
  124. package/lib/theme/TaskProgression/index.d.ts.map +1 -0
  125. package/lib/theme/TaskProgression/index.js +131 -0
  126. package/lib/theme/TaskProgression/index.js.map +1 -0
  127. package/lib/theme/TaskProgression/styles.module.css +162 -0
  128. package/lib/theme/TaskProgressionOverview/index.d.ts +10 -0
  129. package/lib/theme/TaskProgressionOverview/index.d.ts.map +1 -0
  130. package/lib/theme/TaskProgressionOverview/index.js +123 -0
  131. package/lib/theme/TaskProgressionOverview/index.js.map +1 -0
  132. package/lib/theme/TaskProgressionOverview/styles.module.css +159 -0
  133. package/lib/theme/TaskProvider/index.d.ts +15 -0
  134. package/lib/theme/TaskProvider/index.d.ts.map +1 -0
  135. package/lib/theme/TaskProvider/index.js +134 -0
  136. package/lib/theme/TaskProvider/index.js.map +1 -0
  137. package/lib/utils/badgeStyles.d.ts +29 -0
  138. package/lib/utils/badgeStyles.d.ts.map +1 -0
  139. package/lib/utils/badgeStyles.js +60 -0
  140. package/lib/utils/badgeStyles.js.map +1 -0
  141. package/lib/utils/icons.d.ts +38 -0
  142. package/lib/utils/icons.d.ts.map +1 -0
  143. package/lib/utils/icons.js +53 -0
  144. package/lib/utils/icons.js.map +1 -0
  145. package/lib/utils/logger.d.ts +38 -0
  146. package/lib/utils/logger.d.ts.map +1 -0
  147. package/lib/utils/logger.js +72 -0
  148. package/lib/utils/logger.js.map +1 -0
  149. package/lib/utils/storage.d.ts +33 -0
  150. package/lib/utils/storage.d.ts.map +1 -0
  151. package/lib/utils/storage.js +105 -0
  152. package/lib/utils/storage.js.map +1 -0
  153. package/lib/utils/useDocTaskStats.d.ts +58 -0
  154. package/lib/utils/useDocTaskStats.d.ts.map +1 -0
  155. package/lib/utils/useDocTaskStats.js +206 -0
  156. package/lib/utils/useDocTaskStats.js.map +1 -0
  157. package/lib/utils/usePluginId.d.ts +24 -0
  158. package/lib/utils/usePluginId.d.ts.map +1 -0
  159. package/lib/utils/usePluginId.js +61 -0
  160. package/lib/utils/usePluginId.js.map +1 -0
  161. package/lib/utils/useResolveDocPath.d.ts +33 -0
  162. package/lib/utils/useResolveDocPath.d.ts.map +1 -0
  163. package/lib/utils/useResolveDocPath.js +122 -0
  164. package/lib/utils/useResolveDocPath.js.map +1 -0
  165. package/lib/utils/useTaskBadgeAnimation.d.ts +16 -0
  166. package/lib/utils/useTaskBadgeAnimation.d.ts.map +1 -0
  167. package/lib/utils/useTaskBadgeAnimation.js +51 -0
  168. package/lib/utils/useTaskBadgeAnimation.js.map +1 -0
  169. package/lib/validateThemeConfig.d.ts +8 -0
  170. package/lib/validateThemeConfig.d.ts.map +1 -0
  171. package/lib/validateThemeConfig.js +15 -0
  172. package/lib/validateThemeConfig.js.map +1 -0
  173. package/package.json +82 -0
@@ -0,0 +1,316 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.default = DocSidebarItemCategory;
40
+ const react_1 = __importStar(require("react"));
41
+ const clsx_1 = __importDefault(require("clsx"));
42
+ const theme_common_1 = require("@docusaurus/theme-common");
43
+ const internal_1 = require("@docusaurus/theme-common/internal");
44
+ const client_1 = require("@docusaurus/plugin-content-docs/client");
45
+ const Link_1 = __importDefault(require("@docusaurus/Link"));
46
+ const Translate_1 = require("@docusaurus/Translate");
47
+ const useIsBrowser_1 = __importDefault(require("@docusaurus/useIsBrowser"));
48
+ const DocSidebarItems_1 = __importDefault(require("@theme/DocSidebarItems"));
49
+ const Link_2 = __importDefault(require("@theme/DocSidebarItem/Link"));
50
+ const useDocTaskStats_1 = require("../../../utils/useDocTaskStats");
51
+ const useTaskBadgeAnimation_1 = require("../../../utils/useTaskBadgeAnimation");
52
+ const usePluginId_1 = require("../../../utils/usePluginId");
53
+ const icons_1 = require("../../../utils/icons");
54
+ const badgeStyles_1 = require("../../../utils/badgeStyles");
55
+ const styles_module_css_1 = __importDefault(require("./styles.module.css"));
56
+ /**
57
+ * Recursively extract all docIds from category items
58
+ */
59
+ function extractDocIds(items) {
60
+ const docIds = [];
61
+ for (const item of items) {
62
+ if (item.type === 'link' && item.docId) {
63
+ docIds.push(item.docId);
64
+ }
65
+ else if (item.type === 'category' && item.items) {
66
+ docIds.push(...extractDocIds(item.items));
67
+ }
68
+ }
69
+ return docIds;
70
+ }
71
+ // If we navigate to a category and it becomes active, it should automatically
72
+ // expand itself
73
+ function useAutoExpandActiveCategory({ isActive, collapsed, updateCollapsed, activePath, }) {
74
+ const wasActive = (0, theme_common_1.usePrevious)(isActive);
75
+ const previousActivePath = (0, theme_common_1.usePrevious)(activePath);
76
+ (0, react_1.useEffect)(() => {
77
+ const justBecameActive = isActive && !wasActive;
78
+ const stillActiveButPathChanged = isActive && wasActive && activePath !== previousActivePath;
79
+ if ((justBecameActive || stillActiveButPathChanged) && collapsed) {
80
+ updateCollapsed(false);
81
+ }
82
+ }, [
83
+ isActive,
84
+ wasActive,
85
+ collapsed,
86
+ updateCollapsed,
87
+ activePath,
88
+ previousActivePath,
89
+ ]);
90
+ }
91
+ /**
92
+ * When a collapsible category has no link, we still link it to its first child
93
+ * during SSR as a temporary fallback. This allows to be able to navigate inside
94
+ * the category even when JS fails to load, is delayed or simply disabled
95
+ * React hydration becomes an optional progressive enhancement
96
+ * see https://github.com/facebookincubator/infima/issues/36#issuecomment-772543188
97
+ * see https://github.com/facebook/docusaurus/issues/3030
98
+ */
99
+ function useCategoryHrefWithSSRFallback(item) {
100
+ const isBrowser = (0, useIsBrowser_1.default)();
101
+ return (0, react_1.useMemo)(() => {
102
+ if (item.href && !item.linkUnlisted) {
103
+ return item.href;
104
+ }
105
+ // In these cases, it's not necessary to render a fallback
106
+ // We skip the "findFirstCategoryLink" computation
107
+ if (isBrowser || !item.collapsible) {
108
+ return undefined;
109
+ }
110
+ return (0, client_1.findFirstSidebarItemLink)(item);
111
+ }, [item, isBrowser]);
112
+ }
113
+ function CollapseButton({ collapsed, categoryLabel, onClick, }) {
114
+ return (react_1.default.createElement("button", { "aria-label": collapsed
115
+ ? (0, Translate_1.translate)({
116
+ id: 'theme.DocSidebarItem.expandCategoryAriaLabel',
117
+ message: "Expand sidebar category '{label}'",
118
+ description: 'The ARIA label to expand the sidebar category',
119
+ }, { label: categoryLabel })
120
+ : (0, Translate_1.translate)({
121
+ id: 'theme.DocSidebarItem.collapseCategoryAriaLabel',
122
+ message: "Collapse sidebar category '{label}'",
123
+ description: 'The ARIA label to collapse the sidebar category',
124
+ }, { label: categoryLabel }), "aria-expanded": !collapsed, type: "button", className: "clean-btn menu__caret", onClick: onClick }));
125
+ }
126
+ function CategoryLinkLabel({ label, taskStats, isAnimatingCompletion, isRemovingCheckmark, }) {
127
+ if (!taskStats) {
128
+ return (react_1.default.createElement("span", { title: label, className: styles_module_css_1.default.categoryLinkLabel }, label));
129
+ }
130
+ const badgeConfig = taskStats.badgeConfig;
131
+ const hideBadge = (0, badgeStyles_1.shouldHideBadge)(badgeConfig);
132
+ const disableIcon = (0, badgeStyles_1.shouldDisableIcon)(badgeConfig);
133
+ // If badge is hidden, render without badge
134
+ if (hideBadge) {
135
+ return (react_1.default.createElement("span", { title: label, className: styles_module_css_1.default.categoryLinkLabel }, label));
136
+ }
137
+ const badgeClass = taskStats.isComplete ? styles_module_css_1.default.categoryBadgeComplete : styles_module_css_1.default.categoryBadgeIncomplete;
138
+ const badgeStyles = (0, badgeStyles_1.getBadgeStyles)(badgeConfig, taskStats.isComplete);
139
+ // Show icon only if complete AND icon not disabled
140
+ const showIcon = taskStats.isComplete && !disableIcon;
141
+ // Determine checkmark visibility classes
142
+ const checkmarkClasses = (0, clsx_1.default)(styles_module_css_1.default.categoryBadgeCheckmark, {
143
+ [styles_module_css_1.default.categoryBadgeCheckmarkVisible]: showIcon && !isAnimatingCompletion && !isRemovingCheckmark,
144
+ [styles_module_css_1.default.categoryBadgeCheckmarkAnimating]: showIcon && isAnimatingCompletion,
145
+ [styles_module_css_1.default.categoryBadgeCheckmarkRemoving]: isRemovingCheckmark,
146
+ });
147
+ // Determine number visibility classes
148
+ const numberClasses = (0, clsx_1.default)(styles_module_css_1.default.categoryBadgeNumber, {
149
+ [styles_module_css_1.default.categoryBadgeNumberVisible]: !showIcon || isRemovingCheckmark,
150
+ [styles_module_css_1.default.categoryBadgeNumberRemoving]: showIcon && isAnimatingCompletion,
151
+ });
152
+ return (react_1.default.createElement("div", { className: styles_module_css_1.default.categoryWithTasks },
153
+ react_1.default.createElement("span", { title: label, className: (0, clsx_1.default)(styles_module_css_1.default.categoryLinkLabel, styles_module_css_1.default.categoryContent) }, label),
154
+ react_1.default.createElement("div", { className: (0, clsx_1.default)(styles_module_css_1.default.categoryBadge, badgeClass, isAnimatingCompletion && styles_module_css_1.default.categoryBadgeAnimating), style: badgeStyles },
155
+ react_1.default.createElement("span", { className: numberClasses },
156
+ taskStats.completedTasks,
157
+ "/",
158
+ taskStats.totalTasks),
159
+ react_1.default.createElement("span", { className: checkmarkClasses }, icons_1.CHECKMARKS_ICON))));
160
+ }
161
+ // Memoize the collapsible category component to prevent unnecessary re-renders
162
+ const MemoizedDocSidebarItemCategoryCollapsible = (0, react_1.memo)(DocSidebarItemCategoryCollapsible);
163
+ function DocSidebarItemCategory(props) {
164
+ const visibleChildren = (0, client_1.useVisibleSidebarItems)(props.item.items, props.activePath);
165
+ if (visibleChildren.length === 0) {
166
+ return react_1.default.createElement(DocSidebarItemCategoryEmpty, { ...props });
167
+ }
168
+ else {
169
+ return react_1.default.createElement(MemoizedDocSidebarItemCategoryCollapsible, { ...props });
170
+ }
171
+ }
172
+ function isCategoryWithHref(category) {
173
+ return typeof category.href === 'string';
174
+ }
175
+ // If a category doesn't have any visible children, we render it as a link
176
+ function DocSidebarItemCategoryEmpty({ item, ...props }) {
177
+ // If the category has no link, we don't render anything
178
+ // It's not super useful to render a category you can't open nor click
179
+ if (!isCategoryWithHref(item)) {
180
+ return null;
181
+ }
182
+ // We remove props that don't make sense for a link and forward the rest
183
+ const { type, collapsed, collapsible, items, linkUnlisted, ...forwardableProps } = item;
184
+ const linkItem = {
185
+ type: 'link',
186
+ ...forwardableProps,
187
+ };
188
+ return react_1.default.createElement(Link_2.default, { item: linkItem, ...props });
189
+ }
190
+ function DocSidebarItemCategoryCollapsible({ item, onItemClick, activePath, level, index, ...props }) {
191
+ const { items, label, collapsible, className, href } = item;
192
+ const { docs: { sidebar: { autoCollapseCategories }, }, } = (0, theme_common_1.useThemeConfig)();
193
+ const hrefWithSSRFallback = useCategoryHrefWithSSRFallback(item);
194
+ const isActive = (0, client_1.isActiveSidebarItem)(item, activePath);
195
+ const isCurrentPage = (0, internal_1.isSamePath)(href, activePath);
196
+ // Get the correct plugin ID
197
+ const pluginId = (0, usePluginId_1.usePluginId)();
198
+ // Get task statistics for all children
199
+ // Optimize: Create stable dependency to prevent recalculation on every render
200
+ const docIds = (0, react_1.useMemo)(() => {
201
+ return extractDocIds(items);
202
+ }, [JSON.stringify(items)]);
203
+ // Pass customProps directly from sidebar item to get badge configuration
204
+ const taskStats = (0, useDocTaskStats_1.useCategoryTaskStats)(docIds, pluginId, item.customProps);
205
+ const isComplete = taskStats?.isComplete || false;
206
+ // Generate a unique category identifier for animation tracking
207
+ // Use the label as identifier since categories don't have docIds
208
+ const categoryId = `category-${label.replace(/\s+/g, '-').toLowerCase()}`;
209
+ // Animation tracking
210
+ const { hasAnimated, markAsAnimated } = (0, useTaskBadgeAnimation_1.useTaskBadgeAnimation)(pluginId, categoryId);
211
+ // Local state for animations
212
+ const [isAnimatingCompletion, setIsAnimatingCompletion] = (0, react_1.useState)(false);
213
+ const [isRemovingCheckmark, setIsRemovingCheckmark] = (0, react_1.useState)(false);
214
+ // Track previous completion state
215
+ const prevIsComplete = (0, react_1.useRef)(isComplete);
216
+ // Detect when completion state changes
217
+ (0, react_1.useEffect)(() => {
218
+ if (prevIsComplete.current !== isComplete) {
219
+ // When tasks become completed
220
+ if (isComplete && !prevIsComplete.current) {
221
+ // Only animate if not already animated this session
222
+ if (!hasAnimated) {
223
+ setIsAnimatingCompletion(true);
224
+ setIsRemovingCheckmark(false);
225
+ markAsAnimated();
226
+ // Clear animation state after animation completes
227
+ setTimeout(() => {
228
+ setIsAnimatingCompletion(false);
229
+ }, 400); // Match animation duration
230
+ }
231
+ }
232
+ // When tasks are uncompleted (undo)
233
+ if (!isComplete && prevIsComplete.current) {
234
+ setIsRemovingCheckmark(true);
235
+ setIsAnimatingCompletion(false);
236
+ setTimeout(() => {
237
+ setIsRemovingCheckmark(false);
238
+ }, 400);
239
+ }
240
+ prevIsComplete.current = isComplete;
241
+ }
242
+ }, [isComplete, hasAnimated, markAsAnimated]);
243
+ const { collapsed, setCollapsed } = (0, theme_common_1.useCollapsible)({
244
+ // Active categories are always initialized as expanded. The default
245
+ // (`item.collapsed`) is only used for non-active categories.
246
+ initialState: () => {
247
+ if (!collapsible) {
248
+ return false;
249
+ }
250
+ return isActive ? false : item.collapsed;
251
+ },
252
+ });
253
+ const { expandedItem, setExpandedItem } = (0, client_1.useDocSidebarItemsExpandedState)();
254
+ // Use this instead of `setCollapsed`, because it is also reactive
255
+ const updateCollapsed = (toCollapsed = !collapsed) => {
256
+ setExpandedItem(toCollapsed ? null : index);
257
+ setCollapsed(toCollapsed);
258
+ };
259
+ useAutoExpandActiveCategory({
260
+ isActive,
261
+ collapsed,
262
+ updateCollapsed,
263
+ activePath,
264
+ });
265
+ (0, react_1.useEffect)(() => {
266
+ if (collapsible &&
267
+ expandedItem != null &&
268
+ expandedItem !== index &&
269
+ autoCollapseCategories) {
270
+ setCollapsed(true);
271
+ }
272
+ }, [collapsible, expandedItem, index, setCollapsed, autoCollapseCategories]);
273
+ const handleItemClick = (e) => {
274
+ onItemClick?.(item);
275
+ if (collapsible) {
276
+ if (href) {
277
+ // When already on the category's page, we collapse it
278
+ // We don't use "isActive" because it would collapse the
279
+ // category even when we browse a children element
280
+ // See https://github.com/facebook/docusaurus/issues/11213
281
+ if (isCurrentPage) {
282
+ e.preventDefault();
283
+ updateCollapsed();
284
+ }
285
+ else {
286
+ // When navigating to a new category, we always expand
287
+ // see https://github.com/facebook/docusaurus/issues/10854#issuecomment-2609616182
288
+ updateCollapsed(false);
289
+ }
290
+ }
291
+ else {
292
+ e.preventDefault();
293
+ updateCollapsed();
294
+ }
295
+ }
296
+ };
297
+ return (react_1.default.createElement("li", { className: (0, clsx_1.default)(theme_common_1.ThemeClassNames.docs.docSidebarItemCategory, theme_common_1.ThemeClassNames.docs.docSidebarItemCategoryLevel(level), 'menu__list-item', {
298
+ 'menu__list-item--collapsed': collapsed,
299
+ }, className) },
300
+ react_1.default.createElement("div", { className: (0, clsx_1.default)('menu__list-item-collapsible', {
301
+ 'menu__list-item-collapsible--active': isCurrentPage,
302
+ }) },
303
+ react_1.default.createElement(Link_1.default, { className: (0, clsx_1.default)(styles_module_css_1.default.categoryLink, 'menu__link', {
304
+ 'menu__link--sublist': collapsible,
305
+ 'menu__link--sublist-caret': !href && collapsible,
306
+ 'menu__link--active': isActive,
307
+ }), onClick: handleItemClick, "aria-current": isCurrentPage ? 'page' : undefined, role: collapsible && !href ? 'button' : undefined, "aria-expanded": collapsible && !href ? !collapsed : undefined, href: collapsible ? hrefWithSSRFallback ?? '#' : hrefWithSSRFallback, ...props },
308
+ react_1.default.createElement(CategoryLinkLabel, { label: label, taskStats: taskStats, isAnimatingCompletion: isAnimatingCompletion, isRemovingCheckmark: isRemovingCheckmark })),
309
+ href && collapsible && (react_1.default.createElement(CollapseButton, { collapsed: collapsed, categoryLabel: label, onClick: (e) => {
310
+ e.preventDefault();
311
+ updateCollapsed();
312
+ } }))),
313
+ react_1.default.createElement(theme_common_1.Collapsible, { lazy: true, as: "ul", className: "menu__list", collapsed: collapsed },
314
+ react_1.default.createElement(DocSidebarItems_1.default, { items: items, tabIndex: collapsed ? -1 : 0, onItemClick: onItemClick, activePath: activePath, level: level + 1 }))));
315
+ }
316
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/theme/DocSidebarItem/Category/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,187 @@
1
+ .categoryLink {
2
+ overflow: hidden;
3
+ }
4
+
5
+ :global(.menu__link--sublist-caret)::after {
6
+ margin-left: auto;
7
+ flex-shrink: 0;
8
+ }
9
+
10
+ .categoryLinkLabel {
11
+ flex: 1;
12
+ overflow: hidden;
13
+ display: -webkit-box;
14
+ line-clamp: 2;
15
+ -webkit-box-orient: vertical;
16
+ -webkit-line-clamp: 2;
17
+ }
18
+
19
+ /* Task progress badge styles for categories */
20
+ .categoryWithTasks {
21
+ display: flex;
22
+ align-items: center;
23
+ gap: 0.5rem;
24
+ flex: 1;
25
+ min-width: 0;
26
+ }
27
+
28
+ .categoryContent {
29
+ flex: 1;
30
+ min-width: 0;
31
+ }
32
+
33
+ .categoryBadge {
34
+ padding: 0.25rem 0.5rem;
35
+ border-radius: 4px;
36
+ font-weight: 700;
37
+ font-size: 0.75rem;
38
+ text-align: center;
39
+ white-space: nowrap;
40
+ min-width: 35px;
41
+ flex-shrink: 0;
42
+ transition: background-color 0.2s ease, color 0.2s ease;
43
+ position: relative;
44
+ display: flex;
45
+ align-items: center;
46
+ justify-content: center;
47
+ height: 25px;
48
+ }
49
+
50
+ .categoryBadgeAnimating {
51
+ animation: categoryBadgePulse 0.4s ease-out;
52
+ }
53
+
54
+ /* Badge number container */
55
+ .categoryBadgeNumber {
56
+ position: absolute;
57
+ display: flex;
58
+ align-items: center;
59
+ justify-content: center;
60
+ opacity: 0;
61
+ transition: opacity 0.2s ease;
62
+ }
63
+
64
+ .categoryBadgeNumber.categoryBadgeNumberVisible {
65
+ opacity: 1;
66
+ }
67
+
68
+ .categoryBadgeNumber.categoryBadgeNumberRemoving {
69
+ animation: categoryNumberFadeOut 0.2s ease-out forwards;
70
+ }
71
+
72
+ /* Badge checkmark container */
73
+ .categoryBadgeCheckmark {
74
+ position: absolute;
75
+ display: flex;
76
+ align-items: center;
77
+ justify-content: center;
78
+ opacity: 0;
79
+ }
80
+
81
+ .categoryBadgeCheckmark.categoryBadgeCheckmarkVisible {
82
+ opacity: 1;
83
+ }
84
+
85
+ .categoryBadgeCheckmark.categoryBadgeCheckmarkAnimating {
86
+ animation: categoryCheckmarkFadeIn 0.2s ease-out 0.2s forwards;
87
+ }
88
+
89
+ .categoryBadgeCheckmark.categoryBadgeCheckmarkRemoving {
90
+ animation: categoryCheckmarkFadeOut 0.2s ease-out forwards;
91
+ }
92
+
93
+ /* Add spacing only for sub-categories with ::after chevron */
94
+ :global(.menu__link--sublist-caret) .categoryBadge {
95
+ margin-right: 15px;
96
+ }
97
+
98
+ .categoryBadgeIncomplete {
99
+ background-color: var(--task-badge-bg, var(--ifm-color-primary));
100
+ color: var(--task-badge-color, var(--ifm-color-primary-contrast-background));
101
+ }
102
+
103
+ .categoryBadgeComplete {
104
+ background-color: var(--task-badge-bg, var(--ifm-color-success));
105
+ color: var(--task-badge-color, var(--ifm-color-success-contrast-background));
106
+ }
107
+
108
+ /* Dark mode support via CSS custom properties */
109
+ [data-theme="dark"] .categoryBadgeIncomplete {
110
+ background-color: var(
111
+ --task-badge-bg-dark,
112
+ var(--task-badge-bg, var(--ifm-color-primary))
113
+ );
114
+ color: var(
115
+ --task-badge-color-dark,
116
+ var(--task-badge-color, var(--ifm-color-primary-contrast-background))
117
+ );
118
+ }
119
+
120
+ [data-theme="dark"] .categoryBadgeComplete {
121
+ background-color: var(
122
+ --task-badge-bg-dark,
123
+ var(--task-badge-bg, var(--ifm-color-success))
124
+ );
125
+ color: var(
126
+ --task-badge-color-dark,
127
+ var(--task-badge-color, var(--ifm-color-success-contrast-background))
128
+ );
129
+ }
130
+
131
+ /* Keyframe animations */
132
+ @keyframes categoryBadgePulse {
133
+ 0% {
134
+ box-shadow: 0 0 0 0 var(--ifm-color-success);
135
+ }
136
+
137
+ 50% {
138
+ box-shadow: 0 0 0 4px rgba(var(--ifm-color-success-rgb, 0, 200, 100), 0.4);
139
+ }
140
+
141
+ 100% {
142
+ box-shadow: 0 0 0 0 rgba(var(--ifm-color-success-rgb, 0, 200, 100), 0);
143
+ }
144
+ }
145
+
146
+ @keyframes categoryNumberFadeOut {
147
+ 0% {
148
+ opacity: 1;
149
+ }
150
+
151
+ 100% {
152
+ opacity: 0;
153
+ }
154
+ }
155
+
156
+ @keyframes categoryCheckmarkFadeIn {
157
+ 0% {
158
+ opacity: 0;
159
+ }
160
+
161
+ 100% {
162
+ opacity: 1;
163
+ }
164
+ }
165
+
166
+ @keyframes categoryCheckmarkFadeOut {
167
+ 0% {
168
+ opacity: 1;
169
+ }
170
+
171
+ 100% {
172
+ opacity: 0;
173
+ }
174
+ }
175
+
176
+ /* Responsive adjustments */
177
+ @media (max-width: 768px) {
178
+ .categoryWithTasks {
179
+ gap: 0.375rem;
180
+ }
181
+
182
+ .categoryBadge {
183
+ padding: 0.2rem 0.4rem;
184
+ font-size: 0.7rem;
185
+ min-width: 30px;
186
+ }
187
+ }
@@ -0,0 +1,4 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { Props } from '@theme/DocSidebarItem/Html';
3
+ export default function DocSidebarItemHtml({ item, level, index, }: Props): ReactNode;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/theme/DocSidebarItem/Html/index.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAG5C,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,4BAA4B,CAAC;AAItD,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EACzC,IAAI,EACJ,KAAK,EACL,KAAK,GACN,EAAE,KAAK,GAAG,SAAS,CAenB"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.default = DocSidebarItemHtml;
7
+ const react_1 = __importDefault(require("react"));
8
+ const clsx_1 = __importDefault(require("clsx"));
9
+ const theme_common_1 = require("@docusaurus/theme-common");
10
+ const styles_module_css_1 = __importDefault(require("./styles.module.css"));
11
+ function DocSidebarItemHtml({ item, level, index, }) {
12
+ const { value, defaultStyle, className } = item;
13
+ return (react_1.default.createElement("li", { className: (0, clsx_1.default)(theme_common_1.ThemeClassNames.docs.docSidebarItemLink, theme_common_1.ThemeClassNames.docs.docSidebarItemLinkLevel(level), defaultStyle && [styles_module_css_1.default.menuHtmlItem, 'menu__list-item'], className), key: index,
14
+ // eslint-disable-next-line react/no-danger
15
+ dangerouslySetInnerHTML: { __html: value } }));
16
+ }
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/theme/DocSidebarItem/Html/index.tsx"],"names":[],"mappings":";;;;;AAOA,qCAmBC;AA1BD,kDAA4C;AAC5C,gDAAwB;AACxB,2DAAyD;AAGzD,4EAAyC;AAEzC,SAAwB,kBAAkB,CAAC,EACzC,IAAI,EACJ,KAAK,EACL,KAAK,GACC;IACN,MAAM,EAAC,KAAK,EAAE,YAAY,EAAE,SAAS,EAAC,GAAG,IAAI,CAAC;IAC9C,OAAO,CACL,sCACE,SAAS,EAAE,IAAA,cAAI,EACb,8BAAe,CAAC,IAAI,CAAC,kBAAkB,EACvC,8BAAe,CAAC,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,EACnD,YAAY,IAAI,CAAC,2BAAM,CAAC,YAAY,EAAE,iBAAiB,CAAC,EACxD,SAAS,CACV,EACD,GAAG,EAAE,KAAK;QACV,2CAA2C;QAC3C,uBAAuB,EAAE,EAAC,MAAM,EAAE,KAAK,EAAC,GACxC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ @media (min-width: 997px) {
2
+ .menuHtmlItem {
3
+ padding: var(--ifm-menu-link-padding-vertical)
4
+ var(--ifm-menu-link-padding-horizontal);
5
+ }
6
+ }
@@ -0,0 +1,6 @@
1
+ import React, { type ReactNode } from 'react';
2
+ import type { Props } from '@theme/DocSidebarItem/Link';
3
+ declare function DocSidebarItemLink({ item, onItemClick, activePath, level, index, ...props }: Props): ReactNode;
4
+ declare const _default: React.MemoExoticComponent<typeof DocSidebarItemLink>;
5
+ export default _default;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/theme/DocSidebarItem/Link/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAC,KAAK,SAAS,EAA8B,MAAM,OAAO,CAAC;AAOzE,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,4BAA4B,CAAC;AAqBtD,iBAAS,kBAAkB,CAAC,EAC1B,IAAI,EACJ,WAAW,EACX,UAAU,EACV,KAAK,EACL,KAAK,EACL,GAAG,KAAK,EACT,EAAE,KAAK,GAAG,SAAS,CAuKnB;;AAGD,wBAA8C"}