maverick-wave 4.3.0 → 4.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 (41) hide show
  1. package/.claude/skills/maverick-wave/SKILL.md +2 -1
  2. package/.claude/skills/maverick-wave/examples/angular-form.md +4 -0
  3. package/.claude/skills/maverick-wave/references/forms.md +27 -0
  4. package/CHANGELOG.md +10 -0
  5. package/CLAUDE.md +10 -10
  6. package/README.md +9 -9
  7. package/maverick-wave.min.css +1 -1
  8. package/package.json +2 -2
  9. package/scripts/verify.js +5 -5
  10. package/src/js/main.js +3 -3
  11. package/src/partials/accordions-container.html +3 -3
  12. package/src/partials/blog-posts-container.html +1 -1
  13. package/src/partials/buttons-container.html +1 -1
  14. package/src/partials/colors-container.html +4 -4
  15. package/src/partials/footer-container.html +3 -3
  16. package/src/partials/form-elements-container.html +98 -0
  17. package/src/partials/form-field-container.html +20 -4
  18. package/src/partials/get-started-container.html +19 -19
  19. package/src/partials/header-utilities-container.html +1 -1
  20. package/src/partials/modals-container.html +1 -1
  21. package/src/partials/ratings-container.html +1 -1
  22. package/src/partials/segmented-container.html +2 -2
  23. package/src/partials/tables-container.html +4 -4
  24. package/src/partials/tags-container.html +1 -1
  25. package/src/partials/timelines-container.html +5 -5
  26. package/src/partials/utilities-container.html +1 -1
  27. package/src/scss/abstracts/_variables.scss +7 -2
  28. package/src/scss/base/_base.scss +1 -1
  29. package/src/scss/components/_avatars.scss +1 -1
  30. package/src/scss/components/_kanban.scss +9 -9
  31. package/src/scss/form-elements/_checkbox.scss +1 -1
  32. package/src/scss/form-elements/_form.scss +2 -2
  33. package/src/scss/form-elements/_index.scss +1 -0
  34. package/src/scss/form-elements/_input-group.scss +1 -1
  35. package/src/scss/form-elements/_input.scss +3 -3
  36. package/src/scss/form-elements/_prefilled.scss +65 -0
  37. package/src/scss/form-elements/_select.scss +2 -2
  38. package/src/scss/form-elements/_slider.scss +1 -1
  39. package/src/scss/form-elements/_textarea.scss +2 -2
  40. package/src/scss/layout/_header.scss +1 -1
  41. package/src/scss/utilities/_flex.scss +1 -1
package/scripts/verify.js CHANGED
@@ -52,7 +52,7 @@ const css = read(CSS);
52
52
  const html = read(HTML);
53
53
  if (!css || !html) {
54
54
  console.error(
55
- 'dist/ is missing or incomplete run `npm run build` before `npm run verify`.'
55
+ 'dist/ is missing or incomplete - run `npm run build` before `npm run verify`.'
56
56
  );
57
57
  process.exit(1);
58
58
  }
@@ -76,7 +76,7 @@ for (const t of [...tokensUsed].sort()) {
76
76
  for (const t of [...tokensDefined].sort()) {
77
77
  if (!tokensUsed.has(t) && !TOKEN_ALLOWLIST.has(t)) {
78
78
  errors.push(
79
- `token defined but never used: ${t} overriding it would do nothing`
79
+ `token defined but never used: ${t} - overriding it would do nothing`
80
80
  );
81
81
  }
82
82
  }
@@ -86,7 +86,7 @@ for (const t of [...tokensDefined].sort()) {
86
86
  const classesInCss = new Set(all(css, /\.(mw-[a-z0-9-]+)/g));
87
87
 
88
88
  // Classes the JS adds at runtime, or queries as a hook, count as legitimate
89
- // targets including selector strings like '.mw-foo' and '[class~="mw-foo"]'
89
+ // targets - including selector strings like '.mw-foo' and '[class~="mw-foo"]'
90
90
  const classesInJs = new Set(all(js, /\.?(mw-[a-z0-9-]+)/g));
91
91
 
92
92
  const classesInMarkup = new Map(); // class -> where it was seen
@@ -99,7 +99,7 @@ for (const attr of html.matchAll(/class\s*=\s*"([^"]*)"/g)) {
99
99
  }
100
100
  // The docs name classes as `mw-foo` in prose and code fences. A trailing hyphen
101
101
  // means a family was written as a stem (`mw-btn-mini-` + variants), never a real
102
- // class skip those instead of reporting them as missing.
102
+ // class - skip those instead of reporting them as missing.
103
103
  for (const c of all(docs, /[`."'\s](mw-[a-z0-9-]+)/g)) {
104
104
  if (c.endsWith('-')) continue;
105
105
  if (!classesInMarkup.has(c)) classesInMarkup.set(c, 'docs');
@@ -130,7 +130,7 @@ for (const w of warnings) console.log(` warn ${w}`);
130
130
  for (const e of errors) console.error(` ERROR ${e}`);
131
131
 
132
132
  console.log(
133
- `\nverify: ${tokensDefined.size} tokens, ${classesInCss.size} classes checked ` +
133
+ `\nverify: ${tokensDefined.size} tokens, ${classesInCss.size} classes checked - ` +
134
134
  (errors.length ? `${label(errors.length, 'error')}` : 'clean')
135
135
  );
136
136
 
package/src/js/main.js CHANGED
@@ -140,7 +140,7 @@
140
140
  function initGalleries() {
141
141
  document.querySelectorAll('.mw-gallery').forEach((gallery) => {
142
142
  // Dots and caption sit next to .mw-gallery, not inside it, so the
143
- // container is the scope with the parent as a fallback, otherwise a
143
+ // container is the scope - with the parent as a fallback, otherwise a
144
144
  // markup without the wrapper would silently stay dead
145
145
  const scope =
146
146
  gallery.closest('.mw-gallery-container') || gallery.parentElement;
@@ -154,7 +154,7 @@
154
154
 
155
155
  const slides = track.children;
156
156
 
157
- // Everything below the track is optional a gallery may well ship
157
+ // Everything below the track is optional - a gallery may well ship
158
158
  // without arrows, dots or a caption, and a missing one must not throw
159
159
  const dotsBox = container.querySelector('.mw-gallery-dots');
160
160
  const descBox = container.querySelector('.mw-gallery-desc');
@@ -167,7 +167,7 @@
167
167
  const total = slides.length;
168
168
  current = (index + total) % total;
169
169
 
170
- // Percentages refer to the track's own width, which is one slide
170
+ // Percentages refer to the track's own width, which is one slide -
171
171
  // so no measuring and nothing to recalculate on resize
172
172
  track.style.transform = `translateX(-${current * 100}%)`;
173
173
 
@@ -40,7 +40,7 @@
40
40
  </p>
41
41
  <pre class="mw-code-block"><code>/* Your custom-styles.css */
42
42
  :root {
43
- /* Root colors hover tones, translucent backgrounds and borders
43
+ /* Root colors - hover tones, translucent backgrounds and borders
44
44
  are derived from them at runtime via color-mix() */
45
45
  --mw-primary-color: #e94560;
46
46
  --mw-secondary-color: #f39c12;
@@ -60,7 +60,7 @@
60
60
  <p>
61
61
  If you integrate MaverickWave's SCSS source files into your project,
62
62
  pass your overrides through <code>@use ... with (...)</code>. A plain
63
- assignment before the <code>@use</code> has no effect &mdash; the root
63
+ assignment before the <code>@use</code> has no effect - the root
64
64
  colors are declared with <code>!default</code>, which only the
65
65
  configuration reaches.
66
66
  </p>
@@ -73,7 +73,7 @@
73
73
  <p>
74
74
  This method requires you to have a Sass compiler set up in your
75
75
  project. Single components can be imported instead of
76
- <code>main</code> &mdash; see the "Get Started" section.
76
+ <code>main</code> - see the "Get Started" section.
77
77
  </p>
78
78
  <p class="mw-mt-4">
79
79
  <button
@@ -55,7 +55,7 @@
55
55
  <blockquote>
56
56
  "AI hasn't replaced developers; it has elevated them. We now spend more
57
57
  time on architecture and problem-solving rather than writing boilerplate
58
- code." Elena Vega, Lead Developer at TechFront
58
+ code." - Elena Vega, Lead Developer at TechFront
59
59
  </blockquote>
60
60
 
61
61
  <h3>Serverless Architecture: Beyond the Basics</h3>
@@ -143,7 +143,7 @@
143
143
  <button type="button" class="mw-btn-plain mw-text-bold">14:30</button>
144
144
  on
145
145
  <button type="button" class="mw-btn-plain mw-text-bold">19.09.2026</button>
146
- &ndash; both are real buttons, reachable by tab.
146
+ - both are real buttons, reachable by tab.
147
147
  </p>
148
148
  <div class="mw-d-flex mw-gap-4 mw-flex-wrap">
149
149
  <button type="button" class="mw-btn mw-btn-link">mw-btn-link</button>
@@ -3,10 +3,10 @@
3
3
  <!-- the hex code string is getting updated via javascript! -->
4
4
 
5
5
  <p class="mw-text-muted mw-mb-6">
6
- These twelve are the only colors you ever set. Everything else &mdash; hover
7
- tones, translucent backgrounds, borders, muted text &mdash; is derived from
8
- them at runtime with <code>color-mix()</code>, so overriding a root token
9
- cascades to all of its variants.
6
+ These twelve are the only colors you ever set. Everything else - hover tones,
7
+ translucent backgrounds, borders, muted text - is derived from them at runtime
8
+ with <code>color-mix()</code>, so overriding a root token cascades to all of
9
+ its variants.
10
10
  </p>
11
11
 
12
12
  <div class="mw-grid-auto-sm">
@@ -91,9 +91,9 @@
91
91
  MaverickWave is a lightweight, modern CSS framework for building responsive
92
92
  websites with elegance and speed. It embodies the spirit of innovation and
93
93
  fluidity, just like a maverick wave that charts its own course across the
94
- ocean. The framework was named to reflect its bold approach to web
95
- design—breaking free from conventional constraints while maintaining a natural
96
- flow that adapts seamlessly to any environment. Like the powerful yet graceful
94
+ ocean. The framework was named to reflect its bold approach to web design -
95
+ breaking free from conventional constraints while maintaining a natural flow
96
+ that adapts seamlessly to any environment. Like the powerful yet graceful
97
97
  movement of waves, MaverickWave combines strength and flexibility, empowering
98
98
  developers to create distinctive digital experiences that stand out in the
99
99
  vast sea of the web.
@@ -433,6 +433,104 @@
433
433
  </div>
434
434
  </div>
435
435
 
436
+ <div class="mw-card mw-card-simple">
437
+ <h3 class="mw-card-title">Prefilled Values</h3>
438
+ <p class="mw-text-muted mw-text-sm mw-mt-3">
439
+ Add <code>mw-prefilled</code> to any control whose value was not typed in
440
+ this session - loaded from an existing record, restored from a draft,
441
+ filled with a default. The corner triangle scales with the control size
442
+ and stays visible on readonly and disabled controls. It is decoration
443
+ only, so repeat the information in a <code>mw-field-hint</code> for screen
444
+ readers.
445
+ </p>
446
+ <div class="mw-grid-4 mw-mt-4">
447
+ <!-- Small -->
448
+ <label for="prefilled-input-sm">
449
+ <span>Small</span>
450
+ <input
451
+ id="prefilled-input-sm"
452
+ type="text"
453
+ class="mw-input mw-input-sm mw-prefilled"
454
+ value="Max Mustermann"
455
+ />
456
+ </label>
457
+ <!-- Default -->
458
+ <label for="prefilled-input">
459
+ <span>Default</span>
460
+ <input
461
+ id="prefilled-input"
462
+ type="text"
463
+ class="mw-input mw-prefilled"
464
+ value="Max Mustermann"
465
+ />
466
+ </label>
467
+ <!-- Large -->
468
+ <label for="prefilled-input-lg">
469
+ <span>Large</span>
470
+ <input
471
+ id="prefilled-input-lg"
472
+ type="text"
473
+ class="mw-input mw-input-lg mw-prefilled"
474
+ value="Max Mustermann"
475
+ />
476
+ </label>
477
+ <!-- Readonly -->
478
+ <label for="prefilled-input-readonly">
479
+ <span>Readonly</span>
480
+ <input
481
+ id="prefilled-input-readonly"
482
+ type="text"
483
+ class="mw-input mw-prefilled"
484
+ readonly
485
+ value="USR-00042"
486
+ />
487
+ </label>
488
+ </div>
489
+ <div class="mw-grid-4 mw-mt-4">
490
+ <!-- Select small -->
491
+ <label for="prefilled-select-sm">
492
+ <span>Select small</span>
493
+ <select
494
+ id="prefilled-select-sm"
495
+ class="mw-select mw-select-sm mw-prefilled"
496
+ >
497
+ <option selected>Germany</option>
498
+ <option>Austria</option>
499
+ </select>
500
+ </label>
501
+ <!-- Select default -->
502
+ <label for="prefilled-select">
503
+ <span>Select default</span>
504
+ <select id="prefilled-select" class="mw-select mw-prefilled">
505
+ <option selected>Germany</option>
506
+ <option>Austria</option>
507
+ </select>
508
+ </label>
509
+ <!-- Select large -->
510
+ <label for="prefilled-select-lg">
511
+ <span>Select large</span>
512
+ <select
513
+ id="prefilled-select-lg"
514
+ class="mw-select mw-select-lg mw-prefilled"
515
+ >
516
+ <option selected>Germany</option>
517
+ <option>Austria</option>
518
+ </select>
519
+ </label>
520
+ <!-- Textarea -->
521
+ <label for="prefilled-textarea">
522
+ <span>Textarea</span>
523
+ <textarea
524
+ id="prefilled-textarea"
525
+ class="mw-textarea mw-prefilled"
526
+ rows="3"
527
+ >
528
+ Imported from the previous application.</textarea
529
+ >
530
+ </label>
531
+ </div>
532
+ </div>
533
+
436
534
  <div class="mw-card mw-card-simple">
437
535
  <h3 class="mw-card-title">Toggle Switch</h3>
438
536
  <div class="mw-grid-4-lg mw-mt-4">
@@ -7,7 +7,7 @@
7
7
  <div class="mw-card mw-card-simple">
8
8
  <p class="mw-text-muted mw-text-sm mw-mb-4">
9
9
  The <code>mw-field</code> wrapper groups label, input, hint, and error
10
- message as a single unit the recommended pattern for Angular reactive
10
+ message as a single unit - the recommended pattern for Angular reactive
11
11
  forms.
12
12
  </p>
13
13
 
@@ -80,9 +80,9 @@
80
80
  The error look is not automatic: bind
81
81
  <code>mw-field-has-error</code> to the control state (in Angular
82
82
  <code>[class.mw-field-has-error]="c.invalid &amp;&amp; c.touched"</code
83
- >). A control without a field wrapper &mdash; also a
83
+ >). A control without a field wrapper - also a
84
84
  <code>mw-checkbox-group</code>, <code>mw-radio-group</code> or
85
- <code>mw-slider-container</code> &mdash; takes
85
+ <code>mw-slider-container</code> - takes
86
86
  <code>mw-form-element-error</code> instead.
87
87
  </p>
88
88
 
@@ -133,13 +133,29 @@
133
133
  </div>
134
134
 
135
135
  <!-- Disabled -->
136
- <div class="mw-field">
136
+ <div class="mw-field mw-mb-4">
137
137
  <label class="mw-field-label" for="ff-plan">Plan (disabled)</label>
138
138
  <select id="ff-plan" class="mw-select" disabled>
139
139
  <option>Enterprise</option>
140
140
  </select>
141
141
  <span class="mw-field-hint">Contact support to change your plan.</span>
142
142
  </div>
143
+
144
+ <!-- Prefilled -->
145
+ <div class="mw-field">
146
+ <label class="mw-field-label" for="ff-company">Company</label>
147
+ <input
148
+ id="ff-company"
149
+ type="text"
150
+ class="mw-input mw-prefilled"
151
+ value="ACME GmbH"
152
+ aria-describedby="ff-company-hint"
153
+ />
154
+ <span class="mw-field-hint" id="ff-company-hint"
155
+ >Prefilled from your account - marked with
156
+ <code>mw-prefilled</code>.</span
157
+ >
158
+ </div>
143
159
  </div>
144
160
  </div>
145
161
  </div>
@@ -98,7 +98,7 @@
98
98
  <p>
99
99
  MaverickWave uses <code>@use</code> / <code>@forward</code> (modern
100
100
  Sass module syntax). Pass your overrides through
101
- <code>@use ... with (...)</code> &mdash; a plain assignment before the
101
+ <code>@use ... with (...)</code> - a plain assignment before the
102
102
  <code>@use</code> has no effect, because the root colors are declared
103
103
  with <code>!default</code>.
104
104
  </p>
@@ -107,11 +107,11 @@
107
107
  <p>Set <code>$mw-theme-mode</code> to control theme behavior:</p>
108
108
  <ul>
109
109
  <li>
110
- <code>'switchable'</code> (default) dark base, toggleable to light
110
+ <code>'switchable'</code> (default) - dark base, toggleable to light
111
111
  via <code>.mw-theme-light</code> on <code>&lt;body&gt;</code>
112
112
  </li>
113
- <li><code>'dark'</code> compile dark theme only</li>
114
- <li><code>'light'</code> compile light theme only</li>
113
+ <li><code>'dark'</code> - compile dark theme only</li>
114
+ <li><code>'light'</code> - compile light theme only</li>
115
115
  </ul>
116
116
  <p class="mw-text-warning">
117
117
  <i class="fas fa-exclamation-triangle mw-mr-1"></i>
@@ -119,14 +119,14 @@
119
119
  dark appearance regardless of theme mode.
120
120
  </p>
121
121
 
122
- <h5 class="mw-mt-4">Example your main SCSS file</h5>
122
+ <h5 class="mw-mt-4">Example - your main SCSS file</h5>
123
123
  <pre class="mw-code-block"><code>// styles.scss
124
124
 
125
125
  @use 'path/to/maverick-wave/src/scss/main' with (
126
126
  // Theme mode (optional, default is 'switchable')
127
127
  $mw-theme-mode: 'switchable',
128
128
 
129
- // Root colors everything else is derived from them at runtime
129
+ // Root colors - everything else is derived from them at runtime
130
130
  $primary-color: #e94560,
131
131
  $secondary-color: #f39c12,
132
132
  $dark-background: #1f1f2e,
@@ -152,12 +152,12 @@ body {
152
152
  </p>
153
153
  <pre
154
154
  class="mw-code-block"
155
- ><code>// styles.scss the configuration has to come first
155
+ ><code>// styles.scss - the configuration has to come first
156
156
  @use 'maverick-wave/src/scss/abstracts/variables' with (
157
157
  $primary-color: #0f766e
158
158
  );
159
159
 
160
- @use 'maverick-wave/src/scss/base'; // required carries the :root tokens
160
+ @use 'maverick-wave/src/scss/base'; // required - carries the :root tokens
161
161
  @use 'maverick-wave/src/scss/layout/grid';
162
162
  @use 'maverick-wave/src/scss/layout/page-header';
163
163
  @use 'maverick-wave/src/scss/components/buttons';
@@ -169,7 +169,7 @@ body {
169
169
  @use 'maverick-wave/src/scss/utilities';</code></pre>
170
170
  <p class="mw-text-warning">
171
171
  <i class="fas fa-exclamation-triangle mw-mr-1"></i>
172
- Without <code>base</code> every component renders without colors it
172
+ Without <code>base</code> every component renders without colors - it
173
173
  carries the <code>:root</code> custom properties. A subset like the
174
174
  one above compiles to roughly 98 kB raw / 15 kB gzipped, against 147
175
175
  kB / 22.5 kB for the full build.
@@ -195,9 +195,9 @@ body {
195
195
  <i class="fas fa-exclamation-triangle mw-mr-1"></i>
196
196
  <strong>No <code>"scripts"</code> entry for the JS file.</strong>
197
197
  <code>maverick-wave.min.js</code> wires everything up once on
198
- <code>DOMContentLoaded</code> and writes straight into the DOM &mdash;
199
- in a SPA everything rendered afterwards stays uninitialized, and the
200
- class toggles happen behind change detection. Rebuild the behaviors in
198
+ <code>DOMContentLoaded</code> and writes straight into the DOM - in a
199
+ SPA everything rendered afterwards stays uninitialized, and the class
200
+ toggles happen behind change detection. Rebuild the behaviors in
201
201
  components; the state classes (<code>active</code>, <code>open</code>,
202
202
  <code>mw-modal-open</code>, <code>mw-selected</code>) are the whole
203
203
  contract.
@@ -235,8 +235,8 @@ constructor() {
235
235
  <h5 class="mw-mt-4">Reactive Forms</h5>
236
236
  <p>
237
237
  The <code>mw-field</code> wrapper groups label, control, hint and
238
- error. Bind the error state yourself &mdash; the framework does not
239
- style Angular's <code>ng-invalid</code> / <code>ng-touched</code>
238
+ error. Bind the error state yourself - the framework does not style
239
+ Angular's <code>ng-invalid</code> / <code>ng-touched</code>
240
240
  classes:
241
241
  </p>
242
242
  <pre
@@ -263,10 +263,10 @@ constructor() {
263
263
  import './assets/maverick-wave.min.css';</code></pre>
264
264
  <p class="mw-text-warning">
265
265
  <i class="fas fa-exclamation-triangle mw-mr-1"></i>
266
- Do not import <code>maverick-wave.min.js</code> in a SPA &mdash; it
267
- binds once on <code>DOMContentLoaded</code> and never sees anything
268
- rendered later. Accordion, tabs, modal and theme toggle are class
269
- toggles; bind them with <code>className</code> from state.
266
+ Do not import <code>maverick-wave.min.js</code> in a SPA - it binds
267
+ once on <code>DOMContentLoaded</code> and never sees anything rendered
268
+ later. Accordion, tabs, modal and theme toggle are class toggles; bind
269
+ them with <code>className</code> from state.
270
270
  </p>
271
271
  <p>Example usage in a React component:</p>
272
272
  <pre class="mw-code-block"><code>function App() {
@@ -321,7 +321,7 @@ import './assets/maverick-wave.min.css';</code></pre>
321
321
  </p>
322
322
  <pre
323
323
  class="mw-code-block"
324
- ><code>/* your-custom-styles.css load AFTER maverick-wave.min.css */
324
+ ><code>/* your-custom-styles.css - load AFTER maverick-wave.min.css */
325
325
  :root {
326
326
  --mw-font-family-base: 'Your Custom Font', system-ui, sans-serif;
327
327
  --mw-font-family-heading: 'Your Custom Font', system-ui, sans-serif;
@@ -85,7 +85,7 @@
85
85
  Shows who is signed in: an avatar with initials plus the name. Below
86
86
  <code>md</code> the name steps aside and only the round avatar remains, so
87
87
  it keeps the same height as the login and burger buttons. Works outside a
88
- header too &mdash; in a panel header or a toolbar.
88
+ header too - in a panel header or a toolbar.
89
89
  </p>
90
90
  <!-- Fake header -->
91
91
  <div class="mw-mb-4" style="position: relative; overflow: hidden">
@@ -67,7 +67,7 @@
67
67
  </div>
68
68
  <div class="mw-modal-body">
69
69
  <p class="mw-text-muted">
70
- Max-width <strong>520px</strong>. The default size fits most use
70
+ Max-width <strong>520px</strong>. The default size - fits most use
71
71
  cases.
72
72
  </p>
73
73
  </div>
@@ -1,6 +1,6 @@
1
1
  <h3 class="mw-section-subtitle">Ratings</h3>
2
2
  <p class="mw-text-muted">
3
- Change the <code>data-rating</code> attribute (05) to see how many thumbs-up
3
+ Change the <code>data-rating</code> attribute (0-5) to see how many thumbs-up
4
4
  light up. You can also determine the icon flexibly.
5
5
  </p>
6
6
 
@@ -44,7 +44,7 @@
44
44
  </div>
45
45
 
46
46
  <label class="mw-field-label mw-d-block mw-mb-2">
47
- Secondary tone &ndash; <code>mw-segmented-secondary</code>
47
+ Secondary tone - <code>mw-segmented-secondary</code>
48
48
  </label>
49
49
  <div class="mw-segmented mw-segmented-secondary mw-mb-6">
50
50
  <button type="button" class="mw-segmented-item mw-active">List</button>
@@ -52,7 +52,7 @@
52
52
  </div>
53
53
 
54
54
  <label class="mw-field-label mw-d-block mw-mb-2">
55
- Inline &ndash; <code>mw-segmented-auto</code>
55
+ Inline - <code>mw-segmented-auto</code>
56
56
  </label>
57
57
  <div class="mw-segmented mw-segmented-auto">
58
58
  <button type="button" class="mw-segmented-item mw-active">All</button>
@@ -44,9 +44,9 @@
44
44
  </table>
45
45
  <p class="mw-text-muted mw-mt-3">
46
46
  The <strong>Budget</strong> column uses
47
- <strong>mw-text-currency</strong> &ndash; right-aligned with tabular,
48
- lining digits and no wrapping mid-number. The alignment comes from the
49
- right edge, so it works the same for <code>1,204.50</code> and
47
+ <strong>mw-text-currency</strong> - right-aligned with tabular, lining
48
+ digits and no wrapping mid-number. The alignment comes from the right
49
+ edge, so it works the same for <code>1,204.50</code> and
50
50
  <code>1.204,50</code>; only the number of decimal places has to be
51
51
  consistent per column. If you only want the fixed-width digits without the
52
52
  alignment, use <strong>mw-text-numeric</strong>. For the input side there
@@ -102,7 +102,7 @@
102
102
  <code>mw-table-responsive-scroll</code> provides. Scroll inside the table
103
103
  to see it. Its height comes from
104
104
  <code>--mw-table-scroll-height</code> (400px, 260px below <code>sm</code>)
105
- &mdash; override it per table with
105
+ - override it per table with
106
106
  <code>style="--mw-table-scroll-height: 250px"</code>.
107
107
  </p>
108
108
 
@@ -196,7 +196,7 @@
196
196
  <h3 class="mw-card-title mw-mb-4">Single Tag</h3>
197
197
  <div class="mw-card mw-card-simple">
198
198
  <p class="mw-text-muted mw-mb-4">
199
- For a single status chip &ndash; e.g. in a table cell &ndash; use
199
+ For a single status chip - e.g. in a table cell - use
200
200
  <strong>mw-tag</strong>. It carries the colour itself, so no
201
201
  <strong>mw-tags</strong> container is needed.
202
202
  </p>
@@ -7,7 +7,7 @@
7
7
  <div class="mw-timeline-big mw-my-6">
8
8
  <div class="mw-timeline-big-step mw-active">
9
9
  <div class="mw-timeline-big-date-container">
10
- <div class="mw-timeline-big-date-main">01/2023 Present</div>
10
+ <div class="mw-timeline-big-date-main">01/2023 - Present</div>
11
11
  </div>
12
12
  <div class="mw-timeline-big-content">
13
13
  <div class="mw-card">
@@ -29,7 +29,7 @@
29
29
  <div class="mw-timeline-big-event">
30
30
  <span class="mw-timeline-big-event-date">05/2023</span>
31
31
  <span class="mw-timeline-big-event-title">
32
- AWS Certified Solutions Architect Professional
32
+ AWS Certified Solutions Architect - Professional
33
33
  </span>
34
34
  </div>
35
35
  </div>
@@ -37,7 +37,7 @@
37
37
 
38
38
  <div class="mw-timeline-big-step">
39
39
  <div class="mw-timeline-big-date-container">
40
- <div class="mw-timeline-big-date-main">08/2021 12/2022</div>
40
+ <div class="mw-timeline-big-date-main">08/2021 - 12/2022</div>
41
41
  <div class="mw-timeline-big-date-sub">(1 year 4 months)</div>
42
42
  </div>
43
43
  <div class="mw-timeline-big-content">
@@ -74,7 +74,7 @@
74
74
 
75
75
  <div class="mw-timeline-big-step">
76
76
  <div class="mw-timeline-big-date-container">
77
- <div class="mw-timeline-big-date-main">06/2020 07/2021</div>
77
+ <div class="mw-timeline-big-date-main">06/2020 - 07/2021</div>
78
78
  <div class="mw-timeline-big-date-sub">(1 year 1 month)</div>
79
79
  </div>
80
80
  <div class="mw-timeline-big-content">
@@ -105,7 +105,7 @@
105
105
 
106
106
  <div class="mw-timeline-big-step">
107
107
  <div class="mw-timeline-big-date-container">
108
- <div class="mw-timeline-big-date-main">02/2018 05/2020</div>
108
+ <div class="mw-timeline-big-date-main">02/2018 - 05/2020</div>
109
109
  <div class="mw-timeline-big-date-sub">(2 year 3 months)</div>
110
110
  </div>
111
111
  <div class="mw-timeline-big-content">
@@ -14,7 +14,7 @@
14
14
 
15
15
  <h4 class="mw-mt-6 mw-mb-2">Auto Margins</h4>
16
16
  <p class="mw-text-muted mw-text-sm mw-mb-3">
17
- Every margin utility also takes <code>auto</code> &mdash;
17
+ Every margin utility also takes <code>auto</code> -
18
18
  <code>mw-mx-auto</code> centers a block, <code>mw-ml-auto</code> pushes a
19
19
  flex item to the far side.
20
20
  </p>
@@ -37,7 +37,7 @@ $accent-text-color: #efefef !default;
37
37
  //
38
38
  // shade()/tint() mix `in hsl`, which behaves like color.adjust($lightness: ...)
39
39
  // and scales proportionally, so a derivation looks the same on every palette.
40
- // Mixing with black/white also lowers the saturation a little that is why
40
+ // Mixing with black/white also lowers the saturation a little - that is why
41
41
  // hover tones read slightly softer than the base color. Alpha blending uses
42
42
  // `srgb` against `transparent`.
43
43
  // ---------------------------------------------------------------------------
@@ -86,7 +86,7 @@ $base-colors: (
86
86
  'secondary-info-background': fade('secondary-color-hover', 70%),
87
87
  // Translucent accent line used for dividers, rules and outlines
88
88
  'border-accent': fade('primary-color', 70%),
89
- // Text on any solid colored surface buttons of every variant, table and
89
+ // Text on any solid colored surface - buttons of every variant, table and
90
90
  // panel headers, badges, tooltips, mini close buttons, stepper dots.
91
91
  // Deliberately derived from neither a brand color nor a theme text color:
92
92
  // it has to stay readable on a dark surface no matter how the palette or the
@@ -276,3 +276,8 @@ $z-index: (
276
276
  'tooltip': 700,
277
277
  'alert': 900,
278
278
  );
279
+
280
+ // Native select arrow, drawn as a background layer because `appearance: none`
281
+ // removes the OS one. Shared, because any control that adds a second
282
+ // background layer (see `.mw-prefilled`) has to restate the whole list.
283
+ $select-arrow-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6'%3E%3Cpath fill='%23666' d='M0 0l5 6 5-6z'/%3E%3C/svg%3E");
@@ -58,7 +58,7 @@ $_active-prefix: 'dark';
58
58
  --mw-container-width-sm: calc(100% - #{spacing('5')} * 2);
59
59
  --mw-section-padding-block: #{spacing('7')};
60
60
 
61
- // Active theme aliases onto the dark or light set above
61
+ // Active theme - aliases onto the dark or light set above
62
62
  @each $name, $value in $_active-theme {
63
63
  --mw-#{$name}: var(--mw-#{$_active-prefix}-#{$name});
64
64
  }
@@ -68,7 +68,7 @@ $_mw-avatar-colors: (
68
68
  border-radius: radius('sm');
69
69
  }
70
70
 
71
- // Initials for users without a picture. Centers its text content and puts
71
+ // Initials - for users without a picture. Centers its text content and puts
72
72
  // the color on the background, so it stays combinable with the color
73
73
  // variants below, which keep working on the border.
74
74
  &-initials {