mithril-materialized 3.5.10 → 3.7.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.
- package/dist/analog-clock.d.ts +57 -0
- package/dist/components.css +0 -1
- package/dist/core.css +4 -0
- package/dist/digital-clock.d.ts +48 -0
- package/dist/dropdown.d.ts +2 -0
- package/dist/forms.css +4 -0
- package/dist/index.css +176 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.esm.js +1469 -456
- package/dist/index.js +1481 -455
- package/dist/index.min.css +1 -1
- package/dist/index.umd.js +1481 -455
- package/dist/pickers.css +170 -0
- package/dist/search-select.d.ts +12 -1
- package/dist/select.d.ts +5 -0
- package/dist/time-range-picker.d.ts +51 -0
- package/dist/time-utils.d.ts +17 -0
- package/dist/timepicker.d.ts +11 -0
- package/dist/utils.d.ts +12 -0
- package/package.json +1 -1
- package/sass/components/_collapsible.scss +0 -1
- package/sass/components/_timepicker.scss +196 -1
- package/sass/components/forms/_select.scss +20 -16
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { FactoryComponent } from 'mithril';
|
|
2
|
+
/**
|
|
3
|
+
* Attributes for the AnalogClock component
|
|
4
|
+
*/
|
|
5
|
+
export interface AnalogClockAttrs {
|
|
6
|
+
/** Current hours value (1-12 for 12-hour, 0-23 for 24-hour) */
|
|
7
|
+
hours: number;
|
|
8
|
+
/** Current minutes value (0-59) */
|
|
9
|
+
minutes: number;
|
|
10
|
+
/** Current AM/PM value (only relevant in 12-hour mode) */
|
|
11
|
+
amOrPm: 'AM' | 'PM';
|
|
12
|
+
/** Current view mode: 'hours' or 'minutes' */
|
|
13
|
+
currentView: 'hours' | 'minutes';
|
|
14
|
+
/** Whether to use 12-hour format (true) or 24-hour format (false) */
|
|
15
|
+
twelveHour: boolean;
|
|
16
|
+
/** Radius of the clock dial (default: 135) */
|
|
17
|
+
dialRadius?: number;
|
|
18
|
+
/** Radius of outer clock ticks (default: 105) */
|
|
19
|
+
outerRadius?: number;
|
|
20
|
+
/** Radius of inner clock ticks for 24-hour mode (default: 70) */
|
|
21
|
+
innerRadius?: number;
|
|
22
|
+
/** Radius of tick circles (default: 20) */
|
|
23
|
+
tickRadius?: number;
|
|
24
|
+
/** Round minutes to nearest 5 when dragging (default: false) */
|
|
25
|
+
roundBy5?: boolean;
|
|
26
|
+
/** Enable haptic feedback vibration (default: true) */
|
|
27
|
+
vibrate?: boolean;
|
|
28
|
+
/** Callback when time changes */
|
|
29
|
+
onTimeChange: (hours: number, minutes: number) => void;
|
|
30
|
+
/** Callback when view changes (optional) */
|
|
31
|
+
onViewChange?: (view: 'hours' | 'minutes') => void;
|
|
32
|
+
/** Optional reference to external hours display element for updates */
|
|
33
|
+
spanHours?: HTMLElement;
|
|
34
|
+
/** Optional reference to external minutes display element for updates */
|
|
35
|
+
spanMinutes?: HTMLElement;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* AnalogClock component - A draggable analog clock face for time selection
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* m(AnalogClock, {
|
|
43
|
+
* hours: 10,
|
|
44
|
+
* minutes: 30,
|
|
45
|
+
* amOrPm: 'AM',
|
|
46
|
+
* currentView: 'hours',
|
|
47
|
+
* twelveHour: true,
|
|
48
|
+
* onTimeChange: (hours, minutes) => {
|
|
49
|
+
* console.log(`Time changed to ${hours}:${minutes}`);
|
|
50
|
+
* },
|
|
51
|
+
* onViewChange: (view) => {
|
|
52
|
+
* console.log(`View changed to ${view}`);
|
|
53
|
+
* }
|
|
54
|
+
* })
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export declare const AnalogClock: FactoryComponent<AnalogClockAttrs>;
|
package/dist/components.css
CHANGED
package/dist/core.css
CHANGED
|
@@ -3168,6 +3168,10 @@ body.keyboard-focused .select-dropdown.dropdown-content li:focus {
|
|
|
3168
3168
|
background-color: var(--mm-dropdown-focus, rgba(0, 0, 0, 0.08));
|
|
3169
3169
|
}
|
|
3170
3170
|
|
|
3171
|
+
.select-dropdown.dropdown-content {
|
|
3172
|
+
max-height: 400px;
|
|
3173
|
+
overflow-y: auto;
|
|
3174
|
+
}
|
|
3171
3175
|
.select-dropdown.dropdown-content li:hover {
|
|
3172
3176
|
background-color: var(--mm-dropdown-hover, rgba(0, 0, 0, 0.08));
|
|
3173
3177
|
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { FactoryComponent } from 'mithril';
|
|
2
|
+
/**
|
|
3
|
+
* Attributes for the DigitalClock component
|
|
4
|
+
*/
|
|
5
|
+
export interface DigitalClockAttrs {
|
|
6
|
+
/** Current hours value (1-12 for 12-hour, 0-23 for 24-hour) */
|
|
7
|
+
hours: number;
|
|
8
|
+
/** Current minutes value (0-59) */
|
|
9
|
+
minutes: number;
|
|
10
|
+
/** Current AM/PM value (only relevant in 12-hour mode) */
|
|
11
|
+
amOrPm: 'AM' | 'PM';
|
|
12
|
+
/** Whether to use 12-hour format (true) or 24-hour format (false) */
|
|
13
|
+
twelveHour: boolean;
|
|
14
|
+
/** Step between minute options (default: 5) */
|
|
15
|
+
minuteStep?: number;
|
|
16
|
+
/** Step between hour options (default: 1) */
|
|
17
|
+
hourStep?: number;
|
|
18
|
+
/** Minimum allowed time in format "HH:MM" or "HH:MM AM/PM" */
|
|
19
|
+
minTime?: string;
|
|
20
|
+
/** Maximum allowed time in format "HH:MM" or "HH:MM AM/PM" */
|
|
21
|
+
maxTime?: string;
|
|
22
|
+
/** Callback when time changes */
|
|
23
|
+
onTimeChange: (hours: number, minutes: number, amOrPm: 'AM' | 'PM') => void;
|
|
24
|
+
/** Optional reference to external hours display element for updates */
|
|
25
|
+
spanHours?: HTMLElement;
|
|
26
|
+
/** Optional reference to external minutes display element for updates */
|
|
27
|
+
spanMinutes?: HTMLElement;
|
|
28
|
+
/** Optional reference to external AM/PM display element for updates */
|
|
29
|
+
spanAmPm?: HTMLElement;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* DigitalClock component - A scrollable digital time picker
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* m(DigitalClock, {
|
|
37
|
+
* hours: 10,
|
|
38
|
+
* minutes: 30,
|
|
39
|
+
* amOrPm: 'AM',
|
|
40
|
+
* twelveHour: true,
|
|
41
|
+
* minuteStep: 5,
|
|
42
|
+
* onTimeChange: (hours, minutes, amOrPm) => {
|
|
43
|
+
* console.log(`Time changed to ${hours}:${minutes} ${amOrPm}`);
|
|
44
|
+
* }
|
|
45
|
+
* })
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export declare const DigitalClock: FactoryComponent<DigitalClockAttrs>;
|
package/dist/dropdown.d.ts
CHANGED
|
@@ -43,6 +43,8 @@ export interface DropdownAttrs<T extends string | number> extends Attributes {
|
|
|
43
43
|
iconName?: string;
|
|
44
44
|
/** Add a description underneath the input field. */
|
|
45
45
|
helperText?: string;
|
|
46
|
+
/** Max height of the dropdown menu, default '400px', use 'none' to disable it */
|
|
47
|
+
maxHeight?: string;
|
|
46
48
|
}
|
|
47
49
|
/** Pure TypeScript Dropdown component - no Materialize dependencies */
|
|
48
50
|
export declare const Dropdown: <T extends string | number>() => Component<DropdownAttrs<T>>;
|
package/dist/forms.css
CHANGED
|
@@ -1413,6 +1413,10 @@ body.keyboard-focused .select-dropdown.dropdown-content li:focus {
|
|
|
1413
1413
|
background-color: var(--mm-dropdown-focus, rgba(0, 0, 0, 0.08));
|
|
1414
1414
|
}
|
|
1415
1415
|
|
|
1416
|
+
.select-dropdown.dropdown-content {
|
|
1417
|
+
max-height: 400px;
|
|
1418
|
+
overflow-y: auto;
|
|
1419
|
+
}
|
|
1416
1420
|
.select-dropdown.dropdown-content li:hover {
|
|
1417
1421
|
background-color: var(--mm-dropdown-hover, rgba(0, 0, 0, 0.08));
|
|
1418
1422
|
}
|
package/dist/index.css
CHANGED
|
@@ -5580,7 +5580,6 @@ body.keyboard-focused .dropdown-content li:focus {
|
|
|
5580
5580
|
.collapsible-header .collapsible-header-text,
|
|
5581
5581
|
.collapsible-header .collapsible-header-content {
|
|
5582
5582
|
flex: 1;
|
|
5583
|
-
display: flex;
|
|
5584
5583
|
align-items: center;
|
|
5585
5584
|
gap: 1rem;
|
|
5586
5585
|
}
|
|
@@ -6914,6 +6913,10 @@ body.keyboard-focused .select-dropdown.dropdown-content li:focus {
|
|
|
6914
6913
|
background-color: var(--mm-dropdown-focus, rgba(0, 0, 0, 0.08));
|
|
6915
6914
|
}
|
|
6916
6915
|
|
|
6916
|
+
.select-dropdown.dropdown-content {
|
|
6917
|
+
max-height: 400px;
|
|
6918
|
+
overflow-y: auto;
|
|
6919
|
+
}
|
|
6917
6920
|
.select-dropdown.dropdown-content li:hover {
|
|
6918
6921
|
background-color: var(--mm-dropdown-hover, rgba(0, 0, 0, 0.08));
|
|
6919
6922
|
}
|
|
@@ -9093,12 +9096,14 @@ ul.sidenav.right-aligned li > a:not(.btn):not(.btn-large):not(.btn-flat):not(.bt
|
|
|
9093
9096
|
.timepicker-modal {
|
|
9094
9097
|
max-width: 325px;
|
|
9095
9098
|
max-height: none;
|
|
9099
|
+
overflow: hidden;
|
|
9096
9100
|
}
|
|
9097
9101
|
|
|
9098
9102
|
.timepicker-container.modal-content {
|
|
9099
9103
|
display: flex;
|
|
9100
9104
|
flex-direction: column;
|
|
9101
9105
|
padding: 0;
|
|
9106
|
+
overflow: hidden;
|
|
9102
9107
|
}
|
|
9103
9108
|
|
|
9104
9109
|
.text-primary {
|
|
@@ -9186,6 +9191,10 @@ ul.sidenav.right-aligned li > a:not(.btn):not(.btn-large):not(.btn-flat):not(.bt
|
|
|
9186
9191
|
bottom: 0;
|
|
9187
9192
|
}
|
|
9188
9193
|
|
|
9194
|
+
.timepicker-dial {
|
|
9195
|
+
pointer-events: none;
|
|
9196
|
+
}
|
|
9197
|
+
|
|
9189
9198
|
.timepicker-minutes {
|
|
9190
9199
|
visibility: hidden;
|
|
9191
9200
|
}
|
|
@@ -9200,6 +9209,7 @@ ul.sidenav.right-aligned li > a:not(.btn):not(.btn-large):not(.btn-flat):not(.bt
|
|
|
9200
9209
|
position: absolute;
|
|
9201
9210
|
cursor: pointer;
|
|
9202
9211
|
font-size: 15px;
|
|
9212
|
+
pointer-events: none;
|
|
9203
9213
|
}
|
|
9204
9214
|
|
|
9205
9215
|
.timepicker-tick.active,
|
|
@@ -9265,6 +9275,171 @@ ul.sidenav.right-aligned li > a:not(.btn):not(.btn-large):not(.btn-flat):not(.bt
|
|
|
9265
9275
|
padding: 0 20px;
|
|
9266
9276
|
}
|
|
9267
9277
|
|
|
9278
|
+
/* Digital Clock Mode */
|
|
9279
|
+
.timepicker-digital-mode {
|
|
9280
|
+
padding: 20px;
|
|
9281
|
+
display: flex;
|
|
9282
|
+
flex-direction: column;
|
|
9283
|
+
align-items: center;
|
|
9284
|
+
flex: 2.5 auto;
|
|
9285
|
+
overflow: hidden;
|
|
9286
|
+
}
|
|
9287
|
+
|
|
9288
|
+
.timepicker-digital-clock {
|
|
9289
|
+
display: flex;
|
|
9290
|
+
align-items: center;
|
|
9291
|
+
gap: 8px;
|
|
9292
|
+
margin-bottom: 20px;
|
|
9293
|
+
-webkit-user-select: none;
|
|
9294
|
+
-moz-user-select: none;
|
|
9295
|
+
user-select: none;
|
|
9296
|
+
overflow: hidden;
|
|
9297
|
+
}
|
|
9298
|
+
|
|
9299
|
+
.digital-clock-column {
|
|
9300
|
+
width: 80px;
|
|
9301
|
+
height: 240px;
|
|
9302
|
+
overflow-y: scroll;
|
|
9303
|
+
overflow-x: hidden;
|
|
9304
|
+
scroll-snap-type: y mandatory;
|
|
9305
|
+
scrollbar-width: thin;
|
|
9306
|
+
scrollbar-color: transparent transparent;
|
|
9307
|
+
position: relative;
|
|
9308
|
+
}
|
|
9309
|
+
.digital-clock-column::-webkit-scrollbar {
|
|
9310
|
+
width: 6px;
|
|
9311
|
+
}
|
|
9312
|
+
.digital-clock-column::-webkit-scrollbar-track {
|
|
9313
|
+
background: transparent;
|
|
9314
|
+
}
|
|
9315
|
+
.digital-clock-column::-webkit-scrollbar-thumb {
|
|
9316
|
+
background: transparent;
|
|
9317
|
+
border-radius: 3px;
|
|
9318
|
+
}
|
|
9319
|
+
.digital-clock-column:hover {
|
|
9320
|
+
scrollbar-color: rgba(0, 0, 0, 0.3) transparent;
|
|
9321
|
+
}
|
|
9322
|
+
.digital-clock-column:hover::-webkit-scrollbar-thumb {
|
|
9323
|
+
background: rgba(0, 0, 0, 0.3);
|
|
9324
|
+
}
|
|
9325
|
+
.digital-clock-column:hover::-webkit-scrollbar-thumb:hover {
|
|
9326
|
+
background: rgba(0, 0, 0, 0.5);
|
|
9327
|
+
}
|
|
9328
|
+
.digital-clock-column {
|
|
9329
|
+
background: linear-gradient(to bottom, var(--mm-background-color, #fafafa) 0%, transparent 20%, transparent 80%, var(--mm-background-color, #fafafa) 100%);
|
|
9330
|
+
}
|
|
9331
|
+
.digital-clock-column.ampm-column {
|
|
9332
|
+
width: 60px;
|
|
9333
|
+
scrollbar-width: none;
|
|
9334
|
+
}
|
|
9335
|
+
.digital-clock-column.ampm-column::-webkit-scrollbar {
|
|
9336
|
+
display: none;
|
|
9337
|
+
}
|
|
9338
|
+
.digital-clock-column::before, .digital-clock-column::after {
|
|
9339
|
+
content: "";
|
|
9340
|
+
position: absolute;
|
|
9341
|
+
left: 0;
|
|
9342
|
+
right: 0;
|
|
9343
|
+
height: 1px;
|
|
9344
|
+
pointer-events: none;
|
|
9345
|
+
z-index: 1;
|
|
9346
|
+
background-color: rgba(0, 0, 0, 0.1);
|
|
9347
|
+
}
|
|
9348
|
+
.digital-clock-column::before {
|
|
9349
|
+
top: calc(50% - 24px);
|
|
9350
|
+
}
|
|
9351
|
+
.digital-clock-column::after {
|
|
9352
|
+
top: calc(50% + 24px);
|
|
9353
|
+
}
|
|
9354
|
+
|
|
9355
|
+
.digital-clock-item {
|
|
9356
|
+
height: 48px;
|
|
9357
|
+
display: flex;
|
|
9358
|
+
align-items: center;
|
|
9359
|
+
justify-content: center;
|
|
9360
|
+
font-size: 1.5rem;
|
|
9361
|
+
font-weight: 300;
|
|
9362
|
+
scroll-snap-align: center;
|
|
9363
|
+
cursor: pointer;
|
|
9364
|
+
color: rgba(0, 0, 0, 0.4);
|
|
9365
|
+
transition: all 0.2s ease;
|
|
9366
|
+
}
|
|
9367
|
+
.digital-clock-item:hover:not(.padding):not(.disabled) {
|
|
9368
|
+
background-color: rgba(0, 0, 0, 0.05);
|
|
9369
|
+
}
|
|
9370
|
+
.digital-clock-item.selected {
|
|
9371
|
+
color: var(--mm-primary-color, #26a69a);
|
|
9372
|
+
font-weight: 500;
|
|
9373
|
+
font-size: 2rem;
|
|
9374
|
+
}
|
|
9375
|
+
.digital-clock-item.disabled {
|
|
9376
|
+
color: rgba(0, 0, 0, 0.15);
|
|
9377
|
+
cursor: not-allowed;
|
|
9378
|
+
pointer-events: none;
|
|
9379
|
+
}
|
|
9380
|
+
.digital-clock-item.padding {
|
|
9381
|
+
pointer-events: none;
|
|
9382
|
+
cursor: default;
|
|
9383
|
+
}
|
|
9384
|
+
|
|
9385
|
+
.digital-clock-separator {
|
|
9386
|
+
font-size: 2rem;
|
|
9387
|
+
font-weight: 300;
|
|
9388
|
+
margin: 0 4px;
|
|
9389
|
+
color: rgba(0, 0, 0, 0.6);
|
|
9390
|
+
}
|
|
9391
|
+
|
|
9392
|
+
/* Time Range Picker Styles */
|
|
9393
|
+
.timerange-display-vertical {
|
|
9394
|
+
flex: 1 auto;
|
|
9395
|
+
background-color: #26a69a;
|
|
9396
|
+
padding: 20px;
|
|
9397
|
+
display: flex;
|
|
9398
|
+
flex-direction: column;
|
|
9399
|
+
gap: 20px;
|
|
9400
|
+
min-width: 200px;
|
|
9401
|
+
}
|
|
9402
|
+
|
|
9403
|
+
.timerange-time-section {
|
|
9404
|
+
color: rgba(255, 255, 255, 0.6);
|
|
9405
|
+
}
|
|
9406
|
+
.timerange-time-section.active {
|
|
9407
|
+
color: rgb(255, 255, 255);
|
|
9408
|
+
}
|
|
9409
|
+
|
|
9410
|
+
.timerange-label {
|
|
9411
|
+
font-size: 0.9rem;
|
|
9412
|
+
font-weight: 300;
|
|
9413
|
+
margin-bottom: 8px;
|
|
9414
|
+
opacity: 0.8;
|
|
9415
|
+
}
|
|
9416
|
+
|
|
9417
|
+
.timerange-time {
|
|
9418
|
+
font-size: 3rem;
|
|
9419
|
+
font-weight: 300;
|
|
9420
|
+
letter-spacing: 0.05em;
|
|
9421
|
+
min-width: 200px;
|
|
9422
|
+
display: flex;
|
|
9423
|
+
align-items: baseline;
|
|
9424
|
+
}
|
|
9425
|
+
|
|
9426
|
+
.timerange-hours {
|
|
9427
|
+
display: inline-block;
|
|
9428
|
+
min-width: 2ch;
|
|
9429
|
+
text-align: right;
|
|
9430
|
+
}
|
|
9431
|
+
|
|
9432
|
+
.timerange-minutes {
|
|
9433
|
+
display: inline-block;
|
|
9434
|
+
min-width: 2ch;
|
|
9435
|
+
text-align: left;
|
|
9436
|
+
}
|
|
9437
|
+
|
|
9438
|
+
.timerange-ampm {
|
|
9439
|
+
font-size: 1.5rem;
|
|
9440
|
+
margin-left: 8px;
|
|
9441
|
+
}
|
|
9442
|
+
|
|
9268
9443
|
/* Media Queries */
|
|
9269
9444
|
@media only screen and (min-width : 601px) {
|
|
9270
9445
|
.timepicker-modal {
|
package/dist/index.d.ts
CHANGED
|
@@ -30,6 +30,11 @@ export * from './switch';
|
|
|
30
30
|
export * from './tabs';
|
|
31
31
|
export * from './search-select';
|
|
32
32
|
export * from './timepicker';
|
|
33
|
+
export { TimeRangePicker } from './time-range-picker';
|
|
34
|
+
export type { TimeRangePickerAttrs } from './time-range-picker';
|
|
35
|
+
export * from './digital-clock';
|
|
36
|
+
export * from './analog-clock';
|
|
37
|
+
export * from './time-utils';
|
|
33
38
|
export * from './toast';
|
|
34
39
|
export * from './tooltip';
|
|
35
40
|
export * from './utils';
|