@mathwiz/ui-components 0.1.7 → 0.1.8

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 (133) hide show
  1. package/README.md +11 -1
  2. package/dist/App.d.ts.map +1 -1
  3. package/dist/components/EquationRender/EquationRender.d.ts +6 -0
  4. package/dist/components/EquationRender/EquationRender.d.ts.map +1 -0
  5. package/dist/components/EquationRender/index.d.ts +3 -0
  6. package/dist/components/EquationRender/index.d.ts.map +1 -0
  7. package/dist/components/EquationRender/types.d.ts +40 -0
  8. package/dist/components/EquationRender/types.d.ts.map +1 -0
  9. package/dist/components/MathCard/MathCard.d.ts +14 -0
  10. package/dist/components/MathCard/MathCard.d.ts.map +1 -0
  11. package/dist/components/MathCard/MathCard.types.d.ts +151 -0
  12. package/dist/components/MathCard/MathCard.types.d.ts.map +1 -0
  13. package/dist/components/MathCard/components/AnswerInput.d.ts +4 -0
  14. package/dist/components/MathCard/components/AnswerInput.d.ts.map +1 -0
  15. package/dist/components/MathCard/components/Banner.d.ts +4 -0
  16. package/dist/components/MathCard/components/Banner.d.ts.map +1 -0
  17. package/dist/components/MathCard/components/Divider.d.ts +4 -0
  18. package/dist/components/MathCard/components/Divider.d.ts.map +1 -0
  19. package/dist/components/MathCard/components/ErrorState.d.ts +4 -0
  20. package/dist/components/MathCard/components/ErrorState.d.ts.map +1 -0
  21. package/dist/components/MathCard/components/Explanation.d.ts +4 -0
  22. package/dist/components/MathCard/components/Explanation.d.ts.map +1 -0
  23. package/dist/components/MathCard/components/LoadingState.d.ts +4 -0
  24. package/dist/components/MathCard/components/LoadingState.d.ts.map +1 -0
  25. package/dist/components/MathCard/components/Question.d.ts +4 -0
  26. package/dist/components/MathCard/components/Question.d.ts.map +1 -0
  27. package/dist/components/MathCard/components/ReviewContent.d.ts +4 -0
  28. package/dist/components/MathCard/components/ReviewContent.d.ts.map +1 -0
  29. package/dist/components/MathCard/components/SubmitButton.d.ts +4 -0
  30. package/dist/components/MathCard/components/SubmitButton.d.ts.map +1 -0
  31. package/dist/components/MathCard/context.d.ts +11 -0
  32. package/dist/components/MathCard/context.d.ts.map +1 -0
  33. package/dist/components/MathCard/index.d.ts +7 -0
  34. package/dist/components/MathCard/index.d.ts.map +1 -0
  35. package/dist/components/MathCard/styles.d.ts +83 -0
  36. package/dist/components/MathCard/styles.d.ts.map +1 -0
  37. package/dist/components/MathCard/utils/contentRenderer.d.ts +40 -0
  38. package/dist/components/MathCard/utils/contentRenderer.d.ts.map +1 -0
  39. package/dist/components/MathCard/utils/templateParser.d.ts +44 -0
  40. package/dist/components/MathCard/utils/templateParser.d.ts.map +1 -0
  41. package/dist/components/MathGraph/GraphContainer.d.ts +11 -0
  42. package/dist/components/MathGraph/GraphContainer.d.ts.map +1 -0
  43. package/dist/components/MathGraph/MathGraph.d.ts +8 -0
  44. package/dist/components/MathGraph/MathGraph.d.ts.map +1 -0
  45. package/dist/components/MathGraph/MathGraphErrorBoundary.d.ts +19 -0
  46. package/dist/components/MathGraph/MathGraphErrorBoundary.d.ts.map +1 -0
  47. package/dist/components/MathGraph/index.d.ts +10 -0
  48. package/dist/components/MathGraph/index.d.ts.map +1 -0
  49. package/dist/components/MathGraph/types.d.ts +77 -0
  50. package/dist/components/MathGraph/types.d.ts.map +1 -0
  51. package/dist/components/MathGraph/utils/boundingBoxCalculator.d.ts +31 -0
  52. package/dist/components/MathGraph/utils/boundingBoxCalculator.d.ts.map +1 -0
  53. package/dist/components/MathGraph/utils/debugBoundingBox.d.ts +9 -0
  54. package/dist/components/MathGraph/utils/debugBoundingBox.d.ts.map +1 -0
  55. package/dist/components/MathGraph/utils/manualCalculation.d.ts +54 -0
  56. package/dist/components/MathGraph/utils/manualCalculation.d.ts.map +1 -0
  57. package/dist/components/MathGraph/utils/realTimeTest.d.ts +7 -0
  58. package/dist/components/MathGraph/utils/realTimeTest.d.ts.map +1 -0
  59. package/dist/components/MathGraph/utils/testBoundingBox.d.ts +5 -0
  60. package/dist/components/MathGraph/utils/testBoundingBox.d.ts.map +1 -0
  61. package/dist/components/MathGraph/utils/testRefResolution.d.ts +5 -0
  62. package/dist/components/MathGraph/utils/testRefResolution.d.ts.map +1 -0
  63. package/dist/components/MathSessionContainer/MathSessionContainer.d.ts +18 -0
  64. package/dist/components/MathSessionContainer/MathSessionContainer.d.ts.map +1 -0
  65. package/dist/components/MathSessionContainer/MathSessionContainer.types.d.ts +45 -0
  66. package/dist/components/MathSessionContainer/MathSessionContainer.types.d.ts.map +1 -0
  67. package/dist/components/MathSessionContainer/hooks/index.d.ts +7 -0
  68. package/dist/components/MathSessionContainer/hooks/index.d.ts.map +1 -0
  69. package/dist/components/MathSessionContainer/hooks/useGeometryManagement.d.ts +17 -0
  70. package/dist/components/MathSessionContainer/hooks/useGeometryManagement.d.ts.map +1 -0
  71. package/dist/components/MathSessionContainer/hooks/useSessionCalculations.d.ts +17 -0
  72. package/dist/components/MathSessionContainer/hooks/useSessionCalculations.d.ts.map +1 -0
  73. package/dist/components/MathSessionContainer/hooks/useSessionEventHandlers.d.ts +17 -0
  74. package/dist/components/MathSessionContainer/hooks/useSessionEventHandlers.d.ts.map +1 -0
  75. package/dist/components/MathSessionContainer/index.d.ts +3 -0
  76. package/dist/components/MathSessionContainer/index.d.ts.map +1 -0
  77. package/dist/config/types.d.ts.map +1 -1
  78. package/dist/data-sources/api-data-source.d.ts +2 -1
  79. package/dist/data-sources/api-data-source.d.ts.map +1 -1
  80. package/dist/data-sources/custom-data-source.d.ts +2 -1
  81. package/dist/data-sources/custom-data-source.d.ts.map +1 -1
  82. package/dist/data-sources/mock-data-source.d.ts +2 -1
  83. package/dist/data-sources/mock-data-source.d.ts.map +1 -1
  84. package/dist/index.cjs +683 -23
  85. package/dist/index.cjs.map +1 -1
  86. package/dist/index.d.ts +13 -0
  87. package/dist/index.d.ts.map +1 -1
  88. package/dist/index.mjs +67814 -2302
  89. package/dist/index.mjs.map +1 -1
  90. package/dist/mockServiceWorker.js +348 -344
  91. package/dist/mocks/handlers.d.ts.map +1 -1
  92. package/dist/pages/MathSessionPage/MathSessionPage.d.ts +6 -0
  93. package/dist/pages/MathSessionPage/MathSessionPage.d.ts.map +1 -0
  94. package/dist/pages/MathSessionPage/index.d.ts +3 -0
  95. package/dist/pages/MathSessionPage/index.d.ts.map +1 -0
  96. package/dist/pages/MathSessionPage/types.d.ts +72 -0
  97. package/dist/pages/MathSessionPage/types.d.ts.map +1 -0
  98. package/dist/pages/TestPage/TestPage.d.ts +8 -0
  99. package/dist/pages/TestPage/TestPage.d.ts.map +1 -0
  100. package/dist/stores/mathSessionStore.d.ts +79 -0
  101. package/dist/stores/mathSessionStore.d.ts.map +1 -0
  102. package/package.json +18 -8
  103. package/dist/App.css +0 -570
  104. package/dist/components/Button/Button.css +0 -214
  105. package/dist/components/ContentAccordion/ContentAccordion.css +0 -268
  106. package/dist/components/HeroUISideNavigation.d.ts +0 -17
  107. package/dist/components/HeroUISideNavigation.d.ts.map +0 -1
  108. package/dist/components/MathWizHeader/MathWizHeader.css +0 -333
  109. package/dist/components/SideNavigation.d.ts +0 -24
  110. package/dist/components/SideNavigation.d.ts.map +0 -1
  111. package/dist/components/SideNavigationHU.d.ts +0 -17
  112. package/dist/components/SideNavigationHU.d.ts.map +0 -1
  113. package/dist/components/Sidebar/Sidebar.css +0 -207
  114. package/dist/components/Submenu/Submenu.css +0 -98
  115. package/dist/components/UserProfile/UserProfile.css +0 -141
  116. package/dist/components/components.css +0 -222
  117. package/dist/components/gradeNavigate/GradeNavigatePage.d.ts +0 -5
  118. package/dist/components/gradeNavigate/GradeNavigatePage.d.ts.map +0 -1
  119. package/dist/components/gradeNavigate/GradeNavigatePagePresentational.d.ts +0 -20
  120. package/dist/components/gradeNavigate/GradeNavigatePagePresentational.d.ts.map +0 -1
  121. package/dist/components/gradeNavigate/HeaderContainer.d.ts +0 -13
  122. package/dist/components/gradeNavigate/HeaderContainer.d.ts.map +0 -1
  123. package/dist/components/gradeNavigate/HeaderPresentational.d.ts +0 -23
  124. package/dist/components/gradeNavigate/HeaderPresentational.d.ts.map +0 -1
  125. package/dist/components/gradeNavigate/index.d.ts +0 -7
  126. package/dist/components/gradeNavigate/index.d.ts.map +0 -1
  127. package/dist/components/radarAbility/AbilityAssessmentDashboard/AbilityAssessmentDashboard.module.css +0 -60
  128. package/dist/index.css +0 -63
  129. package/dist/pages/GradeUnitBrowserPage/GradeUnitBrowserPage.css +0 -250
  130. package/dist/stories/button.css +0 -30
  131. package/dist/stories/header.css +0 -32
  132. package/dist/stories/page.css +0 -68
  133. package/dist/styles/index.css +0 -154
@@ -1,333 +0,0 @@
1
- /* MathWizHeader 组件样式 - 参数化样式系统 */
2
-
3
- /* 基础样式变量 */
4
- .mathwiz-header {
5
- --header-height: 64px;
6
- --header-bg: linear-gradient(to right, #8b5cf6, #ec4899, #ef4444);
7
- --header-color: white;
8
- --header-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
9
-
10
- height: var(--header-height);
11
- background: var(--header-bg);
12
- color: var(--header-color);
13
- box-shadow: var(--header-shadow);
14
- position: sticky;
15
- top: 0;
16
- z-index: 1000;
17
- width: 100%;
18
- }
19
-
20
- /* 变体样式 */
21
- .mathwiz-header--primary {
22
- --header-bg: linear-gradient(to right, #006FEE, #005BC4);
23
- }
24
-
25
- .mathwiz-header--secondary {
26
- --header-bg: linear-gradient(to right, #7828C8, #5B21B6);
27
- }
28
-
29
- .mathwiz-header--gradient {
30
- /* 默认渐变,可通过参数自定义 */
31
- --header-bg: linear-gradient(to right, #8b5cf6, #ec4899, #ef4444);
32
- }
33
-
34
- .mathwiz-header--solid {
35
- --header-bg: var(--custom-bg, #f4f4f5);
36
- --header-color: var(--custom-color, #18181b);
37
- }
38
-
39
- .mathwiz-header--bordered {
40
- --header-bg: transparent;
41
- --header-color: #18181b;
42
- border-bottom: 1px solid #e4e4e7;
43
- box-shadow: none;
44
- }
45
-
46
- /* 颜色变体 */
47
- .mathwiz-header--color-primary {
48
- --header-bg: #006FEE;
49
- --header-color: white;
50
- }
51
-
52
- .mathwiz-header--color-success {
53
- --header-bg: #17C964;
54
- --header-color: white;
55
- }
56
-
57
- .mathwiz-header--color-warning {
58
- --header-bg: #F5A524;
59
- --header-color: white;
60
- }
61
-
62
- .mathwiz-header--color-danger {
63
- --header-bg: #F31260;
64
- --header-color: white;
65
- }
66
-
67
- /* 布局样式 */
68
- .mathwiz-header .header-content {
69
- display: flex;
70
- align-items: center;
71
- justify-content: space-between;
72
- height: 100%;
73
- padding: 0 1.5rem;
74
- max-width: 1280px;
75
- margin: 0 auto;
76
- width: 100%;
77
- }
78
-
79
- .mathwiz-header .header-section {
80
- flex: 1;
81
- display: flex;
82
- align-items: center;
83
- }
84
-
85
- .mathwiz-header .header-section.left {
86
- justify-content: flex-start;
87
- }
88
-
89
- .mathwiz-header .header-section.center {
90
- justify-content: center;
91
- text-align: center;
92
- }
93
-
94
- .mathwiz-header .header-section.right {
95
- justify-content: flex-end;
96
- }
97
-
98
- /* Logo 样式 */
99
- .mathwiz-header .logo {
100
- font-size: var(--logo-font-size, 1.5rem);
101
- font-weight: var(--logo-font-weight, bold);
102
- text-decoration: none;
103
- transition: opacity 0.2s ease;
104
- color: var(--logo-color, var(--header-color)) !important;
105
- }
106
-
107
- .mathwiz-header .logo:hover {
108
- opacity: 0.8;
109
- }
110
-
111
- /* Logo 尺寸变体 */
112
- .mathwiz-header .logo--sm {
113
- --logo-font-size: 1.25rem;
114
- }
115
-
116
- .mathwiz-header .logo--md {
117
- --logo-font-size: 1.5rem;
118
- }
119
-
120
- .mathwiz-header .logo--lg {
121
- --logo-font-size: 1.75rem;
122
- }
123
-
124
- .mathwiz-header .logo--xl {
125
- --logo-font-size: 2rem;
126
- }
127
-
128
- /* 探索菜单样式 */
129
- .explore-button {
130
- display: flex;
131
- align-items: center;
132
- gap: 0.5rem;
133
- padding: 0.5rem 0.75rem;
134
- border-radius: 6px;
135
- font-size: 0.875rem;
136
- font-weight: 500;
137
- transition: all 0.2s ease;
138
- background: var(--explore-bg, transparent);
139
- border: var(--explore-border, none);
140
- color: var(--explore-color, var(--header-color)) !important;
141
- cursor: pointer;
142
- }
143
-
144
- /* 探索按钮变体 */
145
- .explore-button--solid {
146
- --explore-bg: var(--explore-color, #006FEE);
147
- --explore-color: white;
148
- }
149
-
150
- .explore-button--bordered {
151
- --explore-bg: transparent;
152
- --explore-border: 1px solid var(--explore-color, #006FEE);
153
- --explore-color: var(--explore-color, #006FEE);
154
- }
155
-
156
- .explore-button--light {
157
- --explore-bg: var(--explore-color-light, rgba(0, 111, 238, 0.1));
158
- --explore-color: var(--explore-color, #006FEE);
159
- }
160
-
161
- .explore-button--flat {
162
- --explore-bg: transparent;
163
- --explore-color: var(--explore-color, #006FEE);
164
- }
165
-
166
- .explore-button--faded {
167
- --explore-bg: var(--explore-color-faded, rgba(0, 111, 238, 0.05));
168
- --explore-color: var(--explore-color, #006FEE);
169
- }
170
-
171
- .explore-button--shadow {
172
- --explore-bg: var(--explore-color, #006FEE);
173
- --explore-color: white;
174
- box-shadow: 0 2px 4px rgba(0, 111, 238, 0.3);
175
- }
176
-
177
- /* 探索按钮颜色变体 */
178
- .explore-button--color-primary {
179
- --explore-color: #006FEE;
180
- --explore-color-light: rgba(0, 111, 238, 0.1);
181
- --explore-color-faded: rgba(0, 111, 238, 0.05);
182
- }
183
-
184
- .explore-button--color-success {
185
- --explore-color: #17C964;
186
- --explore-color-light: rgba(23, 201, 100, 0.1);
187
- --explore-color-faded: rgba(23, 201, 100, 0.05);
188
- }
189
-
190
- .explore-button--color-warning {
191
- --explore-color: #F5A524;
192
- --explore-color-light: rgba(245, 165, 36, 0.1);
193
- --explore-color-faded: rgba(245, 165, 36, 0.05);
194
- }
195
-
196
- .explore-button--color-danger {
197
- --explore-color: #F31260;
198
- --explore-color-light: rgba(243, 18, 96, 0.1);
199
- --explore-color-faded: rgba(243, 18, 96, 0.05);
200
- }
201
-
202
- .explore-button:hover {
203
- background-color: var(--explore-bg-hover, rgba(255, 255, 255, 0.1));
204
- color: var(--explore-color-hover, var(--explore-color));
205
- }
206
-
207
- .explore-icon {
208
- font-size: 1.25rem;
209
- }
210
-
211
- .explore-text {
212
- font-weight: 500;
213
- }
214
-
215
- /* 探索菜单项样式 */
216
- .explore-menu-item {
217
- display: flex;
218
- align-items: center;
219
- justify-content: space-between;
220
- padding: 0.5rem 1rem;
221
- cursor: pointer;
222
- transition: background-color 0.15s ease, color 0.15s ease;
223
- min-width: 200px;
224
- }
225
-
226
- .explore-menu-item:hover {
227
- background-color: var(--hover-bg, #e9ecef);
228
- color: var(--accent-color, #4361ee);
229
- }
230
-
231
- .explore-item-label {
232
- font-weight: 500;
233
- flex: 1;
234
- }
235
-
236
- .explore-item-status {
237
- font-size: 0.75rem;
238
- font-weight: 500;
239
- padding: 0.25rem 0.5rem;
240
- border-radius: 9999px;
241
- margin-left: 0.5rem;
242
- }
243
-
244
- .status-new {
245
- background-color: var(--success-color, #10b981);
246
- color: white;
247
- }
248
-
249
- .status-progress {
250
- color: var(--accent-color, #4361ee);
251
- }
252
-
253
- .status-进行中 {
254
- background-color: var(--warning-color, #f59e0b);
255
- color: white;
256
- }
257
-
258
- .status-2 {
259
- background-color: var(--accent-light, #e6f2ff);
260
- color: var(--accent-color, #4361ee);
261
- }
262
-
263
- /* 响应式设计 */
264
- @media (max-width: 768px) {
265
- .mathwiz-header .header-content {
266
- padding: 0 1rem;
267
- }
268
-
269
- .explore-text {
270
- display: none;
271
- }
272
-
273
- .explore-button {
274
- padding: 0.5rem;
275
- }
276
-
277
- .mathwiz-header .logo {
278
- font-size: 1.25rem;
279
- }
280
- }
281
-
282
- @media (max-width: 480px) {
283
- .mathwiz-header .header-content {
284
- padding: 0 0.75rem;
285
- }
286
-
287
- .explore-button {
288
- min-width: auto;
289
- }
290
- }
291
-
292
- /* 无障碍访问支持 */
293
- .mathwiz-header:focus-within {
294
- outline: 2px solid var(--accent-color, #4361ee);
295
- outline-offset: 2px;
296
- }
297
-
298
- .explore-button:focus {
299
- outline: 2px solid var(--accent-color, #4361ee);
300
- outline-offset: 2px;
301
- }
302
-
303
- /* 高对比度模式支持 */
304
- @media (prefers-contrast: high) {
305
- .mathwiz-header {
306
- border-bottom: 2px solid white;
307
- }
308
-
309
- .explore-button {
310
- border: 1px solid currentColor;
311
- }
312
- }
313
-
314
- /* 用户名片在Header中的样式 */
315
- .mathwiz-header .user-name {
316
- color: white !important;
317
- }
318
-
319
- /* 用户名片在Header中的悬停效果 */
320
- .mathwiz-header .user-profile-trigger:hover {
321
- background-color: rgba(255, 255, 255, 0.1) !important;
322
- opacity: 0.8;
323
- }
324
-
325
- /* 减少动画模式支持 */
326
- @media (prefers-reduced-motion: reduce) {
327
-
328
- .mathwiz-header .logo,
329
- .explore-button,
330
- .explore-menu-item {
331
- transition: none;
332
- }
333
- }
@@ -1,24 +0,0 @@
1
- import React from 'react';
2
- import './components.css';
3
- interface Lesson {
4
- id: string;
5
- title: string;
6
- duration?: string;
7
- isCompleted?: boolean;
8
- isLocked?: boolean;
9
- }
10
- interface Unit {
11
- id: string;
12
- title: string;
13
- lessons: Lesson[];
14
- }
15
- interface SideNavigationProps {
16
- units: Unit[];
17
- currentLesson?: string;
18
- onLessonSelect?: (lessonId: string) => void;
19
- onUnitToggle?: (unitId: string) => void;
20
- expandedUnits?: string[];
21
- }
22
- export declare const SideNavigation: React.FC<SideNavigationProps>;
23
- export {};
24
- //# sourceMappingURL=SideNavigation.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SideNavigation.d.ts","sourceRoot":"","sources":["../../src/components/SideNavigation.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,kBAAkB,CAAC;AAE1B,UAAU,MAAM;IACd,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,IAAI;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,UAAU,mBAAmB;IAC3B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAqDxD,CAAC"}
@@ -1,17 +0,0 @@
1
- import React from 'react';
2
- import './components.css';
3
- interface Unit {
4
- id: string;
5
- title: string;
6
- isLocked?: boolean;
7
- }
8
- interface SideNavigationHUProps {
9
- units: Unit[];
10
- currentUnit?: string;
11
- onUnitSelect?: (unitId: string) => void;
12
- courseTitle?: string;
13
- courseLevel?: string;
14
- }
15
- export declare const SideNavigationHU: React.FC<SideNavigationHUProps>;
16
- export {};
17
- //# sourceMappingURL=SideNavigationHU.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SideNavigationHU.d.ts","sourceRoot":"","sources":["../../src/components/SideNavigationHU.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,kBAAkB,CAAC;AAE1B,UAAU,IAAI;IACV,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,qBAAqB;IAC3B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA0D5D,CAAC"}
@@ -1,207 +0,0 @@
1
- /* Sidebar 组件样式 - BEM 命名规范 */
2
-
3
- .sidebar {
4
- display: flex;
5
- flex-direction: column;
6
- width: 280px;
7
- height: 100vh;
8
- background-color: var(--sidebar-bg-color, #ffffff);
9
- border-right: 1px solid var(--sidebar-border-color, #e0e0e0);
10
- transition: width var(--transition-normal, 250ms ease-in-out),
11
- transform var(--transition-normal, 250ms ease-in-out);
12
- overflow-y: auto;
13
- position: relative;
14
- }
15
-
16
- .sidebar--collapsed {
17
- width: 64px;
18
- }
19
-
20
- .sidebar--loading .sidebar__unit-list,
21
- .sidebar--loading .sidebar__header {
22
- opacity: 0.3;
23
- pointer-events: none;
24
- }
25
-
26
- /* 头部区域 */
27
- .sidebar__header {
28
- display: flex;
29
- align-items: center;
30
- padding: var(--spacing-lg, 24px) var(--spacing-md, 16px) var(--spacing-md, 16px);
31
- border-bottom: 1px solid var(--sidebar-border-color, #e0e0e0);
32
- margin-bottom: var(--spacing-md, 16px);
33
- }
34
-
35
- .sidebar__toggle-btn {
36
- width: 32px;
37
- height: 32px;
38
- border: none;
39
- background: none;
40
- cursor: pointer;
41
- border-radius: var(--border-radius-sm, 4px);
42
- display: flex;
43
- align-items: center;
44
- justify-content: center;
45
- color: var(--sidebar-text-color, #333333);
46
- margin-right: var(--spacing-sm, 8px);
47
- }
48
-
49
- .sidebar__toggle-btn:hover {
50
- background-color: var(--sidebar-hover-bg, rgba(0, 0, 0, 0.05));
51
- }
52
-
53
- .sidebar__course-info {
54
- flex: 1;
55
- }
56
-
57
- .sidebar__course-title {
58
- font-size: var(--font-size-lg, 16px);
59
- font-weight: var(--font-weight-bold, 600);
60
- color: var(--sidebar-text-color, #333333);
61
- margin: 0 0 var(--spacing-xs, 4px) 0;
62
- }
63
-
64
- .sidebar__course-level {
65
- font-size: var(--font-size-sm, 12px);
66
- color: var(--sidebar-text-secondary, #666666);
67
- }
68
-
69
- /* 内容区域 */
70
- .sidebar__content {
71
- flex: 1;
72
- padding: 0 var(--spacing-md, 16px);
73
- }
74
-
75
- .sidebar__unit-list {
76
- list-style: none;
77
- padding: 0;
78
- margin: 0;
79
- }
80
-
81
- /* 单元项样式 */
82
- .sidebar__unit-item {
83
- margin-bottom: var(--spacing-xs, 4px);
84
- border-radius: var(--border-radius-sm, 4px);
85
- cursor: pointer;
86
- transition: background-color var(--transition-fast, 150ms ease-in-out);
87
- padding: var(--spacing-sm, 8px) var(--spacing-md, 16px);
88
- }
89
-
90
- .sidebar__unit-item:hover {
91
- background-color: var(--sidebar-hover-bg, rgba(0, 0, 0, 0.03));
92
- }
93
-
94
- .sidebar__unit-item--active {
95
- background-color: var(--sidebar-active-bg, #e3f2fd);
96
- border-left: 3px solid var(--sidebar-active-border, #1865f2);
97
- font-weight: var(--font-weight-medium, 500);
98
- }
99
-
100
- .sidebar__unit-item--completed {
101
- opacity: 0.8;
102
- }
103
-
104
- .sidebar__unit-item--in-progress {
105
- font-weight: var(--font-weight-medium, 500);
106
- }
107
-
108
- .sidebar__unit-item--not-started {
109
- opacity: 0.6;
110
- }
111
-
112
- .sidebar__unit-item__content {
113
- display: flex;
114
- align-items: center;
115
- margin-bottom: var(--spacing-xs, 4px);
116
- }
117
-
118
- .sidebar__unit-item__icon {
119
- width: 20px;
120
- height: 20px;
121
- margin-right: var(--spacing-sm, 8px);
122
- flex-shrink: 0;
123
- display: flex;
124
- align-items: center;
125
- justify-content: center;
126
- font-size: var(--font-size-md, 14px);
127
- }
128
-
129
- .sidebar__unit-item__title {
130
- flex: 1;
131
- font-size: var(--font-size-md, 14px);
132
- color: var(--sidebar-text-color, #333333);
133
- white-space: nowrap;
134
- overflow: hidden;
135
- text-overflow: ellipsis;
136
- }
137
-
138
- /* 进度条区域 */
139
- .sidebar__unit-item__progress {
140
- display: flex;
141
- align-items: center;
142
- gap: var(--spacing-sm, 8px);
143
- margin-top: var(--spacing-xs, 4px);
144
- }
145
-
146
- .progress-percentage {
147
- font-size: var(--font-size-sm, 12px);
148
- color: var(--sidebar-text-secondary, #666666);
149
- min-width: 30px;
150
- text-align: right;
151
- }
152
-
153
- /* 状态样式 */
154
- .sidebar__loading,
155
- .sidebar__error,
156
- .sidebar__empty {
157
- padding: var(--spacing-xl, 32px) var(--spacing-md, 16px);
158
- text-align: center;
159
- color: var(--sidebar-text-secondary, #666666);
160
- font-size: var(--font-size-md, 14px);
161
- }
162
-
163
- .sidebar__error {
164
- color: var(--sidebar-error-color, #dc3545);
165
- }
166
-
167
- /* 响应式设计 */
168
- @media (max-width: 600px) {
169
- .sidebar {
170
- position: fixed;
171
- top: 0;
172
- left: 0;
173
- height: 100vh;
174
- z-index: 1000;
175
- transform: translateX(-100%);
176
- }
177
-
178
- .sidebar--expanded {
179
- transform: translateX(0);
180
- }
181
- }
182
-
183
- /* 折叠状态下的样式 */
184
- .sidebar--collapsed .sidebar__course-info,
185
- .sidebar--collapsed .sidebar__unit-item__title,
186
- .sidebar--collapsed .sidebar__unit-item__progress {
187
- display: none;
188
- }
189
-
190
- .sidebar--collapsed .sidebar__header {
191
- justify-content: center;
192
- padding: var(--spacing-md, 16px);
193
- }
194
-
195
- .sidebar--collapsed .sidebar__toggle-btn {
196
- margin-right: 0;
197
- }
198
-
199
- .sidebar--collapsed .sidebar__unit-item {
200
- display: flex;
201
- justify-content: center;
202
- padding: var(--spacing-sm, 8px);
203
- }
204
-
205
- .sidebar--collapsed .sidebar__unit-item__content {
206
- margin-bottom: 0;
207
- }
@@ -1,98 +0,0 @@
1
- /* Submenu 根容器 */
2
- .submenu-container {
3
- position: relative; /* 确保 submenu 面板能够相对定位 */
4
- display: inline-block; /* 包裹触发器,使其不占据整行 */
5
- }
6
-
7
- /* Submenu 触发器 */
8
- .submenu-trigger {
9
- /* 触发器的默认样式 */
10
- cursor: pointer;
11
- }
12
-
13
- /* Submenu 面板 (包含所有菜单项的容器) */
14
- .submenu-panel {
15
- position: absolute;
16
- z-index: 1000; /* 确保浮动菜单在其他内容之上 */
17
- background-color: var(--submenu-background-color, #fff);
18
- border: var(--submenu-border, 1px solid #ddd);
19
- border-radius: var(--submenu-border-radius, 4px);
20
- box-shadow: var(--submenu-shadow, 0 4px 12px rgba(0, 0, 0, 0.1));
21
- padding: var(--submenu-padding, 8px 0);
22
- min-width: var(--submenu-min-width, 160px);
23
-
24
- /* 初始隐藏状态 */
25
- opacity: 0;
26
- visibility: hidden;
27
- transform: translateY(var(--submenu-transform-y, -10px)); /* 初始位移,用于动画 */
28
- transition:
29
- opacity var(--submenu-transition-duration, 0.2s) ease-out,
30
- transform var(--submenu-transition-duration, 0.2s) ease-out,
31
- visibility var(--submenu-transition-duration, 0.2s) ease-out;
32
-
33
- /* 菜单项布局 */
34
- display: flex;
35
- flex-direction: column;
36
- gap: var(--submenu-item-gap, 4px); /* 菜单项之间的间距 */
37
- }
38
-
39
- /* Submenu 面板的打开状态 */
40
- .submenu-panel.is-open {
41
- opacity: 1;
42
- visibility: visible;
43
- transform: translateY(0); /* 恢复到正常位置 */
44
- }
45
-
46
- /* Submenu 面板定位 (根据 position prop 动态添加类名) */
47
- .submenu-panel.position-bottom {
48
- top: 100%;
49
- left: 0;
50
- /* 调整 transform 初始值以匹配方向 */
51
- transform: translateY(var(--submenu-transform-y-bottom, 10px));
52
- }
53
- .submenu-panel.position-bottom.alignment-end {
54
- left: auto;
55
- right: 0;
56
- }
57
- /* 其他 position (top, left, right) 和 alignment 类名类似 */
58
- /* 例如: */
59
- .submenu-panel.position-top {
60
- bottom: 100%;
61
- left: 0;
62
- transform: translateY(var(--submenu-transform-y-top, -10px));
63
- }
64
- /* ... 更多定位样式 ... */
65
-
66
- /* 单个菜单项 */
67
- .submenu-item {
68
- display: flex;
69
- align-items: center;
70
- padding: var(--submenu-item-padding, 8px 16px);
71
- color: var(--submenu-item-color, #333);
72
- font-size: var(--submenu-item-font-size, 14px);
73
- cursor: pointer;
74
- text-decoration: none; /* 如果菜单项是链接 */
75
- white-space: nowrap; /* 防止文本换行 */
76
- transition: background-color var(--submenu-item-transition-duration, 0.15s) ease-in-out,
77
- color var(--submenu-item-transition-duration, 0.15s) ease-in-out;
78
- }
79
-
80
- /* 菜单项悬停/激活状态 */
81
- .submenu-item:hover,
82
- .submenu-item.is-active { /* is-active 可用于键盘导航的焦点状态 */
83
- background-color: var(--submenu-item-hover-bg-color, #f0f0f0);
84
- color: var(--submenu-item-hover-color, #000);
85
- }
86
-
87
- /* 菜单项禁用状态 */
88
- .submenu-item.is-disabled {
89
- color: var(--submenu-item-disabled-color, #999);
90
- cursor: not-allowed;
91
- opacity: 0.6;
92
- }
93
-
94
- /* 菜单项图标 (如果存在) */
95
- .submenu-item-icon {
96
- margin-right: var(--submenu-item-icon-margin-right, 8px);
97
- /* 图标大小和颜色 */
98
- }