appclean 1.9.0 → 2.0.2
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.
- package/.github/workflows/npm-publish.yml +61 -0
- package/DEVELOPMENT.md +84 -0
- package/GUI_IMPLEMENTATION_STATUS.md +143 -0
- package/MD_Files/INDEX.md +51 -0
- package/PHASE2_COMPLETION.md +281 -0
- package/PHASE3_COMPLETION.md +364 -0
- package/README.md +411 -91
- package/RELEASE_GUIDE.md +236 -0
- package/assets/logo.svg +34 -0
- package/dist/core/appUpdateChecker.js +12 -16
- package/dist/core/appUpdateChecker.js.map +1 -1
- package/dist/core/detector.js +14 -18
- package/dist/core/detector.js.map +1 -1
- package/dist/core/duplicateFileFinder.js +12 -19
- package/dist/core/duplicateFileFinder.js.map +1 -1
- package/dist/core/orphanedDependencyDetector.js +19 -26
- package/dist/core/orphanedDependencyDetector.js.map +1 -1
- package/dist/core/performanceOptimizer.js +6 -10
- package/dist/core/performanceOptimizer.js.map +1 -1
- package/dist/core/permissionHandler.js +21 -25
- package/dist/core/permissionHandler.js.map +1 -1
- package/dist/core/pluginSystem.js +9 -13
- package/dist/core/pluginSystem.js.map +1 -1
- package/dist/core/removalRecorder.js +12 -19
- package/dist/core/removalRecorder.js.map +1 -1
- package/dist/core/remover.js +59 -66
- package/dist/core/remover.js.map +1 -1
- package/dist/core/reportGenerator.d.ts +1 -1
- package/dist/core/reportGenerator.d.ts.map +1 -1
- package/dist/core/reportGenerator.js +27 -34
- package/dist/core/reportGenerator.js.map +1 -1
- package/dist/core/scheduledCleanup.js +23 -30
- package/dist/core/scheduledCleanup.js.map +1 -1
- package/dist/core/serviceFileDetector.js +24 -31
- package/dist/core/serviceFileDetector.js.map +1 -1
- package/dist/core/verificationModule.js +10 -14
- package/dist/core/verificationModule.js.map +1 -1
- package/dist/index.js +118 -156
- package/dist/index.js.map +1 -1
- package/dist/managers/brewManager.js +30 -37
- package/dist/managers/brewManager.js.map +1 -1
- package/dist/managers/customManager.js +23 -30
- package/dist/managers/customManager.js.map +1 -1
- package/dist/managers/linuxManager.js +29 -36
- package/dist/managers/linuxManager.js.map +1 -1
- package/dist/managers/npmManager.js +27 -34
- package/dist/managers/npmManager.js.map +1 -1
- package/dist/types/index.js +1 -2
- package/dist/ui/client/api/client.d.ts +24 -0
- package/dist/ui/client/api/client.d.ts.map +1 -0
- package/dist/ui/client/api/client.js +100 -0
- package/dist/ui/client/api/client.js.map +1 -0
- package/dist/ui/client/app.d.ts +7 -0
- package/dist/ui/client/app.d.ts.map +1 -0
- package/dist/ui/client/app.js +75 -0
- package/dist/ui/client/app.js.map +1 -0
- package/dist/ui/client/index.html +107 -0
- package/dist/ui/client/pages/appDetails.d.ts +8 -0
- package/dist/ui/client/pages/appDetails.d.ts.map +1 -0
- package/dist/ui/client/pages/appDetails.js +287 -0
- package/dist/ui/client/pages/appDetails.js.map +1 -0
- package/dist/ui/client/pages/appSearch.d.ts +2 -0
- package/dist/ui/client/pages/appSearch.d.ts.map +1 -0
- package/dist/ui/client/pages/appSearch.js +221 -0
- package/dist/ui/client/pages/appSearch.js.map +1 -0
- package/dist/ui/client/pages/dashboard.d.ts +2 -0
- package/dist/ui/client/pages/dashboard.d.ts.map +1 -0
- package/dist/ui/client/pages/dashboard.js +175 -0
- package/dist/ui/client/pages/dashboard.js.map +1 -0
- package/dist/ui/client/pages/settings.d.ts +7 -0
- package/dist/ui/client/pages/settings.d.ts.map +1 -0
- package/dist/ui/client/pages/settings.js +279 -0
- package/dist/ui/client/pages/settings.js.map +1 -0
- package/dist/ui/client/state/appStore.d.ts +38 -0
- package/dist/ui/client/state/appStore.d.ts.map +1 -0
- package/dist/ui/client/state/appStore.js +130 -0
- package/dist/ui/client/state/appStore.js.map +1 -0
- package/dist/ui/client/state/dashboardStore.d.ts +31 -0
- package/dist/ui/client/state/dashboardStore.d.ts.map +1 -0
- package/dist/ui/client/state/dashboardStore.js +76 -0
- package/dist/ui/client/state/dashboardStore.js.map +1 -0
- package/dist/ui/client/state/uiStore.d.ts +43 -0
- package/dist/ui/client/state/uiStore.d.ts.map +1 -0
- package/dist/ui/client/state/uiStore.js +109 -0
- package/dist/ui/client/state/uiStore.js.map +1 -0
- package/dist/ui/client/styles/animations.css +349 -0
- package/dist/ui/client/styles/base.css +214 -0
- package/dist/ui/client/styles/components.css +400 -0
- package/dist/ui/client/styles/layout.css +224 -0
- package/dist/ui/client/styles/variables.css +140 -0
- package/dist/ui/client/utils/events.d.ts +19 -0
- package/dist/ui/client/utils/events.d.ts.map +1 -0
- package/dist/ui/client/utils/events.js +54 -0
- package/dist/ui/client/utils/events.js.map +1 -0
- package/dist/ui/client/utils/formatting.d.ts +11 -0
- package/dist/ui/client/utils/formatting.d.ts.map +1 -0
- package/dist/ui/client/utils/formatting.js +104 -0
- package/dist/ui/client/utils/formatting.js.map +1 -0
- package/dist/ui/client/utils/router.d.ts +25 -0
- package/dist/ui/client/utils/router.d.ts.map +1 -0
- package/dist/ui/client/utils/router.js +90 -0
- package/dist/ui/client/utils/router.js.map +1 -0
- package/dist/ui/guiServer.d.ts +11 -5
- package/dist/ui/guiServer.d.ts.map +1 -1
- package/dist/ui/guiServer.js +180 -501
- package/dist/ui/guiServer.js.map +1 -1
- package/dist/ui/menu.js +18 -27
- package/dist/ui/menu.js.map +1 -1
- package/dist/ui/prompts.js +34 -47
- package/dist/ui/prompts.js.map +1 -1
- package/dist/ui/server/middleware/errorHandler.d.ts +19 -0
- package/dist/ui/server/middleware/errorHandler.d.ts.map +1 -0
- package/dist/ui/server/middleware/errorHandler.js +100 -0
- package/dist/ui/server/middleware/errorHandler.js.map +1 -0
- package/dist/ui/server/routes/apps.d.ts +8 -0
- package/dist/ui/server/routes/apps.d.ts.map +1 -0
- package/dist/ui/server/routes/apps.js +74 -0
- package/dist/ui/server/routes/apps.js.map +1 -0
- package/dist/ui/server/routes/dashboard.d.ts +4 -0
- package/dist/ui/server/routes/dashboard.d.ts.map +1 -0
- package/dist/ui/server/routes/dashboard.js +57 -0
- package/dist/ui/server/routes/dashboard.js.map +1 -0
- package/dist/ui/server/routes/settings.d.ts +6 -0
- package/dist/ui/server/routes/settings.d.ts.map +1 -0
- package/dist/ui/server/routes/settings.js +31 -0
- package/dist/ui/server/routes/settings.js.map +1 -0
- package/dist/ui/server/services/appService.d.ts +45 -0
- package/dist/ui/server/services/appService.d.ts.map +1 -0
- package/dist/ui/server/services/appService.js +114 -0
- package/dist/ui/server/services/appService.js.map +1 -0
- package/dist/ui/server/services/removalService.d.ts +24 -0
- package/dist/ui/server/services/removalService.d.ts.map +1 -0
- package/dist/ui/server/services/removalService.js +83 -0
- package/dist/ui/server/services/removalService.js.map +1 -0
- package/dist/utils/filesystem.js +32 -49
- package/dist/utils/filesystem.js.map +1 -1
- package/dist/utils/logger.js +9 -18
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/platform.js +10 -22
- package/dist/utils/platform.js.map +1 -1
- package/dist/utils/upgrade.d.ts +2 -1
- package/dist/utils/upgrade.d.ts.map +1 -1
- package/dist/utils/upgrade.js +24 -15
- package/dist/utils/upgrade.js.map +1 -1
- package/package.json +4 -2
- package/scripts/publish-npm.sh +64 -0
- package/src/core/appUpdateChecker.ts +1 -1
- package/src/core/detector.ts +6 -6
- package/src/core/duplicateFileFinder.ts +1 -1
- package/src/core/orphanedDependencyDetector.ts +2 -2
- package/src/core/performanceOptimizer.ts +1 -1
- package/src/core/permissionHandler.ts +2 -2
- package/src/core/pluginSystem.ts +1 -1
- package/src/core/removalRecorder.ts +2 -2
- package/src/core/remover.ts +11 -11
- package/src/core/reportGenerator.ts +2 -2
- package/src/core/scheduledCleanup.ts +2 -2
- package/src/core/serviceFileDetector.ts +2 -2
- package/src/core/verificationModule.ts +2 -2
- package/src/index.ts +8 -8
- package/src/managers/brewManager.ts +3 -3
- package/src/managers/customManager.ts +2 -2
- package/src/managers/linuxManager.ts +3 -3
- package/src/managers/npmManager.ts +3 -3
- package/src/ui/client/api/client.ts +168 -0
- package/src/ui/client/app.ts +125 -0
- package/src/ui/client/index.html +107 -0
- package/src/ui/client/pages/appDetails.ts +356 -0
- package/src/ui/client/pages/appSearch.ts +283 -0
- package/src/ui/client/pages/dashboard.ts +211 -0
- package/src/ui/client/pages/settings.ts +342 -0
- package/src/ui/client/state/appStore.ts +181 -0
- package/src/ui/client/state/dashboardStore.ts +123 -0
- package/src/ui/client/state/uiStore.ts +166 -0
- package/src/ui/client/styles/animations.css +349 -0
- package/src/ui/client/styles/base.css +214 -0
- package/src/ui/client/styles/components.css +400 -0
- package/src/ui/client/styles/layout.css +224 -0
- package/src/ui/client/styles/variables.css +140 -0
- package/src/ui/client/utils/events.ts +74 -0
- package/src/ui/client/utils/formatting.ts +157 -0
- package/src/ui/client/utils/router.ts +161 -0
- package/src/ui/guiServer.ts +245 -498
- package/src/ui/prompts.ts +1 -1
- package/src/ui/server/middleware/errorHandler.ts +174 -0
- package/src/ui/server/routes/apps.ts +132 -0
- package/src/ui/server/routes/dashboard.ts +93 -0
- package/src/ui/server/routes/settings.ts +63 -0
- package/src/ui/server/services/appService.ts +184 -0
- package/src/ui/server/services/removalService.ts +138 -0
- package/src/utils/upgrade.ts +19 -2
- package/tsconfig.json +3 -2
- package/INDEX.md +0 -165
- /package/{ACTION_CHECKLIST.md → MD_Files/ACTION_CHECKLIST.md} +0 -0
- /package/{APPCLEAN_SUMMARY.md → MD_Files/APPCLEAN_SUMMARY.md} +0 -0
- /package/{CHANGELOG.md → MD_Files/CHANGELOG.md} +0 -0
- /package/{CODE_OF_CONDUCT.md → MD_Files/CODE_OF_CONDUCT.md} +0 -0
- /package/{CODE_REVIEW_REPORT.md → MD_Files/CODE_REVIEW_REPORT.md} +0 -0
- /package/{COMMUNITY_POSTS.md → MD_Files/COMMUNITY_POSTS.md} +0 -0
- /package/{DEPLOYMENT_GUIDE.md → MD_Files/DEPLOYMENT_GUIDE.md} +0 -0
- /package/{DEPLOYMENT_STATUS.md → MD_Files/DEPLOYMENT_STATUS.md} +0 -0
- /package/{EXECUTIVE_REPORT.md → MD_Files/EXECUTIVE_REPORT.md} +0 -0
- /package/{GITHUB_OPTIMIZATION.md → MD_Files/GITHUB_OPTIMIZATION.md} +0 -0
- /package/{MARKETING_SUMMARY.md → MD_Files/MARKETING_SUMMARY.md} +0 -0
- /package/{NPM_PACKAGE_OPTIMIZATION.md → MD_Files/NPM_PACKAGE_OPTIMIZATION.md} +0 -0
- /package/{NPM_PUBLISH.md → MD_Files/NPM_PUBLISH.md} +0 -0
- /package/{PROJECT_SUMMARY.txt → MD_Files/PROJECT_SUMMARY.txt} +0 -0
- /package/{PUBLICATION_SUCCESS_REPORT.md → MD_Files/PUBLICATION_SUCCESS_REPORT.md} +0 -0
- /package/{QUICKSTART.md → MD_Files/QUICKSTART.md} +0 -0
- /package/{SETUP_GITHUB.md → MD_Files/SETUP_GITHUB.md} +0 -0
- /package/{TESTING_SUMMARY.md → MD_Files/TESTING_SUMMARY.md} +0 -0
- /package/{setup-github.sh → MD_Files/setup-github.sh} +0 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/* Layout - Grid, Flexbox, Container Utilities */
|
|
2
|
+
|
|
3
|
+
.container {
|
|
4
|
+
width: 100%;
|
|
5
|
+
max-width: var(--max-width-lg);
|
|
6
|
+
margin-left: auto;
|
|
7
|
+
margin-right: auto;
|
|
8
|
+
padding-left: var(--space-4);
|
|
9
|
+
padding-right: var(--space-4);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.container-xl {
|
|
13
|
+
max-width: var(--max-width-xl);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.container-md {
|
|
17
|
+
max-width: var(--max-width-md);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/* Flexbox */
|
|
21
|
+
.flex {
|
|
22
|
+
display: flex;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.flex-col {
|
|
26
|
+
flex-direction: column;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.flex-wrap {
|
|
30
|
+
flex-wrap: wrap;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.flex-center {
|
|
34
|
+
align-items: center;
|
|
35
|
+
justify-content: center;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.flex-between {
|
|
39
|
+
align-items: center;
|
|
40
|
+
justify-content: space-between;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.flex-start {
|
|
44
|
+
align-items: flex-start;
|
|
45
|
+
justify-content: flex-start;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.flex-end {
|
|
49
|
+
align-items: flex-end;
|
|
50
|
+
justify-content: flex-end;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.justify-center {
|
|
54
|
+
justify-content: center;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.justify-between {
|
|
58
|
+
justify-content: space-between;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.justify-start {
|
|
62
|
+
justify-content: flex-start;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.justify-end {
|
|
66
|
+
justify-content: flex-end;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.justify-around {
|
|
70
|
+
justify-content: space-around;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
.justify-evenly {
|
|
74
|
+
justify-content: space-evenly;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
.items-center {
|
|
78
|
+
align-items: center;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.items-start {
|
|
82
|
+
align-items: flex-start;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.items-end {
|
|
86
|
+
align-items: flex-end;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.items-stretch {
|
|
90
|
+
align-items: stretch;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.flex-1 {
|
|
94
|
+
flex: 1;
|
|
95
|
+
min-width: 0;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.flex-none {
|
|
99
|
+
flex: none;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.gap-1 { gap: var(--space-1); }
|
|
103
|
+
.gap-2 { gap: var(--space-2); }
|
|
104
|
+
.gap-3 { gap: var(--space-3); }
|
|
105
|
+
.gap-4 { gap: var(--space-4); }
|
|
106
|
+
.gap-6 { gap: var(--space-6); }
|
|
107
|
+
.gap-8 { gap: var(--space-8); }
|
|
108
|
+
|
|
109
|
+
/* Grid */
|
|
110
|
+
.grid {
|
|
111
|
+
display: grid;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); }
|
|
115
|
+
.grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
116
|
+
.grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
|
|
117
|
+
.grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
|
|
118
|
+
|
|
119
|
+
.gap-1 { gap: var(--space-1); }
|
|
120
|
+
.gap-2 { gap: var(--space-2); }
|
|
121
|
+
.gap-3 { gap: var(--space-3); }
|
|
122
|
+
.gap-4 { gap: var(--space-4); }
|
|
123
|
+
.gap-6 { gap: var(--space-6); }
|
|
124
|
+
.gap-8 { gap: var(--space-8); }
|
|
125
|
+
|
|
126
|
+
/* Spacing Utilities */
|
|
127
|
+
.m-0 { margin: var(--space-0); }
|
|
128
|
+
.m-1 { margin: var(--space-1); }
|
|
129
|
+
.m-2 { margin: var(--space-2); }
|
|
130
|
+
.m-3 { margin: var(--space-3); }
|
|
131
|
+
.m-4 { margin: var(--space-4); }
|
|
132
|
+
.m-6 { margin: var(--space-6); }
|
|
133
|
+
.m-8 { margin: var(--space-8); }
|
|
134
|
+
|
|
135
|
+
.mb-0 { margin-bottom: var(--space-0); }
|
|
136
|
+
.mb-1 { margin-bottom: var(--space-1); }
|
|
137
|
+
.mb-2 { margin-bottom: var(--space-2); }
|
|
138
|
+
.mb-3 { margin-bottom: var(--space-3); }
|
|
139
|
+
.mb-4 { margin-bottom: var(--space-4); }
|
|
140
|
+
.mb-6 { margin-bottom: var(--space-6); }
|
|
141
|
+
.mb-8 { margin-bottom: var(--space-8); }
|
|
142
|
+
|
|
143
|
+
.mt-0 { margin-top: var(--space-0); }
|
|
144
|
+
.mt-1 { margin-top: var(--space-1); }
|
|
145
|
+
.mt-2 { margin-top: var(--space-2); }
|
|
146
|
+
.mt-3 { margin-top: var(--space-3); }
|
|
147
|
+
.mt-4 { margin-top: var(--space-4); }
|
|
148
|
+
.mt-6 { margin-top: var(--space-6); }
|
|
149
|
+
.mt-8 { margin-top: var(--space-8); }
|
|
150
|
+
|
|
151
|
+
.mx-auto { margin-left: auto; margin-right: auto; }
|
|
152
|
+
|
|
153
|
+
.p-0 { padding: var(--space-0); }
|
|
154
|
+
.p-1 { padding: var(--space-1); }
|
|
155
|
+
.p-2 { padding: var(--space-2); }
|
|
156
|
+
.p-3 { padding: var(--space-3); }
|
|
157
|
+
.p-4 { padding: var(--space-4); }
|
|
158
|
+
.p-6 { padding: var(--space-6); }
|
|
159
|
+
.p-8 { padding: var(--space-8); }
|
|
160
|
+
|
|
161
|
+
.px-4 { padding-left: var(--space-4); padding-right: var(--space-4); }
|
|
162
|
+
.py-4 { padding-top: var(--space-4); padding-bottom: var(--space-4); }
|
|
163
|
+
|
|
164
|
+
/* Display */
|
|
165
|
+
.hidden { display: none; }
|
|
166
|
+
.block { display: block; }
|
|
167
|
+
.inline { display: inline; }
|
|
168
|
+
.inline-block { display: inline-block; }
|
|
169
|
+
|
|
170
|
+
.w-full { width: 100%; }
|
|
171
|
+
.h-full { height: 100%; }
|
|
172
|
+
.h-screen { height: 100vh; }
|
|
173
|
+
|
|
174
|
+
.overflow-hidden { overflow: hidden; }
|
|
175
|
+
.overflow-auto { overflow: auto; }
|
|
176
|
+
.overflow-x-auto { overflow-x: auto; }
|
|
177
|
+
.overflow-y-auto { overflow-y: auto; }
|
|
178
|
+
|
|
179
|
+
/* Text */
|
|
180
|
+
.text-center { text-align: center; }
|
|
181
|
+
.text-left { text-align: left; }
|
|
182
|
+
.text-right { text-align: right; }
|
|
183
|
+
|
|
184
|
+
.text-xs { font-size: var(--font-xs); }
|
|
185
|
+
.text-sm { font-size: var(--font-sm); }
|
|
186
|
+
.text-base { font-size: var(--font-base); }
|
|
187
|
+
.text-lg { font-size: var(--font-lg); }
|
|
188
|
+
.text-xl { font-size: var(--font-xl); }
|
|
189
|
+
.text-2xl { font-size: var(--font-2xl); }
|
|
190
|
+
.text-3xl { font-size: var(--font-3xl); }
|
|
191
|
+
|
|
192
|
+
.font-normal { font-weight: var(--fw-regular); }
|
|
193
|
+
.font-medium { font-weight: var(--fw-medium); }
|
|
194
|
+
.font-semibold { font-weight: var(--fw-semibold); }
|
|
195
|
+
.font-bold { font-weight: var(--fw-bold); }
|
|
196
|
+
|
|
197
|
+
.text-primary { color: var(--text-primary); }
|
|
198
|
+
.text-secondary { color: var(--text-secondary); }
|
|
199
|
+
.text-muted { color: var(--text-muted); }
|
|
200
|
+
|
|
201
|
+
/* Responsive */
|
|
202
|
+
@media (max-width: 768px) {
|
|
203
|
+
.container {
|
|
204
|
+
padding-left: var(--space-3);
|
|
205
|
+
padding-right: var(--space-3);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
.grid-cols-2 { grid-template-columns: repeat(1, minmax(0, 1fr)); }
|
|
209
|
+
.grid-cols-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
210
|
+
.grid-cols-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
@media (max-width: 480px) {
|
|
214
|
+
.grid-cols-2 { grid-template-columns: repeat(1, minmax(0, 1fr)); }
|
|
215
|
+
.grid-cols-3 { grid-template-columns: repeat(1, minmax(0, 1fr)); }
|
|
216
|
+
.grid-cols-4 { grid-template-columns: repeat(1, minmax(0, 1fr)); }
|
|
217
|
+
|
|
218
|
+
.flex-col-mobile {
|
|
219
|
+
flex-direction: column;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
.text-2xl { font-size: var(--font-xl); }
|
|
223
|
+
.text-3xl { font-size: var(--font-2xl); }
|
|
224
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/* Design System - CSS Variables */
|
|
2
|
+
|
|
3
|
+
:root {
|
|
4
|
+
/* Colors - Primary */
|
|
5
|
+
--color-primary: #3b82f6;
|
|
6
|
+
--color-primary-hover: #2563eb;
|
|
7
|
+
--color-primary-light: #dbeafe;
|
|
8
|
+
--color-primary-dark: #1e40af;
|
|
9
|
+
|
|
10
|
+
/* Colors - Semantic */
|
|
11
|
+
--color-success: #10b981;
|
|
12
|
+
--color-success-light: #d1fae5;
|
|
13
|
+
--color-warning: #f59e0b;
|
|
14
|
+
--color-warning-light: #fef3c7;
|
|
15
|
+
--color-danger: #ef4444;
|
|
16
|
+
--color-danger-light: #fee2e2;
|
|
17
|
+
--color-info: #0ea5e9;
|
|
18
|
+
--color-info-light: #cffafe;
|
|
19
|
+
|
|
20
|
+
/* Colors - Neutral */
|
|
21
|
+
--color-neutral-0: #ffffff;
|
|
22
|
+
--color-neutral-50: #f9fafb;
|
|
23
|
+
--color-neutral-100: #f3f4f6;
|
|
24
|
+
--color-neutral-200: #e5e7eb;
|
|
25
|
+
--color-neutral-300: #d1d5db;
|
|
26
|
+
--color-neutral-400: #9ca3af;
|
|
27
|
+
--color-neutral-500: #6b7280;
|
|
28
|
+
--color-neutral-600: #4b5563;
|
|
29
|
+
--color-neutral-700: #374151;
|
|
30
|
+
--color-neutral-800: #1f2937;
|
|
31
|
+
--color-neutral-900: #111827;
|
|
32
|
+
|
|
33
|
+
/* Background & Surface */
|
|
34
|
+
--bg-primary: var(--color-neutral-0);
|
|
35
|
+
--bg-secondary: var(--color-neutral-50);
|
|
36
|
+
--bg-hover: var(--color-neutral-100);
|
|
37
|
+
--text-primary: var(--color-neutral-900);
|
|
38
|
+
--text-secondary: var(--color-neutral-600);
|
|
39
|
+
--text-muted: var(--color-neutral-500);
|
|
40
|
+
--border-color: var(--color-neutral-200);
|
|
41
|
+
--border-color-hover: var(--color-neutral-300);
|
|
42
|
+
|
|
43
|
+
/* Dark Mode */
|
|
44
|
+
--dark-bg-primary: var(--color-neutral-900);
|
|
45
|
+
--dark-bg-secondary: var(--color-neutral-800);
|
|
46
|
+
--dark-bg-hover: var(--color-neutral-700);
|
|
47
|
+
--dark-text-primary: var(--color-neutral-0);
|
|
48
|
+
--dark-text-secondary: var(--color-neutral-300);
|
|
49
|
+
--dark-text-muted: var(--color-neutral-400);
|
|
50
|
+
--dark-border-color: var(--color-neutral-700);
|
|
51
|
+
--dark-border-color-hover: var(--color-neutral-600);
|
|
52
|
+
|
|
53
|
+
/* Typography */
|
|
54
|
+
--font-family: system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', sans-serif;
|
|
55
|
+
--font-family-mono: 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, monospace;
|
|
56
|
+
|
|
57
|
+
/* Font Sizes */
|
|
58
|
+
--font-xs: 0.75rem; /* 12px */
|
|
59
|
+
--font-sm: 0.875rem; /* 14px */
|
|
60
|
+
--font-base: 1rem; /* 16px */
|
|
61
|
+
--font-lg: 1.125rem; /* 18px */
|
|
62
|
+
--font-xl: 1.25rem; /* 20px */
|
|
63
|
+
--font-2xl: 1.5rem; /* 24px */
|
|
64
|
+
--font-3xl: 1.875rem; /* 30px */
|
|
65
|
+
|
|
66
|
+
/* Font Weights */
|
|
67
|
+
--fw-regular: 400;
|
|
68
|
+
--fw-medium: 500;
|
|
69
|
+
--fw-semibold: 600;
|
|
70
|
+
--fw-bold: 700;
|
|
71
|
+
|
|
72
|
+
/* Line Heights */
|
|
73
|
+
--lh-tight: 1.25;
|
|
74
|
+
--lh-normal: 1.5;
|
|
75
|
+
--lh-relaxed: 1.625;
|
|
76
|
+
--lh-loose: 2;
|
|
77
|
+
|
|
78
|
+
/* Spacing Scale (4px base unit) */
|
|
79
|
+
--space-0: 0;
|
|
80
|
+
--space-1: 0.25rem; /* 4px */
|
|
81
|
+
--space-2: 0.5rem; /* 8px */
|
|
82
|
+
--space-3: 0.75rem; /* 12px */
|
|
83
|
+
--space-4: 1rem; /* 16px */
|
|
84
|
+
--space-6: 1.5rem; /* 24px */
|
|
85
|
+
--space-8: 2rem; /* 32px */
|
|
86
|
+
--space-12: 3rem; /* 48px */
|
|
87
|
+
--space-16: 4rem; /* 64px */
|
|
88
|
+
|
|
89
|
+
/* Border Radius */
|
|
90
|
+
--radius-none: 0;
|
|
91
|
+
--radius-sm: 0.375rem; /* 6px */
|
|
92
|
+
--radius-md: 0.5rem; /* 8px */
|
|
93
|
+
--radius-lg: 0.75rem; /* 12px */
|
|
94
|
+
--radius-xl: 1rem; /* 16px */
|
|
95
|
+
--radius-2xl: 1.5rem; /* 24px */
|
|
96
|
+
--radius-full: 9999px; /* Pill-shaped */
|
|
97
|
+
|
|
98
|
+
/* Shadows */
|
|
99
|
+
--shadow-none: 0 0 0 0 rgba(0, 0, 0, 0);
|
|
100
|
+
--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
|
|
101
|
+
--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
|
|
102
|
+
--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
|
|
103
|
+
--shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
|
|
104
|
+
|
|
105
|
+
/* Transitions */
|
|
106
|
+
--transition-fast: 150ms ease-out;
|
|
107
|
+
--transition-normal: 250ms ease-out;
|
|
108
|
+
--transition-slow: 350ms ease-out;
|
|
109
|
+
|
|
110
|
+
/* Layout */
|
|
111
|
+
--max-width-sm: 640px;
|
|
112
|
+
--max-width-md: 768px;
|
|
113
|
+
--max-width-lg: 1024px;
|
|
114
|
+
--max-width-xl: 1280px;
|
|
115
|
+
--max-width-2xl: 1536px;
|
|
116
|
+
|
|
117
|
+
/* Z-index */
|
|
118
|
+
--z-hide: -1;
|
|
119
|
+
--z-auto: auto;
|
|
120
|
+
--z-base: 0;
|
|
121
|
+
--z-dropdown: 1000;
|
|
122
|
+
--z-sticky: 1020;
|
|
123
|
+
--z-fixed: 1030;
|
|
124
|
+
--z-modal-backdrop: 1040;
|
|
125
|
+
--z-modal: 1050;
|
|
126
|
+
--z-popover: 1060;
|
|
127
|
+
--z-tooltip: 1070;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/* Dark mode */
|
|
131
|
+
body.dark-mode {
|
|
132
|
+
--bg-primary: var(--dark-bg-primary);
|
|
133
|
+
--bg-secondary: var(--dark-bg-secondary);
|
|
134
|
+
--bg-hover: var(--dark-bg-hover);
|
|
135
|
+
--text-primary: var(--dark-text-primary);
|
|
136
|
+
--text-secondary: var(--dark-text-secondary);
|
|
137
|
+
--text-muted: var(--dark-text-muted);
|
|
138
|
+
--border-color: var(--dark-border-color);
|
|
139
|
+
--border-color-hover: var(--dark-border-color-hover);
|
|
140
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type EventListener<T = any> = (data: T) => void;
|
|
2
|
+
export declare class EventEmitter<T = any> {
|
|
3
|
+
private listeners;
|
|
4
|
+
on(listener: EventListener<T>): () => void;
|
|
5
|
+
once(listener: EventListener<T>): void;
|
|
6
|
+
emit(data: T): void;
|
|
7
|
+
clear(): void;
|
|
8
|
+
getListenerCount(): number;
|
|
9
|
+
}
|
|
10
|
+
export declare abstract class Store<T> {
|
|
11
|
+
protected state: T;
|
|
12
|
+
protected stateChanged: EventEmitter<T>;
|
|
13
|
+
constructor(initialState: T);
|
|
14
|
+
getState(): T;
|
|
15
|
+
setState(newState: Partial<T>): void;
|
|
16
|
+
subscribe(listener: EventListener<T>): () => void;
|
|
17
|
+
protected updateState(updater: (state: T) => T): void;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../../src/ui/client/utils/events.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;AAEvD,qBAAa,YAAY,CAAC,CAAC,GAAG,GAAG;IAC/B,OAAO,CAAC,SAAS,CAA0B;IAE3C,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAS1C,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI;IAOtC,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAUnB,KAAK,IAAI,IAAI;IAIb,gBAAgB,IAAI,MAAM;CAG3B;AAKD,8BAAsB,KAAK,CAAC,CAAC;IAC3B,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;IACnB,SAAS,CAAC,YAAY,kBAAyB;gBAEnC,YAAY,EAAE,CAAC;IAI3B,QAAQ,IAAI,CAAC;IAIb,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;IAKpC,SAAS,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI;IAIjD,SAAS,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI;CAItD"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
export class EventEmitter {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.listeners = [];
|
|
4
|
+
}
|
|
5
|
+
on(listener) {
|
|
6
|
+
this.listeners.push(listener);
|
|
7
|
+
return () => {
|
|
8
|
+
this.listeners = this.listeners.filter((l) => l !== listener);
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
once(listener) {
|
|
12
|
+
const unsubscribe = this.on((data) => {
|
|
13
|
+
listener(data);
|
|
14
|
+
unsubscribe();
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
emit(data) {
|
|
18
|
+
this.listeners.forEach((listener) => {
|
|
19
|
+
try {
|
|
20
|
+
listener(data);
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
console.error('Event listener error:', error);
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
clear() {
|
|
28
|
+
this.listeners = [];
|
|
29
|
+
}
|
|
30
|
+
getListenerCount() {
|
|
31
|
+
return this.listeners.length;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export class Store {
|
|
35
|
+
constructor(initialState) {
|
|
36
|
+
this.stateChanged = new EventEmitter();
|
|
37
|
+
this.state = initialState;
|
|
38
|
+
}
|
|
39
|
+
getState() {
|
|
40
|
+
return this.state;
|
|
41
|
+
}
|
|
42
|
+
setState(newState) {
|
|
43
|
+
this.state = { ...this.state, ...newState };
|
|
44
|
+
this.stateChanged.emit(this.state);
|
|
45
|
+
}
|
|
46
|
+
subscribe(listener) {
|
|
47
|
+
return this.stateChanged.on(listener);
|
|
48
|
+
}
|
|
49
|
+
updateState(updater) {
|
|
50
|
+
this.state = updater(this.state);
|
|
51
|
+
this.stateChanged.emit(this.state);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../../src/ui/client/utils/events.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,YAAY;IAAzB;QACU,cAAS,GAAuB,EAAE,CAAC;IAmC7C,CAAC;IAjCC,EAAE,CAAC,QAA0B;QAC3B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAG9B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC;QAChE,CAAC,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,QAA0B;QAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,IAAO,EAAE,EAAE;YACtC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACf,WAAW,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,IAAO;QACV,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YAClC,IAAI,CAAC;gBACH,QAAQ,CAAC,IAAI,CAAC,CAAC;YACjB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;YAChD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK;QACH,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;IAC/B,CAAC;CACF;AAKD,MAAM,OAAgB,KAAK;IAIzB,YAAY,YAAe;QAFjB,iBAAY,GAAG,IAAI,YAAY,EAAK,CAAC;QAG7C,IAAI,CAAC,KAAK,GAAG,YAAY,CAAC;IAC5B,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,QAAQ,CAAC,QAAoB;QAC3B,IAAI,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC5C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,SAAS,CAAC,QAA0B;QAClC,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IAES,WAAW,CAAC,OAAwB;QAC5C,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;CACF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare function formatBytes(bytes: number, decimals?: number): string;
|
|
2
|
+
export declare function formatDate(timestamp: number | string | Date): string;
|
|
3
|
+
export declare function formatRelativeTime(timestamp: number | string | Date): string;
|
|
4
|
+
export declare function truncate(str: string, maxLength: number): string;
|
|
5
|
+
export declare function capitalize(str: string): string;
|
|
6
|
+
export declare function formatInstallMethod(method: string): string;
|
|
7
|
+
export declare function getMethodBadgeColor(method: string): string;
|
|
8
|
+
export declare function formatPercent(value: number, decimals?: number): string;
|
|
9
|
+
export declare function debounce<T extends (...args: any[]) => any>(func: T, wait: number): (...args: Parameters<T>) => void;
|
|
10
|
+
export declare function throttle<T extends (...args: any[]) => any>(func: T, limit: number): (...args: Parameters<T>) => void;
|
|
11
|
+
//# sourceMappingURL=formatting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../../../src/ui/client/utils/formatting.ts"],"names":[],"mappings":"AAOA,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,MAAM,CAS/D;AAKD,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CAsBpE;AAKD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,CAe5E;AAKD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAG/D;AAKD,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C;AAKD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAa1D;AAKD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAa1D;AAKD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,MAAM,CAEjE;AAKD,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACxD,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,MAAM,GACX,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CASlC;AAKD,wBAAgB,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,EACxD,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,MAAM,GACZ,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAUlC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
export function formatBytes(bytes, decimals = 2) {
|
|
2
|
+
if (bytes === 0)
|
|
3
|
+
return '0 Bytes';
|
|
4
|
+
const k = 1024;
|
|
5
|
+
const dm = decimals < 0 ? 0 : decimals;
|
|
6
|
+
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
|
|
7
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
8
|
+
return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];
|
|
9
|
+
}
|
|
10
|
+
export function formatDate(timestamp) {
|
|
11
|
+
const date = new Date(timestamp);
|
|
12
|
+
const today = new Date();
|
|
13
|
+
const yesterday = new Date(today);
|
|
14
|
+
yesterday.setDate(yesterday.getDate() - 1);
|
|
15
|
+
const isToday = date.toDateString() === today.toDateString();
|
|
16
|
+
const isYesterday = date.toDateString() === yesterday.toDateString();
|
|
17
|
+
if (isToday) {
|
|
18
|
+
return 'Today at ' + date.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' });
|
|
19
|
+
}
|
|
20
|
+
if (isYesterday) {
|
|
21
|
+
return 'Yesterday at ' + date.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' });
|
|
22
|
+
}
|
|
23
|
+
return date.toLocaleDateString('en-US', {
|
|
24
|
+
month: 'short',
|
|
25
|
+
day: 'numeric',
|
|
26
|
+
year: date.getFullYear() !== today.getFullYear() ? 'numeric' : undefined,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
export function formatRelativeTime(timestamp) {
|
|
30
|
+
const date = new Date(timestamp);
|
|
31
|
+
const now = new Date();
|
|
32
|
+
const diffMs = now.getTime() - date.getTime();
|
|
33
|
+
const diffSecs = Math.floor(diffMs / 1000);
|
|
34
|
+
const diffMins = Math.floor(diffSecs / 60);
|
|
35
|
+
const diffHours = Math.floor(diffMins / 60);
|
|
36
|
+
const diffDays = Math.floor(diffHours / 24);
|
|
37
|
+
if (diffSecs < 60)
|
|
38
|
+
return 'just now';
|
|
39
|
+
if (diffMins < 60)
|
|
40
|
+
return `${diffMins} minute${diffMins > 1 ? 's' : ''} ago`;
|
|
41
|
+
if (diffHours < 24)
|
|
42
|
+
return `${diffHours} hour${diffHours > 1 ? 's' : ''} ago`;
|
|
43
|
+
if (diffDays < 7)
|
|
44
|
+
return `${diffDays} day${diffDays > 1 ? 's' : ''} ago`;
|
|
45
|
+
return formatDate(timestamp);
|
|
46
|
+
}
|
|
47
|
+
export function truncate(str, maxLength) {
|
|
48
|
+
if (str.length <= maxLength)
|
|
49
|
+
return str;
|
|
50
|
+
return str.slice(0, maxLength - 3) + '...';
|
|
51
|
+
}
|
|
52
|
+
export function capitalize(str) {
|
|
53
|
+
return str.charAt(0).toUpperCase() + str.slice(1);
|
|
54
|
+
}
|
|
55
|
+
export function formatInstallMethod(method) {
|
|
56
|
+
const methodMap = {
|
|
57
|
+
npm: 'npm',
|
|
58
|
+
yarn: 'Yarn',
|
|
59
|
+
pnpm: 'pnpm',
|
|
60
|
+
brew: 'Homebrew',
|
|
61
|
+
apt: 'apt',
|
|
62
|
+
yum: 'yum',
|
|
63
|
+
dnf: 'dnf',
|
|
64
|
+
custom: 'Custom',
|
|
65
|
+
};
|
|
66
|
+
return methodMap[method] || capitalize(method);
|
|
67
|
+
}
|
|
68
|
+
export function getMethodBadgeColor(method) {
|
|
69
|
+
const colorMap = {
|
|
70
|
+
npm: 'badge-primary',
|
|
71
|
+
yarn: 'badge-primary',
|
|
72
|
+
pnpm: 'badge-primary',
|
|
73
|
+
brew: 'badge-success',
|
|
74
|
+
apt: 'badge-warning',
|
|
75
|
+
yum: 'badge-warning',
|
|
76
|
+
dnf: 'badge-warning',
|
|
77
|
+
custom: 'badge-neutral',
|
|
78
|
+
};
|
|
79
|
+
return colorMap[method] || 'badge-neutral';
|
|
80
|
+
}
|
|
81
|
+
export function formatPercent(value, decimals = 1) {
|
|
82
|
+
return parseFloat(value.toFixed(decimals)) + '%';
|
|
83
|
+
}
|
|
84
|
+
export function debounce(func, wait) {
|
|
85
|
+
let timeout = null;
|
|
86
|
+
return function (...args) {
|
|
87
|
+
if (timeout)
|
|
88
|
+
clearTimeout(timeout);
|
|
89
|
+
timeout = setTimeout(() => {
|
|
90
|
+
func(...args);
|
|
91
|
+
}, wait);
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
export function throttle(func, limit) {
|
|
95
|
+
let lastRun = 0;
|
|
96
|
+
return function (...args) {
|
|
97
|
+
const now = Date.now();
|
|
98
|
+
if (now - lastRun >= limit) {
|
|
99
|
+
lastRun = now;
|
|
100
|
+
func(...args);
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=formatting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../../../src/ui/client/utils/formatting.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type RouteHandler = (params: Record<string, string>) => void;
|
|
2
|
+
export interface Route {
|
|
3
|
+
path: string;
|
|
4
|
+
handler: RouteHandler;
|
|
5
|
+
title?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class Router {
|
|
8
|
+
private routes;
|
|
9
|
+
private currentRoute;
|
|
10
|
+
private onRouteChange;
|
|
11
|
+
constructor();
|
|
12
|
+
register(path: string, handler: RouteHandler, title?: string): void;
|
|
13
|
+
navigate(path: string): void;
|
|
14
|
+
getCurrentPath(): string;
|
|
15
|
+
private listenToHashChanges;
|
|
16
|
+
private route;
|
|
17
|
+
private matchRoute;
|
|
18
|
+
private pathMatches;
|
|
19
|
+
private extractParams;
|
|
20
|
+
onchange(callback: (route: Route) => void): void;
|
|
21
|
+
getRoutes(): Route[];
|
|
22
|
+
getCurrentRoute(): Route | null;
|
|
23
|
+
}
|
|
24
|
+
export declare const router: Router;
|
|
25
|
+
//# sourceMappingURL=router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../../../src/ui/client/utils/router.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAC;AAEpE,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,aAAa,CAAyC;;IAS9D,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAOnE,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO5B,cAAc,IAAI,MAAM;IAOxB,OAAO,CAAC,mBAAmB;IAY3B,OAAO,CAAC,KAAK;IA6Bb,OAAO,CAAC,UAAU;IAmBlB,OAAO,CAAC,WAAW;IAiBnB,OAAO,CAAC,aAAa;IAkBrB,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAOhD,SAAS,IAAI,KAAK,EAAE;IAOpB,eAAe,IAAI,KAAK,GAAG,IAAI;CAGhC;AAGD,eAAO,MAAM,MAAM,QAAe,CAAC"}
|