@newlogic-digital/ui 3.0.3 → 3.2.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 (120) hide show
  1. package/README.md +20 -22
  2. package/package.json +25 -14
  3. package/src/{main.json → data/main.json} +13 -11
  4. package/src/emails/email.css +3 -3
  5. package/src/emails/email.twig +1 -1
  6. package/src/icons.svg +32 -0
  7. package/src/scripts/Components/+.js +1 -2
  8. package/src/scripts/Components/CookieConsent.js +68 -64
  9. package/src/scripts/Layout/+.js +2 -1
  10. package/src/scripts/Layout/Header.js +18 -0
  11. package/src/scripts/Layout/Main.js +49 -45
  12. package/src/scripts/Libraries/+.js +13 -10
  13. package/src/scripts/Libraries/Anchor.js +18 -43
  14. package/src/scripts/Libraries/CookieConsent.js +42 -57
  15. package/src/scripts/Libraries/Dialog.js +56 -55
  16. package/src/scripts/Libraries/Drawer.js +23 -23
  17. package/src/scripts/Libraries/Form.js +37 -0
  18. package/src/scripts/Libraries/NativeSlider.js +86 -86
  19. package/src/scripts/Libraries/ReCaptcha.js +20 -18
  20. package/src/scripts/Libraries/Ripple.js +16 -32
  21. package/src/scripts/Libraries/Script.js +19 -0
  22. package/src/scripts/Libraries/Stimulus.js +30 -34
  23. package/src/scripts/Libraries/Swup.js +45 -55
  24. package/src/scripts/Libraries/Tabs.js +12 -18
  25. package/src/scripts/Libraries/Tippy.js +118 -0
  26. package/src/scripts/Ui/+.js +5 -3
  27. package/src/scripts/Ui/Checkbox.js +19 -0
  28. package/src/scripts/Ui/Input.js +188 -161
  29. package/src/scripts/Ui/Radio.js +23 -0
  30. package/src/scripts/Ui/Select.js +64 -37
  31. package/src/scripts/Ui/Text.js +25 -0
  32. package/src/scripts/Utils/+.js +3 -0
  33. package/src/scripts/Utils/Functions/+.js +6 -6
  34. package/src/scripts/Utils/Functions/dataValue.js +28 -25
  35. package/src/scripts/Utils/Functions/importScript.js +9 -11
  36. package/src/scripts/Utils/Functions/importStyle.js +18 -5
  37. package/src/scripts/Utils/Functions/inView.js +19 -21
  38. package/src/scripts/Utils/Functions/loadStimulus.js +22 -20
  39. package/src/scripts/Utils/Functions/replaceTag.js +12 -0
  40. package/src/scripts/Utils/cdn.js +6 -4
  41. package/src/scripts/Utils/global.js +10 -33
  42. package/src/scripts/main.js +6 -6
  43. package/src/styles/Components/CookieConsent.css +40 -179
  44. package/src/styles/Components/Dialog/Default.css +12 -15
  45. package/src/styles/Components/Form/CookieConsent.css +7 -12
  46. package/src/styles/Layout/+.css +2 -0
  47. package/src/styles/Layout/Header.css +54 -0
  48. package/src/styles/Layout/Main.css +28 -63
  49. package/src/styles/Layout/Nav.css +43 -0
  50. package/src/styles/Libraries/+.css +1 -1
  51. package/src/styles/Libraries/Datepicker.css +85 -39
  52. package/src/styles/Libraries/Dialog.css +6 -5
  53. package/src/styles/Libraries/Drawer.css +15 -14
  54. package/src/styles/Libraries/Hint.css +29 -23
  55. package/src/styles/Libraries/Lazysizes.css +2 -1
  56. package/src/styles/Libraries/NativeSlider.css +19 -18
  57. package/src/styles/Libraries/Ripple.css +8 -5
  58. package/src/styles/Libraries/Tabs.css +4 -4
  59. package/src/styles/Libraries/Tippy.css +87 -0
  60. package/src/styles/Ui/+.css +5 -1
  61. package/src/styles/Ui/Badge.css +33 -19
  62. package/src/styles/Ui/Btn.css +80 -53
  63. package/src/styles/Ui/Checkbox.css +80 -41
  64. package/src/styles/Ui/Dropdown.css +5 -0
  65. package/src/styles/Ui/Heading.css +12 -12
  66. package/src/styles/Ui/Icon.css +27 -8
  67. package/src/styles/Ui/Image.css +23 -0
  68. package/src/styles/Ui/Input.css +295 -220
  69. package/src/styles/Ui/Label.css +14 -0
  70. package/src/styles/Ui/Link.css +3 -3
  71. package/src/styles/Ui/Notice.css +14 -16
  72. package/src/styles/Ui/Progress.css +10 -21
  73. package/src/styles/Ui/Radio.css +3 -8
  74. package/src/styles/Ui/Select.css +63 -112
  75. package/src/styles/Ui/Switch.css +70 -0
  76. package/src/styles/Ui/{Wsw.css → Text.css} +61 -80
  77. package/src/styles/Ui/Title.css +8 -4
  78. package/src/styles/Utils/+.css +9 -0
  79. package/src/styles/Utils/default.css +75 -67
  80. package/src/styles/Utils/icons.css +9 -0
  81. package/src/styles/Utils/keyframes.css +182 -0
  82. package/src/styles/Utils/normalize.css +223 -0
  83. package/src/styles/Utils/print.css +1 -1
  84. package/src/styles/Utils/tailwind/+.css +2 -0
  85. package/src/styles/Utils/tailwind/base.css +15 -0
  86. package/src/styles/Utils/tailwind/gutters.css +264 -263
  87. package/src/styles/Utils/theme/+.css +1 -0
  88. package/src/styles/Utils/theme/main.css +24 -21
  89. package/src/styles/Utils/vars.css +58 -35
  90. package/src/styles/Utils/vendor.css +1 -2
  91. package/src/styles/main.css +8 -3
  92. package/src/templates/Components/CookieConsent.twig +30 -0
  93. package/src/templates/Components/Dialogs/Basic.twig +7 -3
  94. package/src/templates/Layout/Header.twig +42 -0
  95. package/src/templates/Layout/Main.twig +52 -67
  96. package/src/templates/Sections/Gdpr.twig +64 -0
  97. package/src/templates/Sections/Ui.twig +2093 -0
  98. package/src/views/dialog-basic.json.twig +3 -0
  99. package/src/views/gdpr.json +11 -0
  100. package/src/views/index.json +12 -0
  101. package/src/views/json-tippy.json.twig +16 -0
  102. package/src/views/ui.json +11 -0
  103. package/vite.config.js +6 -0
  104. package/CHANGELOG +0 -231
  105. package/gulpfile.js +0 -192
  106. package/src/icons/iconfont.css +0 -171
  107. package/src/icons/selection.json +0 -1
  108. package/src/icons/variables.css +0 -31
  109. package/src/scripts/Components/Form.js +0 -26
  110. package/src/scripts/Ui/Wsw.js +0 -25
  111. package/src/scripts/Utils/Functions/bodyLoaded.js +0 -12
  112. package/src/styles/Libraries/Animate.css +0 -184
  113. package/src/styles/Utils/reference.css +0 -2
  114. package/src/styles/Utils/tailwind/content.css +0 -24
  115. package/src/styles/Utils/theme/vars.css +0 -19
  116. package/src/styles/preload.css +0 -29
  117. package/src/styles/tailwind.css +0 -5
  118. package/src/templates/Sections/.gitkeep +0 -0
  119. package/src/templates/dialog-basic.twig +0 -3
  120. package/src/templates/index.json +0 -6
@@ -0,0 +1,87 @@
1
+ .tippy-content {
2
+ padding: 0;
3
+ }
4
+
5
+ .tippy-box {
6
+ --lib-tippy-bg: var(--color-dark);
7
+
8
+ &[data-theme~="light-border"] {
9
+ background-color: rgb(var(--color-background));
10
+ background-clip: padding-box;
11
+ border: 1px solid rgb(0 8 16 / 0.05);
12
+ color: rgb(var(--color-current));
13
+ box-shadow: 0 3px 14px -0.5px rgb(0 8 16 / 0.08);
14
+ border-radius: var(--radius);
15
+ left: 0.1875rem;
16
+
17
+ @nest .dark & {
18
+ --color-background: var(--color-background-200);
19
+ }
20
+
21
+ & .tippy-svg-arrow {
22
+ fill: rgb(var(--color-background));
23
+
24
+ &::after {
25
+ opacity: 0.3;
26
+ }
27
+ }
28
+ }
29
+
30
+ &[data-placement="bottom-end"] {
31
+ &[data-animation="scale"] {
32
+ transform-origin: top right;
33
+ }
34
+
35
+ & .tippy-svg-arrow {
36
+ left: auto !important;
37
+ right: 0.5rem;
38
+ transform: none !important;
39
+ }
40
+ }
41
+
42
+ &[data-placement="bottom-start"] {
43
+ &[data-animation="scale"] {
44
+ transform-origin: top left;
45
+ }
46
+ }
47
+ }
48
+
49
+ [data-controller*="lib-tippy"]:not([data-lib-tippy^="dropdown"]) {
50
+ cursor: default;
51
+ }
52
+
53
+ [data-tippy-root] {
54
+ &.is-full {
55
+ @media (--media-m) {
56
+ inset: 0 !important;
57
+ width: 100% !important;
58
+ height: 100% !important;
59
+ position: fixed !important;
60
+ transform: none !important;
61
+ pointer-events: none;
62
+ max-width: 100%;
63
+
64
+ & .tippy-content {
65
+ padding-bottom: env(safe-area-inset-bottom);
66
+ pointer-events: auto;
67
+ }
68
+
69
+ & .tippy-box {
70
+ max-width: 100% !important;
71
+ position: absolute;
72
+ border: 0 !important;
73
+ bottom: 0;
74
+ left: 0 !important;
75
+ right: 0;
76
+ border-radius: 2rem 2rem 0 0 !important;
77
+ transition-timing-function: ease !important;
78
+ transition-duration: 300ms !important;
79
+
80
+ &[data-state="hidden"] {
81
+ transform: translateY(100%);
82
+ opacity: 0;
83
+ }
84
+ }
85
+ }
86
+ }
87
+ }
@@ -1,13 +1,17 @@
1
1
  @import "Badge.css";
2
2
  @import "Btn.css";
3
3
  @import "Checkbox.css";
4
+ @import "Dropdown.css";
4
5
  @import "Heading.css";
5
6
  @import "Icon.css";
7
+ @import "Image.css";
6
8
  @import "Input.css";
9
+ @import "Label.css";
7
10
  @import "Link.css";
8
11
  @import "Notice.css";
9
12
  @import "Progress.css";
10
13
  @import "Radio.css";
11
14
  @import "Select.css";
15
+ @import "Switch.css";
16
+ @import "Text.css";
12
17
  @import "Title.css";
13
- @import "Wsw.css";
@@ -1,44 +1,58 @@
1
1
  .ui-badge {
2
+ --ui-badge-width: auto;
3
+ --ui-badge-height: 1.5rem;
2
4
  --ui-badge-py: 0.375rem;
3
5
  --ui-badge-px: 0.5rem;
4
6
  --ui-badge-size: 0.75rem;
7
+ --ui-badge-radius: var(--radius);
5
8
  --ui-badge-weight: var(--font-normal);
6
- --ui-badge-bg: var(--color-primary);
7
- --ui-badge-color: var(--color-light);
9
+ --ui-badge-bg-opacity: var(--tw-bg-opacity, 1);
10
+ --ui-badge-text-opacity: var(--tw-text-opacity, 1);
11
+ --ui-badge-bg: rgb(var(--color-accent) / var(--ui-badge-bg-opacity));
12
+ --ui-badge-color: rgb(var(--color-light) / var(--ui-badge-text-opacity));
13
+ --ui-badge-hover-opacity: 0.8;
14
+
8
15
  display: inline-flex;
9
16
  align-self: flex-start;
10
17
  align-items: center;
11
18
  text-align: center;
12
19
  justify-content: center;
20
+ flex-shrink: 0;
13
21
  font-size: var(--ui-badge-size);
14
22
  font-weight: var(--ui-badge-weight);
15
23
  padding: var(--ui-badge-py) var(--ui-badge-px);
16
- border-radius: var(--radius);
17
- background-color: rgb(var(--ui-badge-bg));
18
- color: rgb(var(--ui-badge-color));
24
+ border-radius: var(--ui-badge-radius);
25
+ background-color: var(--ui-badge-bg);
26
+ color: var(--ui-badge-color);
27
+ width: var(--ui-badge-width);
28
+ height: var(--ui-badge-height);
19
29
  line-height: var(--ui-badge-size);
20
30
  transition: var(--transition-opacity);
21
31
 
22
- @nest .no-touch [href]:hover&, .no-touch button:hover& {
23
- opacity: 0.8;
32
+ @nest .no-touch &:is([href]:hover, button:hover) {
33
+ opacity: var(--ui-badge-hover-opacity);
34
+ }
35
+
36
+ & svg {
37
+ width: 1em;
38
+ height: 1em;
24
39
  }
25
40
 
26
- &[data-type^="square"], &[data-type^="circle"] {
41
+ &:--type-square, &:--type-circle {
27
42
  --ui-badge-px: var(--ui-badge-py);
28
- width: calc(var(--ui-badge-size) + (2 * var(--ui-badge-py)));
43
+ --ui-badge-width: var(--ui-badge-height);
29
44
  }
30
45
 
31
- &[data-type^="circle"] {
46
+ &:--type-circle {
32
47
  border-radius: 50%;
33
48
  }
34
49
 
35
- &[data-size="sm"] {
36
- --ui-badge-py: 0.25rem;
37
- --ui-badge-px: 0.5rem;
50
+ &:--size-sm {
51
+ --ui-badge-height: 1.25rem;
38
52
  }
39
53
 
40
- &[data-size="md"] {
41
- --ui-badge-py: 0.5rem;
54
+ &:--size-md {
55
+ --ui-badge-height: 1.75rem;
42
56
  --ui-badge-py: 0.5rem;
43
57
  }
44
58
  }
@@ -48,21 +62,21 @@
48
62
 
49
63
  & .ui-badge {
50
64
  &:not(:first-of-type) {
51
- &, &:after {
65
+ &, &::after {
52
66
  border-top-left-radius: 0;
53
67
  border-bottom-left-radius: 0;
54
68
  }
55
69
 
56
- &:after {
70
+ &::after {
57
71
  border-left: 0;
58
72
  }
59
73
  }
60
74
 
61
75
  &:not(:last-of-type) {
62
- &, &:after {
76
+ &, &::after {
63
77
  border-top-right-radius: 0;
64
78
  border-bottom-right-radius: 0;
65
79
  }
66
80
  }
67
81
  }
68
- }
82
+ }
@@ -1,15 +1,21 @@
1
1
  .ui-btn {
2
- --ui-btn-width: 2.375rem;
2
+ --ui-btn-width: auto;
3
+ --ui-btn-height: 2.375rem;
3
4
  --ui-btn-py: 0.375rem;
4
5
  --ui-btn-px: 1rem;
5
6
  --ui-btn-size: 0.875rem;
7
+ --ui-btn-radius: var(--radius);
6
8
  --ui-btn-weight: var(--font-medium);
7
- --ui-btn-bg: var(--color-primary);
8
- --ui-btn-color: var(--color-light);
9
+ --ui-btn-bg-opacity: var(--tw-bg-opacity, 1);
10
+ --ui-btn-text-opacity: var(--tw-text-opacity, 1);
11
+ --ui-btn-bg: rgb(var(--color-accent) / var(--ui-btn-bg-opacity));
12
+ --ui-btn-color: rgb(var(--color-light) / var(--ui-btn-text-opacity));
9
13
  --ui-btn-hover-opacity: 0.2;
14
+ --ui-btn-outline-width: 2px;
10
15
  --ui-btn-outline-opacity: 0.5;
11
16
  --ui-btn-icon-size: 1.125rem;
12
- --ui-btn-icon-offset: calc((var(--ui-btn-py) / 1) * -1);
17
+ --ui-btn-icon-offset: calc((var(--ui-btn-py) / 1) * -1);
18
+
13
19
  display: inline-flex;
14
20
  align-items: center;
15
21
  text-align: center;
@@ -19,39 +25,52 @@
19
25
  position: relative;
20
26
  z-index: 1;
21
27
  white-space: nowrap;
28
+ flex-shrink: 0;
22
29
  font-size: var(--ui-btn-size);
23
30
  font-weight: var(--ui-btn-weight);
24
- height: var(--ui-btn-width);
31
+ width: var(--ui-btn-width);
32
+ height: var(--ui-btn-height);
25
33
  padding: var(--ui-btn-py) var(--ui-btn-px);
26
- border-radius: var(--radius);
34
+ border-radius: var(--ui-btn-radius);
27
35
  transition: var(--transition-opacity), var(--transition-background);
28
- background-color: rgb(var(--ui-btn-bg));
29
- color: rgb(var(--ui-btn-color));
36
+ background-color: var(--ui-btn-bg);
37
+ color: var(--ui-btn-color);
38
+
39
+ @nest .dark &.bg-default {
40
+ --ui-btn-color: rgb(var(--color-dark));
41
+ }
30
42
 
31
- @nest .dark .bg-default& {
32
- --ui-btn-color: var(--color-dark);
43
+ &:--theme-light {
44
+ --ui-btn-color: rgb(var(--color-light) / var(--tw-text-opacity, 1));
33
45
  }
34
46
 
35
- &:before {
47
+ &:--theme-dark {
48
+ --ui-btn-color: rgb(var(--color-dark) / var(--tw-text-opacity, 1));
49
+ }
50
+
51
+ &::before {
36
52
  position: absolute;
37
53
  inset: 0;
38
54
  width: 100%;
39
55
  height: 100%;
40
56
  content: "";
41
- background-color: currentColor;
57
+ background-color: var(--ui-btn-color);
42
58
  z-index: -1;
43
59
  opacity: 0;
44
60
  transition: var(--transition-opacity);
45
61
 
46
- @nest .no-touch :hover&, [data-state="active"]& {
62
+ @nest .no-touch :is(:hover, :focus)&, :is(:--state-active)& {
47
63
  opacity: var(--ui-btn-hover-opacity);
48
64
  }
49
65
  }
50
66
 
51
- & > span {
52
- &[class^="icon"] {
53
- font-size: var(--ui-btn-icon-size);
54
- }
67
+ & > svg {
68
+ width: 1em;
69
+ height: 1em;
70
+ }
71
+
72
+ & > [class^="icon"] {
73
+ font-size: var(--ui-btn-icon-size);
55
74
 
56
75
  &.icon-l {
57
76
  &:not([class*="mr-"]) {
@@ -73,62 +92,64 @@
73
92
  &[disabled] {
74
93
  pointer-events: none;
75
94
 
76
- &:before {
95
+ &::before {
77
96
  opacity: 0.5;
78
97
  }
79
98
  }
80
99
 
81
- &[data-type*="outline"] {
82
- --ui-btn-bg: transparent;
83
- --ui-btn-color: var(--color-primary);
84
- --ui-btn-hover-opacity: 0.05;
100
+ &:--type-outline {
101
+ --ui-btn-color: currentColor;
102
+ --ui-btn-hover-opacity: 0.1;
103
+
104
+ background-color: transparent;
105
+
106
+ &::before {
107
+ background-color: var(--ui-btn-bg);
108
+ }
85
109
 
86
- &:after {
110
+ &::after {
87
111
  position: absolute;
88
112
  inset: 0;
89
113
  width: 100%;
90
114
  height: 100%;
91
115
  content: "";
92
116
  background-color: transparent;
93
- border: 1px solid currentColor;
117
+ border: var(--ui-btn-outline-width) solid var(--ui-btn-bg);
94
118
  box-sizing: border-box;
95
119
  opacity: var(--ui-btn-outline-opacity);
96
- border-radius: var(--radius);
120
+ border-radius: var(--ui-btn-radius);
97
121
  }
98
122
  }
99
123
 
100
- &[data-type^="square"], &[data-type^="circle"] {
124
+ &:--type-square, &:--type-circle {
101
125
  --ui-btn-py: var(--ui-btn-py);
102
- width: var(--ui-btn-width);
126
+ --ui-btn-width: var(--ui-btn-height);
103
127
  }
104
128
 
105
- &[data-type^="circle"] {
129
+ &:--type-circle {
106
130
  border-radius: 50%;
107
131
  }
108
132
 
109
- &[data-size="lg"] {
133
+ &:--size-lg {
110
134
  --ui-btn-icon-size: 1.5rem;
111
- --ui-btn-width: 3rem;
135
+ --ui-btn-height: 3rem;
112
136
  --ui-btn-px: 1.25rem;
113
137
  }
114
138
 
115
- &[data-state="loading"] {
139
+ &:--state-loading {
116
140
  pointer-events: none;
141
+ color: var(--ui-btn-bg);
117
142
 
118
- & > span {
119
- opacity: 0;
120
- }
121
-
122
- &:before {
143
+ &::before {
123
144
  z-index: 1;
124
145
  width: 1rem;
125
146
  height: 1rem;
126
147
  content: "";
127
148
  background-color: transparent;
128
- border: 2px solid currentColor;
149
+ border: 2px solid var(--ui-btn-color);
129
150
  border-right-color: transparent;
130
151
  border-radius: 50%;
131
- animation: load 0.45s infinite linear;
152
+ animation: spin 0.45s infinite linear;
132
153
  position: absolute;
133
154
  margin-left: -0.625rem;
134
155
  margin-top: -0.625rem;
@@ -138,17 +159,17 @@
138
159
  }
139
160
  }
140
161
 
141
- @media (--media-400) {
142
- &[data-type*="m:square"], &[data-type*="m:circle"] {
162
+ @media (--media-m) {
163
+ &:--type-square-m, &:--type-circle-m {
143
164
  --ui-btn-py: var(--ui-btn-py);
144
- width: var(--ui-btn-width);
165
+ --ui-btn-width: var(--ui-btn-height);
145
166
 
146
- & > span {
167
+ & > * {
147
168
  margin: 0 !important;
148
169
  }
149
170
  }
150
171
 
151
- &[data-type*="m:circle"] {
172
+ &:--type-circle-m {
152
173
  border-radius: 50%;
153
174
  }
154
175
  }
@@ -158,24 +179,30 @@
158
179
  display: flex;
159
180
 
160
181
  & .ui-btn {
161
- &:not(:first-of-type) {
162
- box-shadow: -1px 0 rgba(var(--ui-btn-color),var(--ui-btn-hover-opacity));
182
+ &:not(:last-of-type) {
183
+ &, &::after {
184
+ border-top-right-radius: 0;
185
+ border-bottom-right-radius: 0;
186
+ }
187
+ }
163
188
 
164
- &, &:after {
189
+ &:not(:first-of-type) {
190
+ &, &::after {
165
191
  border-top-left-radius: 0;
166
192
  border-bottom-left-radius: 0;
167
193
  }
168
194
 
169
- &:after {
195
+ &::after {
170
196
  border-left: 0;
171
197
  }
172
- }
173
198
 
174
- &:not(:last-of-type) {
175
- &, &:after {
176
- border-top-right-radius: 0;
177
- border-bottom-right-radius: 0;
199
+ &, &:--theme-light {
200
+ box-shadow: -1px 0 rgb(var(--color-light) / var(--ui-btn-hover-opacity));
201
+ }
202
+
203
+ &:--theme-dark {
204
+ box-shadow: -1px 0 rgb(var(--color-dark) / var(--ui-btn-hover-opacity));
178
205
  }
179
206
  }
180
207
  }
181
- }
208
+ }
@@ -1,50 +1,74 @@
1
1
  .ui-checkbox, .ui-radio {
2
2
  --ui-checkbox-width: 1.25rem;
3
3
  --ui-checkbox-size: 0.875rem;
4
- --ui-checkbox-bg: var(--color-background);
5
4
  --ui-checkbox-bg-opacity: 0.1;
6
- --ui-checkbox-border-color: var(--color-default);
5
+ --ui-checkbox-bg-raw: var(--color-background);
7
6
  --ui-checkbox-border-opacity: 0.3;
8
- --ui-checkbox-checked-bg: var(--color-primary);
9
- --ui-checkbox-checked-fg: var(--color-light);
7
+ --ui-checkbox-border-color-raw: var(--color-current);
8
+ --ui-checkbox-checked-bg: rgb(var(--ui-checkbox-checked-bg-raw));
9
+ --ui-checkbox-checked-bg-raw: var(--color-accent);
10
+ --ui-checkbox-checked-fg: rgb(var(--color-light));
11
+ --ui-checkbox-color: currentColor;
12
+ --ui-checkbox-radius: 0.375rem;
13
+ --ui-checkbox-icon: var(--icon-check);
14
+ --ui-checkbox-icon-size: 1.125rem;
15
+
16
+ transition: var(--transition-color);
10
17
  display: inline-flex;
11
18
  align-self: flex-start;
12
19
  position: relative;
13
20
  user-select: none;
14
21
  font-size: var(--ui-checkbox-size);
15
22
  z-index: 1;
23
+ color: var(--ui-checkbox-color);
16
24
 
17
25
  @nest .text-light & {
18
- --ui-checkbox-border-color: var(--color-light);
26
+ --ui-checkbox-border-color-raw: var(--color-light);
27
+ }
28
+
29
+ &:--theme-light {
30
+ --ui-checkbox-checked-fg: rgb(var(--color-light));
31
+ }
32
+
33
+ &:--theme-dark {
34
+ --ui-checkbox-checked-fg: rgb(var(--color-dark));
35
+ }
36
+
37
+ &:--state-invalid {
38
+ --ui-checkbox-border-color-raw: var(--color-error);
39
+ --ui-checkbox-color: rgb(var(--color-error));
19
40
  }
20
41
 
21
42
  & input {
22
43
  position: relative;
23
44
  display: inline-flex;
24
- -moz-appearance: none;
25
45
  appearance: none;
26
46
  height: var(--ui-checkbox-width);
27
47
  width: var(--ui-checkbox-width);
28
- background-color: rgba(var(--ui-checkbox-bg), var(--ui-checkbox-bg-opacity));
29
- border: 1px solid rgba(var(--ui-checkbox-border-color), var(--ui-checkbox-border-opacity));
30
- border-radius: var(--radius);
48
+ background-color: rgb(var(--ui-checkbox-bg-raw) / var(--ui-checkbox-bg-opacity));
49
+ border: 1px solid rgb(var(--ui-checkbox-border-color-raw) / var(--ui-checkbox-border-opacity));
50
+ border-radius: var(--ui-checkbox-radius);
31
51
  cursor: pointer;
32
52
  outline: none;
33
53
  justify-content: center;
34
54
  align-items: center;
35
- transition: var(--transition-border), var(--transition-background);
55
+ transition: var(--transition-border), var(--transition-background), var(--transition-shadow);
36
56
 
37
- &:checked {
38
- --ui-checkbox-border-opacity: 0;
39
-
40
- &:not([class*="checked:bg"]) {
41
- background-color: rgb(var(--ui-checkbox-checked-bg));
42
- }
43
-
44
- &:before {
45
- opacity: 1;
46
- transform: scale(1);
47
- }
57
+ &::before {
58
+ line-height: var(--ui-checkbox-icon-size);
59
+ font-size: var(--ui-checkbox-icon-size);
60
+ text-indent: 0;
61
+ display: block;
62
+ transition: var(--transition-color), var(--transition-opacity), var(--transition-transform);
63
+ color: var(--ui-checkbox-checked-fg);
64
+ content: "";
65
+ background-color: currentColor;
66
+ mask: var(--ui-checkbox-icon);
67
+ opacity: 0;
68
+ transform: scale(0);
69
+ will-change: transform;
70
+ width: 1em;
71
+ height: 1em;
48
72
  }
49
73
 
50
74
  &:not(:only-child) {
@@ -56,31 +80,46 @@
56
80
  }
57
81
  }
58
82
 
59
- &:before {
60
- @mixin iconfont;
61
- line-height: 1.125rem;
62
- font-size: 1.125rem;
63
- text-indent: 0;
64
- display: block;
65
- transition: var(--transition-color), var(--transition-opacity), var(--transition-transform);
66
- color: rgb(var(--ui-checkbox-checked-fg));
67
- content: var(--icon-checkbox-filled);
68
- opacity: 0;
69
- transform: scale(0);
70
- will-change: transform;
83
+ &:focus, &:hover {
84
+ --ui-checkbox-bg-raw: var(--ui-checkbox-checked-bg-raw);
85
+ --ui-checkbox-border-color-raw: var(--ui-checkbox-checked-bg-raw);
86
+ --ui-checkbox-border-opacity: 0.75;
87
+ --ui-checkbox-bg-opacity: 0.1;
88
+ }
89
+
90
+ &:checked {
91
+ --ui-checkbox-border-opacity: 0;
92
+
93
+ background-color: var(--ui-checkbox-checked-bg);
94
+
95
+ &:focus {
96
+ box-shadow:
97
+ 0 0 0 0 rgb(var(--color-current)),
98
+ 0 0 0 3px rgb(var(--ui-checkbox-checked-bg-raw) / 0.15),
99
+ 0 1px 2px 0 rgb(var(--color-current) / 0.05);
100
+
101
+ @nest .dark & {
102
+ box-shadow:
103
+ 0 0 0 0 rgb(var(--color-current)),
104
+ 0 0 0 3px rgb(var(--ui-checkbox-checked-bg-raw) / 0.3),
105
+ 0 1px 2px 0 rgb(var(--color-current) / 0.05);
106
+ }
107
+ }
108
+
109
+ &::before {
110
+ opacity: 1;
111
+ transform: scale(1);
112
+ }
71
113
  }
72
114
  }
73
115
 
74
116
  & a {
75
117
  text-decoration: underline;
76
- transition: var(--transition-color);
118
+ transition: var(--transition-opacity);
119
+ color: rgb(var(--color-accent));
77
120
 
78
- &:not([class*="text-"]) {
79
- color: rgb(var(--color-primary));
80
-
81
- @nest .no-touch &[href]:hover {
82
- color: rgba(var(--color-primary), 0.8);
83
- }
121
+ @nest .no-touch &[href]:hover {
122
+ opacity: 0.8;
84
123
  }
85
124
  }
86
- }
125
+ }
@@ -0,0 +1,5 @@
1
+ .ui-dropdown {
2
+ padding: 1.25rem 1.5rem;
3
+ overflow: hidden;
4
+ max-width: 22rem;
5
+ }
@@ -1,21 +1,21 @@
1
1
  .ui-heading {
2
+ --ui-heading-size: 1.5rem;
3
+ --ui-heading-size-line: 0.5rem;
4
+
2
5
  display: block;
3
6
  font-weight: var(--font-bold);
4
- line-height: 1.15;
5
-
6
- &:not([data-size]) {
7
- font-size: 1.5rem;
8
- }
7
+ font-size: var(--ui-heading-size);
8
+ line-height: calc(var(--ui-heading-size) + var(--ui-heading-size-line));
9
9
 
10
- &[data-size^="lg"] {
11
- font-size: 1.625rem;
10
+ &:--size-lg {
11
+ --ui-heading-size: 1.75rem;
12
12
 
13
- @media (--media-min-768) {
14
- font-size: 2rem;
13
+ @media (--media-t) {
14
+ --ui-heading-size: 2rem;
15
15
  }
16
16
  }
17
17
 
18
- &[data-size^="sm"] {
19
- font-size: 1.125rem;
18
+ &:--size-sm {
19
+ --ui-heading-size: 1.25rem;
20
20
  }
21
- }
21
+ }
@@ -1,14 +1,33 @@
1
1
  .ui-icon {
2
+ --ui-icon-hover-opacity: 0.7;
3
+ --ui-icon-size: 1.25rem;
4
+
2
5
  display: inline-flex;
3
- font-size: 1.25rem;
6
+ position: relative;
7
+ font-size: var(--ui-icon-size);
8
+
9
+ &, & svg {
10
+ width: 1em;
11
+ height: 1em;
12
+ }
4
13
 
5
- &[class*="icon-"], & [class*="icon-"] {
6
- &:before {
7
- transition: var(--transition-opacity);
14
+ & > * {
15
+ transition: var(--transition-opacity);
8
16
 
9
- @nest .no-touch [href]:hover&, .no-touch button:hover& {
10
- opacity: 0.8;
11
- }
17
+ @nest .no-touch :is([href]:hover, button:hover)& {
18
+ opacity: var(--ui-icon-hover-opacity);
12
19
  }
13
20
  }
14
- }
21
+ }
22
+
23
+ .ui-icon-text {
24
+ --ui-icon-hover-opacity: 0.7;
25
+
26
+ display: inline-flex;
27
+ align-items: center;
28
+ transition: var(--transition-opacity), var(--transition-color);
29
+
30
+ @nest .no-touch &:is([href]:hover, button:hover) {
31
+ opacity: var(--ui-icon-hover-opacity);
32
+ }
33
+ }