@leanspec/ui 0.2.14 → 0.2.15

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 (150) hide show
  1. package/bin/leanspec-ui.js +126 -0
  2. package/dist/assets/_baseUniq-B6x_7o5y.js +1 -0
  3. package/dist/assets/arc-DZ27bDb2.js +1 -0
  4. package/dist/assets/architectureDiagram-VXUJARFQ-VTQAQir-.js +36 -0
  5. package/dist/assets/blockDiagram-VD42YOAC-BeZAaaB1.js +122 -0
  6. package/dist/assets/c4Diagram-YG6GDRKO-BnT3bg74.js +10 -0
  7. package/dist/assets/channel-BSVY_tOy.js +1 -0
  8. package/dist/assets/chunk-4BX2VUAB-qtS73lje.js +1 -0
  9. package/dist/assets/chunk-55IACEB6-B41Ne73X.js +1 -0
  10. package/dist/assets/chunk-B4BG7PRW-CRL0j0p8.js +165 -0
  11. package/dist/assets/chunk-DI55MBZ5-BRa_G3mf.js +220 -0
  12. package/dist/assets/chunk-FMBD7UC4-D_AT_wL5.js +15 -0
  13. package/dist/assets/chunk-QN33PNHL-Q1Nos5j_.js +1 -0
  14. package/dist/assets/chunk-QZHKN3VN-DflSXVVh.js +1 -0
  15. package/dist/assets/chunk-TZMSLE5B-B0OC-s8d.js +1 -0
  16. package/dist/assets/classDiagram-2ON5EDUG-Dn0xX9IG.js +1 -0
  17. package/dist/assets/classDiagram-v2-WZHVMYZB-Dn0xX9IG.js +1 -0
  18. package/dist/assets/clone-C-KMhWbr.js +1 -0
  19. package/dist/assets/core-DV6XEvTN.js +1 -0
  20. package/dist/assets/cose-bilkent-S5V4N54A-CboCNDKn.js +1 -0
  21. package/dist/assets/cytoscape.esm-5J0xJHOV.js +321 -0
  22. package/dist/assets/dagre-6UL2VRFP-DOonQ6kf.js +4 -0
  23. package/dist/assets/diagram-PSM6KHXK-DPYPbSse.js +24 -0
  24. package/dist/assets/diagram-QEK2KX5R-DfTIvQXt.js +43 -0
  25. package/dist/assets/diagram-S2PKOQOG-Dl0bD_cb.js +24 -0
  26. package/dist/assets/erDiagram-Q2GNP2WA-C36i3Lze.js +60 -0
  27. package/dist/assets/flowDiagram-NV44I4VS-BskiGL1V.js +162 -0
  28. package/dist/assets/ganttDiagram-JELNMOA3-BvEghcko.js +267 -0
  29. package/dist/assets/gitGraphDiagram-NY62KEGX-BEkcYMS3.js +65 -0
  30. package/dist/assets/graph-DfQs0Ukg.js +1 -0
  31. package/dist/assets/index-BQDji5Db.js +389 -0
  32. package/dist/assets/index-BaBk6Eb5.css +1 -0
  33. package/dist/assets/infoDiagram-WHAUD3N6-BNQZZTcd.js +2 -0
  34. package/dist/assets/journeyDiagram-XKPGCS4Q-BmcOKIu0.js +139 -0
  35. package/dist/assets/kanban-definition-3W4ZIXB7-etkUgKbz.js +89 -0
  36. package/dist/assets/katex-XbL3y5x-.js +261 -0
  37. package/dist/assets/layout-CyPK9cFq.js +1 -0
  38. package/dist/assets/min-D1_JVZu9.js +1 -0
  39. package/dist/assets/mindmap-definition-VGOIOE7T-D-3bnFXY.js +68 -0
  40. package/dist/assets/pieDiagram-ADFJNKIX-SSpBbb1Z.js +30 -0
  41. package/dist/assets/quadrantDiagram-AYHSOK5B-kCW_e4Rj.js +7 -0
  42. package/dist/assets/requirementDiagram-UZGBJVZJ-B-hRBRHn.js +64 -0
  43. package/dist/assets/sankeyDiagram-TZEHDZUN-Bq18cS4Z.js +10 -0
  44. package/dist/assets/sequenceDiagram-WL72ISMW-D6dOwWak.js +145 -0
  45. package/dist/assets/stateDiagram-FKZM4ZOC-DRnWZawn.js +1 -0
  46. package/dist/assets/stateDiagram-v2-4FDKWEC3-ortqHAq8.js +1 -0
  47. package/dist/assets/timeline-definition-IT6M3QCI-DLIDeF--.js +61 -0
  48. package/dist/assets/treemap-KMMF4GRG-D5oyLJbR.js +128 -0
  49. package/dist/assets/xychartDiagram-PRI3JC2R-B_qUVnv4.js +7 -0
  50. package/{index.html → dist/index.html} +2 -1
  51. package/package.json +10 -1
  52. package/eslint.config.js +0 -23
  53. package/package.json.backup +0 -83
  54. package/postcss.config.js +0 -6
  55. package/src/App.css +0 -42
  56. package/src/App.tsx +0 -17
  57. package/src/assets/react.svg +0 -1
  58. package/src/components/LanguageSwitcher.tsx +0 -67
  59. package/src/components/Layout.tsx +0 -88
  60. package/src/components/MainSidebar.tsx +0 -163
  61. package/src/components/MermaidDiagram.tsx +0 -85
  62. package/src/components/MinimalLayout.tsx +0 -51
  63. package/src/components/Navigation.tsx +0 -254
  64. package/src/components/PriorityBadge.tsx +0 -59
  65. package/src/components/ProjectSwitcher.tsx +0 -222
  66. package/src/components/QuickSearch.tsx +0 -225
  67. package/src/components/RootRedirect.tsx +0 -40
  68. package/src/components/SpecDetailLayout.context.ts +0 -10
  69. package/src/components/SpecDetailLayout.tsx +0 -14
  70. package/src/components/SpecsNavSidebar.tsx +0 -615
  71. package/src/components/StatusBadge.tsx +0 -59
  72. package/src/components/ThemeToggle.tsx +0 -25
  73. package/src/components/Tooltip.tsx +0 -29
  74. package/src/components/context/ContextClient.tsx +0 -471
  75. package/src/components/context/ContextFileDetail.tsx +0 -163
  76. package/src/components/dashboard/ActivityItem.tsx +0 -36
  77. package/src/components/dashboard/DashboardClient.tsx +0 -218
  78. package/src/components/dashboard/SpecListItem.tsx +0 -58
  79. package/src/components/dashboard/StatCard.tsx +0 -52
  80. package/src/components/dependencies/SpecNode.tsx +0 -128
  81. package/src/components/dependencies/SpecSidebar.tsx +0 -256
  82. package/src/components/dependencies/constants.ts +0 -25
  83. package/src/components/dependencies/types.ts +0 -38
  84. package/src/components/dependencies/utils.ts +0 -261
  85. package/src/components/metadata-editors/PriorityEditor.tsx +0 -89
  86. package/src/components/metadata-editors/StatusEditor.tsx +0 -85
  87. package/src/components/metadata-editors/TagsEditor.tsx +0 -207
  88. package/src/components/projects/CreateProjectDialog.tsx +0 -162
  89. package/src/components/projects/DirectoryPicker.tsx +0 -182
  90. package/src/components/shared/BackToTop.tsx +0 -39
  91. package/src/components/shared/ColorPicker.tsx +0 -68
  92. package/src/components/shared/EmptyState.tsx +0 -35
  93. package/src/components/shared/ErrorBoundary.tsx +0 -79
  94. package/src/components/shared/PageHeader.tsx +0 -23
  95. package/src/components/shared/PageTransition.tsx +0 -40
  96. package/src/components/shared/ProjectAvatar.tsx +0 -107
  97. package/src/components/shared/Skeletons.tsx +0 -184
  98. package/src/components/spec-detail/EditableMetadata.tsx +0 -129
  99. package/src/components/spec-detail/MarkdownRenderer.tsx +0 -47
  100. package/src/components/spec-detail/TableOfContents.tsx +0 -150
  101. package/src/components/specs/BoardView.tsx +0 -204
  102. package/src/components/specs/ListView.tsx +0 -62
  103. package/src/components/specs/SpecsFilters.tsx +0 -190
  104. package/src/contexts/KeyboardShortcutsContext.tsx +0 -95
  105. package/src/contexts/LayoutContext.tsx +0 -45
  106. package/src/contexts/ProjectContext.tsx +0 -163
  107. package/src/contexts/ThemeContext.tsx +0 -90
  108. package/src/contexts/index.ts +0 -7
  109. package/src/hooks/useKeyboardShortcuts.ts +0 -87
  110. package/src/index.css +0 -624
  111. package/src/lib/api.ts +0 -72
  112. package/src/lib/backend-adapter.ts +0 -382
  113. package/src/lib/date-utils.ts +0 -122
  114. package/src/lib/i18n.test.ts +0 -57
  115. package/src/lib/i18n.ts +0 -51
  116. package/src/lib/markdown-utils.ts +0 -38
  117. package/src/lib/sub-spec-utils.ts +0 -166
  118. package/src/lib/utils.ts +0 -6
  119. package/src/locales/en/common.json +0 -660
  120. package/src/locales/en/errors.json +0 -20
  121. package/src/locales/en/help.json +0 -8
  122. package/src/locales/zh-CN/common.json +0 -660
  123. package/src/locales/zh-CN/errors.json +0 -20
  124. package/src/locales/zh-CN/help.json +0 -8
  125. package/src/main.tsx +0 -12
  126. package/src/pages/ContextPage.tsx +0 -111
  127. package/src/pages/DashboardPage.tsx +0 -97
  128. package/src/pages/DependenciesPage.tsx +0 -881
  129. package/src/pages/ProjectsPage.tsx +0 -432
  130. package/src/pages/SpecDetailPage.tsx +0 -592
  131. package/src/pages/SpecsPage.tsx +0 -319
  132. package/src/pages/StatsPage.tsx +0 -307
  133. package/src/router/projectRoutes.tsx +0 -36
  134. package/src/router.tsx +0 -33
  135. package/src/test/setup.ts +0 -39
  136. package/src/types/api.ts +0 -185
  137. package/tailwind.config.ts +0 -57
  138. package/tsconfig.app.json +0 -29
  139. package/tsconfig.json +0 -7
  140. package/tsconfig.node.json +0 -26
  141. package/tsconfig.tsbuildinfo +0 -1
  142. package/vite.config.ts +0 -27
  143. package/vitest.config.ts +0 -18
  144. /package/{public → dist}/favicon.ico +0 -0
  145. /package/{public → dist}/github-mark-white.svg +0 -0
  146. /package/{public → dist}/github-mark.svg +0 -0
  147. /package/{public → dist}/logo-dark-bg.svg +0 -0
  148. /package/{public → dist}/logo-with-bg.svg +0 -0
  149. /package/{public → dist}/logo.svg +0 -0
  150. /package/{public → dist}/vite.svg +0 -0
package/src/index.css DELETED
@@ -1,624 +0,0 @@
1
- @tailwind base;
2
- @tailwind components;
3
- @tailwind utilities;
4
-
5
- @layer base {
6
- :root {
7
- --background: 0 0% 100%;
8
- --foreground: 222.2 84% 4.9%;
9
- --card: 0 0% 100%;
10
- --card-foreground: 222.2 84% 4.9%;
11
- --popover: 0 0% 100%;
12
- --popover-foreground: 222.2 84% 4.9%;
13
- --primary: 221.2 83.2% 53.3%;
14
- --primary-foreground: 210 40% 98%;
15
- --secondary: 210 40% 96.1%;
16
- --secondary-foreground: 222.2 47.4% 11.2%;
17
- --muted: 210 40% 96.1%;
18
- --muted-foreground: 215.4 16.3% 46.9%;
19
- --accent: 210 40% 96.1%;
20
- --accent-foreground: 222.2 47.4% 11.2%;
21
- --destructive: 0 84.2% 60.2%;
22
- --destructive-foreground: 210 40% 98%;
23
- --border: 214.3 31.8% 91.4%;
24
- --input: 214.3 31.8% 91.4%;
25
- --ring: 221.2 83.2% 53.3%;
26
- --radius: 0.5rem;
27
- }
28
-
29
- .dark {
30
- --background: 222.2 84% 4.9%;
31
- --foreground: 210 40% 98%;
32
- --card: 222.2 84% 4.9%;
33
- --card-foreground: 210 40% 98%;
34
- --popover: 222.2 84% 4.9%;
35
- --popover-foreground: 210 40% 98%;
36
- --primary: 217.2 91.2% 59.8%;
37
- --primary-foreground: 222.2 47.4% 11.2%;
38
- --secondary: 217.2 32.6% 17.5%;
39
- --secondary-foreground: 210 40% 98%;
40
- --muted: 217.2 32.6% 17.5%;
41
- --muted-foreground: 215 20.2% 65.1%;
42
- --accent: 217.2 32.6% 17.5%;
43
- --accent-foreground: 210 40% 98%;
44
- --destructive: 0 62.8% 30.6%;
45
- --destructive-foreground: 210 40% 98%;
46
- --border: 217.2 32.6% 17.5%;
47
- --input: 217.2 32.6% 17.5%;
48
- --ring: 224.3 76.3% 48%;
49
- }
50
-
51
- /* Override Tailwind's default border color to use theme variable */
52
- * {
53
- border-color: hsl(var(--border));
54
- }
55
- }
56
-
57
- body {
58
- font-family: system-ui, -apple-system, sans-serif;
59
- @apply bg-background text-foreground antialiased;
60
- }
61
-
62
- /* Smooth transitions */
63
- * {
64
- @apply transition-colors duration-150 ease-in-out;
65
- }
66
-
67
- /* Remove transition from transform for better performance */
68
- *:where([class*="transform"], [class*="scale"], [class*="translate"]) {
69
- @apply transition-all duration-150 ease-in-out;
70
- }
71
-
72
- /* Disable transitions for theme changes to prevent flash */
73
- html.changing-theme * {
74
- transition: none !important;
75
- }
76
-
77
- /* Syntax highlighting - VS Code inspired theme */
78
- .hljs {
79
- background: hsl(220 13% 96%);
80
- color: hsl(220 14% 10%);
81
- padding: 0;
82
- border-radius: 0.5rem;
83
- overflow-x: auto;
84
- font-size: 0.875rem;
85
- line-height: 1.7;
86
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
87
- box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);
88
- border: 1px solid hsl(220 13% 91%);
89
- }
90
-
91
- .hljs-comment,
92
- .hljs-quote {
93
- color: hsl(220 10% 40%);
94
- font-style: italic;
95
- }
96
-
97
- .hljs-keyword,
98
- .hljs-selector-tag,
99
- .hljs-subst {
100
- color: hsl(286 60% 50%);
101
- font-weight: 600;
102
- }
103
-
104
- .hljs-number,
105
- .hljs-literal,
106
- .hljs-variable,
107
- .hljs-template-variable,
108
- .hljs-tag .hljs-attr {
109
- color: hsl(207 82% 45%);
110
- }
111
-
112
- .hljs-string,
113
- .hljs-doctag {
114
- color: hsl(95 38% 40%);
115
- }
116
-
117
- .hljs-title,
118
- .hljs-section,
119
- .hljs-selector-id {
120
- color: hsl(29 54% 45%);
121
- font-weight: 600;
122
- }
123
-
124
- .hljs-type,
125
- .hljs-class .hljs-title {
126
- color: hsl(39 67% 50%);
127
- }
128
-
129
- .hljs-tag,
130
- .hljs-name,
131
- .hljs-attribute {
132
- color: hsl(355 65% 55%);
133
- font-weight: normal;
134
- }
135
-
136
- .hljs-regexp,
137
- .hljs-link {
138
- color: hsl(187 47% 45%);
139
- }
140
-
141
- .hljs-symbol,
142
- .hljs-bullet {
143
- color: hsl(41 53% 50%);
144
- }
145
-
146
- .hljs-built_in,
147
- .hljs-builtin-name {
148
- color: hsl(187 47% 45%);
149
- }
150
-
151
- .hljs-meta {
152
- color: hsl(220 14% 40%);
153
- }
154
-
155
- .hljs-deletion {
156
- background: hsl(0 100% 90%);
157
- color: hsl(0 100% 30%);
158
- }
159
-
160
- .hljs-addition {
161
- background: hsl(120 100% 90%);
162
- color: hsl(120 100% 25%);
163
- }
164
-
165
- .hljs-emphasis {
166
- font-style: italic;
167
- }
168
-
169
- .hljs-strong {
170
- font-weight: 700;
171
- }
172
-
173
- /* Syntax highlighting - Dark mode */
174
- .dark .hljs {
175
- background: hsl(220 13% 14%);
176
- color: hsl(220 14% 96%);
177
- box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.3);
178
- border-color: hsl(220 13% 20%);
179
- }
180
-
181
- .dark .hljs-comment,
182
- .dark .hljs-quote {
183
- color: hsl(220 10% 45%);
184
- }
185
-
186
- .dark .hljs-keyword,
187
- .dark .hljs-selector-tag,
188
- .dark .hljs-subst {
189
- color: hsl(286 60% 72%);
190
- }
191
-
192
- .dark .hljs-number,
193
- .dark .hljs-literal,
194
- .dark .hljs-variable,
195
- .dark .hljs-template-variable,
196
- .dark .hljs-tag .hljs-attr {
197
- color: hsl(207 82% 71%);
198
- }
199
-
200
- .dark .hljs-string,
201
- .dark .hljs-doctag {
202
- color: hsl(95 38% 67%);
203
- }
204
-
205
- .dark .hljs-title,
206
- .dark .hljs-section,
207
- .dark .hljs-selector-id {
208
- color: hsl(29 54% 66%);
209
- }
210
-
211
- .dark .hljs-type,
212
- .dark .hljs-class .hljs-title {
213
- color: hsl(39 67% 74%);
214
- }
215
-
216
- .dark .hljs-tag,
217
- .dark .hljs-name,
218
- .dark .hljs-attribute {
219
- color: hsl(355 65% 70%);
220
- }
221
-
222
- .dark .hljs-regexp,
223
- .dark .hljs-link {
224
- color: hsl(187 47% 60%);
225
- }
226
-
227
- .dark .hljs-symbol,
228
- .dark .hljs-bullet {
229
- color: hsl(41 53% 72%);
230
- }
231
-
232
- .dark .hljs-built_in,
233
- .dark .hljs-builtin-name {
234
- color: hsl(187 47% 60%);
235
- }
236
-
237
- .dark .hljs-meta {
238
- color: hsl(220 14% 76%);
239
- }
240
-
241
- .dark .hljs-deletion {
242
- background: hsl(0 100% 25%);
243
- color: hsl(0 100% 90%);
244
- }
245
-
246
- .dark .hljs-addition {
247
- background: hsl(120 100% 25%);
248
- color: hsl(120 100% 90%);
249
- }
250
-
251
- /* Prose styling for markdown content */
252
- .prose {
253
- max-width: none;
254
- color: hsl(222.2 84% 4.9%);
255
- font-size: 1rem;
256
- line-height: 1.75;
257
- }
258
-
259
- /* Mobile-specific prose adjustments */
260
- @media (max-width: 640px) {
261
- .prose {
262
- font-size: 0.9375rem;
263
- line-height: 1.65;
264
- }
265
-
266
- .prose h1 {
267
- font-size: 1.75em;
268
- }
269
-
270
- .prose h2 {
271
- font-size: 1.5em;
272
- }
273
-
274
- .prose h3 {
275
- font-size: 1.25em;
276
- }
277
-
278
- .prose h4 {
279
- font-size: 1.125em;
280
- }
281
-
282
- .prose pre {
283
- margin-left: -0.75rem;
284
- margin-right: -0.75rem;
285
- border-radius: 0;
286
- }
287
-
288
- .prose table {
289
- display: block;
290
- overflow-x: auto;
291
- -webkit-overflow-scrolling: touch;
292
- }
293
- }
294
-
295
- .prose h1,
296
- .prose h2,
297
- .prose h3,
298
- .prose h4,
299
- .prose h5,
300
- .prose h6 {
301
- font-weight: 600;
302
- line-height: 1.25;
303
- margin-top: 1.5em;
304
- margin-bottom: 0.5em;
305
- color: hsl(222.2 84% 4.9%);
306
- scroll-margin-top: 5rem;
307
- }
308
-
309
- .prose h1 {
310
- font-size: 2em;
311
- margin-top: 0;
312
- border-bottom: 1px solid hsl(214.3 31.8% 91.4%);
313
- padding-bottom: 0.25em;
314
- }
315
-
316
- .prose h2 {
317
- font-size: 1.65em;
318
- border-bottom: 1px solid hsl(214.3 31.8% 91.4%);
319
- padding-bottom: 0.25em;
320
- }
321
-
322
- .prose h3 {
323
- font-size: 1.35em;
324
- }
325
-
326
- .prose h4 {
327
- font-size: 1.15em;
328
- }
329
-
330
- .prose h5 {
331
- font-size: 1.05em;
332
- }
333
-
334
- .prose h6 {
335
- font-size: 1em;
336
- }
337
-
338
- .prose p {
339
- margin-top: 1em;
340
- margin-bottom: 1em;
341
- line-height: 1.7;
342
- }
343
-
344
- .prose a {
345
- color: hsl(221 83% 53%);
346
- text-decoration: underline;
347
- text-decoration-color: hsl(221 83% 53% / 0.3);
348
- transition: all 0.2s;
349
- }
350
-
351
- .prose a:hover {
352
- text-decoration-color: hsl(221 83% 53%);
353
- color: hsl(221 83% 43%);
354
- }
355
-
356
- .prose :not(pre)>code {
357
- background: hsl(220 13% 95%);
358
- color: hsl(355 65% 45%);
359
- padding: 0.2em 0.4em;
360
- border-radius: 0.25rem;
361
- font-size: 0.875em;
362
- font-weight: 600;
363
- font-family: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
364
- border: 1px solid hsl(220 13% 88%);
365
- }
366
-
367
- .prose pre {
368
- margin: 1.25em 0;
369
- overflow-x: auto;
370
- border-radius: 0.5rem;
371
- box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
372
- border: 1px solid hsl(220 13% 91%);
373
- }
374
-
375
- .prose pre code {
376
- background: transparent !important;
377
- border-radius: 0 !important;
378
- border: none !important;
379
- font-size: 0.875em;
380
- line-height: 1.7;
381
- color: inherit;
382
- font-weight: 400;
383
- display: block;
384
- }
385
-
386
- .prose ul,
387
- .prose ol {
388
- margin-top: 0.75em;
389
- margin-bottom: 0.75em;
390
- padding-left: 1.625em;
391
- }
392
-
393
- .prose li {
394
- margin-top: 0.5em;
395
- margin-bottom: 0.5em;
396
- }
397
-
398
- .prose blockquote {
399
- border-left: 4px solid hsl(221 83% 53%);
400
- padding-left: 1em;
401
- padding-top: 0.25em;
402
- padding-bottom: 0.25em;
403
- margin: 1em 0;
404
- background: hsl(210 40% 98%);
405
- border-radius: 0 0.25rem 0.25rem 0;
406
- color: hsl(215.4 16.3% 36.9%);
407
- }
408
-
409
- .prose blockquote p {
410
- margin: 0.5em 0;
411
- }
412
-
413
- .prose table {
414
- width: 100%;
415
- border-collapse: collapse;
416
- margin: 1.5em 0;
417
- }
418
-
419
- .prose th,
420
- .prose td {
421
- border: 1px solid hsl(214.3 31.8% 91.4%);
422
- padding: 0.5em 1em;
423
- text-align: left;
424
- }
425
-
426
- .prose th {
427
- background: hsl(var(--muted));
428
- font-weight: 600;
429
- color: hsl(var(--muted-foreground));
430
- }
431
-
432
- .prose hr {
433
- border: none;
434
- border-top: 1px solid hsl(214.3 31.8% 91.4%);
435
- margin: 2em 0;
436
- }
437
-
438
- .prose img {
439
- max-width: 100%;
440
- height: auto;
441
- border-radius: 0.5rem;
442
- margin: 1.5em 0;
443
- }
444
-
445
- .prose strong,
446
- .prose b {
447
- font-weight: 600;
448
- color: hsl(222.2 84% 4.9%);
449
- }
450
-
451
- /* Dark mode prose styling */
452
- .dark .prose {
453
- color: hsl(210 40% 98%);
454
- }
455
-
456
- .dark .prose strong,
457
- .dark .prose b {
458
- font-weight: 600;
459
- color: hsl(210 40% 98%);
460
- }
461
-
462
- .dark .prose h1,
463
- .dark .prose h2,
464
- .dark .prose h3,
465
- .dark .prose h4,
466
- .dark .prose h5,
467
- .dark .prose h6 {
468
- color: hsl(210 40% 98%);
469
- }
470
-
471
- .dark .prose h1,
472
- .dark .prose h2 {
473
- border-bottom-color: hsl(217.2 32.6% 17.5%);
474
- }
475
-
476
- .dark .prose a {
477
- color: hsl(217 91% 70%);
478
- text-decoration-color: hsl(217 91% 70% / 0.3);
479
- }
480
-
481
- .dark .prose a:hover {
482
- text-decoration-color: hsl(217 91% 70%);
483
- color: hsl(217 91% 80%);
484
- }
485
-
486
- .dark .prose :not(pre)>code {
487
- background: hsl(220 13% 18%);
488
- color: hsl(355 65% 70%);
489
- border-color: hsl(220 13% 25%);
490
- font-weight: 600;
491
- }
492
-
493
- .dark .prose pre {
494
- border-color: hsl(220 13% 20%);
495
- box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.3), 0 2px 4px -2px rgb(0 0 0 / 0.3);
496
- }
497
-
498
- .dark .prose blockquote {
499
- border-left-color: hsl(217 91% 70%);
500
- background: hsl(217.2 32.6% 12%);
501
- color: hsl(215 20% 75%);
502
- }
503
-
504
- .dark .prose th,
505
- .dark .prose td {
506
- border-color: hsl(217.2 32.6% 17.5%);
507
- }
508
-
509
- .dark .prose th {
510
- background: hsl(var(--muted));
511
- color: hsl(var(--muted-foreground));
512
- }
513
-
514
- .dark .prose hr {
515
- border-top-color: hsl(217.2 32.6% 17.5%);
516
- }
517
-
518
- /* Custom scrollbar styles */
519
- @layer utilities {
520
- .scrollbar-thin {
521
- scrollbar-width: thin;
522
- }
523
-
524
- .scrollbar-thumb-muted-foreground\/20::-webkit-scrollbar-thumb {
525
- background-color: hsl(var(--muted-foreground) / 0.2);
526
- }
527
-
528
- .scrollbar-thumb-muted-foreground\/40::-webkit-scrollbar-thumb {
529
- background-color: hsl(var(--muted-foreground) / 0.4);
530
- }
531
-
532
- .scrollbar-track-transparent::-webkit-scrollbar-track {
533
- background-color: transparent;
534
- }
535
-
536
- .hover\:scrollbar-thumb-muted-foreground\/40:hover::-webkit-scrollbar-thumb {
537
- background-color: hsl(var(--muted-foreground) / 0.4);
538
- }
539
-
540
- ::-webkit-scrollbar {
541
- width: 8px;
542
- height: 8px;
543
- }
544
-
545
- ::-webkit-scrollbar-track {
546
- background: transparent;
547
- }
548
-
549
- ::-webkit-scrollbar-thumb {
550
- background-color: hsl(var(--muted-foreground) / 0.2);
551
- border-radius: 4px;
552
- }
553
-
554
- ::-webkit-scrollbar-thumb:hover {
555
- background-color: hsl(var(--muted-foreground) / 0.4);
556
- }
557
-
558
- /* Prevent horizontal scrolling where needed */
559
- .overflow-x-hidden {
560
- overflow-x: hidden !important;
561
- }
562
-
563
- /* Vertical text for collapsed columns (ADO-style) */
564
- .writing-mode-vertical-rl {
565
- writing-mode: vertical-rl;
566
- }
567
-
568
- .vertical-text {
569
- writing-mode: vertical-rl;
570
- transform: rotate(180deg);
571
- }
572
-
573
- /* Auto-hiding scrollbar - visible only on hover */
574
- .scrollbar-auto-hide {
575
- scrollbar-width: thin;
576
- scrollbar-color: transparent transparent;
577
- }
578
-
579
- .scrollbar-auto-hide:hover {
580
- scrollbar-color: hsl(var(--muted-foreground) / 0.3) transparent;
581
- }
582
-
583
- .scrollbar-auto-hide::-webkit-scrollbar {
584
- width: 4px;
585
- }
586
-
587
- .scrollbar-auto-hide::-webkit-scrollbar-track {
588
- background: transparent;
589
- }
590
-
591
- .scrollbar-auto-hide::-webkit-scrollbar-thumb {
592
- background-color: transparent;
593
- border-radius: 20px;
594
- }
595
-
596
- .scrollbar-auto-hide:hover::-webkit-scrollbar-thumb {
597
- background-color: hsl(var(--muted-foreground) / 0.3);
598
- }
599
-
600
- /* Touch-friendly interactions */
601
- .touch-manipulation {
602
- touch-action: manipulation;
603
- -webkit-tap-highlight-color: transparent;
604
- }
605
-
606
- /* Smooth scrolling with momentum on mobile */
607
- .scroll-smooth-mobile {
608
- -webkit-overflow-scrolling: touch;
609
- scroll-behavior: smooth;
610
- }
611
-
612
- /* Snap scrolling for horizontal board view */
613
- .snap-x {
614
- scroll-snap-type: x mandatory;
615
- }
616
-
617
- .snap-start {
618
- scroll-snap-align: start;
619
- }
620
-
621
- .snap-mandatory {
622
- scroll-snap-type: x mandatory;
623
- }
624
- }
package/src/lib/api.ts DELETED
@@ -1,72 +0,0 @@
1
- import { getBackend, APIError, type BackendAdapter } from "./backend-adapter";
2
- import i18n from "./i18n";
3
- import type { ListParams, Spec, SpecDetail, Stats, DependencyGraph } from "../types/api";
4
-
5
- /**
6
- * Project-aware API wrapper
7
- * Automatically injects currentProjectId from context into backend adapter calls
8
- */
9
- class ProjectAPI {
10
- private backend: BackendAdapter;
11
- private _currentProjectId: string | null = null;
12
-
13
- constructor() {
14
- this.backend = getBackend();
15
- }
16
-
17
- setCurrentProjectId(projectId: string | null) {
18
- this._currentProjectId = projectId;
19
- }
20
-
21
- getCurrentProjectId(): string {
22
- if (!this._currentProjectId) {
23
- throw new Error(i18n.t('projects.errors.noProjectSelected', { ns: 'common' }));
24
- }
25
- return this._currentProjectId;
26
- }
27
-
28
- // Pass-through methods that don't need projectId
29
- getProjects = () => this.backend.getProjects();
30
- createProject = (path: string, options?: { favorite?: boolean; color?: string; name?: string; description?: string | null }) =>
31
- this.backend.createProject(path, options);
32
- updateProject = (projectId: string, updates: Parameters<BackendAdapter['updateProject']>[1]) =>
33
- this.backend.updateProject(projectId, updates);
34
- deleteProject = (projectId: string) => this.backend.deleteProject(projectId);
35
- validateProject = (projectId: string) => this.backend.validateProject(projectId);
36
- listDirectory = (path?: string) => this.backend.listDirectory(path);
37
- getContextFiles = () => this.backend.getContextFiles();
38
- getContextFile = (path: string) => this.backend.getContextFile(path);
39
-
40
- // Project-scoped methods that automatically inject currentProjectId
41
- async getProjectContext(): Promise<import('../types/api').ProjectContext> {
42
- return this.backend.getProjectContext(this.getCurrentProjectId());
43
- }
44
-
45
- async getSpecs(params?: ListParams): Promise<Spec[]> {
46
- return this.backend.getSpecs(this.getCurrentProjectId(), params);
47
- }
48
-
49
- async getSpec(specName: string): Promise<SpecDetail> {
50
- return this.backend.getSpec(this.getCurrentProjectId(), specName);
51
- }
52
-
53
- async updateSpec(specName: string, updates: Partial<Pick<Spec, 'status' | 'priority' | 'tags'>>): Promise<void> {
54
- return this.backend.updateSpec(this.getCurrentProjectId(), specName, updates);
55
- }
56
-
57
- async getStats(): Promise<Stats> {
58
- return this.backend.getStats(this.getCurrentProjectId());
59
- }
60
-
61
- async getProjectStats(projectId: string): Promise<Stats> {
62
- return this.backend.getProjectStats(projectId);
63
- }
64
-
65
- async getDependencies(specName?: string): Promise<DependencyGraph> {
66
- return this.backend.getDependencies(this.getCurrentProjectId(), specName);
67
- }
68
- }
69
-
70
- export const api = new ProjectAPI();
71
-
72
- export { APIError };