@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,149 @@
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
+ const react_1 = __importStar(require("react"));
40
+ const clsx_1 = __importDefault(require("clsx"));
41
+ const theme_common_1 = require("@docusaurus/theme-common");
42
+ const client_1 = require("@docusaurus/plugin-content-docs/client");
43
+ const Link_1 = __importDefault(require("@docusaurus/Link"));
44
+ const isInternalUrl_1 = __importDefault(require("@docusaurus/isInternalUrl"));
45
+ const ExternalLink_1 = __importDefault(require("@theme/Icon/ExternalLink"));
46
+ const useDocTaskStats_1 = require("../../../utils/useDocTaskStats");
47
+ const useTaskBadgeAnimation_1 = require("../../../utils/useTaskBadgeAnimation");
48
+ const usePluginId_1 = require("../../../utils/usePluginId");
49
+ const icons_1 = require("../../../utils/icons");
50
+ const badgeStyles_1 = require("../../../utils/badgeStyles");
51
+ const styles_module_css_1 = __importDefault(require("./styles.module.css"));
52
+ function LinkLabel({ label }) {
53
+ return (react_1.default.createElement("span", { title: label, className: styles_module_css_1.default.linkLabel }, label));
54
+ }
55
+ function DocSidebarItemLink({ item, onItemClick, activePath, level, index, ...props }) {
56
+ const { href, label, className, autoAddBaseUrl, docId } = item;
57
+ const isActive = (0, client_1.isActiveSidebarItem)(item, activePath);
58
+ const isInternalLink = (0, isInternalUrl_1.default)(href);
59
+ // Get the correct plugin ID
60
+ const pluginId = (0, usePluginId_1.usePluginId)();
61
+ // Get task statistics for this doc
62
+ const stats = (0, useDocTaskStats_1.useDocTaskStats)(docId, pluginId);
63
+ const hasTasks = stats?.hasAnyTasks || false;
64
+ const isComplete = stats?.isComplete || false;
65
+ const badgeConfig = stats?.badgeConfig;
66
+ // Check if badge should be hidden
67
+ const hideBadge = (0, badgeStyles_1.shouldHideBadge)(badgeConfig);
68
+ const disableIcon = (0, badgeStyles_1.shouldDisableIcon)(badgeConfig);
69
+ // Animation tracking
70
+ const { hasAnimated, markAsAnimated } = (0, useTaskBadgeAnimation_1.useTaskBadgeAnimation)(pluginId, docId);
71
+ // Local state for animations
72
+ const [isAnimatingCompletion, setIsAnimatingCompletion] = (0, react_1.useState)(false);
73
+ const [isRemovingCheckmark, setIsRemovingCheckmark] = (0, react_1.useState)(false);
74
+ // Track previous completion state
75
+ const prevIsComplete = (0, react_1.useRef)(isComplete);
76
+ // Detect when completion state changes
77
+ (0, react_1.useEffect)(() => {
78
+ if (prevIsComplete.current !== isComplete) {
79
+ // When tasks become completed
80
+ if (isComplete && !prevIsComplete.current) {
81
+ // Only animate if not already animated this session
82
+ if (!hasAnimated) {
83
+ setIsAnimatingCompletion(true);
84
+ setIsRemovingCheckmark(false);
85
+ markAsAnimated();
86
+ // Clear animation state after animation completes
87
+ setTimeout(() => {
88
+ setIsAnimatingCompletion(false);
89
+ }, 400); // Match animation duration
90
+ }
91
+ }
92
+ // When tasks are uncompleted (undo)
93
+ if (!isComplete && prevIsComplete.current) {
94
+ setIsRemovingCheckmark(true);
95
+ setIsAnimatingCompletion(false);
96
+ setTimeout(() => {
97
+ setIsRemovingCheckmark(false);
98
+ }, 400);
99
+ }
100
+ prevIsComplete.current = isComplete;
101
+ }
102
+ }, [isComplete, hasAnimated, markAsAnimated]);
103
+ // If no tasks or badge is hidden, render standard link
104
+ if (!hasTasks || !stats || hideBadge) {
105
+ return (react_1.default.createElement("li", { className: (0, clsx_1.default)(theme_common_1.ThemeClassNames.docs.docSidebarItemLink, theme_common_1.ThemeClassNames.docs.docSidebarItemLinkLevel(level), 'menu__list-item', className), key: label },
106
+ react_1.default.createElement(Link_1.default, { className: (0, clsx_1.default)('menu__link', !isInternalLink && styles_module_css_1.default.menuExternalLink, {
107
+ 'menu__link--active': isActive,
108
+ }), autoAddBaseUrl: autoAddBaseUrl, "aria-current": isActive ? 'page' : undefined, to: href, ...(isInternalLink && {
109
+ onClick: onItemClick ? () => onItemClick(item) : undefined,
110
+ }), ...props },
111
+ react_1.default.createElement(LinkLabel, { label: label }),
112
+ !isInternalLink && react_1.default.createElement(ExternalLink_1.default, null))));
113
+ }
114
+ // Render link with task progress
115
+ const badgeClass = isComplete ? styles_module_css_1.default.taskBadgeComplete : styles_module_css_1.default.taskBadgeIncomplete;
116
+ const badgeStyles = (0, badgeStyles_1.getBadgeStyles)(badgeConfig, isComplete);
117
+ // Show icon only if complete AND icon not disabled
118
+ const showIcon = isComplete && !disableIcon;
119
+ // Determine checkmark visibility classes
120
+ const checkmarkClasses = (0, clsx_1.default)(styles_module_css_1.default.taskBadgeCheckmark, {
121
+ [styles_module_css_1.default.taskBadgeCheckmarkVisible]: showIcon && !isAnimatingCompletion && !isRemovingCheckmark,
122
+ [styles_module_css_1.default.taskBadgeCheckmarkAnimating]: showIcon && isAnimatingCompletion,
123
+ [styles_module_css_1.default.taskBadgeCheckmarkRemoving]: isRemovingCheckmark,
124
+ });
125
+ // Determine number visibility classes
126
+ const numberClasses = (0, clsx_1.default)(styles_module_css_1.default.taskBadgeNumber, {
127
+ [styles_module_css_1.default.taskBadgeNumberVisible]: !showIcon || isRemovingCheckmark,
128
+ [styles_module_css_1.default.taskBadgeNumberRemoving]: showIcon && isAnimatingCompletion,
129
+ });
130
+ return (react_1.default.createElement("li", { className: (0, clsx_1.default)(theme_common_1.ThemeClassNames.docs.docSidebarItemLink, theme_common_1.ThemeClassNames.docs.docSidebarItemLinkLevel(level), 'menu__list-item', className), key: label },
131
+ react_1.default.createElement(Link_1.default, { className: (0, clsx_1.default)('menu__link', styles_module_css_1.default.linkWithTasks, !isInternalLink && styles_module_css_1.default.menuExternalLink, {
132
+ 'menu__link--active': isActive,
133
+ }), autoAddBaseUrl: autoAddBaseUrl, "aria-current": isActive ? 'page' : undefined, to: href, ...(isInternalLink && {
134
+ onClick: onItemClick ? () => onItemClick(item) : undefined,
135
+ }), ...props },
136
+ react_1.default.createElement("div", { className: styles_module_css_1.default.linkContent },
137
+ stats.hasSectionName && (react_1.default.createElement("div", { className: styles_module_css_1.default.sectionName }, stats.sectionName)),
138
+ react_1.default.createElement(LinkLabel, { label: label })),
139
+ react_1.default.createElement("div", { className: (0, clsx_1.default)(styles_module_css_1.default.taskBadge, badgeClass, isAnimatingCompletion && styles_module_css_1.default.taskBadgeAnimating), style: badgeStyles },
140
+ react_1.default.createElement("span", { className: numberClasses },
141
+ stats.completedTasks,
142
+ "/",
143
+ stats.totalTasks),
144
+ react_1.default.createElement("span", { className: checkmarkClasses }, icons_1.CHECKMARK_ICON)),
145
+ !isInternalLink && react_1.default.createElement(ExternalLink_1.default, null))));
146
+ }
147
+ // Memoize to prevent unnecessary re-renders
148
+ exports.default = react_1.default.memo(DocSidebarItemLink);
149
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/theme/DocSidebarItem/Link/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,197 @@
1
+ .menuExternalLink {
2
+ align-items: center;
3
+ }
4
+
5
+ .linkLabel {
6
+ overflow: hidden;
7
+ display: -webkit-box;
8
+ line-clamp: 2;
9
+ -webkit-box-orient: vertical;
10
+ -webkit-line-clamp: 2;
11
+ }
12
+
13
+ /* Task progress badge styles */
14
+ .linkWithTasks {
15
+ display: grid;
16
+ grid-template-columns: 1fr auto;
17
+ grid-template-areas: "content badge";
18
+ align-items: center;
19
+ gap: 0.5rem;
20
+ padding: var(--ifm-menu-link-padding-vertical)
21
+ var(--ifm-menu-link-padding-horizontal);
22
+ }
23
+
24
+ .linkContent {
25
+ grid-area: content;
26
+ display: flex;
27
+ flex-direction: column;
28
+ gap: 0.125rem;
29
+ min-width: 0;
30
+ }
31
+
32
+ .sectionName {
33
+ font-weight: 700;
34
+ font-size: 0.75rem;
35
+ color: var(--ifm-color-emphasis-700);
36
+ line-height: 1.2;
37
+ }
38
+
39
+ .taskBadge {
40
+ grid-area: badge;
41
+ padding: 0.25rem 0.5rem;
42
+ border-radius: 4px;
43
+ font-weight: 700;
44
+ font-size: 0.75rem;
45
+ text-align: center;
46
+ white-space: nowrap;
47
+ min-width: 35px;
48
+ transition: background-color 0.2s ease, color 0.2s ease;
49
+ position: relative;
50
+ display: flex;
51
+ align-items: center;
52
+ justify-content: center;
53
+ height: 25px;
54
+ }
55
+
56
+ .taskBadgeAnimating {
57
+ animation: badgePulse 0.4s ease-out;
58
+ }
59
+
60
+ /* Badge number container */
61
+ .taskBadgeNumber {
62
+ position: absolute;
63
+ display: flex;
64
+ align-items: center;
65
+ justify-content: center;
66
+ opacity: 0;
67
+ transition: opacity 0.2s ease;
68
+ }
69
+
70
+ .taskBadgeNumber.taskBadgeNumberVisible {
71
+ opacity: 1;
72
+ }
73
+
74
+ .taskBadgeNumber.taskBadgeNumberRemoving {
75
+ animation: numberFadeOut 0.2s ease-out forwards;
76
+ }
77
+
78
+ /* Badge checkmark container */
79
+ .taskBadgeCheckmark {
80
+ position: absolute;
81
+ display: flex;
82
+ align-items: center;
83
+ justify-content: center;
84
+ opacity: 0;
85
+ }
86
+
87
+ .taskBadgeCheckmark.taskBadgeCheckmarkVisible {
88
+ opacity: 1;
89
+ }
90
+
91
+ .taskBadgeCheckmark.taskBadgeCheckmarkAnimating {
92
+ animation: checkmarkFadeIn 0.2s ease-out 0.2s forwards;
93
+ }
94
+
95
+ .taskBadgeCheckmark.taskBadgeCheckmarkRemoving {
96
+ animation: checkmarkFadeOut 0.2s ease-out forwards;
97
+ }
98
+
99
+ .taskBadgeIncomplete {
100
+ background-color: var(--task-badge-bg, var(--ifm-color-primary));
101
+ color: var(--task-badge-color, var(--ifm-color-primary-contrast-background));
102
+ }
103
+
104
+ .taskBadgeComplete {
105
+ background-color: var(--task-badge-bg, var(--ifm-color-success));
106
+ color: var(--task-badge-color, var(--ifm-color-success-contrast-background));
107
+ }
108
+
109
+ /* Dark mode support via CSS custom properties */
110
+ [data-theme="dark"] .taskBadgeIncomplete {
111
+ background-color: var(
112
+ --task-badge-bg-dark,
113
+ var(--task-badge-bg, var(--ifm-color-primary))
114
+ );
115
+ color: var(
116
+ --task-badge-color-dark,
117
+ var(--task-badge-color, var(--ifm-color-primary-contrast-background))
118
+ );
119
+ }
120
+
121
+ [data-theme="dark"] .taskBadgeComplete {
122
+ background-color: var(
123
+ --task-badge-bg-dark,
124
+ var(--task-badge-bg, var(--ifm-color-success))
125
+ );
126
+ color: var(
127
+ --task-badge-color-dark,
128
+ var(--task-badge-color, var(--ifm-color-success-contrast-background))
129
+ );
130
+ }
131
+
132
+ /* Dark mode adjustments */
133
+ [data-theme="dark"] .sectionName {
134
+ color: var(--ifm-color-emphasis-600);
135
+ }
136
+
137
+ /* Keyframe animations */
138
+ @keyframes badgePulse {
139
+ 0% {
140
+ box-shadow: 0 0 0 0 var(--ifm-color-success);
141
+ }
142
+
143
+ 50% {
144
+ box-shadow: 0 0 0 4px rgba(var(--ifm-color-success-rgb, 0, 200, 100), 0.4);
145
+ }
146
+
147
+ 100% {
148
+ box-shadow: 0 0 0 0 rgba(var(--ifm-color-success-rgb, 0, 200, 100), 0);
149
+ }
150
+ }
151
+
152
+ @keyframes numberFadeOut {
153
+ 0% {
154
+ opacity: 1;
155
+ }
156
+
157
+ 100% {
158
+ opacity: 0;
159
+ }
160
+ }
161
+
162
+ @keyframes checkmarkFadeIn {
163
+ 0% {
164
+ opacity: 0;
165
+ }
166
+
167
+ 100% {
168
+ opacity: 1;
169
+ }
170
+ }
171
+
172
+ @keyframes checkmarkFadeOut {
173
+ 0% {
174
+ opacity: 1;
175
+ }
176
+
177
+ 100% {
178
+ opacity: 0;
179
+ }
180
+ }
181
+
182
+ /* Responsive adjustments */
183
+ @media (max-width: 768px) {
184
+ .linkWithTasks {
185
+ gap: 0.375rem;
186
+ }
187
+
188
+ .sectionName {
189
+ font-size: 0.7rem;
190
+ }
191
+
192
+ .taskBadge {
193
+ padding: 0.2rem 0.4rem;
194
+ font-size: 0.7rem;
195
+ min-width: 30px;
196
+ }
197
+ }
@@ -0,0 +1,4 @@
1
+ import { type ReactNode } from 'react';
2
+ import type { Props } from '@theme/DocSidebarItem';
3
+ export default function DocSidebarItem({ item, ...props }: Props): ReactNode;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/theme/DocSidebarItem/index.tsx"],"names":[],"mappings":"AAAA,OAAc,EAAC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAI5C,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,uBAAuB,CAAC;AAEjD,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EAAC,IAAI,EAAE,GAAG,KAAK,EAAC,EAAE,KAAK,GAAG,SAAS,CAUzE"}
@@ -0,0 +1,22 @@
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 = DocSidebarItem;
7
+ const react_1 = __importDefault(require("react"));
8
+ const Category_1 = __importDefault(require("@theme/DocSidebarItem/Category"));
9
+ const Link_1 = __importDefault(require("@theme/DocSidebarItem/Link"));
10
+ const Html_1 = __importDefault(require("@theme/DocSidebarItem/Html"));
11
+ function DocSidebarItem({ item, ...props }) {
12
+ switch (item.type) {
13
+ case 'category':
14
+ return react_1.default.createElement(Category_1.default, { item: item, ...props });
15
+ case 'html':
16
+ return react_1.default.createElement(Html_1.default, { item: item, ...props });
17
+ case 'link':
18
+ default:
19
+ return react_1.default.createElement(Link_1.default, { item: item, ...props });
20
+ }
21
+ }
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/theme/DocSidebarItem/index.tsx"],"names":[],"mappings":";;;;;AAMA,iCAUC;AAhBD,kDAA4C;AAC5C,8EAAoE;AACpE,sEAA4D;AAC5D,sEAA4D;AAG5D,SAAwB,cAAc,CAAC,EAAC,IAAI,EAAE,GAAG,KAAK,EAAQ;IAC5D,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,UAAU;YACb,OAAO,8BAAC,kBAAsB,IAAC,IAAI,EAAE,IAAI,KAAM,KAAK,GAAI,CAAC;QAC3D,KAAK,MAAM;YACT,OAAO,8BAAC,cAAkB,IAAC,IAAI,EAAE,IAAI,KAAM,KAAK,GAAI,CAAC;QACvD,KAAK,MAAM,CAAC;QACZ;YACE,OAAO,8BAAC,cAAkB,IAAC,IAAI,EAAE,IAAI,KAAM,KAAK,GAAI,CAAC;IACzD,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ import React, { type ReactNode } from 'react';
2
+ import type { Props } from '@theme/DocSidebarItems';
3
+ declare function DocSidebarItems({ items, ...props }: Props): ReactNode;
4
+ declare const _default: React.MemoExoticComponent<typeof DocSidebarItems>;
5
+ export default _default;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/theme/DocSidebarItems/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAO,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAOlD,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,wBAAwB,CAAC;AAElD,iBAAS,eAAe,CAAC,EAAC,KAAK,EAAE,GAAG,KAAK,EAAC,EAAE,KAAK,GAAG,SAAS,CAS5D;;AAGD,wBAAqC"}
@@ -0,0 +1,48 @@
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
+ const react_1 = __importStar(require("react"));
40
+ const client_1 = require("@docusaurus/plugin-content-docs/client");
41
+ const DocSidebarItem_1 = __importDefault(require("@theme/DocSidebarItem"));
42
+ function DocSidebarItems({ items, ...props }) {
43
+ const visibleItems = (0, client_1.useVisibleSidebarItems)(items, props.activePath);
44
+ return (react_1.default.createElement(client_1.DocSidebarItemsExpandedStateProvider, null, visibleItems.map((item, index) => (react_1.default.createElement(DocSidebarItem_1.default, { key: index, item: item, index: index, ...props })))));
45
+ }
46
+ // Optimize sidebar at each "level"
47
+ exports.default = (0, react_1.memo)(DocSidebarItems);
48
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/theme/DocSidebarItems/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAkD;AAClD,mEAGgD;AAChD,2EAAmD;AAInD,SAAS,eAAe,CAAC,EAAC,KAAK,EAAE,GAAG,KAAK,EAAQ;IAC/C,MAAM,YAAY,GAAG,IAAA,+BAAsB,EAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;IACrE,OAAO,CACL,8BAAC,6CAAoC,QAClC,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CACjC,8BAAC,wBAAc,IAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,KAAM,KAAK,GAAI,CACpE,CAAC,CACmC,CACxC,CAAC;AACJ,CAAC;AAED,mCAAmC;AACnC,kBAAe,IAAA,YAAI,EAAC,eAAe,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * DocTaskCounterProvider Component
3
+ * Manages task auto-numbering within a doc page
4
+ */
5
+ import { type ReactNode, type ReactElement } from 'react';
6
+ export interface DocTaskCounterProviderProps {
7
+ children: ReactNode;
8
+ }
9
+ export declare function DocTaskCounterProvider({ children }: DocTaskCounterProviderProps): ReactElement;
10
+ /**
11
+ * Hook to get the next task number for auto-numbering
12
+ * Must be called during render, not in effects or callbacks
13
+ */
14
+ export declare function useTaskNumber(): number;
15
+ /**
16
+ * Hook to get the next example number for task-example auto-numbering
17
+ * Must be called during render, not in effects or callbacks
18
+ */
19
+ export declare function useTaskExampleNumber(): number;
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/theme/DocTaskCounterProvider/index.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAc,EACZ,KAAK,SAAS,EACd,KAAK,YAAY,EAKlB,MAAM,OAAO,CAAC;AAMf,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,sBAAsB,CAAC,EAAE,QAAQ,EAAE,EAAE,2BAA2B,GAAG,YAAY,CAoC9F;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAWtC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAW7C"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ /**
3
+ * DocTaskCounterProvider Component
4
+ * Manages task auto-numbering within a doc page
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.DocTaskCounterProvider = DocTaskCounterProvider;
41
+ exports.useTaskNumber = useTaskNumber;
42
+ exports.useTaskExampleNumber = useTaskExampleNumber;
43
+ const react_1 = __importStar(require("react"));
44
+ const router_1 = require("@docusaurus/router");
45
+ const DocTaskCounterContext = (0, react_1.createContext)(undefined);
46
+ function DocTaskCounterProvider({ children }) {
47
+ const counterRef = (0, react_1.useRef)(0);
48
+ const exampleCounterRef = (0, react_1.useRef)(0);
49
+ const location = (0, router_1.useLocation)();
50
+ const getNextTaskNumber = (0, react_1.useCallback)(() => {
51
+ counterRef.current += 1;
52
+ return counterRef.current;
53
+ }, []);
54
+ const getNextExampleNumber = (0, react_1.useCallback)(() => {
55
+ exampleCounterRef.current += 1;
56
+ return exampleCounterRef.current;
57
+ }, []);
58
+ const resetCounter = (0, react_1.useCallback)(() => {
59
+ counterRef.current = 0;
60
+ exampleCounterRef.current = 0;
61
+ }, []);
62
+ const contextValue = {
63
+ getNextTaskNumber,
64
+ getNextExampleNumber,
65
+ resetCounter,
66
+ };
67
+ // Reset counter when location changes (page navigation)
68
+ react_1.default.useEffect(() => {
69
+ resetCounter();
70
+ }, [location.pathname, resetCounter]);
71
+ return (react_1.default.createElement(DocTaskCounterContext.Provider, { value: contextValue }, children));
72
+ }
73
+ /**
74
+ * Hook to get the next task number for auto-numbering
75
+ * Must be called during render, not in effects or callbacks
76
+ */
77
+ function useTaskNumber() {
78
+ const context = (0, react_1.useContext)(DocTaskCounterContext);
79
+ if (!context) {
80
+ throw new Error('useTaskNumber must be used within a DocTaskCounterProvider');
81
+ }
82
+ // Get task number during render using useRef to maintain stability
83
+ const taskNumberRef = (0, react_1.useRef)(null);
84
+ if (taskNumberRef.current === null) {
85
+ taskNumberRef.current = context.getNextTaskNumber();
86
+ }
87
+ return taskNumberRef.current;
88
+ }
89
+ /**
90
+ * Hook to get the next example number for task-example auto-numbering
91
+ * Must be called during render, not in effects or callbacks
92
+ */
93
+ function useTaskExampleNumber() {
94
+ const context = (0, react_1.useContext)(DocTaskCounterContext);
95
+ if (!context) {
96
+ throw new Error('useTaskExampleNumber must be used within a DocTaskCounterProvider');
97
+ }
98
+ // Get example number during render using useRef to maintain stability
99
+ const exampleNumberRef = (0, react_1.useRef)(null);
100
+ if (exampleNumberRef.current === null) {
101
+ exampleNumberRef.current = context.getNextExampleNumber();
102
+ }
103
+ return exampleNumberRef.current;
104
+ }
105
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/theme/DocTaskCounterProvider/index.tsx"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBH,wDAoCC;AAMD,sCAWC;AAMD,oDAWC;AAvFD,+CAOe;AACf,+CAAiD;AAGjD,MAAM,qBAAqB,GAAG,IAAA,qBAAa,EAAyC,SAAS,CAAC,CAAC;AAM/F,SAAgB,sBAAsB,CAAC,EAAE,QAAQ,EAA+B;IAC9E,MAAM,UAAU,GAAG,IAAA,cAAM,EAAS,CAAC,CAAC,CAAC;IACrC,MAAM,iBAAiB,GAAG,IAAA,cAAM,EAAS,CAAC,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAA,oBAAW,GAAE,CAAC;IAE/B,MAAM,iBAAiB,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QACzC,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC;QACxB,OAAO,UAAU,CAAC,OAAO,CAAC;IAC5B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,oBAAoB,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QAC5C,iBAAiB,CAAC,OAAO,IAAI,CAAC,CAAC;QAC/B,OAAO,iBAAiB,CAAC,OAAO,CAAC;IACnC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QACpC,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC;QACvB,iBAAiB,CAAC,OAAO,GAAG,CAAC,CAAC;IAChC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAQ;QACxB,iBAAiB;QACjB,oBAAoB;QACpB,YAAY;KACb,CAAC;IAEF,wDAAwD;IACxD,eAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,YAAY,EAAE,CAAC;IACjB,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC;IAEtC,OAAO,CACL,8BAAC,qBAAqB,CAAC,QAAQ,IAAC,KAAK,EAAE,YAAY,IAChD,QAAQ,CACsB,CAClC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,qBAAqB,CAAC,CAAC;IAClD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;IACD,mEAAmE;IACnE,MAAM,aAAa,GAAG,IAAA,cAAM,EAAgB,IAAI,CAAC,CAAC;IAClD,IAAI,aAAa,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACnC,aAAa,CAAC,OAAO,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IACtD,CAAC;IACD,OAAO,aAAa,CAAC,OAAO,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,SAAgB,oBAAoB;IAClC,MAAM,OAAO,GAAG,IAAA,kBAAU,EAAC,qBAAqB,CAAQ,CAAC;IACzD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACvF,CAAC;IACD,sEAAsE;IACtE,MAAM,gBAAgB,GAAG,IAAA,cAAM,EAAgB,IAAI,CAAC,CAAC;IACrD,IAAI,gBAAgB,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACtC,gBAAgB,CAAC,OAAO,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAC5D,CAAC;IACD,OAAO,gBAAgB,CAAC,OAAiB,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * MDXComponents wrapper
3
+ * Makes Task components available in MDX
4
+ *
5
+ * NOTE: Users don't write <Task>, <Text>, <Hint>, <Solution> directly in MDX.
6
+ * Instead, they write directive syntax (:::task[Name]) which is transformed
7
+ * by our remark plugin into these JSX components during compilation.
8
+ *
9
+ * These components must still be exported here so they're available when
10
+ * the transformed JSX is rendered.
11
+ *
12
+ * TaskProgression, TaskProgressionOverview, and TaskPlaceholder ARE used directly by users.
13
+ *
14
+ * CRITICAL FIX: Import Code and Pre directly from theme-classic to avoid circular resolution
15
+ * when DocRoot uses direct imports (which breaks the @theme-original chain).
16
+ */
17
+ declare const _default: any;
18
+ export default _default;
19
+ //# sourceMappingURL=MDXComponents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MDXComponents.d.ts","sourceRoot":"","sources":["../../src/theme/MDXComponents.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;;AAiBH,wBAgBE"}