mithril-materialized 2.0.0-beta.9 → 2.0.0-rc.2

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 (43) hide show
  1. package/README.md +353 -10
  2. package/dist/advanced.css +6 -6
  3. package/dist/button.d.ts +56 -11
  4. package/dist/components.css +1674 -6
  5. package/dist/core.css +13 -13
  6. package/dist/datatable.d.ts +291 -0
  7. package/dist/datepicker.d.ts +12 -2
  8. package/dist/file-upload.d.ts +23 -0
  9. package/dist/floating-action-button.d.ts +1 -1
  10. package/dist/forms.css +344 -13
  11. package/dist/icon.d.ts +2 -2
  12. package/dist/image-list.d.ts +70 -0
  13. package/dist/index.css +1940 -20
  14. package/dist/index.d.ts +8 -0
  15. package/dist/index.esm.js +2736 -659
  16. package/dist/index.js +2746 -658
  17. package/dist/index.min.css +2 -2
  18. package/dist/index.umd.js +2746 -658
  19. package/dist/input-options.d.ts +18 -4
  20. package/dist/input.d.ts +0 -1
  21. package/dist/masonry.d.ts +17 -0
  22. package/dist/material-icon.d.ts +3 -0
  23. package/dist/pickers.css +45 -0
  24. package/dist/range-slider.d.ts +42 -0
  25. package/dist/theme-switcher.d.ts +23 -0
  26. package/dist/timeline.d.ts +43 -0
  27. package/dist/treeview.d.ts +39 -0
  28. package/dist/types.d.ts +226 -0
  29. package/dist/utilities.css +16 -9
  30. package/package.json +12 -9
  31. package/sass/components/_cards.scss +10 -3
  32. package/sass/components/_datatable.scss +417 -0
  33. package/sass/components/_datepicker.scss +57 -0
  34. package/sass/components/_global.scss +6 -6
  35. package/sass/components/_image-list.scss +421 -0
  36. package/sass/components/_masonry.scss +241 -0
  37. package/sass/components/_timeline.scss +452 -0
  38. package/sass/components/_treeview.scss +353 -0
  39. package/sass/components/forms/_forms.scss +1 -1
  40. package/sass/components/forms/_range-enhanced.scss +406 -0
  41. package/sass/components/forms/_range.scss +5 -5
  42. package/sass/components/forms/_select.scss +1 -1
  43. package/sass/materialize.scss +6 -0
package/dist/forms.css CHANGED
@@ -128,21 +128,21 @@ video.responsive-video {
128
128
  height: 30px;
129
129
  }
130
130
  .pagination li a {
131
- color: #444;
131
+ color: var(--mm-text-primary, #444);
132
132
  display: inline-block;
133
133
  font-size: 1.2rem;
134
134
  padding: 0 10px;
135
135
  line-height: 30px;
136
136
  }
137
137
  .pagination li.active a {
138
- color: #fff;
138
+ color: var(--mm-text-on-primary, #fff);
139
139
  }
140
140
  .pagination li.active {
141
141
  background-color: #ee6e73;
142
142
  }
143
143
  .pagination li.disabled a {
144
144
  cursor: default;
145
- color: #999;
145
+ color: var(--mm-text-disabled, #999);
146
146
  }
147
147
  .pagination li i {
148
148
  font-size: 2rem;
@@ -473,8 +473,8 @@ td, th {
473
473
  .collection .collection-item.avatar i.circle {
474
474
  font-size: 18px;
475
475
  line-height: 42px;
476
- color: #fff;
477
- background-color: #999;
476
+ color: var(--mm-text-on-primary, #fff);
477
+ background-color: var(--mm-text-disabled, #999);
478
478
  text-align: center;
479
479
  }
480
480
  .collection .collection-item.avatar .title {
@@ -496,7 +496,7 @@ td, th {
496
496
  color: rgb(234.25, 250.25, 248.75);
497
497
  }
498
498
  .collection .collection-item.active .secondary-content {
499
- color: #fff;
499
+ color: var(--mm-text-on-primary, #fff);
500
500
  }
501
501
  .collection a.collection-item {
502
502
  display: block;
@@ -1372,7 +1372,7 @@ select:disabled {
1372
1372
  }
1373
1373
 
1374
1374
  .select-wrapper i {
1375
- color: rgba(0, 0, 0, 0.3);
1375
+ color: var(--mm-text-primary, rgba(0, 0, 0, 0.87));
1376
1376
  }
1377
1377
 
1378
1378
  .select-dropdown li.disabled,
@@ -1843,7 +1843,7 @@ input[type=range] {
1843
1843
 
1844
1844
  input[type=range]::-webkit-slider-runnable-track {
1845
1845
  height: 3px;
1846
- background: #c2c0c2;
1846
+ background: var(--mm-border-color, #c2c0c2);
1847
1847
  border: none;
1848
1848
  }
1849
1849
 
@@ -1866,13 +1866,13 @@ input[type=range]::-webkit-slider-thumb {
1866
1866
 
1867
1867
  input[type=range] {
1868
1868
  /* fix for FF unable to apply focus style bug */
1869
- border: 1px solid white;
1869
+ border: 1px solid var(--mm-card-background, white);
1870
1870
  /*required for proper track sizing in FF*/
1871
1871
  }
1872
1872
 
1873
1873
  input[type=range]::-moz-range-track {
1874
1874
  height: 3px;
1875
- background: #c2c0c2;
1875
+ background: var(--mm-border-color, #c2c0c2);
1876
1876
  border: none;
1877
1877
  }
1878
1878
 
@@ -1891,7 +1891,7 @@ input[type=range]::-moz-range-thumb {
1891
1891
  }
1892
1892
 
1893
1893
  input[type=range]:-moz-focusring {
1894
- outline: 1px solid #fff;
1894
+ outline: 1px solid var(--mm-card-background, #fff);
1895
1895
  outline-offset: -1px;
1896
1896
  }
1897
1897
 
@@ -1909,11 +1909,11 @@ input[type=range]::-ms-track {
1909
1909
  }
1910
1910
 
1911
1911
  input[type=range]::-ms-fill-lower {
1912
- background: #777;
1912
+ background: var(--mm-text-secondary, #777);
1913
1913
  }
1914
1914
 
1915
1915
  input[type=range]::-ms-fill-upper {
1916
- background: #ddd;
1916
+ background: var(--mm-surface-color, #ddd);
1917
1917
  }
1918
1918
 
1919
1919
  input[type=range]::-ms-thumb {
@@ -1929,6 +1929,337 @@ input[type=range]::-ms-thumb {
1929
1929
  box-shadow: 0 0 0 10px rgba(38, 166, 154, 0.26);
1930
1930
  }
1931
1931
 
1932
+ /* Enhanced Range Sliders
1933
+ ========================================================================== */
1934
+ .range-slider.vertical {
1935
+ -webkit-appearance: none;
1936
+ appearance: none;
1937
+ writing-mode: vertical-lr;
1938
+ direction: rtl;
1939
+ width: 6px;
1940
+ transform: none;
1941
+ }
1942
+ .range-slider.vertical::-webkit-slider-runnable-track {
1943
+ width: 6px;
1944
+ height: 100%;
1945
+ }
1946
+ .range-slider.vertical::-webkit-slider-thumb {
1947
+ -webkit-appearance: none;
1948
+ width: 14px;
1949
+ height: 14px;
1950
+ margin-left: -4px;
1951
+ margin-top: 0;
1952
+ }
1953
+ .range-slider.vertical::-moz-range-track {
1954
+ width: 6px;
1955
+ height: 100%;
1956
+ }
1957
+ .range-slider.vertical::-moz-range-thumb {
1958
+ width: 14px;
1959
+ height: 14px;
1960
+ margin-left: -12px;
1961
+ margin-top: 0;
1962
+ }
1963
+ .range-slider.disabled {
1964
+ opacity: 0.6;
1965
+ cursor: not-allowed;
1966
+ }
1967
+ .range-slider.disabled::-webkit-slider-thumb {
1968
+ cursor: not-allowed;
1969
+ }
1970
+ .range-slider.disabled::-moz-range-thumb {
1971
+ cursor: not-allowed;
1972
+ }
1973
+
1974
+ .single-range-slider {
1975
+ outline: none;
1976
+ }
1977
+ .single-range-slider.horizontal {
1978
+ height: 40px;
1979
+ position: relative;
1980
+ display: flex;
1981
+ align-items: center;
1982
+ }
1983
+ .single-range-slider.vertical {
1984
+ width: 40px;
1985
+ position: relative;
1986
+ display: flex;
1987
+ flex-direction: column;
1988
+ align-items: center;
1989
+ height: 100%;
1990
+ }
1991
+ .single-range-slider .track {
1992
+ background-color: var(--mm-border-color, #c2c0c2);
1993
+ border-radius: 2px;
1994
+ }
1995
+ .single-range-slider .track.horizontal {
1996
+ position: absolute;
1997
+ top: 25%;
1998
+ left: 0;
1999
+ transform: translateY(-50%);
2000
+ width: 100%;
2001
+ height: 4px;
2002
+ }
2003
+ .single-range-slider .track.vertical {
2004
+ position: absolute;
2005
+ bottom: 10px;
2006
+ width: 4px;
2007
+ height: 100%;
2008
+ }
2009
+ .single-range-slider .range-progress {
2010
+ background-color: var(--mm-primary-color, #26a69a);
2011
+ border-radius: 2px;
2012
+ }
2013
+ .single-range-slider .range-progress.horizontal {
2014
+ position: absolute;
2015
+ top: 25%;
2016
+ transform: translateY(-50%);
2017
+ height: 4px;
2018
+ }
2019
+ .single-range-slider .range-progress.vertical {
2020
+ position: absolute;
2021
+ bottom: 10px;
2022
+ width: 4px;
2023
+ }
2024
+ .single-range-slider .thumb {
2025
+ background-color: var(--mm-primary-color, #26a69a);
2026
+ transition: transform 0.1s ease, box-shadow 0.1s ease;
2027
+ width: 20px;
2028
+ height: 20px;
2029
+ border-radius: 50%;
2030
+ cursor: pointer;
2031
+ outline: none;
2032
+ }
2033
+ .single-range-slider .thumb.horizontal {
2034
+ position: absolute;
2035
+ transform: translateY(-50%);
2036
+ }
2037
+ .single-range-slider .thumb.vertical {
2038
+ position: absolute;
2039
+ }
2040
+ .single-range-slider .thumb:hover {
2041
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
2042
+ }
2043
+ .single-range-slider .thumb .value-tooltip {
2044
+ position: absolute;
2045
+ background: var(--mm-primary-color, #26a69a);
2046
+ color: white;
2047
+ padding: 4px 8px;
2048
+ border-radius: 4px;
2049
+ font-size: 12px;
2050
+ white-space: nowrap;
2051
+ min-width: 24px;
2052
+ text-align: center;
2053
+ pointer-events: none;
2054
+ z-index: 20;
2055
+ }
2056
+ .single-range-slider .thumb .value-tooltip.top {
2057
+ bottom: 100%;
2058
+ left: 50%;
2059
+ transform: translateX(-50%);
2060
+ margin-bottom: 8px;
2061
+ }
2062
+ .single-range-slider .thumb .value-tooltip.top::after {
2063
+ content: "";
2064
+ position: absolute;
2065
+ top: 100%;
2066
+ left: 50%;
2067
+ transform: translateX(-50%);
2068
+ border: 4px solid transparent;
2069
+ border-top-color: var(--mm-primary-color, #26a69a);
2070
+ }
2071
+ .single-range-slider .thumb .value-tooltip.bottom {
2072
+ top: 100%;
2073
+ left: 50%;
2074
+ transform: translateX(-50%);
2075
+ margin-top: 8px;
2076
+ }
2077
+ .single-range-slider .thumb .value-tooltip.bottom::after {
2078
+ content: "";
2079
+ position: absolute;
2080
+ bottom: 100%;
2081
+ left: 50%;
2082
+ transform: translateX(-50%);
2083
+ border: 4px solid transparent;
2084
+ border-bottom-color: var(--mm-primary-color, #26a69a);
2085
+ }
2086
+ .single-range-slider .thumb .value-tooltip.left {
2087
+ right: 100%;
2088
+ top: 50%;
2089
+ transform: translateY(-50%);
2090
+ margin-right: 8px;
2091
+ }
2092
+ .single-range-slider .thumb .value-tooltip.left::after {
2093
+ content: "";
2094
+ position: absolute;
2095
+ top: 50%;
2096
+ left: 100%;
2097
+ transform: translateY(-50%);
2098
+ border: 4px solid transparent;
2099
+ border-left-color: var(--mm-primary-color, #26a69a);
2100
+ }
2101
+ .single-range-slider .thumb .value-tooltip.right {
2102
+ left: 100%;
2103
+ top: 50%;
2104
+ transform: translateY(-50%);
2105
+ margin-left: 8px;
2106
+ }
2107
+ .single-range-slider .thumb .value-tooltip.right::after {
2108
+ content: "";
2109
+ position: absolute;
2110
+ top: 50%;
2111
+ right: 100%;
2112
+ transform: translateY(-50%);
2113
+ border: 4px solid transparent;
2114
+ border-right-color: var(--mm-primary-color, #26a69a);
2115
+ }
2116
+ .single-range-slider:focus .thumb, .single-range-slider:focus-visible .thumb {
2117
+ box-shadow: 0 0 0 3px var(--mm-primary-color-alpha-30, rgba(38, 166, 154, 0.3)), 0 4px 8px rgba(0, 0, 0, 0.2);
2118
+ }
2119
+ .single-range-slider:focus .thumb:hover, .single-range-slider:focus-visible .thumb:hover {
2120
+ box-shadow: 0 0 0 3px var(--mm-primary-color-alpha-30, rgba(38, 166, 154, 0.3)), 0 4px 8px rgba(0, 0, 0, 0.3);
2121
+ }
2122
+
2123
+ .double-range-slider {
2124
+ outline: none;
2125
+ border-radius: 4px;
2126
+ }
2127
+ .double-range-slider.horizontal {
2128
+ height: 40px;
2129
+ position: relative;
2130
+ display: flex;
2131
+ align-items: center;
2132
+ }
2133
+ .double-range-slider.vertical {
2134
+ width: 40px;
2135
+ position: relative;
2136
+ display: flex;
2137
+ flex-direction: column;
2138
+ align-items: center;
2139
+ }
2140
+ .double-range-slider .track {
2141
+ background-color: var(--mm-border-color, #c2c0c2);
2142
+ border-radius: 2px;
2143
+ }
2144
+ .double-range-slider .track.horizontal {
2145
+ position: absolute;
2146
+ top: 50%;
2147
+ left: 0;
2148
+ transform: translateY(-50%);
2149
+ width: 100%;
2150
+ height: 4px;
2151
+ }
2152
+ .double-range-slider .track.vertical {
2153
+ position: absolute;
2154
+ left: 50%;
2155
+ top: 0;
2156
+ transform: translateX(-50%);
2157
+ width: 4px;
2158
+ height: 100%;
2159
+ }
2160
+ .double-range-slider .range {
2161
+ background-color: var(--mm-primary-color, #26a69a);
2162
+ border-radius: 2px;
2163
+ }
2164
+ .double-range-slider .range.horizontal {
2165
+ position: absolute;
2166
+ top: 50%;
2167
+ transform: translateY(-50%);
2168
+ height: 4px;
2169
+ }
2170
+ .double-range-slider .range.vertical {
2171
+ position: absolute;
2172
+ left: 50%;
2173
+ transform: translateX(-50%);
2174
+ width: 4px;
2175
+ }
2176
+ .double-range-slider .thumb {
2177
+ background-color: var(--mm-primary-color, #26a69a);
2178
+ transition: transform 0.1s ease, box-shadow 0.1s ease;
2179
+ width: 20px;
2180
+ height: 20px;
2181
+ border-radius: 50%;
2182
+ cursor: pointer;
2183
+ outline: none;
2184
+ }
2185
+ .double-range-slider .thumb.horizontal {
2186
+ position: absolute;
2187
+ top: 50%;
2188
+ transform: translateY(-50%);
2189
+ }
2190
+ .double-range-slider .thumb.vertical {
2191
+ position: absolute;
2192
+ left: 50%;
2193
+ transform: translateX(-50%);
2194
+ }
2195
+ .double-range-slider .thumb:hover {
2196
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
2197
+ }
2198
+ .double-range-slider .thumb .value {
2199
+ position: absolute;
2200
+ background: var(--mm-primary-color, #26a69a);
2201
+ color: white;
2202
+ padding: 2px 6px;
2203
+ border-radius: 4px;
2204
+ font-size: 12px;
2205
+ white-space: nowrap;
2206
+ min-width: 24px;
2207
+ text-align: center;
2208
+ pointer-events: none;
2209
+ z-index: 20;
2210
+ }
2211
+ .double-range-slider .thumb .value.horizontal {
2212
+ top: -30px;
2213
+ left: 50%;
2214
+ transform: translateX(-50%);
2215
+ }
2216
+ .double-range-slider .thumb .value.horizontal::after {
2217
+ content: "";
2218
+ position: absolute;
2219
+ top: 100%;
2220
+ left: 50%;
2221
+ transform: translateX(-50%);
2222
+ border: 4px solid transparent;
2223
+ border-top-color: var(--mm-primary-color, #26a69a);
2224
+ }
2225
+ .double-range-slider .thumb .value.vertical {
2226
+ top: 50%;
2227
+ left: -35px;
2228
+ transform: translateY(-50%);
2229
+ }
2230
+ .double-range-slider .thumb .value.vertical::after {
2231
+ content: "";
2232
+ position: absolute;
2233
+ top: 50%;
2234
+ left: 100%;
2235
+ transform: translateY(-50%);
2236
+ border: 4px solid transparent;
2237
+ border-left-color: var(--mm-primary-color, #26a69a);
2238
+ }
2239
+ .double-range-slider .thumb:focus, .double-range-slider .thumb:focus-visible {
2240
+ box-shadow: 0 0 0 3px var(--mm-primary-color-alpha-30, rgba(38, 166, 154, 0.3)), 0 4px 8px rgba(0, 0, 0, 0.2);
2241
+ }
2242
+ .double-range-slider .thumb:focus:hover, .double-range-slider .thumb:focus-visible:hover {
2243
+ box-shadow: 0 0 0 3px var(--mm-primary-color-alpha-30, rgba(38, 166, 154, 0.3)), 0 4px 8px rgba(0, 0, 0, 0.3);
2244
+ }
2245
+ .double-range-slider:focus .thumb.min-thumb.active, .double-range-slider:focus .thumb.max-thumb.active, .double-range-slider:focus-visible .thumb.min-thumb.active, .double-range-slider:focus-visible .thumb.max-thumb.active {
2246
+ box-shadow: 0 0 0 3px var(--mm-primary-color-alpha-30, rgba(38, 166, 154, 0.3)), 0 4px 8px rgba(0, 0, 0, 0.2);
2247
+ }
2248
+ .double-range-slider:focus .thumb.min-thumb.active:hover, .double-range-slider:focus .thumb.max-thumb.active:hover, .double-range-slider:focus-visible .thumb.min-thumb.active:hover, .double-range-slider:focus-visible .thumb.max-thumb.active:hover {
2249
+ box-shadow: 0 0 0 3px var(--mm-primary-color-alpha-30, rgba(38, 166, 154, 0.3)), 0 4px 8px rgba(0, 0, 0, 0.3);
2250
+ }
2251
+
2252
+ .range-field.vertical {
2253
+ display: flex;
2254
+ flex-direction: column;
2255
+ align-items: center;
2256
+ min-height: 100px;
2257
+ padding-top: 20px;
2258
+ }
2259
+ .range-field.vertical .double-range-slider {
2260
+ height: 100%;
2261
+ }
2262
+
1932
2263
  /* File Input
1933
2264
  ========================================================================== */
1934
2265
  .file-field {
package/dist/icon.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { FactoryComponent, Attributes } from 'mithril';
2
- export interface MaterialIcon extends Attributes {
2
+ export interface IconAttrs extends Attributes {
3
3
  iconName: string;
4
4
  }
5
5
  /**
@@ -8,4 +8,4 @@ export interface MaterialIcon extends Attributes {
8
8
  * @example m(Icon, { className: 'small' }, 'create') renders a small 'create' icon
9
9
  * @example m(Icon, { className: 'prefix' }, iconName) renders the icon as a prefix
10
10
  */
11
- export declare const Icon: FactoryComponent<MaterialIcon>;
11
+ export declare const Icon: FactoryComponent<IconAttrs>;
@@ -0,0 +1,70 @@
1
+ import { FactoryComponent, Attributes } from 'mithril';
2
+ export interface ImageListActionButton {
3
+ /** Material icon name for the action button */
4
+ icon: string;
5
+ /** Click handler for the action button */
6
+ onclick: (item: ImageListItemAttrs, event: Event) => void;
7
+ /** Accessibility label for the button */
8
+ ariaLabel?: string;
9
+ /** Button position */
10
+ position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
11
+ }
12
+ export interface ImageListItemAttrs {
13
+ /** Image source URL */
14
+ src: string;
15
+ /** Alternative text for accessibility */
16
+ alt?: string;
17
+ /** Title text (appears in tooltip and overlay) */
18
+ title?: string;
19
+ /** Subtitle text for overlay */
20
+ subtitle?: string;
21
+ /** Number of columns this item should span */
22
+ cols?: number;
23
+ /** Number of rows this item should span */
24
+ rows?: number;
25
+ /** Whether this is a featured/highlighted item */
26
+ featured?: boolean;
27
+ /** Click handler for the image item */
28
+ onclick?: (item: ImageListItemAttrs, event: Event) => void;
29
+ /** Action button configuration */
30
+ actionButton?: ImageListActionButton;
31
+ /** Custom CSS class for the item */
32
+ className?: string;
33
+ /** Loading state for the image */
34
+ loading?: 'lazy' | 'eager';
35
+ /** Custom aspect ratio (width/height) */
36
+ aspectRatio?: number;
37
+ }
38
+ export interface ImageListBreakpoints {
39
+ xs?: number;
40
+ sm?: number;
41
+ md?: number;
42
+ lg?: number;
43
+ xl?: number;
44
+ }
45
+ export interface ImageListAttrs extends Attributes {
46
+ /** Array of image items to display */
47
+ items: ImageListItemAttrs[];
48
+ /** Layout variant */
49
+ variant?: 'standard' | 'quilted' | 'masonry' | 'woven';
50
+ /** Number of columns or responsive configuration */
51
+ cols?: number | ImageListBreakpoints;
52
+ /** Gap between items */
53
+ gap?: number | string;
54
+ /** Row height (auto for dynamic height) */
55
+ rowHeight?: number | 'auto';
56
+ /** Custom CSS class for the container */
57
+ className?: string;
58
+ /** Loading behavior for images */
59
+ loading?: 'lazy' | 'eager';
60
+ /** Whether to show image titles as overlay */
61
+ showTitles?: boolean;
62
+ /** Whether to show action buttons */
63
+ showActions?: boolean;
64
+ }
65
+ /**
66
+ * ImageList Component
67
+ * Displays a collection of images in various grid layouts
68
+ * Supports standard grid, quilted (varied sizes), masonry, and woven patterns
69
+ */
70
+ export declare const ImageList: FactoryComponent<ImageListAttrs>;