@mathwiz/ui-components 0.1.5 → 0.1.7

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 (54) hide show
  1. package/README.md +35 -1
  2. package/dist/App.css +570 -0
  3. package/dist/components/Button/Button.css +214 -0
  4. package/dist/components/ContentAccordion/ContentAccordion.css +268 -0
  5. package/dist/components/MathWizHeader/MathWizHeader.css +333 -0
  6. package/dist/components/MathWizHeader/MathWizHeader.d.ts.map +1 -1
  7. package/dist/components/MathWizHeader/MathWizHeader.types.d.ts +15 -0
  8. package/dist/components/MathWizHeader/MathWizHeader.types.d.ts.map +1 -1
  9. package/dist/components/Sidebar/Sidebar.css +207 -0
  10. package/dist/components/Submenu/Submenu.css +98 -0
  11. package/dist/components/UserProfile/UserProfile.css +141 -0
  12. package/dist/components/components.css +222 -0
  13. package/dist/components/radarAbility/AbilityAssessmentDashboard/AbilityAssessmentDashboard.module.css +60 -0
  14. package/dist/config/index.d.ts +4 -0
  15. package/dist/config/index.d.ts.map +1 -0
  16. package/dist/config/types.d.ts +117 -0
  17. package/dist/config/types.d.ts.map +1 -0
  18. package/dist/config/utils.d.ts +72 -0
  19. package/dist/config/utils.d.ts.map +1 -0
  20. package/dist/data-sources/api-data-source.d.ts +35 -0
  21. package/dist/data-sources/api-data-source.d.ts.map +1 -0
  22. package/dist/data-sources/custom-data-source.d.ts +59 -0
  23. package/dist/data-sources/custom-data-source.d.ts.map +1 -0
  24. package/dist/data-sources/factory.d.ts +61 -0
  25. package/dist/data-sources/factory.d.ts.map +1 -0
  26. package/dist/data-sources/index.d.ts +7 -0
  27. package/dist/data-sources/index.d.ts.map +1 -0
  28. package/dist/data-sources/mock-data-source.d.ts +44 -0
  29. package/dist/data-sources/mock-data-source.d.ts.map +1 -0
  30. package/dist/data-sources/types.d.ts +119 -0
  31. package/dist/data-sources/types.d.ts.map +1 -0
  32. package/dist/demo/configurable-demo.d.ts +4 -0
  33. package/dist/demo/configurable-demo.d.ts.map +1 -0
  34. package/dist/index.cjs +22 -21
  35. package/dist/index.cjs.map +1 -1
  36. package/dist/index.css +63 -0
  37. package/dist/index.d.ts +1 -0
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.mjs +2051 -1564
  40. package/dist/index.mjs.map +1 -1
  41. package/dist/mocks/handlers.d.ts.map +1 -1
  42. package/dist/pages/GradeUnitBrowserPage/GradeUnitBrowserContext.d.ts +2 -4
  43. package/dist/pages/GradeUnitBrowserPage/GradeUnitBrowserContext.d.ts.map +1 -1
  44. package/dist/pages/GradeUnitBrowserPage/GradeUnitBrowserPage.css +250 -0
  45. package/dist/pages/GradeUnitBrowserPage/GradeUnitBrowserPage.d.ts.map +1 -1
  46. package/dist/pages/GradeUnitBrowserPage/types.d.ts +10 -0
  47. package/dist/pages/GradeUnitBrowserPage/types.d.ts.map +1 -1
  48. package/dist/services/courseService.d.ts.map +1 -1
  49. package/dist/stories/button.css +30 -0
  50. package/dist/stories/header.css +32 -0
  51. package/dist/stories/page.css +68 -0
  52. package/dist/styles/index.css +154 -0
  53. package/package.json +4 -2
  54. package/dist/ui-components.css +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/mocks/handlers.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwG/B,CAAC;AAKF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;CAUzB,CAAC;AAGF,eAAO,MAAM,gBAAgB;;;;;;;;;CAM5B,CAAC;AAGF,eAAO,MAAM,QAAQ,6BA+HpB,CAAC"}
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/mocks/handlers.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwG/B,CAAC;AAKF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;CAUzB,CAAC;AAGF,eAAO,MAAM,gBAAgB;;;;;;;;;CAM5B,CAAC;AAGF,eAAO,MAAM,QAAQ,6BAuKpB,CAAC"}
@@ -1,8 +1,6 @@
1
1
  import React from 'react';
2
- import type { GradeUnitBrowserContextType } from './types';
2
+ import type { GradeUnitBrowserContextType, GradeUnitBrowserProviderProps } from './types';
3
3
  export declare const GradeUnitBrowserContext: React.Context<GradeUnitBrowserContextType | null>;
4
4
  export declare const useGradeUnitBrowser: () => GradeUnitBrowserContextType;
5
- export declare const GradeUnitBrowserProvider: React.FC<{
6
- children: React.ReactNode;
7
- }>;
5
+ export declare const GradeUnitBrowserProvider: React.FC<GradeUnitBrowserProviderProps>;
8
6
  //# sourceMappingURL=GradeUnitBrowserContext.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GradeUnitBrowserContext.d.ts","sourceRoot":"","sources":["../../../src/pages/GradeUnitBrowserPage/GradeUnitBrowserContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsE,MAAM,OAAO,CAAC;AAK3F,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,SAAS,CAAC;AAK3D,eAAO,MAAM,uBAAuB,mDAA0D,CAAC;AAE/F,eAAO,MAAM,mBAAmB,mCAM/B,CAAC;AAGF,eAAO,MAAM,wBAAwB,EAAE,KAAK,CAAC,EAAE,CAAC;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,CA2K5E,CAAC"}
1
+ {"version":3,"file":"GradeUnitBrowserContext.d.ts","sourceRoot":"","sources":["../../../src/pages/GradeUnitBrowserPage/GradeUnitBrowserContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsE,MAAM,OAAO,CAAC;AAK3F,OAAO,KAAK,EAAE,2BAA2B,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAC;AAK1F,eAAO,MAAM,uBAAuB,mDAA0D,CAAC;AAE/F,eAAO,MAAM,mBAAmB,mCAM/B,CAAC;AAGF,eAAO,MAAM,wBAAwB,EAAE,KAAK,CAAC,EAAE,CAAC,6BAA6B,CAkN5E,CAAC"}
@@ -0,0 +1,250 @@
1
+ /* GradeUnitBrowserPage 样式 */
2
+
3
+ .grade-unit-browser-page {
4
+ display: grid;
5
+ grid-template-areas:
6
+ "header header"
7
+ "sidebar content";
8
+ grid-template-rows: auto 1fr;
9
+ grid-template-columns: 300px 1fr;
10
+ min-height: 100vh;
11
+ background-color: var(--page-background, #f8fafc);
12
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', sans-serif;
13
+ }
14
+
15
+ .grade-unit-browser-page--sidebar-collapsed {
16
+ grid-template-columns: 60px 1fr;
17
+ }
18
+
19
+ /* Header 区域 */
20
+ .header-area {
21
+ grid-area: header;
22
+ position: sticky;
23
+ top: 0;
24
+ z-index: 100;
25
+ background: white;
26
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
27
+ width: 100%;
28
+ }
29
+
30
+ /* Sidebar 区域 */
31
+ .sidebar-area {
32
+ grid-area: sidebar;
33
+ background: white;
34
+ border-right: 1px solid var(--border-color, #e2e8f0);
35
+ overflow-y: auto;
36
+ height: 100vh;
37
+ position: sticky;
38
+ top: 0;
39
+ }
40
+
41
+ /* 内容区域 */
42
+ .content-area {
43
+ grid-area: content;
44
+ padding: 24px;
45
+ overflow-y: auto;
46
+ overflow-x: hidden;
47
+ background: white;
48
+ min-height: calc(100vh - 80px);
49
+ width: 100%;
50
+ min-width: 0;
51
+ max-width: 100%;
52
+ box-sizing: border-box;
53
+ }
54
+
55
+ /* 防止内容撑开容器 - 类似 App.css 中 main-view 的处理 */
56
+ .content-area h1,
57
+ .content-area h2,
58
+ .content-area h3,
59
+ .content-area h4,
60
+ .content-area h5,
61
+ .content-area h6,
62
+ .content-area p,
63
+ .content-area div,
64
+ .content-area span {
65
+ max-width: 100%;
66
+ word-wrap: break-word;
67
+ overflow-wrap: break-word;
68
+ word-break: break-word;
69
+ white-space: normal;
70
+ box-sizing: border-box;
71
+ }
72
+
73
+ /* 加载状态 */
74
+ .loading-spinner {
75
+ display: flex;
76
+ justify-content: center;
77
+ align-items: center;
78
+ height: 200px;
79
+ color: var(--text-secondary, #64748b);
80
+ font-size: 16px;
81
+ }
82
+
83
+ .loading-spinner::before {
84
+ content: '';
85
+ width: 20px;
86
+ height: 20px;
87
+ border: 2px solid var(--border-color, #e2e8f0);
88
+ border-top: 2px solid var(--primary-color, #3b82f6);
89
+ border-radius: 50%;
90
+ animation: spin 1s linear infinite;
91
+ margin-right: 12px;
92
+ }
93
+
94
+ @keyframes spin {
95
+ 0% {
96
+ transform: rotate(0deg);
97
+ }
98
+
99
+ 100% {
100
+ transform: rotate(360deg);
101
+ }
102
+ }
103
+
104
+ /* 错误状态 */
105
+ .error-message {
106
+ text-align: center;
107
+ padding: 40px 20px;
108
+ color: var(--error-color, #dc2626);
109
+ background: var(--error-bg, #fef2f2);
110
+ border: 1px solid var(--error-border, #fecaca);
111
+ border-radius: 8px;
112
+ margin: 20px;
113
+ }
114
+
115
+ .retry-button {
116
+ display: block;
117
+ margin: 20px auto;
118
+ padding: 10px 20px;
119
+ background: var(--primary-color, #3b82f6);
120
+ color: white;
121
+ border: none;
122
+ border-radius: 6px;
123
+ cursor: pointer;
124
+ font-size: 14px;
125
+ transition: background-color 0.2s;
126
+ }
127
+
128
+ .retry-button:hover {
129
+ background: var(--primary-hover, #2563eb);
130
+ }
131
+
132
+ /* 空状态 */
133
+ .empty-state {
134
+ text-align: center;
135
+ padding: 60px 20px;
136
+ color: var(--text-secondary, #64748b);
137
+ }
138
+
139
+ .empty-state h3 {
140
+ margin: 0 0 8px 0;
141
+ font-size: 18px;
142
+ font-weight: 600;
143
+ }
144
+
145
+ .empty-state p {
146
+ margin: 0;
147
+ font-size: 14px;
148
+ }
149
+
150
+ /* 响应式设计 */
151
+ @media (max-width: 768px) {
152
+ .grade-unit-browser-page {
153
+ grid-template-areas:
154
+ "header"
155
+ "content";
156
+ grid-template-columns: 1fr;
157
+ }
158
+
159
+ .sidebar-area {
160
+ display: none;
161
+ }
162
+
163
+ .content-area {
164
+ padding: 16px;
165
+ min-height: calc(100vh - 60px);
166
+ }
167
+
168
+ /* 移动端侧边栏展开状态 */
169
+ .grade-unit-browser-page.sidebar-open {
170
+ grid-template-areas:
171
+ "header"
172
+ "sidebar"
173
+ "content";
174
+ }
175
+
176
+ .grade-unit-browser-page.sidebar-open .sidebar-area {
177
+ display: block;
178
+ height: auto;
179
+ position: relative;
180
+ border-right: none;
181
+ border-bottom: 1px solid var(--border-color, #e2e8f0);
182
+ }
183
+ }
184
+
185
+ @media (max-width: 480px) {
186
+ .content-area {
187
+ padding: 12px;
188
+ }
189
+
190
+ .error-message {
191
+ margin: 10px;
192
+ padding: 20px 16px;
193
+ }
194
+
195
+ .retry-button {
196
+ margin: 10px auto;
197
+ padding: 8px 16px;
198
+ font-size: 13px;
199
+ }
200
+ }
201
+
202
+ /* 暗色主题支持 */
203
+ @media (prefers-color-scheme: dark) {
204
+ .grade-unit-browser-page {
205
+ background-color: var(--page-background-dark, #0f172a);
206
+ color: var(--text-primary-dark, #f1f5f9);
207
+ }
208
+
209
+ .header-area,
210
+ .sidebar-area,
211
+ .content-area {
212
+ background: var(--surface-dark, #1e293b);
213
+ }
214
+
215
+ .sidebar-area {
216
+ border-right-color: var(--border-color-dark, #334155);
217
+ }
218
+
219
+ .error-message {
220
+ color: var(--error-color-dark, #f87171);
221
+ background: var(--error-bg-dark, #7f1d1d);
222
+ border-color: var(--error-border-dark, #b91c1c);
223
+ }
224
+ }
225
+
226
+ /* 无障碍性支持 */
227
+ .grade-unit-browser-page:focus {
228
+ outline: 2px solid var(--focus-ring, #3b82f6);
229
+ outline-offset: 2px;
230
+ }
231
+
232
+ .retry-button:focus {
233
+ outline: 2px solid var(--focus-ring, #3b82f6);
234
+ outline-offset: 2px;
235
+ }
236
+
237
+ /* 高对比度模式支持 */
238
+ @media (prefers-contrast: high) {
239
+ .grade-unit-browser-page {
240
+ border: 1px solid black;
241
+ }
242
+
243
+ .sidebar-area {
244
+ border-right: 2px solid black;
245
+ }
246
+
247
+ .retry-button {
248
+ border: 2px solid black;
249
+ }
250
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"GradeUnitBrowserPage.d.ts","sourceRoot":"","sources":["../../../src/pages/GradeUnitBrowserPage/GradeUnitBrowserPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAKzC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,4BAA4B,CAAC;AAGpC,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CA6HpE,CAAC"}
1
+ {"version":3,"file":"GradeUnitBrowserPage.d.ts","sourceRoot":"","sources":["../../../src/pages/GradeUnitBrowserPage/GradeUnitBrowserPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAC;AAKzC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,4BAA4B,CAAC;AAqIpC,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAMpE,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import type { UserData, KnowledgeItem, Lesson } from '../../types';
2
2
  import type { ExploreItem } from '../../components/MathWizHeader/MathWizHeader.types';
3
3
  import type { UserGradeUnitsProgressData } from '../../components/Sidebar/types';
4
+ import type { GradeUnitBrowserConfig } from '../../config/types';
4
5
  export interface PageState {
5
6
  loading: boolean;
6
7
  error: string | null;
@@ -14,6 +15,7 @@ export interface GradeUnitBrowserPageProps {
14
15
  className?: string;
15
16
  userInfo?: UserData | null;
16
17
  exploreMenu?: ExploreItem[];
18
+ config?: Partial<GradeUnitBrowserConfig>;
17
19
  }
18
20
  export interface GradeUnitBrowserContextType {
19
21
  userInfo: UserData | null;
@@ -24,11 +26,15 @@ export interface GradeUnitBrowserContextType {
24
26
  error: string | null;
25
27
  activeUnitId: string | null;
26
28
  activeLessonIds: string[];
29
+ config: GradeUnitBrowserConfig;
30
+ theme?: GradeUnitBrowserConfig['theme'];
31
+ enableVirtualization?: boolean;
27
32
  setLoading: (loading: boolean) => void;
28
33
  setError: (error: string | null) => void;
29
34
  setActiveUnit: (unitId: string | null) => void;
30
35
  toggleLesson: (lessonId: string) => void;
31
36
  loadPageData: (gradeId: string, userId: string) => Promise<void>;
37
+ updateConfig: (updates: Partial<GradeUnitBrowserConfig>) => void;
32
38
  }
33
39
  export interface ApiResponse<T> {
34
40
  data: T;
@@ -40,4 +46,8 @@ export interface LoadPageDataResult {
40
46
  exploreMenu: ExploreItem[];
41
47
  unitsData: UserGradeUnitsProgressData;
42
48
  }
49
+ export interface GradeUnitBrowserProviderProps {
50
+ children: React.ReactNode;
51
+ config?: Partial<GradeUnitBrowserConfig>;
52
+ }
43
53
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/pages/GradeUnitBrowserPage/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oDAAoD,CAAC;AACtF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAEjF,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,aAAa,EAAE,aAAa,KAAK,IAAI,CAAC;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,2BAA2B;IAE1C,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,SAAS,EAAE,0BAA0B,GAAG,IAAI,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAGlC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,EAAE,CAAC;IAG1B,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACzC,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC/C,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,IAAI,EAAE,CAAC,CAAC;IACR,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,SAAS,EAAE,0BAA0B,CAAC;CACvC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/pages/GradeUnitBrowserPage/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oDAAoD,CAAC;AACtF,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AACjF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjE,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,aAAa,EAAE,aAAa,KAAK,IAAI,CAAC;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC3B,WAAW,CAAC,EAAE,WAAW,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,2BAA2B;IAE1C,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,SAAS,EAAE,0BAA0B,GAAG,IAAI,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAGlC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,EAAE,CAAC;IAG1B,MAAM,EAAE,sBAAsB,CAAC;IAC/B,KAAK,CAAC,EAAE,sBAAsB,CAAC,OAAO,CAAC,CAAC;IACxC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAG/B,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACzC,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC/C,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,YAAY,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,sBAAsB,CAAC,KAAK,IAAI,CAAC;CAClE;AAED,MAAM,WAAW,WAAW,CAAC,CAAC;IAC5B,IAAI,EAAE,CAAC,CAAC;IACR,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,WAAW,EAAE,CAAC;IAC3B,SAAS,EAAE,0BAA0B,CAAC;CACvC;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC;CAC1C"}
@@ -1 +1 @@
1
- {"version":3,"file":"courseService.d.ts","sourceRoot":"","sources":["../../src/services/courseService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGzD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,aAAa,GAAG,aAAa,GAAG,WAAW,CAAC;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,KAAK,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,MAAM,EAAE,aAAa,GAAG,aAAa,GAAG,WAAW,CAAC;QACpD,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,OAAO,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,aAAa,GAAG,aAAa,GAAG,WAAW,CAAC;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,cAAM,aAAa;IACjB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;gBAEV,OAAO,GAAE,MAAe,EAAE,KAAK,GAAE,MAAuB;IAKpE,OAAO,CAAC,cAAc;YAOR,aAAa;IAiBrB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAMpD,oBAAoB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAUlE,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAUzF,yBAAyB,CAC7B,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,yBAAyB,EAAE,GAC3C,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,KAAK,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,OAAO,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IAalG,oBAAoB,CACxB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,WAAW,GAAG,aAAa,GAAG,aAAa,GAClD,OAAO,CAAC,IAAI,CAAC;IAWhB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7B,QAAQ,IAAI,MAAM;CAGnB;AAGD,eAAO,MAAM,aAAa,eAAsB,CAAC"}
1
+ {"version":3,"file":"courseService.d.ts","sourceRoot":"","sources":["../../src/services/courseService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGzD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,aAAa,GAAG,aAAa,GAAG,WAAW,CAAC;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,KAAK,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,MAAM,EAAE,aAAa,GAAG,aAAa,GAAG,WAAW,CAAC;QACpD,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,EAAE,OAAO,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,aAAa,GAAG,aAAa,GAAG,WAAW,CAAC;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,cAAM,aAAa;IACjB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAS;gBAEV,OAAO,GAAE,MAAkB,EAAE,KAAK,GAAE,MAAuB;IAKvE,OAAO,CAAC,cAAc;YAOR,aAAa;IAiBrB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAMpD,oBAAoB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAUlE,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAUzF,yBAAyB,CAC7B,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,yBAAyB,EAAE,GAC3C,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,KAAK,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,OAAO,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IAalG,oBAAoB,CACxB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,WAAW,GAAG,aAAa,GAAG,aAAa,GAClD,OAAO,CAAC,IAAI,CAAC;IAWhB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK7B,QAAQ,IAAI,MAAM;CAGnB;AAGD,eAAO,MAAM,aAAa,eAAsB,CAAC"}
@@ -0,0 +1,30 @@
1
+ .storybook-button {
2
+ display: inline-block;
3
+ cursor: pointer;
4
+ border: 0;
5
+ border-radius: 3em;
6
+ font-weight: 700;
7
+ line-height: 1;
8
+ font-family: 'Nunito Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
9
+ }
10
+ .storybook-button--primary {
11
+ background-color: #555ab9;
12
+ color: white;
13
+ }
14
+ .storybook-button--secondary {
15
+ box-shadow: rgba(0, 0, 0, 0.15) 0px 0px 0px 1px inset;
16
+ background-color: transparent;
17
+ color: #333;
18
+ }
19
+ .storybook-button--small {
20
+ padding: 10px 16px;
21
+ font-size: 12px;
22
+ }
23
+ .storybook-button--medium {
24
+ padding: 11px 20px;
25
+ font-size: 14px;
26
+ }
27
+ .storybook-button--large {
28
+ padding: 12px 24px;
29
+ font-size: 16px;
30
+ }
@@ -0,0 +1,32 @@
1
+ .storybook-header {
2
+ display: flex;
3
+ justify-content: space-between;
4
+ align-items: center;
5
+ border-bottom: 1px solid rgba(0, 0, 0, 0.1);
6
+ padding: 15px 20px;
7
+ font-family: 'Nunito Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
8
+ }
9
+
10
+ .storybook-header svg {
11
+ display: inline-block;
12
+ vertical-align: top;
13
+ }
14
+
15
+ .storybook-header h1 {
16
+ display: inline-block;
17
+ vertical-align: top;
18
+ margin: 6px 0 6px 10px;
19
+ font-weight: 700;
20
+ font-size: 20px;
21
+ line-height: 1;
22
+ }
23
+
24
+ .storybook-header button + button {
25
+ margin-left: 10px;
26
+ }
27
+
28
+ .storybook-header .welcome {
29
+ margin-right: 10px;
30
+ color: #333;
31
+ font-size: 14px;
32
+ }
@@ -0,0 +1,68 @@
1
+ .storybook-page {
2
+ margin: 0 auto;
3
+ padding: 48px 20px;
4
+ max-width: 600px;
5
+ color: #333;
6
+ font-size: 14px;
7
+ line-height: 24px;
8
+ font-family: 'Nunito Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
9
+ }
10
+
11
+ .storybook-page h2 {
12
+ display: inline-block;
13
+ vertical-align: top;
14
+ margin: 0 0 4px;
15
+ font-weight: 700;
16
+ font-size: 32px;
17
+ line-height: 1;
18
+ }
19
+
20
+ .storybook-page p {
21
+ margin: 1em 0;
22
+ }
23
+
24
+ .storybook-page a {
25
+ color: inherit;
26
+ }
27
+
28
+ .storybook-page ul {
29
+ margin: 1em 0;
30
+ padding-left: 30px;
31
+ }
32
+
33
+ .storybook-page li {
34
+ margin-bottom: 8px;
35
+ }
36
+
37
+ .storybook-page .tip {
38
+ display: inline-block;
39
+ vertical-align: top;
40
+ margin-right: 10px;
41
+ border-radius: 1em;
42
+ background: #e7fdd8;
43
+ padding: 4px 12px;
44
+ color: #357a14;
45
+ font-weight: 700;
46
+ font-size: 11px;
47
+ line-height: 12px;
48
+ }
49
+
50
+ .storybook-page .tip-wrapper {
51
+ margin-top: 40px;
52
+ margin-bottom: 40px;
53
+ font-size: 13px;
54
+ line-height: 20px;
55
+ }
56
+
57
+ .storybook-page .tip-wrapper svg {
58
+ display: inline-block;
59
+ vertical-align: top;
60
+ margin-top: 3px;
61
+ margin-right: 4px;
62
+ width: 12px;
63
+ height: 12px;
64
+ }
65
+
66
+ .storybook-page .tip-wrapper svg path {
67
+ fill: #1ea7fd;
68
+ }
@@ -0,0 +1,154 @@
1
+ /* 组件库统一样式入口文件 */
2
+
3
+ /* ==================== 组件样式导入 ==================== */
4
+
5
+ /* 基础组件样式 */
6
+ @import '../components/Button/Button.css';
7
+
8
+ /* 布局组件样式 */
9
+ @import '../components/MathWizHeader/MathWizHeader.css';
10
+ @import '../components/Sidebar/Sidebar.css';
11
+ @import '../components/ContentAccordion/ContentAccordion.css';
12
+
13
+ /* 其他组件样式 */
14
+ @import '../components/Submenu/Submenu.css';
15
+ @import '../components/UserProfile/UserProfile.css';
16
+
17
+ /* 页面级组件样式 */
18
+ @import '../pages/GradeUnitBrowserPage/GradeUnitBrowserPage.css';
19
+
20
+ /* ==================== CSS 变量定义 (设计令牌) ==================== */
21
+ :root {
22
+ /* 主色调 */
23
+ --primary-color: #3b82f6;
24
+ --primary-hover: #2563eb;
25
+ --primary-active: #1d4ed8;
26
+
27
+ /* 背景色 */
28
+ --bg-primary: #ffffff;
29
+ --bg-secondary: #f8fafc;
30
+ --bg-tertiary: #f1f5f9;
31
+
32
+ /* 文字色 */
33
+ --text-primary: #1e293b;
34
+ --text-secondary: #64748b;
35
+ --text-tertiary: #94a3b8;
36
+
37
+ /* 边框色 */
38
+ --border-light: #e2e8f0;
39
+ --border-medium: #cbd5e1;
40
+ --border-dark: #94a3b8;
41
+
42
+ /* 状态色 */
43
+ --success-color: #10b981;
44
+ --warning-color: #f59e0b;
45
+ --error-color: #ef4444;
46
+ --info-color: #3b82f6;
47
+
48
+ /* 阴影 */
49
+ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
50
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
51
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
52
+
53
+ /* 圆角 */
54
+ --radius-sm: 0.25rem;
55
+ --radius-md: 0.375rem;
56
+ --radius-lg: 0.5rem;
57
+ --radius-xl: 0.75rem;
58
+
59
+ /* 间距 */
60
+ --spacing-xs: 0.25rem;
61
+ --spacing-sm: 0.5rem;
62
+ --spacing-md: 1rem;
63
+ --spacing-lg: 1.5rem;
64
+ --spacing-xl: 2rem;
65
+ --spacing-2xl: 3rem;
66
+
67
+ /* 字体大小 */
68
+ --text-xs: 0.75rem;
69
+ --text-sm: 0.875rem;
70
+ --text-base: 1rem;
71
+ --text-lg: 1.125rem;
72
+ --text-xl: 1.25rem;
73
+ --text-2xl: 1.5rem;
74
+ --text-3xl: 1.875rem;
75
+
76
+ /* 字体粗细 */
77
+ --font-normal: 400;
78
+ --font-medium: 500;
79
+ --font-semibold: 600;
80
+ --font-bold: 700;
81
+
82
+ /* 渐变背景 */
83
+ --header-bg: linear-gradient(to right, #8b5cf6, #ec4899, #ef4444);
84
+ --sidebar-bg: linear-gradient(180deg, #f8fafc 0%, #e2e8f0 100%);
85
+ }
86
+
87
+ /* ==================== 全局重置和基础样式 ==================== */
88
+
89
+ * {
90
+ box-sizing: border-box;
91
+ margin: 0;
92
+ padding: 0;
93
+ }
94
+
95
+ body {
96
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
97
+ 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
98
+ sans-serif;
99
+ -webkit-font-smoothing: antialiased;
100
+ -moz-osx-font-smoothing: grayscale;
101
+ line-height: 1.5;
102
+ color: var(--text-primary);
103
+ background-color: var(--bg-primary);
104
+ }
105
+
106
+ /* 链接样式重置 */
107
+ a {
108
+ color: inherit;
109
+ text-decoration: none;
110
+ }
111
+
112
+ a:hover {
113
+ text-decoration: underline;
114
+ }
115
+
116
+ /* 按钮样式重置 */
117
+ button {
118
+ border: none;
119
+ background: none;
120
+ cursor: pointer;
121
+ font-family: inherit;
122
+ }
123
+
124
+ button:disabled {
125
+ cursor: not-allowed;
126
+ opacity: 0.6;
127
+ }
128
+
129
+ /* 输入框样式重置 */
130
+ input, textarea, select {
131
+ font-family: inherit;
132
+ border: 1px solid var(--border-medium);
133
+ border-radius: var(--radius-md);
134
+ padding: var(--spacing-sm) var(--spacing-md);
135
+ background-color: var(--bg-primary);
136
+ }
137
+
138
+ input:focus, textarea:focus, select:focus {
139
+ outline: none;
140
+ border-color: var(--primary-color);
141
+ box-shadow: 0 0 0 3px rgb(59 130 246 / 0.1);
142
+ }
143
+
144
+ /* 列表样式重置 */
145
+ ul, ol {
146
+ list-style: none;
147
+ }
148
+
149
+ /* 图片样式重置 */
150
+ img {
151
+ max-width: 100%;
152
+ height: auto;
153
+ display: block;
154
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@mathwiz/ui-components",
3
3
  "private": false,
4
- "version": "0.1.5",
4
+ "version": "0.1.7",
5
5
  "description": "A collection of reusable UI components for React applications within the mathwiz ecosystem.",
6
6
  "main": "dist/index.cjs",
7
7
  "module": "dist/index.mjs",
@@ -39,8 +39,9 @@
39
39
  "type": "module",
40
40
  "scripts": {
41
41
  "dev": "vite",
42
- "build": "vite build && npm run build:types",
42
+ "build": "vite build && npm run build:types && npm run build:copy-css",
43
43
  "build:types": "tsc -p tsconfig.lib.json",
44
+ "build:copy-css": "node scripts/copy-css.js",
44
45
  "lint": "eslint .",
45
46
  "preview": "vite preview",
46
47
  "storybook": "storybook dev -p 6006",
@@ -92,6 +93,7 @@
92
93
  "typescript": "~5.8.3",
93
94
  "typescript-eslint": "^8.39.1",
94
95
  "vite": "^7.1.2",
96
+ "vite-plugin-css-injected-by-js": "^3.5.2",
95
97
  "vitest": "^3.2.4"
96
98
  },
97
99
  "msw": {