@wtdlee/repomap 0.1.0

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 (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +527 -0
  3. package/dist/analyzers/base-analyzer.d.ts +46 -0
  4. package/dist/analyzers/base-analyzer.d.ts.map +1 -0
  5. package/dist/analyzers/base-analyzer.js +48 -0
  6. package/dist/analyzers/base-analyzer.js.map +1 -0
  7. package/dist/analyzers/dataflow-analyzer.d.ts +30 -0
  8. package/dist/analyzers/dataflow-analyzer.d.ts.map +1 -0
  9. package/dist/analyzers/dataflow-analyzer.js +426 -0
  10. package/dist/analyzers/dataflow-analyzer.js.map +1 -0
  11. package/dist/analyzers/graphql-analyzer.d.ts +23 -0
  12. package/dist/analyzers/graphql-analyzer.d.ts.map +1 -0
  13. package/dist/analyzers/graphql-analyzer.js +387 -0
  14. package/dist/analyzers/graphql-analyzer.js.map +1 -0
  15. package/dist/analyzers/index.d.ts +6 -0
  16. package/dist/analyzers/index.d.ts.map +1 -0
  17. package/dist/analyzers/index.js +6 -0
  18. package/dist/analyzers/index.js.map +1 -0
  19. package/dist/analyzers/pages-analyzer.d.ts +85 -0
  20. package/dist/analyzers/pages-analyzer.d.ts.map +1 -0
  21. package/dist/analyzers/pages-analyzer.js +1696 -0
  22. package/dist/analyzers/pages-analyzer.js.map +1 -0
  23. package/dist/analyzers/rails/index.d.ts +47 -0
  24. package/dist/analyzers/rails/index.d.ts.map +1 -0
  25. package/dist/analyzers/rails/index.js +146 -0
  26. package/dist/analyzers/rails/index.js.map +1 -0
  27. package/dist/analyzers/rails/rails-controller-analyzer.d.ts +83 -0
  28. package/dist/analyzers/rails/rails-controller-analyzer.d.ts.map +1 -0
  29. package/dist/analyzers/rails/rails-controller-analyzer.js +479 -0
  30. package/dist/analyzers/rails/rails-controller-analyzer.js.map +1 -0
  31. package/dist/analyzers/rails/rails-grpc-analyzer.d.ts +45 -0
  32. package/dist/analyzers/rails/rails-grpc-analyzer.d.ts.map +1 -0
  33. package/dist/analyzers/rails/rails-grpc-analyzer.js +263 -0
  34. package/dist/analyzers/rails/rails-grpc-analyzer.js.map +1 -0
  35. package/dist/analyzers/rails/rails-model-analyzer.d.ts +89 -0
  36. package/dist/analyzers/rails/rails-model-analyzer.d.ts.map +1 -0
  37. package/dist/analyzers/rails/rails-model-analyzer.js +494 -0
  38. package/dist/analyzers/rails/rails-model-analyzer.js.map +1 -0
  39. package/dist/analyzers/rails/rails-react-analyzer.d.ts +42 -0
  40. package/dist/analyzers/rails/rails-react-analyzer.d.ts.map +1 -0
  41. package/dist/analyzers/rails/rails-react-analyzer.js +530 -0
  42. package/dist/analyzers/rails/rails-react-analyzer.js.map +1 -0
  43. package/dist/analyzers/rails/rails-routes-analyzer.d.ts +63 -0
  44. package/dist/analyzers/rails/rails-routes-analyzer.d.ts.map +1 -0
  45. package/dist/analyzers/rails/rails-routes-analyzer.js +541 -0
  46. package/dist/analyzers/rails/rails-routes-analyzer.js.map +1 -0
  47. package/dist/analyzers/rails/rails-view-analyzer.d.ts +50 -0
  48. package/dist/analyzers/rails/rails-view-analyzer.d.ts.map +1 -0
  49. package/dist/analyzers/rails/rails-view-analyzer.js +387 -0
  50. package/dist/analyzers/rails/rails-view-analyzer.js.map +1 -0
  51. package/dist/analyzers/rails/ruby-parser.d.ts +64 -0
  52. package/dist/analyzers/rails/ruby-parser.d.ts.map +1 -0
  53. package/dist/analyzers/rails/ruby-parser.js +213 -0
  54. package/dist/analyzers/rails/ruby-parser.js.map +1 -0
  55. package/dist/analyzers/rest-api-analyzer.d.ts +66 -0
  56. package/dist/analyzers/rest-api-analyzer.d.ts.map +1 -0
  57. package/dist/analyzers/rest-api-analyzer.js +480 -0
  58. package/dist/analyzers/rest-api-analyzer.js.map +1 -0
  59. package/dist/cli.d.ts +3 -0
  60. package/dist/cli.d.ts.map +1 -0
  61. package/dist/cli.js +550 -0
  62. package/dist/cli.js.map +1 -0
  63. package/dist/core/cache.d.ts +48 -0
  64. package/dist/core/cache.d.ts.map +1 -0
  65. package/dist/core/cache.js +152 -0
  66. package/dist/core/cache.js.map +1 -0
  67. package/dist/core/engine.d.ts +47 -0
  68. package/dist/core/engine.d.ts.map +1 -0
  69. package/dist/core/engine.js +320 -0
  70. package/dist/core/engine.js.map +1 -0
  71. package/dist/core/index.d.ts +3 -0
  72. package/dist/core/index.d.ts.map +1 -0
  73. package/dist/core/index.js +3 -0
  74. package/dist/core/index.js.map +1 -0
  75. package/dist/generators/assets/common.css +187 -0
  76. package/dist/generators/assets/docs.css +363 -0
  77. package/dist/generators/assets/page-map.css +305 -0
  78. package/dist/generators/assets/rails-map.css +473 -0
  79. package/dist/generators/index.d.ts +4 -0
  80. package/dist/generators/index.d.ts.map +1 -0
  81. package/dist/generators/index.js +4 -0
  82. package/dist/generators/index.js.map +1 -0
  83. package/dist/generators/markdown-generator.d.ts +26 -0
  84. package/dist/generators/markdown-generator.d.ts.map +1 -0
  85. package/dist/generators/markdown-generator.js +783 -0
  86. package/dist/generators/markdown-generator.js.map +1 -0
  87. package/dist/generators/mermaid-generator.d.ts +36 -0
  88. package/dist/generators/mermaid-generator.d.ts.map +1 -0
  89. package/dist/generators/mermaid-generator.js +365 -0
  90. package/dist/generators/mermaid-generator.js.map +1 -0
  91. package/dist/generators/page-map-generator.d.ts +23 -0
  92. package/dist/generators/page-map-generator.d.ts.map +1 -0
  93. package/dist/generators/page-map-generator.js +3563 -0
  94. package/dist/generators/page-map-generator.js.map +1 -0
  95. package/dist/generators/rails-map-generator.d.ts +22 -0
  96. package/dist/generators/rails-map-generator.d.ts.map +1 -0
  97. package/dist/generators/rails-map-generator.js +909 -0
  98. package/dist/generators/rails-map-generator.js.map +1 -0
  99. package/dist/index.d.ts +11 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +12 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/server/doc-server.d.ts +31 -0
  104. package/dist/server/doc-server.d.ts.map +1 -0
  105. package/dist/server/doc-server.js +1233 -0
  106. package/dist/server/doc-server.js.map +1 -0
  107. package/dist/server/index.d.ts +2 -0
  108. package/dist/server/index.d.ts.map +1 -0
  109. package/dist/server/index.js +2 -0
  110. package/dist/server/index.js.map +1 -0
  111. package/dist/types.d.ts +294 -0
  112. package/dist/types.d.ts.map +1 -0
  113. package/dist/types.js +6 -0
  114. package/dist/types.js.map +1 -0
  115. package/dist/utils/env-detector.d.ts +32 -0
  116. package/dist/utils/env-detector.d.ts.map +1 -0
  117. package/dist/utils/env-detector.js +189 -0
  118. package/dist/utils/env-detector.js.map +1 -0
  119. package/dist/utils/parallel.d.ts +24 -0
  120. package/dist/utils/parallel.d.ts.map +1 -0
  121. package/dist/utils/parallel.js +71 -0
  122. package/dist/utils/parallel.js.map +1 -0
  123. package/package.json +131 -0
@@ -0,0 +1,187 @@
1
+ /* Common Styles - Shared across all pages */
2
+
3
+ /* CSS Variables */
4
+ :root {
5
+ /* Dark theme (header, page-map) */
6
+ --bg: #0f172a;
7
+ --bg2: #1e293b;
8
+ --bg3: #334155;
9
+ --text: #f8fafc;
10
+ --text2: #94a3b8;
11
+ --border: #475569;
12
+ --accent: #3b82f6;
13
+ }
14
+
15
+ /* Reset */
16
+ * { box-sizing: border-box; margin: 0; padding: 0; }
17
+ body { font-family: system-ui, sans-serif; line-height: 1.6; }
18
+
19
+ /* Header */
20
+ .header {
21
+ background: var(--bg2);
22
+ padding: 0 20px;
23
+ height: 54px;
24
+ border-bottom: 1px solid var(--border);
25
+ display: flex;
26
+ justify-content: space-between;
27
+ align-items: center;
28
+ position: sticky;
29
+ top: 0;
30
+ z-index: 100;
31
+ line-height: 1;
32
+ }
33
+ .header h1 {
34
+ font-size: 18px;
35
+ height: 28px;
36
+ display: flex;
37
+ align-items: center;
38
+ color: var(--text);
39
+ cursor: pointer;
40
+ }
41
+
42
+ /* Navigation */
43
+ .nav-link {
44
+ padding: 6px 12px;
45
+ height: 28px;
46
+ display: inline-flex;
47
+ align-items: center;
48
+ color: var(--text2);
49
+ text-decoration: none;
50
+ font-size: 13px;
51
+ border-radius: 4px;
52
+ transition: all 0.15s;
53
+ }
54
+ .nav-link:hover { background: var(--bg3); color: var(--text); }
55
+ .nav-link.active { background: var(--accent); color: white; }
56
+
57
+ /* Layout */
58
+ .main { display: flex; height: calc(100vh - 54px); }
59
+
60
+ .sidebar {
61
+ width: 280px;
62
+ background: var(--bg2);
63
+ border-right: 1px solid var(--border);
64
+ padding: 16px;
65
+ overflow-y: auto;
66
+ }
67
+ .sidebar h3 {
68
+ font-size: 10px;
69
+ text-transform: uppercase;
70
+ color: var(--text2);
71
+ margin: 16px 0 8px;
72
+ letter-spacing: 1px;
73
+ }
74
+ .sidebar h3:first-child { margin-top: 0; }
75
+
76
+ /* Tags */
77
+ .tag {
78
+ font-size: 9px;
79
+ padding: 2px 5px;
80
+ border-radius: 3px;
81
+ background: var(--bg);
82
+ color: var(--text2);
83
+ }
84
+ .tag-auth { background: #7f1d1d; color: #fca5a5; }
85
+ .tag-query { background: #1e3a5f; color: #93c5fd; }
86
+ .tag-mutation { background: #5f1e3a; color: #fda4af; }
87
+
88
+ /* Tabs */
89
+ .tabs { display: flex; gap: 4px; }
90
+ .tab {
91
+ padding: 6px 16px;
92
+ background: var(--bg3);
93
+ border: none;
94
+ border-radius: 4px;
95
+ color: var(--text2);
96
+ cursor: pointer;
97
+ font-size: 13px;
98
+ }
99
+ .tab.active { background: var(--accent); color: white; }
100
+
101
+ /* Search */
102
+ .search {
103
+ padding: 6px 12px;
104
+ background: var(--bg3);
105
+ border: 1px solid var(--border);
106
+ border-radius: 4px;
107
+ color: var(--text);
108
+ width: 200px;
109
+ }
110
+
111
+ /* Modal */
112
+ .modal {
113
+ display: none;
114
+ position: fixed;
115
+ inset: 0;
116
+ background: rgba(0,0,0,0.7);
117
+ z-index: 1000;
118
+ justify-content: center;
119
+ align-items: center;
120
+ }
121
+ .modal.open { display: flex; }
122
+ .modal-box {
123
+ background: var(--bg2);
124
+ border-radius: 8px;
125
+ width: 90%;
126
+ max-width: 500px;
127
+ max-height: 80vh;
128
+ overflow: auto;
129
+ }
130
+ .modal-head {
131
+ padding: 12px 16px;
132
+ background: var(--bg3);
133
+ display: flex;
134
+ justify-content: space-between;
135
+ align-items: center;
136
+ }
137
+ .modal-head h3 { font-size: 14px; margin: 0; }
138
+ .modal-close {
139
+ background: none;
140
+ border: none;
141
+ color: var(--text2);
142
+ font-size: 20px;
143
+ cursor: pointer;
144
+ }
145
+ .modal-body { padding: 16px; }
146
+
147
+ /* Copy Button */
148
+ .copy-btn {
149
+ background: none;
150
+ border: none;
151
+ cursor: pointer;
152
+ font-size: 14px;
153
+ padding: 2px 6px;
154
+ border-radius: 4px;
155
+ opacity: 0.7;
156
+ transition: all 0.2s;
157
+ }
158
+ .copy-btn:hover { opacity: 1; background: var(--bg3); }
159
+ .copy-btn.copied { background: #22c55e; opacity: 1; }
160
+
161
+ /* Live Indicator */
162
+ .live-indicator {
163
+ position: fixed;
164
+ bottom: 20px;
165
+ right: 20px;
166
+ background: #22c55e;
167
+ color: white;
168
+ padding: 8px 16px;
169
+ border-radius: 20px;
170
+ font-size: 12px;
171
+ display: flex;
172
+ align-items: center;
173
+ gap: 8px;
174
+ }
175
+ .live-indicator::before {
176
+ content: '';
177
+ width: 8px;
178
+ height: 8px;
179
+ background: white;
180
+ border-radius: 50%;
181
+ animation: pulse 2s infinite;
182
+ }
183
+ @keyframes pulse {
184
+ 0%, 100% { opacity: 1; }
185
+ 50% { opacity: 0.5; }
186
+ }
187
+
@@ -0,0 +1,363 @@
1
+ /* Docs Page Styles */
2
+ /* Import common styles */
3
+ @import url('/common.css');
4
+
5
+ /* Light theme overrides for docs content */
6
+ :root {
7
+ --docs-bg: #f5f5f5;
8
+ --docs-bg2: #ffffff;
9
+ --docs-bg3: #f1f5f9;
10
+ --docs-text: #1a1a1a;
11
+ --docs-text2: #666666;
12
+ --docs-border: #e0e0e0;
13
+ }
14
+
15
+ body { background: var(--docs-bg); color: var(--docs-text); }
16
+
17
+ /* Sidebar navigation */
18
+ .sidebar { background: var(--docs-bg2); border-color: var(--docs-border); }
19
+ .sidebar nav a {
20
+ display: block;
21
+ padding: 8px 12px;
22
+ color: var(--docs-text2);
23
+ text-decoration: none;
24
+ border-radius: 6px;
25
+ margin-bottom: 4px;
26
+ transition: all 0.2s;
27
+ }
28
+ .sidebar nav a:hover { background: var(--docs-bg3); color: var(--accent); }
29
+ .sidebar nav a.active { background: var(--accent); color: white; }
30
+
31
+ .nav-group { margin-bottom: 16px; }
32
+ .nav-group-title {
33
+ font-weight: 600;
34
+ font-size: 10px;
35
+ text-transform: uppercase;
36
+ color: var(--docs-text2);
37
+ letter-spacing: 1px;
38
+ display: block;
39
+ padding: 8px 0 4px;
40
+ margin-bottom: 4px;
41
+ }
42
+ .nav-subitems { margin-left: 0; border-left: none; padding-left: 0; }
43
+ .nav-subitems a { font-size: 12px; }
44
+
45
+ /* Content Area */
46
+ .content-area { flex: 1; padding: 32px; overflow-y: auto; }
47
+
48
+ .content {
49
+ background: var(--docs-bg2);
50
+ padding: 32px;
51
+ border-radius: 12px;
52
+ box-shadow: 0 2px 8px rgba(0,0,0,0.05);
53
+ overflow-x: auto;
54
+ max-width: 100%;
55
+ }
56
+
57
+ /* Typography */
58
+ .content h1 {
59
+ font-size: 28px;
60
+ font-weight: 700;
61
+ margin-bottom: 20px;
62
+ border-bottom: 3px solid var(--accent);
63
+ padding-bottom: 10px;
64
+ letter-spacing: -0.5px;
65
+ }
66
+
67
+ .content h2 {
68
+ font-size: 20px;
69
+ font-weight: 600;
70
+ margin-top: 32px;
71
+ margin-bottom: 14px;
72
+ color: var(--docs-text);
73
+ padding-bottom: 8px;
74
+ border-bottom: 1px solid var(--docs-border);
75
+ }
76
+
77
+ .content h3 {
78
+ font-size: 16px;
79
+ font-weight: 600;
80
+ margin-top: 20px;
81
+ margin-bottom: 10px;
82
+ color: var(--docs-text);
83
+ }
84
+
85
+ .content h4 {
86
+ font-size: 14px;
87
+ font-weight: 600;
88
+ margin-top: 16px;
89
+ margin-bottom: 8px;
90
+ color: var(--docs-text2);
91
+ }
92
+
93
+ .content p { margin-bottom: 12px; line-height: 1.6; }
94
+
95
+ /* Code */
96
+ .content code {
97
+ background: #f1f5f9;
98
+ padding: 2px 6px;
99
+ border-radius: 4px;
100
+ font-family: 'SF Mono', Monaco, Consolas, monospace;
101
+ font-size: 13px;
102
+ color: #0f172a;
103
+ border: 1px solid #e2e8f0;
104
+ }
105
+
106
+ .content pre {
107
+ background: #0f172a;
108
+ color: #e2e8f0;
109
+ padding: 16px;
110
+ border-radius: 8px;
111
+ overflow-x: auto;
112
+ margin: 12px 0;
113
+ font-size: 13px;
114
+ line-height: 1.5;
115
+ }
116
+
117
+ .content pre code {
118
+ background: none;
119
+ padding: 0;
120
+ color: inherit;
121
+ border: none;
122
+ font-size: inherit;
123
+ }
124
+
125
+ /* Tables */
126
+ .table-wrapper {
127
+ overflow-x: auto;
128
+ margin: 12px 0;
129
+ border-radius: 8px;
130
+ border: 1px solid var(--docs-border);
131
+ }
132
+
133
+ .content table { width: 100%; border-collapse: collapse; font-size: 13px; }
134
+
135
+ .content th, .content td {
136
+ padding: 10px 14px;
137
+ border-bottom: 1px solid var(--docs-border);
138
+ text-align: left;
139
+ }
140
+
141
+ .content td { max-width: 500px; vertical-align: middle; }
142
+
143
+ .content th {
144
+ background: #f8fafc;
145
+ font-weight: 600;
146
+ font-size: 11px;
147
+ text-transform: uppercase;
148
+ letter-spacing: 0.5px;
149
+ color: var(--docs-text2);
150
+ }
151
+
152
+ .content tr:hover td { background: #f8fafc; }
153
+
154
+ /* Blockquote */
155
+ .content blockquote {
156
+ border-left: 3px solid var(--accent);
157
+ padding: 12px 16px;
158
+ margin: 12px 0;
159
+ background: #f8fafc;
160
+ border-radius: 0 6px 6px 0;
161
+ color: var(--docs-text2);
162
+ font-size: 14px;
163
+ }
164
+
165
+ /* Lists */
166
+ .content ul, .content ol { margin: 10px 0; padding-left: 20px; }
167
+ .content li { margin-bottom: 6px; line-height: 1.5; }
168
+
169
+ /* Links */
170
+ .content a { color: var(--accent); text-decoration: none; }
171
+ .content a:hover { text-decoration: underline; }
172
+
173
+ /* HR */
174
+ .content hr { border: none; border-top: 1px solid var(--docs-border); margin: 16px 0; }
175
+
176
+ /* GraphQL Operations */
177
+ .gql-ops-inline { display: flex; flex-wrap: wrap; gap: 4px; align-items: center; }
178
+ .gql-ops-list { display: flex; flex-wrap: wrap; gap: 4px; margin: 8px 0; }
179
+
180
+ .gql-op {
181
+ cursor: pointer;
182
+ padding: 2px 8px;
183
+ background: #dbeafe;
184
+ border-radius: 4px;
185
+ border: 1px solid #93c5fd;
186
+ color: #1d4ed8;
187
+ font-weight: 500;
188
+ transition: all 0.15s;
189
+ display: inline-block;
190
+ margin: 2px;
191
+ }
192
+ .gql-op:hover { background: #bfdbfe; border-color: #60a5fa; }
193
+ .gql-op.mutation { background: #fce7f3; border-color: #f9a8d4; color: #be185d; }
194
+ .gql-op.mutation:hover { background: #fbcfe8; border-color: #f472b6; }
195
+
196
+ /* Component References */
197
+ .gql-ref {
198
+ cursor: pointer;
199
+ padding: 2px 8px;
200
+ background: #f0fdf4;
201
+ border-radius: 4px;
202
+ border: 1px solid #86efac;
203
+ color: #166534;
204
+ font-weight: 500;
205
+ transition: all 0.15s;
206
+ display: inline-block;
207
+ margin: 2px;
208
+ }
209
+ .gql-ref:hover { background: #dcfce7; border-color: #4ade80; }
210
+ .gql-ref.mutation { background: #fef3c7; border-color: #fcd34d; color: #92400e; }
211
+
212
+ /* More Button */
213
+ .gql-more {
214
+ cursor: pointer;
215
+ padding: 2px 8px;
216
+ background: #e2e8f0;
217
+ border-radius: 4px;
218
+ border: 1px solid #cbd5e1;
219
+ color: #475569;
220
+ font-weight: 500;
221
+ transition: all 0.15s;
222
+ display: inline-block;
223
+ margin: 2px;
224
+ }
225
+ .gql-more:hover { background: #cbd5e1; }
226
+ .gql-more.mutation { background: #fce7f3; border-color: #f9a8d4; color: #be185d; }
227
+
228
+ /* Mermaid Diagrams */
229
+ .mermaid-container {
230
+ position: relative;
231
+ background: var(--docs-bg3);
232
+ border-radius: 8px;
233
+ margin: 16px 0;
234
+ overflow: hidden;
235
+ }
236
+
237
+ .mermaid-controls {
238
+ position: absolute;
239
+ top: 8px;
240
+ right: 8px;
241
+ display: flex;
242
+ gap: 4px;
243
+ z-index: 10;
244
+ }
245
+
246
+ .mermaid-controls button {
247
+ background: #ffffff;
248
+ border: 1px solid var(--docs-border);
249
+ border-radius: 4px;
250
+ padding: 6px 10px;
251
+ cursor: pointer;
252
+ font-size: 14px;
253
+ transition: all 0.2s;
254
+ color: #1a1a1a;
255
+ }
256
+ .mermaid-controls button:hover { background: var(--accent); color: white; }
257
+
258
+ .mermaid-wrapper {
259
+ overflow: hidden;
260
+ padding: 24px;
261
+ min-height: 200px;
262
+ cursor: grab;
263
+ position: relative;
264
+ }
265
+ .mermaid-wrapper.dragging { cursor: grabbing; }
266
+
267
+ .mermaid-inner { transform-origin: 0 0; transition: none; display: inline-block; }
268
+ .mermaid { display: inline-block; }
269
+
270
+ .mermaid .node rect, .mermaid .node circle, .mermaid .node ellipse, .mermaid .node polygon {
271
+ cursor: pointer;
272
+ transition: all 0.2s;
273
+ }
274
+ .mermaid .node:hover rect, .mermaid .node:hover circle { filter: brightness(1.1); stroke-width: 3px; }
275
+
276
+ /* Detail Modal (docs specific) */
277
+ .detail-modal {
278
+ display: none;
279
+ position: fixed;
280
+ top: 0;
281
+ left: 0;
282
+ width: 100%;
283
+ height: 100%;
284
+ background: rgba(0,0,0,0.5);
285
+ z-index: 1000;
286
+ justify-content: center;
287
+ align-items: center;
288
+ }
289
+ .detail-modal.open { display: flex; }
290
+
291
+ .detail-modal-content {
292
+ background: #ffffff;
293
+ border-radius: 12px;
294
+ padding: 24px;
295
+ max-width: 600px;
296
+ width: 90%;
297
+ max-height: 80vh;
298
+ overflow-y: auto;
299
+ box-shadow: 0 10px 40px rgba(0,0,0,0.3);
300
+ color: #1a1a1a;
301
+ }
302
+
303
+ .detail-modal-header {
304
+ display: flex;
305
+ justify-content: space-between;
306
+ align-items: center;
307
+ margin-bottom: 16px;
308
+ padding-bottom: 12px;
309
+ border-bottom: 1px solid var(--docs-border);
310
+ }
311
+
312
+ .detail-modal-close {
313
+ background: none;
314
+ border: none;
315
+ font-size: 24px;
316
+ cursor: pointer;
317
+ color: var(--docs-text2);
318
+ }
319
+
320
+ .detail-section { margin-bottom: 16px; }
321
+ .detail-section h4 {
322
+ font-size: 12px;
323
+ text-transform: uppercase;
324
+ color: var(--docs-text2);
325
+ margin-bottom: 6px;
326
+ }
327
+ .detail-section p {
328
+ margin: 0;
329
+ padding: 8px 12px;
330
+ background: var(--docs-bg3);
331
+ border-radius: 4px;
332
+ font-family: 'SF Mono', Monaco, monospace;
333
+ font-size: 13px;
334
+ }
335
+
336
+ .detail-badge {
337
+ display: inline-block;
338
+ padding: 4px 10px;
339
+ border-radius: 4px;
340
+ font-size: 12px;
341
+ font-weight: 500;
342
+ margin-right: 6px;
343
+ }
344
+ .detail-badge.query { background: #dbeafe; color: #1d4ed8; }
345
+ .detail-badge.mutation { background: #fce7f3; color: #be185d; }
346
+ .detail-badge.context { background: #d1fae5; color: #047857; }
347
+ .detail-badge.fragment { background: #e0e7ff; color: #4338ca; }
348
+ .detail-badge.component { background: #f0fdf4; color: #166534; }
349
+ .detail-badge.operation { background: #f1f5f9; color: #475569; }
350
+
351
+ /* Regenerate Button */
352
+ .regenerate-btn {
353
+ background: var(--accent);
354
+ color: white;
355
+ border: none;
356
+ padding: 10px 20px;
357
+ border-radius: 6px;
358
+ cursor: pointer;
359
+ font-size: 14px;
360
+ margin-top: 24px;
361
+ }
362
+ .regenerate-btn:hover { background: #0052a3; }
363
+