froggy-docs 1.0.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.
@@ -0,0 +1,405 @@
1
+ /* လင်း/မှောင် (Light/Dark Theme) အရောင်များကို သတ်မှတ်ခြင်း */
2
+ :root {
3
+ --bg-main: #ffffff;
4
+ --bg-sidebar: #f4f6f8;
5
+ --text-main: #333333;
6
+ --text-muted: #6c757d;
7
+ --border-color: #e0e0e0;
8
+ --primary-color: #2e7d32;
9
+ --code-bg: #f8f9fa;
10
+ --table-header: #f8f9fa;
11
+ }
12
+
13
+ [data-theme="dark"] {
14
+ --bg-main: #0d1117;
15
+ --bg-sidebar: #161b22;
16
+ --text-main: #c9d1d9;
17
+ --text-muted: #8b949e;
18
+ --border-color: #30363d;
19
+ --primary-color: #4CAF50;
20
+ --code-bg: #161b22;
21
+ --table-header: #21262d;
22
+ }
23
+
24
+ * {
25
+ box-sizing: border-box;
26
+ }
27
+
28
+ body {
29
+ margin: 0;
30
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
31
+ display: flex;
32
+ height: 100vh;
33
+ overflow: hidden; /* အပြင်ဘက်ဆုံးကို Scroll မဆင်းစေဘဲ အတွင်းကိုပဲ Scroll ဆင်းစေရန် */
34
+ background-color: var(--bg-main);
35
+ color: var(--text-main);
36
+ transition: background-color 0.3s, color 0.3s;
37
+ }
38
+
39
+ .app-container {
40
+ display: flex;
41
+ height: 100vh;
42
+ width: 100%;
43
+ overflow: hidden;
44
+ }
45
+
46
+ /* ================== Sidebar Layout ================== */
47
+ .sidebar {
48
+ width: 300px;
49
+ min-width: 300px;
50
+ background-color: var(--bg-sidebar);
51
+ border-right: 1px solid var(--border-color);
52
+ display: flex;
53
+ flex-direction: column;
54
+ height: 100vh;
55
+ }
56
+
57
+ .sidebar-header {
58
+ padding: 1.5rem 1.5rem 1rem;
59
+ }
60
+
61
+ .sidebar-header h2 {
62
+ margin: 0;
63
+ display: flex;
64
+ align-items: center;
65
+ gap: 10px;
66
+ font-size: 1.4rem;
67
+ color: var(--text-main);
68
+ }
69
+
70
+ .search-container {
71
+ padding: 0 1.5rem 1rem;
72
+ }
73
+
74
+ .search-box {
75
+ width: 100%;
76
+ padding: 0.6rem 1rem;
77
+ border: 1px solid var(--border-color);
78
+ border-radius: 6px;
79
+ background-color: var(--bg-main);
80
+ color: var(--text-main);
81
+ outline: none;
82
+ font-size: 0.95rem;
83
+ }
84
+
85
+ .search-box:focus {
86
+ border-color: var(--primary-color);
87
+ }
88
+
89
+ /* သီးခြား Scroll ဆင်းနိုင်သော Navigation List */
90
+ .nav-list {
91
+ flex-grow: 1;
92
+ overflow-y: auto;
93
+ padding: 0 1rem 1rem;
94
+ display: flex;
95
+ flex-direction: column;
96
+ gap: 0.3rem;
97
+ }
98
+
99
+ .nav-item {
100
+ display: flex;
101
+ align-items: center;
102
+ gap: 12px;
103
+ padding: 0.6rem 0.8rem;
104
+ text-decoration: none;
105
+ color: var(--text-main);
106
+ border-radius: 6px;
107
+ transition: background 0.2s;
108
+ }
109
+
110
+ .nav-item:hover {
111
+ background-color: var(--border-color);
112
+ }
113
+
114
+ /* ================== Main Content Layout ================== */
115
+ .main-content {
116
+ flex-grow: 1;
117
+ height: 100vh;
118
+ overflow-y: auto; /* Main Content ကို သီးခြား Scroll ဆင်းနိုင်စေရန် */
119
+ padding: 2rem 4rem;
120
+ scroll-behavior: smooth;
121
+ }
122
+
123
+ .header {
124
+ display: flex;
125
+ justify-content: space-between;
126
+ align-items: center;
127
+ margin-bottom: 2rem;
128
+ padding-bottom: 1.5rem;
129
+ border-bottom: 1px solid var(--border-color);
130
+ }
131
+
132
+ .header h1 {
133
+ margin: 0;
134
+ color: var(--text-main);
135
+ }
136
+
137
+ .theme-toggle {
138
+ background: var(--bg-sidebar);
139
+ border: 1px solid var(--border-color);
140
+ color: var(--text-main);
141
+ padding: 0.5rem 1rem;
142
+ border-radius: 20px;
143
+ cursor: pointer;
144
+ font-weight: bold;
145
+ transition: all 0.2s;
146
+ }
147
+
148
+ .theme-toggle:hover {
149
+ background-color: var(--border-color);
150
+ }
151
+
152
+ /* ================== API Details Styling ================== */
153
+ .api-section {
154
+ margin-bottom: 4rem;
155
+ scroll-margin-top: 2rem; /* Sidebar က လင့်ခ်နှိပ်ရင် ခေါင်းစဉ်ကွယ်မသွားအောင်ပါ */
156
+ }
157
+
158
+ .endpoint-header {
159
+ display: flex;
160
+ align-items: center;
161
+ gap: 15px;
162
+ margin-bottom: 1rem;
163
+ }
164
+
165
+ .path-text {
166
+ font-family: 'Courier New', Courier, monospace;
167
+ font-size: 1.6rem;
168
+ font-weight: bold;
169
+ }
170
+
171
+ .api-description {
172
+ color: var(--text-muted);
173
+ margin-bottom: 2rem;
174
+ font-size: 1.1rem;
175
+ }
176
+
177
+ .section-title {
178
+ font-size: 0.9rem;
179
+ text-transform: uppercase;
180
+ color: var(--primary-color);
181
+ letter-spacing: 1px;
182
+ margin-bottom: 1rem;
183
+ margin-top: 2.5rem;
184
+ }
185
+
186
+ /* Tags (GET, POST, etc.) */
187
+ .method-tag {
188
+ font-size: 0.75rem;
189
+ font-weight: bold;
190
+ padding: 0.3rem 0.6rem;
191
+ border-radius: 4px;
192
+ color: white;
193
+ min-width: 50px;
194
+ text-align: center;
195
+ letter-spacing: 0.5px;
196
+ }
197
+ .method-tag.GET { background-color: #61affe; }
198
+ .method-tag.POST { background-color: #49cc90; }
199
+ .method-tag.PUT { background-color: #fca130; }
200
+ .method-tag.DELETE { background-color: #f93e3e; }
201
+ .method-tag.PATCH { background-color: #50e3c2; }
202
+
203
+ /* Tables */
204
+ .params-table {
205
+ width: 100%;
206
+ border-collapse: collapse;
207
+ margin-bottom: 1.5rem;
208
+ }
209
+
210
+ .params-table th, .params-table td {
211
+ text-align: left;
212
+ padding: 1rem;
213
+ border-bottom: 1px solid var(--border-color);
214
+ }
215
+
216
+ .params-table th {
217
+ background-color: var(--table-header);
218
+ font-size: 0.9rem;
219
+ color: var(--text-muted);
220
+ text-transform: uppercase;
221
+ }
222
+
223
+ .type-label {
224
+ font-family: monospace;
225
+ color: #61affe;
226
+ }
227
+
228
+ /* Code Blocks */
229
+ .code-block {
230
+ background-color: var(--code-bg);
231
+ border: 1px solid var(--border-color);
232
+ border-radius: 8px;
233
+ padding: 1.5rem;
234
+ overflow-x: auto;
235
+ }
236
+
237
+ .code-block pre {
238
+ margin: 0;
239
+ font-family: 'Courier New', Courier, monospace;
240
+ font-size: 0.95rem;
241
+ line-height: 1.5;
242
+ color: var(--text-main);
243
+ }
244
+
245
+ /* Responsive */
246
+ @media (max-width: 768px) {
247
+ .app-container { flex-direction: column; overflow: auto; }
248
+ .sidebar { width: 100%; height: auto; max-height: 40vh; border-right: none; border-bottom: 1px solid var(--border-color); }
249
+ .main-content { height: auto; padding: 1.5rem; overflow-y: visible; }
250
+ .path-text { font-size: 1.2rem; }
251
+ }
252
+
253
+ /* Tag Group Collapsible */
254
+ .tag-group { margin-bottom: 0.5rem; }
255
+ .tag-header {
256
+ padding: 0.6rem 0.8rem;
257
+ cursor: pointer;
258
+ font-weight: bold;
259
+ color: var(--text-main);
260
+ display: flex;
261
+ align-items: center;
262
+ gap: 8px;
263
+ }
264
+ .tag-header:hover { background-color: var(--border-color); }
265
+ .tag-endpoints { padding-left: 1rem; }
266
+
267
+ /* Tag Pills */
268
+ .tag {
269
+ background: var(--primary-color);
270
+ color: white;
271
+ padding: 0.2rem 0.5rem;
272
+ border-radius: 12px;
273
+ font-size: 0.75rem;
274
+ margin-right: 0.5rem;
275
+ }
276
+ .tag-list { margin-bottom: 1rem; }
277
+
278
+ /* Auth Badge */
279
+ .auth-badge {
280
+ display: inline-block;
281
+ background: #fca130;
282
+ color: white;
283
+ padding: 0.3rem 0.6rem;
284
+ border-radius: 4px;
285
+ font-size: 0.8rem;
286
+ margin-left: 1rem;
287
+ }
288
+
289
+ /* Try It Out */
290
+ .try-it-out-btn {
291
+ background: var(--primary-color);
292
+ color: white;
293
+ border: none;
294
+ padding: 0.6rem 1.2rem;
295
+ border-radius: 6px;
296
+ cursor: pointer;
297
+ font-weight: bold;
298
+ font-size: 0.9rem;
299
+ }
300
+ .try-it-out-btn:hover { opacity: 0.9; }
301
+
302
+ .response {
303
+ background: var(--code-bg);
304
+ border: 1px solid var(--border-color);
305
+ border-radius: 6px;
306
+ padding: 1rem;
307
+ margin-top: 1rem;
308
+ white-space: pre-wrap;
309
+ font-family: monospace;
310
+ font-size: 0.85rem;
311
+ }
312
+ .status { font-weight: bold; margin-top: 0.5rem; }
313
+ .error { color: #f93e3e; }
314
+ .loading { color: var(--text-muted); font-style: italic; }
315
+
316
+ /* Global Settings */
317
+ .settings-section {
318
+ background: var(--bg-sidebar);
319
+ padding: 1rem;
320
+ border-radius: 8px;
321
+ margin-bottom: 2rem;
322
+ }
323
+ .settings-section h3 { margin: 0 0 0.5rem 0; font-size: 0.9rem; }
324
+ .settings-section div { display: flex; align-items: center; gap: 0.5rem; margin-bottom: 0.5rem; }
325
+ .auth-input {
326
+ flex: 1;
327
+ padding: 0.5rem;
328
+ border: 1px solid var(--border-color);
329
+ border-radius: 4px;
330
+ background: var(--bg-main);
331
+ color: var(--text-main);
332
+ }
333
+
334
+ /* Request Body Form */
335
+ .request-body-form {
336
+ background: var(--code-bg);
337
+ border: 1px solid var(--border-color);
338
+ border-radius: 8px;
339
+ padding: 1rem;
340
+ margin: 1rem 0;
341
+ }
342
+ .form-field {
343
+ margin-bottom: 1rem;
344
+ }
345
+ .form-field label {
346
+ display: block;
347
+ font-weight: bold;
348
+ margin-bottom: 0.3rem;
349
+ color: var(--text-main);
350
+ }
351
+ .field-desc {
352
+ display: block;
353
+ font-size: 0.85rem;
354
+ color: var(--text-muted);
355
+ margin-bottom: 0.3rem;
356
+ }
357
+ .form-input {
358
+ width: 100%;
359
+ padding: 0.6rem;
360
+ border: 1px solid var(--border-color);
361
+ border-radius: 4px;
362
+ background: var(--bg-main);
363
+ color: var(--text-main);
364
+ font-family: monospace;
365
+ }
366
+ .form-input:focus {
367
+ outline: none;
368
+ border-color: var(--primary-color);
369
+ }
370
+
371
+ /* Try It Out Button */
372
+ .try-it-out-btn {
373
+ background: var(--primary-color);
374
+ color: white;
375
+ border: none;
376
+ padding: 0.6rem 1.2rem;
377
+ border-radius: 6px;
378
+ cursor: pointer;
379
+ font-weight: bold;
380
+ font-size: 0.9rem;
381
+ margin-right: 0.5rem;
382
+ }
383
+ .try-it-out-btn:hover { opacity: 0.9; }
384
+ .try-it-out-btn.secondary { background: #007bff; }
385
+
386
+ /* Response Section */
387
+ .response-section {
388
+ margin-top: 1rem;
389
+ }
390
+ .response-section h4 {
391
+ margin: 0 0 0.5rem 0;
392
+ font-size: 0.9rem;
393
+ }
394
+ .response-body {
395
+ background: var(--code-bg);
396
+ border: 1px solid var(--border-color);
397
+ border-radius: 6px;
398
+ padding: 1rem;
399
+ margin: 0;
400
+ white-space: pre-wrap;
401
+ font-family: monospace;
402
+ font-size: 0.85rem;
403
+ max-height: 300px;
404
+ overflow-y: auto;
405
+ }
package/install.sh ADDED
@@ -0,0 +1,109 @@
1
+ #!/bin/bash
2
+ # FroggyDocs Installation Script
3
+ # Supports Linux, macOS, and Windows (via Git Bash)
4
+
5
+ set -e
6
+
7
+ INSTALL_DIR="${HOME}/.froggy-docs"
8
+ BIN_DIR="${HOME}/.local/bin"
9
+ REPO_URL="https://github.com/yourusername/froggy-docs/releases"
10
+ VERSION="1.0.0"
11
+
12
+ echo "🐸 FroggyDocs Installer v${VERSION}"
13
+ echo "=================================="
14
+
15
+ # Detect OS
16
+ detect_os() {
17
+ case "$(uname -s)" in
18
+ Linux*) echo "linux" ;;
19
+ Darwin*) echo "macos" ;;
20
+ MINGW*|MSYS*) echo "windows" ;;
21
+ *) echo "unknown" ;;
22
+ esac
23
+ }
24
+
25
+ # Get binary name
26
+ get_binary_name() {
27
+ local os=$(detect_os)
28
+ case "$os" in
29
+ windows) echo "froggy-docs.exe" ;;
30
+ *) echo "froggy-docs" ;;
31
+ esac
32
+ }
33
+
34
+ # Create directories
35
+ setup_dirs() {
36
+ mkdir -p "$INSTALL_DIR"
37
+ mkdir -p "$BIN_DIR"
38
+ }
39
+
40
+ # Download and install binary
41
+ install_binary() {
42
+ local os=$(detect_os)
43
+ local arch
44
+ local binary_name
45
+ local download_url
46
+
47
+ case "$os" in
48
+ linux)
49
+ arch="x86_64-linux-gnu"
50
+ ;;
51
+ mocos)
52
+ arch="x86_64-macos"
53
+ ;;
54
+ windows)
55
+ arch="x86_64-windows.zip"
56
+ ;;
57
+ *)
58
+ echo "❌ Unsupported OS"
59
+ exit 1
60
+ ;;
61
+ esac
62
+
63
+ binary_name=$(get_binary_name)
64
+ download_url="${REPO_URL}/download/v${VERSION}/froggy-docs-${arch}"
65
+
66
+ echo "📥 Downloading for $os..."
67
+
68
+ curl -L "$download_url" -o "${INSTALL_DIR}/${binary_name}"
69
+ chmod +x "${INSTALL_DIR}/${binary_name}"
70
+
71
+ echo "✅ Installed to ${INSTALL_DIR}/${binary_name}"
72
+ }
73
+
74
+ # Add to PATH
75
+ add_to_path() {
76
+ echo ""
77
+ echo "📝 Adding to PATH..."
78
+ echo ""
79
+ echo "Add this line to your ~/.bashrc or ~/.zshrc:"
80
+ echo " export PATH=\"\$PATH:${BIN_DIR}\""
81
+ echo ""
82
+ echo "Then run: source ~/.bashrc"
83
+ }
84
+
85
+ # Main
86
+ main() {
87
+ setup_dirs
88
+
89
+ if [ -f "${INSTALL_DIR}/froggy-docs" ] || [ -f "${INSTALL_DIR}/froggy-docs.exe" ]; then
90
+ echo "✅ FroggyDocs already installed"
91
+ echo " Location: ${INSTALL_DIR}"
92
+ echo ""
93
+ echo "To update: rm -rf ${INSTALL_DIR} && $(basename $0)"
94
+ else
95
+ install_binary
96
+ add_to_path
97
+ fi
98
+
99
+ echo ""
100
+ echo "🎉 Installation complete!"
101
+ echo ""
102
+ echo "Usage:"
103
+ echo " froggy-docs serve Start documentation server"
104
+ echo " froggy-docs serve -p 3000 Custom port"
105
+ echo " froggy-docs serve -h 0.0.0.0 Make accessible on network"
106
+ echo " froggy-docs watch Watch for changes"
107
+ }
108
+
109
+ main "$@"
@@ -0,0 +1,2 @@
1
+ export 'src/watcher_engine.dart';
2
+ export 'src/parser_engine.dart';
File without changes
@@ -0,0 +1,5 @@
1
+ {
2
+ "email": "user@example.com",
3
+ "age": 25,
4
+ "isAdmin": true
5
+ }