maverick-wave 3.3.0 → 3.3.2

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 (77) hide show
  1. package/.claude/skills/maverick-wave/SKILL.md +208 -0
  2. package/.claude/skills/maverick-wave/examples/angular-form.md +275 -0
  3. package/.claude/skills/maverick-wave/examples/angular-list-page.md +304 -0
  4. package/.claude/skills/maverick-wave/examples/angular-services.md +348 -0
  5. package/.claude/skills/maverick-wave/examples/static-landing-page.md +362 -0
  6. package/.claude/skills/maverick-wave/references/components.md +812 -0
  7. package/.claude/skills/maverick-wave/references/forms.md +289 -0
  8. package/.claude/skills/maverick-wave/references/javascript.md +70 -0
  9. package/.claude/skills/maverick-wave/references/layout.md +300 -0
  10. package/.claude/skills/maverick-wave/references/theming.md +192 -0
  11. package/.github/workflows/ci.yml +41 -0
  12. package/CHANGELOG.md +13 -0
  13. package/README.md +115 -21
  14. package/index.html +15 -9
  15. package/maverick-wave.min.css +1 -1
  16. package/maverick-wave.min.js +1 -1
  17. package/package.json +3 -1
  18. package/scripts/verify.js +137 -0
  19. package/src/js/main.js +39 -11
  20. package/src/partials/accordions-container.html +22 -27
  21. package/src/partials/alerts-container.html +26 -0
  22. package/src/partials/avatars-container.html +22 -0
  23. package/src/partials/buttons-container.html +11 -15
  24. package/src/partials/cards-container.html +8 -8
  25. package/src/partials/colors-container.html +33 -20
  26. package/src/partials/documentation-container.html +3 -0
  27. package/src/partials/form-field-container.html +16 -12
  28. package/src/partials/get-started-container.html +93 -35
  29. package/src/partials/header-utilities-container.html +64 -6
  30. package/src/partials/input-group-container.html +5 -3
  31. package/src/partials/page-header-container.html +78 -0
  32. package/src/partials/tables-container.html +130 -0
  33. package/src/partials/tabs-container.html +20 -16
  34. package/src/partials/tags-container.html +55 -1
  35. package/src/scss/abstracts/_index.scss +4 -1
  36. package/src/scss/abstracts/_variables.scss +128 -106
  37. package/src/scss/base/_base.scss +32 -136
  38. package/src/scss/base/_reset.scss +1 -1
  39. package/src/scss/base/_typography.scss +0 -92
  40. package/src/scss/components/_accordions.scss +3 -3
  41. package/src/scss/components/_avatars.scss +28 -1
  42. package/src/scss/components/_blog-post.scss +1 -1
  43. package/src/scss/components/_button-bar.scss +6 -6
  44. package/src/scss/components/_buttons.scss +33 -10
  45. package/src/scss/components/_cards.scss +7 -7
  46. package/src/scss/components/_coming-soon.scss +4 -4
  47. package/src/scss/components/_gallery.scss +2 -2
  48. package/src/scss/components/_index.scss +1 -0
  49. package/src/scss/components/_info.scss +20 -3
  50. package/src/scss/components/_lists.scss +11 -10
  51. package/src/scss/components/_modals.scss +14 -7
  52. package/src/scss/components/_pagination.scss +3 -3
  53. package/src/scss/components/_panels.scss +4 -4
  54. package/src/scss/components/_progress.scss +1 -1
  55. package/src/scss/components/_ratings.scss +1 -1
  56. package/src/scss/components/_spinners.scss +2 -2
  57. package/src/scss/components/_stepper.scss +3 -2
  58. package/src/scss/components/_tables.scss +42 -1
  59. package/src/scss/components/_tabs.scss +5 -5
  60. package/src/scss/components/_tags.scss +43 -27
  61. package/src/scss/components/_tiles.scss +3 -3
  62. package/src/scss/components/_timelines.scss +2 -2
  63. package/src/scss/components/_toasts.scss +92 -0
  64. package/src/scss/form-elements/_form.scss +11 -3
  65. package/src/scss/form-elements/_input.scss +24 -0
  66. package/src/scss/form-elements/_toggle.scss +1 -1
  67. package/src/scss/layout/_footer.scss +4 -4
  68. package/src/scss/layout/_header.scss +219 -59
  69. package/src/scss/layout/_index.scss +1 -0
  70. package/src/scss/layout/_main.scss +1 -1
  71. package/src/scss/layout/_page-header.scss +48 -0
  72. package/src/scss/layout/_section.scss +15 -14
  73. package/src/scss/main.scss +4 -0
  74. package/src/scss/utilities/_flex.scss +4 -0
  75. package/src/scss/utilities/_index.scss +1 -0
  76. package/src/scss/utilities/_text.scss +105 -0
  77. package/.claude/commands/mw.md +0 -595
@@ -1,595 +0,0 @@
1
- # MaverickWave CSS Framework — Angular Integration Guide
2
-
3
- This skill helps you use the **MaverickWave CSS framework** in an Angular project.
4
- MaverickWave provides ready-made CSS classes. You apply them directly in Angular templates — no Angular-specific library is needed.
5
-
6
- ---
7
-
8
- ## Setup
9
-
10
- ### 1. Build the framework
11
-
12
- ```bash
13
- cd path/to/maverick-wave
14
- npm run build
15
- # Outputs: dist/maverick-wave.min.css (and .css for dev)
16
- ```
17
-
18
- ### 2. Add to Angular project
19
-
20
- **Option A — copy the CSS file** and reference it in `angular.json`:
21
-
22
- ```json
23
- "styles": [
24
- "src/styles.scss",
25
- "src/assets/maverick-wave.min.css"
26
- ]
27
- ```
28
-
29
- **Option B — import in `styles.scss`** (if you publish to npm or use a local path):
30
-
31
- ```scss
32
- @import 'path/to/maverick-wave.min.css';
33
- ```
34
-
35
- ### 3. FontAwesome icons
36
-
37
- MaverickWave uses FontAwesome icons. Add to `index.html`:
38
-
39
- ```html
40
- <link
41
- rel="stylesheet"
42
- href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css"
43
- />
44
- ```
45
-
46
- ### 4. Theme (dark/light)
47
-
48
- The framework defaults to dark mode. To enable switching, add `.mw-theme-light` to `<body>`:
49
-
50
- ```typescript
51
- // In your AppComponent
52
- toggleTheme() {
53
- document.body.classList.toggle('mw-theme-light');
54
- }
55
- ```
56
-
57
- ---
58
-
59
- ## Angular Reactive Forms Integration
60
-
61
- Use the `mw-field` wrapper to group label + control + hint/error:
62
-
63
- ```html
64
- <div
65
- class="mw-field"
66
- [class.mw-field-has-error]="email.invalid && email.touched"
67
- >
68
- <label class="mw-field-label mw-required" for="email">Email</label>
69
- <input id="email" type="email" class="mw-input" formControlName="email" />
70
- <span class="mw-field-hint">Used for account notifications.</span>
71
- @if (email.invalid && email.touched) {
72
- <span class="mw-field-error">
73
- <i class="fas fa-exclamation-circle"></i>
74
- Please enter a valid email address.
75
- </span>
76
- }
77
- </div>
78
- ```
79
-
80
- ---
81
-
82
- ## Form Elements
83
-
84
- ### Input
85
-
86
- ```html
87
- <input type="text" class="mw-input" />
88
- <input type="text" class="mw-input mw-input-sm" />
89
- <input type="text" class="mw-input mw-input-lg" />
90
- ```
91
-
92
- ### Input Group (prefix / suffix / button)
93
-
94
- ```html
95
- <!-- Icon prefix -->
96
- <div class="mw-input-group">
97
- <span class="mw-input-group-prefix"><i class="fas fa-search"></i></span>
98
- <input type="text" class="mw-input" placeholder="Search..." />
99
- </div>
100
-
101
- <!-- Text prefix + suffix -->
102
- <div class="mw-input-group">
103
- <span class="mw-input-group-prefix">https://</span>
104
- <input type="text" class="mw-input" placeholder="your-domain.com" />
105
- <span class="mw-input-group-suffix">.com</span>
106
- </div>
107
-
108
- <!-- Input + button -->
109
- <div class="mw-input-group">
110
- <input type="text" class="mw-input" placeholder="Search..." />
111
- <button type="button" class="mw-btn mw-btn-primary">
112
- <i class="fas fa-search"></i>
113
- </button>
114
- </div>
115
-
116
- <!-- Sizes: mw-input-group-sm / mw-input-group-lg -->
117
- ```
118
-
119
- ### Date, Time & DateTime
120
-
121
- ```html
122
- <!-- Date -->
123
- <div class="mw-input-group">
124
- <span class="mw-input-group-prefix"
125
- ><i class="fas fa-calendar-days"></i
126
- ></span>
127
- <input type="date" class="mw-input" formControlName="appointmentDate" />
128
- </div>
129
-
130
- <!-- Time -->
131
- <div class="mw-input-group">
132
- <span class="mw-input-group-prefix"><i class="fas fa-clock"></i></span>
133
- <input type="time" class="mw-input" formControlName="startTime" />
134
- </div>
135
-
136
- <!-- DateTime-local -->
137
- <div class="mw-input-group">
138
- <span class="mw-input-group-prefix"
139
- ><i class="fas fa-calendar-days"></i
140
- ></span>
141
- <input type="datetime-local" class="mw-input" formControlName="mainSlot" />
142
- </div>
143
-
144
- <!-- With mw-field wrapper (recommended for forms) -->
145
- <div class="mw-field">
146
- <label class="mw-field-label mw-required" for="mainSlot">Main Slot</label>
147
- <div class="mw-input-group">
148
- <span class="mw-input-group-prefix"
149
- ><i class="fas fa-calendar-days"></i
150
- ></span>
151
- <input
152
- id="mainSlot"
153
- type="datetime-local"
154
- class="mw-input"
155
- formControlName="mainSlot"
156
- />
157
- </div>
158
- </div>
159
-
160
- <!-- Sizes: combine mw-input-group-sm/lg with mw-input-sm/lg -->
161
- ```
162
-
163
- ### Select
164
-
165
- ```html
166
- <select class="mw-select">
167
- <option value="" disabled selected>Choose...</option>
168
- <option value="a">Option A</option>
169
- </select>
170
-
171
- <!-- Sizes: mw-select-sm / mw-select-lg -->
172
- ```
173
-
174
- ### Textarea
175
-
176
- ```html
177
- <textarea class="mw-textarea" rows="4" placeholder="..."></textarea>
178
- <textarea class="mw-textarea mw-textarea-sm"></textarea>
179
- <textarea class="mw-textarea mw-textarea-lg"></textarea>
180
-
181
- <!-- Resize variants: mw-textarea-resizable / mw-textarea-resizable-vertical / mw-textarea-resizable-horizontal -->
182
- ```
183
-
184
- ### Checkbox
185
-
186
- ```html
187
- <label class="mw-checkbox">
188
- <input type="checkbox" formControlName="agreed" />
189
- <span class="mw-checkbox-box"></span>
190
- <span class="mw-checkbox-label">I agree to the terms</span>
191
- </label>
192
-
193
- <!-- Color variants: mw-checkbox-primary / secondary / success / warning / danger / info -->
194
- <!-- Size variants: mw-checkbox-sm / mw-checkbox-lg -->
195
- <!-- Disabled: add class mw-checkbox-disabled + disabled attr on input -->
196
- ```
197
-
198
- ### Radio
199
-
200
- ```html
201
- <label class="mw-radio">
202
- <input type="radio" name="plan" value="free" formControlName="plan" />
203
- <span class="mw-radio-button"></span>
204
- <span class="mw-radio-label">Free</span>
205
- </label>
206
-
207
- <!-- Color variants: mw-radio-primary / secondary / success / warning / danger / info -->
208
- <!-- Size variants: mw-radio-sm / mw-radio-lg -->
209
- <!-- Disabled: add class mw-radio-disabled + disabled attr on input -->
210
- ```
211
-
212
- ### Toggle Switch
213
-
214
- ```html
215
- <label class="mw-toggle">
216
- <input type="checkbox" formControlName="notifications" />
217
- <span class="mw-toggle-track"></span>
218
- <span class="mw-toggle-label">Enable notifications</span>
219
- </label>
220
-
221
- <!-- Sizes: mw-toggle-sm / mw-toggle-lg -->
222
- <!-- Colors: mw-toggle-primary / secondary / success / warning / danger -->
223
- <!-- Disabled: mw-toggle-disabled (add disabled attr to input too) -->
224
- ```
225
-
226
- ### Form Field Pattern
227
-
228
- ```html
229
- <div class="mw-field">
230
- <label class="mw-field-label mw-required" for="name">Full Name</label>
231
- <input id="name" type="text" class="mw-input" formControlName="name" />
232
- <span class="mw-field-hint">As it appears on your ID.</span>
233
- @if (name.invalid && name.touched) {
234
- <span class="mw-field-error">
235
- <i class="fas fa-exclamation-circle"></i> Name is required.
236
- </span>
237
- }
238
- </div>
239
- ```
240
-
241
- ### Form Layout
242
-
243
- ```html
244
- <form class="mw-form" [formGroup]="myForm" (ngSubmit)="onSubmit()">
245
- <div class="mw-form-group">
246
- <h4 class="mw-form-group-title">Personal Info</h4>
247
- <div class="mw-grid-2 mw-gap-4">
248
- <!-- fields go here -->
249
- </div>
250
- </div>
251
- <div class="mw-form-actions">
252
- <button type="button" class="mw-btn mw-btn-outline">Cancel</button>
253
- <button type="submit" class="mw-btn mw-btn-primary">Save</button>
254
- </div>
255
- </form>
256
- ```
257
-
258
- ---
259
-
260
- ## Buttons
261
-
262
- ```html
263
- <button class="mw-btn mw-btn-primary">Primary</button>
264
- <button class="mw-btn mw-btn-secondary">Secondary</button>
265
- <button class="mw-btn mw-btn-outline">Outline</button>
266
- <button class="mw-btn mw-btn-link">Link</button>
267
- <button class="mw-btn mw-btn-link-muted">Muted Link</button>
268
-
269
- <!-- Sizes: mw-btn-sm / mw-btn-lg -->
270
- <!-- With icon: -->
271
- <button class="mw-btn mw-btn-primary"><i class="fas fa-save"></i> Save</button>
272
- ```
273
-
274
- ---
275
-
276
- ## Layout Utilities
277
-
278
- ```html
279
- <!-- Grid -->
280
- <div class="mw-grid-2 mw-gap-4">...</div>
281
- <!-- 2-col grid -->
282
- <div class="mw-grid-3 mw-gap-6">...</div>
283
- <!-- 3-col grid -->
284
- <div class="mw-grid-4 mw-gap-4">...</div>
285
- <!-- 4-col grid -->
286
-
287
- <!-- Spacing keys: -6 to 13 (e.g. mw-mt-4, mw-mb-6, mw-mx-3, mw-p-4, mw-px-6) -->
288
- <!-- Gap keys: 0–13 (negative values are invalid for gap and not generated) -->
289
- ```
290
-
291
- ---
292
-
293
- ## Cards & Panels
294
-
295
- ```html
296
- <!-- Simple card -->
297
- <div class="mw-card mw-card-simple">
298
- <h4 class="mw-card-title">Title</h4>
299
- <p>Content</p>
300
- </div>
301
-
302
- <!-- Hoverable card -->
303
- <div class="mw-card mw-card-hover">...</div>
304
-
305
- <!-- Panel (titled section) -->
306
- <div class="mw-panel">
307
- <h4 class="mw-panel-header">Panel Title</h4>
308
- <div class="mw-panel-body">...</div>
309
- </div>
310
- ```
311
-
312
- ---
313
-
314
- ## Alerts
315
-
316
- ```html
317
- <div class="mw-alert mw-alert-primary">Info message.</div>
318
- <div class="mw-alert mw-alert-success">Success message.</div>
319
- <div class="mw-alert mw-alert-warning">Warning message.</div>
320
- <div class="mw-alert mw-alert-danger">Error message.</div>
321
-
322
- <!-- Closable (handle dismiss in component) -->
323
- @if (showAlert) {
324
- <div class="mw-alert mw-alert-primary">
325
- Message
326
- <button class="mw-btn mw-btn-link" (click)="showAlert = false">
327
- <i class="fas fa-times"></i>
328
- </button>
329
- </div>
330
- }
331
- ```
332
-
333
- ---
334
-
335
- ## Tables
336
-
337
- ```html
338
- <div class="mw-table-wrapper">
339
- <table class="mw-table">
340
- <thead>
341
- <tr>
342
- <th>Name</th>
343
- <th>Status</th>
344
- </tr>
345
- </thead>
346
- <tbody>
347
- @for (item of items; track item.id) {
348
- <tr>
349
- <td>{{ item.name }}</td>
350
- <td>
351
- <span class="mw-tag mw-tag-success">Active</span>
352
- </td>
353
- </tr>
354
- }
355
- </tbody>
356
- </table>
357
- </div>
358
- ```
359
-
360
- ---
361
-
362
- ## Tags / Badges
363
-
364
- ```html
365
- <span class="mw-tag mw-tag-primary">Primary</span>
366
- <span class="mw-tag mw-tag-success">Active</span>
367
- <span class="mw-tag mw-tag-warning">Pending</span>
368
- <span class="mw-tag mw-tag-danger">Error</span>
369
- <span class="mw-tag mw-tag-info">Info</span>
370
- <span class="mw-tag mw-tag-secondary">Secondary</span>
371
- ```
372
-
373
- ---
374
-
375
- ## Modal
376
-
377
- ```html
378
- <!-- Trigger: set isOpen = true in component -->
379
- <div
380
- class="mw-modal-overlay"
381
- [class.mw-modal-open]="isOpen"
382
- (click)="isOpen = false"
383
- >
384
- <div class="mw-modal" (click)="$event.stopPropagation()">
385
- <div class="mw-modal-header">
386
- <h3 class="mw-modal-title">Title</h3>
387
- <button class="mw-btn mw-btn-link" (click)="isOpen = false">
388
- <i class="fas fa-times"></i>
389
- </button>
390
- </div>
391
- <div class="mw-modal-body">Content</div>
392
- <div class="mw-modal-footer">
393
- <button class="mw-btn mw-btn-outline" (click)="isOpen = false">
394
- Cancel
395
- </button>
396
- <button class="mw-btn mw-btn-primary" (click)="confirm()">Confirm</button>
397
- </div>
398
- </div>
399
- </div>
400
- ```
401
-
402
- ---
403
-
404
- ## Spinner / Loading
405
-
406
- ```html
407
- <div class="mw-spinner mw-spinner-primary"></div>
408
- <div class="mw-spinner mw-spinner-sm mw-spinner-secondary"></div>
409
-
410
- <!-- With overlay (e.g., on async operations) -->
411
- @if (isLoading) {
412
- <div class="mw-spinner-overlay">
413
- <div class="mw-spinner mw-spinner-primary"></div>
414
- </div>
415
- }
416
- ```
417
-
418
- ---
419
-
420
- ## Skeleton Loader
421
-
422
- ```html
423
- <!-- Show while data is loading -->
424
- @if (isLoading) {
425
- <div class="mw-skeleton-card">
426
- <span class="mw-skeleton mw-skeleton-title"></span>
427
- <span class="mw-skeleton mw-skeleton-text"></span>
428
- <span class="mw-skeleton mw-skeleton-text"></span>
429
- </div>
430
- }
431
-
432
- <!-- Avatar + text placeholder -->
433
- @if (isLoading) {
434
- <div class="mw-skeleton-card">
435
- <div class="mw-skeleton-row">
436
- <span class="mw-skeleton mw-skeleton-circle"></span>
437
- <div class="mw-skeleton-body">
438
- <span class="mw-skeleton mw-skeleton-text" style="width: 55%"></span>
439
- <span class="mw-skeleton mw-skeleton-text"></span>
440
- </div>
441
- </div>
442
- </div>
443
- }
444
- ```
445
-
446
- ---
447
-
448
- ## Stepper
449
-
450
- ```html
451
- <!-- Horizontal -->
452
- <div class="mw-stepper">
453
- <div class="mw-stepper-step">
454
- <div class="mw-stepper-indicator mw-done"><i class="fas fa-check"></i></div>
455
- <span class="mw-stepper-label mw-done">Account</span>
456
- </div>
457
- <div class="mw-stepper-connector mw-done"></div>
458
- <div class="mw-stepper-step">
459
- <div class="mw-stepper-indicator mw-active">2</div>
460
- <span class="mw-stepper-label mw-active">Details</span>
461
- </div>
462
- <div class="mw-stepper-connector"></div>
463
- <div class="mw-stepper-step">
464
- <div class="mw-stepper-indicator">3</div>
465
- <span class="mw-stepper-label">Review</span>
466
- </div>
467
- </div>
468
- ```
469
-
470
- ---
471
-
472
- ## Empty State
473
-
474
- ```html
475
- <div class="mw-empty-state">
476
- <div class="mw-empty-state-icon">
477
- <i class="fas fa-inbox"></i>
478
- </div>
479
- <h3 class="mw-empty-state-title">No results found</h3>
480
- <p class="mw-empty-state-desc">Try adjusting your search or filters.</p>
481
- <button class="mw-btn mw-btn-primary">Clear filters</button>
482
- </div>
483
-
484
- <!-- Color variants: mw-empty-state-primary / success / warning / danger -->
485
- <!-- Size variant: mw-empty-state-sm -->
486
- ```
487
-
488
- ---
489
-
490
- ## Divider
491
-
492
- ```html
493
- <hr class="mw-divider" />
494
- <hr class="mw-divider mw-divider-thick" />
495
- <hr class="mw-divider mw-divider-dashed" />
496
- <hr class="mw-divider mw-divider-primary" />
497
-
498
- <!-- With text -->
499
- <div class="mw-divider-text">or continue with</div>
500
-
501
- <!-- Vertical (in flex containers) -->
502
- <span class="mw-divider-vertical"></span>
503
- ```
504
-
505
- ---
506
-
507
- ## Typography Helpers
508
-
509
- ```html
510
- <p class="mw-text-muted">Muted text</p>
511
- <p class="mw-text-sm">Small text</p>
512
- <p class="mw-text-medium">Medium weight</p>
513
- <span class="mw-text-primary">Primary colored</span>
514
- <span class="mw-text-success">Success colored</span>
515
- <span class="mw-text-danger">Danger colored</span>
516
- ```
517
-
518
- ---
519
-
520
- ## Common Angular Patterns
521
-
522
- ### Reactive form with full validation
523
-
524
- ```typescript
525
- // component.ts
526
- private fb = inject(FormBuilder);
527
-
528
- form = this.fb.group({
529
- email: ['', [Validators.required, Validators.email]],
530
- name: ['', Validators.required],
531
- notifications: [true],
532
- });
533
-
534
- get email() { return this.form.get('email')!; }
535
- ```
536
-
537
- ```html
538
- <!-- template -->
539
- <form class="mw-form" [formGroup]="form" (ngSubmit)="onSubmit()">
540
- <div
541
- class="mw-field"
542
- [class.mw-field-has-error]="email.invalid && email.touched"
543
- >
544
- <label class="mw-field-label mw-required" for="email">Email</label>
545
- <div class="mw-input-group">
546
- <span class="mw-input-group-prefix"><i class="fas fa-envelope"></i></span>
547
- <input id="email" type="email" class="mw-input" formControlName="email" />
548
- </div>
549
- @if (email.errors?.['required'] && email.touched) {
550
- <span class="mw-field-error">
551
- <i class="fas fa-exclamation-circle"></i> Email is required.
552
- </span>
553
- } @if (email.errors?.['email'] && email.touched) {
554
- <span class="mw-field-error">
555
- <i class="fas fa-exclamation-circle"></i> Please enter a valid email
556
- address.
557
- </span>
558
- }
559
- </div>
560
-
561
- <div class="mw-field">
562
- <label class="mw-toggle">
563
- <input type="checkbox" formControlName="notifications" />
564
- <span class="mw-toggle-track"></span>
565
- <span class="mw-toggle-label">Enable email notifications</span>
566
- </label>
567
- </div>
568
-
569
- <div class="mw-form-actions">
570
- <button
571
- type="submit"
572
- class="mw-btn mw-btn-primary"
573
- [disabled]="form.invalid"
574
- >
575
- <i class="fas fa-save"></i> Save
576
- </button>
577
- </div>
578
- </form>
579
- ```
580
-
581
- ### Loading state pattern
582
-
583
- ```html
584
- @if (!isLoading) {
585
- <div class="mw-card mw-card-simple">
586
- <!-- real content -->
587
- </div>
588
- } @else {
589
- <div class="mw-skeleton-card">
590
- <span class="mw-skeleton mw-skeleton-title"></span>
591
- <span class="mw-skeleton mw-skeleton-text"></span>
592
- <span class="mw-skeleton mw-skeleton-text"></span>
593
- </div>
594
- }
595
- ```