huhaa-myskills 0.2.13 → 0.3.4

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 (121) hide show
  1. package/README.md +9 -375
  2. package/bin/huhaa-myskills.mjs +194 -12
  3. package/{scripts → build}/verify.mjs +3 -1
  4. package/docs/Frontend-Spec.md +1149 -0
  5. package/docs/assets/layout-wireframe.png +0 -0
  6. package/docs/assets/theme-reference.png +0 -0
  7. package/docs/scan_rules.md +172 -0
  8. package/package.json +33 -9
  9. package/packages/scanner/src/adapters/directory-skill.mjs +239 -0
  10. package/packages/scanner/src/adapters/skill-adapter.mjs +345 -0
  11. package/packages/scanner/src/icon/brand-map.mjs +84 -0
  12. package/packages/scanner/src/icon/icon-extractor.mjs +246 -0
  13. package/packages/scanner/src/index.mjs +107 -82
  14. package/packages/scanner/src/types.d.ts +18 -0
  15. package/packages/scanner/test/icon.test.mjs +61 -0
  16. package/packages/scanner/test/scanner.test.mjs +37 -41
  17. package/packages/scanner/test/skill-adapter.test.mjs +70 -0
  18. package/packages/scanner/tests/directory-skill.test.mjs +93 -0
  19. package/packages/scanner/tests/scanner-integration.test.mjs +139 -0
  20. package/packages/server/src/index.mjs +164 -12
  21. package/packages/server/src/labels.mjs +62 -0
  22. package/packages/server/test/server.test.mjs +1 -1
  23. package/packages/web/README.md +33 -2
  24. package/packages/web/dist/assets/index-BCY2cRaO.js +175 -0
  25. package/packages/web/dist/assets/index-DALKjJPi.css +1 -0
  26. package/packages/web/dist/favicon-16x16.png +0 -0
  27. package/packages/web/dist/favicon-192x192.png +0 -0
  28. package/packages/web/dist/favicon-32x32.png +0 -0
  29. package/packages/web/dist/favicon-512x512.png +0 -0
  30. package/packages/web/dist/favicon-source.svg +5 -0
  31. package/packages/web/dist/index.html +23 -9
  32. package/packages/web/index.html +22 -8
  33. package/packages/web/package-lock.json +2989 -0
  34. package/packages/web/package.json +21 -8
  35. package/packages/web/postcss.config.js +6 -0
  36. package/packages/web/public/favicon-16x16.png +0 -0
  37. package/packages/web/public/favicon-192x192.png +0 -0
  38. package/packages/web/public/favicon-32x32.png +0 -0
  39. package/packages/web/public/favicon-512x512.png +0 -0
  40. package/packages/web/public/favicon-source.svg +5 -0
  41. package/packages/web/src/App.test.ts +40 -0
  42. package/packages/web/src/App.tsx +177 -0
  43. package/packages/web/src/components/ComingSoon.tsx +14 -0
  44. package/packages/web/src/components/layout/Sidebar.test.tsx +74 -0
  45. package/packages/web/src/components/layout/Sidebar.tsx +114 -0
  46. package/packages/web/src/components/layout/Topbar.tsx +74 -0
  47. package/packages/web/src/components/ui/ActionButton.tsx +48 -0
  48. package/packages/web/src/components/ui/button.tsx +48 -0
  49. package/packages/web/src/components/ui/card.tsx +45 -0
  50. package/packages/web/src/components/views/DashboardView.tsx +122 -0
  51. package/packages/web/src/components/views/OtherSkillsView.test.tsx +126 -0
  52. package/packages/web/src/components/views/OtherSkillsView.tsx +306 -0
  53. package/packages/web/src/components/views/SettingsView.tsx +95 -0
  54. package/packages/web/src/components/views/SkillDetail.test.tsx +57 -0
  55. package/packages/web/src/components/views/SkillDetail.tsx +81 -0
  56. package/packages/web/src/components/views/SkillsView.test.ts +28 -0
  57. package/packages/web/src/components/views/SkillsView.tsx +226 -0
  58. package/packages/web/src/hooks/QUICK_REFERENCE.md +165 -0
  59. package/packages/web/src/hooks/README.md +378 -0
  60. package/packages/web/src/hooks/__tests__/useOtherSkills.test.ts +422 -0
  61. package/packages/web/src/hooks/__tests__/useSkillIcons.test.ts +272 -0
  62. package/packages/web/src/hooks/useLiveReload.ts +20 -0
  63. package/packages/web/src/hooks/useOtherSkills.ts +387 -0
  64. package/packages/web/src/hooks/useSkillIcons.ts +248 -0
  65. package/packages/web/src/hooks/useTheme.ts +36 -0
  66. package/packages/web/src/index.css +161 -0
  67. package/packages/web/src/lib/api.test.ts +47 -0
  68. package/packages/web/src/lib/api.ts +77 -0
  69. package/packages/web/src/lib/cn.ts +7 -0
  70. package/packages/web/src/lib/editors.test.ts +30 -0
  71. package/packages/web/src/lib/editors.ts +70 -0
  72. package/packages/web/src/lib/markdown.test.ts +27 -0
  73. package/packages/web/src/lib/markdown.ts +14 -0
  74. package/packages/web/src/main.tsx +13 -0
  75. package/packages/web/src/types/index.ts +62 -0
  76. package/packages/web/src/types/other-skill.ts +88 -0
  77. package/packages/web/src/types/skill.ts +136 -0
  78. package/packages/web/src/types.ts +47 -0
  79. package/packages/web/src/vite-env.d.ts +1 -0
  80. package/packages/web/tailwind.config.ts +66 -0
  81. package/packages/web/tsconfig.json +28 -0
  82. package/packages/web/vite.config.ts +36 -0
  83. package/packages/web/vitest.config.ts +21 -0
  84. package/packages/web/vitest.setup.ts +1 -0
  85. package/scripts/activate-data-sources.sh +223 -0
  86. package/scripts/brand-completion.py +586 -0
  87. package/scripts/init-nextjs-project.sh +421 -0
  88. package/scripts/install-and-sync.sh +209 -0
  89. package/scripts/start-dev.sh +72 -0
  90. package/docs/GUIDE.md +0 -190
  91. package/docs/PLAN.md +0 -359
  92. package/docs/RULES.md +0 -329
  93. package/docs/RUNBOOK-myskills.md +0 -258
  94. package/docs/SYNC-SKILLS.md +0 -259
  95. package/docs/releases/README.md +0 -47
  96. package/docs/releases/v0.1.0.md +0 -256
  97. package/docs/releases/v0.1.1.md +0 -297
  98. package/docs/releases/v0.1.2.md +0 -207
  99. package/docs/releases/v0.1.3.md +0 -269
  100. package/docs/todo/v0.1.2.md +0 -98
  101. package/docs/todo/v0.1.3.md +0 -40
  102. package/docs/todo/v0.1.4.md +0 -36
  103. package/docs/todo/v0.1.5.md +0 -41
  104. package/docs/todo/v0.1.6.md +0 -43
  105. package/docs/todo/v0.1.7.md +0 -38
  106. package/docs/todo/v0.1.8.md +0 -36
  107. package/docs/todo/v0.1.9.md +0 -54
  108. package/packages/web/dist/assets/index-BPepSb3q.js +0 -36
  109. package/packages/web/dist/assets/index-CIGkgT5w.css +0 -1
  110. package/packages/web/src/App.vue +0 -483
  111. package/packages/web/src/components/AppTree.vue +0 -230
  112. package/packages/web/src/components/DirectoryTree.vue +0 -263
  113. package/packages/web/src/components/SkillTree.vue +0 -208
  114. package/packages/web/src/lib/api.js +0 -43
  115. package/packages/web/src/main.js +0 -6
  116. package/packages/web/src/stores/i18n.js +0 -161
  117. package/packages/web/src/stores/skills.js +0 -287
  118. package/packages/web/src/styles.css +0 -365
  119. package/packages/web/vite.config.js +0 -17
  120. /package/{scripts → build}/build-web.mjs +0 -0
  121. /package/{scripts → build}/prepare-publish.mjs +0 -0
@@ -1,365 +0,0 @@
1
- :root {
2
- font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "PingFang SC", sans-serif;
3
- color: #182033;
4
- background: #eef1f6;
5
- font-synthesis: none;
6
- text-rendering: optimizeLegibility;
7
- -webkit-font-smoothing: antialiased;
8
- }
9
-
10
- * { box-sizing: border-box; }
11
- html, body, #app { height: 100%; margin: 0; }
12
- button, input { font: inherit; }
13
- button { cursor: pointer; }
14
-
15
- .shell {
16
- height: 100vh;
17
- display: grid;
18
- grid-template-columns: 300px 1fr;
19
- overflow: hidden;
20
- }
21
-
22
- .sidebar {
23
- background: #111827;
24
- color: #e5e7eb;
25
- padding: 22px 16px;
26
- overflow: auto;
27
- border-right: 1px solid rgba(255,255,255,0.08);
28
- }
29
-
30
- .brand-block { display: flex; align-items: center; gap: 12px; margin-bottom: 20px; }
31
- .logo {
32
- width: 42px; height: 42px; border-radius: 12px;
33
- display: grid; place-items: center;
34
- background: linear-gradient(135deg, #7c3aed, #2563eb);
35
- font-weight: 900; font-size: 22px;
36
- }
37
- .brand-block h1 { margin: 0; font-size: 18px; }
38
- .brand-block p { margin: 2px 0 0; color: #9ca3af; font-size: 12px; }
39
-
40
- .lang-switch {
41
- display: flex; align-items: center; gap: 6px;
42
- margin: -6px 0 16px;
43
- color: #9ca3af; font-size: 12px;
44
- }
45
- .lang-switch button {
46
- border: 1px solid rgba(255,255,255,0.12);
47
- background: rgba(255,255,255,0.04);
48
- color: #d1d5db;
49
- border-radius: 999px;
50
- padding: 3px 8px;
51
- }
52
- .lang-switch button.active {
53
- background: #eef2ff;
54
- color: #3730a3;
55
- border-color: #eef2ff;
56
- }
57
-
58
- .stats-card {
59
- background: rgba(255,255,255,0.06);
60
- border: 1px solid rgba(255,255,255,0.08);
61
- border-radius: 14px;
62
- padding: 12px;
63
- margin-bottom: 14px;
64
- }
65
- .stat-main { font-size: 28px; line-height: 1; font-weight: 800; }
66
- .stat-label { color: #9ca3af; font-size: 11px; margin-bottom: 10px; }
67
- .source-line { display: flex; justify-content: space-between; color: #cbd5e1; font-size: 12px; padding: 2px 0; }
68
-
69
- .selected-editor-card {
70
- display: flex; align-items: center; justify-content: space-between; gap: 10px;
71
- margin: 0 0 12px;
72
- padding: 10px;
73
- border: 1px solid rgba(167,139,250,0.42);
74
- background: linear-gradient(135deg, rgba(124,58,237,0.26), rgba(37,99,235,0.18));
75
- border-radius: 14px;
76
- box-shadow: inset 0 1px 0 rgba(255,255,255,0.08);
77
- }
78
- .selected-editor-card span { display: block; color: #c4b5fd; font-size: 10px; margin-bottom: 2px; }
79
- .selected-editor-card strong { color: #fff; font-size: 13px; }
80
- .selected-editor-card button {
81
- width: 26px; height: 26px; border-radius: 999px; border: 1px solid rgba(255,255,255,0.18);
82
- background: rgba(255,255,255,0.09); color: #fff; font-size: 16px; line-height: 1;
83
- }
84
-
85
- .filter-section { margin-top: 14px; }
86
- .nav-section { padding-top: 2px; }
87
- .section-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 6px; }
88
- .section-head h2 { margin: 0; font-size: 11px; letter-spacing: .08em; text-transform: uppercase; color: #9ca3af; }
89
- .section-head small { color: #6b7280; font-size: 10px; }
90
- .scroll-small { max-height: 280px; overflow: auto; padding-right: 4px; }
91
-
92
- .pill {
93
- width: 100%; display: flex; align-items: center; justify-content: space-between; gap: 8px;
94
- padding: 7px 10px; margin: 3px 0;
95
- border: 1px solid rgba(255,255,255,0.06); border-radius: 11px;
96
- color: #d1d5db; background: transparent; text-align: left;
97
- }
98
- .pill span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 12px; }
99
- .pill b { min-width: 24px; text-align: center; color: #9ca3af; font-weight: 700; background: rgba(255,255,255,0.06); border-radius: 999px; padding: 1px 6px; font-size: 11px; }
100
- .pill:hover { background: rgba(255,255,255,0.08); border-color: rgba(255,255,255,0.12); }
101
- .pill.active { color: #fff; background: rgba(124,58,237,0.28); border-color: rgba(167,139,250,0.52); box-shadow: 0 0 0 2px rgba(124,58,237,0.12); }
102
- .pill.active b { color: #ede9fe; background: rgba(255,255,255,0.12); }
103
-
104
- .main { overflow: hidden; display: flex; flex-direction: column; background: #f3f5fa; }
105
- .topbar {
106
- flex: 0 0 auto;
107
- padding: 14px 18px 12px;
108
- background: linear-gradient(180deg, rgba(255,255,255,0.92), rgba(248,250,252,0.92));
109
- backdrop-filter: blur(12px);
110
- border-bottom: 1px solid #d9dee8;
111
- }
112
- .toolbar-card {
113
- display: grid;
114
- gap: 10px;
115
- padding: 12px;
116
- background: rgba(255,255,255,0.92);
117
- border: 1px solid rgba(209,213,219,0.78);
118
- border-radius: 18px;
119
- box-shadow: 0 10px 30px rgba(15,23,42,0.07);
120
- }
121
- .toolbar-main { display: grid; grid-template-columns: minmax(260px, 1fr) auto auto; gap: 10px; align-items: center; }
122
- .search-box {
123
- min-width: 0;
124
- display: flex; align-items: center; gap: 9px;
125
- padding: 0 13px;
126
- border: 1px solid #d4dbe8;
127
- border-radius: 14px;
128
- background: #f8fafc;
129
- box-shadow: inset 0 1px 0 rgba(255,255,255,0.8);
130
- }
131
- .search-icon { color: #7c3aed; font-size: 18px; line-height: 1; }
132
- .search-box input {
133
- width: 100%; height: 44px; padding: 0; border: 0; outline: none; background: transparent; color: #111827;
134
- }
135
- .search-box:focus-within { border-color: #8b5cf6; background: #fff; box-shadow: 0 0 0 4px rgba(124,58,237,.11); }
136
- .btn {
137
- height: 44px;
138
- border: 0;
139
- border-radius: 14px;
140
- padding: 0 16px;
141
- font-weight: 700;
142
- color: #374151;
143
- background: #eef2ff;
144
- transition: transform .12s ease, box-shadow .12s ease, background .12s ease;
145
- }
146
- .btn:hover { transform: translateY(-1px); box-shadow: 0 8px 18px rgba(15,23,42,0.10); }
147
- .btn:disabled { opacity: .58; cursor: wait; transform: none; box-shadow: none; }
148
- .btn.soft { background: #f1f5f9; color: #475569; }
149
- .btn.primary { color: #fff; background: linear-gradient(135deg, #7c3aed, #2563eb); box-shadow: 0 10px 20px rgba(79,70,229,0.18); }
150
- .toolbar-facets { display: grid; grid-template-columns: repeat(5, minmax(120px, 1fr)); gap: 8px; }
151
- .facet {
152
- min-width: 0;
153
- display: flex; align-items: center; gap: 8px;
154
- padding: 7px 9px;
155
- border: 1px solid #e2e8f0;
156
- border-radius: 13px;
157
- background: #f8fafc;
158
- }
159
- .facet span { flex: 0 0 auto; color: #64748b; font-size: 11px; font-weight: 800; letter-spacing: .04em; }
160
- .facet select {
161
- min-width: 0; width: 100%;
162
- border: 0; outline: 0;
163
- background: transparent;
164
- color: #111827;
165
- font-size: 13px;
166
- }
167
- .facet:focus-within { background: #fff; border-color: #a78bfa; box-shadow: 0 0 0 3px rgba(124,58,237,.10); }
168
- .toolbar-status { display: flex; align-items: center; gap: 8px; min-width: 0; color: #64748b; font-size: 12px; }
169
- .filter-chip {
170
- flex: 0 0 auto;
171
- display: inline-flex; align-items: center;
172
- min-height: 24px;
173
- padding: 4px 9px;
174
- border-radius: 999px;
175
- background: #f1f5f9;
176
- color: #64748b;
177
- font-weight: 800;
178
- }
179
- .filter-chip.active { background: #ede9fe; color: #5b21b6; }
180
- .active-filter { flex: 1; min-width: 0; color: #64748b; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
181
- .active-chip-row { flex: 1; min-width: 0; display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
182
- .active-chip {
183
- max-width: 240px;
184
- display: inline-flex; align-items: center; gap: 5px;
185
- border: 0;
186
- border-radius: 999px;
187
- padding: 4px 8px;
188
- color: #475569;
189
- background: #fff;
190
- box-shadow: inset 0 0 0 1px #dbe3ef;
191
- font-size: 12px;
192
- }
193
- .active-chip span { color: #7c3aed; font-weight: 800; }
194
- .active-chip strong { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-weight: 700; }
195
- .active-chip b { color: #94a3b8; font-size: 13px; }
196
- .active-chip:hover { color: #5b21b6; box-shadow: inset 0 0 0 1px #a78bfa; background: #faf5ff; }
197
- .reload-state { flex: 0 0 auto; max-width: 190px; color: #94a3b8; font-size: 11px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
198
-
199
- .content { flex: 1; min-height: 0; display: grid; grid-template-columns: 420px 1fr; gap: 0; }
200
- .list-panel { overflow: auto; padding: 14px; border-right: 1px solid #d9dee8; }
201
- .list-head { display: flex; gap: 10px; align-items: center; justify-content: flex-start; color: #6b7280; margin: 0 0 10px 4px; }
202
- .list-head > div:last-child { margin-left: auto; }
203
-
204
- .list-view-label {
205
- font-weight: 600;
206
- color: #111827;
207
- font-size: 14px;
208
- min-width: 60px;
209
- }
210
- .list-head strong { color: #111827; font-size: 20px; margin-right: 4px; }
211
-
212
- .list-view-controls {
213
- display: flex;
214
- gap: 4px;
215
- border: 1px solid #d9dee8;
216
- background: #fff;
217
- border-radius: 8px;
218
- padding: 2px;
219
- }
220
-
221
- .view-btn {
222
- border: none;
223
- background: transparent;
224
- color: #6b7280;
225
- padding: 5px 12px;
226
- border-radius: 6px;
227
- font-size: 13px;
228
- font-weight: 600;
229
- cursor: pointer;
230
- transition: all 0.15s ease;
231
- }
232
-
233
- .view-btn:hover {
234
- background: #f3f4f6;
235
- color: #374151;
236
- }
237
-
238
- .view-btn.active {
239
- background: #ede9fe;
240
- color: #5b21b6;
241
- }
242
-
243
- .sort-select { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: #6b7280; }
244
- .sort-select select { border: 1px solid #d4dbe8; border-radius: 9px; background: #fff; padding: 5px 8px; color: #374151; max-width: 118px; }
245
- .skill-card {
246
- width: 100%; text-align: left;
247
- border: 1px solid #d9dee8;
248
- background: #fff;
249
- border-radius: 14px;
250
- padding: 12px;
251
- margin-bottom: 10px;
252
- transition: .12s ease;
253
- }
254
- .skill-card:hover { border-color: #a78bfa; transform: translateY(-1px); }
255
- .skill-card.selected { border-color: #7c3aed; box-shadow: 0 0 0 3px rgba(124,58,237,.12); }
256
- .skill-title { display: flex; align-items: center; gap: 8px; min-width: 0; text-align: left; }
257
- .skill-title strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
258
- .skill-card mark { background: #fef08a; color: #713f12; border-radius: 4px; padding: 0 2px; }
259
- .skill-chipline { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 9px; text-align: left; }
260
- .skill-chipline span {
261
- max-width: 160px;
262
- overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
263
- padding: 3px 7px;
264
- border-radius: 999px;
265
- background: #f1f5f9;
266
- color: #475569;
267
- font-size: 11px;
268
- font-weight: 700;
269
- }
270
- .skill-meta { color: #6b7280; font-size: 12px; margin-top: 6px; text-align: left; }
271
- .skill-card p { color: #374151; font-size: 13px; margin: 7px 0 0; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
272
- .src { display: inline-block; flex: 0 0 auto; font-size: 10px; line-height: 1; padding: 4px 7px; border-radius: 99px; color: #fff; font-weight: 700; }
273
- .src-hermes { background: #4f46e5; }
274
- .src-claude-code { background: #d97706; }
275
-
276
- .detail-panel { overflow: auto; padding: 22px 28px 80px; background: #f8fafc; }
277
- .detail-head { display: flex; justify-content: space-between; gap: 20px; }
278
- .detail-kicker { display: flex; align-items: center; flex-wrap: wrap; gap: 8px; color: #6b7280; font-size: 12px; }
279
- .detail-head h2 { margin: 10px 0 6px; font-size: 28px; letter-spacing: -0.02em; }
280
- .detail-head p { margin: 0; color: #374151; max-width: 980px; }
281
- .badge-row { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 8px; }
282
- .badge { display: inline-flex; align-items: center; max-width: 190px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; padding: 4px 8px; border-radius: 999px; background: #eef2ff; color: #3730a3; font-size: 11px; font-weight: 700; }
283
- .badge.warn { background: #fef3c7; color: #92400e; }
284
- .badge.danger { background: #fee2e2; color: #991b1b; }
285
- .actions { display: flex; flex-wrap: wrap; gap: 8px; margin: 18px 0; }
286
- .actions button {
287
- border: 0;
288
- background: linear-gradient(180deg, #ffffff, #f8fafc);
289
- color: #334155;
290
- border-radius: 999px;
291
- padding: 8px 13px;
292
- font-size: 13px;
293
- font-weight: 700;
294
- box-shadow: inset 0 0 0 1px #dbe3ef, 0 4px 10px rgba(15,23,42,0.04);
295
- transition: transform .12s ease, box-shadow .12s ease, color .12s ease;
296
- }
297
- .actions button:hover { transform: translateY(-1px); color: #5b21b6; box-shadow: inset 0 0 0 1px #a78bfa, 0 8px 18px rgba(124,58,237,0.12); }
298
- .notice { display: inline-block; margin-bottom: 12px; padding: 8px 10px; background: #dcfce7; border: 1px solid #86efac; border-radius: 10px; color: #166534; font-size: 13px; }
299
-
300
- .usage-card {
301
- margin: 0 0 18px;
302
- padding: 16px;
303
- border: 1px solid #dbe3ef;
304
- border-radius: 18px;
305
- background: linear-gradient(180deg, #ffffff, #f8fafc);
306
- box-shadow: 0 10px 26px rgba(15,23,42,0.05);
307
- }
308
- .usage-head { display: flex; justify-content: space-between; align-items: center; gap: 14px; margin-bottom: 12px; }
309
- .usage-head span { color: #7c3aed; font-size: 11px; font-weight: 900; letter-spacing: .09em; text-transform: uppercase; }
310
- .usage-head h3 { margin: 2px 0 0; font-size: 18px; }
311
- .usage-head button {
312
- border: 0;
313
- border-radius: 999px;
314
- padding: 8px 12px;
315
- color: #fff;
316
- background: linear-gradient(135deg, #7c3aed, #2563eb);
317
- font-weight: 800;
318
- }
319
- .usage-prompt { padding: 12px; border-radius: 13px; background: #0f172a; color: #dbeafe; overflow: auto; }
320
- .usage-prompt code { white-space: pre-wrap; word-break: break-word; font-size: 12px; }
321
- .usage-grid { display: grid; grid-template-columns: 1.4fr 1fr; gap: 12px; margin-top: 12px; }
322
- .usage-grid > div, .usage-block { border: 1px solid #eef2f7; border-radius: 14px; padding: 12px; background: #fff; }
323
- .usage-card strong { display: block; color: #334155; font-size: 12px; margin-bottom: 6px; }
324
- .usage-card p { margin: 0; color: #475569; font-size: 13px; line-height: 1.5; }
325
- .usage-block { margin-top: 10px; }
326
- .param-table { display: grid; gap: 8px; }
327
- .param-table > div { display: grid; grid-template-columns: minmax(90px, .7fr) minmax(60px, .4fr) auto minmax(160px, 1.4fr); gap: 8px; align-items: start; font-size: 12px; }
328
- .param-table code { color: #5b21b6; background: #ede9fe; border-radius: 6px; padding: 2px 6px; }
329
- .param-table b { color: #991b1b; background: #fee2e2; border-radius: 999px; padding: 2px 6px; font-size: 11px; }
330
- .param-table p { font-size: 12px; }
331
- .usage-link { display: inline-flex; margin: 0 6px 6px 0; padding: 4px 8px; border-radius: 999px; color: #2563eb; background: #eff6ff; text-decoration: none; font-size: 12px; }
332
-
333
- .kv { margin: 0 0 18px; background: #fff; border: 1px solid #d9dee8; border-radius: 14px; padding: 10px 14px; }
334
- .kv div { display: grid; grid-template-columns: 90px 1fr; gap: 12px; padding: 7px 0; border-bottom: 1px solid #eef2f7; }
335
- .kv div:last-child { border-bottom: 0; }
336
- .kv dt { color: #6b7280; font-size: 12px; text-transform: uppercase; letter-spacing: .05em; }
337
- .kv dd { margin: 0; min-width: 0; }
338
- .kv-error dt, .kv-error dd { color: #991b1b; }
339
- .kv code { word-break: break-all; font-size: 12px; color: #374151; }
340
- .tag { display: inline-block; max-width: 520px; overflow: hidden; text-overflow: ellipsis; vertical-align: middle; white-space: nowrap; margin: 0 5px 5px 0; padding: 4px 8px; background: #eef2ff; color: #3730a3; border-radius: 999px; font-size: 12px; }
341
-
342
- .markdown { background: #fff; border: 1px solid #d9dee8; border-radius: 14px; padding: 20px 24px; line-height: 1.68; }
343
- .markdown h1, .markdown h2, .markdown h3 { line-height: 1.25; margin-top: 1.2em; }
344
- .markdown h1:first-child, .markdown h2:first-child { margin-top: 0; }
345
- .markdown pre { background: #0f172a; color: #dbeafe; padding: 14px; border-radius: 12px; overflow: auto; }
346
- .markdown code { background: #eef2ff; padding: 2px 5px; border-radius: 5px; }
347
- .markdown pre code { background: transparent; padding: 0; }
348
- .markdown blockquote { margin: 1em 0; padding: .1em 1em; border-left: 4px solid #c4b5fd; background: #f5f3ff; color: #4c1d95; }
349
- .markdown table { border-collapse: collapse; width: 100%; overflow: auto; }
350
- .markdown th, .markdown td { border: 1px solid #d9dee8; padding: 6px 8px; }
351
-
352
- .error, .loading { margin: 16px; padding: 12px 14px; border-radius: 12px; }
353
- .error { background: #fee2e2; color: #991b1b; }
354
- .loading { background: #e0f2fe; color: #075985; }
355
-
356
- @media (max-width: 1000px) {
357
- .shell { grid-template-columns: 1fr; }
358
- .sidebar { display: none; }
359
- .toolbar-main { grid-template-columns: 1fr; }
360
- .toolbar-facets { grid-template-columns: 1fr 1fr; }
361
- .usage-grid { grid-template-columns: 1fr; }
362
- .param-table > div { grid-template-columns: 1fr; }
363
- .content { grid-template-columns: 1fr; }
364
- .detail-panel { display: none; }
365
- }
@@ -1,17 +0,0 @@
1
- import { defineConfig } from 'vite';
2
- import vue from '@vitejs/plugin-vue';
3
-
4
- export default defineConfig({
5
- plugins: [vue()],
6
- server: {
7
- host: '127.0.0.1',
8
- port: 11521,
9
- proxy: {
10
- '/api': 'http://127.0.0.1:11520',
11
- },
12
- },
13
- build: {
14
- outDir: 'dist',
15
- emptyOutDir: true,
16
- },
17
- });
File without changes
File without changes