kmaterialize 2.3.3-1.0.2 → 2.3.3-1.0.21

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 (42) hide show
  1. package/README.md +4 -4
  2. package/components/air-datepicker/_air-datepicker.scss +137 -0
  3. package/components/air-datepicker/air-datepicker.ts +192 -0
  4. package/components/alert/_alerts.scss +130 -0
  5. package/components/alert/alert.ts +73 -0
  6. package/components/appbar/appbar.css +301 -4
  7. package/components/button/_buttons.scss +39 -1
  8. package/components/card/_cards.scss +9 -1
  9. package/components/checkbox/_checkboxes.scss +120 -229
  10. package/components/collapsible/_collapsible.scss +50 -0
  11. package/components/color-input/_color-input.scss +124 -0
  12. package/components/color-input/color-input.ts +203 -0
  13. package/components/dropdown/dropdown.ts +1 -1
  14. package/components/file-input/_file-input-enhanced.scss +61 -0
  15. package/components/file-input/file-input.ts +203 -0
  16. package/components/kanban/_kanban.scss +148 -0
  17. package/components/kanban/kanban.ts +133 -0
  18. package/components/list/_collection.scss +10 -2
  19. package/components/number-input/number-input.ts +103 -0
  20. package/components/password-input/password-input.ts +72 -0
  21. package/components/slider/_range.scss +5 -1
  22. package/components/switch/_switches.scss +5 -0
  23. package/components/textfield/_input-fields.scss +4 -4
  24. package/components/textfield/_select.scss +54 -0
  25. package/components/tom-select/_tom-select-field.scss +256 -0
  26. package/components/tom-select/tom-select-field.ts +175 -0
  27. package/components/toolbar/_toolbar.scss +324 -0
  28. package/components/toolbar/toolbar.ts +152 -0
  29. package/dist/css/materialize.colors.min.css +2 -2
  30. package/dist/css/materialize.css +10575 -711
  31. package/dist/css/materialize.min.css +2 -2
  32. package/dist/css/materialize.min.css.map +1 -1
  33. package/dist/js/materialize.cjs.js +1136 -45
  34. package/dist/js/materialize.d.ts +227 -2
  35. package/dist/js/materialize.js +1136 -45
  36. package/dist/js/materialize.min.js +2 -2
  37. package/dist/js/materialize.mjs +1128 -46
  38. package/package.json +45 -1
  39. package/sass/_colors.scss +191 -5
  40. package/sass/_global.scss +240 -1
  41. package/sass/materialize.scss +14 -1
  42. package/sass/mixins.module.scss +6 -6
@@ -72,7 +72,13 @@
72
72
  margin-top: -2px;
73
73
  margin-left: 15px;
74
74
  margin-right: 15px;
75
- display: inline-block;
75
+ /* Was inline-block, which overrides .btn's own inline-flex;
76
+ align-items:center and breaks vertical centering of the button's
77
+ text - visually harmless on .btn-large (tall enough that the
78
+ misalignment doesn't stand out) but text nearly clips out the
79
+ bottom on the smaller .btn/.btn-flat/.btn-floating sizes. */
80
+ display: inline-flex;
81
+ align-items: center;
76
82
  }
77
83
 
78
84
  .navbar ul:not(.dropdown-content) > li > a.btn > .material-icons,
@@ -130,15 +136,52 @@
130
136
  .navbar .brand-logo {
131
137
  color: var(--md-sys-color-on-surface);
132
138
  font-size: var(--appbar-title-font-size);
133
- display: inline-block;
139
+ display: inline-flex;
140
+ align-items: center;
134
141
  padding: 0;
135
142
  }
136
143
 
137
144
  .navbar .brand-logo.center {
145
+ position: absolute;
138
146
  left: 50%;
139
147
  transform: translateX(-50%);
140
148
  }
141
149
 
150
+ /* Collision-safe centered app bar: the left link region and the generated
151
+ right spacer share the available width, keeping the logo truly centered
152
+ without taking it out of the flex layout. */
153
+ .navbar.appbar-bordered .nav-wrapper.nav-wrapper-centered::after {
154
+ content: '';
155
+ order: 3;
156
+ flex: 1 1 0;
157
+ min-width: 0;
158
+ }
159
+
160
+ .navbar.appbar-bordered .nav-wrapper.nav-wrapper-centered > ul {
161
+ order: 1;
162
+ flex: 1 1 0;
163
+ min-width: 0;
164
+ overflow-x: auto;
165
+ overflow-y: hidden;
166
+ scrollbar-width: none;
167
+ }
168
+
169
+ .navbar.appbar-bordered .nav-wrapper.nav-wrapper-centered > ul::-webkit-scrollbar {
170
+ display: none;
171
+ }
172
+
173
+ .navbar.appbar-bordered .nav-wrapper.nav-wrapper-centered > ul > li > a {
174
+ white-space: nowrap;
175
+ }
176
+
177
+ .navbar.appbar-bordered .nav-wrapper.nav-wrapper-centered > .brand-logo.center {
178
+ position: static;
179
+ order: 2;
180
+ flex: 0 0 auto;
181
+ left: auto;
182
+ transform: none;
183
+ }
184
+
142
185
  .navbar .brand-logo.right {
143
186
  right: 0.5rem;
144
187
  padding: 0;
@@ -151,15 +194,268 @@
151
194
  .navbar .brand-logo i.material-symbols-outlined,
152
195
  .navbar .brand-logo i.material-symbols-rounded,
153
196
  .navbar .brand-logo i.material-symbols-sharp {
154
- float: left;
197
+ /* Was float:left, paired with an explicit height/line-height (from
198
+ the general .navbar i rule) sized to the whole navbar row height,
199
+ inside a brand-logo that's only ever as tall as its own text.
200
+ Floating a block that tall out of a small inline-block parent
201
+ with nothing to clear it let it render outside/clipped by the
202
+ navbar row - invisible in practice. brand-logo is flex now, so
203
+ this just needs to be a normal flex item. */
155
204
  margin-right: 15px;
156
205
  }
157
206
 
207
+ /* Structured MD3 app-bar content. These hooks keep branded demos and app
208
+ shells from falling back to bare, loosely spaced anchor elements. */
209
+ .navbar.appbar-bordered {
210
+ overflow: visible;
211
+ background: var(--md-sys-color-surface-variant);
212
+ border: 1px solid var(--md-sys-color-outline-variant);
213
+ border-radius: 0;
214
+ box-shadow: 0 1px 2px color-mix(in srgb, var(--md-sys-color-shadow) 18%, transparent);
215
+ }
216
+
217
+ /* Layout variants. `navbar-rounded` adds the inset treatment; use
218
+ `navbar-full` for a flush, full-width rectangle. */
219
+ .navbar.appbar-bordered.navbar-rounded {
220
+ margin: 8px 0;
221
+ padding: 4px;
222
+ border-radius: 16px;
223
+ }
224
+
225
+ .navbar.appbar-bordered.navbar-full {
226
+ width: 100%;
227
+ margin: 0;
228
+ padding: 0;
229
+ border-radius: 0;
230
+ border-left: 0;
231
+ border-right: 0;
232
+ }
233
+
234
+ /* Extended app bars may contain tabs and a halfway FAB. Keep the rounded
235
+ surface on its children, but let the FAB extend below the bar. */
236
+ .navbar.appbar-bordered.nav-extended {
237
+ overflow: visible;
238
+ }
239
+
240
+ .navbar.appbar-bordered.nav-extended.navbar-rounded .nav-wrapper {
241
+ border-radius: 15px 15px 0 0;
242
+ }
243
+
244
+ .navbar.appbar-bordered.nav-extended.navbar-rounded .nav-content {
245
+ color: var(--md-sys-color-on-surface);
246
+ background: var(--md-sys-color-surface-variant);
247
+ border-radius: 0 0 15px 15px;
248
+ }
249
+
250
+ .navbar.appbar-bordered .nav-wrapper {
251
+ gap: 12px;
252
+ padding-inline: 12px;
253
+ background: var(--md-sys-color-surface-variant);
254
+ align-items: center;
255
+ min-width: 0;
256
+ overflow-x: auto;
257
+ overflow-y: hidden;
258
+ scrollbar-width: none;
259
+ }
260
+
261
+ .navbar.appbar-bordered .nav-wrapper > .brand-logo,
262
+ .navbar.appbar-bordered .nav-wrapper > ul:not(.dropdown-content),
263
+ .navbar.appbar-bordered .nav-actions > li {
264
+ align-self: center;
265
+ }
266
+
267
+ .navbar.appbar-bordered:not(.nav-extended) .nav-wrapper > .brand-logo,
268
+ .navbar.appbar-bordered:not(.nav-extended) .nav-wrapper > ul:not(.dropdown-content),
269
+ .navbar.appbar-bordered:not(.nav-extended) .nav-wrapper > ul:not(.dropdown-content) > li {
270
+ height: 40px;
271
+ }
272
+
273
+ .navbar.appbar-bordered .nav-actions > li {
274
+ display: flex;
275
+ align-items: center;
276
+ }
277
+
278
+ .navbar.appbar-bordered .nav-wrapper::-webkit-scrollbar {
279
+ display: none;
280
+ }
281
+
282
+ .navbar.appbar-bordered .nav-wrapper > ul:not(.dropdown-content) {
283
+ min-width: 0;
284
+ flex-shrink: 1;
285
+ }
286
+
287
+ .navbar.appbar-bordered.navbar-wrap .nav-wrapper {
288
+ flex-wrap: wrap;
289
+ height: auto;
290
+ row-gap: 8px;
291
+ overflow: visible;
292
+ }
293
+
294
+ .navbar.appbar-bordered.navbar-wrap .nav-wrapper > ul:not(.dropdown-content) {
295
+ flex-wrap: wrap;
296
+ white-space: normal;
297
+ }
298
+
299
+ .navbar .brand-logo .brand-logo-image {
300
+ box-sizing: border-box;
301
+ width: 40px;
302
+ height: 40px;
303
+ margin-right: 10px;
304
+ padding: 8px;
305
+ object-fit: contain;
306
+ background: var(--md-sys-color-primary-container);
307
+ border-radius: 12px;
308
+ }
309
+
310
+ .navbar .nav-separator {
311
+ flex: 0 0 1px;
312
+ width: 1px;
313
+ height: 32px;
314
+ margin-inline: 4px;
315
+ background: var(--md-sys-color-outline-variant);
316
+ }
317
+
318
+ .navbar .nav-context {
319
+ color: var(--md-sys-color-on-surface-variant);
320
+ font-size: 14px;
321
+ white-space: nowrap;
322
+ }
323
+
324
+ .navbar ul.nav-actions:not(.dropdown-content) {
325
+ gap: 8px;
326
+ }
327
+
328
+ .navbar.appbar-bordered ul:not(.dropdown-content):not(.nav-actions):not(.tabs) > li > a:not(.btn):not(.btn-floating) {
329
+ box-sizing: border-box;
330
+ height: 40px;
331
+ padding-inline: 12px;
332
+ line-height: 40px;
333
+ border-radius: 20px;
334
+ }
335
+
336
+ .navbar.appbar-bordered ul:not(.dropdown-content):not(.nav-actions):not(.tabs) > li > a:not(.btn):not(.btn-floating):hover {
337
+ background: color-mix(in srgb, var(--md-sys-color-on-surface) 8%, transparent);
338
+ }
339
+
340
+ .navbar.appbar-bordered ul:not(.dropdown-content):not(.nav-actions):not(.tabs) > li.active > a:not(.btn):not(.btn-floating) {
341
+ color: var(--md-sys-color-on-primary-container);
342
+ background: var(--md-sys-color-primary-container);
343
+ }
344
+
345
+ /* Text links use the same centred row as the app bar. The global navbar icon
346
+ rule intentionally sizes standalone icons to the full bar; undo that for
347
+ icons embedded beside link text. */
348
+ .navbar.appbar-bordered ul:not(.dropdown-content):not(.tabs) > li > a:not(.btn):not(.btn-floating):has(> .material-icons.left),
349
+ .navbar.appbar-bordered ul:not(.dropdown-content):not(.tabs) > li > a:not(.btn):not(.btn-floating):has(> .material-icons.right),
350
+ .navbar.appbar-bordered .dropdown-trigger:has(> .material-icons) {
351
+ display: inline-flex;
352
+ align-items: center;
353
+ gap: 8px;
354
+ min-height: 40px;
355
+ font-size: 16px;
356
+ line-height: 1;
357
+ }
358
+
359
+ .navbar.appbar-bordered ul:not(.dropdown-content):not(.tabs) > li > a > .material-icons:is(.left, .right) {
360
+ width: 24px;
361
+ height: 24px;
362
+ margin: 0;
363
+ line-height: 24px;
364
+ }
365
+
366
+ .navbar.appbar-bordered ul:not(.dropdown-content):not(.tabs) > li > a > .material-icons.right {
367
+ order: 1;
368
+ }
369
+
370
+ /* Tabs retain their component geometry and click target instead of inheriting
371
+ navigation-pill spacing. */
372
+ .navbar.appbar-bordered .tabs {
373
+ gap: 0;
374
+ background: transparent;
375
+ }
376
+
377
+ .navbar.appbar-bordered .tabs .tab > a {
378
+ height: 48px;
379
+ min-height: 48px;
380
+ padding-inline: 24px;
381
+ line-height: 48px;
382
+ border-radius: 0;
383
+ }
384
+
385
+ /* Buttons must remain legible and vertically centred in the constrained app
386
+ bar row, including legacy examples using btn-large. */
387
+ .navbar.appbar-bordered ul:not(.dropdown-content) > li > :is(.btn, .btn-large) {
388
+ box-sizing: border-box;
389
+ max-height: 48px;
390
+ margin: 0;
391
+ color: var(--md-sys-color-on-primary);
392
+ white-space: nowrap;
393
+ display: inline-flex;
394
+ align-items: center;
395
+ justify-content: center;
396
+ gap: 8px;
397
+ }
398
+
399
+ .navbar.appbar-bordered ul:not(.dropdown-content) > li > :is(.btn, .btn-large) > .material-icons {
400
+ flex: 0 0 20px;
401
+ width: 20px;
402
+ height: 20px;
403
+ margin-left: 8px;
404
+ line-height: 20px;
405
+ }
406
+
407
+ .navbar.appbar-bordered .dropdown-trigger {
408
+ flex: 0 0 auto;
409
+ white-space: nowrap;
410
+ }
411
+
412
+ .navbar.appbar-bordered ul:not(.dropdown-content) > li > a:has(> .material-icons:only-child) {
413
+ display: grid;
414
+ place-items: center;
415
+ width: 40px;
416
+ padding: 0;
417
+ }
418
+
419
+ .navbar.appbar-bordered ul:not(.dropdown-content) > li > a:has(> .material-icons:only-child) > .material-icons {
420
+ width: 24px;
421
+ height: 24px;
422
+ line-height: 24px;
423
+ text-align: center;
424
+ }
425
+
426
+ .navbar ul.nav-actions:not(.dropdown-content) > li > :is(.btn, .btn-floating) {
427
+ margin: 0;
428
+ }
429
+
430
+ .navbar .nav-actions .btn-floating {
431
+ display: inline-grid;
432
+ place-items: center;
433
+ width: 40px;
434
+ height: 40px;
435
+ padding: 0;
436
+ border-radius: 50%;
437
+ box-shadow: none;
438
+ }
439
+
440
+ .navbar .nav-actions .btn-floating > .material-icons {
441
+ display: block;
442
+ width: 24px;
443
+ height: 24px;
444
+ line-height: 24px;
445
+ text-align: center;
446
+ }
447
+
448
+ .navbar .nav-actions .btn > .material-icons {
449
+ height: 16px;
450
+ line-height: 16px;
451
+ }
452
+
158
453
  /* Title */
159
454
  .navbar .nav-title {
160
455
  display: inline-block;
456
+ color: var(--md-sys-color-on-surface);
161
457
  font-size: 32px;
162
- padding: 28px 0;
458
+ padding: 20px 24px 28px;
163
459
  }
164
460
 
165
461
  /* Navbar Search Form */
@@ -222,6 +518,7 @@
222
518
  }
223
519
 
224
520
  .nav,
521
+ .navbar,
225
522
  .navbar .nav-wrapper i,
226
523
  nav a.sidenav-trigger,
227
524
  .navbar a.sidenav-trigger i {
@@ -23,6 +23,19 @@
23
23
  );
24
24
  }
25
25
 
26
+ // .btn/.btn-large/.btn-small carry no color of their own - only the
27
+ // .filled/.tonal/.elevated/.outlined/.text modifiers do - so a bare
28
+ // .btn with none of those had no background or text color at all,
29
+ // same "invisible button" bug as .btn.text and .btn.elevated before
30
+ // they were fixed. Default to filled, same as v1's plain .btn always
31
+ // being a real visible button. Modifier classes still win (two
32
+ // classes beats one on specificity), and .btn-floating/.btn-flat
33
+ // already have their own complete color rules elsewhere so are
34
+ // deliberately excluded here.
35
+ .btn, .btn-large, .btn-small {
36
+ @include btn-filled;
37
+ }
38
+
26
39
  // Icon
27
40
  .btn.icon-left, .btn.icon-right {
28
41
  position: relative;
@@ -38,7 +51,10 @@
38
51
 
39
52
  .btn.icon-left i, .btn.icon-right i {
40
53
  position: absolute;
54
+ top: 50%;
41
55
  font-size: var(--btn-font-size-icon);
56
+ line-height: 1;
57
+ transform: translateY(-50%);
42
58
  }
43
59
 
44
60
  .btn.icon-left i {
@@ -115,7 +131,13 @@
115
131
  }
116
132
 
117
133
  &:focus {
118
- background-color: $button-floating-background-focus;
134
+ // Was $button-floating-background-focus (--md-ref-palette-secondary80,
135
+ // a raw MD3 secondary tone) - it doesn't track a custom theme's
136
+ // primary/container colors the way :hover's color-mix above does, so
137
+ // it could show as a clashing color (e.g. blue) on a themed palette.
138
+ // Same formula as :hover, just mixed a bit stronger for the stronger
139
+ // state.
140
+ background-color: color-mix(in srgb, var(--md-sys-color-primary-container), var(--md-sys-color-on-primary-container) 24%);
119
141
  @extend .z-depth-1-half;
120
142
  }
121
143
 
@@ -243,6 +265,22 @@ button.btn-floating {
243
265
  }
244
266
  }
245
267
 
268
+ // @implement /Users/kzarshenas/Sites/RodeoFx/rodeo_toolkit_2/app/Front/style/scss/component_enhance.scss
269
+ // Anchors the FAB (and its expanded menu) to the top of the viewport
270
+ // instead of the bottom, for layouts where the bottom edge is already
271
+ // occupied (e.g. a footer or bottom nav).
272
+ &.top {
273
+ top: 23px;
274
+ bottom: unset;
275
+ padding-bottom: 15px;
276
+ padding-top: 0;
277
+
278
+ > ul {
279
+ top: 64px;
280
+ bottom: unset;
281
+ }
282
+ }
283
+
246
284
  &.toolbar {
247
285
  padding: 0;
248
286
  height: 56px;
@@ -2,12 +2,14 @@
2
2
  @use '../../sass/mixins.module.scss' as *;
3
3
 
4
4
  .card-panel {
5
+ --background-color: color-mix(in srgb, var(--md-sys-color-surface), var(--md-sys-color-surface-tint) 17%);
6
+
5
7
  transition: box-shadow .25s;
6
8
  padding: 24px;
7
9
  margin: $element-top-margin 0 $element-bottom-margin 0;
8
10
  border-radius: 12px;
9
11
  @extend .z-depth-1;
10
- background-color: var(--md-sys-color-surface);
12
+ background-color: var(--background-color);
11
13
  }
12
14
 
13
15
  .card {
@@ -166,6 +168,12 @@
166
168
 
167
169
  i {
168
170
  line-height: 32px;
171
+
172
+ // @implement /Users/kzarshenas/Sites/RodeoFx/rodeo_toolkit_2/app/Front/style/scss/component_enhance.scss
173
+ // Sits on the title's baseline with a small gap before the text,
174
+ // instead of floating flush against it mid-line.
175
+ vertical-align: text-bottom;
176
+ margin-right: 6px;
169
177
  }
170
178
 
171
179
  &.activator {