@redkhat/timepicker 0.0.1
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/LICENSE.md +9 -0
- package/README.md +219 -0
- package/_rk-timepicker-theme.scss +289 -0
- package/fesm2022/redkhat-timepicker.mjs +1415 -0
- package/fesm2022/redkhat-timepicker.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/clock.d.ts +18 -0
- package/lib/timepicker-dial.d.ts +39 -0
- package/lib/timepicker-input-label.d.ts +28 -0
- package/lib/timepicker-input.d.ts +51 -0
- package/lib/timepicker-toggle.d.ts +13 -0
- package/lib/timepicker.d.ts +42 -0
- package/lib/utils/angle.d.ts +7 -0
- package/lib/utils/animation.d.ts +1 -0
- package/lib/utils/clock-iterable.d.ts +42 -0
- package/lib/utils/constants.d.ts +4 -0
- package/lib/utils/events.d.ts +16 -0
- package/lib/utils/index.d.ts +4 -0
- package/lib/utils/time.d.ts +39 -0
- package/package.json +46 -0
- package/public-api.d.ts +5 -0
package/LICENSE.md
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2025 Redkhat
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
6
|
+
|
7
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
8
|
+
|
9
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
ADDED
@@ -0,0 +1,219 @@
|
|
1
|
+
# Redkhat Timepicker
|
2
|
+
|
3
|
+
This project contains a series of time selection components. The timepicker allows users to select a time from a clock-like interface. The timepicker is built using `Angular 19+` and `Angular Material 19+`.
|
4
|
+
|
5
|
+
> **_NOTE:_** `RkTimepicker` and `RKClock` is not a substitute for the standard Angular Material timepicker.
|
6
|
+
For features like time ranges or specific hour selection, Angular's official methods are recommended.
|
7
|
+
|
8
|
+
## Demo
|
9
|
+
[RkTimepicker](https://redkhat.github.io/timepicker/)
|
10
|
+
|
11
|
+
## Install components and dependencies
|
12
|
+
|
13
|
+
First install the Angular Material.
|
14
|
+
|
15
|
+
```bash
|
16
|
+
ng add @angular/material
|
17
|
+
```
|
18
|
+
|
19
|
+
Then install the timepicker components.
|
20
|
+
|
21
|
+
```bash
|
22
|
+
npm install @redkhat/timepicker
|
23
|
+
```
|
24
|
+
|
25
|
+
## Configuration
|
26
|
+
|
27
|
+
`RkTimepicker` and `RkClock` require Angular Material themes using their Material Design 3 variant. You must also import the SCSS file from the @redkhat/timepicker library.
|
28
|
+
```json
|
29
|
+
// your angular.json
|
30
|
+
"styles": [
|
31
|
+
"@angular/material/prebuilt-themes/azure-blue.css", // angular material theme
|
32
|
+
"src/styles.scss",
|
33
|
+
"@redkhat/timepicker/_rk-timepicker-theme.scss"// timepicker theme
|
34
|
+
]
|
35
|
+
```
|
36
|
+
|
37
|
+
## Usage
|
38
|
+
|
39
|
+
` @redkhat/timepicker` provides two principal components: `RkTimepicker` and `RkClock`.
|
40
|
+
RkTimepicker is used together with an input field to display a dialog with the clock interface. RkClock is a standalone(inlined) clock interface.
|
41
|
+
|
42
|
+
### Connecting a timepicker to an input
|
43
|
+
|
44
|
+
1. Import `RkTimepicker`, `RkTimepickerInput`, `RkTimepickerToggle` in your component.
|
45
|
+
2. Add `<rk-timepicker>` and `<rk-timepicker-toggle>` to your template.
|
46
|
+
3. Export a reference of `<rk-timepicker>`, in this case, we use `#picker`.
|
47
|
+
4. Add the `[rkTimepicker]` directive to the input field and bind it to the timepicker reference.
|
48
|
+
5. Add the `matSuffix` directive to the `<rk-timepicker-toggle>` component and bind it to the timepicker reference using the `[for]` input.
|
49
|
+
|
50
|
+
```html
|
51
|
+
<mat-form-field>
|
52
|
+
<mat-label>Time</mat-label>
|
53
|
+
<input matInput [rkTimepicker]="picker" placeholder="Ex. 3:00 PM" />
|
54
|
+
<rk-timepicker-toggle matSuffix [for]="picker"></rk-timepicker-toggle>
|
55
|
+
<rk-timepicker #picker></rk-timepicker>
|
56
|
+
</mat-form-field>
|
57
|
+
```
|
58
|
+
|
59
|
+
### Using timecker without `RkTimepickerToggle` component
|
60
|
+
|
61
|
+
`RkTimepicker` component exposes a public method `open()` to open the timepicker dialog. You can use this method to open the timepicker dialog from a custom button or any other component.
|
62
|
+
|
63
|
+
```html
|
64
|
+
<mat-form-field>
|
65
|
+
<mat-label>Time</mat-label>
|
66
|
+
<input matInput [rkTimepicker]="picker" placeholder="Ex. 3:00 PM" />
|
67
|
+
<button mat-icon-button (click)="picker.open()">
|
68
|
+
<mat-icon>schedule</mat-icon>
|
69
|
+
</button>
|
70
|
+
<rk-timepicker #picker></rk-timepicker>
|
71
|
+
</mat-form-field>
|
72
|
+
```
|
73
|
+
|
74
|
+
### Using timepicker inline with `RkClock` component
|
75
|
+
|
76
|
+
If you want to use the clock interface inline in your template you can use the `RkClock` component. This component have an input model named `time` to bind the selected time (unlike `RkTimepicker` where `time` is a optional input used to set the initial time).
|
77
|
+
|
78
|
+
```html
|
79
|
+
<rk-clock [(time)]="time">
|
80
|
+
</rk-clock>
|
81
|
+
```
|
82
|
+
|
83
|
+
### Using timepicker with Template-driven and Reactive Forms
|
84
|
+
|
85
|
+
`RkTimepicker` can be used with Angular forms thanks to the directive `RkTimepickerInput` that implements the `ControlValueAccessor` interface, this allows the timepicker to work with both template-driven and reactive forms and also comes with a custom validator to validate the time input.
|
86
|
+
```html
|
87
|
+
<mat-form-field class="example-full-width">
|
88
|
+
<mat-label>Time</mat-label>
|
89
|
+
<input matInput [rkTimepicker]="picker" [formControl]="time" placeholder="Ex. 3:00 PM" />
|
90
|
+
<rk-timepicker-toggle matSuffix [for]="picker"></rk-timepicker-toggle>
|
91
|
+
<rk-timepicker #picker></rk-timepicker>
|
92
|
+
@if (time.hasError('invalidTimeFormat') && !time.hasError('required')) {
|
93
|
+
<mat-error>You must enter a valid time.</mat-error>
|
94
|
+
}
|
95
|
+
@if (time.hasError('required')) {
|
96
|
+
<mat-error>You must enter a value.</mat-error>
|
97
|
+
}
|
98
|
+
</mat-form-field>
|
99
|
+
<!-- This section below is merely demonstrative -->
|
100
|
+
<section class="data-container">
|
101
|
+
<p> Value: {{ time.value }} </p>
|
102
|
+
<p> Valid: {{ time.valid }} </p>
|
103
|
+
<p> Dirty: {{ time.dirty }} </p>
|
104
|
+
<p> Touched: {{ time.touched }} </p>
|
105
|
+
<p> Invalid: {{ time.invalid }} </p>
|
106
|
+
<p> Errors: {{ time.errors | json }} </p>
|
107
|
+
</section>
|
108
|
+
```
|
109
|
+
|
110
|
+
### Integration with Datepicker
|
111
|
+
|
112
|
+
`RkTimepicker` and `RkClock` can be used together with `MatDatepicker` to create a complete date and time selection interface. This is possible because these timepickers only modify the time part of the date object therefore you can use the same date object in the datepicker and timepicker.
|
113
|
+
|
114
|
+
```html
|
115
|
+
<mat-form-field>
|
116
|
+
<mat-label>Date</mat-label>
|
117
|
+
<input matInput [matDatepicker]="datepicker" [(ngModel)]="value">
|
118
|
+
<mat-datepicker-toggle [for]="datepicker" matSuffix/>
|
119
|
+
<mat-datepicker #datepicker/>
|
120
|
+
</mat-form-field>
|
121
|
+
|
122
|
+
<mat-form-field>
|
123
|
+
<mat-label>Time</mat-label>
|
124
|
+
<input matInput [rkTimepicker]="picker" [(ngModel)]="value"/>
|
125
|
+
<rk-timepicker-toggle matSuffix [for]="picker"></rk-timepicker-toggle>
|
126
|
+
<rk-timepicker #picker></rk-timepicker>
|
127
|
+
</mat-form-field>
|
128
|
+
```
|
129
|
+
|
130
|
+
## RkTimepickerInput Directive
|
131
|
+
|
132
|
+
Used to connect an input field to a `RkTimepicker` component.
|
133
|
+
|
134
|
+
Selector: `input[rkTimepicker]`
|
135
|
+
|
136
|
+
Exported as: `rkTimepickerInput`
|
137
|
+
|
138
|
+
### Properties
|
139
|
+
|
140
|
+
| Name | Description |
|
141
|
+
| ------------ | ------------ |
|
142
|
+
| disabled: `InputSignal<boolean>` | Whether the input is disabled. Default is `false`. |
|
143
|
+
| rkTimepicker: `InputSignal<RkTimepicker>` | The timepicker that this input is associated with. `Required` |
|
144
|
+
| value: `ModelSignal<Date \| null>` | The value of the input. No modifying this property directly. Use `ngModel` or `formControl` instead. |
|
145
|
+
|
146
|
+
### Methods
|
147
|
+
|
148
|
+
| Name | Description |
|
149
|
+
| ------------ | ------------ |
|
150
|
+
| focus() | Focuses the input. |
|
151
|
+
|
152
|
+
## RkTimepicker Component
|
153
|
+
|
154
|
+
A component that opens a dialog with a clock interface to select a time.
|
155
|
+
|
156
|
+
Selector: `rk-timepicker`
|
157
|
+
|
158
|
+
Exported as: `rkTimepicker`
|
159
|
+
|
160
|
+
### Properties
|
161
|
+
|
162
|
+
| Name | Description |
|
163
|
+
| ------------ | ------------ |
|
164
|
+
| time: `InputSignal<Date \| null>` | Default time to open the timepicker with. Default is `null \| new Date()`. |
|
165
|
+
| orientation: `ModelSignal<string>` | The orientation of the timepicker. Values `landscape` and `portrait` Default is `portrait`. |
|
166
|
+
| editable: `ModelSignal<boolean>` | Editable mode of the timepicker (hide the clock interface). Default is `false`. |
|
167
|
+
| format: `ModelSignal<string>` | The format of the timepicker. Values `12h` and `24h`. Default is `12h`. |
|
168
|
+
| period: `ModelSignal<string>` | The period (disabled if format is 24h). Values `AM` and `PM` Default is `AM`. |
|
169
|
+
| selected: `ModelSignal<string>` | Part of the time that is selected. Values `hours` and `minutes`. Default is `hour`. |
|
170
|
+
| headline: `InputSignal<string>` | The headline of the timepicker. Ex `Select a time` |
|
171
|
+
| inputLabels: `InputSignal<string[]>` | The labels of the input fields. Ex `['Hours', 'Minutes']` |
|
172
|
+
| actions: `InputSignal<string[]>` | The labels of the action buttons. Ex `['Cancel', 'Ok']` |
|
173
|
+
| opened: `OutputSignal<void>` | Event emitted when the timepicker is opened. |
|
174
|
+
| closed: `OutputSignal<void>` | Event emitted when the timepicker is closed. |
|
175
|
+
| selectedTime: `OutputSignal<Date>` | Event emitted when the time is selected (when the Ok button is clicked). |
|
176
|
+
|
177
|
+
### Methods
|
178
|
+
|
179
|
+
| Name | Description |
|
180
|
+
| ------------ | ------------ |
|
181
|
+
| open() | Opens the timepicker dialog. |
|
182
|
+
|
183
|
+
## RkTimepickerToggle Component
|
184
|
+
|
185
|
+
A component that opens a dialog with a clock interface to select a time.
|
186
|
+
|
187
|
+
Selector: `rk-timepicker-toggle`
|
188
|
+
|
189
|
+
### Properties
|
190
|
+
|
191
|
+
| Name | Description |
|
192
|
+
| ------------ | ------------ |
|
193
|
+
| for: `InputSignal<RkTimepicker>` | The timepicker that this toggle is associated with. |
|
194
|
+
| disabled: `InputSignal<boolean>` | Whether the toggle is disabled. Default is `false`. |
|
195
|
+
|
196
|
+
## RkClock Component
|
197
|
+
|
198
|
+
A standalone clock interface to use inline in your template. Unlike `RkTimepicker`, `RkClock` no has actions buttons to confirm or cancel the time selected, therefore `RkClock` will update the time automatically while the user interacts with the clock.
|
199
|
+
|
200
|
+
Selector: `rk-clock`
|
201
|
+
|
202
|
+
Exported as: `rkClock`
|
203
|
+
|
204
|
+
### Properties
|
205
|
+
|
206
|
+
| Name | Description |
|
207
|
+
| ------------ | ------------ |
|
208
|
+
| time: `ModelSignal<Date \| null>` | The selected time. Default is `null \ new Date()`. |
|
209
|
+
| selected: `ModelSignal<string>` | Part of the time that is selected. Values `hours` and `minutes`. Default is `hour`. |
|
210
|
+
| format: `ModelSignal<string>` | The format of the timepicker. Values `12h` and `24h`. Default is `12h`. |
|
211
|
+
| period: `ModelSignal<string>` | The period (disabled if format is 24h). Values `AM` and `PM` Default is `AM`. |
|
212
|
+
| editable: `ModelSignal<boolean>` | Editable mode of the timepicker (hide the clock interface). Default is `false`. |
|
213
|
+
| orientation: `ModelSignal<string>` | The orientation of the timepicker. Values `landscape` and `portrait` Default is `portrait`. |
|
214
|
+
| headline: `InputSignal<string>` | The headline of the timepicker. Ex `Select a time` |
|
215
|
+
|
216
|
+
> Friendly reminder, ModelSignal automatically creates outputs for the properties. Example: `time` input has `timeChange` output.
|
217
|
+
|
218
|
+
## License
|
219
|
+
MIT, see [LICENSE.md](/LICENSE.md) for details.
|
@@ -0,0 +1,289 @@
|
|
1
|
+
@keyframes _rk-timepicker-enter {
|
2
|
+
from {
|
3
|
+
opacity: 0;
|
4
|
+
transform: scaleY(0.8);
|
5
|
+
}
|
6
|
+
|
7
|
+
to {
|
8
|
+
opacity: 1;
|
9
|
+
transform: none;
|
10
|
+
}
|
11
|
+
}
|
12
|
+
|
13
|
+
@keyframes _rk-timepicker-exit {
|
14
|
+
from {
|
15
|
+
opacity: 1;
|
16
|
+
}
|
17
|
+
|
18
|
+
to {
|
19
|
+
opacity: 0;
|
20
|
+
}
|
21
|
+
}
|
22
|
+
|
23
|
+
rk-timepicker {
|
24
|
+
display: none; // Hides the rk-timepicker component by default
|
25
|
+
}
|
26
|
+
|
27
|
+
.rk-timepicker {
|
28
|
+
display: block; // Shows the component when the .rk-timepicker class is applied
|
29
|
+
width: 328px;
|
30
|
+
padding: 24px;
|
31
|
+
border-radius: var(--mat-sys-corner-extra-large);
|
32
|
+
background-color: var(--mat-sys-surface-container-high);
|
33
|
+
}
|
34
|
+
|
35
|
+
.rk-timepicker-panel {
|
36
|
+
animation: _rk-timepicker-enter 120ms cubic-bezier(0, 0, 0.2, 1);
|
37
|
+
}
|
38
|
+
|
39
|
+
.rk-timepicker-container {
|
40
|
+
display: flex;
|
41
|
+
flex-wrap: wrap;
|
42
|
+
flex-direction: row;
|
43
|
+
justify-content: center;
|
44
|
+
align-items: center;
|
45
|
+
transition: opacity 0.2s ease-in-out;
|
46
|
+
}
|
47
|
+
|
48
|
+
.rk-timepicker-container-hide {
|
49
|
+
opacity: 0;
|
50
|
+
}
|
51
|
+
|
52
|
+
.rk-timepicker-headline {
|
53
|
+
width: 100%;
|
54
|
+
font: var(--mat-sys-label-medium);
|
55
|
+
color: var(--mat-sys-on-surface-variant);
|
56
|
+
align-self: flex-start;
|
57
|
+
margin-bottom: 20px;
|
58
|
+
}
|
59
|
+
|
60
|
+
.rk-time-input-support-label {
|
61
|
+
@extend .rk-timepicker-headline; // Reuses styles from rk-timepicker-headline
|
62
|
+
position: absolute;
|
63
|
+
bottom: -40px;
|
64
|
+
width: auto; // Adjusts width automatically to the content
|
65
|
+
}
|
66
|
+
|
67
|
+
// input
|
68
|
+
|
69
|
+
.rk-time-input-field {
|
70
|
+
display: flex;
|
71
|
+
align-items: center;
|
72
|
+
justify-content: center;
|
73
|
+
margin-bottom: 24px;
|
74
|
+
font: var(--mat-sys-display-large);
|
75
|
+
}
|
76
|
+
|
77
|
+
.rk-time-input-label-container {
|
78
|
+
position: relative;
|
79
|
+
}
|
80
|
+
|
81
|
+
%rk-time-selector-base {
|
82
|
+
// Placeholder for reusable styles of time selectors
|
83
|
+
width: 98px;
|
84
|
+
height: 78px;
|
85
|
+
border-radius: var(--mat-sys-corner-small);
|
86
|
+
background-color: var(--mat-sys-surface-container-highest);
|
87
|
+
color: var(--mat-sys-on-surface);
|
88
|
+
display: flex;
|
89
|
+
justify-content: center;
|
90
|
+
align-items: center;
|
91
|
+
user-select: none;
|
92
|
+
&:hover {
|
93
|
+
opacity: 0.8;
|
94
|
+
}
|
95
|
+
& > input {
|
96
|
+
all: unset;
|
97
|
+
width: 100%;
|
98
|
+
text-align: center;
|
99
|
+
}
|
100
|
+
}
|
101
|
+
|
102
|
+
.rk-time-selector-container {
|
103
|
+
@extend %rk-time-selector-base;
|
104
|
+
}
|
105
|
+
|
106
|
+
.rk-time-selector-container-selected {
|
107
|
+
background-color: var(--mat-sys-primary-container);
|
108
|
+
color: var(--mat-sys-on-primary-container);
|
109
|
+
}
|
110
|
+
|
111
|
+
.rk-time-divider {
|
112
|
+
width: 22px;
|
113
|
+
text-align: center;
|
114
|
+
}
|
115
|
+
|
116
|
+
.rk-period-selector-container {
|
117
|
+
display: flex;
|
118
|
+
flex-direction: column;
|
119
|
+
margin-left: 10px;
|
120
|
+
border-radius: var(--mat-sys-corner-small);
|
121
|
+
user-select: none;
|
122
|
+
border: 1px solid var(--mat-sys-outline);
|
123
|
+
font: var(--mat-sys-title-medium);
|
124
|
+
}
|
125
|
+
|
126
|
+
%rk-period-selector-base {
|
127
|
+
// Placeholder for reusable styles of period selectors
|
128
|
+
width: 48px;
|
129
|
+
height: 37px;
|
130
|
+
display: flex;
|
131
|
+
justify-content: center;
|
132
|
+
align-items: center;
|
133
|
+
color: var(--mat-sys-on-surface-variant);
|
134
|
+
&:hover {
|
135
|
+
opacity: 0.8;
|
136
|
+
}
|
137
|
+
}
|
138
|
+
|
139
|
+
.rk-period-selector {
|
140
|
+
@extend %rk-period-selector-base;
|
141
|
+
}
|
142
|
+
|
143
|
+
.rk-period-selector-container > div:first-child {
|
144
|
+
@extend %rk-period-selector-base; // Reuses base styles
|
145
|
+
border-top-left-radius: 8px;
|
146
|
+
border-top-right-radius: 8px;
|
147
|
+
border-bottom: 1px solid var(--mat-sys-outline);
|
148
|
+
}
|
149
|
+
|
150
|
+
.rk-period-selector-container > div:last-child {
|
151
|
+
@extend %rk-period-selector-base; // Reuses base styles
|
152
|
+
border-bottom-left-radius: 8px;
|
153
|
+
border-bottom-right-radius: 8px;
|
154
|
+
}
|
155
|
+
|
156
|
+
.rk-period-selector-selected {
|
157
|
+
background-color: var(--mat-sys-tertiary-container);
|
158
|
+
color: var(--mat-sys-on-tertiary-container);
|
159
|
+
}
|
160
|
+
|
161
|
+
// dial
|
162
|
+
|
163
|
+
.rk-timepicker-dial {
|
164
|
+
display: block;
|
165
|
+
background-color: var(--mat-sys-surface-container-highest);
|
166
|
+
width: 256px;
|
167
|
+
height: 256px;
|
168
|
+
border-radius: 50%;
|
169
|
+
position: relative;
|
170
|
+
overflow: hidden;
|
171
|
+
margin-bottom: 24px;
|
172
|
+
}
|
173
|
+
|
174
|
+
.rk-dial-animated {
|
175
|
+
transition: transform 250ms ease-in-out, opacity 250ms ease-in-out,
|
176
|
+
height 250ms ease-in-out, margin 250ms ease-in-out;
|
177
|
+
}
|
178
|
+
|
179
|
+
.rk-dial-closed {
|
180
|
+
transform: scale(0);
|
181
|
+
opacity: 0;
|
182
|
+
height: 0px;
|
183
|
+
margin: 0px;
|
184
|
+
}
|
185
|
+
|
186
|
+
.rk-dial-size {
|
187
|
+
width: 256px;
|
188
|
+
height: 256px;
|
189
|
+
}
|
190
|
+
|
191
|
+
%rk-clock-dial-label-base {
|
192
|
+
// Placeholder for reusable styles of dial labels
|
193
|
+
width: 48px;
|
194
|
+
height: 48px;
|
195
|
+
text-align: center;
|
196
|
+
user-select: none;
|
197
|
+
display: flex;
|
198
|
+
justify-content: center;
|
199
|
+
align-items: center;
|
200
|
+
font: var(--mat-sys-body-large);
|
201
|
+
}
|
202
|
+
|
203
|
+
.rk-clock-dial-label {
|
204
|
+
@extend %rk-clock-dial-label-base;
|
205
|
+
color: var(--mat-sys-on-surface);
|
206
|
+
}
|
207
|
+
|
208
|
+
.rk-cliped-label {
|
209
|
+
background-color: var(--mat-sys-primary);
|
210
|
+
clip-path: circle(24px at calc(100% - 26px) 50%);
|
211
|
+
position: absolute;
|
212
|
+
top: 0;
|
213
|
+
left: 0;
|
214
|
+
z-index: 3;
|
215
|
+
cursor: pointer;
|
216
|
+
.rk-clock-dial-label {
|
217
|
+
@extend %rk-clock-dial-label-base; // Reuses base styles
|
218
|
+
color: var(--mat-sys-on-primary);
|
219
|
+
}
|
220
|
+
}
|
221
|
+
|
222
|
+
.rk-dial-selector {
|
223
|
+
width: 104px;
|
224
|
+
height: 2px;
|
225
|
+
top: 127px;
|
226
|
+
left: 128px;
|
227
|
+
background-color: var(--mat-sys-primary);
|
228
|
+
position: absolute;
|
229
|
+
transform-origin: left center;
|
230
|
+
transform: rotate(0deg);
|
231
|
+
}
|
232
|
+
|
233
|
+
.rk-pivot-point {
|
234
|
+
background-color: var(--mat-sys-primary);
|
235
|
+
width: 8px;
|
236
|
+
height: 8px;
|
237
|
+
border-radius: 50%;
|
238
|
+
position: absolute;
|
239
|
+
top: 124px;
|
240
|
+
left: 124px;
|
241
|
+
}
|
242
|
+
|
243
|
+
.rk-timepicker-footer {
|
244
|
+
display: flex;
|
245
|
+
width: 100%;
|
246
|
+
justify-content: space-between;
|
247
|
+
}
|
248
|
+
|
249
|
+
.rk-timepicker-mode-button {
|
250
|
+
color: var(--mat-sys-on-surface-variant);
|
251
|
+
}
|
252
|
+
|
253
|
+
.rk-timepicker-landscape:not(.rk-timepicker-editable) {
|
254
|
+
width: 560px;
|
255
|
+
.rk-timepicker-headline {
|
256
|
+
margin-bottom: 0px;
|
257
|
+
}
|
258
|
+
|
259
|
+
.rk-timepicker-container {
|
260
|
+
justify-content: space-between;
|
261
|
+
}
|
262
|
+
|
263
|
+
.rk-time-input-field {
|
264
|
+
width: 220px;
|
265
|
+
flex-wrap: wrap;
|
266
|
+
}
|
267
|
+
.rk-period-selector-container {
|
268
|
+
width: 100%;
|
269
|
+
flex-direction: row;
|
270
|
+
margin-left: 0px;
|
271
|
+
margin-top: 16px;
|
272
|
+
}
|
273
|
+
|
274
|
+
.rk-period-selector-container > div:first-child {
|
275
|
+
width: 100%;
|
276
|
+
border: 0px;
|
277
|
+
border-radius: 0px;
|
278
|
+
border-top-left-radius: 8px;
|
279
|
+
border-bottom-left-radius: 8px;
|
280
|
+
border-right: 1px solid var(--mat-sys-outline);
|
281
|
+
}
|
282
|
+
|
283
|
+
.rk-period-selector-container > div:last-child {
|
284
|
+
width: 100%;
|
285
|
+
border-radius: 0px;
|
286
|
+
border-top-right-radius: 8px;
|
287
|
+
border-bottom-right-radius: 8px;
|
288
|
+
}
|
289
|
+
}
|