@mailwoman/react 0.0.1 → 7.4.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 (143) hide show
  1. package/README.md +34 -4
  2. package/common/ClientOnly.tsx +30 -0
  3. package/common/CopyButton.tsx +44 -0
  4. package/common/KindBadge.tsx +44 -0
  5. package/common/LoadingIndicator.tsx +104 -0
  6. package/common/PresetChips.tsx +43 -0
  7. package/common/cx.ts +34 -0
  8. package/common/useClipboard.ts +73 -0
  9. package/common/useDebouncedValue.ts +23 -0
  10. package/index.ts +83 -4
  11. package/out/common/ClientOnly.d.ts +22 -0
  12. package/out/common/ClientOnly.d.ts.map +1 -0
  13. package/out/common/ClientOnly.js +20 -0
  14. package/out/common/ClientOnly.js.map +1 -0
  15. package/out/common/CopyButton.d.ts +21 -0
  16. package/out/common/CopyButton.d.ts.map +1 -0
  17. package/out/common/CopyButton.js +7 -0
  18. package/out/common/CopyButton.js.map +1 -0
  19. package/out/common/KindBadge.d.ts +24 -0
  20. package/out/common/KindBadge.d.ts.map +1 -0
  21. package/out/common/KindBadge.js +6 -0
  22. package/out/common/KindBadge.js.map +1 -0
  23. package/out/common/LoadingIndicator.d.ts +27 -0
  24. package/out/common/LoadingIndicator.d.ts.map +1 -0
  25. package/out/common/LoadingIndicator.js +41 -0
  26. package/out/common/LoadingIndicator.js.map +1 -0
  27. package/out/common/PresetChips.d.ts +22 -0
  28. package/out/common/PresetChips.d.ts.map +1 -0
  29. package/out/common/PresetChips.js +5 -0
  30. package/out/common/PresetChips.js.map +1 -0
  31. package/out/common/cx.d.ts +13 -0
  32. package/out/common/cx.d.ts.map +1 -0
  33. package/out/common/cx.js +28 -0
  34. package/out/common/cx.js.map +1 -0
  35. package/out/common/useClipboard.d.ts +16 -0
  36. package/out/common/useClipboard.d.ts.map +1 -0
  37. package/out/common/useClipboard.js +56 -0
  38. package/out/common/useClipboard.js.map +1 -0
  39. package/out/common/useDebouncedValue.d.ts +11 -0
  40. package/out/common/useDebouncedValue.d.ts.map +1 -0
  41. package/out/common/useDebouncedValue.js +19 -0
  42. package/out/common/useDebouncedValue.js.map +1 -0
  43. package/out/index.d.ts +57 -4
  44. package/out/index.d.ts.map +1 -1
  45. package/out/index.js +37 -4
  46. package/out/index.js.map +1 -1
  47. package/out/pipeline/CandidatePicker.d.ts +17 -0
  48. package/out/pipeline/CandidatePicker.d.ts.map +1 -0
  49. package/out/pipeline/CandidatePicker.js +6 -0
  50. package/out/pipeline/CandidatePicker.js.map +1 -0
  51. package/out/pipeline/ComponentTable.d.ts +14 -0
  52. package/out/pipeline/ComponentTable.d.ts.map +1 -0
  53. package/out/pipeline/ComponentTable.js +6 -0
  54. package/out/pipeline/ComponentTable.js.map +1 -0
  55. package/out/pipeline/ConfidenceCell.d.ts +13 -0
  56. package/out/pipeline/ConfidenceCell.d.ts.map +1 -0
  57. package/out/pipeline/ConfidenceCell.js +22 -0
  58. package/out/pipeline/ConfidenceCell.js.map +1 -0
  59. package/out/pipeline/PipelineExplorer.d.ts +25 -0
  60. package/out/pipeline/PipelineExplorer.d.ts.map +1 -0
  61. package/out/pipeline/PipelineExplorer.js +27 -0
  62. package/out/pipeline/PipelineExplorer.js.map +1 -0
  63. package/out/pipeline/QueryForm.d.ts +19 -0
  64. package/out/pipeline/QueryForm.d.ts.map +1 -0
  65. package/out/pipeline/QueryForm.js +9 -0
  66. package/out/pipeline/QueryForm.js.map +1 -0
  67. package/out/pipeline/ResolvedPlace.d.ts +16 -0
  68. package/out/pipeline/ResolvedPlace.d.ts.map +1 -0
  69. package/out/pipeline/ResolvedPlace.js +14 -0
  70. package/out/pipeline/ResolvedPlace.js.map +1 -0
  71. package/out/pipeline/copy.d.ts +11 -0
  72. package/out/pipeline/copy.d.ts.map +1 -0
  73. package/out/pipeline/copy.js +31 -0
  74. package/out/pipeline/copy.js.map +1 -0
  75. package/out/pipeline/presets.d.ts +12 -0
  76. package/out/pipeline/presets.d.ts.map +1 -0
  77. package/out/pipeline/presets.js +21 -0
  78. package/out/pipeline/presets.js.map +1 -0
  79. package/out/pipeline/types.d.ts +110 -0
  80. package/out/pipeline/types.d.ts.map +1 -0
  81. package/out/pipeline/types.js +12 -0
  82. package/out/pipeline/types.js.map +1 -0
  83. package/out/pipeline/useParsePipeline.d.ts +34 -0
  84. package/out/pipeline/useParsePipeline.d.ts.map +1 -0
  85. package/out/pipeline/useParsePipeline.js +55 -0
  86. package/out/pipeline/useParsePipeline.js.map +1 -0
  87. package/out/poi/AbstainPanel.d.ts +14 -0
  88. package/out/poi/AbstainPanel.d.ts.map +1 -0
  89. package/out/poi/AbstainPanel.js +5 -0
  90. package/out/poi/AbstainPanel.js.map +1 -0
  91. package/out/poi/LiveResultsBlock.d.ts +21 -0
  92. package/out/poi/LiveResultsBlock.d.ts.map +1 -0
  93. package/out/poi/LiveResultsBlock.js +7 -0
  94. package/out/poi/LiveResultsBlock.js.map +1 -0
  95. package/out/poi/OverpassBlock.d.ts +15 -0
  96. package/out/poi/OverpassBlock.d.ts.map +1 -0
  97. package/out/poi/OverpassBlock.js +11 -0
  98. package/out/poi/OverpassBlock.js.map +1 -0
  99. package/out/poi/POIExplorer.d.ts +25 -0
  100. package/out/poi/POIExplorer.d.ts.map +1 -0
  101. package/out/poi/POIExplorer.js +31 -0
  102. package/out/poi/POIExplorer.js.map +1 -0
  103. package/out/poi/QueryInput.d.ts +17 -0
  104. package/out/poi/QueryInput.d.ts.map +1 -0
  105. package/out/poi/QueryInput.js +5 -0
  106. package/out/poi/QueryInput.js.map +1 -0
  107. package/out/poi/SubjectPanel.d.ts +15 -0
  108. package/out/poi/SubjectPanel.d.ts.map +1 -0
  109. package/out/poi/SubjectPanel.js +5 -0
  110. package/out/poi/SubjectPanel.js.map +1 -0
  111. package/out/poi/runtime.d.ts +34 -0
  112. package/out/poi/runtime.d.ts.map +1 -0
  113. package/out/poi/runtime.js +43 -0
  114. package/out/poi/runtime.js.map +1 -0
  115. package/out/poi/types.d.ts +86 -0
  116. package/out/poi/types.d.ts.map +1 -0
  117. package/out/poi/types.js +12 -0
  118. package/out/poi/types.js.map +1 -0
  119. package/out/poi/usePOISearch.d.ts +35 -0
  120. package/out/poi/usePOISearch.d.ts.map +1 -0
  121. package/out/poi/usePOISearch.js +123 -0
  122. package/out/poi/usePOISearch.js.map +1 -0
  123. package/package.json +52 -8
  124. package/pipeline/CandidatePicker.tsx +45 -0
  125. package/pipeline/ComponentTable.tsx +41 -0
  126. package/pipeline/ConfidenceCell.tsx +33 -0
  127. package/pipeline/PipelineExplorer.tsx +148 -0
  128. package/pipeline/QueryForm.tsx +52 -0
  129. package/pipeline/ResolvedPlace.tsx +50 -0
  130. package/pipeline/copy.ts +37 -0
  131. package/pipeline/presets.ts +24 -0
  132. package/pipeline/types.ts +118 -0
  133. package/pipeline/useParsePipeline.ts +84 -0
  134. package/poi/AbstainPanel.tsx +22 -0
  135. package/poi/LiveResultsBlock.tsx +70 -0
  136. package/poi/OverpassBlock.tsx +37 -0
  137. package/poi/POIExplorer.tsx +102 -0
  138. package/poi/QueryInput.tsx +26 -0
  139. package/poi/SubjectPanel.tsx +44 -0
  140. package/poi/runtime.ts +53 -0
  141. package/poi/types.ts +82 -0
  142. package/poi/usePOISearch.ts +183 -0
  143. package/styles.css +627 -0
package/styles.css ADDED
@@ -0,0 +1,627 @@
1
+ /* ---------------------------------------------------------------------------
2
+ * @mailwoman/react — component styles.
3
+ *
4
+ * Plain, `mw-`-prefixed classes ported from the docs-site CSS modules. Every
5
+ * Infima (`--ifm-*`) token carries an inline fallback, so the components render
6
+ * correctly BOTH inside Docusaurus (where the real theme tokens win) and
7
+ * standalone (Storybook, tests, any React app). No CSS module hashing — the
8
+ * class names are stable and namespaced, and no component imports this file, so
9
+ * the bare package import stays node-safe.
10
+ * --------------------------------------------------------------------------- */
11
+
12
+ .mw-poi-explorer,
13
+ .mw-pipeline-explorer {
14
+ max-width: 720px;
15
+ font-size: 0.95rem;
16
+ }
17
+
18
+ /* ── Field (label + input + button) ──────────────────────────────────────── */
19
+
20
+ .mw-field {
21
+ display: flex;
22
+ flex-direction: column;
23
+ gap: 0.5rem;
24
+ }
25
+
26
+ .mw-field label {
27
+ font-weight: 600;
28
+ font-size: 0.9rem;
29
+ }
30
+
31
+ .mw-field input {
32
+ padding: 0.5rem 0.75rem;
33
+ font: inherit;
34
+ border: 1px solid var(--ifm-color-emphasis-300, #d1d5db);
35
+ border-radius: 6px;
36
+ background: var(--ifm-background-surface-color, #fff);
37
+ color: var(--ifm-font-color-base, inherit);
38
+ }
39
+
40
+ .mw-field input:disabled {
41
+ opacity: 0.5;
42
+ }
43
+
44
+ .mw-field button[type="submit"] {
45
+ padding: 0.5rem 0.75rem;
46
+ background: var(--ifm-color-primary, #e0367c);
47
+ color: #fff;
48
+ border: 0;
49
+ border-radius: 6px;
50
+ font-weight: 600;
51
+ cursor: pointer;
52
+ display: inline-flex;
53
+ align-items: center;
54
+ gap: 0.4rem;
55
+ align-self: flex-start;
56
+ }
57
+
58
+ .mw-field button[type="submit"]:disabled {
59
+ background: var(--ifm-color-emphasis-400, #b3b3b3);
60
+ cursor: not-allowed;
61
+ }
62
+
63
+ /* ── Preset chips ────────────────────────────────────────────────────────── */
64
+
65
+ .mw-presets {
66
+ margin-top: 0.75rem;
67
+ display: flex;
68
+ flex-wrap: wrap;
69
+ gap: 0.4rem;
70
+ align-items: baseline;
71
+ }
72
+
73
+ .mw-presets__label {
74
+ font-size: 0.85rem;
75
+ color: var(--ifm-color-emphasis-600, #6e6e6e);
76
+ margin-right: 0.25rem;
77
+ }
78
+
79
+ .mw-chip {
80
+ font-size: 0.8rem;
81
+ padding: 0.25rem 0.55rem;
82
+ background: var(--ifm-color-emphasis-100, #f5f6f7);
83
+ color: var(--ifm-color-emphasis-800, #303846);
84
+ border: 1px solid var(--ifm-color-emphasis-300, #d1d5db);
85
+ border-radius: 4px;
86
+ font-weight: 500;
87
+ cursor: pointer;
88
+ font-family: inherit;
89
+ }
90
+
91
+ .mw-chip:hover:not(:disabled) {
92
+ background: var(--ifm-color-emphasis-200, #ebedf0);
93
+ border-color: var(--ifm-color-primary, #e0367c);
94
+ }
95
+
96
+ .mw-chip:disabled {
97
+ opacity: 0.5;
98
+ cursor: not-allowed;
99
+ }
100
+
101
+ /* ── Generic button (copy / search) ──────────────────────────────────────── */
102
+
103
+ .mw-btn {
104
+ font-size: 0.8rem;
105
+ padding: 0.25rem 0.55rem;
106
+ background: var(--ifm-color-emphasis-100, #f5f6f7);
107
+ color: var(--ifm-color-emphasis-800, #303846);
108
+ border: 1px solid var(--ifm-color-emphasis-300, #d1d5db);
109
+ border-radius: 4px;
110
+ cursor: pointer;
111
+ font-family: inherit;
112
+ }
113
+
114
+ .mw-btn:hover:not(:disabled) {
115
+ background: var(--ifm-color-emphasis-200, #ebedf0);
116
+ }
117
+
118
+ .mw-btn:disabled {
119
+ opacity: 0.5;
120
+ cursor: not-allowed;
121
+ }
122
+
123
+ /* ── Result panel + errors ───────────────────────────────────────────────── */
124
+
125
+ .mw-result {
126
+ margin-top: 1.5rem;
127
+ }
128
+
129
+ .mw-result__header {
130
+ display: flex;
131
+ justify-content: space-between;
132
+ align-items: center;
133
+ margin-bottom: 0.75rem;
134
+ }
135
+
136
+ .mw-result__header h2 {
137
+ margin: 0;
138
+ font-size: 1.1rem;
139
+ }
140
+
141
+ .mw-panel__header {
142
+ display: flex;
143
+ justify-content: space-between;
144
+ align-items: center;
145
+ margin-bottom: 0.4rem;
146
+ }
147
+
148
+ .mw-panel__header h3 {
149
+ margin: 0;
150
+ font-size: 0.95rem;
151
+ }
152
+
153
+ .mw-muted {
154
+ font-style: italic;
155
+ color: var(--ifm-color-emphasis-600, #6e6e6e);
156
+ }
157
+
158
+ .mw-error {
159
+ color: var(--ifm-color-danger, #d9364c);
160
+ font-family: var(--ifm-font-family-monospace, monospace);
161
+ white-space: pre-wrap;
162
+ }
163
+
164
+ /* ── KindBadge ───────────────────────────────────────────────────────────── */
165
+
166
+ .mw-kind {
167
+ margin-bottom: 0.5rem;
168
+ font-size: 0.9rem;
169
+ }
170
+
171
+ .mw-kind__summary {
172
+ cursor: pointer;
173
+ user-select: none;
174
+ }
175
+
176
+ .mw-kind__confidence {
177
+ opacity: 0.7;
178
+ }
179
+
180
+ .mw-kind__alternatives {
181
+ margin: 0.25rem 0 0 1rem;
182
+ padding: 0;
183
+ list-style: disc;
184
+ }
185
+
186
+ /* ── POI subject panel ───────────────────────────────────────────────────── */
187
+
188
+ .mw-subject__row {
189
+ display: flex;
190
+ align-items: center;
191
+ gap: 0.5rem;
192
+ margin-bottom: 0.5rem;
193
+ }
194
+
195
+ .mw-subject__chip {
196
+ display: inline-block;
197
+ padding: 0.2rem 0.6rem;
198
+ border-radius: 999px;
199
+ background: var(--ifm-color-primary-contrast-background, rgba(224, 54, 124, 0.12));
200
+ color: var(--ifm-color-primary, #e0367c);
201
+ font-weight: 600;
202
+ font-size: 0.85rem;
203
+ }
204
+
205
+ .mw-subject__badge {
206
+ display: inline-block;
207
+ padding: 0.2rem 0.5rem;
208
+ border-radius: 999px;
209
+ background: var(--ifm-color-warning-contrast-background, rgba(245, 158, 11, 0.15));
210
+ color: var(--ifm-color-warning-darkest, #92400e);
211
+ font-size: 0.75rem;
212
+ font-weight: 600;
213
+ text-transform: uppercase;
214
+ letter-spacing: 0.02em;
215
+ }
216
+
217
+ .mw-subject__note {
218
+ margin: 0 0 0.75rem;
219
+ font-size: 0.85rem;
220
+ opacity: 0.8;
221
+ }
222
+
223
+ .mw-subject__detail {
224
+ display: grid;
225
+ grid-template-columns: auto 1fr;
226
+ gap: 0.25rem 0.75rem;
227
+ margin: 0 0 0.75rem;
228
+ font-size: 0.9rem;
229
+ }
230
+
231
+ .mw-subject__detail dt {
232
+ font-weight: 600;
233
+ color: var(--ifm-color-emphasis-700, #4a5163);
234
+ }
235
+
236
+ .mw-subject__detail dd {
237
+ margin: 0;
238
+ }
239
+
240
+ /* ── OverpassQL block ────────────────────────────────────────────────────── */
241
+
242
+ .mw-overpass {
243
+ margin-top: 0.75rem;
244
+ }
245
+
246
+ .mw-overpass__code {
247
+ margin: 0;
248
+ padding: 0.75rem;
249
+ border-radius: 6px;
250
+ background: var(--ifm-color-emphasis-100, #f5f6f7);
251
+ font-family: var(--ifm-font-family-monospace, monospace);
252
+ font-size: 0.85rem;
253
+ white-space: pre-wrap;
254
+ overflow-x: auto;
255
+ }
256
+
257
+ /* ── Live results ────────────────────────────────────────────────────────── */
258
+
259
+ .mw-live {
260
+ margin-top: 1rem;
261
+ }
262
+
263
+ .mw-live__caption {
264
+ margin: 0 0 0.4rem;
265
+ font-size: 0.85rem;
266
+ color: var(--ifm-color-emphasis-600, #6e6e6e);
267
+ }
268
+
269
+ .mw-live__results {
270
+ list-style: none;
271
+ margin: 0;
272
+ padding: 0;
273
+ display: flex;
274
+ flex-direction: column;
275
+ gap: 0.35rem;
276
+ }
277
+
278
+ .mw-live__results li {
279
+ display: flex;
280
+ justify-content: space-between;
281
+ align-items: baseline;
282
+ gap: 0.75rem;
283
+ padding: 0.4rem 0.6rem;
284
+ border-radius: 6px;
285
+ background: var(--ifm-color-emphasis-100, #f5f6f7);
286
+ font-size: 0.9rem;
287
+ }
288
+
289
+ .mw-live__name {
290
+ font-weight: 600;
291
+ }
292
+
293
+ .mw-live__meta {
294
+ color: var(--ifm-color-emphasis-600, #6e6e6e);
295
+ font-size: 0.8rem;
296
+ white-space: nowrap;
297
+ }
298
+
299
+ /* ── Component table ─────────────────────────────────────────────────────── */
300
+
301
+ .mw-components {
302
+ width: 100%;
303
+ border-collapse: collapse;
304
+ margin: 0.75rem 0;
305
+ font-size: 0.9rem;
306
+ }
307
+
308
+ .mw-components th,
309
+ .mw-components td {
310
+ padding: 0.4rem 0.6rem;
311
+ text-align: left;
312
+ border-bottom: 1px solid var(--ifm-color-emphasis-200, #ebedf0);
313
+ }
314
+
315
+ .mw-components th {
316
+ font-weight: 600;
317
+ color: var(--ifm-color-emphasis-600, #6e6e6e);
318
+ font-size: 0.8rem;
319
+ text-transform: uppercase;
320
+ }
321
+
322
+ /* ── Confidence cell ─────────────────────────────────────────────────────── */
323
+
324
+ .mw-conf__dash {
325
+ color: var(--ifm-color-emphasis-500, #8c8c8c);
326
+ }
327
+
328
+ .mw-conf {
329
+ display: flex;
330
+ align-items: center;
331
+ gap: 0.35rem;
332
+ min-width: 80px;
333
+ }
334
+
335
+ .mw-conf__bar {
336
+ height: 6px;
337
+ border-radius: 3px;
338
+ min-width: 4px;
339
+ transition: width 0.2s ease;
340
+ }
341
+
342
+ .mw-conf__bar--high {
343
+ background: #22c55e;
344
+ }
345
+
346
+ .mw-conf__bar--mid {
347
+ background: #f59e0b;
348
+ }
349
+
350
+ .mw-conf__bar--low {
351
+ background: #ef4444;
352
+ }
353
+
354
+ .mw-conf__value {
355
+ font-family: var(--ifm-font-family-monospace, monospace);
356
+ font-size: 0.8rem;
357
+ }
358
+
359
+ /* ── Resolved place ──────────────────────────────────────────────────────── */
360
+
361
+ .mw-resolved {
362
+ margin-top: 1rem;
363
+ padding: 0.75rem;
364
+ border: 1px solid var(--ifm-color-emphasis-200, #ebedf0);
365
+ border-radius: 6px;
366
+ background: var(--ifm-color-emphasis-0, #fff);
367
+ }
368
+
369
+ .mw-resolved h2 {
370
+ margin: 0 0 0.5rem;
371
+ font-size: 1rem;
372
+ }
373
+
374
+ .mw-resolved dl {
375
+ display: grid;
376
+ grid-template-columns: auto 1fr;
377
+ gap: 0.25rem 0.75rem;
378
+ margin: 0;
379
+ }
380
+
381
+ .mw-resolved dt {
382
+ font-weight: 600;
383
+ color: var(--ifm-color-emphasis-700, #4a5163);
384
+ }
385
+
386
+ .mw-resolved dd {
387
+ margin: 0;
388
+ }
389
+
390
+ .mw-resolved__dual {
391
+ margin: 0.5rem 0 0;
392
+ padding: 0.4rem 0.6rem;
393
+ border-radius: 6px;
394
+ background: var(--ifm-color-info-contrast-background, rgba(54, 122, 246, 0.1));
395
+ font-size: 0.9rem;
396
+ }
397
+
398
+ /* ── Candidate picker ────────────────────────────────────────────────────── */
399
+
400
+ .mw-candidates {
401
+ margin-top: 1rem;
402
+ }
403
+
404
+ .mw-candidates h2 {
405
+ font-size: 1rem;
406
+ margin: 0 0 0.5rem;
407
+ }
408
+
409
+ .mw-candidates__list {
410
+ list-style: none;
411
+ margin: 0;
412
+ padding: 0;
413
+ display: flex;
414
+ flex-direction: column;
415
+ gap: 0.35rem;
416
+ }
417
+
418
+ .mw-candidates__btn {
419
+ display: flex;
420
+ align-items: baseline;
421
+ gap: 0.6rem;
422
+ width: 100%;
423
+ text-align: left;
424
+ padding: 0.4rem 0.6rem;
425
+ border: 1px solid var(--ifm-color-emphasis-200, #ebedf0);
426
+ border-radius: 6px;
427
+ background: transparent;
428
+ cursor: pointer;
429
+ font: inherit;
430
+ }
431
+
432
+ .mw-candidates__btn--active {
433
+ border-color: var(--ifm-color-primary, #e0367c);
434
+ background: var(--ifm-color-primary-contrast-background, rgba(224, 54, 124, 0.1));
435
+ }
436
+
437
+ .mw-candidates__rank {
438
+ font-family: var(--ifm-font-family-monospace, monospace);
439
+ font-size: 0.8rem;
440
+ opacity: 0.6;
441
+ }
442
+
443
+ .mw-candidates__name {
444
+ font-weight: 600;
445
+ }
446
+
447
+ .mw-candidates__meta {
448
+ margin-left: auto;
449
+ font-size: 0.8rem;
450
+ color: var(--ifm-color-emphasis-600, #6e6e6e);
451
+ }
452
+
453
+ /* ── LoadingIndicator ────────────────────────────────────────────────────── */
454
+
455
+ .mw-loading {
456
+ display: flex;
457
+ flex-direction: column;
458
+ align-items: center;
459
+ justify-content: center;
460
+ gap: 0.75rem;
461
+ padding: 1.5rem;
462
+ }
463
+
464
+ .mw-loading__label {
465
+ font-size: 0.85rem;
466
+ color: var(--ifm-color-emphasis-600, #6e6e6e);
467
+ font-family: var(--ifm-font-family-monospace, monospace);
468
+ text-align: center;
469
+ }
470
+
471
+ .mw-pulse {
472
+ display: flex;
473
+ flex-direction: column;
474
+ gap: 0.5rem;
475
+ width: 100%;
476
+ max-width: 320px;
477
+ }
478
+
479
+ .mw-pulse__bar {
480
+ height: 0.75rem;
481
+ border-radius: 4px;
482
+ background: var(--ifm-color-emphasis-200, #ebedf0);
483
+ animation: mw-pulse-fade 1.4s ease-in-out infinite;
484
+ }
485
+
486
+ .mw-pulse__bar:nth-child(1) {
487
+ animation-delay: 0s;
488
+ }
489
+ .mw-pulse__bar:nth-child(2) {
490
+ animation-delay: 0.15s;
491
+ }
492
+ .mw-pulse__bar:nth-child(3) {
493
+ animation-delay: 0.3s;
494
+ }
495
+ .mw-pulse__bar:nth-child(4) {
496
+ animation-delay: 0.45s;
497
+ }
498
+ .mw-pulse__bar:nth-child(5) {
499
+ animation-delay: 0.6s;
500
+ }
501
+ .mw-pulse__bar:nth-child(odd) {
502
+ width: 100%;
503
+ }
504
+ .mw-pulse__bar:nth-child(even) {
505
+ width: 72%;
506
+ }
507
+
508
+ @keyframes mw-pulse-fade {
509
+ 0%,
510
+ 100% {
511
+ opacity: 0.35;
512
+ }
513
+ 50% {
514
+ opacity: 1;
515
+ }
516
+ }
517
+
518
+ .mw-spinner {
519
+ width: 2rem;
520
+ height: 2rem;
521
+ border: 3px solid var(--ifm-color-emphasis-200, #ebedf0);
522
+ border-top-color: var(--ifm-color-primary, #e0367c);
523
+ border-radius: 50%;
524
+ animation: mw-spin 0.7s linear infinite;
525
+ }
526
+
527
+ .mw-spinner--small {
528
+ width: 1.25rem;
529
+ height: 1.25rem;
530
+ border-width: 2px;
531
+ }
532
+
533
+ .mw-spinner--large {
534
+ width: 3rem;
535
+ height: 3rem;
536
+ border-width: 4px;
537
+ }
538
+
539
+ @keyframes mw-spin {
540
+ to {
541
+ transform: rotate(360deg);
542
+ }
543
+ }
544
+
545
+ .mw-staged {
546
+ display: flex;
547
+ flex-direction: column;
548
+ gap: 0.5rem;
549
+ width: 100%;
550
+ max-width: 360px;
551
+ list-style: none;
552
+ margin: 0;
553
+ padding: 0;
554
+ }
555
+
556
+ .mw-staged__step {
557
+ display: flex;
558
+ align-items: center;
559
+ gap: 0.6rem;
560
+ padding: 0.4rem 0.6rem;
561
+ border-radius: 4px;
562
+ font-size: 0.85rem;
563
+ transition:
564
+ background 0.3s,
565
+ color 0.3s;
566
+ }
567
+
568
+ .mw-staged__step--pending {
569
+ color: var(--ifm-color-emphasis-500, #8c8c8c);
570
+ }
571
+
572
+ .mw-staged__step--active {
573
+ color: var(--ifm-color-primary, #e0367c);
574
+ background: color-mix(in srgb, var(--ifm-color-primary, #e0367c) 8%, transparent);
575
+ font-weight: 600;
576
+ }
577
+
578
+ .mw-staged__step--complete {
579
+ color: var(--ifm-color-success, #1aa84d);
580
+ }
581
+
582
+ .mw-staged__icon {
583
+ display: flex;
584
+ align-items: center;
585
+ justify-content: center;
586
+ width: 1.25rem;
587
+ height: 1.25rem;
588
+ flex-shrink: 0;
589
+ }
590
+
591
+ .mw-staged__dot {
592
+ width: 0.55rem;
593
+ height: 0.55rem;
594
+ border-radius: 50%;
595
+ background: var(--ifm-color-primary, #e0367c);
596
+ animation: mw-pulse-dot 1s ease-in-out infinite;
597
+ }
598
+
599
+ @keyframes mw-pulse-dot {
600
+ 0%,
601
+ 100% {
602
+ opacity: 0.3;
603
+ transform: scale(0.8);
604
+ }
605
+ 50% {
606
+ opacity: 1;
607
+ transform: scale(1.2);
608
+ }
609
+ }
610
+
611
+ .mw-staged__check {
612
+ width: 1rem;
613
+ height: 1rem;
614
+ position: relative;
615
+ }
616
+
617
+ .mw-staged__check::before {
618
+ content: "";
619
+ position: absolute;
620
+ top: 50%;
621
+ left: 25%;
622
+ width: 0.35rem;
623
+ height: 0.65rem;
624
+ border: solid var(--ifm-color-success, #1aa84d);
625
+ border-width: 0 2px 2px 0;
626
+ transform: translateY(-60%) rotate(45deg);
627
+ }