@med-o/ui 0.1.0 → 0.3.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.
package/src/styles.css CHANGED
@@ -1,40 +1,48 @@
1
- /* All component styles of @med-o/ui. Needs the tokens: @import "@med-o/design-tokens/css"; */
2
- @import './utils/utilities.css';
3
- @import './button/button.css';
4
- @import './field/field.css';
5
- @import './text-field/input.css';
6
- @import './checkbox/choice.css';
7
- @import './switch/switch.css';
8
- @import './badge/badge.css';
9
- @import './tag/tag.css';
10
- @import './avatar/avatar.css';
11
- @import './tooltip/tooltip.css';
12
- @import './progress/progress.css';
13
- @import './list/list.css';
14
- @import './list-view/list-view.css';
15
- @import './bulk-action-bar/bulk-action-bar.css';
16
- @import './empty-state/empty-state.css';
17
- @import './pagination/pagination.css';
18
- @import './search/search.css';
19
- @import './breadcrumbs/breadcrumbs.css';
20
- @import './accordion/accordion.css';
21
- @import './slider/slider.css';
22
- @import './toggle-button/toggle-button.css';
23
- @import './listbox/listbox.css';
24
- @import './select/select.css';
25
- @import './combobox/combobox.css';
26
- @import './bottom-sheet/bottom-sheet.css';
27
- @import './menu/menu.css';
28
- @import './dialog/dialog.css';
29
- @import './drawer/drawer.css';
30
- @import './link/link.css';
31
- @import './alert/alert.css';
32
- @import './toast/toast.css';
33
- @import './tabs/tabs.css';
34
- @import './popover/popover.css';
35
- @import './navigation/navigation.css';
36
- @import './card/card.css';
37
- @import './table/table.css';
38
- @import './upload/upload.css';
39
- @import './date-time/date-time.css';
40
- @import './media/media.css';
1
+ /*
2
+ * All component styles of @med-o/ui. Needs the tokens: @import "@med-o/design-tokens/css";
3
+ *
4
+ * Cascade layers: every component style sits in the layer `components`. CSS without a layer (your app) always
5
+ * wins over it, whatever the specificity – no !important needed. With Tailwind v4 the utilities win as well.
6
+ * The first line fixes the order of the layers (the same as Tailwind v4), so it holds in any import order.
7
+ */
8
+ @layer theme, base, components, utilities;
9
+
10
+ @import './utils/utilities.css' layer(components);
11
+ @import './button/button.css' layer(components);
12
+ @import './field/field.css' layer(components);
13
+ @import './text-field/input.css' layer(components);
14
+ @import './checkbox/choice.css' layer(components);
15
+ @import './switch/switch.css' layer(components);
16
+ @import './badge/badge.css' layer(components);
17
+ @import './tag/tag.css' layer(components);
18
+ @import './avatar/avatar.css' layer(components);
19
+ @import './tooltip/tooltip.css' layer(components);
20
+ @import './progress/progress.css' layer(components);
21
+ @import './list/list.css' layer(components);
22
+ @import './list-view/list-view.css' layer(components);
23
+ @import './bulk-action-bar/bulk-action-bar.css' layer(components);
24
+ @import './empty-state/empty-state.css' layer(components);
25
+ @import './pagination/pagination.css' layer(components);
26
+ @import './search/search.css' layer(components);
27
+ @import './breadcrumbs/breadcrumbs.css' layer(components);
28
+ @import './accordion/accordion.css' layer(components);
29
+ @import './slider/slider.css' layer(components);
30
+ @import './toggle-button/toggle-button.css' layer(components);
31
+ @import './listbox/listbox.css' layer(components);
32
+ @import './select/select.css' layer(components);
33
+ @import './combobox/combobox.css' layer(components);
34
+ @import './bottom-sheet/bottom-sheet.css' layer(components);
35
+ @import './menu/menu.css' layer(components);
36
+ @import './dialog/dialog.css' layer(components);
37
+ @import './drawer/drawer.css' layer(components);
38
+ @import './link/link.css' layer(components);
39
+ @import './alert/alert.css' layer(components);
40
+ @import './toast/toast.css' layer(components);
41
+ @import './tabs/tabs.css' layer(components);
42
+ @import './popover/popover.css' layer(components);
43
+ @import './navigation/navigation.css' layer(components);
44
+ @import './card/card.css' layer(components);
45
+ @import './table/table.css' layer(components);
46
+ @import './upload/upload.css' layer(components);
47
+ @import './date-time/date-time.css' layer(components);
48
+ @import './media/media.css' layer(components);
@@ -63,7 +63,7 @@
63
63
  border-radius: var(--medo-radius-full);
64
64
  background-color: var(--medo-color-text-on-action);
65
65
  color: var(--_track);
66
- /* The thumb moves with a snappy spring (iOS). */
66
+ /* The thumb moves with a snappy spring. */
67
67
  transition:
68
68
  transform var(--medo-motion-spring-snappy-duration) var(--medo-motion-spring-snappy),
69
69
  color var(--medo-motion-duration-fast) var(--medo-motion-easing-standard);
@@ -23,6 +23,12 @@
23
23
  }
24
24
 
25
25
  /* Without the frame, e.g. inside a card or a documentation page. */
26
+ /* Scrolls sideways: the container takes the focus (see StaticTable), so it needs a visible ring. */
27
+ .medo-table-container:focus-visible {
28
+ outline: none;
29
+ box-shadow: var(--medo-shadow-focus-ring);
30
+ }
31
+
26
32
  .medo-table-container--plain {
27
33
  border: 0;
28
34
  border-radius: 0;
@@ -167,7 +173,7 @@
167
173
  padding-inline: var(--medo-space-4) 0;
168
174
  }
169
175
 
170
- /* Row feedback fades; pressed shows at once (iOS highlight). */
176
+ /* Row feedback fades; pressed shows at once, so a tap feels immediate. */
171
177
  .medo-table__row > .medo-table__cell {
172
178
  transition: background-color var(--medo-motion-duration-fast) var(--medo-motion-easing-standard);
173
179
  }
@@ -235,6 +241,10 @@
235
241
  .medo-table__row[data-focus-visible] {
236
242
  outline-color: Highlight;
237
243
  }
244
+ .medo-table-container:focus-visible {
245
+ outline: 2px solid Highlight;
246
+ outline-offset: 2px;
247
+ }
238
248
  }
239
249
 
240
250
  /* ---------- Frame: toolbar – table – footer in one bordered surface ---------- */
package/src/tabs/tabs.css CHANGED
@@ -139,7 +139,7 @@
139
139
  border-radius: inherit;
140
140
  background-color: var(--medo-color-surface-thumb);
141
141
  box-shadow: var(--medo-shadow-elevation-1);
142
- /* SelectionIndicator animates translate and size from the previous tab – a snappy spring like the iOS segmented control. */
142
+ /* SelectionIndicator animates translate and size from the previous tab – a snappy spring, so the eye follows the selection. */
143
143
  transition:
144
144
  translate var(--medo-motion-spring-snappy-duration) var(--medo-motion-spring-snappy),
145
145
  width var(--medo-motion-spring-snappy-duration) var(--medo-motion-spring-snappy);
package/src/tag/tag.css CHANGED
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Compact pill for a value. Two roles, never mixed:
5
5
  * removable – a chosen value (multi-select): the x removes it
6
- * selectable – a filter: the whole tag toggles, a check marks „selected“
6
+ * selectable – a filter: the whole tag toggles, a check marks “selected”
7
7
  *
8
8
  * Structure:
9
9
  * <div class="medo-tag medo-tag--md [medo-tag--selectable]">
@@ -8,7 +8,7 @@
8
8
  * </div>
9
9
  * <textarea class="medo-textarea medo-textarea--md"></textarea>
10
10
  *
11
- * Sizes sm / md / lg = 32 / 40 / 48 px. Mobile and touch: always lg (16 px text prevents iOS zoom).
11
+ * Sizes sm / md / lg = 32 / 40 / 48 px. Mobile and touch: always lg (16 px text prevents the automatic zoom of mobile browsers).
12
12
  * Focus: the border turns focus/ring plus 1 px inside (flush, no outer band).
13
13
  */
14
14
 
@@ -129,7 +129,7 @@
129
129
  }
130
130
  }
131
131
 
132
- /* ---------- Motion (View Transitions, iOS): in slides up with a smooth spring, out fades and shrinks a little;
132
+ /* ---------- Motion (View Transitions): in slides up with a smooth spring, out fades and shrinks a little;
133
133
  * the other toasts glide to their new place with the same spring. ---------- */
134
134
 
135
135
  ::view-transition-group(.medo-toast) {
@@ -68,7 +68,7 @@
68
68
  border-radius: var(--medo-radius-sm);
69
69
  }
70
70
 
71
- /* The selected fill is an indicator that slides between the items with a snappy spring (iOS segmented control). */
71
+ /* The selected fill is an indicator that slides between the items with a snappy spring. */
72
72
  .medo-toggle-group--segmented .medo-toggle:is([data-selected], [aria-pressed='true']) {
73
73
  --_bg: transparent;
74
74
  }
@@ -30,7 +30,7 @@
30
30
  white-space: nowrap;
31
31
  }
32
32
 
33
- /* Motion (iOS): fades in and settles from 96 % at the trigger; out: a quick fade without movement. */
33
+ /* Motion: fades in and settles from 96 % at the trigger; out: a quick fade without movement. */
34
34
  .medo-tooltip {
35
35
  transform-origin: var(--trigger-anchor-point, top);
36
36
  transition:
@@ -344,7 +344,7 @@
344
344
  color: var(--medo-color-feedback-danger-text);
345
345
  }
346
346
 
347
- /* New files slide in softly (iOS list insert). */
347
+ /* New files slide in softly, so the eye finds them. */
348
348
  .medo-upload__item {
349
349
  transition:
350
350
  opacity var(--medo-motion-duration-normal) var(--medo-motion-easing-enter),