mljr-css 0.1.0 → 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 +16 -10
  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,92 @@
1
+ /* ============================================
2
+ MapEmbed - OpenStreetMap/iframe map embed
3
+ ============================================ */
4
+
5
+ .mljr-map {
6
+ position: relative;
7
+ border-radius: var(--mljr-radius-md);
8
+ overflow: hidden;
9
+ border: 2px solid var(--mljr-border);
10
+ background: var(--mljr-surface-2);
11
+ box-shadow: var(--mljr-clay-shadow-sm);
12
+ }
13
+
14
+ .mljr-map iframe {
15
+ display: block;
16
+ width: 100%;
17
+ height: 100%;
18
+ border: none;
19
+ }
20
+
21
+ /* Attribution overlay */
22
+ .mljr-map-attribution {
23
+ position: absolute;
24
+ bottom: 0.375rem;
25
+ right: 0.375rem;
26
+ background: rgba(255, 255, 255, 0.85);
27
+ backdrop-filter: blur(4px);
28
+ padding: 0.15rem 0.4rem;
29
+ border-radius: 4px;
30
+ font-size: 0.65rem;
31
+ color: #555;
32
+ font-family: var(--mljr-font-body);
33
+ pointer-events: none;
34
+ }
35
+
36
+ .dark .mljr-map-attribution {
37
+ background: rgba(30, 30, 30, 0.85);
38
+ color: #aaa;
39
+ }
40
+
41
+ /* Loading state */
42
+ .mljr-map-loading {
43
+ position: absolute;
44
+ inset: 0;
45
+ display: flex;
46
+ align-items: center;
47
+ justify-content: center;
48
+ background: var(--mljr-surface-2);
49
+ color: var(--mljr-text-muted);
50
+ font-family: var(--mljr-font-body);
51
+ font-size: 0.875rem;
52
+ gap: 0.5rem;
53
+ flex-direction: column;
54
+ }
55
+
56
+ .mljr-map-loading svg {
57
+ animation: mljr-map-spin 1.2s linear infinite;
58
+ color: var(--mljr-primary-500);
59
+ }
60
+
61
+ @keyframes mljr-map-spin {
62
+ to { transform: rotate(360deg); }
63
+ }
64
+
65
+ /* Marker label */
66
+ .mljr-map-label {
67
+ position: absolute;
68
+ top: 0.625rem;
69
+ left: 0.625rem;
70
+ background: var(--mljr-surface);
71
+ border: 1px solid var(--mljr-border);
72
+ box-shadow: var(--mljr-clay-shadow-sm);
73
+ border-radius: var(--mljr-radius-sm);
74
+ padding: 0.3rem 0.625rem;
75
+ font-family: var(--mljr-font-body);
76
+ font-size: 0.8125rem;
77
+ font-weight: 600;
78
+ color: var(--mljr-text);
79
+ display: flex;
80
+ align-items: center;
81
+ gap: 0.375rem;
82
+ pointer-events: none;
83
+ }
84
+
85
+ .mljr-map-label svg {
86
+ color: var(--mljr-primary-500);
87
+ flex-shrink: 0;
88
+ }
89
+
90
+ /* Rounded variants */
91
+ .mljr-map-rounded { border-radius: var(--mljr-radius-lg); }
92
+ .mljr-map-square { border-radius: 0; }
@@ -0,0 +1,112 @@
1
+ /* =====================================================
2
+ Marquee - Auto-scrolling content strip
3
+ ===================================================== */
4
+
5
+ .mljr-marquee {
6
+ overflow: hidden;
7
+ display: flex;
8
+ width: 100%;
9
+ gap: var(--mljr-marquee-gap, 1rem);
10
+ user-select: none;
11
+ }
12
+
13
+ .mljr-marquee-content {
14
+ display: flex;
15
+ flex-shrink: 0;
16
+ align-items: center;
17
+ gap: var(--mljr-marquee-gap, 1rem);
18
+ min-width: 100%;
19
+ animation: mljr-marquee-scroll var(--mljr-marquee-duration, 20s) linear infinite;
20
+ }
21
+
22
+ .mljr-marquee-content:nth-child(2) {
23
+ animation-delay: calc(var(--mljr-marquee-duration, 20s) / -2);
24
+ }
25
+
26
+ /* Reverse direction */
27
+ .mljr-marquee-reverse .mljr-marquee-content {
28
+ animation-direction: reverse;
29
+ }
30
+
31
+ /* Pause on hover */
32
+ .mljr-marquee-pause:hover .mljr-marquee-content {
33
+ animation-play-state: paused;
34
+ }
35
+
36
+ /* Vertical marquee */
37
+ .mljr-marquee-vertical {
38
+ flex-direction: column;
39
+ height: var(--mljr-marquee-height, 200px);
40
+ }
41
+
42
+ .mljr-marquee-vertical .mljr-marquee-content {
43
+ flex-direction: column;
44
+ min-width: initial;
45
+ min-height: 100%;
46
+ animation: mljr-marquee-scroll-vertical var(--mljr-marquee-duration, 20s) linear infinite;
47
+ }
48
+
49
+ .mljr-marquee-vertical .mljr-marquee-content:nth-child(2) {
50
+ animation-delay: calc(var(--mljr-marquee-duration, 20s) / -2);
51
+ }
52
+
53
+ /* Marquee item */
54
+ .mljr-marquee-item {
55
+ display: flex;
56
+ align-items: center;
57
+ gap: 0.5rem;
58
+ flex-shrink: 0;
59
+ padding: 0.5rem 0.75rem;
60
+ border-radius: var(--mljr-radius-md);
61
+ background: var(--mljr-bg-secondary);
62
+ box-shadow: var(--mljr-clay-shadow-sm);
63
+ font-size: var(--mljr-text-sm);
64
+ font-weight: 500;
65
+ color: var(--mljr-text);
66
+ white-space: nowrap;
67
+ }
68
+
69
+ /* Separator */
70
+ .mljr-marquee-separator {
71
+ flex-shrink: 0;
72
+ color: var(--mljr-text-muted);
73
+ font-size: 1.25rem;
74
+ line-height: 1;
75
+ }
76
+
77
+ /* Fade edges */
78
+ .mljr-marquee-gradient {
79
+ -webkit-mask-image: linear-gradient(to right, transparent 0%, black 10%, black 90%, transparent 100%);
80
+ mask-image: linear-gradient(to right, transparent 0%, black 10%, black 90%, transparent 100%);
81
+ }
82
+
83
+ .mljr-marquee-vertical.mljr-marquee-gradient {
84
+ -webkit-mask-image: linear-gradient(to bottom, transparent 0%, black 10%, black 90%, transparent 100%);
85
+ mask-image: linear-gradient(to bottom, transparent 0%, black 10%, black 90%, transparent 100%);
86
+ }
87
+
88
+ /* Animations */
89
+ @keyframes mljr-marquee-scroll {
90
+ from {
91
+ transform: translateX(0);
92
+ }
93
+ to {
94
+ transform: translateX(calc(-100% - var(--mljr-marquee-gap, 1rem)));
95
+ }
96
+ }
97
+
98
+ @keyframes mljr-marquee-scroll-vertical {
99
+ from {
100
+ transform: translateY(0);
101
+ }
102
+ to {
103
+ transform: translateY(calc(-100% - var(--mljr-marquee-gap, 1rem)));
104
+ }
105
+ }
106
+
107
+ /* Dark mode */
108
+ .dark .mljr-marquee-item,
109
+ [data-theme="dark"] .mljr-marquee-item {
110
+ background: var(--mljr-bg-secondary);
111
+ box-shadow: var(--mljr-clay-shadow-sm);
112
+ }
@@ -0,0 +1,357 @@
1
+ /* ============================================
2
+ MLJR CSS Framework - Navbar Component
3
+ Claymorphism: Soft, elevated navigation bar
4
+ ============================================ */
5
+
6
+ .mljr-navbar {
7
+ width: 100%;
8
+ background: linear-gradient(
9
+ 145deg,
10
+ var(--mljr-bg) 0%,
11
+ var(--mljr-bg-secondary) 100%
12
+ );
13
+ border-radius: var(--mljr-radius-xl);
14
+ box-shadow: var(--mljr-clay-shadow);
15
+ border: 1px solid var(--mljr-frosted-border);
16
+ transition: all var(--mljr-transition);
17
+ }
18
+
19
+ .mljr-navbar-container {
20
+ display: flex;
21
+ align-items: center;
22
+ justify-content: space-between;
23
+ padding: var(--mljr-space-3) var(--mljr-space-4);
24
+ gap: var(--mljr-space-4);
25
+ }
26
+
27
+ /* Navbar Sections */
28
+ .mljr-navbar-start,
29
+ .mljr-navbar-center,
30
+ .mljr-navbar-end {
31
+ display: flex;
32
+ align-items: center;
33
+ gap: var(--mljr-space-3);
34
+ }
35
+
36
+ .mljr-navbar-start {
37
+ flex-shrink: 0;
38
+ }
39
+
40
+ .mljr-navbar-center {
41
+ flex: 1;
42
+ justify-content: center;
43
+ }
44
+
45
+ .mljr-navbar-end {
46
+ flex-shrink: 0;
47
+ }
48
+
49
+ /* Logo */
50
+ .mljr-navbar-logo {
51
+ display: flex;
52
+ align-items: center;
53
+ flex-shrink: 0;
54
+ }
55
+
56
+ .mljr-navbar-logo :global(a) {
57
+ display: flex;
58
+ align-items: center;
59
+ gap: var(--mljr-space-2);
60
+ color: var(--mljr-text);
61
+ text-decoration: none;
62
+ font-weight: 700;
63
+ font-size: var(--mljr-text-lg);
64
+ transition: color var(--mljr-transition);
65
+ }
66
+
67
+ .mljr-navbar-logo :global(a:hover) {
68
+ color: var(--mljr-primary-600);
69
+ }
70
+
71
+ .mljr-navbar-logo :global(img) {
72
+ height: 2.5rem;
73
+ width: auto;
74
+ }
75
+
76
+ /* Mobile Toggle Button */
77
+ .mljr-navbar-toggle {
78
+ display: none;
79
+ align-items: center;
80
+ justify-content: center;
81
+ width: 44px;
82
+ height: 44px;
83
+ padding: 0;
84
+ background: linear-gradient(
85
+ 145deg,
86
+ var(--mljr-bg) 0%,
87
+ var(--mljr-bg-secondary) 100%
88
+ );
89
+ border: 1px solid var(--mljr-frosted-border);
90
+ border-radius: var(--mljr-radius-lg);
91
+ color: var(--mljr-text);
92
+ cursor: pointer;
93
+ box-shadow: var(--mljr-clay-btn);
94
+ transition: all var(--mljr-transition-fast);
95
+ }
96
+
97
+ .mljr-navbar-toggle:hover {
98
+ transform: translateY(-2px);
99
+ box-shadow: var(--mljr-clay-shadow);
100
+ }
101
+
102
+ .mljr-navbar-toggle:active {
103
+ transform: translateY(0);
104
+ box-shadow: var(--mljr-clay-btn-pressed);
105
+ }
106
+
107
+ /* Navigation Menu */
108
+ .mljr-navbar-menu {
109
+ display: flex;
110
+ align-items: center;
111
+ gap: var(--mljr-space-2);
112
+ list-style: none;
113
+ margin: 0;
114
+ padding: 0;
115
+ }
116
+
117
+ .mljr-navbar-item {
118
+ position: relative;
119
+ }
120
+
121
+ .mljr-navbar-link {
122
+ display: flex;
123
+ align-items: center;
124
+ gap: var(--mljr-space-2);
125
+ padding: var(--mljr-space-2) var(--mljr-space-4);
126
+ background: linear-gradient(
127
+ 145deg,
128
+ var(--mljr-bg) 0%,
129
+ var(--mljr-bg-secondary) 100%
130
+ );
131
+ border-radius: var(--mljr-radius-full);
132
+ color: var(--mljr-text-secondary);
133
+ font-size: var(--mljr-text-sm);
134
+ font-weight: 600;
135
+ text-decoration: none;
136
+ border: 1px solid transparent;
137
+ box-shadow: var(--mljr-clay-shadow-xs);
138
+ transition: all var(--mljr-transition-fast);
139
+ }
140
+
141
+ .mljr-navbar-link:hover {
142
+ color: var(--mljr-text);
143
+ transform: translateY(-2px);
144
+ box-shadow: var(--mljr-clay-shadow-sm);
145
+ }
146
+
147
+ .mljr-navbar-link-active {
148
+ background: var(--mljr-gradient-primary);
149
+ color: white;
150
+ box-shadow: var(--mljr-clay-shadow-sm);
151
+ }
152
+
153
+ .mljr-navbar-link-icon {
154
+ flex-shrink: 0;
155
+ }
156
+
157
+ /* Dropdown */
158
+ .mljr-navbar-dropdown {
159
+ position: absolute;
160
+ top: calc(100% + var(--mljr-space-2));
161
+ left: 0;
162
+ min-width: 200px;
163
+ opacity: 0;
164
+ visibility: hidden;
165
+ transform: translateY(-8px);
166
+ transition: all var(--mljr-transition-fast);
167
+ z-index: 100;
168
+ }
169
+
170
+ .mljr-navbar-item:hover .mljr-navbar-dropdown,
171
+ .mljr-navbar-item:focus-within .mljr-navbar-dropdown {
172
+ opacity: 1;
173
+ visibility: visible;
174
+ transform: translateY(0);
175
+ }
176
+
177
+ .mljr-navbar-dropdown-menu {
178
+ list-style: none;
179
+ margin: 0;
180
+ padding: var(--mljr-space-2);
181
+ background: var(--mljr-bg);
182
+ border-radius: var(--mljr-radius-xl);
183
+ box-shadow: var(--mljr-clay-shadow-lg);
184
+ border: 1px solid var(--mljr-frosted-border);
185
+ }
186
+
187
+ .mljr-navbar-dropdown-link {
188
+ display: flex;
189
+ align-items: center;
190
+ gap: var(--mljr-space-2);
191
+ padding: var(--mljr-space-3) var(--mljr-space-4);
192
+ border-radius: var(--mljr-radius-lg);
193
+ color: var(--mljr-text-secondary);
194
+ text-decoration: none;
195
+ font-size: var(--mljr-text-sm);
196
+ font-weight: 500;
197
+ transition: all var(--mljr-transition-fast);
198
+ }
199
+
200
+ .mljr-navbar-dropdown-link:hover {
201
+ color: var(--mljr-text);
202
+ background: var(--mljr-bg-secondary);
203
+ transform: translateX(4px);
204
+ }
205
+
206
+ .mljr-navbar-dropdown-link-active {
207
+ color: var(--mljr-primary-600);
208
+ background: var(--mljr-primary-100);
209
+ }
210
+
211
+ /* Actions */
212
+ .mljr-navbar-actions {
213
+ display: flex;
214
+ align-items: center;
215
+ gap: var(--mljr-space-2);
216
+ }
217
+
218
+ /* Mobile Menu */
219
+ .mljr-navbar-mobile {
220
+ display: none;
221
+ margin-top: var(--mljr-space-3);
222
+ padding: var(--mljr-space-4);
223
+ background: var(--mljr-bg);
224
+ border-radius: var(--mljr-radius-xl);
225
+ box-shadow: var(--mljr-clay-shadow-lg);
226
+ border: 1px solid var(--mljr-frosted-border);
227
+ }
228
+
229
+ .mljr-navbar-mobile-nav {
230
+ width: 100%;
231
+ }
232
+
233
+ .mljr-navbar-mobile-menu {
234
+ list-style: none;
235
+ margin: 0;
236
+ padding: 0;
237
+ display: flex;
238
+ flex-direction: column;
239
+ gap: var(--mljr-space-2);
240
+ }
241
+
242
+ .mljr-navbar-mobile-item {
243
+ width: 100%;
244
+ }
245
+
246
+ .mljr-navbar-mobile-link {
247
+ display: flex;
248
+ align-items: center;
249
+ gap: var(--mljr-space-3);
250
+ padding: var(--mljr-space-3) var(--mljr-space-4);
251
+ background: linear-gradient(
252
+ 145deg,
253
+ var(--mljr-bg) 0%,
254
+ var(--mljr-bg-secondary) 100%
255
+ );
256
+ border-radius: var(--mljr-radius-lg);
257
+ color: var(--mljr-text-secondary);
258
+ text-decoration: none;
259
+ font-size: var(--mljr-text-base);
260
+ font-weight: 500;
261
+ border: 1px solid var(--mljr-frosted-border);
262
+ box-shadow: var(--mljr-clay-shadow-xs);
263
+ transition: all var(--mljr-transition-fast);
264
+ }
265
+
266
+ .mljr-navbar-mobile-link:hover {
267
+ color: var(--mljr-text);
268
+ box-shadow: var(--mljr-clay-shadow-sm);
269
+ transform: translateX(4px);
270
+ }
271
+
272
+ .mljr-navbar-mobile-link-active {
273
+ background: var(--mljr-gradient-primary);
274
+ color: white;
275
+ box-shadow: var(--mljr-clay-shadow-sm);
276
+ }
277
+
278
+ .mljr-navbar-mobile-submenu {
279
+ list-style: none;
280
+ margin: var(--mljr-space-2) 0 0 var(--mljr-space-4);
281
+ padding: 0;
282
+ display: flex;
283
+ flex-direction: column;
284
+ gap: var(--mljr-space-1);
285
+ }
286
+
287
+ .mljr-navbar-mobile-sublink {
288
+ display: block;
289
+ padding: var(--mljr-space-2) var(--mljr-space-3);
290
+ border-radius: var(--mljr-radius-md);
291
+ color: var(--mljr-text-secondary);
292
+ text-decoration: none;
293
+ font-size: var(--mljr-text-sm);
294
+ font-weight: 500;
295
+ transition: all var(--mljr-transition-fast);
296
+ }
297
+
298
+ .mljr-navbar-mobile-sublink:hover {
299
+ color: var(--mljr-text);
300
+ background: var(--mljr-bg-secondary);
301
+ transform: translateX(4px);
302
+ }
303
+
304
+ .mljr-navbar-mobile-sublink-active {
305
+ color: var(--mljr-primary-600);
306
+ background: var(--mljr-primary-100);
307
+ }
308
+
309
+ /* Variants */
310
+ .mljr-navbar-transparent {
311
+ background: var(--mljr-frosted-bg);
312
+ backdrop-filter: blur(12px);
313
+ }
314
+
315
+ .mljr-navbar-sticky {
316
+ position: sticky;
317
+ top: var(--mljr-space-4);
318
+ z-index: 50;
319
+ }
320
+
321
+ .mljr-navbar-fixed {
322
+ position: fixed;
323
+ top: var(--mljr-space-4);
324
+ left: var(--mljr-space-4);
325
+ right: var(--mljr-space-4);
326
+ z-index: 50;
327
+ }
328
+
329
+ /* Responsive */
330
+ @media (max-width: 768px) {
331
+ .mljr-navbar-toggle {
332
+ display: flex;
333
+ }
334
+
335
+ .mljr-navbar-center {
336
+ display: none;
337
+ }
338
+
339
+ .mljr-navbar-mobile {
340
+ display: block;
341
+ }
342
+ }
343
+
344
+ /* Dark Mode */
345
+ .dark .mljr-navbar,
346
+ [data-theme="dark"] .mljr-navbar {
347
+ background: linear-gradient(
348
+ 145deg,
349
+ var(--mljr-bg-secondary) 0%,
350
+ var(--mljr-bg-tertiary) 100%
351
+ );
352
+ }
353
+
354
+ .dark .mljr-navbar-transparent,
355
+ [data-theme="dark"] .mljr-navbar-transparent {
356
+ background: var(--mljr-frosted-bg);
357
+ }