@redkhat/timepicker 0.0.1 → 1.0.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/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # Redkhat Timepicker
2
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+`.
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
4
 
5
- > **_NOTE:_** `RkTimepicker` and `RKClock` is not a substitute for the standard Angular Material timepicker.
5
+ > **_NOTE:_** **RkTimepicker** and **RKClock** is not a substitute for the standard Angular Material timepicker.
6
6
  For features like time ranges or specific hour selection, Angular's official methods are recommended.
7
7
 
8
8
  ## Demo
@@ -24,7 +24,7 @@ npm install @redkhat/timepicker
24
24
 
25
25
  ## Configuration
26
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.
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
28
  ```json
29
29
  // your angular.json
30
30
  "styles": [
@@ -36,12 +36,12 @@ npm install @redkhat/timepicker
36
36
 
37
37
  ## Usage
38
38
 
39
- ` @redkhat/timepicker` provides two principal components: `RkTimepicker` and `RkClock`.
39
+ **@redkhat/timepicker** provides two principal components: **RkTimepicker** and **RkClock**.
40
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
41
 
42
42
  ### Connecting a timepicker to an input
43
43
 
44
- 1. Import `RkTimepicker`, `RkTimepickerInput`, `RkTimepickerToggle` in your component.
44
+ 1. Import **RkTimepicker**, **RkTimepickerInput**, **RkTimepickerToggle** in your component.
45
45
  2. Add `<rk-timepicker>` and `<rk-timepicker-toggle>` to your template.
46
46
  3. Export a reference of `<rk-timepicker>`, in this case, we use `#picker`.
47
47
  4. Add the `[rkTimepicker]` directive to the input field and bind it to the timepicker reference.
@@ -56,9 +56,9 @@ RkTimepicker is used together with an input field to display a dialog with the c
56
56
  </mat-form-field>
57
57
  ```
58
58
 
59
- ### Using timecker without `RkTimepickerToggle` component
59
+ ### Using timecker without **RkTimepickerToggle** component
60
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.
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
62
 
63
63
  ```html
64
64
  <mat-form-field>
@@ -71,9 +71,9 @@ RkTimepicker is used together with an input field to display a dialog with the c
71
71
  </mat-form-field>
72
72
  ```
73
73
 
74
- ### Using timepicker inline with `RkClock` component
74
+ ### Using timepicker inline with **RkClock** component
75
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).
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
77
 
78
78
  ```html
79
79
  <rk-clock [(time)]="time">
@@ -82,7 +82,7 @@ If you want to use the clock interface inline in your template you can use the `
82
82
 
83
83
  ### Using timepicker with Template-driven and Reactive Forms
84
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.
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
86
  ```html
87
87
  <mat-form-field class="example-full-width">
88
88
  <mat-label>Time</mat-label>
@@ -109,7 +109,7 @@ If you want to use the clock interface inline in your template you can use the `
109
109
 
110
110
  ### Integration with Datepicker
111
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.
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
113
 
114
114
  ```html
115
115
  <mat-form-field>
@@ -127,9 +127,28 @@ If you want to use the clock interface inline in your template you can use the `
127
127
  </mat-form-field>
128
128
  ```
129
129
 
130
+ ## Internationalization (i18n)
131
+
132
+ The **RkTimepickerInput** directive allows to input type text supports multiple time formats to make it easy to use in different regions. Below is an explanation of how it handles internationalization, including handling regional AM/PM markers.
133
+
134
+ ### 1. Supported Formats
135
+ The input can interpret the following time string formats:
136
+ - **Integers** (e.g., `"10"`, `"1030"`, `10`, `1030`) in 24-hour format (up to 23:59).
137
+ - **Space-separated numbers** (e.g., `"10 30"`) in **HH MM** format.
138
+ - **Colon-separated numbers** (e.g., `"10:30"`) in **HH:MM** format.
139
+ - **Formats with regional AM/PM markers**, either at the start or the end of the time string (e.g., `"10:30am"` `"10:30 AM"`, `"am 10:30"`, `"午後3:25:00"`, `"10:30 du matin"`).
140
+
141
+ ### 2. Normalization of Digits
142
+ **Note:** The directive normalizes Arabic numerals (Unicode range `\u0660-\u0669`) to their Western counterparts before processing the time.
143
+
144
+ For example, if a user enters a time string in Arabic numerals like:
145
+
146
+ - **Input:** `"٧:١٥:٣٠ م"` (in Arabic, equivalent to "7:15:30 PM")
147
+ - **Output (Date format):** The time is converted to `Date` format and interpreted as `19:15`.
148
+
130
149
  ## RkTimepickerInput Directive
131
150
 
132
- Used to connect an input field to a `RkTimepicker` component.
151
+ Used to connect an input field to a **RkTimepicker** component.
133
152
 
134
153
  Selector: `input[rkTimepicker]`
135
154
 
@@ -195,7 +214,7 @@ Selector: `rk-timepicker-toggle`
195
214
 
196
215
  ## RkClock Component
197
216
 
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.
217
+ 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
218
 
200
219
  Selector: `rk-clock`
201
220
 
@@ -65,80 +65,6 @@ class ClockIterable {
65
65
  }
66
66
  }
67
67
 
68
- /**
69
- * Converts a time string or number to the number of seconds since midnight.
70
- * Supports various formats including:
71
- * - Integers (e.g., "10", "1030", 10, 1030) representing hours in 24-hour format (up to 2359).
72
- * - Space-separated numbers (e.g., "10 30") representing HH MM.
73
- * - Colon-separated numbers (e.g., "10:30") representing HH:MM.
74
- * - Colon-separated numbers with AM/PM (e.g., "10:30am", "10:30 am").
75
- *
76
- * @param input The input to convert (can be a string or a number).
77
- * @returns The number of seconds since midnight, or null if the input is invalid.
78
- */
79
- function timeToSeconds(input) {
80
- const inputStr = typeof input === 'number' ? String(input) : input;
81
- // Handle numeric cases (number or string numeric)
82
- if (/^\d+$/.test(inputStr)) {
83
- const num = parseInt(inputStr, 10);
84
- if (num < 0 || num > 2359)
85
- return null;
86
- const len = inputStr.length;
87
- let hour, minute;
88
- if (len <= 2) {
89
- hour = num;
90
- minute = 0;
91
- }
92
- else if (len === 3) {
93
- hour = parseInt(inputStr[0], 10);
94
- minute = parseInt(inputStr.substring(1), 10);
95
- }
96
- else {
97
- hour = parseInt(inputStr.substring(0, 2), 10);
98
- minute = parseInt(inputStr.substring(2), 10);
99
- }
100
- return (hour <= 23 && minute <= 59) ? hour * 3600 + minute * 60 : null;
101
- }
102
- // Handle formats like "1pm", "1 pm", "10am", "10 AM"
103
- const ampmMatch = inputStr.match(/^(\d{1,2})\s?([APap][Mm])$/i);
104
- if (ampmMatch) {
105
- let hour = parseInt(ampmMatch[1], 10);
106
- const period = ampmMatch[2].toUpperCase();
107
- if (hour < 1 || hour > 12)
108
- return null;
109
- if (period === 'PM') {
110
- hour = hour === 12 ? 12 : hour + 12;
111
- }
112
- else {
113
- hour = hour === 12 ? 0 : hour;
114
- }
115
- return hour * 3600; // No minutes, so default to 0 minutes
116
- }
117
- // Handle format with colon and AM/PM (e.g., "1:00pm", "1:00 PM")
118
- const colonAmpmMatch = inputStr.match(/^(\d{1,2}):(\d{1,2})\s?([APap][Mm])$/i);
119
- if (colonAmpmMatch) {
120
- let hour = parseInt(colonAmpmMatch[1], 10);
121
- const minute = parseInt(colonAmpmMatch[2], 10);
122
- const period = colonAmpmMatch[3].toUpperCase();
123
- if (hour < 1 || hour > 12 || minute > 59)
124
- return null;
125
- if (period === 'PM')
126
- hour = hour === 12 ? 12 : hour + 12;
127
- else
128
- hour = hour === 12 ? 0 : hour;
129
- return hour * 3600 + minute * 60;
130
- }
131
- // Handle cases with separators
132
- const [hPart, mPart] = inputStr.split(/[\s:]/);
133
- if (hPart && mPart && /^\d+$/.test(hPart) && /^\d+$/.test(mPart)) {
134
- const hour = parseInt(hPart, 10);
135
- const minute = parseInt(mPart, 10);
136
- if (hour >= 0 && hour <= 23 && minute >= 0 && minute <= 59) {
137
- return hour * 3600 + minute * 60;
138
- }
139
- }
140
- return null;
141
- }
142
68
  function secondsToDate(seconds) {
143
69
  const initialDate = new Date(0, 0, 0, 0);
144
70
  const date = new Date(initialDate.getTime() + seconds * 1000);
@@ -1411,5 +1337,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.6", ngImpor
1411
1337
  * Generated bundle index. Do not edit.
1412
1338
  */
1413
1339
 
1414
- export { HOURS_LABEL, HOURS_LABEL_24_P1, HOURS_LABEL_24_P2, MINUTES_LABEL, RkClock, RkTimepicker, RkTimepickerInput, RkTimepickerToggle, amPmTransform, angleToHours, angleToHours24, angleToMinutes, createPointerEvents, detectTimeFormat, formatTimeValue, hours24ToAngle, hoursToAngle, minutesToAngle, normalizeEvent, secondsToDate, snapAngle, splitDate, timeToSeconds, timeToSecondsi18n, validateTimeValue };
1340
+ export { HOURS_LABEL, HOURS_LABEL_24_P1, HOURS_LABEL_24_P2, MINUTES_LABEL, RkClock, RkTimepicker, RkTimepickerInput, RkTimepickerToggle, amPmTransform, angleToHours, angleToHours24, angleToMinutes, createPointerEvents, detectTimeFormat, formatTimeValue, hours24ToAngle, hoursToAngle, minutesToAngle, normalizeEvent, secondsToDate, snapAngle, splitDate, timeToSecondsi18n, validateTimeValue };
1415
1341
  //# sourceMappingURL=redkhat-timepicker.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"redkhat-timepicker.mjs","sources":["../../../../src/timepicker/src/lib/utils/clock-iterable.ts","../../../../src/timepicker/src/lib/utils/time.ts","../../../../src/timepicker/src/lib/utils/animation.ts","../../../../src/timepicker/src/lib/utils/events.ts","../../../../src/timepicker/src/lib/utils/angle.ts","../../../../src/timepicker/src/lib/utils/constants.ts","../../../../src/timepicker/src/lib/timepicker-dial.ts","../../../../src/timepicker/src/lib/timepicker-input-label.ts","../../../../src/timepicker/src/lib/timepicker.ts","../../../../src/timepicker/src/lib/timepicker-input.ts","../../../../src/timepicker/src/lib/timepicker-toggle.ts","../../../../src/timepicker/src/lib/clock.ts","../../../../src/timepicker/src/public-api.ts","../../../../src/timepicker/src/redkhat-timepicker.ts"],"sourcesContent":["\n/**\n * A class that implements the `Iterable` interface to generate coordinates for clock labels.\n * \n * @template T - The type of the labels.\n */\nexport class ClockIterable<T> implements Iterable<[T, number, number]> {\n /**\n * The labels to be positioned around the clock.\n */\n private labels: T[];\n\n /**\n * The radius of the clock.\n */\n private radio: number;\n\n /**\n * The size of each label.\n */\n private labelSize: number;\n\n /**\n * The inset distance from the edge of the clock.\n */\n private inset: number;\n\n /**\n * The degrees between each label.\n */\n private readonly degreesByNumber = 30;\n\n /**\n * Creates an instance of ClockIterable.\n * \n * @param labels - An array of labels to be positioned around the clock [12, 1, 2, 3...].\n * @param labelSize - The size of each label.\n * @param diameter - The diameter of the clock.\n * @param inset - The inset distance from the edge of the clock (default is 0).\n */\n constructor(labels: T[], labelSize: number, diameter: number, inset: number = 0) {\n this.labels = labels;\n this.labelSize = labelSize / 2;\n this.radio = (diameter / 2) - inset;\n this.inset = inset;\n }\n\n /**\n * Returns an iterator that yields the label and its x, y coordinates.\n * \n * @returns An iterator that yields a tuple containing the label and its x, y coordinates.\n */\n *[Symbol.iterator](): Iterator<[T, number, number]> {\n for (let i = 0; i < this.labels.length; i++) {\n const x = this.radio + (this.radio - this.labelSize) * Math.sin(i * this.degreesByNumber * Math.PI / 180);\n const y = this.radio - (this.radio - this.labelSize) * Math.cos(i * this.degreesByNumber * Math.PI / 180);\n yield [this.labels[i], this.inset + x - this.labelSize, this.inset + y - this.labelSize];\n }\n }\n}\n","/**\n * Converts a time string or number to the number of seconds since midnight.\n * Supports various formats including:\n * - Integers (e.g., \"10\", \"1030\", 10, 1030) representing hours in 24-hour format (up to 2359).\n * - Space-separated numbers (e.g., \"10 30\") representing HH MM.\n * - Colon-separated numbers (e.g., \"10:30\") representing HH:MM.\n * - Colon-separated numbers with AM/PM (e.g., \"10:30am\", \"10:30 am\").\n *\n * @param input The input to convert (can be a string or a number).\n * @returns The number of seconds since midnight, or null if the input is invalid.\n */\nexport function timeToSeconds(input: string | number): number | null {\n const inputStr = typeof input === 'number' ? String(input) : input;\n // Handle numeric cases (number or string numeric)\n if (/^\\d+$/.test(inputStr)) {\n const num = parseInt(inputStr, 10);\n if (num < 0 || num > 2359) return null;\n\n const len = inputStr.length;\n let hour: number, minute: number;\n\n if (len <= 2) {\n hour = num;\n minute = 0;\n } else if (len === 3) {\n hour = parseInt(inputStr[0], 10);\n minute = parseInt(inputStr.substring(1), 10);\n } else {\n hour = parseInt(inputStr.substring(0, 2), 10);\n minute = parseInt(inputStr.substring(2), 10);\n }\n\n return (hour <= 23 && minute <= 59) ? hour * 3600 + minute * 60 : null;\n }\n\n // Handle formats like \"1pm\", \"1 pm\", \"10am\", \"10 AM\"\n const ampmMatch = inputStr.match(/^(\\d{1,2})\\s?([APap][Mm])$/i);\n if (ampmMatch) {\n let hour = parseInt(ampmMatch[1], 10);\n const period = ampmMatch[2].toUpperCase();\n\n if (hour < 1 || hour > 12) return null;\n\n if (period === 'PM') {\n hour = hour === 12 ? 12 : hour + 12;\n } else {\n hour = hour === 12 ? 0 : hour;\n }\n\n return hour * 3600; // No minutes, so default to 0 minutes\n }\n\n // Handle format with colon and AM/PM (e.g., \"1:00pm\", \"1:00 PM\")\n const colonAmpmMatch = inputStr.match(/^(\\d{1,2}):(\\d{1,2})\\s?([APap][Mm])$/i);\n if (colonAmpmMatch ) {\n let hour = parseInt(colonAmpmMatch [1], 10);\n const minute = parseInt(colonAmpmMatch [2], 10);\n const period = colonAmpmMatch [3].toUpperCase();\n\n if (hour < 1 || hour > 12 || minute > 59) return null;\n\n if (period === 'PM') hour = hour === 12 ? 12 : hour + 12;\n else hour = hour === 12 ? 0 : hour;\n\n return hour * 3600 + minute * 60;\n }\n\n // Handle cases with separators\n const [hPart, mPart] = inputStr.split(/[\\s:]/);\n if (hPart && mPart && /^\\d+$/.test(hPart) && /^\\d+$/.test(mPart)) {\n const hour = parseInt(hPart, 10);\n const minute = parseInt(mPart, 10);\n\n if (hour >= 0 && hour <= 23 && minute >= 0 && minute <= 59) {\n return hour * 3600 + minute * 60;\n }\n }\n\n return null;\n}\n\nexport function secondsToDate(seconds: number): Date {\n const initialDate = new Date(0, 0, 0, 0);\n const date = new Date(initialDate.getTime() + seconds * 1000);\n return date;\n}\n\nexport function detectTimeFormat(date: Date): string {\n const localTime = date.toLocaleTimeString();\n if (localTime.includes('AM') || localTime.includes('PM')) {\n return '12h';\n } else {\n return '24h';\n }\n}\n\nexport function splitDate(date: Date): SimpleTime {\n const hours = date.getHours();\n const minutes = date.getMinutes();\n return { hours, minutes };\n}\n\nexport function amPmTransform(isAm: string, date: Date) : Date {\n const newDate = new Date(date);\n const tempHours = newDate.getHours();\n if (isAm === 'AM' && tempHours >= 12) {\n newDate.setHours(tempHours - 12);\n } else if (isAm === 'PM' && tempHours < 12) {\n newDate.setHours(tempHours + 12);\n }\n return newDate;\n}\n\nexport function validateTimeValue(value: string, max: number): string {\n let numericValue = value.replace(/[^0-9]/g, '');\n\n if (numericValue.length > 2) {\n numericValue = numericValue.slice(0, 2);\n }\n\n if (numericValue === '') {\n return '';\n }\n const num = parseInt(numericValue, 10);\n return num > max ? max.toString() : numericValue;\n}\n\nexport function formatTimeValue(value: string, defaultValue: string, padLength: number = 2): string {\n if (value === '') {\n return defaultValue;\n }\n const num = parseInt(value, 10);\n if (num === 0) {\n return defaultValue;\n }\n return value.padStart(padLength, '0');\n}\n\nexport interface SimpleTime {\n hours: number;\n minutes: number;\n}\n\n\n/**\n * Converts a time string or number to the number of seconds since midnight.\n *\n * Supported formats include:\n * - Integers (e.g., \"10\", \"1030\", 10, 1030) in 24-hour format (up to 2359).\n * - Space-separated numbers (e.g., \"10 30\") as HH MM.\n * - Colon-separated numbers (e.g., \"10:30\" or \"10:30:00\") as HH:MM or HH:MM:SS.\n * - Formats with regional AM/PM markers either at the beginning or at the end\n * (e.g., \"10:30am\", \"am 10:30\", \"午後3:25:00\", \"10:30 du matin\").\n *\n * Additionally, this function normalizes Arabic digits (Unicode range \\u0660-\\u0669)\n * to their Western counterparts before processing.\n *\n * @param input The input to convert (can be a string or number).\n * @returns The number of seconds since midnight, or null if the input is invalid.\n */\nexport function timeToSecondsi18n(input: string | number): number | null {\n // Convert input to string and trim whitespace.\n let inputStr = typeof input === 'number' ? String(input) : input;\n inputStr = inputStr.trim();\n\n // Normalize Arabic digits to Western digits if found.\n if (/[\\u0660-\\u0669]/.test(inputStr)) {\n inputStr = inputStr.replace(/[\\u0660-\\u0669]/g, d => (d.charCodeAt(0) - 0x0660).toString());\n }\n // Extended list of AM and PM markers across various regions/languages.\n const AM_MARKERS = [\n 'am', 'a.m.', 'a.m', // English\n '午前', // Japanese\n '上午', // Chinese\n '오전', // Korean\n 'ص', 'صباح', 'صباحاً', // Arabic\n 'du matin', 'matin' // French\n ];\n const PM_MARKERS = [\n 'pm', 'p.m.', 'p.m', // English\n '午後', // Japanese\n '下午', // Chinese\n '오후', // Korean\n 'م', 'مساء', 'مساءً', // Arabic\n \"de l’après-midi\", \"de l'aprés-midi\", \"de l'après-midi\",\n 'après-midi', 'du soir', 'soir' // French\n ];\n\n let period: 'AM' | 'PM' | null = null;\n\n // Helper functions to compare prefix/suffix ignoring case.\n const startsWithIgnoreCase = (str: string, prefix: string) =>\n str.substring(0, prefix.length).toLowerCase() === prefix.toLowerCase();\n const endsWithIgnoreCase = (str: string, suffix: string) =>\n str.substring(str.length - suffix.length).toLowerCase() === suffix.toLowerCase();\n\n // Check if the period marker is at the beginning.\n for (const marker of AM_MARKERS) {\n if (startsWithIgnoreCase(inputStr, marker)) {\n period = 'AM';\n inputStr = inputStr.substring(marker.length).trim();\n break;\n }\n }\n if (!period) {\n for (const marker of PM_MARKERS) {\n if (startsWithIgnoreCase(inputStr, marker)) {\n period = 'PM';\n inputStr = inputStr.substring(marker.length).trim();\n break;\n }\n }\n }\n // If not found at the beginning, check at the end.\n if (!period) {\n for (const marker of AM_MARKERS) {\n if (endsWithIgnoreCase(inputStr, marker)) {\n period = 'AM';\n inputStr = inputStr.substring(0, inputStr.length - marker.length).trim();\n break;\n }\n }\n }\n if (!period) {\n for (const marker of PM_MARKERS) {\n if (endsWithIgnoreCase(inputStr, marker)) {\n period = 'PM';\n inputStr = inputStr.substring(0, inputStr.length - marker.length).trim();\n break;\n }\n }\n }\n\n // Split the numeric part of the time.\n let timeParts: number[] = [];\n\n if (inputStr.includes(':')) {\n // Colon-separated format. Accepts HH:MM or HH:MM:SS.\n const parts = inputStr.split(':');\n if (parts.length < 2 || parts.length > 3) return null;\n for (const part of parts) {\n const num = parseInt(part, 10);\n if (isNaN(num)) return null;\n timeParts.push(num);\n }\n } else if (inputStr.includes(' ')) {\n // Space-separated format (e.g., \"10 30\").\n const parts = inputStr.split(/\\s+/);\n if (parts.length > 3) return null;\n for (const part of parts) {\n const num = parseInt(part, 10);\n if (isNaN(num)) return null;\n timeParts.push(num);\n }\n } else if (/^\\d+$/.test(inputStr)) {\n // Numeric case without separators: \"10\", \"1030\".\n if (inputStr.length <= 2) {\n timeParts = [parseInt(inputStr, 10)];\n } else if (inputStr.length === 3) {\n timeParts = [\n parseInt(inputStr.substring(0, 1), 10),\n parseInt(inputStr.substring(1), 10),\n ];\n } else if (inputStr.length === 4) {\n timeParts = [\n parseInt(inputStr.substring(0, 2), 10),\n parseInt(inputStr.substring(2), 10),\n ];\n } else {\n // Unsupported numeric format with more than 4 digits.\n return null;\n }\n } else {\n // Unrecognized format.\n return null;\n }\n\n // Extract hour, minute, and second (defaulting to 0 if not provided).\n let hour = timeParts[0];\n let minute = timeParts.length >= 2 ? timeParts[1] : 0;\n let second = timeParts.length === 3 ? timeParts[2] : 0;\n\n // Validate minute and second ranges.\n if (minute < 0 || minute > 59) return null;\n if (second < 0 || second > 59) return null;\n\n // Adjust hour based on the AM/PM marker.\n if (period) {\n if (hour < 1 || hour > 12) return null;\n if (period === 'PM') {\n hour = hour === 12 ? 12 : hour + 12;\n } else {\n hour = hour === 12 ? 0 : hour;\n }\n } else {\n // Without a period, assume 24-hour format.\n if (hour < 0 || hour > 23) return null;\n }\n\n return hour * 3600 + minute * 60 + second;\n}\n","export function cubicBezier(p1x: number, p1y: number, p2x: number, p2y: number, t: number): number {\n const cx = 3.0 * p1x;\n const bx = 3.0 * (p2x - p1x) - cx;\n const ax = 1.0 - cx - bx;\n const cy = 3.0 * p1y;\n const by = 3.0 * (p2y - p1y) - cy;\n const ay = 1.0 - cy - by;\n\n let x = t;\n for (let i = 0; i < 4; i++) {\n const t_0 = x * x * x * ax + x * x * bx + x * cx;\n const t_1 = 3 * x * x * ax + 2 * x * bx + cx;\n x = x - (t_0 - t) / t_1;\n }\n return x * x * x * ay + x * x * by + x * cy;\n}\n","import { fromEvent, merge, Observable, tap } from \"rxjs\";\n\nexport interface MouseTouchEvent {\n clientX: number;\n clientY: number;\n pageX: number;\n pageY: number;\n screenX: number;\n screenY: number;\n target: EventTarget | null;\n}\n\n export function normalizeEvent(event: MouseEvent | TouchEvent | Touch): MouseTouchEvent {\n if (event instanceof MouseEvent) {\n return event;\n } else if (event instanceof TouchEvent) {\n return event.touches[0] || event.changedTouches[0];\n } else if (event instanceof Touch) {\n return {\n clientX: event.clientX,\n clientY: event.clientY,\n pageX: event.pageX,\n pageY: event.pageY,\n screenX: event.screenX,\n screenY: event.screenY,\n target: event.target\n };\n }\n return event;\n}\n\n export function createPointerEvents(element: HTMLElement | Element): {\n start$: Observable<PointerEvent>;\n move$: Observable<PointerEvent>;\n end$: Observable<PointerEvent>;\n } {\n const pointerDown$ = fromEvent<PointerEvent>(element, 'pointerdown');\n const pointerMove$ = fromEvent<PointerEvent>(document, 'pointermove');\n const pointerUp$ = fromEvent<PointerEvent>(document, 'pointerup');\n const pointerLeave$ = fromEvent<PointerEvent>(document, 'pointerleave');\n\n const start$ = pointerDown$;\n const move$ = pointerMove$;\n const end$ = merge(pointerUp$, pointerLeave$);\n\n return { start$, move$, end$ };\n}\n","export function snapAngle(angle: number, steps: number): number {\n // Calc the size of each step in the scale. 12 for hours, 60 for minutes\n const stepSize = 360 / steps;\n // Find the closest multiple of the step size. 12 for hours, 60 for minutes\n const closestStep = Math.round(angle / stepSize);\n // Calc the snapped angle\n const snappedAngle = closestStep * stepSize;\n\n return snappedAngle;\n}\n\nexport function hoursToAngle(hour: number): number {\n const angle = (hour - 3) * 30;\n return (angle + 360) % 360;\n}\n\nexport function minutesToAngle(minute: number): number {\n let angle = (minute - 15) * 6;\n angle = (angle + 360) % 360;\n\n return angle;\n}\n\nexport function hours24ToAngle(hour: number): number {\n let angle: number;\n\n if (hour >= 0 && hour <= 11) {\n angle = (hour - 3) * 30; // Dial 1: 0 to 11\n } else {\n angle = (hour - 15) * 30; // Dial 2: 12 to 23\n }\n\n angle = (angle + 360) % 360;\n\n return angle;\n}\n\nexport function angleToHours(angle: number): number {\n // Normalize the angle to be within 0-360 range\n angle = (angle + 360) % 360;\n // Correct mapping: 0 degrees -> 3, 270 degrees -> 12\n let hour = Math.floor((angle + 90) / 30) % 12;\n // Handle the 0 hour case (midnight)\n if (hour === 0) {\n hour = 12;\n }\n\n return hour;\n}\n\nexport function angleToMinutes(angle: number): number {\n // Normalize the angle\n angle = (angle + 360) % 360;\n\n let minute = (angle / 6) + 15;\n\n minute = (minute + 60) % 60; // Ensure positive value and wrap around 60\n\n return Math.floor(minute);\n}\n\nexport function angleToHours24(angle: number, dial: number): number {\n angle = (angle + 360) % 360;\n\n let hour: number = 0;\n const baseValue = angle / 30;\n\n if (dial === 1) { \n hour = (Math.floor(baseValue + 3) % 12 + 12) % 12;\n } else if (dial === 2) { \n hour = (Math.floor(baseValue + 3) % 12) + 12;\n }\n \n return hour;\n}","export const HOURS_LABEL = [12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\nexport const HOURS_LABEL_24_P1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\nexport const HOURS_LABEL_24_P2 = [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23];\nexport const MINUTES_LABEL = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55];\n","import { Component, ChangeDetectionStrategy, ViewEncapsulation, ModelSignal, model, viewChild, ElementRef, Renderer2, DestroyRef, inject, computed, afterNextRender, effect, Injector, WritableSignal, signal, untracked } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { switchMap, takeUntil, tap } from 'rxjs';\n\nimport { ClockIterable } from './utils/clock-iterable';\nimport { amPmTransform, detectTimeFormat, SimpleTime, splitDate } from './utils/time';\nimport { cubicBezier } from './utils/animation';\nimport { normalizeEvent, createPointerEvents, MouseTouchEvent } from './utils/events';\nimport { snapAngle, hoursToAngle, angleToHours, hours24ToAngle, minutesToAngle, angleToHours24, angleToMinutes } from './utils/angle';\nimport { HOURS_LABEL, HOURS_LABEL_24_P1, HOURS_LABEL_24_P2, MINUTES_LABEL } from './utils/constants';\n\n@Component({\n selector: 'rk-timepicker-dial',\n host: {\n 'class': 'rk-timepicker-dial',\n },\n imports: [],\n template: `\t\n <div class=\"rk-timepicker-dial-container\">\n <div #dial class=\"rk-label-container rk-dial-size\">\n </div>\n <div #dial2 class=\"rk-cliped-label rk-dial-size\">\n </div>\n <div #dialSelector class=\"rk-dial-selector\"></div>\n <div class=\"rk-pivot-point\"></div>\n </div>\n `,\n styles: [],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class RkTimepickerDial {\n currentTime: ModelSignal<Date | null> = model.required<Date | null>({alias: 'time'});\n timeFormat: ModelSignal<string | null> = model<string | null>('12h', {alias: 'format'});\n selectedTime: ModelSignal<string | null> = model<string | null>('hours', {alias: 'selected'});\n period: ModelSignal<string> = model<string>('AM');\n\n readonly value = computed(() => {\n const date = this.currentTime();\n return date ? splitDate(date) : { hours: 0, minutes: 0 };\n });\n readonly format = computed(() => {\n const fm = this.timeFormat();\n return (fm && (fm === '24h' || fm === '12h')) ? fm : detectTimeFormat(new Date());\n });\n readonly selected = computed(() => {\n const selected = this.selectedTime();\n return selected === 'hours' || selected === 'minutes' ? selected : 'hours';\n });\n\n private _dial = viewChild.required<ElementRef>('dial');\n private _clipedLabel = viewChild.required<ElementRef>('dial2');\n private _dialSelector = viewChild.required<ElementRef>('dialSelector');\n\n private _elRef: ElementRef = inject(ElementRef);\n private _renderer: Renderer2 = inject(Renderer2);\n private _destroyRef: DestroyRef = inject(DestroyRef);\n private _injector = inject(Injector);\n private _document = inject(DOCUMENT);\n\n private _currentDial = signal(1);\n private _currentDegree: WritableSignal<number> = signal(0);\n private _loading = signal(false);\n private readonly _motion = 400;\n private readonly _radius = 128;\n private readonly _labelSize = 48;\n \n constructor() {\n afterNextRender(() => {\n this._fillBySelected(this.selected(), this.format());\n\n effect(() => {\n const selected = this.selected();\n const format = this.format();\n this._fillBySelected(selected, format);\n untracked(() => {\n const value = this.value();\n this.period.set(this.value().hours < 12 ? 'AM' : 'PM');\n this._currentDial.set(format === '24h' && selected === 'hours' && value.hours >= 12 ? 2 : 1);\n this._handleInputsChange(value, format, selected);\n });\n\n }, { injector: this._injector});\n\n effect(() => {\n const value = this.value();\n untracked(() => {\n if(this._loading()) return;\n const format = this.format();\n const selected = this.selected();\n this.period.set(this.value().hours < 12 ? 'AM' : 'PM');\n this._currentDial.set(format === '24h' && selected === 'hours' && value.hours >= 12 ? 2 : 1);\n this._handleInputsChange(value, format, selected, true);\n })\n }, { injector: this._injector});\n\n effect(() => {\n const period = this.period();\n untracked(() => {\n const currentTime = this.currentTime();\n if(period === null || currentTime === null) return;\n this.currentTime.set(amPmTransform(period, currentTime));\n })\n }, { injector: this._injector});\n\n const { start$, move$, end$ } = createPointerEvents(this._elRef.nativeElement);\n start$.pipe(\n tap((event) => this._onPointerEventInit(normalizeEvent(event))),\n switchMap(() => {\n return move$.pipe(\n takeUntil(end$.pipe(tap((event) => this._onPointerEventStop(normalizeEvent(event)))))\n );\n }),\n takeUntilDestroyed(this._destroyRef)\n ).subscribe(event => {\n const normalized = normalizeEvent(event);\n this._onPointerEventInit(normalized);\n })\n });\n }\n\n private _handleInputsChange(value: SimpleTime, format: string, selected: string, animate = true) {\n if(selected === 'hours') {\n const angle = format === '24h' ? hours24ToAngle(value.hours) : hoursToAngle(value.hours);\n if(animate) {\n this._rotateAnimation(this._currentDegree(), angle, this._motion, 2);\n } else {\n this._moveByAngle(angle, 2);\n }\n this._currentDegree.set(angle);\n } else {\n const angle = minutesToAngle(value.minutes);\n if(animate) {\n this._rotateAnimation(this._currentDegree(), angle, this._motion, 2);\n } else {\n this._moveByAngle(angle, 2);\n }\n this._currentDegree.set(angle);\n }\n }\n\n private _onPointerEventInit(event: MouseTouchEvent) {\n this._loading.set(true);\n this._moveByTouchClick(event, this._dial().nativeElement);\n }\n\n private async _onPointerEventStop(event: MouseTouchEvent) {\n const currentDegree = this._currentDegree();\n const snapDegrees = this.selected() === 'hours' ? snapAngle(currentDegree, 12) : snapAngle(currentDegree, 60);\n\n await this._rotateAnimation(this._currentDegree(), snapDegrees, this._motion / 2, 2);\n this._currentDegree.set(snapDegrees);\n this._loading.set(false);\n }\n\n private _fillDial(dial: HTMLElement, labels: number[], withClean: boolean, inset: number = 2) {\n if (withClean) {\n dial.innerHTML = '';\n }\n const clockIterable = new ClockIterable(labels, this._labelSize, this._radius * 2, inset);\n for (const [label, x, y] of clockIterable) {\n const numero = this._document.createElement('div');\n numero.classList.add('rk-clock-dial-label')\n numero.textContent = this.selected() === 'hours' ? label.toString() : label.toString().padStart(2, '0');\n numero.style.position = 'absolute';\n numero.style.left = x + 'px';\n numero.style.top = y + 'px';\n this._renderer.appendChild(dial, numero);\n }\n }\n\n private _fillBySelected(selected: string, format: string) {\n switch (selected) {\n case 'hours':\n if (format === '12h') {\n this._fillDial(this._dial().nativeElement, HOURS_LABEL, true);\n this._fillDial(this._clipedLabel().nativeElement, HOURS_LABEL, true);\n } else if (format === '24h') {\n this._fillDial(this._dial().nativeElement, HOURS_LABEL_24_P1, true);\n this._fillDial(this._dial().nativeElement, HOURS_LABEL_24_P2, false, 38);\n this._fillDial(this._clipedLabel().nativeElement, HOURS_LABEL_24_P1, true);\n this._fillDial(this._clipedLabel().nativeElement, HOURS_LABEL_24_P2, false, 38);\n }\n break;\n case 'minutes':\n this._fillDial(this._dial().nativeElement, MINUTES_LABEL, true);\n this._fillDial(this._clipedLabel().nativeElement, MINUTES_LABEL, true);\n break;\n default:\n this._fillDial(this._dial().nativeElement, HOURS_LABEL, true);\n this._fillDial(this._clipedLabel().nativeElement, HOURS_LABEL, true);\n }\n }\n\n private _moveByTouchClick(event: MouseTouchEvent, dial: HTMLElement, inset: number = 2) {\n const rect = dial.getBoundingClientRect();\n // relative to the center of the clock\n const x = event.clientX - rect.left - this._radius;\n const y = event.clientY - rect.top - this._radius;\n\n // Calc angle in degrees\n let angle = Math.atan2(y, x) * (180 / Math.PI);\n if (angle < 0) {\n angle += 360; //make sure the angle is in the range [0, 360]\n }\n \n // Calc new position for the object (using radius as reference)\n let radius = this._radius - (this._labelSize / 2) - inset;\n\n//--------------------------------------------------------------------------------------------------------------//\n // logic when format is 24h and two dial exist\n const distanceFromCenter = Math.sqrt(x * x + y * y);\n const MAX_RAD = radius - 20;\n let selectorInset = 0;\n \n if (distanceFromCenter < MAX_RAD && this.selected() === 'hours' && this.format() === '24h') {\n radius -= 36;\n this._currentDial.set(2);\n selectorInset = 36;\n } else {\n this._currentDial.set(1);\n selectorInset = 0;\n }\n \n//----------------------------------------------------------------------------------------------------------------//\n\n const moveX = this._radius + radius * Math.cos(angle * (Math.PI / 180));\n const moveY = this._radius + radius * Math.sin(angle * (Math.PI / 180));\n // Call the provided functions with the calculated values\n this._moveTrack(moveX, moveY);\n this._moveSelector(angle, selectorInset);\n this._currentDegree.set(angle);\n\n //update time\n const snapDegrees = this.selected() === 'hours' ? snapAngle(angle, 12) : snapAngle(angle, 60);\n const currentDate = this.currentTime();\n const date = currentDate ? new Date(currentDate) : new Date();\n \n if(this.selected() === 'hours') {\n let hours = this.format() === '24h' ? angleToHours24(snapDegrees, this._currentDial()) : angleToHours(snapDegrees);\n if(this.format() === '24h') {\n this.period.set(hours < 12 ? 'AM' : 'PM');\n }\n if (this.format() !== '24h' && this.period() === 'PM') {\n hours = hours < 12 ? hours + 12 : hours; \n }\n if(this.period() === 'AM' && hours >= 12 && this.format() === '12h') {\n hours = hours - 12;\n }\n date.setHours(hours);\n } else {\n date.setMinutes(angleToMinutes(snapDegrees));\n }\n \n this.currentTime.set(date);\n }\n\n private _moveByAngle(angle: number, inset: number = 2) {\n // Ensure angle is within 0-360 range\n angle = angle % 360;\n if (angle < 0) {\n angle += 360;\n }\n // Calc new position for the object (using radius as reference)\n let radius = this._radius - (this._labelSize / 2) - inset;\n\n // logic when format is 24h and two dial exist\n let selectorInset = 0;\n if (this.selected() === 'hours' && this.format() === '24h' && this._currentDial() === 2) {\n radius -= 36;\n selectorInset = 36;\n }\n\n const moveX = this._radius + radius * Math.cos(angle * (Math.PI / 180));\n const moveY = this._radius + radius * Math.sin(angle * (Math.PI / 180));\n\n // Call the provided functions with the calculated values\n this._moveTrack(moveX, moveY);\n this._moveSelector(angle, selectorInset);\n }\n\n private _moveTrack(x: number, y: number) {\n this._renderer.setStyle(this._clipedLabel().nativeElement, 'clip-path', `circle(24px at ${x}px ${y}px)`);\n }\n\n private _moveSelector(degrees: number, inset: number = 0) {\n this._renderer.setStyle(this._dialSelector().nativeElement, 'width', 104 - inset + 'px');\n this._renderer.setStyle(this._dialSelector().nativeElement, 'transform', `rotate(${degrees}deg)`);\n }\n\n private async _rotateAnimation(currentDegree: number, degree: number, animationTime: number, inset: number = 2): Promise<void> {\n return new Promise<void>((resolve) => {\n // Calculate the shortest angle difference between the current and target degrees.\n let angleDiff = degree - currentDegree;\n\n // Adjust the angle difference to be within the range of -180 to 180 degrees.\n if (angleDiff > 180) {\n angleDiff -= 360;\n } else if (angleDiff < -180) {\n angleDiff += 360;\n }\n\n // Store the start time of the animation.\n let startTime: number | null = null;\n\n const animate = (timestamp: number) => {\n // Initialize the start time if it hasn't been set yet.\n if (!startTime) startTime = timestamp;\n\n // Calculate the progress of the animation (0 to 1).\n let progress = Math.min((timestamp - startTime) / animationTime, 1);\n\n // Apply a cubic Bezier easing function to the progress. This makes the animation smoother.\n const easedProgress = cubicBezier(0.05, 0.7, 0.1, 1.0, progress);\n\n // Calculate the current angle based on the eased progress.\n const currentAngle = currentDegree + angleDiff * easedProgress;\n\n // Update the position of the dial and selector based on the current angle.\n this._moveByAngle(currentAngle, inset);\n\n // Continue the animation if it's not finished.\n if (progress < 1) {\n requestAnimationFrame(animate);\n } else {\n resolve(); // Resolve the promise when the animation is complete.\n }\n };\n requestAnimationFrame(animate);\n });\n }\n}","import { ChangeDetectionStrategy, Component, computed, effect, ElementRef, input, model, ModelSignal, signal, untracked, viewChild, ViewEncapsulation } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport { MatRippleModule } from '@angular/material/core';\nimport { formatTimeValue, splitDate, validateTimeValue } from './utils';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'rk-timepicker-input-label',\n imports: [NgClass, MatRippleModule, FormsModule],\n host: {\n 'class': 'rk-time-input-field',\n },\n template: `\n <div class=\"rk-time-input-label-container\">\n <div class=\"rk-time-selector-container\" matRipple [ngClass]=\"{'rk-time-selector-container-selected': selected() === 'hours'}\" (click)=\"selectedChange('hours')\">\n @if (!editable()) {\n {{value().hours.toString().padStart(2, '0')}}\n } @else {\n <input type=\"text\" maxlength=\"2\" #inputH [value]=\"hours()\" (focus)=\"selectedChange('hours')\" (input)=\"onHoursInput($event)\" (blur)=\"onHoursBlur()\" name=\"hours\">\n }\n </div>\n @if (editable()) {\n <span class=\"rk-time-input-support-label\">{{inputSupportLabels()[0]}}</span>\n }\n </div>\n <div class=\"rk-time-divider\">:</div>\n <div class=\"rk-time-input-label-container\">\n <div class=\"rk-time-selector-container\" matRipple [ngClass]=\"{'rk-time-selector-container-selected': selected() === 'minutes'}\" (click)=\"selectedChange('minutes')\">\n @if (!editable()) {\n {{value().minutes.toString().padStart(2, '0')}}\n } @else {\n <input type=\"text\" maxlength=\"2\" #inputM [value]=\"minutes()\" (focus)=\"selectedChange('minutes')\" (input)=\"onMinutesInput($event)\" (blur)=\"onMinutesBlur()\" name=\"minutes\">\n }\n </div>\n @if (editable()) {\n <span class=\"rk-time-input-support-label\">{{inputSupportLabels()[1]}}</span>\n }\n </div>\n @if (format() === '12h') {\n <div class=\"rk-period-selector-container\">\n <div class=\"rk-period-selector\" matRipple [ngClass]=\"{'rk-period-selector-selected': period() === 'AM'}\" (click)=\"periodSelector('AM')\">AM</div>\n <div class=\"rk-period-selector\" matRipple [ngClass]=\"{'rk-period-selector-selected': period() === 'PM'}\" (click)=\"periodSelector('PM')\">PM</div>\n </div>\n }\n `,\n styles: ``,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class RkTimepickerInputLabel {\n currentTime: ModelSignal<Date | null> = model.required<Date | null>({alias: 'time'});\n selected = model('hours');\n period = model('AM');\n format = model('12h');\n editable = model(false);\n\n hours = signal<string>('');\n minutes = signal<string>('');\n\n inputSupportLabels = input<string[]>(['Hour', 'Minute'], {alias: 'inputLabels'});\n inputHours = viewChild<ElementRef<HTMLInputElement>>('inputH');\n inputMinutes = viewChild<ElementRef<HTMLInputElement>>('inputM');\n\n readonly value = computed(() => {\n const date = this.currentTime();\n const format = this.format();\n if (date) {\n const { hours, minutes } = splitDate(date);\n if (format === '12h') {\n return { hours: hours > 12 ? hours - 12 : hours === 0 ? 12 : hours, minutes };\n }\n return { hours, minutes };\n }\n return { hours: 0, minutes: 0 };\n });\n\n constructor() {\n effect(() => {\n const editable = this.editable();\n const selected = this.selected();\n if (editable) {\n if (selected=== 'hours') {\n this.inputHours()?.nativeElement.focus();\n } else if (selected === 'minutes') {\n this.inputMinutes()?.nativeElement.focus();\n }\n }\n });\n\n effect(() => {\n const value = this.value();\n untracked(() => {\n this.onHoursInput(value.hours.toString().padStart(2, '0'));\n this.onMinutesInput(value.minutes.toString().padStart(2, '0'));\n })\n })\n }\n\n onHoursInput(event: Event|string): void {\n const input = this.inputHours()?.nativeElement;\n const value = typeof event === 'string' ? event : (<HTMLInputElement>event.target)?.value;\n const max = this.format() === '24h' ? 23 : 12;\n const validatedValue = validateTimeValue(value, max);\n\n if (input &&input.value !== validatedValue) {\n input.value = validatedValue;\n }\n this.hours.set(validatedValue);\n\n }\n \n onMinutesInput(event: Event|string): void {\n const input = this.inputMinutes()?.nativeElement;\n const value = typeof event === 'string' ? event : (<HTMLInputElement>event.target)?.value;\n const validatedValue = validateTimeValue(value, 59);\n\n if (input &&input.value !== validatedValue) {\n input.value = validatedValue;\n }\n\n this.minutes.set(validatedValue);\n }\n\n onHoursBlur(): void {\n const defaultHour = this.format() === '24h' ? '00' : '01';\n const formattedValue = formatTimeValue(this.hours(), defaultHour);\n this.hours.set(formattedValue);\n this.updateModel();\n }\n\n onMinutesBlur(): void {\n const formattedValue = formatTimeValue(this.minutes(), '00');\n this.minutes.set(formattedValue);\n this.updateModel();\n }\n\n updateModel() {\n const tempDate = this.currentTime();\n if(tempDate) {\n const newDate = new Date(tempDate);\n let hoursN = Number(this.hours());\n const minutesN = Number(this.minutes());\n if (this.format() === '12h' && this.period() === 'PM') {\n hoursN = hoursN < 12 ? hoursN + 12 : hoursN;\n }\n newDate.setHours(hoursN);\n newDate.setMinutes(minutesN);\n this.currentTime.set(newDate);\n }\n }\n\n selectedChange(selected: string) {\n if (this.selected() === selected) {\n return;\n }\n this.selected.set(selected);\n }\n\n periodSelector(period: string) {\n if (this.period() === period) {\n return;\n }\n this.period.set(period);\n }\n}","import { Component, ChangeDetectionStrategy, ViewEncapsulation, model, input, computed, effect, signal, output, afterRender, InputSignal, viewChild, TemplateRef, OutputEmitterRef, inject, untracked, Signal } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { Dialog, DialogModule, DialogRef } from '@angular/cdk/dialog';\nimport { RkTimepickerDial } from './timepicker-dial';\nimport { RkTimepickerInputLabel } from './timepicker-input-label';\nimport { RkTimepickerInput } from './timepicker-input';\n\n@Component({\n selector: 'rk-timepicker',\n exportAs: 'rkTimepicker',\n imports: [RkTimepickerInputLabel, NgClass, DialogModule, RkTimepickerDial, MatButton, MatIconButton, MatIcon],\n host: {\n '[class.rk-timepicker-landscape]': 'isLandscape()',\n '[class.rk-timepicker-editable]': 'editable()',\n '(keydown)': '_handleKeydown($event)',\n },\n template: `\n <ng-template #panelTemplate>\n <div class=\"rk-timepicker rk-timepicker-panel\">\n <div class=\"rk-timepicker-container\" [ngClass]=\"{ 'rk-timepicker-container-hide': !load() }\">\n <span class=\"rk-timepicker-headline\">{{ headline() }}</span>\n <rk-timepicker-input-label [(time)]=\"currentTime\" [inputLabels]=\"_inputSupportLabels()\" [(editable)]=\"editable\" [(format)]=\"format\" [(period)]=\"period\" [(selected)]=\"selected\"></rk-timepicker-input-label>\n <rk-timepicker-dial [ngClass]=\"{ 'rk-dial-closed': editable(), 'rk-dial-animated': animated()}\" [(time)]=\"currentTime\" [(format)]=\"format\" [(period)]=\"period\" [(selected)]=\"selected\"></rk-timepicker-dial>\n <div class=\"rk-timepicker-footer\">\n <button class=\"rk-timepicker-mode-button\" (click)=\"changeMode()\" mat-icon-button>\n @if (editable()) {\n <mat-icon>schedule</mat-icon>\n } @else {\n <mat-icon>keyboard</mat-icon> \n }\n </button>\n <div class=\"rk-timepicker-actions\">\n <button mat-button (click)=\"onCancel()\">{{_actions()[0]}}</button>\n <button mat-button (click)=\"onConfirm()\">{{_actions()[1]}}</button>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n `,\n styles: ``,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class RkTimepicker {\n selected = model<string>('hours');\n format = model('12h');\n period = model<string>('AM');\n editable = model(false);\n orientation = model<string>('portrait');\n \n _inputSupportLabels = input<string[]>(['Hour', 'Minute'], {alias: 'inputLabels'});\n _headline = input<string[]>(['Enter time', 'Select time'], {alias: 'headline'});\n _actions = input<string[]>(['Cancel', 'OK'], {alias: 'actions'});\n /** Whether the timepicker is currently disabled. */\n readonly disabled: Signal<boolean> = computed(() => !!this._input()?.disabled());\n \n readonly defaultTime: InputSignal<Date | null> = input<Date | null>(null,{alias: 'time'});\n readonly load = signal(false);\n \n readonly isLandscape = computed(() => {\n return this.orientation() === 'landscape';\n });\n \n readonly headline = computed(() => {\n const editable = this.editable();\n const labels = this._headline();\n return editable ? labels[0] : labels[1];\n });\n \n \n protected _panelTemplate = viewChild.required<TemplateRef<unknown>>('panelTemplate');\n private _dialogRef = signal<DialogRef<Date | null> | null>(null);\n \n private _input = signal<RkTimepickerInput | null>(null);\n private _isOpen = signal(false);\n\n currentTime = signal<Date | null>(null);\n animated = signal(false);\n \n /** Emits when the timepicker is opened. */\n readonly opened: OutputEmitterRef<void> = output();\n /** Emits when the timepicker is closed. */\n readonly closed: OutputEmitterRef<void> = output();\n\n readonly selectedTime: OutputEmitterRef<Date> = output();\n \n private _dialog = inject(Dialog);\n\n constructor() {\n effect(() => {\n const value = this.defaultTime();\n if(!value) {\n this.currentTime.set(new Date());\n } else {\n this.currentTime.set(value);\n }\n });\n\n effect(() => {\n const editable = this.editable();\n untracked(() => {\n this.animated.set(true);\n })\n })\n\n afterRender(() => {\n this.load.set(true);\n });\n }\n\n /** Opens the timepicker. */\n open(): void {\n const input = this._input();\n\n if (!input) {\n return;\n }\n\n if (this._isOpen()) {\n return;\n }\n\n this.currentTime.set(input.value());\n this.animated.set(false);\n this._isOpen.set(true);\n this.opened.emit();\n \n const dialogRef = this._dialog.open<Date | null>(this._panelTemplate(), {\n width: '328px',\n });\n\n this._dialogRef.set(dialogRef);\n\n dialogRef.closed.subscribe(result => {\n if(result) {\n this._input()?.value.set(result);\n this.selectedTime.emit(result);\n input.simulateEnter();\n }\n this._isOpen.set(false);\n this.closed.emit();\n input.focus();\n });\n }\n\n /** Registers an input with the timepicker. */\n registerInput(input: RkTimepickerInput): void {\n const currentInput = this._input();\n\n if (currentInput && input !== currentInput ) {\n console.warn('RkTimepicker can only be registered with one input at a time');\n }\n\n this._input.set(input);\n }\n\n private _handleKeydown(event: KeyboardEvent): void {\n const keyCode = event.key;\n if (keyCode === 'Enter') {\n event.preventDefault();\n this.onConfirm();\n } else if (keyCode === 'Escape') {\n event.preventDefault();\n this.onCancel();\n }\n }\n\n\n changeMode() {\n this.editable.set(!this.editable());\n }\n\n \n onConfirm() {\n this._dialogRef()?.close(this.currentTime());\n }\n\n onCancel() {\n this._dialogRef()?.close();\n } \n}\n","import { booleanAttribute, computed, Directive, effect, ElementRef, inject, input, InputSignal, InputSignalWithTransform, model, ModelSignal, Renderer2, Signal, signal } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { MAT_INPUT_VALUE_ACCESSOR } from '@angular/material/input';\nimport { RkTimepicker } from './timepicker';\nimport { secondsToDate, timeToSecondsi18n as timeToSeconds } from './utils';\n\n@Directive({\n selector: 'input[rkTimepicker]',\n exportAs: 'rkTimepickerInput',\n host: {\n 'class': 'rk-timepicker-input',\n 'type': 'text',\n '(input)': '_handleInput($event.target.value)',\n '(blur)': '_handleBlur()',\n '(keydown)': '_handleKeydown($event)',\n '[disabled]': 'disabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: RkTimepickerInput,\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: RkTimepickerInput,\n multi: true,\n },\n {\n provide: MAT_INPUT_VALUE_ACCESSOR,\n useExisting: RkTimepickerInput,\n },\n ]\n})\nexport class RkTimepickerInput implements ControlValueAccessor, Validator {\n private _elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private _renderer = inject(Renderer2);\n \n /** Necessary for ControlValueAccessor implementation */\n private _onChange: ((value: any) => void) | undefined;\n private _onTouched: (() => void) | undefined;\n private _accessorDisabled = signal(false);\n private _validatorOnChange: (() => void) | undefined;\n\n /** Current value of the input. */\n readonly value: ModelSignal<Date | null> = model<Date | null>(null);\n private _tempDateSafe = signal<Date | null>(null);\n \n /** Timepicker that the input is associated with. */\n readonly timepicker: InputSignal<RkTimepicker> = input.required<RkTimepicker>({\n alias: 'rkTimepicker',\n });\n /** Whether the input is disabled. */\n readonly disabled: Signal<boolean> = computed(\n () => this.disabledInput() || this._accessorDisabled(),\n );\n /**\n * Whether the input should be disabled through the template.\n */\n readonly disabledInput: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n alias: 'disabled',\n });\n \n constructor() {\n this._registerTimepicker();\n }\n\n private _updateModelValue() {\n const value = this.value();\n if(!value) {\n this._validatorOnChange?.();\n return\n }\n this._onChange?.(value);\n }\n \n private _validateTimeOrNull(value: string | Date | null) {\n if (value === null || value instanceof Date) {\n this.value.set(value);\n return;\n }\n const validTime = timeToSeconds(value);\n const time = validTime ? secondsToDate(validTime) : null;\n if(!time) {\n this.value.set(null);\n } else {\n const newDate = new Date(this._tempDateSafe() ?? new Date());\n newDate.setHours(time.getHours(), time.getMinutes());\n this.value.set(newDate);\n }\n }\n \n private _updateInputValue() {\n if (this.value() !== null) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', this.value()?.toLocaleTimeString([],{ hour: \"2-digit\", minute: \"2-digit\" }));\n }\n }\n\n /** Handles the `input` event. */\n protected _handleInput(value: string) {\n this._validateTimeOrNull(value);\n this._validatorOnChange?.();\n }\n\n /** Handles the `keydown` event. */\n protected _handleKeydown(event: KeyboardEvent) {\n if (['Enter', 'Escape', 'Tab'].includes(event.code)) {\n this._updateModelValue();\n this._updateInputValue();\n }\n }\n\n simulateEnter() {\n this._handleKeydown({ code: 'Enter' } as KeyboardEvent);\n }\n\n /** Handles the `blur` event. */\n protected _handleBlur() {\n this._onTouched?.();\n this._updateModelValue();\n this._updateInputValue();\n }\n\n /** Focuses the input. */\n focus(): void {\n this._elementRef.nativeElement.focus();\n }\n\n /** Implemented as a part of ControlValueAccessor. */\n writeValue(value: any): void {\n if(value instanceof Date) {\n this._tempDateSafe.set(value);\n this.value.set(value);\n this._updateInputValue();\n } else {\n this._validateTimeOrNull(value);\n this._updateInputValue();\n }\n }\n /** Implemented as a part of ControlValueAccessor. */\n registerOnChange(fn: (value: any) => void): void {\n this._onChange = fn;\n }\n /** Implemented as a part of ControlValueAccessor. */\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n /** Implemented as a part of ControlValueAccessor. */\n setDisabledState(isDisabled: any): void {\n this._accessorDisabled.set(isDisabled);\n }\n\n // implemented as a part of Validator\n validate(control: AbstractControl): ValidationErrors | null {\n if (control.value == null || this.value() == null) {\n return { invalidTimeFormat: true };\n }\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this._validatorOnChange = fn;\n }\n\n /** Sets up the logic that registers the input with the timepicker. */\n private _registerTimepicker(): void {\n effect(() => {\n const timepicker = this.timepicker();\n timepicker.registerInput(this);\n timepicker.closed.subscribe(() => this._onTouched?.());\n });\n }\n}\n","import { booleanAttribute, Component, computed, input, InputSignal, InputSignalWithTransform } from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { RkTimepicker } from './timepicker';\n\n@Component({\n selector: 'rk-timepicker-toggle',\n imports: [MatIconButton],\n template: `\n <button mat-icon-button type=\"button\" [disabled]=\"_isDisabled()\" (click)=\"_open($event)\">\n <ng-content select=\"[rkTimepickerToggleIcon]\">\n <svg\n class=\"rk-timepicker-toggle-default-icon\"\n height=\"24px\"\n width=\"24px\"\n viewBox=\"0 -960 960 960\"\n fill=\"currentColor\"\n focusable=\"false\"\n aria-hidden=\"true\">\n <path d=\"m612-292 56-56-148-148v-184h-80v216l172 172ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-400Zm0 320q133 0 226.5-93.5T800-480q0-133-93.5-226.5T480-800q-133 0-226.5 93.5T160-480q0 133 93.5 226.5T480-160Z\"/>\n </svg>\n </ng-content>\n </button>\n `,\n styles: ``\n})\nexport class RkTimepickerToggle {\n readonly timepicker: InputSignal<RkTimepicker> = input.required<RkTimepicker>({\n alias: 'for',\n });\n\n /** Whether the toggle button is disabled. */\n readonly disabled: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n alias: 'disabled',\n });\n\n protected _isDisabled = computed(() => {\n const timepicker = this.timepicker();\n return this.disabled() || timepicker.disabled();\n });\n\n /** Opens the connected timepicker. */\n protected _open(event: Event): void {\n if (this.timepicker() && !this._isDisabled()) {\n this.timepicker().open();\n event.stopPropagation();\n }\n }\n}","import { Component, ChangeDetectionStrategy, ViewEncapsulation, model, input, computed, effect, signal, afterRender } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { RkTimepickerDial } from './timepicker-dial';\nimport { RkTimepickerInputLabel } from './timepicker-input-label';\n\n@Component({\n selector: 'rk-clock',\n exportAs: 'rkClock',\n imports: [RkTimepickerInputLabel, NgClass, RkTimepickerDial, MatButton, MatIconButton, MatIcon],\n host: {\n 'class': 'rk-timepicker',\n '[class.rk-timepicker-landscape]': 'isLandscape()',\n '[class.rk-timepicker-editable]': 'editable()',\n },\n template: `\n <div class=\"rk-timepicker-container\" [ngClass]=\"{ 'rk-timepicker-container-hide': !load() }\">\n <span class=\"rk-timepicker-headline\">{{ headline() }}</span>\n <rk-timepicker-input-label [(time)]=\"value\" [inputLabels]=\"inputSupportLabels()\" [(editable)]=\"editable\" [(format)]=\"format\" [(period)]=\"period\" [(selected)]=\"selected\"></rk-timepicker-input-label>\n <rk-timepicker-dial [ngClass]=\"{ 'rk-dial-closed': editable()}\" [(time)]=\"value\" [(format)]=\"format\" [(period)]=\"period\" [(selected)]=\"selected\"></rk-timepicker-dial>\n <div class=\"rk-timepicker-footer\">\n <button class=\"rk-timepicker-mode-button\" (click)=\"changeMode()\" mat-icon-button>\n @if (editable()) {\n <mat-icon>schedule</mat-icon>\n } @else {\n <mat-icon>keyboard</mat-icon> \n }\n </button>\n </div>\n </div>\n `,\n styles: ``,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class RkClock {\n value= model<Date | null>(null, {alias: 'time'});\n selected = model<string>('hours');\n format = model('24h');\n period = model<string>('AM');\n editable = model(false);\n orientation = model<string>('portrait');\n inputSupportLabels = input<string[]>(['Hour', 'Minute'], {alias: 'inputLabels'});\n _headline = input<string[]>(['Enter time', 'Select time'], {alias: 'headline'});\n\n readonly load = signal(false);\n\n readonly isLandscape = computed(() => {\n return this.orientation() === 'landscape';\n });\n\n readonly headline = computed(() => {\n const editable = this.editable();\n const labels = this._headline();\n return editable ? labels[0] : labels[1];\n });\n\n constructor() {\n effect(() => {\n const value = this.value();\n if(!value) {\n this.value.set(new Date());\n };\n });\n\n afterRender(() => {\n this.load.set(true);\n });\n }\n\n changeMode() {\n this.editable.set(!this.editable());\n }\n}\n","/*\n * Public API Surface of timepicker\n */\nexport * from './lib/timepicker';\nexport * from './lib/timepicker-input';\nexport * from './lib/timepicker-toggle';\nexport * from './lib/clock';\nexport * from './lib/utils/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["timeToSeconds"],"mappings":"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"}
1
+ {"version":3,"file":"redkhat-timepicker.mjs","sources":["../../../../src/timepicker/src/lib/utils/clock-iterable.ts","../../../../src/timepicker/src/lib/utils/time.ts","../../../../src/timepicker/src/lib/utils/animation.ts","../../../../src/timepicker/src/lib/utils/events.ts","../../../../src/timepicker/src/lib/utils/angle.ts","../../../../src/timepicker/src/lib/utils/constants.ts","../../../../src/timepicker/src/lib/timepicker-dial.ts","../../../../src/timepicker/src/lib/timepicker-input-label.ts","../../../../src/timepicker/src/lib/timepicker.ts","../../../../src/timepicker/src/lib/timepicker-input.ts","../../../../src/timepicker/src/lib/timepicker-toggle.ts","../../../../src/timepicker/src/lib/clock.ts","../../../../src/timepicker/src/public-api.ts","../../../../src/timepicker/src/redkhat-timepicker.ts"],"sourcesContent":["\n/**\n * A class that implements the `Iterable` interface to generate coordinates for clock labels.\n * \n * @template T - The type of the labels.\n */\nexport class ClockIterable<T> implements Iterable<[T, number, number]> {\n /**\n * The labels to be positioned around the clock.\n */\n private labels: T[];\n\n /**\n * The radius of the clock.\n */\n private radio: number;\n\n /**\n * The size of each label.\n */\n private labelSize: number;\n\n /**\n * The inset distance from the edge of the clock.\n */\n private inset: number;\n\n /**\n * The degrees between each label.\n */\n private readonly degreesByNumber = 30;\n\n /**\n * Creates an instance of ClockIterable.\n * \n * @param labels - An array of labels to be positioned around the clock [12, 1, 2, 3...].\n * @param labelSize - The size of each label.\n * @param diameter - The diameter of the clock.\n * @param inset - The inset distance from the edge of the clock (default is 0).\n */\n constructor(labels: T[], labelSize: number, diameter: number, inset: number = 0) {\n this.labels = labels;\n this.labelSize = labelSize / 2;\n this.radio = (diameter / 2) - inset;\n this.inset = inset;\n }\n\n /**\n * Returns an iterator that yields the label and its x, y coordinates.\n * \n * @returns An iterator that yields a tuple containing the label and its x, y coordinates.\n */\n *[Symbol.iterator](): Iterator<[T, number, number]> {\n for (let i = 0; i < this.labels.length; i++) {\n const x = this.radio + (this.radio - this.labelSize) * Math.sin(i * this.degreesByNumber * Math.PI / 180);\n const y = this.radio - (this.radio - this.labelSize) * Math.cos(i * this.degreesByNumber * Math.PI / 180);\n yield [this.labels[i], this.inset + x - this.labelSize, this.inset + y - this.labelSize];\n }\n }\n}\n","export function secondsToDate(seconds: number): Date {\n const initialDate = new Date(0, 0, 0, 0);\n const date = new Date(initialDate.getTime() + seconds * 1000);\n return date;\n}\n\nexport function detectTimeFormat(date: Date): string {\n const localTime = date.toLocaleTimeString();\n if (localTime.includes('AM') || localTime.includes('PM')) {\n return '12h';\n } else {\n return '24h';\n }\n}\n\nexport function splitDate(date: Date): SimpleTime {\n const hours = date.getHours();\n const minutes = date.getMinutes();\n return { hours, minutes };\n}\n\nexport function amPmTransform(isAm: string, date: Date) : Date {\n const newDate = new Date(date);\n const tempHours = newDate.getHours();\n if (isAm === 'AM' && tempHours >= 12) {\n newDate.setHours(tempHours - 12);\n } else if (isAm === 'PM' && tempHours < 12) {\n newDate.setHours(tempHours + 12);\n }\n return newDate;\n}\n\nexport function validateTimeValue(value: string, max: number): string {\n let numericValue = value.replace(/[^0-9]/g, '');\n\n if (numericValue.length > 2) {\n numericValue = numericValue.slice(0, 2);\n }\n\n if (numericValue === '') {\n return '';\n }\n const num = parseInt(numericValue, 10);\n return num > max ? max.toString() : numericValue;\n}\n\nexport function formatTimeValue(value: string, defaultValue: string, padLength: number = 2): string {\n if (value === '') {\n return defaultValue;\n }\n const num = parseInt(value, 10);\n if (num === 0) {\n return defaultValue;\n }\n return value.padStart(padLength, '0');\n}\n\nexport interface SimpleTime {\n hours: number;\n minutes: number;\n}\n\n\n/**\n * Converts a time string or number to the number of seconds since midnight.\n *\n * Supported formats include:\n * - Integers (e.g., \"10\", \"1030\", 10, 1030) in 24-hour format (up to 2359).\n * - Space-separated numbers (e.g., \"10 30\") as HH MM.\n * - Colon-separated numbers (e.g., \"10:30\" or \"10:30:00\") as HH:MM or HH:MM:SS.\n * - Formats with regional AM/PM markers either at the beginning or at the end\n * (e.g., \"10:30am\", \"am 10:30\", \"午後3:25:00\", \"10:30 du matin\").\n *\n * Additionally, this function normalizes Arabic digits (Unicode range \\u0660-\\u0669)\n * to their Western counterparts before processing.\n *\n * @param input The input to convert (can be a string or number).\n * @returns The number of seconds since midnight, or null if the input is invalid.\n */\nexport function timeToSecondsi18n(input: string | number): number | null {\n // Convert input to string and trim whitespace.\n let inputStr = typeof input === 'number' ? String(input) : input;\n inputStr = inputStr.trim();\n\n // Normalize Arabic digits to Western digits if found.\n if (/[\\u0660-\\u0669]/.test(inputStr)) {\n inputStr = inputStr.replace(/[\\u0660-\\u0669]/g, d => (d.charCodeAt(0) - 0x0660).toString());\n }\n // Extended list of AM and PM markers across various regions/languages.\n const AM_MARKERS = [\n 'am', 'a.m.', 'a.m', // English\n '午前', // Japanese\n '上午', // Chinese\n '오전', // Korean\n 'ص', 'صباح', 'صباحاً', // Arabic\n 'du matin', 'matin' // French\n ];\n const PM_MARKERS = [\n 'pm', 'p.m.', 'p.m', // English\n '午後', // Japanese\n '下午', // Chinese\n '오후', // Korean\n 'م', 'مساء', 'مساءً', // Arabic\n \"de l’après-midi\", \"de l'aprés-midi\", \"de l'après-midi\",\n 'après-midi', 'du soir', 'soir' // French\n ];\n\n let period: 'AM' | 'PM' | null = null;\n\n // Helper functions to compare prefix/suffix ignoring case.\n const startsWithIgnoreCase = (str: string, prefix: string) =>\n str.substring(0, prefix.length).toLowerCase() === prefix.toLowerCase();\n const endsWithIgnoreCase = (str: string, suffix: string) =>\n str.substring(str.length - suffix.length).toLowerCase() === suffix.toLowerCase();\n\n // Check if the period marker is at the beginning.\n for (const marker of AM_MARKERS) {\n if (startsWithIgnoreCase(inputStr, marker)) {\n period = 'AM';\n inputStr = inputStr.substring(marker.length).trim();\n break;\n }\n }\n if (!period) {\n for (const marker of PM_MARKERS) {\n if (startsWithIgnoreCase(inputStr, marker)) {\n period = 'PM';\n inputStr = inputStr.substring(marker.length).trim();\n break;\n }\n }\n }\n // If not found at the beginning, check at the end.\n if (!period) {\n for (const marker of AM_MARKERS) {\n if (endsWithIgnoreCase(inputStr, marker)) {\n period = 'AM';\n inputStr = inputStr.substring(0, inputStr.length - marker.length).trim();\n break;\n }\n }\n }\n if (!period) {\n for (const marker of PM_MARKERS) {\n if (endsWithIgnoreCase(inputStr, marker)) {\n period = 'PM';\n inputStr = inputStr.substring(0, inputStr.length - marker.length).trim();\n break;\n }\n }\n }\n\n // Split the numeric part of the time.\n let timeParts: number[] = [];\n\n if (inputStr.includes(':')) {\n // Colon-separated format. Accepts HH:MM or HH:MM:SS.\n const parts = inputStr.split(':');\n if (parts.length < 2 || parts.length > 3) return null;\n for (const part of parts) {\n const num = parseInt(part, 10);\n if (isNaN(num)) return null;\n timeParts.push(num);\n }\n } else if (inputStr.includes(' ')) {\n // Space-separated format (e.g., \"10 30\").\n const parts = inputStr.split(/\\s+/);\n if (parts.length > 3) return null;\n for (const part of parts) {\n const num = parseInt(part, 10);\n if (isNaN(num)) return null;\n timeParts.push(num);\n }\n } else if (/^\\d+$/.test(inputStr)) {\n // Numeric case without separators: \"10\", \"1030\".\n if (inputStr.length <= 2) {\n timeParts = [parseInt(inputStr, 10)];\n } else if (inputStr.length === 3) {\n timeParts = [\n parseInt(inputStr.substring(0, 1), 10),\n parseInt(inputStr.substring(1), 10),\n ];\n } else if (inputStr.length === 4) {\n timeParts = [\n parseInt(inputStr.substring(0, 2), 10),\n parseInt(inputStr.substring(2), 10),\n ];\n } else {\n // Unsupported numeric format with more than 4 digits.\n return null;\n }\n } else {\n // Unrecognized format.\n return null;\n }\n\n // Extract hour, minute, and second (defaulting to 0 if not provided).\n let hour = timeParts[0];\n let minute = timeParts.length >= 2 ? timeParts[1] : 0;\n let second = timeParts.length === 3 ? timeParts[2] : 0;\n\n // Validate minute and second ranges.\n if (minute < 0 || minute > 59) return null;\n if (second < 0 || second > 59) return null;\n\n // Adjust hour based on the AM/PM marker.\n if (period) {\n if (hour < 1 || hour > 12) return null;\n if (period === 'PM') {\n hour = hour === 12 ? 12 : hour + 12;\n } else {\n hour = hour === 12 ? 0 : hour;\n }\n } else {\n // Without a period, assume 24-hour format.\n if (hour < 0 || hour > 23) return null;\n }\n\n return hour * 3600 + minute * 60 + second;\n}\n","export function cubicBezier(p1x: number, p1y: number, p2x: number, p2y: number, t: number): number {\n const cx = 3.0 * p1x;\n const bx = 3.0 * (p2x - p1x) - cx;\n const ax = 1.0 - cx - bx;\n const cy = 3.0 * p1y;\n const by = 3.0 * (p2y - p1y) - cy;\n const ay = 1.0 - cy - by;\n\n let x = t;\n for (let i = 0; i < 4; i++) {\n const t_0 = x * x * x * ax + x * x * bx + x * cx;\n const t_1 = 3 * x * x * ax + 2 * x * bx + cx;\n x = x - (t_0 - t) / t_1;\n }\n return x * x * x * ay + x * x * by + x * cy;\n}\n","import { fromEvent, merge, Observable, tap } from \"rxjs\";\n\nexport interface MouseTouchEvent {\n clientX: number;\n clientY: number;\n pageX: number;\n pageY: number;\n screenX: number;\n screenY: number;\n target: EventTarget | null;\n}\n\n export function normalizeEvent(event: MouseEvent | TouchEvent | Touch): MouseTouchEvent {\n if (event instanceof MouseEvent) {\n return event;\n } else if (event instanceof TouchEvent) {\n return event.touches[0] || event.changedTouches[0];\n } else if (event instanceof Touch) {\n return {\n clientX: event.clientX,\n clientY: event.clientY,\n pageX: event.pageX,\n pageY: event.pageY,\n screenX: event.screenX,\n screenY: event.screenY,\n target: event.target\n };\n }\n return event;\n}\n\n export function createPointerEvents(element: HTMLElement | Element): {\n start$: Observable<PointerEvent>;\n move$: Observable<PointerEvent>;\n end$: Observable<PointerEvent>;\n } {\n const pointerDown$ = fromEvent<PointerEvent>(element, 'pointerdown');\n const pointerMove$ = fromEvent<PointerEvent>(document, 'pointermove');\n const pointerUp$ = fromEvent<PointerEvent>(document, 'pointerup');\n const pointerLeave$ = fromEvent<PointerEvent>(document, 'pointerleave');\n\n const start$ = pointerDown$;\n const move$ = pointerMove$;\n const end$ = merge(pointerUp$, pointerLeave$);\n\n return { start$, move$, end$ };\n}\n","export function snapAngle(angle: number, steps: number): number {\n // Calc the size of each step in the scale. 12 for hours, 60 for minutes\n const stepSize = 360 / steps;\n // Find the closest multiple of the step size. 12 for hours, 60 for minutes\n const closestStep = Math.round(angle / stepSize);\n // Calc the snapped angle\n const snappedAngle = closestStep * stepSize;\n\n return snappedAngle;\n}\n\nexport function hoursToAngle(hour: number): number {\n const angle = (hour - 3) * 30;\n return (angle + 360) % 360;\n}\n\nexport function minutesToAngle(minute: number): number {\n let angle = (minute - 15) * 6;\n angle = (angle + 360) % 360;\n\n return angle;\n}\n\nexport function hours24ToAngle(hour: number): number {\n let angle: number;\n\n if (hour >= 0 && hour <= 11) {\n angle = (hour - 3) * 30; // Dial 1: 0 to 11\n } else {\n angle = (hour - 15) * 30; // Dial 2: 12 to 23\n }\n\n angle = (angle + 360) % 360;\n\n return angle;\n}\n\nexport function angleToHours(angle: number): number {\n // Normalize the angle to be within 0-360 range\n angle = (angle + 360) % 360;\n // Correct mapping: 0 degrees -> 3, 270 degrees -> 12\n let hour = Math.floor((angle + 90) / 30) % 12;\n // Handle the 0 hour case (midnight)\n if (hour === 0) {\n hour = 12;\n }\n\n return hour;\n}\n\nexport function angleToMinutes(angle: number): number {\n // Normalize the angle\n angle = (angle + 360) % 360;\n\n let minute = (angle / 6) + 15;\n\n minute = (minute + 60) % 60; // Ensure positive value and wrap around 60\n\n return Math.floor(minute);\n}\n\nexport function angleToHours24(angle: number, dial: number): number {\n angle = (angle + 360) % 360;\n\n let hour: number = 0;\n const baseValue = angle / 30;\n\n if (dial === 1) { \n hour = (Math.floor(baseValue + 3) % 12 + 12) % 12;\n } else if (dial === 2) { \n hour = (Math.floor(baseValue + 3) % 12) + 12;\n }\n \n return hour;\n}","export const HOURS_LABEL = [12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\nexport const HOURS_LABEL_24_P1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\nexport const HOURS_LABEL_24_P2 = [12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23];\nexport const MINUTES_LABEL = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55];\n","import { Component, ChangeDetectionStrategy, ViewEncapsulation, ModelSignal, model, viewChild, ElementRef, Renderer2, DestroyRef, inject, computed, afterNextRender, effect, Injector, WritableSignal, signal, untracked } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { switchMap, takeUntil, tap } from 'rxjs';\n\nimport { ClockIterable } from './utils/clock-iterable';\nimport { amPmTransform, detectTimeFormat, SimpleTime, splitDate } from './utils/time';\nimport { cubicBezier } from './utils/animation';\nimport { normalizeEvent, createPointerEvents, MouseTouchEvent } from './utils/events';\nimport { snapAngle, hoursToAngle, angleToHours, hours24ToAngle, minutesToAngle, angleToHours24, angleToMinutes } from './utils/angle';\nimport { HOURS_LABEL, HOURS_LABEL_24_P1, HOURS_LABEL_24_P2, MINUTES_LABEL } from './utils/constants';\n\n@Component({\n selector: 'rk-timepicker-dial',\n host: {\n 'class': 'rk-timepicker-dial',\n },\n imports: [],\n template: `\t\n <div class=\"rk-timepicker-dial-container\">\n <div #dial class=\"rk-label-container rk-dial-size\">\n </div>\n <div #dial2 class=\"rk-cliped-label rk-dial-size\">\n </div>\n <div #dialSelector class=\"rk-dial-selector\"></div>\n <div class=\"rk-pivot-point\"></div>\n </div>\n `,\n styles: [],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class RkTimepickerDial {\n currentTime: ModelSignal<Date | null> = model.required<Date | null>({alias: 'time'});\n timeFormat: ModelSignal<string | null> = model<string | null>('12h', {alias: 'format'});\n selectedTime: ModelSignal<string | null> = model<string | null>('hours', {alias: 'selected'});\n period: ModelSignal<string> = model<string>('AM');\n\n readonly value = computed(() => {\n const date = this.currentTime();\n return date ? splitDate(date) : { hours: 0, minutes: 0 };\n });\n readonly format = computed(() => {\n const fm = this.timeFormat();\n return (fm && (fm === '24h' || fm === '12h')) ? fm : detectTimeFormat(new Date());\n });\n readonly selected = computed(() => {\n const selected = this.selectedTime();\n return selected === 'hours' || selected === 'minutes' ? selected : 'hours';\n });\n\n private _dial = viewChild.required<ElementRef>('dial');\n private _clipedLabel = viewChild.required<ElementRef>('dial2');\n private _dialSelector = viewChild.required<ElementRef>('dialSelector');\n\n private _elRef: ElementRef = inject(ElementRef);\n private _renderer: Renderer2 = inject(Renderer2);\n private _destroyRef: DestroyRef = inject(DestroyRef);\n private _injector = inject(Injector);\n private _document = inject(DOCUMENT);\n\n private _currentDial = signal(1);\n private _currentDegree: WritableSignal<number> = signal(0);\n private _loading = signal(false);\n private readonly _motion = 400;\n private readonly _radius = 128;\n private readonly _labelSize = 48;\n \n constructor() {\n afterNextRender(() => {\n this._fillBySelected(this.selected(), this.format());\n\n effect(() => {\n const selected = this.selected();\n const format = this.format();\n this._fillBySelected(selected, format);\n untracked(() => {\n const value = this.value();\n this.period.set(this.value().hours < 12 ? 'AM' : 'PM');\n this._currentDial.set(format === '24h' && selected === 'hours' && value.hours >= 12 ? 2 : 1);\n this._handleInputsChange(value, format, selected);\n });\n\n }, { injector: this._injector});\n\n effect(() => {\n const value = this.value();\n untracked(() => {\n if(this._loading()) return;\n const format = this.format();\n const selected = this.selected();\n this.period.set(this.value().hours < 12 ? 'AM' : 'PM');\n this._currentDial.set(format === '24h' && selected === 'hours' && value.hours >= 12 ? 2 : 1);\n this._handleInputsChange(value, format, selected, true);\n })\n }, { injector: this._injector});\n\n effect(() => {\n const period = this.period();\n untracked(() => {\n const currentTime = this.currentTime();\n if(period === null || currentTime === null) return;\n this.currentTime.set(amPmTransform(period, currentTime));\n })\n }, { injector: this._injector});\n\n const { start$, move$, end$ } = createPointerEvents(this._elRef.nativeElement);\n start$.pipe(\n tap((event) => this._onPointerEventInit(normalizeEvent(event))),\n switchMap(() => {\n return move$.pipe(\n takeUntil(end$.pipe(tap((event) => this._onPointerEventStop(normalizeEvent(event)))))\n );\n }),\n takeUntilDestroyed(this._destroyRef)\n ).subscribe(event => {\n const normalized = normalizeEvent(event);\n this._onPointerEventInit(normalized);\n })\n });\n }\n\n private _handleInputsChange(value: SimpleTime, format: string, selected: string, animate = true) {\n if(selected === 'hours') {\n const angle = format === '24h' ? hours24ToAngle(value.hours) : hoursToAngle(value.hours);\n if(animate) {\n this._rotateAnimation(this._currentDegree(), angle, this._motion, 2);\n } else {\n this._moveByAngle(angle, 2);\n }\n this._currentDegree.set(angle);\n } else {\n const angle = minutesToAngle(value.minutes);\n if(animate) {\n this._rotateAnimation(this._currentDegree(), angle, this._motion, 2);\n } else {\n this._moveByAngle(angle, 2);\n }\n this._currentDegree.set(angle);\n }\n }\n\n private _onPointerEventInit(event: MouseTouchEvent) {\n this._loading.set(true);\n this._moveByTouchClick(event, this._dial().nativeElement);\n }\n\n private async _onPointerEventStop(event: MouseTouchEvent) {\n const currentDegree = this._currentDegree();\n const snapDegrees = this.selected() === 'hours' ? snapAngle(currentDegree, 12) : snapAngle(currentDegree, 60);\n\n await this._rotateAnimation(this._currentDegree(), snapDegrees, this._motion / 2, 2);\n this._currentDegree.set(snapDegrees);\n this._loading.set(false);\n }\n\n private _fillDial(dial: HTMLElement, labels: number[], withClean: boolean, inset: number = 2) {\n if (withClean) {\n dial.innerHTML = '';\n }\n const clockIterable = new ClockIterable(labels, this._labelSize, this._radius * 2, inset);\n for (const [label, x, y] of clockIterable) {\n const numero = this._document.createElement('div');\n numero.classList.add('rk-clock-dial-label')\n numero.textContent = this.selected() === 'hours' ? label.toString() : label.toString().padStart(2, '0');\n numero.style.position = 'absolute';\n numero.style.left = x + 'px';\n numero.style.top = y + 'px';\n this._renderer.appendChild(dial, numero);\n }\n }\n\n private _fillBySelected(selected: string, format: string) {\n switch (selected) {\n case 'hours':\n if (format === '12h') {\n this._fillDial(this._dial().nativeElement, HOURS_LABEL, true);\n this._fillDial(this._clipedLabel().nativeElement, HOURS_LABEL, true);\n } else if (format === '24h') {\n this._fillDial(this._dial().nativeElement, HOURS_LABEL_24_P1, true);\n this._fillDial(this._dial().nativeElement, HOURS_LABEL_24_P2, false, 38);\n this._fillDial(this._clipedLabel().nativeElement, HOURS_LABEL_24_P1, true);\n this._fillDial(this._clipedLabel().nativeElement, HOURS_LABEL_24_P2, false, 38);\n }\n break;\n case 'minutes':\n this._fillDial(this._dial().nativeElement, MINUTES_LABEL, true);\n this._fillDial(this._clipedLabel().nativeElement, MINUTES_LABEL, true);\n break;\n default:\n this._fillDial(this._dial().nativeElement, HOURS_LABEL, true);\n this._fillDial(this._clipedLabel().nativeElement, HOURS_LABEL, true);\n }\n }\n\n private _moveByTouchClick(event: MouseTouchEvent, dial: HTMLElement, inset: number = 2) {\n const rect = dial.getBoundingClientRect();\n // relative to the center of the clock\n const x = event.clientX - rect.left - this._radius;\n const y = event.clientY - rect.top - this._radius;\n\n // Calc angle in degrees\n let angle = Math.atan2(y, x) * (180 / Math.PI);\n if (angle < 0) {\n angle += 360; //make sure the angle is in the range [0, 360]\n }\n \n // Calc new position for the object (using radius as reference)\n let radius = this._radius - (this._labelSize / 2) - inset;\n\n//--------------------------------------------------------------------------------------------------------------//\n // logic when format is 24h and two dial exist\n const distanceFromCenter = Math.sqrt(x * x + y * y);\n const MAX_RAD = radius - 20;\n let selectorInset = 0;\n \n if (distanceFromCenter < MAX_RAD && this.selected() === 'hours' && this.format() === '24h') {\n radius -= 36;\n this._currentDial.set(2);\n selectorInset = 36;\n } else {\n this._currentDial.set(1);\n selectorInset = 0;\n }\n \n//----------------------------------------------------------------------------------------------------------------//\n\n const moveX = this._radius + radius * Math.cos(angle * (Math.PI / 180));\n const moveY = this._radius + radius * Math.sin(angle * (Math.PI / 180));\n // Call the provided functions with the calculated values\n this._moveTrack(moveX, moveY);\n this._moveSelector(angle, selectorInset);\n this._currentDegree.set(angle);\n\n //update time\n const snapDegrees = this.selected() === 'hours' ? snapAngle(angle, 12) : snapAngle(angle, 60);\n const currentDate = this.currentTime();\n const date = currentDate ? new Date(currentDate) : new Date();\n \n if(this.selected() === 'hours') {\n let hours = this.format() === '24h' ? angleToHours24(snapDegrees, this._currentDial()) : angleToHours(snapDegrees);\n if(this.format() === '24h') {\n this.period.set(hours < 12 ? 'AM' : 'PM');\n }\n if (this.format() !== '24h' && this.period() === 'PM') {\n hours = hours < 12 ? hours + 12 : hours; \n }\n if(this.period() === 'AM' && hours >= 12 && this.format() === '12h') {\n hours = hours - 12;\n }\n date.setHours(hours);\n } else {\n date.setMinutes(angleToMinutes(snapDegrees));\n }\n \n this.currentTime.set(date);\n }\n\n private _moveByAngle(angle: number, inset: number = 2) {\n // Ensure angle is within 0-360 range\n angle = angle % 360;\n if (angle < 0) {\n angle += 360;\n }\n // Calc new position for the object (using radius as reference)\n let radius = this._radius - (this._labelSize / 2) - inset;\n\n // logic when format is 24h and two dial exist\n let selectorInset = 0;\n if (this.selected() === 'hours' && this.format() === '24h' && this._currentDial() === 2) {\n radius -= 36;\n selectorInset = 36;\n }\n\n const moveX = this._radius + radius * Math.cos(angle * (Math.PI / 180));\n const moveY = this._radius + radius * Math.sin(angle * (Math.PI / 180));\n\n // Call the provided functions with the calculated values\n this._moveTrack(moveX, moveY);\n this._moveSelector(angle, selectorInset);\n }\n\n private _moveTrack(x: number, y: number) {\n this._renderer.setStyle(this._clipedLabel().nativeElement, 'clip-path', `circle(24px at ${x}px ${y}px)`);\n }\n\n private _moveSelector(degrees: number, inset: number = 0) {\n this._renderer.setStyle(this._dialSelector().nativeElement, 'width', 104 - inset + 'px');\n this._renderer.setStyle(this._dialSelector().nativeElement, 'transform', `rotate(${degrees}deg)`);\n }\n\n private async _rotateAnimation(currentDegree: number, degree: number, animationTime: number, inset: number = 2): Promise<void> {\n return new Promise<void>((resolve) => {\n // Calculate the shortest angle difference between the current and target degrees.\n let angleDiff = degree - currentDegree;\n\n // Adjust the angle difference to be within the range of -180 to 180 degrees.\n if (angleDiff > 180) {\n angleDiff -= 360;\n } else if (angleDiff < -180) {\n angleDiff += 360;\n }\n\n // Store the start time of the animation.\n let startTime: number | null = null;\n\n const animate = (timestamp: number) => {\n // Initialize the start time if it hasn't been set yet.\n if (!startTime) startTime = timestamp;\n\n // Calculate the progress of the animation (0 to 1).\n let progress = Math.min((timestamp - startTime) / animationTime, 1);\n\n // Apply a cubic Bezier easing function to the progress. This makes the animation smoother.\n const easedProgress = cubicBezier(0.05, 0.7, 0.1, 1.0, progress);\n\n // Calculate the current angle based on the eased progress.\n const currentAngle = currentDegree + angleDiff * easedProgress;\n\n // Update the position of the dial and selector based on the current angle.\n this._moveByAngle(currentAngle, inset);\n\n // Continue the animation if it's not finished.\n if (progress < 1) {\n requestAnimationFrame(animate);\n } else {\n resolve(); // Resolve the promise when the animation is complete.\n }\n };\n requestAnimationFrame(animate);\n });\n }\n}","import { ChangeDetectionStrategy, Component, computed, effect, ElementRef, input, model, ModelSignal, signal, untracked, viewChild, ViewEncapsulation } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport { MatRippleModule } from '@angular/material/core';\nimport { formatTimeValue, splitDate, validateTimeValue } from './utils';\nimport { FormsModule } from '@angular/forms';\n\n@Component({\n selector: 'rk-timepicker-input-label',\n imports: [NgClass, MatRippleModule, FormsModule],\n host: {\n 'class': 'rk-time-input-field',\n },\n template: `\n <div class=\"rk-time-input-label-container\">\n <div class=\"rk-time-selector-container\" matRipple [ngClass]=\"{'rk-time-selector-container-selected': selected() === 'hours'}\" (click)=\"selectedChange('hours')\">\n @if (!editable()) {\n {{value().hours.toString().padStart(2, '0')}}\n } @else {\n <input type=\"text\" maxlength=\"2\" #inputH [value]=\"hours()\" (focus)=\"selectedChange('hours')\" (input)=\"onHoursInput($event)\" (blur)=\"onHoursBlur()\" name=\"hours\">\n }\n </div>\n @if (editable()) {\n <span class=\"rk-time-input-support-label\">{{inputSupportLabels()[0]}}</span>\n }\n </div>\n <div class=\"rk-time-divider\">:</div>\n <div class=\"rk-time-input-label-container\">\n <div class=\"rk-time-selector-container\" matRipple [ngClass]=\"{'rk-time-selector-container-selected': selected() === 'minutes'}\" (click)=\"selectedChange('minutes')\">\n @if (!editable()) {\n {{value().minutes.toString().padStart(2, '0')}}\n } @else {\n <input type=\"text\" maxlength=\"2\" #inputM [value]=\"minutes()\" (focus)=\"selectedChange('minutes')\" (input)=\"onMinutesInput($event)\" (blur)=\"onMinutesBlur()\" name=\"minutes\">\n }\n </div>\n @if (editable()) {\n <span class=\"rk-time-input-support-label\">{{inputSupportLabels()[1]}}</span>\n }\n </div>\n @if (format() === '12h') {\n <div class=\"rk-period-selector-container\">\n <div class=\"rk-period-selector\" matRipple [ngClass]=\"{'rk-period-selector-selected': period() === 'AM'}\" (click)=\"periodSelector('AM')\">AM</div>\n <div class=\"rk-period-selector\" matRipple [ngClass]=\"{'rk-period-selector-selected': period() === 'PM'}\" (click)=\"periodSelector('PM')\">PM</div>\n </div>\n }\n `,\n styles: ``,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class RkTimepickerInputLabel {\n currentTime: ModelSignal<Date | null> = model.required<Date | null>({alias: 'time'});\n selected = model('hours');\n period = model('AM');\n format = model('12h');\n editable = model(false);\n\n hours = signal<string>('');\n minutes = signal<string>('');\n\n inputSupportLabels = input<string[]>(['Hour', 'Minute'], {alias: 'inputLabels'});\n inputHours = viewChild<ElementRef<HTMLInputElement>>('inputH');\n inputMinutes = viewChild<ElementRef<HTMLInputElement>>('inputM');\n\n readonly value = computed(() => {\n const date = this.currentTime();\n const format = this.format();\n if (date) {\n const { hours, minutes } = splitDate(date);\n if (format === '12h') {\n return { hours: hours > 12 ? hours - 12 : hours === 0 ? 12 : hours, minutes };\n }\n return { hours, minutes };\n }\n return { hours: 0, minutes: 0 };\n });\n\n constructor() {\n effect(() => {\n const editable = this.editable();\n const selected = this.selected();\n if (editable) {\n if (selected=== 'hours') {\n this.inputHours()?.nativeElement.focus();\n } else if (selected === 'minutes') {\n this.inputMinutes()?.nativeElement.focus();\n }\n }\n });\n\n effect(() => {\n const value = this.value();\n untracked(() => {\n this.onHoursInput(value.hours.toString().padStart(2, '0'));\n this.onMinutesInput(value.minutes.toString().padStart(2, '0'));\n })\n })\n }\n\n onHoursInput(event: Event|string): void {\n const input = this.inputHours()?.nativeElement;\n const value = typeof event === 'string' ? event : (<HTMLInputElement>event.target)?.value;\n const max = this.format() === '24h' ? 23 : 12;\n const validatedValue = validateTimeValue(value, max);\n\n if (input &&input.value !== validatedValue) {\n input.value = validatedValue;\n }\n this.hours.set(validatedValue);\n\n }\n \n onMinutesInput(event: Event|string): void {\n const input = this.inputMinutes()?.nativeElement;\n const value = typeof event === 'string' ? event : (<HTMLInputElement>event.target)?.value;\n const validatedValue = validateTimeValue(value, 59);\n\n if (input &&input.value !== validatedValue) {\n input.value = validatedValue;\n }\n\n this.minutes.set(validatedValue);\n }\n\n onHoursBlur(): void {\n const defaultHour = this.format() === '24h' ? '00' : '01';\n const formattedValue = formatTimeValue(this.hours(), defaultHour);\n this.hours.set(formattedValue);\n this.updateModel();\n }\n\n onMinutesBlur(): void {\n const formattedValue = formatTimeValue(this.minutes(), '00');\n this.minutes.set(formattedValue);\n this.updateModel();\n }\n\n updateModel() {\n const tempDate = this.currentTime();\n if(tempDate) {\n const newDate = new Date(tempDate);\n let hoursN = Number(this.hours());\n const minutesN = Number(this.minutes());\n if (this.format() === '12h' && this.period() === 'PM') {\n hoursN = hoursN < 12 ? hoursN + 12 : hoursN;\n }\n newDate.setHours(hoursN);\n newDate.setMinutes(minutesN);\n this.currentTime.set(newDate);\n }\n }\n\n selectedChange(selected: string) {\n if (this.selected() === selected) {\n return;\n }\n this.selected.set(selected);\n }\n\n periodSelector(period: string) {\n if (this.period() === period) {\n return;\n }\n this.period.set(period);\n }\n}","import { Component, ChangeDetectionStrategy, ViewEncapsulation, model, input, computed, effect, signal, output, afterRender, InputSignal, viewChild, TemplateRef, OutputEmitterRef, inject, untracked, Signal } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { Dialog, DialogModule, DialogRef } from '@angular/cdk/dialog';\nimport { RkTimepickerDial } from './timepicker-dial';\nimport { RkTimepickerInputLabel } from './timepicker-input-label';\nimport { RkTimepickerInput } from './timepicker-input';\n\n@Component({\n selector: 'rk-timepicker',\n exportAs: 'rkTimepicker',\n imports: [RkTimepickerInputLabel, NgClass, DialogModule, RkTimepickerDial, MatButton, MatIconButton, MatIcon],\n host: {\n '[class.rk-timepicker-landscape]': 'isLandscape()',\n '[class.rk-timepicker-editable]': 'editable()',\n '(keydown)': '_handleKeydown($event)',\n },\n template: `\n <ng-template #panelTemplate>\n <div class=\"rk-timepicker rk-timepicker-panel\">\n <div class=\"rk-timepicker-container\" [ngClass]=\"{ 'rk-timepicker-container-hide': !load() }\">\n <span class=\"rk-timepicker-headline\">{{ headline() }}</span>\n <rk-timepicker-input-label [(time)]=\"currentTime\" [inputLabels]=\"_inputSupportLabels()\" [(editable)]=\"editable\" [(format)]=\"format\" [(period)]=\"period\" [(selected)]=\"selected\"></rk-timepicker-input-label>\n <rk-timepicker-dial [ngClass]=\"{ 'rk-dial-closed': editable(), 'rk-dial-animated': animated()}\" [(time)]=\"currentTime\" [(format)]=\"format\" [(period)]=\"period\" [(selected)]=\"selected\"></rk-timepicker-dial>\n <div class=\"rk-timepicker-footer\">\n <button class=\"rk-timepicker-mode-button\" (click)=\"changeMode()\" mat-icon-button>\n @if (editable()) {\n <mat-icon>schedule</mat-icon>\n } @else {\n <mat-icon>keyboard</mat-icon> \n }\n </button>\n <div class=\"rk-timepicker-actions\">\n <button mat-button (click)=\"onCancel()\">{{_actions()[0]}}</button>\n <button mat-button (click)=\"onConfirm()\">{{_actions()[1]}}</button>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n `,\n styles: ``,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class RkTimepicker {\n selected = model<string>('hours');\n format = model('12h');\n period = model<string>('AM');\n editable = model(false);\n orientation = model<string>('portrait');\n \n _inputSupportLabels = input<string[]>(['Hour', 'Minute'], {alias: 'inputLabels'});\n _headline = input<string[]>(['Enter time', 'Select time'], {alias: 'headline'});\n _actions = input<string[]>(['Cancel', 'OK'], {alias: 'actions'});\n /** Whether the timepicker is currently disabled. */\n readonly disabled: Signal<boolean> = computed(() => !!this._input()?.disabled());\n \n readonly defaultTime: InputSignal<Date | null> = input<Date | null>(null,{alias: 'time'});\n readonly load = signal(false);\n \n readonly isLandscape = computed(() => {\n return this.orientation() === 'landscape';\n });\n \n readonly headline = computed(() => {\n const editable = this.editable();\n const labels = this._headline();\n return editable ? labels[0] : labels[1];\n });\n \n \n protected _panelTemplate = viewChild.required<TemplateRef<unknown>>('panelTemplate');\n private _dialogRef = signal<DialogRef<Date | null> | null>(null);\n \n private _input = signal<RkTimepickerInput | null>(null);\n private _isOpen = signal(false);\n\n currentTime = signal<Date | null>(null);\n animated = signal(false);\n \n /** Emits when the timepicker is opened. */\n readonly opened: OutputEmitterRef<void> = output();\n /** Emits when the timepicker is closed. */\n readonly closed: OutputEmitterRef<void> = output();\n\n readonly selectedTime: OutputEmitterRef<Date> = output();\n \n private _dialog = inject(Dialog);\n\n constructor() {\n effect(() => {\n const value = this.defaultTime();\n if(!value) {\n this.currentTime.set(new Date());\n } else {\n this.currentTime.set(value);\n }\n });\n\n effect(() => {\n const editable = this.editable();\n untracked(() => {\n this.animated.set(true);\n })\n })\n\n afterRender(() => {\n this.load.set(true);\n });\n }\n\n /** Opens the timepicker. */\n open(): void {\n const input = this._input();\n\n if (!input) {\n return;\n }\n\n if (this._isOpen()) {\n return;\n }\n\n this.currentTime.set(input.value());\n this.animated.set(false);\n this._isOpen.set(true);\n this.opened.emit();\n \n const dialogRef = this._dialog.open<Date | null>(this._panelTemplate(), {\n width: '328px',\n });\n\n this._dialogRef.set(dialogRef);\n\n dialogRef.closed.subscribe(result => {\n if(result) {\n this._input()?.value.set(result);\n this.selectedTime.emit(result);\n input.simulateEnter();\n }\n this._isOpen.set(false);\n this.closed.emit();\n input.focus();\n });\n }\n\n /** Registers an input with the timepicker. */\n registerInput(input: RkTimepickerInput): void {\n const currentInput = this._input();\n\n if (currentInput && input !== currentInput ) {\n console.warn('RkTimepicker can only be registered with one input at a time');\n }\n\n this._input.set(input);\n }\n\n private _handleKeydown(event: KeyboardEvent): void {\n const keyCode = event.key;\n if (keyCode === 'Enter') {\n event.preventDefault();\n this.onConfirm();\n } else if (keyCode === 'Escape') {\n event.preventDefault();\n this.onCancel();\n }\n }\n\n\n changeMode() {\n this.editable.set(!this.editable());\n }\n\n \n onConfirm() {\n this._dialogRef()?.close(this.currentTime());\n }\n\n onCancel() {\n this._dialogRef()?.close();\n } \n}\n","import { booleanAttribute, computed, Directive, effect, ElementRef, inject, input, InputSignal, InputSignalWithTransform, model, ModelSignal, Renderer2, Signal, signal } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\nimport { MAT_INPUT_VALUE_ACCESSOR } from '@angular/material/input';\nimport { RkTimepicker } from './timepicker';\nimport { secondsToDate, timeToSecondsi18n as timeToSeconds } from './utils';\n\n@Directive({\n selector: 'input[rkTimepicker]',\n exportAs: 'rkTimepickerInput',\n host: {\n 'class': 'rk-timepicker-input',\n 'type': 'text',\n '(input)': '_handleInput($event.target.value)',\n '(blur)': '_handleBlur()',\n '(keydown)': '_handleKeydown($event)',\n '[disabled]': 'disabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: RkTimepickerInput,\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: RkTimepickerInput,\n multi: true,\n },\n {\n provide: MAT_INPUT_VALUE_ACCESSOR,\n useExisting: RkTimepickerInput,\n },\n ]\n})\nexport class RkTimepickerInput implements ControlValueAccessor, Validator {\n private _elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private _renderer = inject(Renderer2);\n \n /** Necessary for ControlValueAccessor implementation */\n private _onChange: ((value: any) => void) | undefined;\n private _onTouched: (() => void) | undefined;\n private _accessorDisabled = signal(false);\n private _validatorOnChange: (() => void) | undefined;\n\n /** Current value of the input. */\n readonly value: ModelSignal<Date | null> = model<Date | null>(null);\n private _tempDateSafe = signal<Date | null>(null);\n \n /** Timepicker that the input is associated with. */\n readonly timepicker: InputSignal<RkTimepicker> = input.required<RkTimepicker>({\n alias: 'rkTimepicker',\n });\n /** Whether the input is disabled. */\n readonly disabled: Signal<boolean> = computed(\n () => this.disabledInput() || this._accessorDisabled(),\n );\n /**\n * Whether the input should be disabled through the template.\n */\n readonly disabledInput: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n alias: 'disabled',\n });\n \n constructor() {\n this._registerTimepicker();\n }\n\n private _updateModelValue() {\n const value = this.value();\n if(!value) {\n this._validatorOnChange?.();\n return\n }\n this._onChange?.(value);\n }\n \n private _validateTimeOrNull(value: string | Date | null) {\n if (value === null || value instanceof Date) {\n this.value.set(value);\n return;\n }\n const validTime = timeToSeconds(value);\n const time = validTime ? secondsToDate(validTime) : null;\n if(!time) {\n this.value.set(null);\n } else {\n const newDate = new Date(this._tempDateSafe() ?? new Date());\n newDate.setHours(time.getHours(), time.getMinutes());\n this.value.set(newDate);\n }\n }\n \n private _updateInputValue() {\n if (this.value() !== null) {\n this._renderer.setProperty(this._elementRef.nativeElement, 'value', this.value()?.toLocaleTimeString([],{ hour: \"2-digit\", minute: \"2-digit\" }));\n }\n }\n\n /** Handles the `input` event. */\n protected _handleInput(value: string) {\n this._validateTimeOrNull(value);\n this._validatorOnChange?.();\n }\n\n /** Handles the `keydown` event. */\n protected _handleKeydown(event: KeyboardEvent) {\n if (['Enter', 'Escape', 'Tab'].includes(event.code)) {\n this._updateModelValue();\n this._updateInputValue();\n }\n }\n\n simulateEnter() {\n this._handleKeydown({ code: 'Enter' } as KeyboardEvent);\n }\n\n /** Handles the `blur` event. */\n protected _handleBlur() {\n this._onTouched?.();\n this._updateModelValue();\n this._updateInputValue();\n }\n\n /** Focuses the input. */\n focus(): void {\n this._elementRef.nativeElement.focus();\n }\n\n /** Implemented as a part of ControlValueAccessor. */\n writeValue(value: any): void {\n if(value instanceof Date) {\n this._tempDateSafe.set(value);\n this.value.set(value);\n this._updateInputValue();\n } else {\n this._validateTimeOrNull(value);\n this._updateInputValue();\n }\n }\n /** Implemented as a part of ControlValueAccessor. */\n registerOnChange(fn: (value: any) => void): void {\n this._onChange = fn;\n }\n /** Implemented as a part of ControlValueAccessor. */\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n /** Implemented as a part of ControlValueAccessor. */\n setDisabledState(isDisabled: any): void {\n this._accessorDisabled.set(isDisabled);\n }\n\n // implemented as a part of Validator\n validate(control: AbstractControl): ValidationErrors | null {\n if (control.value == null || this.value() == null) {\n return { invalidTimeFormat: true };\n }\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this._validatorOnChange = fn;\n }\n\n /** Sets up the logic that registers the input with the timepicker. */\n private _registerTimepicker(): void {\n effect(() => {\n const timepicker = this.timepicker();\n timepicker.registerInput(this);\n timepicker.closed.subscribe(() => this._onTouched?.());\n });\n }\n}\n","import { booleanAttribute, Component, computed, input, InputSignal, InputSignalWithTransform } from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { RkTimepicker } from './timepicker';\n\n@Component({\n selector: 'rk-timepicker-toggle',\n imports: [MatIconButton],\n template: `\n <button mat-icon-button type=\"button\" [disabled]=\"_isDisabled()\" (click)=\"_open($event)\">\n <ng-content select=\"[rkTimepickerToggleIcon]\">\n <svg\n class=\"rk-timepicker-toggle-default-icon\"\n height=\"24px\"\n width=\"24px\"\n viewBox=\"0 -960 960 960\"\n fill=\"currentColor\"\n focusable=\"false\"\n aria-hidden=\"true\">\n <path d=\"m612-292 56-56-148-148v-184h-80v216l172 172ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-400Zm0 320q133 0 226.5-93.5T800-480q0-133-93.5-226.5T480-800q-133 0-226.5 93.5T160-480q0 133 93.5 226.5T480-160Z\"/>\n </svg>\n </ng-content>\n </button>\n `,\n styles: ``\n})\nexport class RkTimepickerToggle {\n readonly timepicker: InputSignal<RkTimepicker> = input.required<RkTimepicker>({\n alias: 'for',\n });\n\n /** Whether the toggle button is disabled. */\n readonly disabled: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n alias: 'disabled',\n });\n\n protected _isDisabled = computed(() => {\n const timepicker = this.timepicker();\n return this.disabled() || timepicker.disabled();\n });\n\n /** Opens the connected timepicker. */\n protected _open(event: Event): void {\n if (this.timepicker() && !this._isDisabled()) {\n this.timepicker().open();\n event.stopPropagation();\n }\n }\n}","import { Component, ChangeDetectionStrategy, ViewEncapsulation, model, input, computed, effect, signal, afterRender } from '@angular/core';\nimport { NgClass } from '@angular/common';\nimport { MatButton, MatIconButton } from '@angular/material/button';\nimport { MatIcon } from '@angular/material/icon';\nimport { RkTimepickerDial } from './timepicker-dial';\nimport { RkTimepickerInputLabel } from './timepicker-input-label';\n\n@Component({\n selector: 'rk-clock',\n exportAs: 'rkClock',\n imports: [RkTimepickerInputLabel, NgClass, RkTimepickerDial, MatButton, MatIconButton, MatIcon],\n host: {\n 'class': 'rk-timepicker',\n '[class.rk-timepicker-landscape]': 'isLandscape()',\n '[class.rk-timepicker-editable]': 'editable()',\n },\n template: `\n <div class=\"rk-timepicker-container\" [ngClass]=\"{ 'rk-timepicker-container-hide': !load() }\">\n <span class=\"rk-timepicker-headline\">{{ headline() }}</span>\n <rk-timepicker-input-label [(time)]=\"value\" [inputLabels]=\"inputSupportLabels()\" [(editable)]=\"editable\" [(format)]=\"format\" [(period)]=\"period\" [(selected)]=\"selected\"></rk-timepicker-input-label>\n <rk-timepicker-dial [ngClass]=\"{ 'rk-dial-closed': editable()}\" [(time)]=\"value\" [(format)]=\"format\" [(period)]=\"period\" [(selected)]=\"selected\"></rk-timepicker-dial>\n <div class=\"rk-timepicker-footer\">\n <button class=\"rk-timepicker-mode-button\" (click)=\"changeMode()\" mat-icon-button>\n @if (editable()) {\n <mat-icon>schedule</mat-icon>\n } @else {\n <mat-icon>keyboard</mat-icon> \n }\n </button>\n </div>\n </div>\n `,\n styles: ``,\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n})\nexport class RkClock {\n value= model<Date | null>(null, {alias: 'time'});\n selected = model<string>('hours');\n format = model('24h');\n period = model<string>('AM');\n editable = model(false);\n orientation = model<string>('portrait');\n inputSupportLabels = input<string[]>(['Hour', 'Minute'], {alias: 'inputLabels'});\n _headline = input<string[]>(['Enter time', 'Select time'], {alias: 'headline'});\n\n readonly load = signal(false);\n\n readonly isLandscape = computed(() => {\n return this.orientation() === 'landscape';\n });\n\n readonly headline = computed(() => {\n const editable = this.editable();\n const labels = this._headline();\n return editable ? labels[0] : labels[1];\n });\n\n constructor() {\n effect(() => {\n const value = this.value();\n if(!value) {\n this.value.set(new Date());\n };\n });\n\n afterRender(() => {\n this.load.set(true);\n });\n }\n\n changeMode() {\n this.editable.set(!this.editable());\n }\n}\n","/*\n * Public API Surface of timepicker\n */\nexport * from './lib/timepicker';\nexport * from './lib/timepicker-input';\nexport * from './lib/timepicker-toggle';\nexport * from './lib/clock';\nexport * from './lib/utils/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["timeToSeconds"],"mappings":"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"}
@@ -1,15 +1,3 @@
1
- /**
2
- * Converts a time string or number to the number of seconds since midnight.
3
- * Supports various formats including:
4
- * - Integers (e.g., "10", "1030", 10, 1030) representing hours in 24-hour format (up to 2359).
5
- * - Space-separated numbers (e.g., "10 30") representing HH MM.
6
- * - Colon-separated numbers (e.g., "10:30") representing HH:MM.
7
- * - Colon-separated numbers with AM/PM (e.g., "10:30am", "10:30 am").
8
- *
9
- * @param input The input to convert (can be a string or a number).
10
- * @returns The number of seconds since midnight, or null if the input is invalid.
11
- */
12
- export declare function timeToSeconds(input: string | number): number | null;
13
1
  export declare function secondsToDate(seconds: number): Date;
14
2
  export declare function detectTimeFormat(date: Date): string;
15
3
  export declare function splitDate(date: Date): SimpleTime;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@redkhat/timepicker",
3
- "version": "0.0.1",
3
+ "version": "1.0.0",
4
4
  "keywords": [
5
5
  "angular",
6
6
  "material",