@oardi/css-utils 0.108.0 → 0.110.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oardi/css-utils",
3
- "version": "0.108.0",
3
+ "version": "0.110.0",
4
4
  "author": "Ardian Shala",
5
5
  "homepage": "https://css-utils.oardi.com",
6
6
  "description": "Powerful set of semantic css classes with support for breakpoints, directions and spacings",
@@ -0,0 +1,194 @@
1
+ @use '../layers.scss';
2
+
3
+ @layer components {
4
+ .input-group {
5
+ --input-group-bg-color: var(--bg-surface);
6
+ --input-group-border-width: var(--border-width);
7
+ --input-group-border-color: var(--control-border-color);
8
+ --input-group-border-radius: var(--border-radius-lg);
9
+ --input-group-box-shadow: var(--shadow-sm);
10
+ --input-group-color: var(--text-color);
11
+ --input-group-addon-bg-color: var(--bg-highlight);
12
+ --input-group-addon-color: var(--text-muted);
13
+ --input-group-inset: var(--spacer-1);
14
+ --input-group-gap: var(--spacer-1);
15
+ --input-group-item-border-radius: calc(
16
+ var(--input-group-border-radius) - var(--input-group-inset)
17
+ );
18
+ --input-group-padding-y: var(--spacer-1);
19
+ --input-group-padding-x: var(--spacer-3);
20
+ --input-group-font-size: var(--font-size);
21
+ --input-group-control-min-size: 8rem;
22
+ --input-group-focus-border-color: var(--primary-hover);
23
+ --input-group-focus-outline-width: var(--focus-outline-width);
24
+ --input-group-focus-outline-style: var(--focus-outline-style);
25
+ --input-group-focus-outline-color: var(--focus-outline-color);
26
+ --input-group-focus-outline-offset: var(--focus-offset);
27
+ --input-group-invalid-color: var(--error);
28
+ --input-group-disabled-text-color: var(--disabled-text-color);
29
+ --input-group-disabled-bg-color: var(--disabled-bg-color);
30
+ --input-group-disabled-border-color: var(--disabled-border-color);
31
+ --input-group-transition-duration: var(--transition-duration);
32
+ --input-group-transition-easing: var(--transition-easing);
33
+
34
+ display: flex;
35
+ flex-wrap: wrap;
36
+ align-items: stretch;
37
+ gap: var(--input-group-gap);
38
+ max-inline-size: 100%;
39
+ padding: var(--input-group-inset);
40
+ color: var(--input-group-color);
41
+ background-color: var(--input-group-bg-color);
42
+ border: var(--input-group-border-width) solid var(--input-group-border-color);
43
+ border-radius: var(--input-group-border-radius);
44
+ box-shadow: var(--input-group-box-shadow);
45
+ overflow: clip;
46
+
47
+ transition:
48
+ background-color var(--input-group-transition-duration)
49
+ var(--input-group-transition-easing),
50
+ border-color var(--input-group-transition-duration) var(--input-group-transition-easing),
51
+ box-shadow var(--input-group-transition-duration) var(--input-group-transition-easing),
52
+ outline-offset var(--input-group-transition-duration)
53
+ var(--input-group-transition-easing);
54
+
55
+ > :where(.form-control, .form-select, .input-group-text, .btn, .icon-btn) {
56
+ margin: 0;
57
+ border: 0;
58
+ border-radius: var(--input-group-item-border-radius);
59
+ }
60
+
61
+ > :where(.form-control, .form-select) {
62
+ flex: 1 1 var(--input-group-control-min-size);
63
+ inline-size: 1%;
64
+ min-inline-size: min(100%, var(--input-group-control-min-size));
65
+ --form-control-bg-color: transparent;
66
+ --form-control-padding-y: var(--input-group-padding-y);
67
+ --form-control-padding-x: var(--input-group-padding-x);
68
+ --form-control-font-size: var(--input-group-font-size);
69
+ --form-select-bg-color: transparent;
70
+ --form-select-padding-y: var(--input-group-padding-y);
71
+ --form-select-padding-x: var(--input-group-padding-x);
72
+ --form-select-font-size: var(--input-group-font-size);
73
+ }
74
+
75
+ > :is(.form-control, .form-select):is(:focus, :focus-visible, .is-focus-visible) {
76
+ outline: 0;
77
+ outline-offset: 0;
78
+ }
79
+
80
+ > .input-group-text {
81
+ display: inline-flex;
82
+ align-items: center;
83
+ justify-content: center;
84
+ flex: 0 0 auto;
85
+ min-inline-size: 0;
86
+ padding: var(--input-group-padding-y) var(--input-group-padding-x);
87
+ color: var(--input-group-addon-color);
88
+ background-color: var(--input-group-addon-bg-color);
89
+ font-size: var(--input-group-font-size);
90
+ line-height: var(--line-height);
91
+ white-space: nowrap;
92
+
93
+ > svg {
94
+ inline-size: 1em;
95
+ block-size: 1em;
96
+ fill: currentColor;
97
+ }
98
+ }
99
+
100
+ > :where(.btn, .icon-btn) {
101
+ flex: 0 0 auto;
102
+ --button-border-radius: var(--input-group-item-border-radius);
103
+ --button-padding-y: var(--input-group-padding-y);
104
+ --button-padding-x: var(--input-group-padding-x);
105
+ --button-font-size: var(--input-group-font-size);
106
+ --icon-button-border-radius: var(--input-group-item-border-radius);
107
+ --icon-button-size: auto;
108
+ --icon-button-padding: var(--input-group-padding-y);
109
+ }
110
+
111
+ &:focus-within,
112
+ &:has(> .is-focus-visible) {
113
+ border-color: var(--input-group-focus-border-color);
114
+ outline: var(--input-group-focus-outline-width) var(--input-group-focus-outline-style)
115
+ var(--input-group-focus-outline-color);
116
+ outline-offset: var(--input-group-focus-outline-offset);
117
+ }
118
+
119
+ &:has(> :is(.form-control, .form-select).is-invalid),
120
+ &:has(> :is(.form-control, .form-select)[aria-invalid='true']) {
121
+ border-color: var(--input-group-invalid-color);
122
+
123
+ &:focus-within,
124
+ &:has(> .is-focus-visible) {
125
+ outline-color: var(--input-group-invalid-color);
126
+ }
127
+ }
128
+
129
+ &:has(> .form-control:disabled),
130
+ &:has(> .form-select:disabled) {
131
+ color: var(--input-group-disabled-text-color);
132
+ background-color: var(--input-group-disabled-bg-color);
133
+ border-color: var(--input-group-disabled-border-color);
134
+ box-shadow: none;
135
+
136
+ > .input-group-text {
137
+ color: var(--input-group-disabled-text-color);
138
+ background-color: var(--input-group-disabled-bg-color);
139
+ }
140
+ }
141
+ }
142
+
143
+ .was-validated .input-group:has(> :is(.form-control, .form-select):invalid) {
144
+ border-color: var(--input-group-invalid-color);
145
+
146
+ &:focus-within {
147
+ outline-color: var(--input-group-invalid-color);
148
+ }
149
+ }
150
+
151
+ .input-group:has(> :is(.form-control, .form-select).is-invalid) + .invalid-feedback,
152
+ .input-group:has(> :is(.form-control, .form-select)[aria-invalid='true']) + .invalid-feedback,
153
+ .was-validated
154
+ .input-group:has(> :is(.form-control, .form-select):invalid)
155
+ + .invalid-feedback {
156
+ display: block;
157
+ }
158
+
159
+ .input-group-sm {
160
+ --input-group-padding-y: var(--spacer-0);
161
+ --input-group-padding-x: var(--spacer-2);
162
+ --input-group-font-size: var(--font-size-sm);
163
+ --input-group-control-min-size: 7rem;
164
+ }
165
+
166
+ .input-group-lg {
167
+ --input-group-padding-y: var(--spacer-2);
168
+ --input-group-padding-x: var(--spacer-4);
169
+ --input-group-font-size: var(--font-size-lg);
170
+ --input-group-control-min-size: 10rem;
171
+ }
172
+
173
+ @media (forced-colors: active) {
174
+ .input-group {
175
+ border-color: CanvasText;
176
+
177
+ &:focus-within,
178
+ &:has(> .is-focus-visible) {
179
+ border-color: Highlight;
180
+ outline-color: Highlight;
181
+ }
182
+
183
+ &:has(> :is(.form-control, .form-select).is-invalid),
184
+ &:has(> :is(.form-control, .form-select)[aria-invalid='true']) {
185
+ border-color: LinkText;
186
+ }
187
+
188
+ &:has(> .form-control:disabled),
189
+ &:has(> .form-select:disabled) {
190
+ border-color: GrayText;
191
+ }
192
+ }
193
+ }
194
+ }
@@ -0,0 +1,157 @@
1
+ @use '../layers.scss';
2
+
3
+ @layer components {
4
+ .skeleton {
5
+ --skeleton-width: 100%;
6
+ --skeleton-height: 1rem;
7
+ --skeleton-size: 2.5rem;
8
+ --skeleton-font-size: var(--font-size);
9
+ --skeleton-line-height: var(--line-height-sm);
10
+ --skeleton-control-height: 2.5rem;
11
+ --skeleton-aspect-ratio: auto;
12
+ --skeleton-border-radius: var(--border-radius-sm);
13
+ --skeleton-base-color: color-mix(in srgb, var(--text-color) 14%, var(--bg-surface));
14
+ --skeleton-highlight-color: color-mix(in srgb, var(--text-color) 5%, var(--bg-surface));
15
+ --skeleton-animation-duration: 1.6s;
16
+ --skeleton-animation-easing: ease-in-out;
17
+
18
+ position: relative;
19
+ display: block;
20
+ flex-shrink: 1;
21
+ inline-size: var(--skeleton-width);
22
+ max-inline-size: 100%;
23
+ block-size: var(--skeleton-height);
24
+ min-inline-size: 0;
25
+ overflow: hidden;
26
+ aspect-ratio: var(--skeleton-aspect-ratio);
27
+ border-radius: var(--skeleton-border-radius);
28
+ background-color: var(--skeleton-base-color);
29
+ box-sizing: border-box;
30
+ pointer-events: none;
31
+ user-select: none;
32
+ }
33
+
34
+ .skeleton::after {
35
+ content: '';
36
+ position: absolute;
37
+ inset: 0;
38
+ background: linear-gradient(
39
+ 100deg,
40
+ transparent 20%,
41
+ var(--skeleton-highlight-color) 50%,
42
+ transparent 80%
43
+ );
44
+ transform: translateX(-100%);
45
+ animation: skeleton-shimmer var(--skeleton-animation-duration)
46
+ var(--skeleton-animation-easing) infinite;
47
+ }
48
+
49
+ .skeleton-headline {
50
+ --skeleton-width: 65%;
51
+ --skeleton-height: calc(var(--skeleton-font-size) * var(--skeleton-line-height));
52
+ --skeleton-font-size: var(--font-size-xxl);
53
+ }
54
+
55
+ .skeleton-text {
56
+ --skeleton-height: calc(var(--skeleton-font-size) * var(--skeleton-line-height));
57
+ }
58
+
59
+ .skeleton-avatar {
60
+ --skeleton-width: var(--skeleton-size);
61
+ --skeleton-height: var(--skeleton-size);
62
+ --skeleton-border-radius: 50%;
63
+ }
64
+
65
+ .skeleton-image {
66
+ --skeleton-height: auto;
67
+ --skeleton-aspect-ratio: 16 / 9;
68
+ --skeleton-border-radius: var(--border-radius);
69
+ }
70
+
71
+ .skeleton-pill {
72
+ --skeleton-width: 7rem;
73
+ --skeleton-height: var(--skeleton-control-height);
74
+ --skeleton-border-radius: 9999px;
75
+ }
76
+
77
+ .skeleton-square {
78
+ --skeleton-width: var(--skeleton-size);
79
+ --skeleton-height: auto;
80
+ --skeleton-aspect-ratio: 1;
81
+ --skeleton-border-radius: var(--border-radius);
82
+ }
83
+
84
+ .skeleton-sm {
85
+ --skeleton-size: 2rem;
86
+ --skeleton-font-size: var(--font-size-sm);
87
+ --skeleton-control-height: 2rem;
88
+ }
89
+
90
+ .skeleton-md {
91
+ --skeleton-size: 2.5rem;
92
+ --skeleton-font-size: var(--font-size);
93
+ --skeleton-control-height: 2.5rem;
94
+ }
95
+
96
+ .skeleton-lg {
97
+ --skeleton-size: 3rem;
98
+ --skeleton-font-size: var(--font-size-lg);
99
+ --skeleton-control-height: 3rem;
100
+ }
101
+
102
+ .skeleton-aspect-square {
103
+ --skeleton-height: auto;
104
+ --skeleton-aspect-ratio: 1;
105
+ }
106
+
107
+ .skeleton-aspect-video {
108
+ --skeleton-height: auto;
109
+ --skeleton-aspect-ratio: 16 / 9;
110
+ }
111
+
112
+ .skeleton-lines {
113
+ --skeleton-width: 100%;
114
+ --skeleton-line-gap: var(--spacer-2);
115
+ --skeleton-last-line-width: 65%;
116
+
117
+ display: grid;
118
+ gap: var(--skeleton-line-gap);
119
+ inline-size: var(--skeleton-width);
120
+ max-inline-size: 100%;
121
+ min-inline-size: 0;
122
+ }
123
+
124
+ .skeleton-lines > .skeleton-text {
125
+ --skeleton-width: 100%;
126
+ }
127
+
128
+ .skeleton-lines > .skeleton-text:last-child {
129
+ --skeleton-width: var(--skeleton-last-line-width);
130
+ }
131
+
132
+ @keyframes skeleton-shimmer {
133
+ to {
134
+ transform: translateX(100%);
135
+ }
136
+ }
137
+
138
+ @media (prefers-reduced-motion: reduce) {
139
+ .skeleton::after {
140
+ display: none;
141
+ animation: none;
142
+ }
143
+ }
144
+
145
+ @media (forced-colors: active) {
146
+ .skeleton {
147
+ border: var(--border-width) solid CanvasText;
148
+ background-color: GrayText;
149
+ forced-color-adjust: none;
150
+ }
151
+
152
+ .skeleton::after {
153
+ display: none;
154
+ animation: none;
155
+ }
156
+ }
157
+ }
package/scss/index.scss CHANGED
@@ -36,6 +36,7 @@
36
36
  @forward './components/expansion-panel.scss';
37
37
  @forward './components/form.scss';
38
38
  @forward './components/icon-button.scss';
39
+ @forward './components/input-group.scss';
39
40
  @forward './components/list.scss';
40
41
  @forward './components/menu.scss';
41
42
  @forward './components/modal.scss';
@@ -43,6 +44,7 @@
43
44
  @forward './components/overlay.scss';
44
45
  @forward './components/pagination.scss';
45
46
  @forward './components/range-slider.scss';
47
+ @forward './components/skeleton.scss';
46
48
  @forward './components/stepper.scss';
47
49
  @forward './components/table.scss';
48
50
  @forward './components/tabs.scss';