@magmonium/one 0.2.81 → 0.2.82

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.
@@ -1,14 +1,7 @@
1
1
  @use 'flex' as flex
2
- @use 'sass:map'
2
+ @use '../variables/colors' as *
3
3
  @use '../functions/functions' as f
4
4
 
5
- // ============================================
6
- // Configuration & Variables
7
- // ============================================
8
-
9
- // Default CSS custom properties (can be overridden)
10
- $radio-defaults: (size: 1em, color: #4169e1, color-contrast: #ffffff, color-opposite: #e1b941)
11
-
12
5
  // ============================================
13
6
  // Base Radio Container
14
7
  // ============================================
@@ -16,37 +9,30 @@ $radio-defaults: (size: 1em, color: #4169e1, color-contrast: #ffffff, color-oppo
16
9
  @mixin radio-container-base
17
10
  display: inline-flex
18
11
  align-items: center
19
- $size: 1em
12
+ $size: var(--m-radio-size, calc(var(--input-size, 1em) * 1.25))
20
13
  gap: #{f.derive-control-gap($size)}
21
14
  cursor: pointer
22
15
  user-select: none
23
16
  position: relative
24
17
 
25
18
  input[type="radio"]
26
- // Reset default styles
27
19
  appearance: none
28
20
  -webkit-appearance: none
29
21
  -moz-appearance: none
30
22
  margin: 0
31
23
  padding: 0
32
-
33
- // Positioning & dimensions
34
24
  position: relative
35
25
  width: #{$size}
36
26
  height: #{$size}
37
27
  flex-shrink: 0
38
28
  box-sizing: border-box
39
-
40
- // Styling
41
- background-color: transparent
29
+ background: var(--m-radio-background, var(--m-text-input-background, color-mix(in srgb, #{$focus} 2%, #{$background})))
42
30
  border-radius: 50%
43
- border: #{f.derive-control-border($size)} solid color-mix(in srgb, var(--m-input-wrapper-color, #{map.get($radio-defaults, color)}) 40%, transparent 60%)
31
+ border: var(--m-input-border-width, 1px) solid var(--m-text-input-border, color-mix(in srgb, #{$text} 18%, #{$background}))
44
32
  cursor: pointer
45
33
  outline: none
46
-
47
- // Transitions
48
- transition: background-color 0.25s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.25s cubic-bezier(0.4, 0, 0.2, 1), border-color 0.2s ease
49
- will-change: background-color, box-shadow, border-color
34
+ box-shadow: none
35
+ transition: var(--m-radio-transition, var(--m-text-input-transition, border-color 0.2s ease, box-shadow 0.2s ease, background-color 0.2s ease))
50
36
 
51
37
  // Inner dot (checked indicator)
52
38
  &::after
@@ -55,12 +41,12 @@ $radio-defaults: (size: 1em, color: #4169e1, color-contrast: #ffffff, color-oppo
55
41
  top: 50%
56
42
  left: 50%
57
43
  transform: translate(-50%, -50%) scale(0)
58
- width: calc(#{$size} * 0.5)
59
- height: calc(#{$size} * 0.5)
60
- background-color: var(--m-input-wrapper-color, #{map.get($radio-defaults, color)})
44
+ width: calc(#{$size} * 0.45)
45
+ height: calc(#{$size} * 0.45)
46
+ background-color: #ffffff
61
47
  border-radius: 50%
62
- transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1), background-color 0.2s ease
63
- will-change: transform
48
+ transition: transform 0.2s ease
49
+ box-shadow: none
64
50
 
65
51
  --m-label-margin: 0
66
52
 
@@ -69,15 +55,19 @@ $radio-defaults: (size: 1em, color: #4169e1, color-contrast: #ffffff, color-oppo
69
55
  // ============================================
70
56
 
71
57
  @mixin radio-container-states
72
- $size: 1em
58
+ $size: var(--input-size, 1em)
73
59
  input[type="radio"]
74
- // Hover state (not disabled)
75
- &:hover:not(:disabled)
76
- border-color: color-mix(in srgb, var(--m-input-wrapper-color, #{map.get($radio-defaults, color)}) 60%, transparent 40%)
60
+ // Hover state (not disabled, not checked)
61
+ &:hover:not(:disabled):not(:checked)
62
+ border-color: var(--m-text-input-hover-border, color-mix(in srgb, #{$focus} 55%, #{$background}))
63
+ background: var(--m-text-input-hover-background, color-mix(in srgb, #{$focus} 4%, #{$background}))
64
+ box-shadow: none
77
65
 
78
66
  // Focus state (accessibility)
79
- &:focus
80
- box-shadow: 0 0 0 calc(#{$size} * 0.2) color-mix(in srgb, var(--m-input-wrapper-color, #{map.get($radio-defaults, color)}) 20%, transparent 80%)
67
+ &:focus,
68
+ &:focus-visible
69
+ border-color: var(--m-text-input-focus-border, #{$focus})
70
+ box-shadow: var(--m-text-input-focus-shadow, var(--m-text-input-shadow, 0 0 0 3px color-mix(in srgb, #{$focus} 14%, transparent)))
81
71
  outline: none
82
72
 
83
73
  // Active/pressed state (not disabled)
@@ -86,34 +76,39 @@ $radio-defaults: (size: 1em, color: #4169e1, color-contrast: #ffffff, color-oppo
86
76
 
87
77
  // Checked state
88
78
  &:checked
89
- border-color: var(--m-input-wrapper-color, #{map.get($radio-defaults, color)})
79
+ border-color: var(--m-radio-checked-border, #{$focus})
80
+ background: var(--m-radio-checked-background, #{$focus})
81
+ background-color: var(--m-radio-checked-background, #{$focus})
82
+ box-shadow: none
90
83
 
91
84
  &::after
92
85
  transform: translate(-50%, -50%) scale(1)
86
+ background-color: #ffffff
87
+ opacity: 1
93
88
 
94
89
  // Hover when checked
95
90
  &:hover:not(:disabled)
96
- border-color: color-mix(in srgb, var(--m-input-wrapper-color, #{map.get($radio-defaults, color)}) 90%, black 10%)
97
-
98
- &::after
99
- background-color: color-mix(in srgb, var(--m-input-wrapper-color, #{map.get($radio-defaults, color)}) 90%, black 10%)
100
-
101
- // Active when checked
102
- &:active:not(:disabled)::after
103
- transform: translate(-50%, -50%) scale(0.85)
91
+ background: color-mix(in srgb, var(--m-radio-checked-background, #{$focus}) 88%, black 12%)
92
+ background-color: color-mix(in srgb, var(--m-radio-checked-background, #{$focus}) 88%, black 12%)
93
+ border-color: color-mix(in srgb, var(--m-radio-checked-border, #{$focus}) 88%, black 12%)
94
+ box-shadow: 0 0 0 3px color-mix(in srgb, #{$focus} 18%, transparent)
104
95
 
105
96
  // Focus when checked
106
- &:focus
107
- box-shadow: 0 0 0 calc(#{$size} * 0.2) color-mix(in srgb, var(--m-input-wrapper-color, #{map.get($radio-defaults, color)}) 25%, transparent 75%)
97
+ &:focus,
98
+ &:focus-visible
99
+ box-shadow: var(--m-text-input-focus-shadow, var(--m-text-input-shadow, 0 0 0 3px color-mix(in srgb, #{$focus} 25%, transparent)))
108
100
 
109
101
  // Disabled state
110
102
  &:disabled
111
103
  opacity: 0.5
112
104
  cursor: not-allowed
113
- border-color: color-mix(in srgb, var(--m-input-wrapper-color, #{map.get($radio-defaults, color)}) 20%, transparent 80%)
105
+ border-color: color-mix(in srgb, #{$text} 12%, #{$background})
114
106
 
115
107
  &:checked::after
116
- opacity: 0.5
108
+ opacity: 0.7
109
+
110
+ &.error
111
+ border-color: $error
117
112
 
118
113
  // ============================================
119
114
  // Complete Radio Container