mithril-materialized 3.15.0 → 3.17.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 (47) hide show
  1. package/README.md +32 -2
  2. package/dist/advanced.css +109 -4
  3. package/dist/button.d.ts +3 -1
  4. package/dist/circular-progress.d.ts +2 -2
  5. package/dist/combobox.d.ts +35 -0
  6. package/dist/components.css +144 -17
  7. package/dist/core.css +278 -3
  8. package/dist/floating-action-button.d.ts +2 -1
  9. package/dist/form-section.d.ts +35 -0
  10. package/dist/forms.css +280 -5
  11. package/dist/index.css +357 -22
  12. package/dist/index.d.ts +3 -2
  13. package/dist/index.esm.js +728 -299
  14. package/dist/index.esm.js.map +1 -0
  15. package/dist/index.js +741 -298
  16. package/dist/index.js.map +1 -0
  17. package/dist/index.min.css +2 -2
  18. package/dist/index.umd.js +741 -298
  19. package/dist/index.umd.js.map +1 -0
  20. package/dist/input-options.d.ts +4 -1
  21. package/dist/likert-scale.d.ts +2 -1
  22. package/dist/linear-progress.d.ts +2 -2
  23. package/dist/material-icon.d.ts +2 -1
  24. package/dist/radio.d.ts +9 -0
  25. package/dist/range-slider.d.ts +3 -2
  26. package/dist/rating.d.ts +2 -1
  27. package/dist/search-select.d.ts +15 -2
  28. package/dist/select.d.ts +14 -1
  29. package/dist/sidenav.d.ts +11 -1
  30. package/dist/treeview.d.ts +2 -2
  31. package/dist/types.d.ts +5 -0
  32. package/dist/utilities.css +93 -2
  33. package/dist/utils.d.ts +30 -1
  34. package/package.json +20 -20
  35. package/sass/components/_badge-component.scss +8 -0
  36. package/sass/components/_buttons.scss +9 -9
  37. package/sass/components/_global.scss +93 -0
  38. package/sass/components/_likert-scale.scss +24 -0
  39. package/sass/components/_sidenav.scss +21 -3
  40. package/sass/components/_theme-variables.scss +22 -1
  41. package/sass/components/_toggle-group.scss +3 -0
  42. package/sass/components/forms/_form-groups.scss +1 -1
  43. package/sass/components/forms/_form-section.scss +63 -0
  44. package/sass/components/forms/_forms.scss +1 -0
  45. package/sass/components/forms/_input-fields.scss +55 -0
  46. package/sass/components/forms/_range-enhanced.scss +3 -3
  47. package/sass/components/forms/_select.scss +85 -0
@@ -7,6 +7,33 @@
7
7
  html {
8
8
  box-sizing: border-box;
9
9
  }
10
+
11
+ /* Default themed scrollbar styling for all scroll containers */
12
+ * {
13
+ scrollbar-width: thin;
14
+ scrollbar-color: var(--mm-scrollbar-thumb-color, rgba(128, 128, 128, 0.35))
15
+ var(--mm-scrollbar-track-color, transparent);
16
+ }
17
+
18
+ *::-webkit-scrollbar {
19
+ width: 10px;
20
+ height: 10px;
21
+ }
22
+
23
+ *::-webkit-scrollbar-track {
24
+ background: var(--mm-scrollbar-track-color, transparent);
25
+ }
26
+
27
+ *::-webkit-scrollbar-thumb {
28
+ background-color: var(--mm-scrollbar-thumb-color, rgba(128, 128, 128, 0.35));
29
+ border-radius: 8px;
30
+ border: 2px solid var(--mm-scrollbar-track-color, transparent);
31
+ }
32
+
33
+ *::-webkit-scrollbar-thumb:hover {
34
+ background-color: var(--mm-scrollbar-thumb-hover-color, rgba(128, 128, 128, 0.5));
35
+ }
36
+
10
37
  *, *:before, *:after {
11
38
  box-sizing: inherit;
12
39
  }
@@ -735,6 +762,72 @@ td, th{
735
762
  Utility Classes
736
763
  *******************/
737
764
 
765
+ .mm-layout-row {
766
+ display: flex;
767
+ }
768
+
769
+ .mm-layout-row--center {
770
+ align-items: center;
771
+ }
772
+
773
+ .mm-layout-row--align-end {
774
+ align-items: flex-end;
775
+ }
776
+
777
+ .mm-layout-row--wrap {
778
+ flex-wrap: wrap;
779
+ }
780
+
781
+ .mm-layout-row--justify-start {
782
+ justify-content: flex-start;
783
+ }
784
+
785
+ .mm-layout-row--justify-end {
786
+ justify-content: flex-end;
787
+ }
788
+
789
+ .mm-layout-row--justify-between {
790
+ justify-content: space-between;
791
+ }
792
+
793
+ .mm-layout-stack {
794
+ display: flex;
795
+ flex-direction: column;
796
+ gap: var(--mm-layout-gap, 0);
797
+ }
798
+
799
+ .mm-layout-cluster {
800
+ display: flex;
801
+ align-items: center;
802
+ flex-wrap: wrap;
803
+ gap: var(--mm-layout-gap, 8px);
804
+ }
805
+
806
+ .mm-layout-grow {
807
+ flex: 1 1 auto;
808
+ min-width: 0;
809
+ }
810
+
811
+ .mm-layout-ml-auto {
812
+ margin-left: auto;
813
+ }
814
+
815
+ .mm-layout-ml-8 {
816
+ margin-left: var(--mm-layout-inline-gap, 8px);
817
+ }
818
+
819
+ .mm-layout-mr-8 {
820
+ margin-right: var(--mm-layout-inline-gap, 8px);
821
+ }
822
+
823
+ .mm-layout-item-icon {
824
+ margin-right: var(--mm-layout-icon-gap, 32px);
825
+ }
826
+
827
+ .mm-layout-gap-sm {
828
+ gap: var(--mm-layout-gap-sm, 8px);
829
+ }
830
+
738
831
  .hide {
739
832
  display: none !important;
740
833
  }
@@ -101,6 +101,14 @@ $likert-tooltip-text: white !default;
101
101
  line-height: 1.3;
102
102
  }
103
103
 
104
+ .likert-scale__item-anchor {
105
+ margin-left: 12px;
106
+ font-size: 0.875rem;
107
+ color: $likert-color-text-secondary;
108
+ line-height: 1.2;
109
+ text-align: left;
110
+ }
111
+
104
112
  // Scale container (right side with fixed width)
105
113
  .likert-scale__scale-container {
106
114
  flex: 0 0 auto;
@@ -345,8 +353,13 @@ $likert-tooltip-text: white !default;
345
353
  .likert-scale__item {
346
354
  flex-direction: row;
347
355
  justify-content: flex-start;
356
+ align-items: center;
348
357
  padding: 4px 0;
349
358
  width: 100%;
359
+
360
+ &:hover:not(.likert-scale__item--disabled):not(.likert-scale__item--readonly) {
361
+ transform: none;
362
+ }
350
363
  }
351
364
 
352
365
  .likert-scale__number {
@@ -405,8 +418,13 @@ $likert-tooltip-text: white !default;
405
418
  .likert-scale__item {
406
419
  flex-direction: row;
407
420
  justify-content: flex-start;
421
+ align-items: center;
408
422
  padding: 4px 0;
409
423
  width: 100%;
424
+
425
+ &:hover:not(.likert-scale__item--disabled):not(.likert-scale__item--readonly) {
426
+ transform: none;
427
+ }
410
428
  }
411
429
 
412
430
  .likert-scale__number {
@@ -544,6 +562,12 @@ $likert-tooltip-text: white !default;
544
562
 
545
563
  // RTL support
546
564
  [dir="rtl"] {
565
+ .likert-scale__item-anchor {
566
+ margin-left: 0;
567
+ margin-right: 12px;
568
+ text-align: right;
569
+ }
570
+
547
571
  .likert-scale__tooltip {
548
572
  &::after {
549
573
  transform: translateX(50%);
@@ -120,18 +120,36 @@ ul.sidenav.right-aligned li > a:not(.btn):not(.btn-large):not(.btn-flat):not(.bt
120
120
  margin: 0;
121
121
  transform: translateX(-100%);
122
122
  height: 100%;
123
- height: calc(100% + 60px);
124
- height: -moz-calc(100%); //Temporary Firefox Fix
125
- padding-bottom: 60px;
123
+ padding-bottom: 0;
126
124
  background-color: var(--mm-surface-color, variables.$sidenav-bg-color);
127
125
  z-index: 999;
128
126
  overflow-y: auto;
127
+ overflow-x: hidden;
129
128
  will-change: transform;
130
129
  backface-visibility: hidden;
131
130
  transform: translateX(-105%);
132
131
  transition: transform 0.3s ease, left 0.3s ease, right 0.3s ease;
133
132
  display: flex;
134
133
  flex-direction: column;
134
+ scrollbar-width: thin;
135
+ scrollbar-color: var(--mm-scrollbar-thumb-color, rgba(128, 128, 128, 0.3)) transparent;
136
+
137
+ &::-webkit-scrollbar {
138
+ width: 4px;
139
+ }
140
+
141
+ &::-webkit-scrollbar-track {
142
+ background: transparent;
143
+ }
144
+
145
+ &::-webkit-scrollbar-thumb {
146
+ background: var(--mm-scrollbar-thumb-color, rgba(128, 128, 128, 0.3));
147
+ border-radius: 2px;
148
+ }
149
+
150
+ &::-webkit-scrollbar-thumb:hover {
151
+ background: var(--mm-scrollbar-thumb-hover-color, rgba(128, 128, 128, 0.5));
152
+ }
135
153
 
136
154
  @extend .z-depth-1 !optional;
137
155
 
@@ -6,6 +6,7 @@
6
6
  --mm-primary-color: #26a69a;
7
7
  --mm-primary-color-light: #80cbc4;
8
8
  --mm-primary-color-dark: #00695c;
9
+ --mm-range-value-text: #000000;
9
10
 
10
11
  --mm-secondary-color: #ff6f00;
11
12
  --mm-secondary-color-light: #ffa726;
@@ -21,6 +22,7 @@
21
22
  --mm-text-secondary: rgba(0, 0, 0, 0.6);
22
23
  --mm-text-disabled: rgba(0, 0, 0, 0.38);
23
24
  --mm-text-hint: rgba(0, 0, 0, 0.38);
25
+ --mm-error-color: #f44336;
24
26
 
25
27
  // Border and divider colors
26
28
  --mm-border-color: rgba(0, 0, 0, 0.12);
@@ -63,6 +65,11 @@
63
65
  --mm-shadow-umbra: rgba(0, 0, 0, 0.2);
64
66
  --mm-shadow-penumbra: rgba(0, 0, 0, 0.14);
65
67
  --mm-shadow-ambient: rgba(0, 0, 0, 0.12);
68
+
69
+ // Scrollbar colors
70
+ --mm-scrollbar-track-color: #f1f1f1;
71
+ --mm-scrollbar-thumb-color: rgba(0, 0, 0, 0.35);
72
+ --mm-scrollbar-thumb-hover-color: rgba(0, 0, 0, 0.5);
66
73
 
67
74
  // Switch colors
68
75
  --mm-switch-checked-track: rgba(38, 166, 154, 0.3);
@@ -92,6 +99,7 @@ body {
92
99
  --mm-primary-color: #80cbc4;
93
100
  --mm-primary-color-light: #b2dfdb;
94
101
  --mm-primary-color-dark: #4db6ac;
102
+ --mm-range-value-text: #000000;
95
103
 
96
104
  --mm-secondary-color: #ffa726;
97
105
  --mm-secondary-color-light: #ffcc02;
@@ -107,6 +115,7 @@ body {
107
115
  --mm-text-secondary: rgba(255, 255, 255, 0.6);
108
116
  --mm-text-disabled: rgba(255, 255, 255, 0.38);
109
117
  --mm-text-hint: rgba(255, 255, 255, 0.38);
118
+ --mm-error-color: #ef5350;
110
119
 
111
120
  // Border and divider colors
112
121
  --mm-border-color: rgba(255, 255, 255, 0.12);
@@ -150,6 +159,11 @@ body {
150
159
  // Collection/Table hover (dark theme) - more subtle
151
160
  --mm-row-hover: rgba(255, 255, 255, 0.04);
152
161
  --mm-row-stripe: rgba(255, 255, 255, 0.02);
162
+
163
+ // Scrollbar colors (dark theme)
164
+ --mm-scrollbar-track-color: #1e1e1e;
165
+ --mm-scrollbar-thumb-color: rgba(255, 255, 255, 0.3);
166
+ --mm-scrollbar-thumb-hover-color: rgba(255, 255, 255, 0.45);
153
167
 
154
168
  // Switch colors (dark theme)
155
169
  --mm-switch-checked-track: rgba(128, 203, 196, 0.3);
@@ -169,6 +183,7 @@ body {
169
183
  --mm-primary-color: #80cbc4;
170
184
  --mm-primary-color-light: #b2dfdb;
171
185
  --mm-primary-color-dark: #4db6ac;
186
+ --mm-range-value-text: #000000;
172
187
 
173
188
  --mm-secondary-color: #ffa726;
174
189
  --mm-secondary-color-light: #ffcc02;
@@ -182,6 +197,7 @@ body {
182
197
  --mm-text-secondary: rgba(255, 255, 255, 0.6);
183
198
  --mm-text-disabled: rgba(255, 255, 255, 0.38);
184
199
  --mm-text-hint: rgba(255, 255, 255, 0.38);
200
+ --mm-error-color: #ef5350;
185
201
 
186
202
  --mm-border-color: rgba(255, 255, 255, 0.12);
187
203
  --mm-divider-color: rgba(255, 255, 255, 0.12);
@@ -217,5 +233,10 @@ body {
217
233
 
218
234
  // Table colors (auto dark theme)
219
235
  --mm-table-striped-color: rgba(255, 255, 255, 0.05);
236
+
237
+ // Scrollbar colors (auto dark theme)
238
+ --mm-scrollbar-track-color: #1e1e1e;
239
+ --mm-scrollbar-thumb-color: rgba(255, 255, 255, 0.3);
240
+ --mm-scrollbar-thumb-hover-color: rgba(255, 255, 255, 0.45);
220
241
  }
221
- }
242
+ }
@@ -5,6 +5,9 @@
5
5
  border: 1px solid var(--mm-border-color, #e0e0e0);
6
6
 
7
7
  .toggle-button {
8
+ display: inline-flex;
9
+ align-items: center;
10
+ justify-content: center;
8
11
  margin: 0;
9
12
  border-radius: 0;
10
13
  border-right: 1px solid var(--mm-border-color, #e0e0e0);
@@ -8,7 +8,7 @@
8
8
  /* Create columns that are at least 150px wide and fill the available space */
9
9
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
10
10
  /* Add space between grid items */
11
- gap: 15px;
11
+ gap: var(--mm-layout-gap-form, 15px);
12
12
  padding-top: 10px;
13
13
  padding-bottom: 20px;
14
14
  }
@@ -0,0 +1,63 @@
1
+ .mm-fieldset {
2
+ border: 1px solid var(--mm-border-color);
3
+ border-radius: 4px;
4
+ margin: 0 0 1.5rem;
5
+ padding: 1rem;
6
+ }
7
+
8
+ .mm-fieldset__legend {
9
+ font-size: 1rem;
10
+ font-weight: 500;
11
+ padding: 0 0.35rem;
12
+ }
13
+
14
+ .mm-fieldset__required,
15
+ .mm-fieldset__error,
16
+ .mm-validation-summary {
17
+ color: var(--mm-error-color);
18
+ }
19
+
20
+ .mm-fieldset__description,
21
+ .mm-form-section__description {
22
+ color: var(--mm-text-secondary);
23
+ margin: 0 0 1rem;
24
+ }
25
+
26
+ .mm-fieldset__error {
27
+ margin: 0.75rem 0 0;
28
+ }
29
+
30
+ .mm-form-section {
31
+ margin-bottom: 2rem;
32
+ }
33
+
34
+ .mm-form-section__header {
35
+ margin-bottom: 1rem;
36
+ }
37
+
38
+ .mm-form-section__title {
39
+ font-size: 1.3rem;
40
+ margin: 0 0 0.4rem;
41
+ }
42
+
43
+ .mm-validation-summary {
44
+ background: color-mix(in srgb, var(--mm-error-color) 10%, transparent);
45
+ border-left: 4px solid var(--mm-error-color);
46
+ margin: 0 0 1.25rem;
47
+ padding: 0.8rem 1rem;
48
+ }
49
+
50
+ .mm-validation-summary__title {
51
+ font-weight: 600;
52
+ margin: 0 0 0.4rem;
53
+ }
54
+
55
+ .mm-validation-summary__list {
56
+ margin: 0;
57
+ padding-left: 1.2rem;
58
+ }
59
+
60
+ .mm-validation-summary a {
61
+ color: inherit;
62
+ text-decoration: underline;
63
+ }
@@ -7,3 +7,4 @@
7
7
  @use "file-input";
8
8
  @use "range"; // Standard HTML5 range input styles
9
9
  @use "form-groups";
10
+ @use "form-section";
@@ -137,6 +137,61 @@ textarea.materialize-textarea {
137
137
  }
138
138
  }
139
139
 
140
+ // Number input controls
141
+ .input-field {
142
+ input.number-input:not(.browser-default) {
143
+ -moz-appearance: textfield;
144
+ padding-right: 2rem;
145
+
146
+ &::-webkit-inner-spin-button,
147
+ &::-webkit-outer-spin-button {
148
+ -webkit-appearance: none;
149
+ margin: 0;
150
+ }
151
+ }
152
+
153
+ .number-input-controls {
154
+ position: absolute;
155
+ top: 0;
156
+ right: 0;
157
+ display: flex;
158
+ flex-direction: column;
159
+ justify-content: center;
160
+ height: variables.$input-height;
161
+ }
162
+
163
+ .number-input-control {
164
+ display: flex;
165
+ align-items: center;
166
+ justify-content: center;
167
+ width: 1.75rem;
168
+ height: 1.5rem;
169
+ padding: 0;
170
+ border: 0;
171
+ border-radius: 2px;
172
+ background: transparent;
173
+ color: var(--mm-button-flat-text, variables.$primary-color);
174
+ cursor: pointer;
175
+ line-height: 1;
176
+
177
+ &:hover {
178
+ background-color: var(--mm-primary-color-alpha-10, rgba(38, 166, 154, 0.1));
179
+ }
180
+
181
+ &:focus-visible {
182
+ outline: 2px solid var(--mm-primary-color, variables.$primary-color);
183
+ outline-offset: -2px;
184
+ }
185
+
186
+ svg {
187
+ font-size: 1.25rem;
188
+ line-height: 1;
189
+ width: 1.25rem;
190
+ height: 1.25rem;
191
+ }
192
+ }
193
+ }
194
+
140
195
 
141
196
  /* Validation Sass Placeholders */
142
197
  %valid-input-style {
@@ -138,7 +138,7 @@
138
138
  .value-tooltip {
139
139
  position: absolute;
140
140
  background: var(--mm-primary-color, #26a69a);
141
- color: white;
141
+ color: var(--mm-range-value-text, #000);
142
142
  padding: 4px 8px;
143
143
  border-radius: 4px;
144
144
  font-size: 12px;
@@ -320,7 +320,7 @@
320
320
  .value {
321
321
  position: absolute;
322
322
  background: var(--mm-primary-color, #26a69a);
323
- color: white;
323
+ color: var(--mm-range-value-text, #000);
324
324
  padding: 2px 6px;
325
325
  border-radius: 4px;
326
326
  font-size: 12px;
@@ -403,4 +403,4 @@
403
403
  .double-range-slider {
404
404
  height: 100%;
405
405
  }
406
- }
406
+ }
@@ -127,6 +127,72 @@ select:disabled {
127
127
  user-select: none;
128
128
  }
129
129
 
130
+ // Outlined variant (opt-in via appearance='outlined')
131
+ .input-field.select-space.select-appearance-outlined {
132
+ position: relative;
133
+
134
+ > i.prefix.material-icons {
135
+ position: absolute;
136
+ left: 24px;
137
+ top: 50%;
138
+ transform: translateY(-50%);
139
+ margin: 0;
140
+ z-index: 2;
141
+ pointer-events: none;
142
+ }
143
+
144
+ > i.prefix.material-icons + .select-wrapper {
145
+ padding-left: 54px;
146
+ }
147
+
148
+ > i.prefix ~ .select-wrapper {
149
+ margin-left: 0;
150
+ width: 100%;
151
+ }
152
+
153
+ .select-wrapper {
154
+ border: 1px solid var(--mm-input-border, #9e9e9e);
155
+ border-radius: 8px;
156
+ background-color: var(--mm-surface-color, transparent);
157
+ padding: 0 12px;
158
+ min-height: var(--mm-input-height, 3rem);
159
+ display: flex;
160
+ align-items: center;
161
+ overflow: visible;
162
+ transition: border-color 0.2s ease, box-shadow 0.2s ease;
163
+
164
+ &:focus-within {
165
+ border-color: var(--mm-primary-color, #2196f3);
166
+ box-shadow: 0 0 0 1px var(--mm-primary-color, #2196f3);
167
+ }
168
+
169
+ input.select-dropdown {
170
+ border-bottom: none;
171
+ margin: 0;
172
+ width: auto;
173
+ flex: 1 1 auto;
174
+ height: var(--mm-input-height, 3rem);
175
+ line-height: var(--mm-input-height, 3rem);
176
+ padding-right: 24px;
177
+ }
178
+
179
+ .select-inline-label {
180
+ color: var(--mm-text-hint, #9e9e9e);
181
+ font-size: variables.$input-font-size;
182
+ margin-right: 8px;
183
+ white-space: nowrap;
184
+ flex: 0 0 auto;
185
+ pointer-events: none;
186
+ }
187
+
188
+ .caret {
189
+ right: 10px;
190
+ z-index: 2;
191
+ pointer-events: none;
192
+ }
193
+ }
194
+ }
195
+
130
196
  .select-wrapper i {
131
197
  color: var(--mm-text-primary, rgba(0,0,0,.87))
132
198
  }
@@ -270,6 +336,25 @@ body.keyboard-focused {
270
336
  }
271
337
  }
272
338
 
339
+ // Async loading and error messages should align with other informational rows
340
+ .search-select-loading-info,
341
+ .search-select-error-info {
342
+ padding: 8px 16px;
343
+ color: var(--mm-text-hint, #9e9e9e);
344
+ font-style: italic;
345
+ text-align: center;
346
+ border-bottom: none;
347
+
348
+ &:hover {
349
+ background-color: transparent;
350
+ cursor: default;
351
+ }
352
+ }
353
+
354
+ .dropdown-content li.search-select-error-info {
355
+ color: var(--mm-error-color, #f44336) !important;
356
+ }
357
+
273
358
  // Option labels for proper checkbox accessibility
274
359
  .search-select-option-label {
275
360
  display: flex;