zenkit-css 1.2.2 → 1.3.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 (82) hide show
  1. package/dist/zenkit.css +9481 -0
  2. package/dist/zenkit.css.map +1 -1
  3. package/dist/zenkit.min.css +1 -1
  4. package/dist/zenkit.min.css.map +1 -1
  5. package/package.json +1 -1
  6. package/scss/components/_actionicon.scss +141 -0
  7. package/scss/components/_angleslider.scss +75 -0
  8. package/scss/components/_appbar.scss +96 -0
  9. package/scss/components/_appshell.scss +137 -0
  10. package/scss/components/_backdrop.scss +66 -0
  11. package/scss/components/_backgroundimage.scss +81 -0
  12. package/scss/components/_blockquote.scss +70 -0
  13. package/scss/components/_cards.scss +367 -0
  14. package/scss/components/_center.scss +33 -0
  15. package/scss/components/_chart.scss +100 -0
  16. package/scss/components/_checkboxcard.scss +105 -0
  17. package/scss/components/_checkboxgroup.scss +45 -0
  18. package/scss/components/_collapse.scss +76 -0
  19. package/scss/components/_colorinput.scss +103 -0
  20. package/scss/components/_colorswatch.scss +94 -0
  21. package/scss/components/_combobox.scss +157 -0
  22. package/scss/components/_contextmenu.scss +150 -0
  23. package/scss/components/_copybutton.scss +117 -0
  24. package/scss/components/_datagrid.scss +200 -0
  25. package/scss/components/_datalist.scss +104 -0
  26. package/scss/components/_daterange.scss +614 -0
  27. package/scss/components/_datetimepicker.scss +123 -0
  28. package/scss/components/_dialog.scss +176 -0
  29. package/scss/components/_dropzone.scss +159 -0
  30. package/scss/components/_filebutton.scss +64 -0
  31. package/scss/components/_fileinput.scss +157 -0
  32. package/scss/components/_floatcomponent.scss +128 -0
  33. package/scss/components/_floatingindicator.scss +49 -0
  34. package/scss/components/_forms.scss +327 -0
  35. package/scss/components/_gauge.scss +143 -0
  36. package/scss/components/_group.scss +100 -0
  37. package/scss/components/_heading.scss +143 -0
  38. package/scss/components/_highlight.scss +60 -0
  39. package/scss/components/_imagelist.scss +657 -0
  40. package/scss/components/_indicator.scss +171 -0
  41. package/scss/components/_infinitescroll.scss +53 -0
  42. package/scss/components/_jsoninput.scss +124 -0
  43. package/scss/components/_label.scss +77 -0
  44. package/scss/components/_loadingoverlay.scss +80 -0
  45. package/scss/components/_mark.scss +72 -0
  46. package/scss/components/_monthpicker.scss +141 -0
  47. package/scss/components/_multiselect.scss +192 -0
  48. package/scss/components/_navlink.scss +127 -0
  49. package/scss/components/_overlay.scss +97 -0
  50. package/scss/components/_paper.scss +98 -0
  51. package/scss/components/_pill.scss +141 -0
  52. package/scss/components/_radiocard.scss +122 -0
  53. package/scss/components/_rangeslider.scss +146 -0
  54. package/scss/components/_richtexteditor.scss +222 -0
  55. package/scss/components/_ringprogress.scss +101 -0
  56. package/scss/components/_scrollshadow.scss +152 -0
  57. package/scss/components/_semicircleprogress.scss +116 -0
  58. package/scss/components/_separator.scss +126 -0
  59. package/scss/components/_sheet.scss +612 -0
  60. package/scss/components/_simplegrid.scss +129 -0
  61. package/scss/components/_skipnavlink.scss +51 -0
  62. package/scss/components/_slider.scss +199 -0
  63. package/scss/components/_snippet.scss +576 -0
  64. package/scss/components/_sortable.scss +115 -0
  65. package/scss/components/_sparkline.scss +124 -0
  66. package/scss/components/_splitbutton.scss +153 -0
  67. package/scss/components/_spoiler.scss +73 -0
  68. package/scss/components/_stepper.scss +153 -0
  69. package/scss/components/_tableofcontents.scss +107 -0
  70. package/scss/components/_tabs.scss +379 -0
  71. package/scss/components/_tagsinput.scss +158 -0
  72. package/scss/components/_textcomponent.scss +183 -0
  73. package/scss/components/_themeicon.scss +121 -0
  74. package/scss/components/_toast.scss +335 -0
  75. package/scss/components/_togglegroup.scss +137 -0
  76. package/scss/components/_toolbar.scss +140 -0
  77. package/scss/components/_unstyledbutton.scss +43 -0
  78. package/scss/components/_user.scss +118 -0
  79. package/scss/components/_virtuallist.scss +118 -0
  80. package/scss/components/_yearpicker.scss +145 -0
  81. package/scss/utilities/_accessibility.scss +470 -0
  82. package/scss/zenkit.scss +80 -0
@@ -0,0 +1,470 @@
1
+ // ========================================
2
+ // ZenKit - Accessibility Utilities
3
+ // ========================================
4
+
5
+ @use '../abstracts/variables' as *;
6
+
7
+ // ----------------------------------------
8
+ // Reduced Motion
9
+ // ----------------------------------------
10
+ // Disable animations and transitions for users who prefer reduced motion
11
+
12
+ @media (prefers-reduced-motion: reduce) {
13
+ *,
14
+ *::before,
15
+ *::after {
16
+ animation-duration: 0.01ms !important;
17
+ animation-iteration-count: 1 !important;
18
+ transition-duration: 0.01ms !important;
19
+ scroll-behavior: auto !important;
20
+ }
21
+
22
+ // Specific component animations to disable
23
+ .spinner,
24
+ .spinner-border,
25
+ .spinner-grow,
26
+ .toast-progress,
27
+ .progress-bar-animated,
28
+ .skeleton,
29
+ .skeleton-wave,
30
+ .placeholder-wave,
31
+ .carousel-item,
32
+ .collapse,
33
+ .modal,
34
+ .offcanvas,
35
+ .dropdown-menu,
36
+ .tooltip,
37
+ .popover,
38
+ .toast,
39
+ .alert,
40
+ .accordion-collapse {
41
+ animation: none !important;
42
+ transition: none !important;
43
+ }
44
+
45
+ // Disable transform animations
46
+ .card-hover:hover,
47
+ .card-clickable:hover,
48
+ .btn:hover,
49
+ .nav-link:hover {
50
+ transform: none !important;
51
+ }
52
+ }
53
+
54
+ // Class to force reduced motion
55
+ .reduce-motion {
56
+ animation: none !important;
57
+ transition: none !important;
58
+ }
59
+
60
+ // Class to respect motion preference
61
+ .motion-safe {
62
+ @media (prefers-reduced-motion: reduce) {
63
+ animation: none !important;
64
+ transition: none !important;
65
+ }
66
+ }
67
+
68
+ // ----------------------------------------
69
+ // Screen Reader Only
70
+ // ----------------------------------------
71
+ .sr-only,
72
+ .visually-hidden {
73
+ position: absolute !important;
74
+ width: 1px !important;
75
+ height: 1px !important;
76
+ padding: 0 !important;
77
+ margin: -1px !important;
78
+ overflow: hidden !important;
79
+ clip: rect(0, 0, 0, 0) !important;
80
+ white-space: nowrap !important;
81
+ border: 0 !important;
82
+ }
83
+
84
+ // Focusable visually hidden (show on focus)
85
+ .sr-only-focusable:not(:focus):not(:focus-within),
86
+ .visually-hidden-focusable:not(:focus):not(:focus-within) {
87
+ position: absolute !important;
88
+ width: 1px !important;
89
+ height: 1px !important;
90
+ padding: 0 !important;
91
+ margin: -1px !important;
92
+ overflow: hidden !important;
93
+ clip: rect(0, 0, 0, 0) !important;
94
+ white-space: nowrap !important;
95
+ border: 0 !important;
96
+ }
97
+
98
+ // ----------------------------------------
99
+ // Skip Links
100
+ // ----------------------------------------
101
+ .skip-link {
102
+ position: absolute;
103
+ top: -100%;
104
+ left: 0;
105
+ z-index: 9999;
106
+ padding: 0.75rem 1.5rem;
107
+ font-weight: $font-weight-semibold;
108
+ color: var(--white);
109
+ background-color: var(--primary);
110
+ text-decoration: none;
111
+ border-radius: 0 0 var(--radius) 0;
112
+ transition: top 0.2s ease-in-out;
113
+
114
+ &:focus {
115
+ top: 0;
116
+ outline: none;
117
+ }
118
+ }
119
+
120
+ // ----------------------------------------
121
+ // Focus Styles
122
+ // ----------------------------------------
123
+ // Default focus visible
124
+ :focus-visible {
125
+ outline: 2px solid var(--primary);
126
+ outline-offset: 2px;
127
+ }
128
+
129
+ // Focus ring utility
130
+ .focus-ring {
131
+ &:focus {
132
+ outline: none;
133
+ box-shadow: 0 0 0 3px rgba($primary, 0.25);
134
+ }
135
+
136
+ &:focus-visible {
137
+ outline: none;
138
+ box-shadow: 0 0 0 3px rgba($primary, 0.25);
139
+ }
140
+ }
141
+
142
+ // Remove focus outline (use with caution)
143
+ .focus-none {
144
+ &:focus {
145
+ outline: none;
146
+ box-shadow: none;
147
+ }
148
+ }
149
+
150
+ // ----------------------------------------
151
+ // High Contrast Mode
152
+ // ----------------------------------------
153
+ @media (prefers-contrast: more) {
154
+ :root {
155
+ --border: #000;
156
+ --border-dark: #000;
157
+ }
158
+
159
+ // Increase border widths
160
+ .btn,
161
+ .form-control,
162
+ .form-select,
163
+ .card,
164
+ .alert,
165
+ .badge,
166
+ .modal-content {
167
+ border-width: 2px;
168
+ }
169
+
170
+ // Ensure sufficient contrast
171
+ .text-muted {
172
+ color: var(--gray-700) !important;
173
+ }
174
+
175
+ // Make focus states more visible
176
+ :focus-visible {
177
+ outline-width: 3px;
178
+ outline-style: solid;
179
+ }
180
+
181
+ // Increase button contrast
182
+ .btn-outline-primary,
183
+ .btn-outline-secondary,
184
+ .btn-outline-success,
185
+ .btn-outline-danger,
186
+ .btn-outline-warning,
187
+ .btn-outline-info {
188
+ border-width: 2px;
189
+ }
190
+ }
191
+
192
+ // Forced colors mode (Windows High Contrast)
193
+ @media (forced-colors: active) {
194
+ .btn {
195
+ border: 2px solid ButtonText;
196
+ }
197
+
198
+ .form-control,
199
+ .form-select {
200
+ border: 2px solid ButtonText;
201
+ }
202
+
203
+ :focus-visible {
204
+ outline: 3px solid Highlight;
205
+ }
206
+
207
+ .badge {
208
+ border: 1px solid currentColor;
209
+ }
210
+ }
211
+
212
+ // ----------------------------------------
213
+ // Color Blind Friendly
214
+ // ----------------------------------------
215
+ // Add patterns/icons in addition to color
216
+ .status-indicator {
217
+ display: inline-flex;
218
+ align-items: center;
219
+ gap: 0.375rem;
220
+
221
+ &::before {
222
+ content: "";
223
+ display: inline-block;
224
+ width: 0.5rem;
225
+ height: 0.5rem;
226
+ border-radius: 50%;
227
+ background-color: currentColor;
228
+ }
229
+ }
230
+
231
+ .status-success::before {
232
+ background-color: var(--success);
233
+ }
234
+
235
+ .status-danger::before {
236
+ background-color: var(--danger);
237
+ }
238
+
239
+ .status-warning::before {
240
+ background-color: var(--warning);
241
+ }
242
+
243
+ .status-info::before {
244
+ background-color: var(--info);
245
+ }
246
+
247
+ // ----------------------------------------
248
+ // Touch Target Sizes
249
+ // ----------------------------------------
250
+ // Ensure minimum 44x44px touch targets
251
+ .touch-target {
252
+ min-width: 44px;
253
+ min-height: 44px;
254
+ }
255
+
256
+ .touch-target-sm {
257
+ min-width: 36px;
258
+ min-height: 36px;
259
+ }
260
+
261
+ .touch-target-lg {
262
+ min-width: 48px;
263
+ min-height: 48px;
264
+ }
265
+
266
+ // ----------------------------------------
267
+ // Print Styles
268
+ // ----------------------------------------
269
+ @media print {
270
+ // Hide non-essential elements
271
+ .no-print,
272
+ .navbar,
273
+ .sidebar,
274
+ .footer,
275
+ .btn,
276
+ .modal,
277
+ .toast,
278
+ .tooltip,
279
+ .popover,
280
+ .dropdown-menu,
281
+ .offcanvas,
282
+ .scroll-to-top,
283
+ .cookie-banner,
284
+ .chat-widget,
285
+ nav,
286
+ aside {
287
+ display: none !important;
288
+ }
289
+
290
+ // Reset backgrounds and shadows
291
+ *,
292
+ *::before,
293
+ *::after {
294
+ background: transparent !important;
295
+ box-shadow: none !important;
296
+ text-shadow: none !important;
297
+ }
298
+
299
+ // Ensure text is readable
300
+ body {
301
+ font-size: 12pt;
302
+ line-height: 1.5;
303
+ color: #000 !important;
304
+ }
305
+
306
+ // Links
307
+ a,
308
+ a:visited {
309
+ color: #000 !important;
310
+ text-decoration: underline;
311
+ }
312
+
313
+ // Show URLs after links
314
+ a[href]::after {
315
+ content: " (" attr(href) ")";
316
+ font-size: 0.8em;
317
+ color: #666;
318
+ }
319
+
320
+ // Don't show URL for internal links or javascript
321
+ a[href^="#"]::after,
322
+ a[href^="javascript:"]::after {
323
+ content: "";
324
+ }
325
+
326
+ // Abbreviations
327
+ abbr[title]::after {
328
+ content: " (" attr(title) ")";
329
+ }
330
+
331
+ // Images
332
+ img {
333
+ max-width: 100% !important;
334
+ page-break-inside: avoid;
335
+ }
336
+
337
+ // Tables
338
+ table {
339
+ border-collapse: collapse !important;
340
+ }
341
+
342
+ th,
343
+ td {
344
+ border: 1px solid #ddd !important;
345
+ padding: 0.5rem !important;
346
+ }
347
+
348
+ thead {
349
+ display: table-header-group;
350
+ }
351
+
352
+ tr {
353
+ page-break-inside: avoid;
354
+ }
355
+
356
+ // Headings
357
+ h1, h2, h3, h4, h5, h6 {
358
+ page-break-after: avoid;
359
+ page-break-inside: avoid;
360
+ }
361
+
362
+ // Paragraphs
363
+ p {
364
+ orphans: 3;
365
+ widows: 3;
366
+ }
367
+
368
+ // Cards
369
+ .card {
370
+ border: 1px solid #ddd !important;
371
+ page-break-inside: avoid;
372
+ }
373
+
374
+ // Alerts
375
+ .alert {
376
+ border: 1px solid currentColor !important;
377
+ page-break-inside: avoid;
378
+ }
379
+
380
+ // Code blocks
381
+ pre,
382
+ code {
383
+ border: 1px solid #ddd !important;
384
+ background-color: #f5f5f5 !important;
385
+ color: #000 !important;
386
+ }
387
+
388
+ // Page breaks
389
+ .page-break-before {
390
+ page-break-before: always;
391
+ }
392
+
393
+ .page-break-after {
394
+ page-break-after: always;
395
+ }
396
+
397
+ .page-break-avoid {
398
+ page-break-inside: avoid;
399
+ }
400
+ }
401
+
402
+ // Print-specific utilities
403
+ .print-only {
404
+ display: none !important;
405
+
406
+ @media print {
407
+ display: block !important;
408
+ }
409
+ }
410
+
411
+ .print-inline {
412
+ display: none !important;
413
+
414
+ @media print {
415
+ display: inline !important;
416
+ }
417
+ }
418
+
419
+ // ----------------------------------------
420
+ // Dark Mode Preference
421
+ // ----------------------------------------
422
+ @media (prefers-color-scheme: dark) {
423
+ .auto-dark {
424
+ // Apply dark theme variables
425
+ --bg: var(--gray-900);
426
+ --bg-muted: var(--gray-800);
427
+ --text: var(--gray-100);
428
+ --text-muted: var(--gray-400);
429
+ --border: var(--gray-700);
430
+ }
431
+ }
432
+
433
+ // ----------------------------------------
434
+ // Text Spacing (for dyslexia)
435
+ // ----------------------------------------
436
+ .text-spacing-relaxed {
437
+ letter-spacing: 0.12em;
438
+ word-spacing: 0.16em;
439
+ line-height: 1.8;
440
+ }
441
+
442
+ // ----------------------------------------
443
+ // ARIA Live Regions
444
+ // ----------------------------------------
445
+ .live-region {
446
+ position: absolute;
447
+ width: 1px;
448
+ height: 1px;
449
+ margin: -1px;
450
+ padding: 0;
451
+ overflow: hidden;
452
+ clip: rect(0, 0, 0, 0);
453
+ white-space: nowrap;
454
+ border: 0;
455
+ }
456
+
457
+ // ----------------------------------------
458
+ // Keyboard Navigation Indicator
459
+ // ----------------------------------------
460
+ .keyboard-nav-active {
461
+ :focus:not(:focus-visible) {
462
+ outline: none;
463
+ box-shadow: none;
464
+ }
465
+
466
+ :focus-visible {
467
+ outline: 2px solid var(--primary);
468
+ outline-offset: 2px;
469
+ }
470
+ }
package/scss/zenkit.scss CHANGED
@@ -116,6 +116,85 @@
116
116
  @use 'components/fieldset';
117
117
  @use 'components/pininput';
118
118
  @use 'components/editable';
119
+ @use 'components/sheet';
120
+ @use 'components/daterange';
121
+ @use 'components/snippet';
122
+ @use 'components/imagelist';
123
+
124
+ // ----------------------------------------
125
+ // 5b. Additional Components (Phase 5-7)
126
+ // ----------------------------------------
127
+ @use 'components/angleslider';
128
+ @use 'components/appbar';
129
+ @use 'components/appshell';
130
+ @use 'components/backdrop';
131
+ @use 'components/blockquote';
132
+ @use 'components/center';
133
+ @use 'components/chart';
134
+ @use 'components/checkboxcard';
135
+ @use 'components/checkboxgroup';
136
+ @use 'components/collapse';
137
+ @use 'components/colorinput';
138
+ @use 'components/colorswatch';
139
+ @use 'components/combobox';
140
+ @use 'components/contextmenu';
141
+ @use 'components/copybutton';
142
+ @use 'components/datagrid';
143
+ @use 'components/datetimepicker';
144
+ @use 'components/dialog';
145
+ @use 'components/dropzone';
146
+ @use 'components/fileinput';
147
+ @use 'components/gauge';
148
+ @use 'components/heading';
149
+ @use 'components/highlight';
150
+ @use 'components/indicator';
151
+ @use 'components/infinitescroll';
152
+ @use 'components/jsoninput';
153
+ @use 'components/label';
154
+ @use 'components/loadingoverlay';
155
+ @use 'components/monthpicker';
156
+ @use 'components/multiselect';
157
+ @use 'components/navlink';
158
+ @use 'components/paper';
159
+ @use 'components/radiocard';
160
+ @use 'components/rangeslider';
161
+ @use 'components/richtexteditor';
162
+ @use 'components/ringprogress';
163
+ @use 'components/scrollshadow';
164
+ @use 'components/semicircleprogress';
165
+ @use 'components/separator';
166
+ @use 'components/simplegrid';
167
+ @use 'components/slider';
168
+ @use 'components/sortable';
169
+ @use 'components/sparkline';
170
+ @use 'components/splitbutton';
171
+ @use 'components/spoiler';
172
+ @use 'components/stepper';
173
+ @use 'components/tableofcontents';
174
+ @use 'components/tagsinput';
175
+ @use 'components/textcomponent';
176
+ @use 'components/themeicon';
177
+ @use 'components/togglegroup';
178
+ @use 'components/toolbar';
179
+ @use 'components/virtuallist';
180
+ @use 'components/yearpicker';
181
+
182
+ // ----------------------------------------
183
+ // 5c. Phase 7 Components (Library Parity)
184
+ // ----------------------------------------
185
+ @use 'components/group';
186
+ @use 'components/overlay';
187
+ @use 'components/actionicon';
188
+ @use 'components/unstyledbutton';
189
+ @use 'components/filebutton';
190
+ @use 'components/floatingindicator';
191
+ @use 'components/pill';
192
+ @use 'components/mark';
193
+ @use 'components/user';
194
+ @use 'components/datalist';
195
+ @use 'components/backgroundimage';
196
+ @use 'components/skipnavlink';
197
+ @use 'components/floatcomponent';
119
198
 
120
199
  // ----------------------------------------
121
200
  // 6. Components - JavaScript Enhanced
@@ -150,3 +229,4 @@
150
229
  @use 'utilities/animations';
151
230
  @use 'utilities/transforms';
152
231
  @use 'utilities/filters';
232
+ @use 'utilities/accessibility';