mithril-materialized 2.0.0-beta.1 → 2.0.0-beta.11

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 (73) hide show
  1. package/README.md +287 -308
  2. package/dist/advanced.css +1888 -0
  3. package/dist/autocomplete.d.ts +3 -3
  4. package/dist/breadcrumb.d.ts +53 -0
  5. package/dist/button.d.ts +66 -21
  6. package/dist/carousel.d.ts +2 -2
  7. package/dist/chip.d.ts +2 -2
  8. package/dist/code-block.d.ts +2 -2
  9. package/dist/collapsible.d.ts +2 -2
  10. package/dist/collection.d.ts +2 -2
  11. package/dist/components.css +2310 -0
  12. package/dist/core.css +3402 -0
  13. package/dist/datatable.d.ts +291 -0
  14. package/dist/datepicker.d.ts +66 -0
  15. package/dist/dropdown.d.ts +2 -2
  16. package/dist/file-upload.d.ts +34 -0
  17. package/dist/floating-action-button.d.ts +2 -2
  18. package/dist/forms.css +2284 -0
  19. package/dist/index.css +1825 -184
  20. package/dist/index.d.ts +14 -1
  21. package/dist/index.esm.js +4752 -2143
  22. package/dist/index.js +4776 -2142
  23. package/dist/index.min.css +8 -0
  24. package/dist/index.umd.js +4776 -2142
  25. package/dist/input-options.d.ts +1 -1
  26. package/dist/input.d.ts +9 -10
  27. package/dist/label.d.ts +4 -2
  28. package/dist/material-box.d.ts +2 -2
  29. package/dist/modal.d.ts +2 -2
  30. package/dist/option.d.ts +4 -4
  31. package/dist/pagination.d.ts +2 -2
  32. package/dist/parallax.d.ts +2 -2
  33. package/dist/pickers.css +487 -0
  34. package/dist/pushpin.d.ts +32 -0
  35. package/dist/radio.d.ts +4 -4
  36. package/dist/search-select.d.ts +2 -2
  37. package/dist/select.d.ts +2 -2
  38. package/dist/sidenav.d.ts +76 -0
  39. package/dist/switch.d.ts +2 -2
  40. package/dist/tabs.d.ts +2 -4
  41. package/dist/theme-switcher.d.ts +49 -0
  42. package/dist/timepicker.d.ts +42 -0
  43. package/dist/toast.d.ts +45 -0
  44. package/dist/tooltip.d.ts +59 -0
  45. package/dist/types.d.ts +226 -0
  46. package/dist/utilities.css +3204 -0
  47. package/dist/wizard.d.ts +58 -0
  48. package/package.json +20 -9
  49. package/sass/components/_breadcrumb.scss +248 -0
  50. package/sass/components/_buttons.scss +3 -3
  51. package/sass/components/_cards.scss +10 -3
  52. package/sass/components/_chips.scss +8 -8
  53. package/sass/components/_collapsible.scss +8 -8
  54. package/sass/components/_datatable.scss +417 -0
  55. package/sass/components/_datepicker.scss +45 -14
  56. package/sass/components/_dropdown.scss +5 -5
  57. package/sass/components/_file-upload.scss +228 -0
  58. package/sass/components/_global.scss +13 -11
  59. package/sass/components/_modal.scss +5 -2
  60. package/sass/components/_navbar.scss +13 -5
  61. package/sass/components/_sidenav.scss +164 -7
  62. package/sass/components/_tabs.scss +5 -4
  63. package/sass/components/_theme-switcher.scss +120 -0
  64. package/sass/components/_theme-variables.scss +205 -0
  65. package/sass/components/_timepicker.scss +179 -87
  66. package/sass/components/_wizard.scss +416 -0
  67. package/sass/components/forms/_input-fields.scss +34 -12
  68. package/sass/components/forms/_radio-buttons.scss +10 -10
  69. package/sass/components/forms/_range.scss +5 -5
  70. package/sass/components/forms/_select.scss +9 -9
  71. package/sass/components/forms/_switches.scss +6 -6
  72. package/sass/materialize.scss +8 -0
  73. package/dist/pickers.d.ts +0 -130
@@ -0,0 +1,417 @@
1
+ @use "variables";
2
+
3
+ // DataTable Container
4
+ .datatable-container {
5
+ background: var(--mm-card-background);
6
+ color: var(--mm-text-primary);
7
+ border-radius: 4px;
8
+
9
+ .datatable-title {
10
+ color: var(--mm-text-primary);
11
+ font-weight: 400;
12
+ margin-bottom: 1rem;
13
+ }
14
+
15
+ .datatable-global-search {
16
+ padding-top: .5rem;
17
+ }
18
+
19
+ .datatable-wrapper {
20
+ position: relative;
21
+ background: var(--mm-card-background);
22
+ border-radius: 4px;
23
+ overflow: hidden;
24
+ }
25
+
26
+ .table-wrapper {
27
+ overflow-x: auto;
28
+ width: 100%;
29
+ -webkit-overflow-scrolling: touch; // Smooth scrolling on iOS
30
+ background: var(--mm-card-background);
31
+ }
32
+
33
+ // Loading State
34
+ .datatable-loading {
35
+ padding: 2rem;
36
+ text-align: center;
37
+ color: var(--mm-text-secondary);
38
+ background: var(--mm-card-background);
39
+
40
+ .preloader-wrapper {
41
+ margin-bottom: 1rem;
42
+ }
43
+ }
44
+
45
+ // Empty State
46
+ .datatable-empty {
47
+ padding: 3rem 2rem;
48
+ text-align: center;
49
+ color: var(--mm-text-secondary);
50
+ font-style: italic;
51
+ background: var(--mm-card-background);
52
+ }
53
+ }
54
+
55
+ // DataTable Specific Enhancements
56
+ .datatable {
57
+ background: var(--mm-card-background);
58
+ color: var(--mm-text-primary);
59
+ border-collapse: collapse;
60
+ width: 100%;
61
+
62
+ // Table headers
63
+ thead {
64
+ background: var(--mm-card-background);
65
+
66
+ th {
67
+ background: var(--mm-card-background);
68
+ color: var(--mm-text-primary);
69
+ border-bottom: 1px solid var(--mm-border-color);
70
+ font-weight: 500;
71
+ padding: 12px 16px;
72
+ text-align: left;
73
+ }
74
+ }
75
+
76
+ // Table body
77
+ tbody {
78
+ background: var(--mm-card-background);
79
+
80
+ td {
81
+ background: var(--mm-card-background);
82
+ color: var(--mm-text-primary);
83
+ border-bottom: 1px solid var(--mm-border-color);
84
+ padding: 12px 16px;
85
+ }
86
+ }
87
+
88
+ // Sortable column headers
89
+ thead th.sortable {
90
+ cursor: pointer;
91
+ user-select: none;
92
+ position: relative;
93
+ transition: background-color 0.2s ease;
94
+
95
+ &:hover {
96
+ background-color: var(--mm-dropdown-hover);
97
+ }
98
+
99
+ .sort-indicators {
100
+ position: absolute;
101
+ right: 8px;
102
+ top: 50%;
103
+ transform: translateY(-50%);
104
+ display: flex;
105
+ flex-direction: column;
106
+ line-height: 1;
107
+
108
+ .sort-icon {
109
+ font-size: 16px;
110
+ color: var(--mm-text-disabled);
111
+ transition: color 0.2s ease;
112
+
113
+ &.active {
114
+ color: var(--mm-primary-color);
115
+ }
116
+ }
117
+
118
+ .sort-asc {
119
+ margin-bottom: 0px;
120
+ }
121
+
122
+ .sort-desc {
123
+ margin-top: 0px;
124
+ }
125
+ }
126
+
127
+ // Add padding for sort icons
128
+ padding-right: 32px;
129
+ }
130
+
131
+ // Column alignment classes
132
+ .align-left {
133
+ text-align: left;
134
+ }
135
+
136
+ .align-center {
137
+ text-align: center;
138
+ }
139
+
140
+ .align-right {
141
+ text-align: right;
142
+ }
143
+
144
+ // Row hover effects
145
+ tbody tr {
146
+ transition: background-color 0.2s ease;
147
+ cursor: pointer;
148
+
149
+ &:hover {
150
+ background-color: var(--mm-dropdown-hover);
151
+
152
+ td {
153
+ background-color: var(--mm-dropdown-hover);
154
+ }
155
+ }
156
+ }
157
+
158
+ // Enhanced striped rows for dark theme
159
+ &.striped tbody tr:nth-child(odd) {
160
+ background-color: var(--mm-dropdown-focus);
161
+
162
+ td {
163
+ background-color: var(--mm-dropdown-focus);
164
+ }
165
+
166
+ &:hover {
167
+ background-color: var(--mm-dropdown-hover);
168
+
169
+ td {
170
+ background-color: var(--mm-dropdown-hover);
171
+ }
172
+ }
173
+ }
174
+
175
+ // Selection styles
176
+ .selection-checkbox {
177
+ width: 40px;
178
+ text-align: center;
179
+ padding: 0 8px !important;
180
+
181
+ label {
182
+ margin: 0;
183
+ height: 100%;
184
+ display: flex;
185
+ align-items: center;
186
+ justify-content: center;
187
+ }
188
+
189
+ input[type="checkbox"] {
190
+ opacity: 1;
191
+ position: relative;
192
+ left: auto;
193
+ top: auto;
194
+ transform: none;
195
+ margin-right: 0;
196
+ }
197
+ }
198
+
199
+ // Selected row styles
200
+ tbody tr.selected {
201
+ background-color: var(--mm-dropdown-selected) !important;
202
+
203
+ td {
204
+ background-color: var(--mm-dropdown-selected) !important;
205
+ }
206
+
207
+ &:hover {
208
+ background-color: var(--mm-dropdown-selected) !important;
209
+ opacity: 0.9;
210
+
211
+ td {
212
+ background-color: var(--mm-dropdown-selected) !important;
213
+ opacity: 0.9;
214
+ }
215
+ }
216
+ }
217
+
218
+ // Fixed header styles
219
+ &.fixed-header {
220
+ thead th {
221
+ position: sticky;
222
+ top: 0;
223
+ background: var(--mm-card-background);
224
+ z-index: 10;
225
+ box-shadow: 0 2px 4px rgba(0,0,0,0.1);
226
+ }
227
+ }
228
+ }
229
+
230
+ // Pagination Component
231
+ .datatable-pagination {
232
+ margin-top: 1rem;
233
+ display: flex;
234
+ justify-content: space-between;
235
+ align-items: center;
236
+ flex-wrap: wrap;
237
+ gap: 1rem;
238
+ background: var(--mm-card-background);
239
+ color: var(--mm-text-primary);
240
+ padding: 1rem;
241
+ border-top: 1px solid var(--mm-border-color);
242
+
243
+ .pagination-info {
244
+ color: var(--mm-text-secondary);
245
+ font-size: 0.9rem;
246
+ flex: 1;
247
+ min-width: 200px;
248
+ }
249
+
250
+ .pagination-controls {
251
+ display: flex;
252
+ align-items: center;
253
+ gap: 0.5rem;
254
+
255
+ button.btn-flat {
256
+ min-width: 40px;
257
+ height: 40px;
258
+ padding: 0;
259
+ display: flex;
260
+ align-items: center;
261
+ justify-content: center;
262
+ border-radius: 50%;
263
+ transition: background-color 0.2s ease;
264
+ background: transparent;
265
+ color: var(--mm-text-primary);
266
+ border: 1px solid var(--mm-border-color);
267
+
268
+ &:hover:not(:disabled) {
269
+ background-color: var(--mm-dropdown-hover);
270
+ }
271
+
272
+ &:disabled {
273
+ color: var(--mm-text-disabled);
274
+ cursor: not-allowed;
275
+ border-color: var(--mm-text-disabled);
276
+ opacity: 0.6;
277
+ }
278
+
279
+ i {
280
+ font-size: 20px;
281
+ }
282
+ }
283
+
284
+ .page-info {
285
+ margin: 0 0.5rem;
286
+ color: var(--mm-text-secondary);
287
+ font-weight: 500;
288
+ white-space: nowrap;
289
+ }
290
+ }
291
+ }
292
+
293
+ // Responsive enhancements
294
+ @media #{variables.$medium-and-down} {
295
+ .datatable-container {
296
+ .datatable-search {
297
+ max-width: 100%;
298
+ }
299
+
300
+ .datatable-pagination {
301
+ flex-direction: column;
302
+ align-items: stretch;
303
+ text-align: center;
304
+
305
+ .pagination-info {
306
+ order: 2;
307
+ margin-top: 0.5rem;
308
+ text-align: center;
309
+ }
310
+
311
+ .pagination-controls {
312
+ order: 1;
313
+ justify-content: center;
314
+ }
315
+ }
316
+ }
317
+
318
+ // Enhanced responsive table
319
+ .datatable.responsive-table {
320
+ // Hide certain columns on mobile if needed
321
+ &.mobile-hide-secondary {
322
+ th:nth-child(n+4),
323
+ td:nth-child(n+4) {
324
+ display: none;
325
+ }
326
+ }
327
+
328
+ // Stack table cells on very small screens
329
+ @media #{variables.$small-and-down} {
330
+ &.mobile-stack {
331
+ thead {
332
+ display: none;
333
+ }
334
+
335
+ tbody tr {
336
+ display: block;
337
+ border: 1px solid var(--mm-border-color);
338
+ margin-bottom: 1rem;
339
+ padding: 1rem;
340
+ border-radius: 4px;
341
+ background: var(--mm-card-background);
342
+ }
343
+
344
+ tbody td {
345
+ display: block;
346
+ text-align: left !important;
347
+ padding: 0.5rem 0;
348
+ border: none;
349
+
350
+ &::before {
351
+ content: attr(data-label) ": ";
352
+ font-weight: bold;
353
+ color: var(--mm-text-secondary);
354
+ display: inline-block;
355
+ min-width: 100px;
356
+ }
357
+ }
358
+ }
359
+ }
360
+ }
361
+ }
362
+
363
+ // Dark theme specific adjustments
364
+ @media (prefers-color-scheme: dark) {
365
+ :root:not([data-theme]) .datatable-container,
366
+ [data-theme="dark"] .datatable-container {
367
+ .datatable thead th.sortable:hover {
368
+ background-color: var(--mm-dropdown-hover);
369
+ }
370
+
371
+ .datatable tbody tr:hover {
372
+ background-color: var(--mm-dropdown-hover);
373
+ }
374
+
375
+ .datatable.striped tbody tr:nth-child(odd) {
376
+ background-color: rgba(255, 255, 255, 0.05);
377
+ }
378
+
379
+ .datatable.fixed-header thead th {
380
+ border-bottom: 1px solid var(--mm-border-color);
381
+ }
382
+ }
383
+ }
384
+
385
+ // Future: Virtual scrolling styles will be added in Phase 2
386
+
387
+ // Performance optimizations
388
+ .datatable {
389
+ // Use contain for better performance
390
+ contain: layout style paint;
391
+
392
+ // Enable hardware acceleration for smooth scrolling
393
+ &.virtual-table {
394
+ transform: translateZ(0);
395
+ backface-visibility: hidden;
396
+ }
397
+
398
+ // Optimize row rendering
399
+ tbody tr {
400
+ // Use transform3d for better performance
401
+ transform: translateZ(0);
402
+
403
+ // Optimize paint operations
404
+ will-change: transform;
405
+ }
406
+
407
+ // Optimize table layout
408
+ &.fixed-layout {
409
+ table-layout: fixed;
410
+
411
+ th, td {
412
+ overflow: hidden;
413
+ text-overflow: ellipsis;
414
+ white-space: nowrap;
415
+ }
416
+ }
417
+ }
@@ -11,6 +11,8 @@
11
11
  flex-direction: column;
12
12
  padding: 0;
13
13
  overflow: visible;
14
+ background-color: var(--mm-surface-color, #ffffff);
15
+ color: var(--mm-text-primary, rgba(0, 0, 0, 0.87));
14
16
  }
15
17
 
16
18
  .datepicker-controls {
@@ -47,7 +49,7 @@
47
49
  cursor: pointer;
48
50
  width: 16px;
49
51
  height: 16px;
50
- fill: rgba(0, 0, 0, 0.54);
52
+ fill: var(--mm-text-secondary, rgba(0, 0, 0, 0.54));
51
53
  }
52
54
 
53
55
  .dropdown-content {
@@ -55,10 +57,10 @@
55
57
  top: 100%;
56
58
  left: 0;
57
59
  right: 0;
58
- background-color: white;
59
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
60
+ background-color: var(--mm-surface-color, white);
61
+ box-shadow: 0 4px 20px var(--mm-shadow-color, rgba(0, 0, 0, 0.3));
60
62
  z-index: 20000;
61
- border: 1px solid #ddd;
63
+ border: 1px solid var(--mm-border-color, #ddd);
62
64
  border-radius: 2px;
63
65
  display: block;
64
66
  opacity: 1;
@@ -70,11 +72,11 @@
70
72
  transition: background-color 0.2s;
71
73
 
72
74
  &:hover {
73
- background-color: #f5f5f5;
75
+ background-color: var(--mm-border-color, #f5f5f5);
74
76
  }
75
77
 
76
78
  &.selected {
77
- background-color: #f5f5f5;
79
+ background-color: var(--mm-border-color, #f5f5f5);
78
80
  }
79
81
  }
80
82
  }
@@ -146,6 +148,10 @@
146
148
  width: 280px;
147
149
  font-size: 1rem;
148
150
  margin: 0 auto;
151
+
152
+ &.with-week-numbers {
153
+ width: 310px;
154
+ }
149
155
 
150
156
  thead {
151
157
  border-bottom: none;
@@ -154,6 +160,14 @@
154
160
  th {
155
161
  padding: 10px 5px;
156
162
  text-align: center;
163
+
164
+ &.datepicker-week-header {
165
+ color: var(--mm-text-hint, rgba(0, 0, 0, 0.38));
166
+ font-size: 0.8rem;
167
+ font-weight: 600;
168
+ width: 30px;
169
+ padding: 10px 2px;
170
+ }
157
171
  }
158
172
 
159
173
  tr {
@@ -162,34 +176,47 @@
162
176
 
163
177
  abbr {
164
178
  text-decoration: none;
165
- color: rgba(0, 0, 0, 0.54);
179
+ color: var(--mm-text-secondary, rgba(0, 0, 0, 0.54));
166
180
  }
167
181
 
168
182
  td {
169
183
  &.is-today {
170
- color: #26a69a;
184
+ color: var(--mm-primary-color, #26a69a);
171
185
  }
172
186
 
173
187
  &.is-selected {
174
- background-color: #26a69a;
175
- color: #fff;
188
+ background-color: var(--mm-primary-color, #26a69a);
189
+ color: var(--mm-button-text, #fff);
176
190
  }
177
191
 
178
192
  &.is-outside-current-month,
179
193
  &.is-disabled {
180
- color: rgba(0, 0, 0, 0.3);
194
+ color: var(--mm-text-disabled, rgba(0, 0, 0, 0.3));
181
195
  pointer-events: none;
182
196
  }
183
197
 
198
+ &.datepicker-week-number {
199
+ color: var(--mm-text-hint, rgba(0, 0, 0, 0.38));
200
+ font-size: 0.8rem;
201
+ font-weight: 600;
202
+ text-align: center;
203
+ vertical-align: middle;
204
+ border-radius: 0;
205
+ width: 30px;
206
+ padding: 5px 2px;
207
+ background-color: var(--mm-border-color, rgba(0, 0, 0, 0.02));
208
+ border-right: 1px solid var(--mm-border-color, rgba(0, 0, 0, 0.05));
209
+ }
210
+
184
211
  border-radius: 50%;
185
212
  padding: 0;
186
213
  }
187
214
  }
188
215
 
189
216
  .datepicker-day-button {
190
- &:focus {
191
- background-color: #eee;
192
- }
217
+ // &:focus {
218
+ // background-color: #eee;
219
+ // }
193
220
 
194
221
  background-color: transparent;
195
222
  border: none;
@@ -244,6 +271,10 @@
244
271
  .datepicker-footer {
245
272
  width: 320px;
246
273
  }
274
+
275
+ .datepicker-table.with-week-numbers {
276
+ width: 350px;
277
+ }
247
278
 
248
279
  .datepicker-day-button {
249
280
  line-height: 44px;
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
  @extend .z-depth-1 !optional;
13
- background-color: variables.$dropdown-bg-color;
13
+ background-color: var(--mm-surface-color, variables.$dropdown-bg-color);
14
14
  margin: 0;
15
15
  display: none;
16
16
  min-width: 100px;
@@ -25,7 +25,7 @@
25
25
 
26
26
  li {
27
27
  &:hover, &.active {
28
- background-color: variables.$dropdown-hover-bg-color;
28
+ background-color: var(--mm-dropdown-hover, variables.$dropdown-hover-bg-color);
29
29
  }
30
30
 
31
31
  &:focus {
@@ -39,7 +39,7 @@
39
39
 
40
40
  & > a, & > span {
41
41
  font-size: 16px;
42
- color: variables.$dropdown-color;
42
+ color: var(--mm-text-primary, variables.$dropdown-color);
43
43
  display: block;
44
44
  line-height: 22px;
45
45
  padding: math.div((variables.$dropdown-item-height - 22px), 2) 16px;
@@ -62,7 +62,7 @@
62
62
 
63
63
 
64
64
  clear: both;
65
- color: variables.$off-black;
65
+ color: var(--mm-text-primary, variables.$off-black);
66
66
  cursor: pointer;
67
67
  min-height: variables.$dropdown-item-height;
68
68
  line-height: 1.5rem;
@@ -73,7 +73,7 @@
73
73
 
74
74
  body.keyboard-focused {
75
75
  .dropdown-content li:focus {
76
- background-color: color.adjust(variables.$dropdown-hover-bg-color, $lightness: -8%);
76
+ background-color: var(--mm-dropdown-focus, color.adjust(variables.$dropdown-hover-bg-color, $lightness: -8%));
77
77
  }
78
78
  }
79
79