zenkit-css 1.0.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 (96) hide show
  1. package/README.md +182 -0
  2. package/dist/zenkit.css +33721 -0
  3. package/dist/zenkit.css.map +1 -0
  4. package/dist/zenkit.min.css +1 -0
  5. package/dist/zenkit.min.css.map +1 -0
  6. package/package.json +41 -0
  7. package/scss/abstracts/_functions.scss +174 -0
  8. package/scss/abstracts/_mixins.scss +272 -0
  9. package/scss/abstracts/_variables.scss +216 -0
  10. package/scss/base/_reset.scss +130 -0
  11. package/scss/base/_root.scss +194 -0
  12. package/scss/base/_typography.scss +271 -0
  13. package/scss/components/_accordion.scss +200 -0
  14. package/scss/components/_affix.scss +278 -0
  15. package/scss/components/_alerts.scss +175 -0
  16. package/scss/components/_anchor.scss +438 -0
  17. package/scss/components/_autocomplete.scss +530 -0
  18. package/scss/components/_avatar.scss +256 -0
  19. package/scss/components/_backtop.scss +329 -0
  20. package/scss/components/_badges.scss +266 -0
  21. package/scss/components/_breadcrumb.scss +102 -0
  22. package/scss/components/_buttons.scss +340 -0
  23. package/scss/components/_calendar.scss +787 -0
  24. package/scss/components/_cards.scss +265 -0
  25. package/scss/components/_carousel.scss +306 -0
  26. package/scss/components/_cascader.scss +510 -0
  27. package/scss/components/_close-button.scss +106 -0
  28. package/scss/components/_colorpicker.scss +593 -0
  29. package/scss/components/_datepicker.scss +625 -0
  30. package/scss/components/_descriptions.scss +453 -0
  31. package/scss/components/_divider.scss +253 -0
  32. package/scss/components/_drawer.scss +485 -0
  33. package/scss/components/_dropdown.scss +323 -0
  34. package/scss/components/_empty.scss +321 -0
  35. package/scss/components/_floatbutton.scss +400 -0
  36. package/scss/components/_forms.scss +753 -0
  37. package/scss/components/_image.scss +497 -0
  38. package/scss/components/_inputnumber.scss +475 -0
  39. package/scss/components/_layout.scss +538 -0
  40. package/scss/components/_list-group.scss +227 -0
  41. package/scss/components/_list.scss +528 -0
  42. package/scss/components/_mentions.scss +479 -0
  43. package/scss/components/_menu.scss +510 -0
  44. package/scss/components/_message.scss +412 -0
  45. package/scss/components/_modal.scss +304 -0
  46. package/scss/components/_navbar.scss +329 -0
  47. package/scss/components/_notification.scss +499 -0
  48. package/scss/components/_offcanvas.scss +274 -0
  49. package/scss/components/_pagination.scss +176 -0
  50. package/scss/components/_placeholder.scss +237 -0
  51. package/scss/components/_popconfirm.scss +393 -0
  52. package/scss/components/_popover.scss +298 -0
  53. package/scss/components/_progress.scss +225 -0
  54. package/scss/components/_rating.scss +314 -0
  55. package/scss/components/_result.scss +383 -0
  56. package/scss/components/_segmented.scss +441 -0
  57. package/scss/components/_select.scss +412 -0
  58. package/scss/components/_spinners.scss +229 -0
  59. package/scss/components/_statistic.scss +336 -0
  60. package/scss/components/_steps.scss +343 -0
  61. package/scss/components/_tabs.scss +239 -0
  62. package/scss/components/_tag.scss +317 -0
  63. package/scss/components/_timeline.scss +341 -0
  64. package/scss/components/_timepicker.scss +468 -0
  65. package/scss/components/_toast.scss +279 -0
  66. package/scss/components/_tooltip.scss +305 -0
  67. package/scss/components/_tour.scss +488 -0
  68. package/scss/components/_transfer.scss +556 -0
  69. package/scss/components/_tree.scss +518 -0
  70. package/scss/components/_treeselect.scss +531 -0
  71. package/scss/components/_upload.scss +510 -0
  72. package/scss/components/_watermark.scss +314 -0
  73. package/scss/content/_figures.scss +38 -0
  74. package/scss/content/_images.scss +138 -0
  75. package/scss/content/_tables.scss +232 -0
  76. package/scss/layout/_container.scss +71 -0
  77. package/scss/layout/_grid.scss +258 -0
  78. package/scss/utilities/_animations.scss +494 -0
  79. package/scss/utilities/_borders.scss +246 -0
  80. package/scss/utilities/_colors.scss +194 -0
  81. package/scss/utilities/_display.scss +263 -0
  82. package/scss/utilities/_filters.scss +328 -0
  83. package/scss/utilities/_flex.scss +178 -0
  84. package/scss/utilities/_float.scss +70 -0
  85. package/scss/utilities/_grid-utils.scss +151 -0
  86. package/scss/utilities/_helpers.scss +479 -0
  87. package/scss/utilities/_interactions.scss +249 -0
  88. package/scss/utilities/_overflow.scss +204 -0
  89. package/scss/utilities/_position.scss +245 -0
  90. package/scss/utilities/_shadows.scss +67 -0
  91. package/scss/utilities/_sizing.scss +217 -0
  92. package/scss/utilities/_spacing.scss +207 -0
  93. package/scss/utilities/_text.scss +237 -0
  94. package/scss/utilities/_transforms.scss +368 -0
  95. package/scss/utilities/_visibility.scss +251 -0
  96. package/scss/zenkit.scss +121 -0
@@ -0,0 +1,412 @@
1
+ // ========================================
2
+ // ZenKit - Select Component
3
+ // Custom dropdown select styling
4
+ // ========================================
5
+
6
+ @use '../abstracts/variables' as *;
7
+
8
+ // ----------------------------------------
9
+ // Select Wrapper
10
+ // ----------------------------------------
11
+ .select {
12
+ position: relative;
13
+ display: inline-block;
14
+ width: 100%;
15
+ }
16
+
17
+ // ----------------------------------------
18
+ // Select Trigger (the visible button)
19
+ // ----------------------------------------
20
+ .select-trigger {
21
+ display: flex;
22
+ align-items: center;
23
+ justify-content: space-between;
24
+ width: 100%;
25
+ padding: 0.5rem 0.75rem;
26
+ font-size: 1rem;
27
+ font-weight: 400;
28
+ line-height: 1.5;
29
+ color: var(--text-primary);
30
+ background-color: var(--bg-primary);
31
+ border: 1px solid var(--border-color);
32
+ border-radius: $border-radius;
33
+ cursor: pointer;
34
+ transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
35
+
36
+ &:hover {
37
+ border-color: var(--primary);
38
+ }
39
+
40
+ &:focus,
41
+ &.is-open {
42
+ border-color: var(--primary);
43
+ outline: 0;
44
+ box-shadow: 0 0 0 0.2rem rgba(var(--primary-rgb), 0.25);
45
+ }
46
+
47
+ &.is-disabled {
48
+ background-color: var(--bg-secondary);
49
+ cursor: not-allowed;
50
+ opacity: 0.65;
51
+ }
52
+ }
53
+
54
+ .select-trigger-text {
55
+ flex: 1;
56
+ overflow: hidden;
57
+ text-overflow: ellipsis;
58
+ white-space: nowrap;
59
+ text-align: left;
60
+ }
61
+
62
+ .select-trigger-placeholder {
63
+ color: var(--text-muted);
64
+ }
65
+
66
+ .select-trigger-arrow {
67
+ display: flex;
68
+ align-items: center;
69
+ margin-left: 0.5rem;
70
+ color: var(--text-muted);
71
+ transition: transform 0.2s ease;
72
+
73
+ .is-open & {
74
+ transform: rotate(180deg);
75
+ }
76
+ }
77
+
78
+ .select-trigger-clear {
79
+ display: flex;
80
+ align-items: center;
81
+ margin-left: 0.25rem;
82
+ padding: 0.125rem;
83
+ color: var(--text-muted);
84
+ cursor: pointer;
85
+ border-radius: 50%;
86
+ transition: color 0.15s ease, background-color 0.15s ease;
87
+
88
+ &:hover {
89
+ color: var(--text-primary);
90
+ background-color: var(--bg-tertiary);
91
+ }
92
+ }
93
+
94
+ // ----------------------------------------
95
+ // Select Dropdown
96
+ // ----------------------------------------
97
+ .select-dropdown {
98
+ position: absolute;
99
+ top: 100%;
100
+ left: 0;
101
+ z-index: $z-dropdown;
102
+ display: none;
103
+ width: 100%;
104
+ max-height: 256px;
105
+ margin-top: 4px;
106
+ overflow-y: auto;
107
+ background-color: var(--bg-primary);
108
+ border: 1px solid var(--border-color);
109
+ border-radius: $border-radius;
110
+ box-shadow: $shadow-lg;
111
+
112
+ &.is-open {
113
+ display: block;
114
+ }
115
+
116
+ &.select-dropdown-up {
117
+ top: auto;
118
+ bottom: 100%;
119
+ margin-top: 0;
120
+ margin-bottom: 4px;
121
+ }
122
+ }
123
+
124
+ // ----------------------------------------
125
+ // Select Search
126
+ // ----------------------------------------
127
+ .select-search {
128
+ position: sticky;
129
+ top: 0;
130
+ padding: 0.5rem;
131
+ background-color: var(--bg-primary);
132
+ border-bottom: 1px solid var(--border-color);
133
+ }
134
+
135
+ .select-search-input {
136
+ width: 100%;
137
+ padding: 0.375rem 0.75rem;
138
+ font-size: 0.875rem;
139
+ border: 1px solid var(--border-color);
140
+ border-radius: $border-radius-sm;
141
+
142
+ &:focus {
143
+ border-color: var(--primary);
144
+ outline: 0;
145
+ box-shadow: 0 0 0 0.15rem rgba(var(--primary-rgb), 0.25);
146
+ }
147
+ }
148
+
149
+ // ----------------------------------------
150
+ // Select Options
151
+ // ----------------------------------------
152
+ .select-options {
153
+ padding: 0.25rem 0;
154
+ margin: 0;
155
+ list-style: none;
156
+ }
157
+
158
+ .select-option {
159
+ display: flex;
160
+ align-items: center;
161
+ padding: 0.5rem 0.75rem;
162
+ cursor: pointer;
163
+ transition: background-color 0.15s ease;
164
+
165
+ &:hover {
166
+ background-color: var(--bg-secondary);
167
+ }
168
+
169
+ &.is-selected {
170
+ color: var(--primary);
171
+ background-color: rgba(var(--primary-rgb), 0.1);
172
+ }
173
+
174
+ &.is-highlighted {
175
+ background-color: var(--bg-secondary);
176
+ }
177
+
178
+ &.is-disabled {
179
+ color: var(--text-muted);
180
+ cursor: not-allowed;
181
+ opacity: 0.5;
182
+
183
+ &:hover {
184
+ background-color: transparent;
185
+ }
186
+ }
187
+ }
188
+
189
+ .select-option-icon {
190
+ display: flex;
191
+ align-items: center;
192
+ margin-right: 0.5rem;
193
+ }
194
+
195
+ .select-option-text {
196
+ flex: 1;
197
+ overflow: hidden;
198
+ text-overflow: ellipsis;
199
+ white-space: nowrap;
200
+ }
201
+
202
+ .select-option-check {
203
+ display: none;
204
+ margin-left: 0.5rem;
205
+ color: var(--primary);
206
+
207
+ .is-selected & {
208
+ display: flex;
209
+ }
210
+ }
211
+
212
+ // ----------------------------------------
213
+ // Select Option Group
214
+ // ----------------------------------------
215
+ .select-group {
216
+ &:not(:first-child) {
217
+ border-top: 1px solid var(--border-color);
218
+ margin-top: 0.25rem;
219
+ padding-top: 0.25rem;
220
+ }
221
+ }
222
+
223
+ .select-group-label {
224
+ padding: 0.5rem 0.75rem;
225
+ font-size: 0.75rem;
226
+ font-weight: 600;
227
+ color: var(--text-muted);
228
+ text-transform: uppercase;
229
+ letter-spacing: 0.05em;
230
+ }
231
+
232
+ // ----------------------------------------
233
+ // Select Empty State
234
+ // ----------------------------------------
235
+ .select-empty {
236
+ padding: 1rem;
237
+ text-align: center;
238
+ color: var(--text-muted);
239
+ }
240
+
241
+ // ----------------------------------------
242
+ // Multi Select
243
+ // ----------------------------------------
244
+ .select-multiple .select-trigger {
245
+ flex-wrap: wrap;
246
+ gap: 0.25rem;
247
+ min-height: calc(2.5rem + 2px);
248
+ padding: 0.25rem 0.5rem;
249
+ }
250
+
251
+ .select-tags {
252
+ display: flex;
253
+ flex-wrap: wrap;
254
+ gap: 0.25rem;
255
+ flex: 1;
256
+ }
257
+
258
+ .select-tag {
259
+ display: inline-flex;
260
+ align-items: center;
261
+ gap: 0.25rem;
262
+ padding: 0.125rem 0.5rem;
263
+ font-size: 0.875rem;
264
+ background-color: var(--bg-tertiary);
265
+ border-radius: $border-radius-sm;
266
+ }
267
+
268
+ .select-tag-remove {
269
+ display: flex;
270
+ align-items: center;
271
+ padding: 0.125rem;
272
+ margin-left: 0.125rem;
273
+ margin-right: -0.25rem;
274
+ color: var(--text-muted);
275
+ cursor: pointer;
276
+ border-radius: 50%;
277
+ transition: color 0.15s ease, background-color 0.15s ease;
278
+
279
+ &:hover {
280
+ color: var(--danger);
281
+ background-color: rgba(var(--danger-rgb), 0.1);
282
+ }
283
+ }
284
+
285
+ .select-max-tag {
286
+ display: inline-flex;
287
+ align-items: center;
288
+ padding: 0.125rem 0.5rem;
289
+ font-size: 0.875rem;
290
+ color: var(--text-muted);
291
+ background-color: var(--bg-secondary);
292
+ border-radius: $border-radius-sm;
293
+ }
294
+
295
+ // ----------------------------------------
296
+ // Select Sizes
297
+ // ----------------------------------------
298
+ .select-sm .select-trigger {
299
+ padding: 0.25rem 0.5rem;
300
+ font-size: 0.875rem;
301
+ min-height: calc(1.875rem + 2px);
302
+ }
303
+
304
+ .select-sm .select-option {
305
+ padding: 0.375rem 0.5rem;
306
+ font-size: 0.875rem;
307
+ }
308
+
309
+ .select-lg .select-trigger {
310
+ padding: 0.75rem 1rem;
311
+ font-size: 1.125rem;
312
+ min-height: calc(3rem + 2px);
313
+ }
314
+
315
+ .select-lg .select-option {
316
+ padding: 0.625rem 1rem;
317
+ font-size: 1.125rem;
318
+ }
319
+
320
+ // ----------------------------------------
321
+ // Select Variants
322
+ // ----------------------------------------
323
+ // Borderless
324
+ .select-borderless .select-trigger {
325
+ border-color: transparent;
326
+ background-color: transparent;
327
+
328
+ &:hover,
329
+ &:focus,
330
+ &.is-open {
331
+ border-color: transparent;
332
+ background-color: var(--bg-secondary);
333
+ box-shadow: none;
334
+ }
335
+ }
336
+
337
+ // Filled
338
+ .select-filled .select-trigger {
339
+ border-color: transparent;
340
+ background-color: var(--bg-secondary);
341
+
342
+ &:hover {
343
+ background-color: var(--bg-tertiary);
344
+ }
345
+
346
+ &:focus,
347
+ &.is-open {
348
+ border-color: var(--primary);
349
+ background-color: var(--bg-primary);
350
+ }
351
+ }
352
+
353
+ // ----------------------------------------
354
+ // Select States
355
+ // ----------------------------------------
356
+ .select-error .select-trigger {
357
+ border-color: var(--danger);
358
+
359
+ &:focus,
360
+ &.is-open {
361
+ box-shadow: 0 0 0 0.2rem rgba(var(--danger-rgb), 0.25);
362
+ }
363
+ }
364
+
365
+ .select-warning .select-trigger {
366
+ border-color: var(--warning);
367
+
368
+ &:focus,
369
+ &.is-open {
370
+ box-shadow: 0 0 0 0.2rem rgba(var(--warning-rgb), 0.25);
371
+ }
372
+ }
373
+
374
+ .select-success .select-trigger {
375
+ border-color: var(--success);
376
+
377
+ &:focus,
378
+ &.is-open {
379
+ box-shadow: 0 0 0 0.2rem rgba(var(--success-rgb), 0.25);
380
+ }
381
+ }
382
+
383
+ // ----------------------------------------
384
+ // Select Loading
385
+ // ----------------------------------------
386
+ .select-loading .select-trigger-arrow {
387
+ animation: spin 1s linear infinite;
388
+ }
389
+
390
+ @keyframes spin {
391
+ from { transform: rotate(0deg); }
392
+ to { transform: rotate(360deg); }
393
+ }
394
+
395
+ // ----------------------------------------
396
+ // Virtual Scroll (for large lists)
397
+ // ----------------------------------------
398
+ .select-virtual {
399
+ .select-dropdown {
400
+ max-height: none;
401
+ }
402
+
403
+ .select-options {
404
+ position: relative;
405
+ }
406
+
407
+ .select-option {
408
+ position: absolute;
409
+ left: 0;
410
+ right: 0;
411
+ }
412
+ }
@@ -0,0 +1,229 @@
1
+ // ========================================
2
+ // ZenKit - Spinners
3
+ // ========================================
4
+
5
+ @use '../abstracts/variables' as *;
6
+
7
+ // ----------------------------------------
8
+ // Spinner Border (Default)
9
+ // ----------------------------------------
10
+ .spinner-border {
11
+ display: inline-block;
12
+ width: 2rem;
13
+ height: 2rem;
14
+ vertical-align: -0.125em;
15
+ border: 0.25em solid currentColor;
16
+ border-right-color: transparent;
17
+ border-radius: 50%;
18
+ animation: spinner-border 0.75s linear infinite;
19
+ }
20
+
21
+ @keyframes spinner-border {
22
+ to {
23
+ transform: rotate(360deg);
24
+ }
25
+ }
26
+
27
+ // ----------------------------------------
28
+ // Spinner Grow
29
+ // ----------------------------------------
30
+ .spinner-grow {
31
+ display: inline-block;
32
+ width: 2rem;
33
+ height: 2rem;
34
+ vertical-align: -0.125em;
35
+ background-color: currentColor;
36
+ border-radius: 50%;
37
+ opacity: 0;
38
+ animation: spinner-grow 0.75s linear infinite;
39
+ }
40
+
41
+ @keyframes spinner-grow {
42
+ 0% {
43
+ transform: scale(0);
44
+ opacity: 1;
45
+ }
46
+ 50% {
47
+ opacity: 1;
48
+ }
49
+ 100% {
50
+ transform: scale(1);
51
+ opacity: 0;
52
+ }
53
+ }
54
+
55
+ // ----------------------------------------
56
+ // Spinner Sizes
57
+ // ----------------------------------------
58
+ .spinner-border-sm {
59
+ width: 1rem;
60
+ height: 1rem;
61
+ border-width: 0.2em;
62
+ }
63
+
64
+ .spinner-grow-sm {
65
+ width: 1rem;
66
+ height: 1rem;
67
+ }
68
+
69
+ .spinner-border-lg {
70
+ width: 3rem;
71
+ height: 3rem;
72
+ border-width: 0.3em;
73
+ }
74
+
75
+ .spinner-grow-lg {
76
+ width: 3rem;
77
+ height: 3rem;
78
+ }
79
+
80
+ // ----------------------------------------
81
+ // Spinner Colors
82
+ // ----------------------------------------
83
+ .spinner-primary {
84
+ color: var(--primary);
85
+ }
86
+
87
+ .spinner-secondary {
88
+ color: var(--gray-600);
89
+ }
90
+
91
+ .spinner-success {
92
+ color: var(--success);
93
+ }
94
+
95
+ .spinner-danger {
96
+ color: var(--danger);
97
+ }
98
+
99
+ .spinner-warning {
100
+ color: var(--warning);
101
+ }
102
+
103
+ .spinner-info {
104
+ color: var(--info);
105
+ }
106
+
107
+ .spinner-light {
108
+ color: var(--gray-100);
109
+ }
110
+
111
+ .spinner-dark {
112
+ color: var(--gray-800);
113
+ }
114
+
115
+ .spinner-white {
116
+ color: var(--white);
117
+ }
118
+
119
+ // ----------------------------------------
120
+ // Dots Spinner
121
+ // ----------------------------------------
122
+ .spinner-dots {
123
+ display: inline-flex;
124
+ gap: 0.25rem;
125
+
126
+ span {
127
+ width: 0.5rem;
128
+ height: 0.5rem;
129
+ background-color: currentColor;
130
+ border-radius: 50%;
131
+ animation: spinner-dots 1.4s infinite ease-in-out both;
132
+
133
+ &:nth-child(1) {
134
+ animation-delay: -0.32s;
135
+ }
136
+
137
+ &:nth-child(2) {
138
+ animation-delay: -0.16s;
139
+ }
140
+ }
141
+ }
142
+
143
+ @keyframes spinner-dots {
144
+ 0%, 80%, 100% {
145
+ transform: scale(0);
146
+ }
147
+ 40% {
148
+ transform: scale(1);
149
+ }
150
+ }
151
+
152
+ // ----------------------------------------
153
+ // Pulse Spinner
154
+ // ----------------------------------------
155
+ .spinner-pulse {
156
+ display: inline-block;
157
+ width: 2rem;
158
+ height: 2rem;
159
+ background-color: currentColor;
160
+ border-radius: 50%;
161
+ animation: spinner-pulse 1s ease-in-out infinite;
162
+ }
163
+
164
+ @keyframes spinner-pulse {
165
+ 0% {
166
+ transform: scale(0);
167
+ opacity: 1;
168
+ }
169
+ 100% {
170
+ transform: scale(1);
171
+ opacity: 0;
172
+ }
173
+ }
174
+
175
+ // ----------------------------------------
176
+ // Ring Spinner
177
+ // ----------------------------------------
178
+ .spinner-ring {
179
+ display: inline-block;
180
+ width: 2rem;
181
+ height: 2rem;
182
+ border: 3px solid var(--gray-200);
183
+ border-top-color: currentColor;
184
+ border-radius: 50%;
185
+ animation: spinner-border 0.75s linear infinite;
186
+ }
187
+
188
+ // ----------------------------------------
189
+ // Loading Overlay
190
+ // ----------------------------------------
191
+ .loading-overlay {
192
+ position: fixed;
193
+ top: 0;
194
+ left: 0;
195
+ right: 0;
196
+ bottom: 0;
197
+ display: flex;
198
+ align-items: center;
199
+ justify-content: center;
200
+ background-color: rgba(0, 0, 0, 0.5);
201
+ z-index: var(--z-modal);
202
+ }
203
+
204
+ .loading-overlay-light {
205
+ background-color: rgba(255, 255, 255, 0.8);
206
+ }
207
+
208
+ // ----------------------------------------
209
+ // Button Spinner
210
+ // ----------------------------------------
211
+ .btn .spinner-border,
212
+ .btn .spinner-grow {
213
+ width: 1rem;
214
+ height: 1rem;
215
+ border-width: 0.15em;
216
+ vertical-align: middle;
217
+ }
218
+
219
+ .btn-sm .spinner-border,
220
+ .btn-sm .spinner-grow {
221
+ width: 0.75rem;
222
+ height: 0.75rem;
223
+ }
224
+
225
+ .btn-lg .spinner-border,
226
+ .btn-lg .spinner-grow {
227
+ width: 1.25rem;
228
+ height: 1.25rem;
229
+ }