winduum 0.1.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 (49) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +25 -0
  3. package/dist/main.css +1 -0
  4. package/package.json +52 -0
  5. package/src/App.vue +12 -0
  6. package/src/badge.html +41 -0
  7. package/src/btn.html +101 -0
  8. package/src/common.html +57 -0
  9. package/src/index.html +15 -0
  10. package/src/input.html +169 -0
  11. package/src/scripts/Libraries/Dialog.js +0 -0
  12. package/src/scripts/main.js +0 -0
  13. package/src/scripts/vue.js +6 -0
  14. package/src/styles/Base/config.css +87 -0
  15. package/src/styles/Base/default.css +23 -0
  16. package/src/styles/Base/icons.css +9 -0
  17. package/src/styles/Base/keyframes.css +188 -0
  18. package/src/styles/Base/reset.css +98 -0
  19. package/src/styles/Base/tailwind/base.css +27 -0
  20. package/src/styles/Base/theme/dark.css +9 -0
  21. package/src/styles/Base/theme/default.css +17 -0
  22. package/src/styles/Components/+.css +4 -0
  23. package/src/styles/Components/Dialog.css +5 -0
  24. package/src/styles/Components/Drawer.css +5 -0
  25. package/src/styles/Components/Dropdown.css +5 -0
  26. package/src/styles/Components/Table.css +5 -0
  27. package/src/styles/Libraries/+.css +3 -0
  28. package/src/styles/Libraries/Dialog.css +5 -0
  29. package/src/styles/Libraries/Hint.css +5 -0
  30. package/src/styles/Ui/+.css +14 -0
  31. package/src/styles/Ui/Badge.css +111 -0
  32. package/src/styles/Ui/Btn.css +238 -0
  33. package/src/styles/Ui/Checkbox.css +117 -0
  34. package/src/styles/Ui/Heading.css +23 -0
  35. package/src/styles/Ui/Image.css +17 -0
  36. package/src/styles/Ui/Input.css +271 -0
  37. package/src/styles/Ui/Link.css +44 -0
  38. package/src/styles/Ui/Notice.css +43 -0
  39. package/src/styles/Ui/Progress.css +52 -0
  40. package/src/styles/Ui/Radio.css +6 -0
  41. package/src/styles/Ui/Range.css +0 -0
  42. package/src/styles/Ui/Select.css +29 -0
  43. package/src/styles/Ui/Switch.css +102 -0
  44. package/src/styles/Ui/Text.css +203 -0
  45. package/src/styles/Ui/Title.css +22 -0
  46. package/src/styles/main.css +11 -0
  47. package/src/templates/Btn.vue +11 -0
  48. package/utils/helpers.cjs +67 -0
  49. package/utils/helpers.js +59 -0
@@ -0,0 +1,238 @@
1
+ @layer utilities {
2
+ :where(.ui-btn) {
3
+ --color-current: var(--color-light);
4
+ --ui-btn-width: max-content;
5
+ --ui-btn-height: 2.25rem;
6
+ --ui-btn-py: 0.375rem;
7
+ --ui-btn-px: 0.75rem;
8
+ --ui-btn-border-radius: var(--rounded);
9
+ --ui-btn-font-size: 0.875rem;
10
+ --ui-btn-font-weight: var(--font-medium);
11
+ --ui-btn-bg: rgb(var(--color-accent) / var(--ui-btn-bg-opacity));
12
+ --ui-btn-bg-opacity: var(--tw-bg-opacity, 1);
13
+ --ui-btn-color: rgb(var(--color-current) / var(--ui-btn-color-opacity));
14
+ --ui-btn-color-opacity: var(--tw-text-opacity, 1);
15
+ --ui-btn-hover-filter: invert(1);
16
+ --ui-btn-hover-opacity: 0.2;
17
+ --ui-btn-focus-opacity: 0.3;
18
+ --ui-btn-disabled-opacity: 0.7;
19
+ --ui-btn-outline-width: 2px;
20
+ --ui-btn-outline-opacity: 0.5;
21
+ --ui-btn-icon-font-size: 1.25rem;
22
+ --ui-btn-gap: 0.375rem;
23
+ --ui-btn-loading-width: 1rem;
24
+ --ui-btn-loading-border-width: 2px;
25
+
26
+ width: var(--ui-btn-width);
27
+ height: var(--ui-btn-height);
28
+ padding: var(--ui-btn-py) var(--ui-btn-px);
29
+ border-radius: var(--ui-btn-border-radius);
30
+ font-size: var(--ui-btn-font-size);
31
+ font-weight: var(--ui-btn-font-weight);
32
+ background-color: var(--ui-btn-bg);
33
+ color: var(--ui-btn-color);
34
+ user-select: none;
35
+ overflow: hidden;
36
+ display: inline-flex;
37
+ align-items: center;
38
+ text-align: center;
39
+ justify-content: center;
40
+ white-space: nowrap;
41
+ flex-shrink: 0;
42
+ position: relative;
43
+ z-index: 0;
44
+ transition: var(--transition-opacity), var(--transition-background), var(--transition-color);
45
+ gap: var(--ui-btn-gap);
46
+
47
+ &::before {
48
+ position: absolute;
49
+ inset: 0;
50
+ width: 100%;
51
+ height: 100%;
52
+ content: "";
53
+ background-color: rgb(var(--color-current));
54
+ filter: var(--ui-btn-hover-filter);
55
+ z-index: -1;
56
+ opacity: 0;
57
+ transition: var(--transition-opacity);
58
+ }
59
+
60
+ & :where(svg) {
61
+ width: 1em;
62
+ height: 1em;
63
+ font-size: var(--ui-btn-icon-font-size);
64
+ }
65
+
66
+ &:where(.is-sm) {
67
+ --ui-btn-height: 2rem;
68
+ --ui-btn-px: 1rem;
69
+ }
70
+
71
+ &:where(.is-lg) {
72
+ --ui-btn-height: 3rem;
73
+ --ui-btn-px: 1.75rem;
74
+ }
75
+
76
+ &:where(.is-wide) {
77
+ padding-left: calc(var(--ui-btn-px) * 2);
78
+ padding-right: calc(var(--ui-btn-px) * 2);
79
+ }
80
+
81
+ &:where(.is-outline, .is-muted, .is-text) {
82
+ --color-current: var(--color-accent);
83
+ --ui-btn-hover-opacity: 0.1;
84
+ --ui-btn-hover-filter: none;
85
+
86
+ background-color: transparent;
87
+
88
+ &::before {
89
+ background-color: var(--ui-btn-bg);
90
+ }
91
+ }
92
+
93
+ &:where(.is-outline) {
94
+ --ui-btn-focus-opacity: 0.15;
95
+
96
+ outline: var(--ui-btn-outline-width) solid rgb(var(--color-accent) / var(--ui-btn-outline-opacity));
97
+ outline-offset: calc(var(--ui-btn-outline-width) * -1);
98
+ }
99
+
100
+ &:where(.is-outline-gradient) {
101
+ --ui-btn-focus-opacity: 0.15;
102
+ --color-accent: var(--color-default);
103
+ --color-current: var(--color-accent);
104
+
105
+ &.is-loading.is-hover-fill {
106
+ --color-current: var(--color-light);
107
+ }
108
+
109
+ &:not(.is-loading) {
110
+ &::after {
111
+ content: "";
112
+ position: absolute;
113
+ background-color: rgb(var(--color-background));
114
+ inset: var(--ui-btn-outline-width);
115
+ border-radius: calc(var(--ui-btn-border-radius) / 1.25);
116
+ z-index: -1;
117
+ transition: var(--transition-opacity);
118
+ }
119
+ }
120
+ }
121
+
122
+ &:where(.is-muted) {
123
+ --ui-btn-hover-opacity: 0.3;
124
+
125
+ &::before {
126
+ opacity: 0.1;
127
+ }
128
+ }
129
+
130
+ &:where(.is-raised) {
131
+ --ui-btn-outline-opacity: 0.1;
132
+
133
+ outline: var(--ui-btn-outline-width) solid rgb(var(--color-current) / var(--ui-btn-outline-opacity));
134
+ outline-offset: calc(var(--ui-btn-outline-width) * -1);
135
+ }
136
+
137
+ &:where(.is-hover-fill) {
138
+ --ui-btn-hover-opacity: 1;
139
+ }
140
+
141
+ &:where(.is-square, .is-circle) {
142
+ --ui-btn-py: var(--ui-btn-py);
143
+ --ui-btn-width: var(--ui-btn-height);
144
+ }
145
+
146
+ &:where(.is-circle) {
147
+ --ui-btn-border-radius: var(--rounded-full);
148
+ }
149
+
150
+ &:where(.is-loading) {
151
+ pointer-events: none;
152
+ color: transparent;
153
+
154
+ & > * {
155
+ opacity: 0;
156
+ }
157
+
158
+ &::after {
159
+ z-index: 1;
160
+ width: var(--ui-btn-loading-width);
161
+ height: var(--ui-btn-loading-width);
162
+ content: "";
163
+ border: var(--ui-btn-loading-border-width) solid rgb(var(--color-current));
164
+ border-right-color: transparent;
165
+ border-radius: 50%;
166
+ animation: spin 0.45s infinite linear;
167
+ position: absolute;
168
+ margin-left: calc(var(--ui-btn-loading-width) / 2 * -1);
169
+ margin-top: calc(var(--ui-btn-loading-width) / 2 * -1);
170
+ left: 50%;
171
+ top: 50%;
172
+ }
173
+ }
174
+
175
+ &:not(:disabled):hover {
176
+ @media (hover: hover) and (pointer: fine) {
177
+ &::before {
178
+ opacity: var(--ui-btn-hover-opacity);
179
+ }
180
+
181
+ &.is-hover-fill {
182
+ --color-current: var(--color-light);
183
+ }
184
+
185
+ &.is-outline-gradient {
186
+ &::before, &::after {
187
+ opacity: 0;
188
+ }
189
+ }
190
+ }
191
+ }
192
+
193
+ &:is(:not(:disabled):active, .is-active) {
194
+ &::before {
195
+ opacity: var(--ui-btn-hover-opacity);
196
+ }
197
+
198
+ &.is-hover-fill {
199
+ --color-current: var(--color-light);
200
+ }
201
+
202
+ &.is-outline-gradient {
203
+ &::before, &::after {
204
+ opacity: 0;
205
+ }
206
+ }
207
+ }
208
+
209
+ &:focus-visible {
210
+ z-index: 2;
211
+ box-shadow:
212
+ 0 0 0 0 rgb(var(--color-current)),
213
+ 0 0 0 max(2px, var(--ui-btn-outline-width)) rgb(var(--color-accent) / var(--ui-btn-focus-opacity));
214
+ }
215
+
216
+ &:disabled {
217
+ opacity: var(--ui-btn-disabled-opacity);
218
+ cursor: not-allowed;
219
+ }
220
+ }
221
+
222
+ :where(.ui-btn-group) {
223
+ display: flex;
224
+
225
+ & :where(.ui-btn) {
226
+ &:not(:first-child) {
227
+ border-top-left-radius: 0;
228
+ border-bottom-left-radius: 0;
229
+ margin-left: calc(var(--ui-btn-outline-width) * -1);
230
+ }
231
+
232
+ &:not(:last-child) {
233
+ border-top-right-radius: 0;
234
+ border-bottom-right-radius: 0;
235
+ }
236
+ }
237
+ }
238
+ }
@@ -0,0 +1,117 @@
1
+ @layer utilities {
2
+ :where(.ui-checkbox, .ui-radio) {
3
+ --ui-checkbox-width: 1.375rem;
4
+ --ui-checkbox-font-size: 0.875rem;
5
+ --ui-checkbox-gap: 0.625rem;
6
+ --ui-checkbox-bg-raw: var(--color-background);
7
+ --ui-checkbox-bg-opacity: 0.1;
8
+ --ui-checkbox-border-color-raw: var(--color-current);
9
+ --ui-checkbox-border-color-opacity: 0.2;
10
+ --ui-checkbox-checked-bg-raw: var(--color-accent);
11
+ --ui-checkbox-radius: 0.5rem;
12
+ --ui-checkbox-icon: var(--icon-check);
13
+ --ui-checkbox-icon-font-size: 1.125rem;
14
+ --ui-checkbox-validity-font-size: 0.875rem;
15
+ --ui-checkbox-validity-offset: 0.375rem;
16
+ --ui-checkbox-box-shadow: none;
17
+
18
+ display: flex;
19
+ align-items: center;
20
+ gap: 0 var(--ui-checkbox-gap);
21
+ flex-wrap: wrap;
22
+ width: max-content;
23
+ font-size: var(--ui-checkbox-font-size);
24
+
25
+ & :where(label[for], input) {
26
+ cursor: pointer;
27
+ }
28
+
29
+ & em {
30
+ display: none;
31
+ width: 100%;
32
+ font-size: var(--ui-checkbox-validity-font-size);
33
+ color: rgb(var(--color-error));
34
+ font-style: normal;
35
+ margin-top: var(--ui-checkbox-validity-offset);
36
+ }
37
+
38
+ & a {
39
+ color: rgb(var(--color-accent));
40
+ text-decoration: underline;
41
+ }
42
+
43
+ & input {
44
+ --color-current: var(--color-light);
45
+
46
+ display: flex;
47
+ width: var(--ui-checkbox-width);
48
+ height: var(--ui-checkbox-width);
49
+ background-color: rgb(var(--ui-checkbox-bg-raw) / var(--tw-bg-opacity, var(--ui-checkbox-bg-opacity)));
50
+ border: 1px solid rgb(var(--ui-checkbox-border-color-raw) / var(--tw-border-opacity, var(--ui-checkbox-border-color-opacity)));
51
+ border-radius: var(--ui-checkbox-radius);
52
+ user-select: none;
53
+ outline: none;
54
+ justify-content: center;
55
+ align-items: center;
56
+ transition: var(--transition-border), var(--transition-background), var(--transition-shadow);
57
+ box-shadow: var(--ui-checkbox-box-shadow);
58
+ font-size: var(--ui-checkbox-icon-font-size);
59
+
60
+ &::before {
61
+ line-height: var(--ui-checkbox-icon-font-size);
62
+ text-indent: 0;
63
+ display: block;
64
+ transition: var(--transition-color), var(--transition-opacity), var(--transition-transform);
65
+ color: rgb(var(--color-current));
66
+ content: "";
67
+ background-color: currentColor;
68
+ mask: var(--ui-checkbox-icon);
69
+ opacity: 0;
70
+ transform: scale(0);
71
+ will-change: transform;
72
+ width: 1em;
73
+ height: 1em;
74
+ }
75
+
76
+ &:is(:hover, :focus-visible) {
77
+ --ui-checkbox-bg-raw: var(--ui-checkbox-checked-bg-raw);
78
+ --ui-checkbox-border-color-raw: var(--ui-checkbox-checked-bg-raw);
79
+ --tw-border-opacity: 0.75;
80
+ --tw-bg-opacity: 0.1;
81
+ }
82
+
83
+ &:required {
84
+ & + * {
85
+ &::after {
86
+ color: rgb(var(--color-error));
87
+ content: " *";
88
+ }
89
+ }
90
+ }
91
+
92
+ @nest .is-validated &:invalid {
93
+ & ~ em {
94
+ display: block;
95
+ }
96
+ }
97
+
98
+ &:checked {
99
+ --tw-border-opacity: 0;
100
+
101
+ background-color: rgb(var(--ui-checkbox-checked-bg-raw));
102
+
103
+ &:focus {
104
+ --ui-checkbox-box-shadow:
105
+ 0 0 0 0 rgb(var(--color-current)),
106
+ 0 0 0 3px rgb(var(--ui-checkbox-checked-bg-raw) / 0.2),
107
+ 0 1px 2px 0 rgb(var(--color-current) / 0.05);
108
+ }
109
+
110
+ &::before {
111
+ opacity: 1;
112
+ transform: scale(1);
113
+ }
114
+ }
115
+ }
116
+ }
117
+ }
@@ -0,0 +1,23 @@
1
+ @layer utilities {
2
+ :where(.ui-heading) {
3
+ --ui-heading-font-family: var(--font-primary);
4
+ --ui-heading-font-weight: var(--font-semibold);
5
+ --ui-heading-font-size: 1.25rem;
6
+ --ui-heading-line-height: calc(var(--ui-heading-font-size) + var(--ui-heading-line-height-ratio));
7
+ --ui-heading-line-height-ratio: 0.375rem;
8
+
9
+ font-family: var(--ui-heading-font-family);
10
+ font-size: var(--ui-heading-font-size);
11
+ line-height: var(--ui-heading-line-height);
12
+ font-weight: var(--ui-heading-font-weight);
13
+
14
+ &:where(.is-sm) {
15
+ --ui-heading-font-size: 1.125rem;
16
+ --ui-heading-line-height-ratio: 0.125rem;
17
+ }
18
+
19
+ &:where(.is-lg) {
20
+ --ui-heading-font-size: 1.875rem;
21
+ }
22
+ }
23
+ }
@@ -0,0 +1,17 @@
1
+ @layer utilities {
2
+ :where(.ui-image) {
3
+ --ui-image-bg: rgb(var(--color-background-200));
4
+ --ui-image-border-radius: 0;
5
+
6
+ position: relative;
7
+ display: block;
8
+ background-color: var(--ui-image-bg);
9
+ border-radius: var(--ui-image-border-radius);
10
+
11
+ & > * {
12
+ width: 100%;
13
+ height: 100%;
14
+ border-radius: inherit;
15
+ }
16
+ }
17
+ }
@@ -0,0 +1,271 @@
1
+ @layer utilities {
2
+ :where(.ui-input, .ui-input-group, .ui-input-mask, .ui-select) {
3
+ --ui-input-height: 3rem;
4
+ --ui-input-height-textarea: 8rem;
5
+ --ui-input-pt-floating: 1.25rem;
6
+ --ui-input-pb-floating: 0.4375rem;
7
+ --ui-input-py: 0.875rem;
8
+ --ui-input-px: 1rem;
9
+ --ui-input-pl: var(--ui-input-px);
10
+ --ui-input-pr: var(--ui-input-px);
11
+ --ui-input-bg: rgb(var(--color-background));
12
+ --ui-input-color: currentColor;
13
+ --ui-input-placeholder-color: currentColor;
14
+ --ui-input-placeholder-opacity: 0.5;
15
+ --ui-input-font-size: 0.875rem;
16
+ --ui-input-font-weight: var(--font-medium);
17
+ --ui-input-border-width: 1px;
18
+ --ui-input-border-color: var(--color-current);
19
+ --ui-input-border-opacity: 0.15;
20
+ --ui-input-border-radius: var(--rounded);
21
+ --ui-input-box-shadow: none;
22
+ --ui-input-gap: 0.5rem;
23
+ --ui-input-icon-font-size: 1.25rem;
24
+ --ui-input-icon-count-l: 1;
25
+ --ui-input-icon-count-r: 1;
26
+ --ui-input-icon-gap: 0.375rem;
27
+ --ui-input-icon-inset-x: calc(var(--ui-input-px) - 0.25rem);
28
+ --ui-input-icon-inset-x-gap: 0.125rem;
29
+ --ui-input-icon-offset-l: calc(var(--ui-input-icon-inset-x) + var(--ui-input-icon-inset-x-gap) + (var(--ui-input-icon-font-size) + var(--ui-input-icon-gap)) * var(--ui-input-icon-count-l));
30
+ --ui-input-icon-offset-r: calc(var(--ui-input-icon-inset-x) + var(--ui-input-icon-inset-x-gap) + (var(--ui-input-icon-font-size) + var(--ui-input-icon-gap)) * var(--ui-input-icon-count-r));
31
+ --ui-input-validity-size: 0.875rem;
32
+ --ui-input-validity-offset: 0.375rem;
33
+ --ui-input-label-font-size: 0.875rem;
34
+ --ui-input-label-font-weight: var(--font-medium);
35
+ --ui-input-label-focus-transform: translateY(-0.75rem) scale(0.8);
36
+ --ui-input-label-focus-opacity: 0.5;
37
+
38
+ & > :where(label:not([class^="ui"])) {
39
+ display: block;
40
+ margin-bottom: var(--ui-input-gap);
41
+ font-size: var(--ui-input-label-font-size);
42
+ font-weight: var(--ui-input-label-font-weight);
43
+ }
44
+
45
+ & :where(em) {
46
+ grid-area: info;
47
+ display: none;
48
+ margin-top: var(--ui-input-validity-offset);
49
+ font-size: var(--ui-input-validity-size);
50
+ color: rgb(var(--color-error));
51
+ font-style: normal;
52
+ }
53
+ }
54
+
55
+ :where(.ui-input, .ui-select) {
56
+ display: grid;
57
+ grid-template-areas: "label" "input" "info";
58
+ font-size: var(--ui-input-font-size);
59
+ position: relative;
60
+
61
+ &:has(.icon-l) {
62
+ --ui-input-pl: var(--ui-input-icon-offset-l);
63
+ }
64
+
65
+ &:has(.icon-r) {
66
+ --ui-input-pr: var(--ui-input-icon-offset-r);
67
+ }
68
+
69
+ &:has(.icon-l > *:nth-child(2)) {
70
+ --ui-input-icon-count-r: 2;
71
+ }
72
+
73
+ &:has(.icon-r > *:nth-child(2)) {
74
+ --ui-input-icon-count-r: 2;
75
+ }
76
+
77
+ & :where(label) {
78
+ grid-area: label;
79
+ order: -1;
80
+ }
81
+
82
+ & :where(svg) {
83
+ font-size: var(--ui-input-icon-font-size);
84
+ width: 1em;
85
+ height: var(--ui-input-height);
86
+ }
87
+
88
+ & :where(input, textarea, select) {
89
+ grid-area: input;
90
+ background-clip: padding-box;
91
+ background-color: var(--ui-input-bg);
92
+ padding: var(--ui-input-py) var(--ui-input-pr) var(--ui-input-py) var(--ui-input-pl);
93
+ transition: var(--transition-border), var(--transition-shadow);
94
+ box-shadow: var(--ui-input-box-shadow);
95
+ line-height: normal;
96
+ font-size: inherit;
97
+ height: var(--ui-input-height);
98
+ font-weight: var(--ui-input-font-weight);
99
+ border-radius: var(--ui-input-border-radius);
100
+ color: var(--ui-input-color);
101
+ border: var(--ui-input-border-width) solid rgb(var(--ui-input-border-color) / var(--ui-input-border-opacity));
102
+
103
+ @nest .is-validated &:invalid {
104
+ & ~ em {
105
+ display: block;
106
+ }
107
+ }
108
+
109
+ &:focus {
110
+ --ui-input-border-opacity: 1;
111
+ --ui-input-border-color: var(--color-accent);
112
+ --ui-input-box-shadow:
113
+ 0 0 0 0 rgb(var(--color-current)),
114
+ 0 0 0 3px rgb(var(--color-accent) / 0.2),
115
+ 0 1px 2px 0 rgb(var(--color-current) / 0.05);
116
+ }
117
+
118
+ &:disabled {
119
+ cursor: default;
120
+ background-color: rgb(var(--color-default) / 0.1);
121
+ }
122
+
123
+ &:required {
124
+ & ~ label {
125
+ &::after {
126
+ color: rgb(var(--color-error));
127
+ content: " *";
128
+ }
129
+ }
130
+ }
131
+ }
132
+
133
+ & :where(input, textarea) {
134
+ &::placeholder {
135
+ color: var(--ui-input-placeholder-color);
136
+ opacity: var(--ui-input-placeholder-opacity);
137
+ }
138
+ }
139
+
140
+ & :where(textarea) {
141
+ resize: vertical;
142
+ overflow: hidden;
143
+ min-height: var(--ui-input-height-textarea);
144
+ }
145
+
146
+ & :where([class^="icon-"]) {
147
+ grid-area: input;
148
+ position: relative;
149
+ transition: var(--transition-opacity);
150
+ content: "";
151
+ line-height: 1em;
152
+ display: flex;
153
+ flex-direction: row;
154
+ flex-shrink: 0;
155
+ gap: var(--ui-input-icon-gap);
156
+ align-items: center;
157
+
158
+ &.icon-l {
159
+ left: var(--ui-input-icon-inset-x);
160
+ margin-right: auto;
161
+ }
162
+
163
+ &.icon-r {
164
+ right: var(--ui-input-icon-inset-x);
165
+ margin-left: auto;
166
+ }
167
+ }
168
+
169
+ & :where([aria-label]) {
170
+ &::after {
171
+ content: attr(aria-label);
172
+ font-size: var(--ui-input-font-size);
173
+ min-width: var(--ui-input-icon-font-size);
174
+ text-align: center;
175
+ line-height: var(--ui-input-icon-font-size);
176
+ display: block;
177
+ }
178
+ }
179
+
180
+ & :where([class*="lib-hint"]) {
181
+ &::after {
182
+ white-space: normal;
183
+ line-height: 1.5;
184
+ word-wrap: normal;
185
+ width: 10rem;
186
+ font-weight: var(--font-normal);
187
+ font-size: 0.75rem;
188
+ }
189
+ }
190
+
191
+ &:where(.is-floating) {
192
+ --ui-input-placeholder-color: transparent;
193
+
194
+ & :where(label) {
195
+ position: absolute;
196
+ z-index: 1;
197
+ pointer-events: none;
198
+ transition: transform 0.4s cubic-bezier(0.25, 0.8, 0.25, 1), var(--transition-color), var(--transition-opacity);
199
+ transform-origin: 0 50%;
200
+ white-space: nowrap;
201
+ text-overflow: ellipsis;
202
+ overflow: hidden;
203
+ transform: perspective(100px);
204
+ will-change: transform;
205
+ font-weight: var(--ui-input-font-weight);
206
+ left: var(--ui-input-pl);
207
+ right: var(--ui-input-pr);
208
+ top: calc(var(--ui-input-height) / 2);
209
+ line-height: var(--ui-input-font-size);
210
+ margin-top: calc(var(--ui-input-font-size) / 2 * -1);
211
+ }
212
+
213
+ & :where(input, textarea, select) {
214
+ padding-top: calc(var(--ui-input-pt-floating));
215
+ padding-bottom: calc(var(--ui-input-pb-floating));
216
+
217
+ &:is(:focus, :not(:placeholder-shown)) ~ label {
218
+ transform: var(--ui-input-label-focus-transform);
219
+ opacity: var(--ui-input-label-focus-opacity);
220
+ }
221
+ }
222
+ }
223
+
224
+ @nest &.is-invalid, .is-validated & :where(input, textarea, select):invalid {
225
+ --ui-input-bg: rgb(var(--color-error) / 0.1);
226
+ --ui-input-border-opacity: 1;
227
+ --ui-input-border-color: var(--color-error);
228
+ --ui-input-color: rgb(var(--color-error));
229
+ }
230
+ }
231
+
232
+ :where(.ui-input-group) {
233
+ display: flex;
234
+ align-items: flex-end;
235
+ flex-wrap: wrap;
236
+
237
+ & .ui-btn {
238
+ --ui-btn-outline-width: 1px;
239
+ --ui-btn-height: var(--ui-input-height);
240
+ }
241
+
242
+ & :where(em, label) {
243
+ display: block;
244
+ width: 100%;
245
+ }
246
+
247
+ & > * {
248
+ &:not(:first-child, label + *) {
249
+ margin-left: calc(var(--ui-input-border-width) * -1);
250
+
251
+ &, & :where(input, select) {
252
+ border-top-left-radius: 0;
253
+ border-bottom-left-radius: 0;
254
+ }
255
+ }
256
+
257
+ &:not(:last-child, :has(+ em)) {
258
+ &, & :where(input, select) {
259
+ border-top-right-radius: 0;
260
+ border-bottom-right-radius: 0;
261
+ }
262
+ }
263
+ }
264
+ }
265
+
266
+ :where(.ui-input-mask) {
267
+ & :where([class^="ui-"]) {
268
+ min-height: var(--ui-input-height);
269
+ }
270
+ }
271
+ }
@@ -0,0 +1,44 @@
1
+ :where(.ui-link) {
2
+ --ui-link-font-size: 0.875rem;
3
+ --ui-link-font-weight: var(--font-semibold);
4
+ --ui-link-hover-color: rgb(var(--color-accent));
5
+ --ui-link-hover-opacity: 0.7;
6
+ --ui-link-underline-width: 1px;
7
+ --ui-link-underline-opacity: 0;
8
+ --ui-link-underline-transform: translateY(-0.125rem);
9
+
10
+ font-size: var(--ui-link-font-size);
11
+ font-weight: var(--ui-link-font-weight);
12
+ transition: var(--transition-opacity);
13
+ display: flex;
14
+ align-items: center;
15
+ position: relative;
16
+
17
+ &:hover {
18
+ @media (hover: hover) and (pointer: fine) {
19
+ --ui-link-underline-opacity: 1;
20
+ --ui-link-underline-transform: none;
21
+
22
+ color: var(--ui-link-hover-color);
23
+ }
24
+ }
25
+
26
+ &:active {
27
+ opacity: var(--ui-link-hover-opacity);
28
+ }
29
+
30
+ &:where(:focus-visible) {
31
+ --ui-link-underline-opacity: 1;
32
+ --ui-link-underline-transform: none;
33
+ }
34
+
35
+ &:where(.is-underline)::after {
36
+ content: "";
37
+ border-bottom: var(--ui-link-underline-width) solid currentColor;
38
+ opacity: var(--ui-link-underline-opacity);
39
+ position: absolute;
40
+ inset: auto 0 0 0;
41
+ transition: var(--transition-opacity), var(--transition-transform);
42
+ transform: var(--ui-link-underline-transform);
43
+ }
44
+ }