@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,123 @@
1
+ "use strict";
2
+ /**
3
+ * TaskProgressionOverview Component
4
+ * Displays all task progressions across all docs in the plugin
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
40
+ return (mod && mod.__esModule) ? mod : { "default": mod };
41
+ };
42
+ Object.defineProperty(exports, "__esModule", { value: true });
43
+ exports.default = TaskProgressionOverview;
44
+ const react_1 = __importStar(require("react"));
45
+ const Link_1 = __importDefault(require("@docusaurus/Link"));
46
+ const client_1 = require("@docusaurus/plugin-content-docs/client");
47
+ const clsx_1 = __importDefault(require("clsx"));
48
+ const TaskProvider_1 = require("../TaskProvider");
49
+ const useDocTaskStats_1 = require("../../utils/useDocTaskStats");
50
+ const usePluginId_1 = require("../../utils/usePluginId");
51
+ const styles_module_css_1 = __importDefault(require("./styles.module.css"));
52
+ /**
53
+ * Internal component to render a single doc's progression
54
+ */
55
+ function DocProgressionItem({ docId, pluginId }) {
56
+ const stats = (0, useDocTaskStats_1.useDocTaskStats)(docId, pluginId);
57
+ if (!stats) {
58
+ return null;
59
+ }
60
+ const isComplete = stats.isComplete;
61
+ const squareClass = isComplete ? styles_module_css_1.default.successSquare : styles_module_css_1.default.primarySquare;
62
+ return (react_1.default.createElement(Link_1.default, { to: stats.permalink, className: (0, clsx_1.default)(styles_module_css_1.default.progressionItem, styles_module_css_1.default.clickable) },
63
+ react_1.default.createElement("div", { className: styles_module_css_1.default.contentArea },
64
+ stats.hasSectionName && (react_1.default.createElement("div", { className: styles_module_css_1.default.sectionName }, stats.sectionName)),
65
+ react_1.default.createElement("div", { className: styles_module_css_1.default.title }, stats.title)),
66
+ react_1.default.createElement("div", { className: (0, clsx_1.default)(styles_module_css_1.default.progressSquare, squareClass) },
67
+ stats.completedTasks,
68
+ "/",
69
+ stats.totalTasks)));
70
+ }
71
+ function TaskProgressionOverview({ pluginId, }) {
72
+ const { metadata } = (0, client_1.useDoc)();
73
+ const { taskRegistry } = (0, TaskProvider_1.useTaskContext)();
74
+ // Get the correct plugin ID for this doc
75
+ const detectedPluginId = (0, usePluginId_1.usePluginId)();
76
+ // Auto-detect pluginId from current doc if not provided
77
+ const effectivePluginId = pluginId ?? detectedPluginId;
78
+ // Sort and filter docs from the registry
79
+ // IMPORTANT: Call useMemo BEFORE any early returns to comply with Rules of Hooks
80
+ const sortedDocs = (0, react_1.useMemo)(() => {
81
+ if (!taskRegistry) {
82
+ return [];
83
+ }
84
+ // Get all docs for this plugin
85
+ const docs = Object.entries(taskRegistry.docPages)
86
+ .filter(([key, doc]) => doc.pluginId === effectivePluginId && doc.totalTasks > 0)
87
+ .map(([_, doc]) => doc);
88
+ // Sort by: sidebarPosition -> sectionName -> id
89
+ return docs.sort((a, b) => {
90
+ // First: sidebarPosition (undefined sorts to the end)
91
+ if (a.sidebarPosition !== undefined && b.sidebarPosition !== undefined) {
92
+ if (a.sidebarPosition !== b.sidebarPosition) {
93
+ return a.sidebarPosition - b.sidebarPosition;
94
+ }
95
+ }
96
+ else if (a.sidebarPosition !== undefined) {
97
+ return -1; // a comes first
98
+ }
99
+ else if (b.sidebarPosition !== undefined) {
100
+ return 1; // b comes first
101
+ }
102
+ // Second: sectionName (alphabetical)
103
+ const sectionCompare = a.sectionName.localeCompare(b.sectionName);
104
+ if (sectionCompare !== 0) {
105
+ return sectionCompare;
106
+ }
107
+ // Third: id (alphabetical)
108
+ return a.id.localeCompare(b.id);
109
+ });
110
+ }, [taskRegistry, effectivePluginId]);
111
+ // Show loading state while registry is loading
112
+ if (!taskRegistry) {
113
+ return (react_1.default.createElement("div", { className: styles_module_css_1.default.overviewContainer },
114
+ react_1.default.createElement("div", { className: styles_module_css_1.default.loadingState }, "Loading task overview...")));
115
+ }
116
+ // If no docs with tasks, show a message
117
+ if (sortedDocs.length === 0) {
118
+ return (react_1.default.createElement("div", { className: styles_module_css_1.default.overviewContainer },
119
+ react_1.default.createElement("div", { className: styles_module_css_1.default.emptyState }, "No documents with tasks found.")));
120
+ }
121
+ return (react_1.default.createElement("div", { className: styles_module_css_1.default.overviewContainer }, sortedDocs.map((doc) => (react_1.default.createElement(DocProgressionItem, { key: `${doc.pluginId}/${doc.id}`, docId: doc.id, pluginId: doc.pluginId, sidebarPosition: doc.sidebarPosition })))));
122
+ }
123
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/theme/TaskProgressionOverview/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,159 @@
1
+ /**
2
+ * TaskProgressionOverview Styles
3
+ * Container for multiple progression items with vertical stacking
4
+ */
5
+
6
+ .overviewContainer {
7
+ display: flex;
8
+ flex-direction: column;
9
+ gap: 0.875rem;
10
+ padding: 0.5rem;
11
+ }
12
+
13
+ /* Individual progression item (same style as TaskProgression) */
14
+ .progressionItem {
15
+ display: grid;
16
+ grid-template-columns: 1fr auto;
17
+ grid-template-areas: "content progress";
18
+ align-items: center;
19
+ gap: 1rem;
20
+ padding: 0.875rem 1.125rem;
21
+ min-height: 70px;
22
+
23
+ /* Borderless with subtle shadow for float effect */
24
+ background-color: var(--ifm-card-background-color);
25
+ border-radius: 8px;
26
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
27
+
28
+ /* Smooth transitions */
29
+ transition: all 0.25s ease;
30
+
31
+ /* Remove link styling */
32
+ text-decoration: none;
33
+ color: inherit;
34
+ }
35
+
36
+ /* Clickable state - adds hover effect */
37
+ .progressionItem.clickable {
38
+ cursor: pointer;
39
+ }
40
+
41
+ .progressionItem.clickable:hover {
42
+ /* Pop effect on hover */
43
+ transform: translateY(-3px);
44
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
45
+ }
46
+
47
+ /* Content area - left side */
48
+ .contentArea {
49
+ grid-area: content;
50
+ display: flex;
51
+ flex-direction: column;
52
+ gap: 0.25rem;
53
+ min-width: 0; /* Allow text truncation if needed */
54
+ }
55
+
56
+ /* Section name styling (bold, smaller) */
57
+ .sectionName {
58
+ font-weight: 700;
59
+ font-size: 0.875rem;
60
+ color: var(--ifm-color-emphasis-800);
61
+ line-height: 1.3;
62
+ }
63
+
64
+ /* Title styling */
65
+ .title {
66
+ font-size: 0.95rem;
67
+ color: var(--ifm-color-emphasis-900);
68
+ line-height: 1.4;
69
+ font-weight: 500;
70
+ }
71
+
72
+ /* Progress square - right side */
73
+ .progressSquare {
74
+ grid-area: progress;
75
+ padding: 0.5rem 0.875rem;
76
+ border-radius: 6px;
77
+ font-weight: 700;
78
+ font-size: 0.9rem;
79
+ text-align: center;
80
+ white-space: nowrap;
81
+ min-width: 50px;
82
+
83
+ /* Smooth color transitions */
84
+ transition: background-color 0.3s ease, color 0.3s ease;
85
+ }
86
+
87
+ /* Primary color - incomplete tasks */
88
+ .primarySquare {
89
+ background-color: var(--ifm-color-primary);
90
+ color: var(--ifm-color-primary-contrast-foreground);
91
+ }
92
+
93
+ /* Success color - all tasks completed */
94
+ .successSquare {
95
+ background-color: var(--ifm-color-success);
96
+ color: var(--ifm-color-success-contrast-foreground);
97
+ }
98
+
99
+ /* Empty state message */
100
+ .emptyState {
101
+ padding: 2rem;
102
+ text-align: center;
103
+ color: var(--ifm-color-emphasis-600);
104
+ font-style: italic;
105
+ }
106
+
107
+ /* Loading state message */
108
+ .loadingState {
109
+ padding: 2rem;
110
+ text-align: center;
111
+ color: var(--ifm-color-emphasis-600);
112
+ font-style: italic;
113
+ opacity: 0.7;
114
+ }
115
+
116
+ /* Dark mode adjustments */
117
+ [data-theme='dark'] .progressionItem {
118
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
119
+ }
120
+
121
+ [data-theme='dark'] .progressionItem.clickable:hover {
122
+ box-shadow: 0 4px 16px rgba(0, 0, 0, 0.5);
123
+ }
124
+
125
+ [data-theme='dark'] .sectionName {
126
+ color: var(--ifm-color-emphasis-700);
127
+ }
128
+
129
+ [data-theme='dark'] .title {
130
+ color: var(--ifm-color-emphasis-800);
131
+ }
132
+
133
+ /* Responsive adjustments for smaller screens */
134
+ @media (max-width: 768px) {
135
+ .overviewContainer {
136
+ gap: 0.75rem;
137
+ padding: 0.25rem;
138
+ }
139
+
140
+ .progressionItem {
141
+ padding: 0.75rem 1rem;
142
+ min-height: 65px;
143
+ gap: 0.75rem;
144
+ }
145
+
146
+ .sectionName {
147
+ font-size: 0.8rem;
148
+ }
149
+
150
+ .title {
151
+ font-size: 0.875rem;
152
+ }
153
+
154
+ .progressSquare {
155
+ padding: 0.4rem 0.75rem;
156
+ font-size: 0.85rem;
157
+ min-width: 45px;
158
+ }
159
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * TaskProvider Component
3
+ * Manages global task state and persistence
4
+ */
5
+ import { type ReactNode, type ReactElement } from 'react';
6
+ import type { TaskContextValue } from '../../contexts/TaskContext';
7
+ export interface TaskProviderProps {
8
+ children: ReactNode;
9
+ }
10
+ export declare function TaskProvider({ children }: TaskProviderProps): ReactElement;
11
+ /**
12
+ * Hook to access task context
13
+ */
14
+ export declare function useTaskContext(): TaskContextValue;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/theme/TaskProvider/index.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAc,EACZ,KAAK,SAAS,EACd,KAAK,YAAY,EAOlB,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,gBAAgB,EAAuC,MAAM,4BAA4B,CAAC;AAWxG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,EAAE,iBAAiB,GAAG,YAAY,CAmG1E;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,gBAAgB,CAOjD"}
@@ -0,0 +1,134 @@
1
+ "use strict";
2
+ /**
3
+ * TaskProvider Component
4
+ * Manages global task state and persistence
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.TaskProvider = TaskProvider;
41
+ exports.useTaskContext = useTaskContext;
42
+ const react_1 = __importStar(require("react"));
43
+ const storage_1 = require("../../utils/storage");
44
+ const TaskContext = (0, react_1.createContext)(undefined);
45
+ function TaskProvider({ children }) {
46
+ // Initialize state synchronously from localStorage (client-side only)
47
+ const [tasks, setTasks] = (0, react_1.useState)(() => {
48
+ return (0, storage_1.isBrowser)() ? (0, storage_1.loadTasksFromStorage)() : {};
49
+ });
50
+ const [autoCollapseCompletedTasks, setAutoCollapseState] = (0, react_1.useState)(() => {
51
+ return (0, storage_1.isBrowser)() ? (0, storage_1.loadAutoCollapseFromStorage)() : false;
52
+ });
53
+ const [taskRegistry, setTaskRegistry] = (0, react_1.useState)(null);
54
+ // Load task registry for totals (runs once on mount)
55
+ (0, react_1.useEffect)(() => {
56
+ if ((0, storage_1.isBrowser)() && !taskRegistry) {
57
+ // Fetch task-registry.json
58
+ fetch('/task-registry.json')
59
+ .then(response => {
60
+ if (!response.ok) {
61
+ throw new Error('Registry not found');
62
+ }
63
+ return response.json();
64
+ })
65
+ .then((data) => {
66
+ setTaskRegistry(data);
67
+ })
68
+ .catch(error => {
69
+ console.warn('[Interactive Tasks] Failed to load task registry:', error);
70
+ // Set empty registry so we don't keep retrying
71
+ setTaskRegistry({ docPages: {}, categories: {} });
72
+ });
73
+ }
74
+ }, [taskRegistry]);
75
+ // Listen for auto-collapse changes from navbar toggle (which is outside this provider)
76
+ (0, react_1.useEffect)(() => {
77
+ if ((0, storage_1.isBrowser)()) {
78
+ const handleAutoCollapseChange = () => {
79
+ const newValue = (0, storage_1.loadAutoCollapseFromStorage)();
80
+ if (newValue !== autoCollapseCompletedTasks) {
81
+ setAutoCollapseState(newValue);
82
+ }
83
+ };
84
+ window.addEventListener('task-auto-collapse-changed', handleAutoCollapseChange);
85
+ return () => {
86
+ window.removeEventListener('task-auto-collapse-changed', handleAutoCollapseChange);
87
+ };
88
+ }
89
+ }, [autoCollapseCompletedTasks]);
90
+ const setTaskCompleted = (0, react_1.useCallback)((taskKey, completed, pluginId, docId, taskNumber, name) => {
91
+ const newTasks = {
92
+ ...tasks,
93
+ [taskKey]: {
94
+ completed,
95
+ pluginId,
96
+ docId,
97
+ taskNumber,
98
+ name,
99
+ },
100
+ };
101
+ setTasks(newTasks);
102
+ (0, storage_1.saveTasksToStorage)(newTasks);
103
+ }, [tasks]);
104
+ const setAutoCollapseCompletedTasks = (0, react_1.useCallback)((autoCollapse) => {
105
+ setAutoCollapseState(autoCollapse);
106
+ (0, storage_1.saveAutoCollapseToStorage)(autoCollapse);
107
+ // Dispatch custom event to notify navbar toggle
108
+ if ((0, storage_1.isBrowser)()) {
109
+ window.dispatchEvent(new CustomEvent('task-auto-collapse-changed', { detail: autoCollapse }));
110
+ }
111
+ }, [autoCollapseCompletedTasks]);
112
+ // Memoize context value to prevent unnecessary re-renders
113
+ const contextValue = (0, react_1.useMemo)(() => {
114
+ return {
115
+ tasks,
116
+ autoCollapseCompletedTasks,
117
+ setTaskCompleted,
118
+ setAutoCollapseCompletedTasks,
119
+ taskRegistry,
120
+ };
121
+ }, [tasks, autoCollapseCompletedTasks, setTaskCompleted, setAutoCollapseCompletedTasks, taskRegistry]);
122
+ return react_1.default.createElement(TaskContext.Provider, { value: contextValue }, children);
123
+ }
124
+ /**
125
+ * Hook to access task context
126
+ */
127
+ function useTaskContext() {
128
+ const context = (0, react_1.useContext)(TaskContext);
129
+ if (!context) {
130
+ throw new Error('useTaskContext must be used within a TaskProvider');
131
+ }
132
+ return context;
133
+ }
134
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/theme/TaskProvider/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Badge Style Utilities
3
+ * Applies inline styles based on badge configuration
4
+ */
5
+ import type { BadgeConfig } from "../contexts/TaskContext";
6
+ /**
7
+ * Get custom CSS properties for badge styling
8
+ * Returns CSS custom properties that will be applied based on theme
9
+ *
10
+ * @param badgeConfig - Badge configuration from frontmatter/customProps
11
+ * @param isComplete - Whether the badge represents a completed state
12
+ * @returns Object with CSS custom properties
13
+ */
14
+ export declare function getBadgeStyles(badgeConfig: BadgeConfig | undefined, isComplete?: boolean): React.CSSProperties;
15
+ /**
16
+ * Check if badge should be hidden
17
+ *
18
+ * @param badgeConfig - Badge configuration
19
+ * @returns true if badge should be hidden
20
+ */
21
+ export declare function shouldHideBadge(badgeConfig: BadgeConfig | undefined): boolean;
22
+ /**
23
+ * Check if icon should be disabled (show numbers even when complete)
24
+ *
25
+ * @param badgeConfig - Badge configuration
26
+ * @returns true if icon should be disabled
27
+ */
28
+ export declare function shouldDisableIcon(badgeConfig: BadgeConfig | undefined): boolean;
29
+ //# sourceMappingURL=badgeStyles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badgeStyles.d.ts","sourceRoot":"","sources":["../../src/utils/badgeStyles.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,WAAW,GAAG,SAAS,EACpC,UAAU,GAAE,OAAe,GAC1B,KAAK,CAAC,aAAa,CA4BrB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,CAE7E;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,WAAW,GAAG,SAAS,GACnC,OAAO,CAET"}
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ /**
3
+ * Badge Style Utilities
4
+ * Applies inline styles based on badge configuration
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.getBadgeStyles = getBadgeStyles;
8
+ exports.shouldHideBadge = shouldHideBadge;
9
+ exports.shouldDisableIcon = shouldDisableIcon;
10
+ /**
11
+ * Get custom CSS properties for badge styling
12
+ * Returns CSS custom properties that will be applied based on theme
13
+ *
14
+ * @param badgeConfig - Badge configuration from frontmatter/customProps
15
+ * @param isComplete - Whether the badge represents a completed state
16
+ * @returns Object with CSS custom properties
17
+ */
18
+ function getBadgeStyles(badgeConfig, isComplete = false) {
19
+ if (!badgeConfig || !badgeConfig.colors) {
20
+ return {};
21
+ }
22
+ const styles = {};
23
+ const { completed, incomplete, font } = badgeConfig.colors;
24
+ // Determine which state colors to use
25
+ const stateColors = isComplete ? completed : incomplete;
26
+ // Set background colors
27
+ if (stateColors?.lightmode) {
28
+ styles["--task-badge-bg"] = stateColors.lightmode;
29
+ }
30
+ if (stateColors?.darkmode) {
31
+ styles["--task-badge-bg-dark"] = stateColors.darkmode;
32
+ }
33
+ // Set font colors (same for both completed/incomplete)
34
+ if (font?.lightmode) {
35
+ styles["--task-badge-color"] = font.lightmode;
36
+ }
37
+ if (font?.darkmode) {
38
+ styles["--task-badge-color-dark"] = font.darkmode;
39
+ }
40
+ return styles;
41
+ }
42
+ /**
43
+ * Check if badge should be hidden
44
+ *
45
+ * @param badgeConfig - Badge configuration
46
+ * @returns true if badge should be hidden
47
+ */
48
+ function shouldHideBadge(badgeConfig) {
49
+ return badgeConfig?.hide === true;
50
+ }
51
+ /**
52
+ * Check if icon should be disabled (show numbers even when complete)
53
+ *
54
+ * @param badgeConfig - Badge configuration
55
+ * @returns true if icon should be disabled
56
+ */
57
+ function shouldDisableIcon(badgeConfig) {
58
+ return badgeConfig?.disableIcon === true;
59
+ }
60
+ //# sourceMappingURL=badgeStyles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badgeStyles.js","sourceRoot":"","sources":["../../src/utils/badgeStyles.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAYH,wCA+BC;AAQD,0CAEC;AAQD,8CAIC;AA7DD;;;;;;;GAOG;AACH,SAAgB,cAAc,CAC5B,WAAoC,EACpC,aAAsB,KAAK;IAE3B,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;QACxC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC;IAE3D,sCAAsC;IACtC,MAAM,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;IAExD,wBAAwB;IACxB,IAAI,WAAW,EAAE,SAAS,EAAE,CAAC;QAC3B,MAAM,CAAC,iBAAiB,CAAC,GAAG,WAAW,CAAC,SAAS,CAAC;IACpD,CAAC;IACD,IAAI,WAAW,EAAE,QAAQ,EAAE,CAAC;QAC1B,MAAM,CAAC,sBAAsB,CAAC,GAAG,WAAW,CAAC,QAAQ,CAAC;IACxD,CAAC;IAED,uDAAuD;IACvD,IAAI,IAAI,EAAE,SAAS,EAAE,CAAC;QACpB,MAAM,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;IAChD,CAAC;IACD,IAAI,IAAI,EAAE,QAAQ,EAAE,CAAC;QACnB,MAAM,CAAC,yBAAyB,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;IACpD,CAAC;IAED,OAAO,MAA6B,CAAC;AACvC,CAAC;AAED;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,WAAoC;IAClE,OAAO,WAAW,EAAE,IAAI,KAAK,IAAI,CAAC;AACpC,CAAC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB,CAC/B,WAAoC;IAEpC,OAAO,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Shared Icons for Task Components
3
+ * Centralized SVG icons to avoid duplication
4
+ */
5
+ import { type ReactElement } from 'react';
6
+ /**
7
+ * Completed task icon - checkmark in circle
8
+ * Displayed next to task name when task is completed
9
+ */
10
+ export declare const CHECKMARK_CIRCLE_FILL_ICON: ReactElement;
11
+ /**
12
+ * Chevron down icon for expand/collapse
13
+ */
14
+ export declare const CHEVRON_DOWN_ICON: ReactElement;
15
+ /**
16
+ * Auto-collapse enabled icon - list with up arrow
17
+ * Used in navbar toggle when auto-collapse is enabled
18
+ */
19
+ export declare const ENABLED_ICON: ReactElement;
20
+ /**
21
+ * Auto-collapse disabled icon - list with X
22
+ * Used in navbar toggle when auto-collapse is disabled
23
+ */
24
+ export declare const DISABLED_ICON: ReactElement;
25
+ /**
26
+ * Simple checkmark icon for completion button
27
+ */
28
+ export declare const CHECKMARK_ICON: ReactElement;
29
+ export declare const CHECKMARKS_ICON: ReactElement;
30
+ /**
31
+ * Hint icon - lightbulb
32
+ */
33
+ export declare const HINT_ICON: ReactElement;
34
+ /**
35
+ * Solution icon - checkmark with sparkles
36
+ */
37
+ export declare const SOLUTION_ICON: ReactElement;
38
+ //# sourceMappingURL=icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../../src/utils/icons.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAc,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAEjD;;;GAGG;AACH,eAAO,MAAM,0BAA0B,EAAE,YAIxC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,YAgB/B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,YAc1B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,YAmB3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,YAI5B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,YAI7B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,YAavB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,YAa3B,CAAC"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ /**
3
+ * Shared Icons for Task Components
4
+ * Centralized SVG icons to avoid duplication
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.SOLUTION_ICON = exports.HINT_ICON = exports.CHECKMARKS_ICON = exports.CHECKMARK_ICON = exports.DISABLED_ICON = exports.ENABLED_ICON = exports.CHEVRON_DOWN_ICON = exports.CHECKMARK_CIRCLE_FILL_ICON = void 0;
11
+ const react_1 = __importDefault(require("react"));
12
+ /**
13
+ * Completed task icon - checkmark in circle
14
+ * Displayed next to task name when task is completed
15
+ */
16
+ exports.CHECKMARK_CIRCLE_FILL_ICON = (react_1.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 512 512" },
17
+ react_1.default.createElement("path", { fill: "currentColor", d: "M256 48C141.31 48 48 141.31 48 256s93.31 208 208 208s208-93.31 208-208S370.69 48 256 48m108.25 138.29l-134.4 160a16 16 0 0 1-12 5.71h-.27a16 16 0 0 1-11.89-5.3l-57.6-64a16 16 0 1 1 23.78-21.4l45.29 50.32l122.59-145.91a16 16 0 0 1 24.5 20.58" })));
18
+ /**
19
+ * Chevron down icon for expand/collapse
20
+ */
21
+ exports.CHEVRON_DOWN_ICON = (react_1.default.createElement("svg", { width: "20", height: "20", viewBox: "0 0 20 20", style: { transition: 'transform 0.2s ease' } },
22
+ react_1.default.createElement("polyline", { points: "6 8 10 12 14 8", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })));
23
+ /**
24
+ * Auto-collapse enabled icon - list with up arrow
25
+ * Used in navbar toggle when auto-collapse is enabled
26
+ */
27
+ exports.ENABLED_ICON = (react_1.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "30", height: "30", viewBox: "0 0 24 24" },
28
+ react_1.default.createElement("path", { fill: "currentColor", fillRule: "evenodd", d: "M2.25 6A.75.75 0 0 1 3 5.25h17a.75.75 0 0 1 0 1.5H3A.75.75 0 0 1 2.25 6m0 5a.75.75 0 0 1 .75-.75h17a.75.75 0 0 1 0 1.5H3a.75.75 0 0 1-.75-.75m14.762 3.43a.75.75 0 0 1 .976 0l3.5 3a.75.75 0 1 1-.976 1.14L17.5 15.987l-3.012 2.581a.75.75 0 1 1-.976-1.138zM2.25 16a.75.75 0 0 1 .75-.75h8a.75.75 0 0 1 0 1.5H3a.75.75 0 0 1-.75-.75", clipRule: "evenodd" })));
29
+ /**
30
+ * Auto-collapse disabled icon - list with X
31
+ * Used in navbar toggle when auto-collapse is disabled
32
+ */
33
+ exports.DISABLED_ICON = (react_1.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "30", height: "30", viewBox: "0 0 24 24" },
34
+ react_1.default.createElement("path", { fill: "currentColor", fillRule: "evenodd", d: "M2.25 6A.75.75 0 0 1 3 5.25h17a.75.75 0 0 1 0 1.5H3A.75.75 0 0 1 2.25 6m0 5a.75.75 0 0 1 .75-.75h8a.75.75 0 0 1 0 1.5H3a.75.75 0 0 1-.75-.75m0 5a.75.75 0 0 1 .75-.75h8a.75.75 0 0 1 0 1.5H3a.75.75 0 0 1-.75-.75", clipRule: "evenodd", opacity: "0.5" }),
35
+ react_1.default.createElement("path", { fill: "currentColor", d: "M14.47 10.47a.75.75 0 0 1 1.06 0l1.97 1.97l1.97-1.97a.75.75 0 1 1 1.06 1.06l-1.97 1.97l1.97 1.97a.75.75 0 1 1-1.06 1.06l-1.97-1.97l-1.97 1.97a.75.75 0 1 1-1.06-1.06l1.97-1.97l-1.97-1.97a.75.75 0 0 1 0-1.06" })));
36
+ /**
37
+ * Simple checkmark icon for completion button
38
+ */
39
+ exports.CHECKMARK_ICON = (react_1.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", viewBox: "0 0 512 512" },
40
+ react_1.default.createElement("path", { fill: "none", stroke: "currentColor", strokeLinecap: "square", strokeMiterlimit: "10", strokeWidth: "44", d: "M416 128L192 384l-96-96" })));
41
+ exports.CHECKMARKS_ICON = (react_1.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", viewBox: "0 0 512 512" },
42
+ react_1.default.createElement("path", { fill: "none", stroke: "currentColor", strokeLinecap: "square", strokeMiterlimit: "10", strokeWidth: "44", d: "M465 127L241 384l-92-92m-9 93l-93-93m316-165L236 273" })));
43
+ /**
44
+ * Hint icon - lightbulb
45
+ */
46
+ exports.HINT_ICON = (react_1.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", viewBox: "0 0 24 24", style: { display: 'inline-block', verticalAlign: 'middle', marginRight: '0.375rem' } },
47
+ react_1.default.createElement("path", { fill: "currentColor", d: "M9 21c0 .55.45 1 1 1h4c.55 0 1-.45 1-1v-1H9zm3-19C8.14 2 5 5.14 5 9c0 2.38 1.19 4.47 3 5.74V17c0 .55.45 1 1 1h6c.55 0 1-.45 1-1v-2.26c1.81-1.27 3-3.36 3-5.74c0-3.86-3.14-7-7-7m2.85 11.1l-.85.6V16h-4v-2.3l-.85-.6A5 5 0 0 1 7 9c0-2.76 2.24-5 5-5s5 2.24 5 5c0 1.63-.8 3.16-2.15 4.1" })));
48
+ /**
49
+ * Solution icon - checkmark with sparkles
50
+ */
51
+ exports.SOLUTION_ICON = (react_1.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", viewBox: "0 0 24 24", style: { display: 'inline-block', verticalAlign: 'middle', marginRight: '0.375rem' } },
52
+ react_1.default.createElement("path", { fill: "currentColor", d: "M13.652 20.34c.377-.074.765.11.912.465c.17.414-.053.888-.49.98a10.05 10.05 0 0 1-4.15 0c-.439-.093-.662-.567-.49-.981c.146-.354.535-.54.91-.465a8.6 8.6 0 0 0 3.308 0m5.413-3.613c.214-.319.619-.462.973-.316c.414.172.591.665.347 1.04a10.1 10.1 0 0 1-2.934 2.934c-.375.244-.868.067-1.04-.347c-.146-.354-.003-.758.316-.972a8.6 8.6 0 0 0 2.338-2.34m-15.104-.318c.354-.146.76-.003.973.316a8.6 8.6 0 0 0 2.337 2.34c.318.213.461.617.315.971c-.172.414-.665.591-1.04.347a10.05 10.05 0 0 1-2.932-2.933c-.244-.375-.067-.87.347-1.04M15.22 8.97a.75.75 0 1 1 1.06 1.061l-5 5a.75.75 0 0 1-1.06 0l-2.5-2.5l-.052-.057a.75.75 0 0 1 1.056-1.055l.056.052l1.97 1.97zm5.584.464c.414-.172.888.053.98.49Q22 10.93 22 12c0 .71-.074 1.404-.215 2.073c-.092.439-.566.662-.98.49c-.355-.146-.54-.535-.465-.91a8.5 8.5 0 0 0-.001-3.31c-.074-.375.11-.764.465-.91m-18.588.492c.093-.438.566-.662.98-.49c.354.146.54.535.465.91a8.5 8.5 0 0 0 0 3.306c.073.376-.112.764-.466.91c-.414.172-.888-.051-.98-.49a10 10 0 0 1 0-4.146m4.33-6.309c.376-.244.87-.067 1.04.347c.147.354.005.758-.314.972a8.6 8.6 0 0 0-2.337 2.337c-.214.319-.618.462-.972.316c-.414-.172-.592-.666-.347-1.041a10.05 10.05 0 0 1 2.93-2.93m9.864.345c.172-.414.665-.591 1.04-.347c1.17.762 2.17 1.763 2.933 2.932c.244.375.067.868-.347 1.04c-.354.146-.758.003-.972-.315a8.6 8.6 0 0 0-2.338-2.337c-.319-.214-.463-.619-.316-.973M12 2c.71 0 1.403.074 2.071.215c.439.092.663.566.492.98c-.147.355-.536.54-.912.465a8.5 8.5 0 0 0-3.305.001c-.376.074-.765-.11-.911-.465c-.172-.414.052-.888.49-.98C10.595 2.075 11.289 2 12 2" })));
53
+ //# sourceMappingURL=icons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.js","sourceRoot":"","sources":["../../src/utils/icons.tsx"],"names":[],"mappings":"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"}