mithril-materialized 3.6.0 → 3.8.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/digital-clock.d.ts +48 -0
- package/dist/index.css +201 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.esm.js +1450 -412
- package/dist/index.js +1462 -411
- package/dist/index.min.css +1 -1
- package/dist/index.umd.js +1462 -411
- package/dist/pickers.css +170 -0
- package/dist/select.d.ts +2 -1
- 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/toggle-button.d.ts +46 -0
- package/dist/toggle-group.d.ts +84 -0
- package/dist/utils.d.ts +3 -10
- package/package.json +1 -1
- package/sass/components/_timepicker.scss +196 -1
- package/sass/components/_toggle-group.scss +36 -0
- package/sass/materialize.scss +1 -0
|
@@ -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>;
|
|
@@ -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/index.css
CHANGED
|
@@ -9096,12 +9096,14 @@ ul.sidenav.right-aligned li > a:not(.btn):not(.btn-large):not(.btn-flat):not(.bt
|
|
|
9096
9096
|
.timepicker-modal {
|
|
9097
9097
|
max-width: 325px;
|
|
9098
9098
|
max-height: none;
|
|
9099
|
+
overflow: hidden;
|
|
9099
9100
|
}
|
|
9100
9101
|
|
|
9101
9102
|
.timepicker-container.modal-content {
|
|
9102
9103
|
display: flex;
|
|
9103
9104
|
flex-direction: column;
|
|
9104
9105
|
padding: 0;
|
|
9106
|
+
overflow: hidden;
|
|
9105
9107
|
}
|
|
9106
9108
|
|
|
9107
9109
|
.text-primary {
|
|
@@ -9189,6 +9191,10 @@ ul.sidenav.right-aligned li > a:not(.btn):not(.btn-large):not(.btn-flat):not(.bt
|
|
|
9189
9191
|
bottom: 0;
|
|
9190
9192
|
}
|
|
9191
9193
|
|
|
9194
|
+
.timepicker-dial {
|
|
9195
|
+
pointer-events: none;
|
|
9196
|
+
}
|
|
9197
|
+
|
|
9192
9198
|
.timepicker-minutes {
|
|
9193
9199
|
visibility: hidden;
|
|
9194
9200
|
}
|
|
@@ -9203,6 +9209,7 @@ ul.sidenav.right-aligned li > a:not(.btn):not(.btn-large):not(.btn-flat):not(.bt
|
|
|
9203
9209
|
position: absolute;
|
|
9204
9210
|
cursor: pointer;
|
|
9205
9211
|
font-size: 15px;
|
|
9212
|
+
pointer-events: none;
|
|
9206
9213
|
}
|
|
9207
9214
|
|
|
9208
9215
|
.timepicker-tick.active,
|
|
@@ -9268,6 +9275,171 @@ ul.sidenav.right-aligned li > a:not(.btn):not(.btn-large):not(.btn-flat):not(.bt
|
|
|
9268
9275
|
padding: 0 20px;
|
|
9269
9276
|
}
|
|
9270
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
|
+
|
|
9271
9443
|
/* Media Queries */
|
|
9272
9444
|
@media only screen and (min-width : 601px) {
|
|
9273
9445
|
.timepicker-modal {
|
|
@@ -11842,4 +12014,33 @@ body.dark {
|
|
|
11842
12014
|
.rating--focused:not(.rating--read-only):not(.rating--disabled) .rating__items {
|
|
11843
12015
|
transform: none;
|
|
11844
12016
|
}
|
|
12017
|
+
}
|
|
12018
|
+
.toggle-group {
|
|
12019
|
+
display: inline-flex;
|
|
12020
|
+
border-radius: 4px;
|
|
12021
|
+
overflow: hidden;
|
|
12022
|
+
border: 1px solid var(--mm-border-color, #e0e0e0);
|
|
12023
|
+
}
|
|
12024
|
+
.toggle-group .toggle-button {
|
|
12025
|
+
margin: 0;
|
|
12026
|
+
border-radius: 0;
|
|
12027
|
+
border-right: 1px solid var(--mm-border-color, #e0e0e0);
|
|
12028
|
+
}
|
|
12029
|
+
.toggle-group .toggle-button:last-child {
|
|
12030
|
+
border-right: none;
|
|
12031
|
+
}
|
|
12032
|
+
.toggle-group .toggle-button.checked {
|
|
12033
|
+
background-color: var(--mm-primary-color, #26a69a);
|
|
12034
|
+
color: var(--mm-button-text, #fff);
|
|
12035
|
+
}
|
|
12036
|
+
|
|
12037
|
+
[data-theme=dark] .toggle-group {
|
|
12038
|
+
border-color: var(--mm-border-color, #555);
|
|
12039
|
+
}
|
|
12040
|
+
[data-theme=dark] .toggle-group .toggle-button {
|
|
12041
|
+
border-right-color: var(--mm-border-color, #555);
|
|
12042
|
+
}
|
|
12043
|
+
[data-theme=dark] .toggle-group .toggle-button.checked {
|
|
12044
|
+
background-color: var(--mm-primary-color, #80cbc4);
|
|
12045
|
+
color: var(--mm-button-text, #000);
|
|
11845
12046
|
}
|
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';
|
|
@@ -43,4 +48,5 @@ export * from './timeline';
|
|
|
43
48
|
export * from './masonry';
|
|
44
49
|
export * from './image-list';
|
|
45
50
|
export * from './rating';
|
|
51
|
+
export * from './toggle-group';
|
|
46
52
|
export * from './types';
|