mljr-css 1.0.14 → 1.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 (54) hide show
  1. package/dist/mljr.css +5573 -2766
  2. package/dist/mljr.min.css +2 -3
  3. package/package.json +1 -1
  4. package/src/components/alert-dialog.css +129 -0
  5. package/src/components/alert.css +41 -22
  6. package/src/components/animated-headline.css +118 -0
  7. package/src/components/audio-visualizer.css +96 -0
  8. package/src/components/autocomplete.css +143 -0
  9. package/src/components/avatar.css +66 -0
  10. package/src/components/badge.css +82 -41
  11. package/src/components/breadcrumb.css +3 -0
  12. package/src/components/button.css +80 -58
  13. package/src/components/calendar.css +169 -0
  14. package/src/components/card.css +139 -92
  15. package/src/components/chart.css +194 -0
  16. package/src/components/checkbox.css +1 -1
  17. package/src/components/chip.css +33 -18
  18. package/src/components/context-menu.css +118 -0
  19. package/src/components/cookie-banner.css +285 -0
  20. package/src/components/diff-viewer.css +199 -0
  21. package/src/components/dock.css +211 -0
  22. package/src/components/drop-zone.css +257 -0
  23. package/src/components/footer.css +51 -5
  24. package/src/components/gauge.css +63 -0
  25. package/src/components/image-compare.css +141 -0
  26. package/src/components/infinite-scroll.css +36 -0
  27. package/src/components/inview.css +118 -0
  28. package/src/components/lazy-image.css +60 -0
  29. package/src/components/legal-page.css +346 -0
  30. package/src/components/map-embed.css +92 -0
  31. package/src/components/marquee.css +112 -0
  32. package/src/components/navbar.css +357 -0
  33. package/src/components/navigation-rail.css +220 -0
  34. package/src/components/notification-center.css +306 -0
  35. package/src/components/number-input.css +134 -0
  36. package/src/components/number-ticker.css +65 -0
  37. package/src/components/pagination.css +59 -0
  38. package/src/components/pdf-viewer.css +163 -0
  39. package/src/components/pin-input.css +153 -0
  40. package/src/components/resizable.css +82 -0
  41. package/src/components/rich-text-editor.css +216 -0
  42. package/src/components/table-of-content.css +107 -0
  43. package/src/components/table.css +116 -0
  44. package/src/components/tabs.css +93 -3
  45. package/src/components/toast.css +30 -0
  46. package/src/components/tooltip.css +8 -0
  47. package/src/components/tree-view.css +270 -0
  48. package/src/components/turnstile.css +113 -0
  49. package/src/components/video-player.css +266 -0
  50. package/src/index.css +35 -1
  51. package/src/layout/footer.css +2 -2
  52. package/src/layout/navbar.css +187 -113
  53. package/src/layout/sidebar.css +27 -0
  54. package/src/themes/variables.css +146 -97
@@ -0,0 +1,211 @@
1
+ /* ============================================
2
+ MLJR CSS Framework - Dock Component
3
+ Claymorphism: Bottom navigation dock (mobile/macOS style)
4
+ ============================================ */
5
+
6
+ .mljr-dock {
7
+ display: flex;
8
+ align-items: center;
9
+ justify-content: center;
10
+ gap: var(--mljr-space-2);
11
+ padding: var(--mljr-space-2) var(--mljr-space-4);
12
+ background: linear-gradient(
13
+ 145deg,
14
+ var(--mljr-bg) 0%,
15
+ var(--mljr-bg-secondary) 100%
16
+ );
17
+ border-radius: var(--mljr-radius-2xl);
18
+ box-shadow: var(--mljr-clay-shadow-lg);
19
+ border: 1px solid var(--mljr-frosted-border);
20
+ backdrop-filter: blur(12px);
21
+ -webkit-backdrop-filter: blur(12px);
22
+ }
23
+
24
+ /* Fixed bottom positioning */
25
+ .mljr-dock-fixed {
26
+ position: fixed;
27
+ bottom: var(--mljr-space-4);
28
+ left: 50%;
29
+ transform: translateX(-50%);
30
+ z-index: 100;
31
+ max-width: calc(100vw - var(--mljr-space-8));
32
+ }
33
+
34
+ /* Frosted glass variant */
35
+ .mljr-dock-frosted {
36
+ background: rgba(255, 255, 255, 0.7);
37
+ }
38
+
39
+ .dark .mljr-dock-frosted {
40
+ background: rgba(28, 25, 23, 0.7);
41
+ }
42
+
43
+ /* Full width variant */
44
+ .mljr-dock-full {
45
+ border-radius: 0;
46
+ width: 100%;
47
+ justify-content: space-around;
48
+ }
49
+
50
+ /* Dock item */
51
+ .mljr-dock-item {
52
+ display: flex;
53
+ flex-direction: column;
54
+ align-items: center;
55
+ justify-content: center;
56
+ gap: var(--mljr-space-1);
57
+ padding: var(--mljr-space-2) var(--mljr-space-3);
58
+ border-radius: var(--mljr-radius-lg);
59
+ cursor: pointer;
60
+ text-decoration: none;
61
+ color: var(--mljr-text-secondary);
62
+ background: transparent;
63
+ border: none;
64
+ font-family: inherit;
65
+ transition: all var(--mljr-transition-fast);
66
+ position: relative;
67
+ min-width: 52px;
68
+ }
69
+
70
+ .mljr-dock-item:hover {
71
+ background: linear-gradient(
72
+ 145deg,
73
+ var(--mljr-bg-secondary) 0%,
74
+ var(--mljr-bg-tertiary) 100%
75
+ );
76
+ color: var(--mljr-text);
77
+ box-shadow: var(--mljr-clay-shadow-sm);
78
+ transform: translateY(-4px) scale(1.08);
79
+ }
80
+
81
+ .mljr-dock-item:active {
82
+ transform: translateY(-2px) scale(1.04);
83
+ }
84
+
85
+ /* Active state */
86
+ .mljr-dock-item-active {
87
+ color: var(--mljr-primary-600);
88
+ }
89
+
90
+ .mljr-dock-item-active .mljr-dock-icon-wrapper {
91
+ background: linear-gradient(
92
+ 145deg,
93
+ var(--mljr-primary-50) 0%,
94
+ var(--mljr-primary-100) 100%
95
+ );
96
+ box-shadow: var(--mljr-clay-shadow-sm);
97
+ }
98
+
99
+ .dark .mljr-dock-item-active {
100
+ color: var(--mljr-primary-400);
101
+ }
102
+
103
+ .dark .mljr-dock-item-active .mljr-dock-icon-wrapper {
104
+ background: linear-gradient(
105
+ 145deg,
106
+ rgba(249, 115, 22, 0.2) 0%,
107
+ rgba(249, 115, 22, 0.1) 100%
108
+ );
109
+ }
110
+
111
+ /* Active dot indicator */
112
+ .mljr-dock-item-active::after {
113
+ content: '';
114
+ position: absolute;
115
+ bottom: 2px;
116
+ left: 50%;
117
+ transform: translateX(-50%);
118
+ width: 4px;
119
+ height: 4px;
120
+ background: var(--mljr-primary-500);
121
+ border-radius: var(--mljr-radius-full);
122
+ }
123
+
124
+ /* Icon wrapper */
125
+ .mljr-dock-icon-wrapper {
126
+ display: flex;
127
+ align-items: center;
128
+ justify-content: center;
129
+ width: 32px;
130
+ height: 32px;
131
+ border-radius: var(--mljr-radius-md);
132
+ transition: all var(--mljr-transition-fast);
133
+ }
134
+
135
+ /* Item label */
136
+ .mljr-dock-label {
137
+ font-size: 10px;
138
+ font-weight: 500;
139
+ line-height: 1;
140
+ white-space: nowrap;
141
+ }
142
+
143
+ /* Badge */
144
+ .mljr-dock-badge {
145
+ position: absolute;
146
+ top: 4px;
147
+ right: 4px;
148
+ background: var(--mljr-error);
149
+ color: white;
150
+ font-size: 10px;
151
+ font-weight: 700;
152
+ min-width: 16px;
153
+ height: 16px;
154
+ border-radius: var(--mljr-radius-full);
155
+ display: flex;
156
+ align-items: center;
157
+ justify-content: center;
158
+ padding: 0 4px;
159
+ line-height: 1;
160
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
161
+ }
162
+
163
+ /* Dock without labels */
164
+ .mljr-dock-no-labels .mljr-dock-label {
165
+ display: none;
166
+ }
167
+
168
+ .mljr-dock-no-labels .mljr-dock-item-active::after {
169
+ bottom: 4px;
170
+ }
171
+
172
+ /* Dock sizes */
173
+ .mljr-dock-sm .mljr-dock-icon-wrapper {
174
+ width: 24px;
175
+ height: 24px;
176
+ }
177
+
178
+ .mljr-dock-sm .mljr-dock-item {
179
+ min-width: 40px;
180
+ padding: var(--mljr-space-1) var(--mljr-space-2);
181
+ }
182
+
183
+ .mljr-dock-lg .mljr-dock-icon-wrapper {
184
+ width: 40px;
185
+ height: 40px;
186
+ }
187
+
188
+ .mljr-dock-lg .mljr-dock-item {
189
+ min-width: 64px;
190
+ padding: var(--mljr-space-3) var(--mljr-space-4);
191
+ }
192
+
193
+ /* Dock divider */
194
+ .mljr-dock-divider {
195
+ width: 1px;
196
+ height: 40px;
197
+ background: var(--mljr-border);
198
+ border-radius: var(--mljr-radius-full);
199
+ flex-shrink: 0;
200
+ margin: 0 var(--mljr-space-1);
201
+ }
202
+
203
+ /* Zoom effect on hover (macOS-like) */
204
+ .mljr-dock-zoom .mljr-dock-item:hover {
205
+ transform: translateY(-8px) scale(1.2);
206
+ }
207
+
208
+ .mljr-dock-zoom .mljr-dock-item:hover + .mljr-dock-item,
209
+ .mljr-dock-zoom .mljr-dock-item:has(+ .mljr-dock-item:hover) {
210
+ transform: translateY(-4px) scale(1.1);
211
+ }
@@ -0,0 +1,257 @@
1
+ /* ============================================================
2
+ DropZone / Advanced File Upload Component
3
+ ============================================================ */
4
+
5
+ /* ── Drop zone wrapper ── */
6
+ .mljr-dropzone {
7
+ display: flex;
8
+ flex-direction: column;
9
+ gap: var(--mljr-space-4);
10
+ }
11
+
12
+ /* ── Main drop area ── */
13
+ .mljr-dropzone-area {
14
+ position: relative;
15
+ display: flex;
16
+ flex-direction: column;
17
+ align-items: center;
18
+ justify-content: center;
19
+ gap: var(--mljr-space-3);
20
+ padding: var(--mljr-space-10) var(--mljr-space-6);
21
+ border: 2px dashed var(--mljr-border);
22
+ border-radius: var(--mljr-radius-xl);
23
+ background: var(--mljr-bg-secondary);
24
+ cursor: pointer;
25
+ text-align: center;
26
+ transition:
27
+ border-color var(--mljr-transition-fast),
28
+ background var(--mljr-transition-fast),
29
+ transform var(--mljr-transition-fast);
30
+ outline: none;
31
+ }
32
+
33
+ .mljr-dropzone-area:hover,
34
+ .mljr-dropzone-area:focus-visible {
35
+ border-color: var(--mljr-primary-400);
36
+ background: color-mix(in srgb, var(--mljr-primary-500) 4%, var(--mljr-bg-secondary));
37
+ }
38
+
39
+ .mljr-dropzone-area.mljr-dropzone-dragging {
40
+ border-color: var(--mljr-primary-500);
41
+ border-style: solid;
42
+ background: color-mix(in srgb, var(--mljr-primary-500) 8%, var(--mljr-bg-secondary));
43
+ transform: scale(1.01);
44
+ box-shadow: 0 0 0 4px color-mix(in srgb, var(--mljr-primary-500) 20%, transparent);
45
+ }
46
+
47
+ .mljr-dropzone-area.mljr-dropzone-disabled {
48
+ opacity: 0.5;
49
+ cursor: not-allowed;
50
+ pointer-events: none;
51
+ }
52
+
53
+ .mljr-dropzone-area.mljr-dropzone-error {
54
+ border-color: var(--mljr-error);
55
+ }
56
+
57
+ /* ── Icon ── */
58
+ .mljr-dropzone-icon {
59
+ width: 48px;
60
+ height: 48px;
61
+ color: var(--mljr-text-muted);
62
+ transition: color var(--mljr-transition-fast);
63
+ }
64
+
65
+ .mljr-dropzone-area:hover .mljr-dropzone-icon,
66
+ .mljr-dropzone-area.mljr-dropzone-dragging .mljr-dropzone-icon {
67
+ color: var(--mljr-primary-500);
68
+ }
69
+
70
+ /* ── Text ── */
71
+ .mljr-dropzone-title {
72
+ font-size: var(--mljr-text-base);
73
+ font-weight: 600;
74
+ color: var(--mljr-text);
75
+ }
76
+
77
+ .mljr-dropzone-subtitle {
78
+ font-size: var(--mljr-text-sm);
79
+ color: var(--mljr-text-muted);
80
+ }
81
+
82
+ .mljr-dropzone-hint {
83
+ font-size: var(--mljr-text-xs);
84
+ color: var(--mljr-text-muted);
85
+ margin-top: var(--mljr-space-1);
86
+ }
87
+
88
+ /* ── File list ── */
89
+ .mljr-dropzone-files {
90
+ display: flex;
91
+ flex-direction: column;
92
+ gap: var(--mljr-space-2);
93
+ }
94
+
95
+ /* ── File item ── */
96
+ .mljr-dropzone-file {
97
+ display: flex;
98
+ align-items: center;
99
+ gap: var(--mljr-space-3);
100
+ padding: var(--mljr-space-3) var(--mljr-space-4);
101
+ background: var(--mljr-bg-secondary);
102
+ border: 1px solid var(--mljr-border);
103
+ border-radius: var(--mljr-radius-lg);
104
+ box-shadow: var(--mljr-clay-shadow-sm);
105
+ transition: box-shadow var(--mljr-transition-fast);
106
+ }
107
+
108
+ .mljr-dropzone-file:hover {
109
+ box-shadow: var(--mljr-clay-shadow);
110
+ }
111
+
112
+ /* ── Thumbnail / preview ── */
113
+ .mljr-dropzone-thumb {
114
+ flex-shrink: 0;
115
+ width: 48px;
116
+ height: 48px;
117
+ border-radius: var(--mljr-radius-md);
118
+ object-fit: cover;
119
+ background: var(--mljr-bg);
120
+ border: 1px solid var(--mljr-border);
121
+ }
122
+
123
+ .mljr-dropzone-file-icon {
124
+ flex-shrink: 0;
125
+ width: 48px;
126
+ height: 48px;
127
+ border-radius: var(--mljr-radius-md);
128
+ background: var(--mljr-bg);
129
+ border: 1px solid var(--mljr-border);
130
+ display: flex;
131
+ align-items: center;
132
+ justify-content: center;
133
+ color: var(--mljr-text-muted);
134
+ font-size: var(--mljr-text-xs);
135
+ font-weight: 600;
136
+ text-transform: uppercase;
137
+ }
138
+
139
+ /* ── File info ── */
140
+ .mljr-dropzone-file-info {
141
+ flex: 1;
142
+ min-width: 0;
143
+ display: flex;
144
+ flex-direction: column;
145
+ gap: var(--mljr-space-1);
146
+ }
147
+
148
+ .mljr-dropzone-file-name {
149
+ font-size: var(--mljr-text-sm);
150
+ font-weight: 500;
151
+ color: var(--mljr-text);
152
+ white-space: nowrap;
153
+ overflow: hidden;
154
+ text-overflow: ellipsis;
155
+ }
156
+
157
+ .mljr-dropzone-file-size {
158
+ font-size: var(--mljr-text-xs);
159
+ color: var(--mljr-text-muted);
160
+ }
161
+
162
+ /* ── Progress bar ── */
163
+ .mljr-dropzone-progress {
164
+ height: 4px;
165
+ background: var(--mljr-border);
166
+ border-radius: 999px;
167
+ overflow: hidden;
168
+ }
169
+
170
+ .mljr-dropzone-progress-fill {
171
+ height: 100%;
172
+ background: var(--mljr-primary-500);
173
+ border-radius: 999px;
174
+ transition: width 0.3s ease;
175
+ }
176
+
177
+ .mljr-dropzone-file-uploading .mljr-dropzone-progress-fill {
178
+ background: var(--mljr-primary-500);
179
+ }
180
+
181
+ .mljr-dropzone-file-complete .mljr-dropzone-progress-fill {
182
+ background: var(--mljr-success);
183
+ }
184
+
185
+ .mljr-dropzone-file-error .mljr-dropzone-progress-fill {
186
+ background: var(--mljr-error);
187
+ }
188
+
189
+ /* ── File status badge ── */
190
+ .mljr-dropzone-status {
191
+ display: flex;
192
+ align-items: center;
193
+ gap: var(--mljr-space-1);
194
+ font-size: var(--mljr-text-xs);
195
+ }
196
+
197
+ .mljr-dropzone-status-uploading { color: var(--mljr-primary-500); }
198
+ .mljr-dropzone-status-complete { color: var(--mljr-success); }
199
+ .mljr-dropzone-status-error { color: var(--mljr-error); }
200
+ .mljr-dropzone-status-idle { color: var(--mljr-text-muted); }
201
+
202
+ /* ── Remove button ── */
203
+ .mljr-dropzone-remove {
204
+ flex-shrink: 0;
205
+ width: 28px;
206
+ height: 28px;
207
+ border-radius: 50%;
208
+ background: transparent;
209
+ border: 1px solid var(--mljr-border);
210
+ color: var(--mljr-text-muted);
211
+ cursor: pointer;
212
+ display: flex;
213
+ align-items: center;
214
+ justify-content: center;
215
+ transition: all var(--mljr-transition-fast);
216
+ padding: 0;
217
+ }
218
+
219
+ .mljr-dropzone-remove:hover {
220
+ background: var(--mljr-error-bg, color-mix(in srgb, var(--mljr-error) 12%, transparent));
221
+ border-color: var(--mljr-error);
222
+ color: var(--mljr-error);
223
+ }
224
+
225
+ /* ── Error message ── */
226
+ .mljr-dropzone-error-msg {
227
+ font-size: var(--mljr-text-sm);
228
+ color: var(--mljr-error);
229
+ padding: var(--mljr-space-2) var(--mljr-space-3);
230
+ background: color-mix(in srgb, var(--mljr-error) 10%, transparent);
231
+ border-radius: var(--mljr-radius-md);
232
+ border: 1px solid color-mix(in srgb, var(--mljr-error) 30%, transparent);
233
+ }
234
+
235
+ /* ── Summary row ── */
236
+ .mljr-dropzone-summary {
237
+ display: flex;
238
+ align-items: center;
239
+ justify-content: space-between;
240
+ font-size: var(--mljr-text-sm);
241
+ color: var(--mljr-text-muted);
242
+ }
243
+
244
+ .mljr-dropzone-clear-all {
245
+ background: none;
246
+ border: none;
247
+ font-size: var(--mljr-text-sm);
248
+ color: var(--mljr-text-muted);
249
+ cursor: pointer;
250
+ padding: var(--mljr-space-1) var(--mljr-space-2);
251
+ border-radius: var(--mljr-radius-sm);
252
+ transition: color var(--mljr-transition-fast);
253
+ }
254
+
255
+ .mljr-dropzone-clear-all:hover {
256
+ color: var(--mljr-error);
257
+ }
@@ -4,9 +4,6 @@
4
4
  ============================================ */
5
5
 
6
6
  .mljr-footer {
7
- background: var(--mljr-bg-secondary);
8
- border-top: 1px solid var(--mljr-border);
9
- box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.05);
10
7
  position: relative;
11
8
  }
12
9
 
@@ -209,9 +206,9 @@
209
206
  /* Dark Mode */
210
207
  .dark .mljr-footer,
211
208
  [data-theme="dark"] .mljr-footer {
212
- background: var(--mljr-bg-secondary);
209
+ background: transparent;
213
210
  border-color: var(--mljr-border);
214
- box-shadow: 0 -4px 20px rgba(0, 0, 0, 0.2);
211
+ box-shadow: none;
215
212
  }
216
213
 
217
214
  .dark .mljr-footer::before,
@@ -229,3 +226,52 @@
229
226
  [data-theme="dark"] .mljr-footer-bottom {
230
227
  border-color: var(--mljr-border);
231
228
  }
229
+
230
+ /* Newsletter signup */
231
+ .mljr-footer-newsletter {
232
+ display: flex;
233
+ align-items: center;
234
+ justify-content: space-between;
235
+ gap: var(--mljr-space-6);
236
+ padding: var(--mljr-space-6) 0;
237
+ border-bottom: 1px solid var(--mljr-border);
238
+ flex-wrap: wrap;
239
+ }
240
+
241
+ .mljr-footer-newsletter-content {
242
+ flex: 1;
243
+ min-width: 200px;
244
+ }
245
+
246
+ .mljr-footer-newsletter-title {
247
+ font-size: var(--mljr-text-lg);
248
+ font-weight: 700;
249
+ color: var(--mljr-text);
250
+ margin: 0 0 var(--mljr-space-1) 0;
251
+ }
252
+
253
+ .mljr-footer-newsletter-desc {
254
+ font-size: var(--mljr-text-sm);
255
+ color: var(--mljr-text-secondary);
256
+ margin: 0;
257
+ }
258
+
259
+ .mljr-footer-newsletter-form {
260
+ display: flex;
261
+ gap: var(--mljr-space-2);
262
+ align-items: center;
263
+ flex-wrap: wrap;
264
+ }
265
+
266
+ .mljr-footer-newsletter-input {
267
+ min-width: 200px;
268
+ }
269
+
270
+ .mljr-footer-newsletter-success {
271
+ display: flex;
272
+ align-items: center;
273
+ gap: var(--mljr-space-2);
274
+ color: var(--mljr-success);
275
+ font-size: var(--mljr-text-sm);
276
+ font-weight: 500;
277
+ }
@@ -0,0 +1,63 @@
1
+ /* ============================================
2
+ MLJR CSS Framework - Gauge Component
3
+ Claymorphism: Circular arc SVG gauge
4
+ ============================================ */
5
+
6
+ .mljr-gauge {
7
+ display: inline-flex;
8
+ flex-direction: column;
9
+ align-items: center;
10
+ gap: var(--mljr-space-2);
11
+ font-family: var(--mljr-font-sans);
12
+ }
13
+
14
+ .mljr-gauge-svg {
15
+ display: block;
16
+ overflow: visible;
17
+ }
18
+
19
+ .mljr-gauge-track {
20
+ fill: none;
21
+ stroke-linecap: round;
22
+ opacity: 0.18;
23
+ }
24
+
25
+ .dark .mljr-gauge-track,
26
+ [data-theme="dark"] .mljr-gauge-track {
27
+ opacity: 0.22;
28
+ }
29
+
30
+ .mljr-gauge-fill {
31
+ fill: none;
32
+ stroke-linecap: round;
33
+ transition: stroke-dashoffset 0.6s cubic-bezier(0.4, 0, 0.2, 1);
34
+ }
35
+
36
+ .mljr-gauge-center {
37
+ display: flex;
38
+ flex-direction: column;
39
+ align-items: center;
40
+ justify-content: center;
41
+ line-height: 1.2;
42
+ }
43
+
44
+ .mljr-gauge-value {
45
+ font-size: 1.75rem;
46
+ font-weight: 800;
47
+ color: var(--mljr-text);
48
+ line-height: 1;
49
+ }
50
+
51
+ .mljr-gauge-unit {
52
+ font-size: var(--mljr-text-sm);
53
+ font-weight: 500;
54
+ color: var(--mljr-text-muted);
55
+ margin-top: 2px;
56
+ }
57
+
58
+ .mljr-gauge-label {
59
+ font-size: var(--mljr-text-sm);
60
+ font-weight: 500;
61
+ color: var(--mljr-text-muted);
62
+ text-align: center;
63
+ }