@nuralyui/timepicker 0.1.5 → 0.1.7

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.
@@ -1 +1 @@
1
- {"version":3,"file":"formatting.controller.d.ts","sourceRoot":"","sources":["../../../../src/components/timepicker/controllers/formatting.controller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AASjG;;GAEG;AACH,qBAAa,8BAA+B,YAAW,wBAAwB;IACjE,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,cAAc;IAExC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;IAKzC;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;IAKvC;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAKhD;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAU1B;;OAEG;IACH,cAAc,IAAI,MAAM;IAUxB;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,MAAU,GAAG,MAAM;IAI9D;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAgBlC;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAItC;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAItC;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU;IAIpC;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG;QAChC,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,UAAU,CAAC;KACrB;IAWD;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG;QAClC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,UAAU,CAAC;KACrB,GAAG,IAAI;IAgBR;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAWvC;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAW7B;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI;IAU9F;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;CAgB5C"}
1
+ {"version":3,"file":"formatting.controller.d.ts","sourceRoot":"","sources":["../../../../../src/components/timepicker/controllers/formatting.controller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AASjG;;GAEG;AACH,qBAAa,8BAA+B,YAAW,wBAAwB;IACjE,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,cAAc;IAExC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;IAKzC;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;IAKvC;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAKhD;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAU1B;;OAEG;IACH,cAAc,IAAI,MAAM;IAUxB;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,MAAU,GAAG,MAAM;IAI9D;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAgBlC;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAItC;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAItC;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU;IAIpC;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG;QAChC,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,UAAU,CAAC;KACrB;IAWD;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG;QAClC,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,UAAU,CAAC;KACrB,GAAG,IAAI;IAgBR;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAWvC;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAW7B;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI;IAU9F;;OAEG;IACH,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;CAgB5C"}
@@ -1 +1 @@
1
- {"version":3,"file":"formatting.controller.js","sourceRoot":"","sources":["../../../../src/components/timepicker/controllers/formatting.controller.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { TimeValue, TimeFormat, TimePeriod } from '../timepicker.types.js';\nimport { TimePickerHost, TimeFormattingController } from '../interfaces/timepicker.interface.js';\nimport { TimeUtils } from '../utils/time.utils.js';\nimport { \n DEFAULT_TIME_FORMAT, \n DEFAULT_TIME_FORMAT_WITH_SECONDS,\n DEFAULT_12H_TIME_FORMAT,\n DEFAULT_12H_TIME_FORMAT_WITH_SECONDS\n} from '../timepicker.constants.js';\n\n/**\n * Controller for handling time formatting logic\n */\nexport class TimePickerFormattingController implements TimeFormattingController {\n constructor(private host: TimePickerHost) {}\n\n /**\n * Format time for display (user-facing format)\n */\n formatForDisplay(time: TimeValue): string {\n const config = this.host.getConfig();\n return TimeUtils.formatTimeValue(time, config.format, config.showSeconds);\n }\n\n /**\n * Format time for input field value\n */\n formatForInput(time: TimeValue): string {\n // Input format is typically the same as display format\n return this.formatForDisplay(time);\n }\n\n /**\n * Parse input value to TimeValue\n */\n parseInputValue(value: string): TimeValue | null {\n const config = this.host.getConfig();\n return TimeUtils.parseTimeString(value, config.format);\n }\n\n /**\n * Get time format pattern for the current configuration\n */\n getFormatPattern(): string {\n const config = this.host.getConfig();\n \n if (config.format === TimeFormat.TwelveHour) {\n return config.showSeconds ? DEFAULT_12H_TIME_FORMAT_WITH_SECONDS : DEFAULT_12H_TIME_FORMAT;\n } else {\n return config.showSeconds ? DEFAULT_TIME_FORMAT_WITH_SECONDS : DEFAULT_TIME_FORMAT;\n }\n }\n\n /**\n * Get placeholder text for input field\n */\n getPlaceholder(): string {\n const config = this.host.getConfig();\n \n if (config.format === TimeFormat.TwelveHour) {\n return config.showSeconds ? 'hh:mm:ss AM/PM' : 'hh:mm AM/PM';\n } else {\n return config.showSeconds ? 'HH:mm:ss' : 'HH:mm';\n }\n }\n\n /**\n * Format time component with leading zeros\n */\n formatTimeComponent(value: number, length: number = 2): string {\n return value.toString().padStart(length, '0');\n }\n\n /**\n * Format hours based on current format\n */\n formatHours(hours: number): string {\n const config = this.host.getConfig();\n \n if (config.format === TimeFormat.TwelveHour) {\n let displayHours = hours;\n if (displayHours === 0) {\n displayHours = 12;\n } else if (displayHours > 12) {\n displayHours -= 12;\n }\n return displayHours.toString();\n } else {\n return this.formatTimeComponent(hours);\n }\n }\n\n /**\n * Format minutes with leading zero\n */\n formatMinutes(minutes: number): string {\n return this.formatTimeComponent(minutes);\n }\n\n /**\n * Format seconds with leading zero\n */\n formatSeconds(seconds: number): string {\n return this.formatTimeComponent(seconds);\n }\n\n /**\n * Get period (AM/PM) for 12-hour format\n */\n getPeriod(hours: number): TimePeriod {\n return hours >= 12 ? TimePeriod.PM : TimePeriod.AM;\n }\n\n /**\n * Format time parts separately\n */\n formatTimeParts(time: TimeValue): {\n hours: string;\n minutes: string;\n seconds: string;\n period?: TimePeriod;\n } {\n const config = this.host.getConfig();\n \n return {\n hours: this.formatHours(time.hours),\n minutes: this.formatMinutes(time.minutes),\n seconds: this.formatSeconds(time.seconds),\n period: config.format === TimeFormat.TwelveHour ? this.getPeriod(time.hours) : undefined,\n };\n }\n\n /**\n * Parse time parts from string\n */\n parseTimeParts(timeString: string): {\n hours?: number;\n minutes?: number;\n seconds?: number;\n period?: TimePeriod;\n } | null {\n const config = this.host.getConfig();\n const parsedTime = TimeUtils.parseTimeString(timeString, config.format);\n \n if (!parsedTime) {\n return null;\n }\n\n return {\n hours: parsedTime.hours,\n minutes: parsedTime.minutes,\n seconds: parsedTime.seconds,\n period: config.format === TimeFormat.TwelveHour ? this.getPeriod(parsedTime.hours) : undefined,\n };\n }\n\n /**\n * Get time separator character\n */\n getTimeSeparator(): string {\n return ':';\n }\n\n /**\n * Check if format is valid\n */\n isValidFormat(_format: string): boolean {\n const testTime = TimeUtils.createTimeValue(12, 30, 45);\n try {\n const formatted = this.formatForDisplay(testTime);\n const parsed = this.parseInputValue(formatted);\n return parsed !== null;\n } catch {\n return false;\n }\n }\n\n /**\n * Get format examples\n */\n getFormatExamples(): string[] {\n const config = this.host.getConfig();\n const exampleTimes = [\n TimeUtils.createTimeValue(9, 15, 0),\n TimeUtils.createTimeValue(14, 30, 45),\n TimeUtils.createTimeValue(23, 59, 59),\n ];\n\n return exampleTimes.map(time => TimeUtils.formatTimeValue(time, config.format, config.showSeconds));\n }\n\n /**\n * Convert between formats\n */\n convertFormat(timeString: string, fromFormat: TimeFormat, toFormat: TimeFormat): string | null {\n const parsedTime = TimeUtils.parseTimeString(timeString, fromFormat);\n if (!parsedTime) {\n return null;\n }\n\n const config = this.host.getConfig();\n return TimeUtils.formatTimeValue(parsedTime, toFormat, config.showSeconds);\n }\n\n /**\n * Get human-readable time description\n */\n getTimeDescription(time: TimeValue): string {\n const config = this.host.getConfig();\n const formatted = TimeUtils.formatTimeValue(time, config.format, config.showSeconds);\n \n // Add contextual information\n const now = TimeUtils.getCurrentTime();\n const comparison = TimeUtils.compareTime(time, now);\n \n if (comparison === 0) {\n return `${formatted} (now)`;\n } else if (comparison > 0) {\n return `${formatted} (future)`;\n } else {\n return `${formatted} (past)`;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"formatting.controller.js","sourceRoot":"","sources":["../../../../../src/components/timepicker/controllers/formatting.controller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAa,UAAU,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAE3E,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EACL,mBAAmB,EACnB,gCAAgC,EAChC,uBAAuB,EACvB,oCAAoC,EACrC,MAAM,4BAA4B,CAAC;AAEpC;;GAEG;AACH,MAAM,OAAO,8BAA8B;IACzC,YAAoB,IAAoB;QAApB,SAAI,GAAJ,IAAI,CAAgB;IAAG,CAAC;IAE5C;;OAEG;IACH,gBAAgB,CAAC,IAAe;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACrC,OAAO,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAC5E,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,IAAe;QAC5B,uDAAuD;QACvD,OAAO,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,KAAa;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACrC,OAAO,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAErC,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,UAAU,EAAE;YAC3C,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,uBAAuB,CAAC;SAC5F;aAAM;YACL,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,mBAAmB,CAAC;SACpF;IACH,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAErC,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,UAAU,EAAE;YAC3C,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC;SAC9D;aAAM;YACL,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;SAClD;IACH,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,KAAa,EAAE,SAAiB,CAAC;QACnD,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,KAAa;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAErC,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,UAAU,EAAE;YAC3C,IAAI,YAAY,GAAG,KAAK,CAAC;YACzB,IAAI,YAAY,KAAK,CAAC,EAAE;gBACtB,YAAY,GAAG,EAAE,CAAC;aACnB;iBAAM,IAAI,YAAY,GAAG,EAAE,EAAE;gBAC5B,YAAY,IAAI,EAAE,CAAC;aACpB;YACD,OAAO,YAAY,CAAC,QAAQ,EAAE,CAAC;SAChC;aAAM;YACL,OAAO,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;SACxC;IACH,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,OAAe;QAC3B,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,OAAe;QAC3B,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,KAAa;QACrB,OAAO,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,IAAe;QAM7B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QAErC,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;YACnC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;YACzC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;YACzC,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;SACzF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,UAAkB;QAM/B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,SAAS,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAExE,IAAI,CAAC,UAAU,EAAE;YACf,OAAO,IAAI,CAAC;SACb;QAED,OAAO;YACL,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;SAC/F,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,OAAe;QAC3B,MAAM,QAAQ,GAAG,SAAS,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACvD,IAAI;YACF,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;YAC/C,OAAO,MAAM,KAAK,IAAI,CAAC;SACxB;QAAC,WAAM;YACN,OAAO,KAAK,CAAC;SACd;IACH,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACrC,MAAM,YAAY,GAAG;YACnB,SAAS,CAAC,eAAe,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACnC,SAAS,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;YACrC,SAAS,CAAC,eAAe,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;SACtC,CAAC;QAEF,OAAO,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;IACtG,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,UAAkB,EAAE,UAAsB,EAAE,QAAoB;QAC5E,MAAM,UAAU,GAAG,SAAS,CAAC,eAAe,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACrE,IAAI,CAAC,UAAU,EAAE;YACf,OAAO,IAAI,CAAC;SACb;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACrC,OAAO,SAAS,CAAC,eAAe,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAC7E,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,IAAe;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,SAAS,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAErF,6BAA6B;QAC7B,MAAM,GAAG,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAEpD,IAAI,UAAU,KAAK,CAAC,EAAE;YACpB,OAAO,GAAG,SAAS,QAAQ,CAAC;SAC7B;aAAM,IAAI,UAAU,GAAG,CAAC,EAAE;YACzB,OAAO,GAAG,SAAS,WAAW,CAAC;SAChC;aAAM;YACL,OAAO,GAAG,SAAS,SAAS,CAAC;SAC9B;IACH,CAAC;CACF","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { TimeValue, TimeFormat, TimePeriod } from '../timepicker.types.js';\nimport { TimePickerHost, TimeFormattingController } from '../interfaces/timepicker.interface.js';\nimport { TimeUtils } from '../utils/time.utils.js';\nimport { \n DEFAULT_TIME_FORMAT, \n DEFAULT_TIME_FORMAT_WITH_SECONDS,\n DEFAULT_12H_TIME_FORMAT,\n DEFAULT_12H_TIME_FORMAT_WITH_SECONDS\n} from '../timepicker.constants.js';\n\n/**\n * Controller for handling time formatting logic\n */\nexport class TimePickerFormattingController implements TimeFormattingController {\n constructor(private host: TimePickerHost) {}\n\n /**\n * Format time for display (user-facing format)\n */\n formatForDisplay(time: TimeValue): string {\n const config = this.host.getConfig();\n return TimeUtils.formatTimeValue(time, config.format, config.showSeconds);\n }\n\n /**\n * Format time for input field value\n */\n formatForInput(time: TimeValue): string {\n // Input format is typically the same as display format\n return this.formatForDisplay(time);\n }\n\n /**\n * Parse input value to TimeValue\n */\n parseInputValue(value: string): TimeValue | null {\n const config = this.host.getConfig();\n return TimeUtils.parseTimeString(value, config.format);\n }\n\n /**\n * Get time format pattern for the current configuration\n */\n getFormatPattern(): string {\n const config = this.host.getConfig();\n \n if (config.format === TimeFormat.TwelveHour) {\n return config.showSeconds ? DEFAULT_12H_TIME_FORMAT_WITH_SECONDS : DEFAULT_12H_TIME_FORMAT;\n } else {\n return config.showSeconds ? DEFAULT_TIME_FORMAT_WITH_SECONDS : DEFAULT_TIME_FORMAT;\n }\n }\n\n /**\n * Get placeholder text for input field\n */\n getPlaceholder(): string {\n const config = this.host.getConfig();\n \n if (config.format === TimeFormat.TwelveHour) {\n return config.showSeconds ? 'hh:mm:ss AM/PM' : 'hh:mm AM/PM';\n } else {\n return config.showSeconds ? 'HH:mm:ss' : 'HH:mm';\n }\n }\n\n /**\n * Format time component with leading zeros\n */\n formatTimeComponent(value: number, length: number = 2): string {\n return value.toString().padStart(length, '0');\n }\n\n /**\n * Format hours based on current format\n */\n formatHours(hours: number): string {\n const config = this.host.getConfig();\n \n if (config.format === TimeFormat.TwelveHour) {\n let displayHours = hours;\n if (displayHours === 0) {\n displayHours = 12;\n } else if (displayHours > 12) {\n displayHours -= 12;\n }\n return displayHours.toString();\n } else {\n return this.formatTimeComponent(hours);\n }\n }\n\n /**\n * Format minutes with leading zero\n */\n formatMinutes(minutes: number): string {\n return this.formatTimeComponent(minutes);\n }\n\n /**\n * Format seconds with leading zero\n */\n formatSeconds(seconds: number): string {\n return this.formatTimeComponent(seconds);\n }\n\n /**\n * Get period (AM/PM) for 12-hour format\n */\n getPeriod(hours: number): TimePeriod {\n return hours >= 12 ? TimePeriod.PM : TimePeriod.AM;\n }\n\n /**\n * Format time parts separately\n */\n formatTimeParts(time: TimeValue): {\n hours: string;\n minutes: string;\n seconds: string;\n period?: TimePeriod;\n } {\n const config = this.host.getConfig();\n \n return {\n hours: this.formatHours(time.hours),\n minutes: this.formatMinutes(time.minutes),\n seconds: this.formatSeconds(time.seconds),\n period: config.format === TimeFormat.TwelveHour ? this.getPeriod(time.hours) : undefined,\n };\n }\n\n /**\n * Parse time parts from string\n */\n parseTimeParts(timeString: string): {\n hours?: number;\n minutes?: number;\n seconds?: number;\n period?: TimePeriod;\n } | null {\n const config = this.host.getConfig();\n const parsedTime = TimeUtils.parseTimeString(timeString, config.format);\n \n if (!parsedTime) {\n return null;\n }\n\n return {\n hours: parsedTime.hours,\n minutes: parsedTime.minutes,\n seconds: parsedTime.seconds,\n period: config.format === TimeFormat.TwelveHour ? this.getPeriod(parsedTime.hours) : undefined,\n };\n }\n\n /**\n * Get time separator character\n */\n getTimeSeparator(): string {\n return ':';\n }\n\n /**\n * Check if format is valid\n */\n isValidFormat(_format: string): boolean {\n const testTime = TimeUtils.createTimeValue(12, 30, 45);\n try {\n const formatted = this.formatForDisplay(testTime);\n const parsed = this.parseInputValue(formatted);\n return parsed !== null;\n } catch {\n return false;\n }\n }\n\n /**\n * Get format examples\n */\n getFormatExamples(): string[] {\n const config = this.host.getConfig();\n const exampleTimes = [\n TimeUtils.createTimeValue(9, 15, 0),\n TimeUtils.createTimeValue(14, 30, 45),\n TimeUtils.createTimeValue(23, 59, 59),\n ];\n\n return exampleTimes.map(time => TimeUtils.formatTimeValue(time, config.format, config.showSeconds));\n }\n\n /**\n * Convert between formats\n */\n convertFormat(timeString: string, fromFormat: TimeFormat, toFormat: TimeFormat): string | null {\n const parsedTime = TimeUtils.parseTimeString(timeString, fromFormat);\n if (!parsedTime) {\n return null;\n }\n\n const config = this.host.getConfig();\n return TimeUtils.formatTimeValue(parsedTime, toFormat, config.showSeconds);\n }\n\n /**\n * Get human-readable time description\n */\n getTimeDescription(time: TimeValue): string {\n const config = this.host.getConfig();\n const formatted = TimeUtils.formatTimeValue(time, config.format, config.showSeconds);\n \n // Add contextual information\n const now = TimeUtils.getCurrentTime();\n const comparison = TimeUtils.compareTime(time, now);\n \n if (comparison === 0) {\n return `${formatted} (now)`;\n } else if (comparison > 0) {\n return `${formatted} (future)`;\n } else {\n return `${formatted} (past)`;\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/timepicker/controllers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/timepicker/controllers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/timepicker/controllers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nexport { TimePickerSelectionController } from './selection.controller.js';\nexport { TimePickerValidationController } from './validation.controller.js';\nexport { TimePickerFormattingController } from './formatting.controller.js';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/components/timepicker/controllers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAC5E,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nexport { TimePickerSelectionController } from './selection.controller.js';\nexport { TimePickerValidationController } from './validation.controller.js';\nexport { TimePickerFormattingController } from './formatting.controller.js';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"selection.controller.d.ts","sourceRoot":"","sources":["../../../../src/components/timepicker/controllers/selection.controller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAIhG;;GAEG;AACH,qBAAa,6BAA8B,YAAW,uBAAuB;IAG/D,OAAO,CAAC,IAAI;IAFxB,OAAO,CAAC,YAAY,CAA0B;gBAE1B,IAAI,EAAE,cAAc;IAExC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAejC;;OAEG;IACH,eAAe,IAAI,SAAS,GAAG,IAAI;IAInC;;OAEG;IACH,cAAc,IAAI,IAAI;IAUtB;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAQxC;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;IAI7C;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI;IAsB7C;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,EAAE,IAAI,GAAE,MAAU,GAAG,IAAI;IAwBjF;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,EAAE,IAAI,GAAE,MAAU,GAAG,IAAI;IAIjF;;OAEG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAY9C;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAQ1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAuB/B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAKxB;;OAEG;IACH,eAAe,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI;CAQ/C"}
1
+ {"version":3,"file":"selection.controller.d.ts","sourceRoot":"","sources":["../../../../../src/components/timepicker/controllers/selection.controller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAIhG;;GAEG;AACH,qBAAa,6BAA8B,YAAW,uBAAuB;IAG/D,OAAO,CAAC,IAAI;IAFxB,OAAO,CAAC,YAAY,CAA0B;gBAE1B,IAAI,EAAE,cAAc;IAExC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;IAejC;;OAEG;IACH,eAAe,IAAI,SAAS,GAAG,IAAI;IAInC;;OAEG;IACH,cAAc,IAAI,IAAI;IAUtB;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAQxC;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI;IAI7C;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI;IAsB7C;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,EAAE,IAAI,GAAE,MAAU,GAAG,IAAI;IAwBjF;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,EAAE,IAAI,GAAE,MAAU,GAAG,IAAI;IAIjF;;OAEG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAY9C;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAQ1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAuB/B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAKxB;;OAEG;IACH,eAAe,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI;CAQ/C"}
@@ -1 +1 @@
1
- {"version":3,"file":"selection.controller.js","sourceRoot":"","sources":["../../../../src/components/timepicker/controllers/selection.controller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D;;GAEG;AACH,MAAM,OAAO,6BAA6B;IAGxC,YAAoB,IAAoB;QAApB,SAAI,GAAJ,IAAI,CAAgB;QAFhC,iBAAY,GAAqB,IAAI,CAAC;IAEH,CAAC;IAE5C;;OAEG;IACH,UAAU,CAAC,IAAe;QACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;YACjC,OAAO;SACR;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACvC,IAAI,CAAC,YAAY,qBAAQ,IAAI,CAAE,CAAC;QAEhC,6BAA6B;QAC7B,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAEjD,sBAAsB;QACtB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC,CAAC,mBAAM,IAAI,CAAC,YAAY,EAAG,CAAC,CAAC,IAAI,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;QACvC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,IAAI,YAAY,EAAE;YAChB,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;SAC3B;IACH,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,IAAe;QAC5B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,OAAO,KAAK,CAAC;SACd;QAED,OAAO,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,IAAsB;QACpC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC,mBAAM,IAAI,EAAG,CAAC,CAAC,IAAI,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,OAA2B;QACpC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,4CAA4C;YAC5C,MAAM,WAAW,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC;YAC/C,IAAI,CAAC,YAAY,mCACZ,WAAW,GACX,OAAO,CACX,CAAC;SACH;aAAM;YACL,uBAAuB;YACvB,IAAI,CAAC,YAAY,mCACZ,IAAI,CAAC,YAAY,GACjB,OAAO,CACX,CAAC;SACH;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE;YAC7C,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YACtD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;SAC3B;IACH,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,SAA0C,EAAE,OAAe,CAAC;QACxE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC;SAChD;QAED,IAAI,OAAkB,CAAC;QAEvB,QAAQ,SAAS,EAAE;YACjB,KAAK,OAAO;gBACV,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC3D,MAAM;YACR,KAAK,SAAS;gBACZ,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBAC3D,MAAM;YACR,KAAK,SAAS;gBACZ,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;gBAC3D,MAAM;YACR;gBACE,OAAO;SACV;QAED,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,SAA0C,EAAE,OAAe,CAAC;QACxE,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,UAAkB;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,SAAS,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAExE,IAAI,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;YACpD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC;SACb;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,OAAO,EAAE,CAAC;SACX;QAED,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACK,uBAAuB,CAAC,OAAyB,EAAE,YAA8B;QACvF,MAAM,WAAW,GAAG,IAAI,CAAC,IAAW,CAAC;QAErC,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;YAC9B,OAAO;SACR;QAED,MAAM,MAAM,GAAG;YACb,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;YACnD,SAAS,EAAE,OAAO;YAClB,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE;YACrE,iBAAiB,EAAE,YAAY;SAChC,CAAC;QAEF,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,kBAAkB,CAAC,WAAW,EAAE;YAC5D,MAAM;YACN,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,MAAM,WAAW,GAAG,SAAS,CAAC,cAAc,EAAE,CAAC;QAC/C,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,eAAuB;QACrC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,OAAO;SACR;QAED,MAAM,WAAW,GAAG,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;QAClF,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;CACF","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { TimeValue } from '../timepicker.types.js';\nimport { TimePickerHost, TimeSelectionController } from '../interfaces/timepicker.interface.js';\nimport { TimeUtils } from '../utils/time.utils.js';\nimport { TIME_PICKER_EVENTS } from '../timepicker.types.js';\n\n/**\n * Controller for handling time selection logic\n */\nexport class TimePickerSelectionController implements TimeSelectionController {\n private selectedTime: TimeValue | null = null;\n\n constructor(private host: TimePickerHost) {}\n\n /**\n * Select a time value\n */\n selectTime(time: TimeValue): void {\n if (!this.host.validateTime(time)) {\n return;\n }\n\n const previousTime = this.selectedTime;\n this.selectedTime = { ...time };\n\n // Dispatch time change event\n this.dispatchTimeChangeEvent(time, previousTime);\n \n // Request host update\n this.host.requestUpdate();\n }\n\n /**\n * Get currently selected time\n */\n getSelectedTime(): TimeValue | null {\n return this.selectedTime ? { ...this.selectedTime } : null;\n }\n\n /**\n * Clear current selection\n */\n clearSelection(): void {\n const previousTime = this.selectedTime;\n this.selectedTime = null;\n\n if (previousTime) {\n this.dispatchTimeChangeEvent(null, previousTime);\n this.host.requestUpdate();\n }\n }\n\n /**\n * Check if a time is currently selected\n */\n isTimeSelected(time: TimeValue): boolean {\n if (!this.selectedTime) {\n return false;\n }\n\n return TimeUtils.isTimeEqual(time, this.selectedTime);\n }\n\n /**\n * Set time without triggering events (for internal use)\n */\n setTimeInternal(time: TimeValue | null): void {\n this.selectedTime = time ? { ...time } : null;\n }\n\n /**\n * Update selected time with partial values\n */\n updateTime(updates: Partial<TimeValue>): void {\n if (!this.selectedTime) {\n // Create new time with current time as base\n const currentTime = TimeUtils.getCurrentTime();\n this.selectedTime = {\n ...currentTime,\n ...updates,\n };\n } else {\n // Update existing time\n this.selectedTime = {\n ...this.selectedTime,\n ...updates,\n };\n }\n\n if (this.host.validateTime(this.selectedTime)) {\n this.dispatchTimeChangeEvent(this.selectedTime, null);\n this.host.requestUpdate();\n }\n }\n\n /**\n * Increment time component\n */\n incrementTime(component: 'hours' | 'minutes' | 'seconds', step: number = 1): void {\n if (!this.selectedTime) {\n this.selectedTime = TimeUtils.getCurrentTime();\n }\n\n let newTime: TimeValue;\n\n switch (component) {\n case 'hours':\n newTime = TimeUtils.addTime(this.selectedTime, step, 0, 0);\n break;\n case 'minutes':\n newTime = TimeUtils.addTime(this.selectedTime, 0, step, 0);\n break;\n case 'seconds':\n newTime = TimeUtils.addTime(this.selectedTime, 0, 0, step);\n break;\n default:\n return;\n }\n\n this.selectTime(newTime);\n }\n\n /**\n * Decrement time component\n */\n decrementTime(component: 'hours' | 'minutes' | 'seconds', step: number = 1): void {\n this.incrementTime(component, -step);\n }\n\n /**\n * Set time from formatted string\n */\n setTimeFromString(timeString: string): boolean {\n const config = this.host.getConfig();\n const parsedTime = TimeUtils.parseTimeString(timeString, config.format);\n\n if (parsedTime && this.host.validateTime(parsedTime)) {\n this.selectTime(parsedTime);\n return true;\n }\n\n return false;\n }\n\n /**\n * Get formatted time string\n */\n getFormattedTime(): string {\n if (!this.selectedTime) {\n return '';\n }\n\n return this.host.formatTime(this.selectedTime);\n }\n\n /**\n * Dispatch time change event\n */\n private dispatchTimeChangeEvent(newTime: TimeValue | null, previousTime: TimeValue | null): void {\n const hostElement = this.host as any;\n \n if (!hostElement.dispatchEvent) {\n return;\n }\n\n const detail = {\n value: newTime ? this.host.formatTime(newTime) : '',\n timeValue: newTime,\n previousValue: previousTime ? this.host.formatTime(previousTime) : '',\n previousTimeValue: previousTime,\n };\n\n const event = new CustomEvent(TIME_PICKER_EVENTS.TIME_CHANGE, {\n detail,\n bubbles: true,\n composed: true,\n });\n\n hostElement.dispatchEvent(event);\n }\n\n /**\n * Reset to initial/default time\n */\n reset(): void {\n this.clearSelection();\n }\n\n /**\n * Set time to current time\n */\n setToCurrentTime(): void {\n const currentTime = TimeUtils.getCurrentTime();\n this.selectTime(currentTime);\n }\n\n /**\n * Round current time to nearest interval\n */\n roundToInterval(intervalMinutes: number): void {\n if (!this.selectedTime) {\n return;\n }\n\n const roundedTime = TimeUtils.roundToInterval(this.selectedTime, intervalMinutes);\n this.selectTime(roundedTime);\n }\n}\n"]}
1
+ {"version":3,"file":"selection.controller.js","sourceRoot":"","sources":["../../../../../src/components/timepicker/controllers/selection.controller.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { TimeValue } from '../timepicker.types.js';\nimport { TimePickerHost, TimeSelectionController } from '../interfaces/timepicker.interface.js';\nimport { TimeUtils } from '../utils/time.utils.js';\nimport { TIME_PICKER_EVENTS } from '../timepicker.types.js';\n\n/**\n * Controller for handling time selection logic\n */\nexport class TimePickerSelectionController implements TimeSelectionController {\n private selectedTime: TimeValue | null = null;\n\n constructor(private host: TimePickerHost) {}\n\n /**\n * Select a time value\n */\n selectTime(time: TimeValue): void {\n if (!this.host.validateTime(time)) {\n return;\n }\n\n const previousTime = this.selectedTime;\n this.selectedTime = { ...time };\n\n // Dispatch time change event\n this.dispatchTimeChangeEvent(time, previousTime);\n \n // Request host update\n this.host.requestUpdate();\n }\n\n /**\n * Get currently selected time\n */\n getSelectedTime(): TimeValue | null {\n return this.selectedTime ? { ...this.selectedTime } : null;\n }\n\n /**\n * Clear current selection\n */\n clearSelection(): void {\n const previousTime = this.selectedTime;\n this.selectedTime = null;\n\n if (previousTime) {\n this.dispatchTimeChangeEvent(null, previousTime);\n this.host.requestUpdate();\n }\n }\n\n /**\n * Check if a time is currently selected\n */\n isTimeSelected(time: TimeValue): boolean {\n if (!this.selectedTime) {\n return false;\n }\n\n return TimeUtils.isTimeEqual(time, this.selectedTime);\n }\n\n /**\n * Set time without triggering events (for internal use)\n */\n setTimeInternal(time: TimeValue | null): void {\n this.selectedTime = time ? { ...time } : null;\n }\n\n /**\n * Update selected time with partial values\n */\n updateTime(updates: Partial<TimeValue>): void {\n if (!this.selectedTime) {\n // Create new time with current time as base\n const currentTime = TimeUtils.getCurrentTime();\n this.selectedTime = {\n ...currentTime,\n ...updates,\n };\n } else {\n // Update existing time\n this.selectedTime = {\n ...this.selectedTime,\n ...updates,\n };\n }\n\n if (this.host.validateTime(this.selectedTime)) {\n this.dispatchTimeChangeEvent(this.selectedTime, null);\n this.host.requestUpdate();\n }\n }\n\n /**\n * Increment time component\n */\n incrementTime(component: 'hours' | 'minutes' | 'seconds', step: number = 1): void {\n if (!this.selectedTime) {\n this.selectedTime = TimeUtils.getCurrentTime();\n }\n\n let newTime: TimeValue;\n\n switch (component) {\n case 'hours':\n newTime = TimeUtils.addTime(this.selectedTime, step, 0, 0);\n break;\n case 'minutes':\n newTime = TimeUtils.addTime(this.selectedTime, 0, step, 0);\n break;\n case 'seconds':\n newTime = TimeUtils.addTime(this.selectedTime, 0, 0, step);\n break;\n default:\n return;\n }\n\n this.selectTime(newTime);\n }\n\n /**\n * Decrement time component\n */\n decrementTime(component: 'hours' | 'minutes' | 'seconds', step: number = 1): void {\n this.incrementTime(component, -step);\n }\n\n /**\n * Set time from formatted string\n */\n setTimeFromString(timeString: string): boolean {\n const config = this.host.getConfig();\n const parsedTime = TimeUtils.parseTimeString(timeString, config.format);\n\n if (parsedTime && this.host.validateTime(parsedTime)) {\n this.selectTime(parsedTime);\n return true;\n }\n\n return false;\n }\n\n /**\n * Get formatted time string\n */\n getFormattedTime(): string {\n if (!this.selectedTime) {\n return '';\n }\n\n return this.host.formatTime(this.selectedTime);\n }\n\n /**\n * Dispatch time change event\n */\n private dispatchTimeChangeEvent(newTime: TimeValue | null, previousTime: TimeValue | null): void {\n const hostElement = this.host as any;\n \n if (!hostElement.dispatchEvent) {\n return;\n }\n\n const detail = {\n value: newTime ? this.host.formatTime(newTime) : '',\n timeValue: newTime,\n previousValue: previousTime ? this.host.formatTime(previousTime) : '',\n previousTimeValue: previousTime,\n };\n\n const event = new CustomEvent(TIME_PICKER_EVENTS.TIME_CHANGE, {\n detail,\n bubbles: true,\n composed: true,\n });\n\n hostElement.dispatchEvent(event);\n }\n\n /**\n * Reset to initial/default time\n */\n reset(): void {\n this.clearSelection();\n }\n\n /**\n * Set time to current time\n */\n setToCurrentTime(): void {\n const currentTime = TimeUtils.getCurrentTime();\n this.selectTime(currentTime);\n }\n\n /**\n * Round current time to nearest interval\n */\n roundToInterval(intervalMinutes: number): void {\n if (!this.selectedTime) {\n return;\n }\n\n const roundedTime = TimeUtils.roundToInterval(this.selectedTime, intervalMinutes);\n this.selectTime(roundedTime);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"validation.controller.d.ts","sourceRoot":"","sources":["../../../../src/components/timepicker/controllers/validation.controller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AAGjG;;GAEG;AACH,qBAAa,8BAA+B,YAAW,wBAAwB;IAGjE,OAAO,CAAC,IAAI;IAFxB,OAAO,CAAC,WAAW,CAAuB;gBAEtB,IAAI,EAAE,cAAc;IAExC;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,eAAe,GAAG,IAAI;IAIlD;;OAEG;IACH,cAAc,IAAI,eAAe;IAIjC;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAQ7C;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAmBxC;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IASxC;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAUvC;;OAEG;IACH,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;IAgB7C;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAqBlC;;OAEG;IACH,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAM/C;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG;QACpC,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB;IAsBD;;OAEG;IACH,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI;IAuBvD;;OAEG;IACH,uBAAuB,IAAI,OAAO;IAKlC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIxC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIxC;;OAEG;IACH,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI;IAI/C;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI;IAI7C;;OAEG;IACH,gBAAgB,IAAI,IAAI;CAGzB"}
1
+ {"version":3,"file":"validation.controller.d.ts","sourceRoot":"","sources":["../../../../../src/components/timepicker/controllers/validation.controller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AAGjG;;GAEG;AACH,qBAAa,8BAA+B,YAAW,wBAAwB;IAGjE,OAAO,CAAC,IAAI;IAFxB,OAAO,CAAC,WAAW,CAAuB;gBAEtB,IAAI,EAAE,cAAc;IAExC;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,eAAe,GAAG,IAAI;IAIlD;;OAEG;IACH,cAAc,IAAI,eAAe;IAIjC;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAQ7C;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAmBxC;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IASxC;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAUvC;;OAEG;IACH,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM;IAgB7C;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAqBlC;;OAEG;IACH,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAM/C;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG;QACpC,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB;IAsBD;;OAEG;IACH,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI;IAuBvD;;OAEG;IACH,uBAAuB,IAAI,OAAO;IAKlC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIxC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIxC;;OAEG;IACH,gBAAgB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI;IAI/C;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,IAAI;IAI7C;;OAEG;IACH,gBAAgB,IAAI,IAAI;CAGzB"}
@@ -1 +1 @@
1
- {"version":3,"file":"validation.controller.js","sourceRoot":"","sources":["../../../../src/components/timepicker/controllers/validation.controller.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { TimeValue, TimeConstraints } from '../timepicker.types.js';\nimport { TimePickerHost, TimeValidationController } from '../interfaces/timepicker.interface.js';\nimport { TimeUtils } from '../utils/time.utils.js';\n\n/**\n * Controller for handling time validation logic\n */\nexport class TimePickerValidationController implements TimeValidationController {\n private constraints: TimeConstraints = {};\n\n constructor(private host: TimePickerHost) {}\n\n /**\n * Set validation constraints\n */\n setConstraints(constraints: TimeConstraints): void {\n this.constraints = { ...constraints };\n }\n\n /**\n * Get current constraints\n */\n getConstraints(): TimeConstraints {\n return { ...this.constraints };\n }\n\n /**\n * Validate time against all constraints\n */\n validateConstraints(time: TimeValue): boolean {\n return (\n this.isTimeInBounds(time) &&\n !this.isTimeDisabled(time) &&\n this.isTimeEnabled(time)\n );\n }\n\n /**\n * Check if time is within min/max bounds\n */\n isTimeInBounds(time: TimeValue): boolean {\n let minTime: TimeValue | null = null;\n let maxTime: TimeValue | null = null;\n\n // Parse min time constraint\n if (this.constraints.minTime) {\n const config = this.host.getConfig();\n minTime = TimeUtils.parseTimeString(this.constraints.minTime, config.format);\n }\n\n // Parse max time constraint\n if (this.constraints.maxTime) {\n const config = this.host.getConfig();\n maxTime = TimeUtils.parseTimeString(this.constraints.maxTime, config.format);\n }\n\n return TimeUtils.isTimeInRange(time, minTime, maxTime);\n }\n\n /**\n * Check if time is explicitly disabled\n */\n isTimeDisabled(time: TimeValue): boolean {\n if (!this.constraints.disabledTimes || this.constraints.disabledTimes.length === 0) {\n return false;\n }\n\n const timeString = this.host.formatTime(time);\n return this.constraints.disabledTimes.includes(timeString);\n }\n\n /**\n * Check if time is in enabled times list (if specified)\n */\n isTimeEnabled(time: TimeValue): boolean {\n // If no enabled times specified, all times are enabled (except disabled ones)\n if (!this.constraints.enabledTimes || this.constraints.enabledTimes.length === 0) {\n return true;\n }\n\n const timeString = this.host.formatTime(time);\n return this.constraints.enabledTimes.includes(timeString);\n }\n\n /**\n * Get validation message for a time\n */\n getValidationMessage(time: TimeValue): string {\n if (!this.isTimeInBounds(time)) {\n return this.getBoundsValidationMessage(time);\n }\n\n if (this.isTimeDisabled(time)) {\n return 'This time is not available';\n }\n\n if (!this.isTimeEnabled(time)) {\n return 'This time is not in the allowed time range';\n }\n\n return '';\n }\n\n /**\n * Get bounds validation message\n */\n private getBoundsValidationMessage(time: TimeValue): string {\n const config = this.host.getConfig();\n let message = '';\n\n if (this.constraints.minTime && this.constraints.maxTime) {\n message = `Time must be between ${this.constraints.minTime} and ${this.constraints.maxTime}`;\n } else if (this.constraints.minTime) {\n const minTime = TimeUtils.parseTimeString(this.constraints.minTime, config.format);\n if (minTime && TimeUtils.compareTime(time, minTime) < 0) {\n message = `Time must be after ${this.constraints.minTime}`;\n }\n } else if (this.constraints.maxTime) {\n const maxTime = TimeUtils.parseTimeString(this.constraints.maxTime, config.format);\n if (maxTime && TimeUtils.compareTime(time, maxTime) > 0) {\n message = `Time must be before ${this.constraints.maxTime}`;\n }\n }\n\n return message;\n }\n\n /**\n * Validate time format\n */\n validateTimeFormat(timeString: string): boolean {\n const config = this.host.getConfig();\n const parsedTime = TimeUtils.parseTimeString(timeString, config.format);\n return parsedTime !== null;\n }\n\n /**\n * Get validation result with details\n */\n getValidationResult(time: TimeValue): {\n isValid: boolean;\n message: string;\n errors: string[];\n } {\n const errors: string[] = [];\n \n if (!this.isTimeInBounds(time)) {\n errors.push(this.getBoundsValidationMessage(time));\n }\n\n if (this.isTimeDisabled(time)) {\n errors.push('This time is disabled');\n }\n\n if (!this.isTimeEnabled(time)) {\n errors.push('This time is not in the allowed range');\n }\n\n return {\n isValid: errors.length === 0,\n message: errors.length > 0 ? errors[0] : '',\n errors,\n };\n }\n\n /**\n * Find nearest valid time\n */\n findNearestValidTime(time: TimeValue): TimeValue | null {\n if (this.validateConstraints(time)) {\n return time;\n }\n\n // Try nearby times (within 1 hour range)\n for (let minuteOffset = 1; minuteOffset <= 60; minuteOffset++) {\n // Try adding minutes\n const laterTime = TimeUtils.addTime(time, 0, minuteOffset, 0);\n if (this.validateConstraints(laterTime)) {\n return laterTime;\n }\n\n // Try subtracting minutes\n const earlierTime = TimeUtils.addTime(time, 0, -minuteOffset, 0);\n if (this.validateConstraints(earlierTime)) {\n return earlierTime;\n }\n }\n\n return null;\n }\n\n /**\n * Check if current time selection is valid\n */\n isCurrentSelectionValid(): boolean {\n const selectedTime = this.host.getCurrentTime();\n return this.validateConstraints(selectedTime);\n }\n\n /**\n * Set min time constraint\n */\n setMinTime(minTime: string | null): void {\n this.constraints.minTime = minTime || undefined;\n }\n\n /**\n * Set max time constraint\n */\n setMaxTime(maxTime: string | null): void {\n this.constraints.maxTime = maxTime || undefined;\n }\n\n /**\n * Set disabled times\n */\n setDisabledTimes(disabledTimes: string[]): void {\n this.constraints.disabledTimes = [...disabledTimes];\n }\n\n /**\n * Set enabled times\n */\n setEnabledTimes(enabledTimes: string[]): void {\n this.constraints.enabledTimes = [...enabledTimes];\n }\n\n /**\n * Clear all constraints\n */\n clearConstraints(): void {\n this.constraints = {};\n }\n}\n"]}
1
+ {"version":3,"file":"validation.controller.js","sourceRoot":"","sources":["../../../../../src/components/timepicker/controllers/validation.controller.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { TimeValue, TimeConstraints } from '../timepicker.types.js';\nimport { TimePickerHost, TimeValidationController } from '../interfaces/timepicker.interface.js';\nimport { TimeUtils } from '../utils/time.utils.js';\n\n/**\n * Controller for handling time validation logic\n */\nexport class TimePickerValidationController implements TimeValidationController {\n private constraints: TimeConstraints = {};\n\n constructor(private host: TimePickerHost) {}\n\n /**\n * Set validation constraints\n */\n setConstraints(constraints: TimeConstraints): void {\n this.constraints = { ...constraints };\n }\n\n /**\n * Get current constraints\n */\n getConstraints(): TimeConstraints {\n return { ...this.constraints };\n }\n\n /**\n * Validate time against all constraints\n */\n validateConstraints(time: TimeValue): boolean {\n return (\n this.isTimeInBounds(time) &&\n !this.isTimeDisabled(time) &&\n this.isTimeEnabled(time)\n );\n }\n\n /**\n * Check if time is within min/max bounds\n */\n isTimeInBounds(time: TimeValue): boolean {\n let minTime: TimeValue | null = null;\n let maxTime: TimeValue | null = null;\n\n // Parse min time constraint\n if (this.constraints.minTime) {\n const config = this.host.getConfig();\n minTime = TimeUtils.parseTimeString(this.constraints.minTime, config.format);\n }\n\n // Parse max time constraint\n if (this.constraints.maxTime) {\n const config = this.host.getConfig();\n maxTime = TimeUtils.parseTimeString(this.constraints.maxTime, config.format);\n }\n\n return TimeUtils.isTimeInRange(time, minTime, maxTime);\n }\n\n /**\n * Check if time is explicitly disabled\n */\n isTimeDisabled(time: TimeValue): boolean {\n if (!this.constraints.disabledTimes || this.constraints.disabledTimes.length === 0) {\n return false;\n }\n\n const timeString = this.host.formatTime(time);\n return this.constraints.disabledTimes.includes(timeString);\n }\n\n /**\n * Check if time is in enabled times list (if specified)\n */\n isTimeEnabled(time: TimeValue): boolean {\n // If no enabled times specified, all times are enabled (except disabled ones)\n if (!this.constraints.enabledTimes || this.constraints.enabledTimes.length === 0) {\n return true;\n }\n\n const timeString = this.host.formatTime(time);\n return this.constraints.enabledTimes.includes(timeString);\n }\n\n /**\n * Get validation message for a time\n */\n getValidationMessage(time: TimeValue): string {\n if (!this.isTimeInBounds(time)) {\n return this.getBoundsValidationMessage(time);\n }\n\n if (this.isTimeDisabled(time)) {\n return 'This time is not available';\n }\n\n if (!this.isTimeEnabled(time)) {\n return 'This time is not in the allowed time range';\n }\n\n return '';\n }\n\n /**\n * Get bounds validation message\n */\n private getBoundsValidationMessage(time: TimeValue): string {\n const config = this.host.getConfig();\n let message = '';\n\n if (this.constraints.minTime && this.constraints.maxTime) {\n message = `Time must be between ${this.constraints.minTime} and ${this.constraints.maxTime}`;\n } else if (this.constraints.minTime) {\n const minTime = TimeUtils.parseTimeString(this.constraints.minTime, config.format);\n if (minTime && TimeUtils.compareTime(time, minTime) < 0) {\n message = `Time must be after ${this.constraints.minTime}`;\n }\n } else if (this.constraints.maxTime) {\n const maxTime = TimeUtils.parseTimeString(this.constraints.maxTime, config.format);\n if (maxTime && TimeUtils.compareTime(time, maxTime) > 0) {\n message = `Time must be before ${this.constraints.maxTime}`;\n }\n }\n\n return message;\n }\n\n /**\n * Validate time format\n */\n validateTimeFormat(timeString: string): boolean {\n const config = this.host.getConfig();\n const parsedTime = TimeUtils.parseTimeString(timeString, config.format);\n return parsedTime !== null;\n }\n\n /**\n * Get validation result with details\n */\n getValidationResult(time: TimeValue): {\n isValid: boolean;\n message: string;\n errors: string[];\n } {\n const errors: string[] = [];\n \n if (!this.isTimeInBounds(time)) {\n errors.push(this.getBoundsValidationMessage(time));\n }\n\n if (this.isTimeDisabled(time)) {\n errors.push('This time is disabled');\n }\n\n if (!this.isTimeEnabled(time)) {\n errors.push('This time is not in the allowed range');\n }\n\n return {\n isValid: errors.length === 0,\n message: errors.length > 0 ? errors[0] : '',\n errors,\n };\n }\n\n /**\n * Find nearest valid time\n */\n findNearestValidTime(time: TimeValue): TimeValue | null {\n if (this.validateConstraints(time)) {\n return time;\n }\n\n // Try nearby times (within 1 hour range)\n for (let minuteOffset = 1; minuteOffset <= 60; minuteOffset++) {\n // Try adding minutes\n const laterTime = TimeUtils.addTime(time, 0, minuteOffset, 0);\n if (this.validateConstraints(laterTime)) {\n return laterTime;\n }\n\n // Try subtracting minutes\n const earlierTime = TimeUtils.addTime(time, 0, -minuteOffset, 0);\n if (this.validateConstraints(earlierTime)) {\n return earlierTime;\n }\n }\n\n return null;\n }\n\n /**\n * Check if current time selection is valid\n */\n isCurrentSelectionValid(): boolean {\n const selectedTime = this.host.getCurrentTime();\n return this.validateConstraints(selectedTime);\n }\n\n /**\n * Set min time constraint\n */\n setMinTime(minTime: string | null): void {\n this.constraints.minTime = minTime || undefined;\n }\n\n /**\n * Set max time constraint\n */\n setMaxTime(maxTime: string | null): void {\n this.constraints.maxTime = maxTime || undefined;\n }\n\n /**\n * Set disabled times\n */\n setDisabledTimes(disabledTimes: string[]): void {\n this.constraints.disabledTimes = [...disabledTimes];\n }\n\n /**\n * Set enabled times\n */\n setEnabledTimes(enabledTimes: string[]): void {\n this.constraints.enabledTimes = [...enabledTimes];\n }\n\n /**\n * Clear all constraints\n */\n clearConstraints(): void {\n this.constraints = {};\n }\n}\n"]}
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/timepicker/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sCAAsC,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nexport { NrTimePickerElement } from './timepicker.component.js';\nexport * from './timepicker.types.js';\nexport * from './timepicker.constants.js';\nexport * from './utils/time.utils.js';\nexport * from './controllers/index.js';\nexport * from './interfaces/timepicker.interface.js';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/timepicker/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sCAAsC,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nexport { NrTimePickerElement } from './timepicker.component.js';\nexport * from './timepicker.types.js';\nexport * from './timepicker.constants.js';\nexport * from './utils/time.utils.js';\nexport * from './controllers/index.js';\nexport * from './interfaces/timepicker.interface.js';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"timepicker.interface.d.ts","sourceRoot":"","sources":["../../../../src/components/timepicker/interfaces/timepicker.interface.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,cAAc,IAAI,SAAS,CAAC;IAE5B;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IAE/B;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;IAEpC;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAEhD;;OAEG;IACH,SAAS,IAAI,gBAAgB,CAAC;IAE9B;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAEvC;;OAEG;IACH,aAAa,IAAI,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IAElC;;OAEG;IACH,eAAe,IAAI,SAAS,GAAG,IAAI,CAAC;IAEpC;;OAEG;IACH,cAAc,IAAI,IAAI,CAAC;IAEvB;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAE9C;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAEzC;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAEzC;;OAEG;IACH,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;IAE1C;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;IAExC;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAEjD;;OAEG;IACH,gBAAgB,IAAI,MAAM,CAAC;CAC5B"}
1
+ {"version":3,"file":"timepicker.interface.d.ts","sourceRoot":"","sources":["../../../../../src/components/timepicker/interfaces/timepicker.interface.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAErE;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,cAAc,IAAI,SAAS,CAAC;IAE5B;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IAE/B;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;IAEpC;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAEhD;;OAEG;IACH,SAAS,IAAI,gBAAgB,CAAC;IAE9B;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAEvC;;OAEG;IACH,aAAa,IAAI,IAAI,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IAElC;;OAEG;IACH,eAAe,IAAI,SAAS,GAAG,IAAI,CAAC;IAEpC;;OAEG;IACH,cAAc,IAAI,IAAI,CAAC;IAEvB;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAE9C;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAEzC;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;IAEzC;;OAEG;IACH,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;IAE1C;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAAC;IAExC;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAEjD;;OAEG;IACH,gBAAgB,IAAI,MAAM,CAAC;CAC5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"timepicker.interface.js","sourceRoot":"","sources":["../../../../src/components/timepicker/interfaces/timepicker.interface.ts"],"names":[],"mappings":"AAAA;;;;GAIG","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { TimeValue, TimePickerConfig } from '../timepicker.types.js';\n\n/**\n * Base controller interface for time picker host\n */\nexport interface TimePickerHost {\n /**\n * Get current time value\n */\n getCurrentTime(): TimeValue;\n\n /**\n * Set time value\n */\n setTime(time: TimeValue): void;\n\n /**\n * Format time value to string\n */\n formatTime(time: TimeValue): string;\n\n /**\n * Parse time string to TimeValue\n */\n parseTime(timeString: string): TimeValue | null;\n\n /**\n * Get time picker configuration\n */\n getConfig(): TimePickerConfig;\n\n /**\n * Validate time value\n */\n validateTime(time: TimeValue): boolean;\n\n /**\n * Request component update\n */\n requestUpdate(): void;\n}\n\n/**\n * Time selection controller interface\n */\nexport interface TimeSelectionController {\n /**\n * Select time value\n */\n selectTime(time: TimeValue): void;\n\n /**\n * Get selected time\n */\n getSelectedTime(): TimeValue | null;\n\n /**\n * Clear selection\n */\n clearSelection(): void;\n\n /**\n * Check if time is selected\n */\n isTimeSelected(time: TimeValue): boolean;\n}\n\n/**\n * Time validation controller interface\n */\nexport interface TimeValidationController {\n /**\n * Validate time constraints\n */\n validateConstraints(time: TimeValue): boolean;\n\n /**\n * Check if time is within min/max bounds\n */\n isTimeInBounds(time: TimeValue): boolean;\n\n /**\n * Check if time is disabled\n */\n isTimeDisabled(time: TimeValue): boolean;\n\n /**\n * Get validation message\n */\n getValidationMessage(time: TimeValue): string;\n}\n\n/**\n * Time formatting controller interface\n */\nexport interface TimeFormattingController {\n /**\n * Format time to display string\n */\n formatForDisplay(time: TimeValue): string;\n\n /**\n * Format time to input value\n */\n formatForInput(time: TimeValue): string;\n\n /**\n * Parse input value to time\n */\n parseInputValue(value: string): TimeValue | null;\n\n /**\n * Get time format pattern\n */\n getFormatPattern(): string;\n}\n"]}
1
+ {"version":3,"file":"timepicker.interface.js","sourceRoot":"","sources":["../../../../../src/components/timepicker/interfaces/timepicker.interface.ts"],"names":[],"mappings":"AAAA;;;;GAIG","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { TimeValue, TimePickerConfig } from '../timepicker.types.js';\n\n/**\n * Base controller interface for time picker host\n */\nexport interface TimePickerHost {\n /**\n * Get current time value\n */\n getCurrentTime(): TimeValue;\n\n /**\n * Set time value\n */\n setTime(time: TimeValue): void;\n\n /**\n * Format time value to string\n */\n formatTime(time: TimeValue): string;\n\n /**\n * Parse time string to TimeValue\n */\n parseTime(timeString: string): TimeValue | null;\n\n /**\n * Get time picker configuration\n */\n getConfig(): TimePickerConfig;\n\n /**\n * Validate time value\n */\n validateTime(time: TimeValue): boolean;\n\n /**\n * Request component update\n */\n requestUpdate(): void;\n}\n\n/**\n * Time selection controller interface\n */\nexport interface TimeSelectionController {\n /**\n * Select time value\n */\n selectTime(time: TimeValue): void;\n\n /**\n * Get selected time\n */\n getSelectedTime(): TimeValue | null;\n\n /**\n * Clear selection\n */\n clearSelection(): void;\n\n /**\n * Check if time is selected\n */\n isTimeSelected(time: TimeValue): boolean;\n}\n\n/**\n * Time validation controller interface\n */\nexport interface TimeValidationController {\n /**\n * Validate time constraints\n */\n validateConstraints(time: TimeValue): boolean;\n\n /**\n * Check if time is within min/max bounds\n */\n isTimeInBounds(time: TimeValue): boolean;\n\n /**\n * Check if time is disabled\n */\n isTimeDisabled(time: TimeValue): boolean;\n\n /**\n * Get validation message\n */\n getValidationMessage(time: TimeValue): string;\n}\n\n/**\n * Time formatting controller interface\n */\nexport interface TimeFormattingController {\n /**\n * Format time to display string\n */\n formatForDisplay(time: TimeValue): string;\n\n /**\n * Format time to input value\n */\n formatForInput(time: TimeValue): string;\n\n /**\n * Parse input value to time\n */\n parseInputValue(value: string): TimeValue | null;\n\n /**\n * Get time format pattern\n */\n getFormatPattern(): string;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nuralyui/timepicker",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "NuralyUI TimePicker - A comprehensive time selection component with clock interface, multiple formats, and validation",
5
5
  "type": "module",
6
6
  "main": "./index.js",
@@ -1 +1 @@
1
- {"version":3,"file":"timepicker.test.d.ts","sourceRoot":"","sources":["../../../../src/components/timepicker/test/timepicker.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
1
+ {"version":3,"file":"timepicker.test.d.ts","sourceRoot":"","sources":["../../../../../src/components/timepicker/test/timepicker.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -1 +1 @@
1
- {"version":3,"file":"timepicker.test.js","sourceRoot":"","sources":["../../../../src/components/timepicker/test/timepicker.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { html, fixture, expect, aTimeout } from '@open-wc/testing';\nimport { NrTimePickerElement } from '../timepicker.component.js';\nimport { TimeFormat, TimePickerSize, TimePickerVariant } from '../timepicker.types.js';\n\ndescribe('NrTimePickerElement', () => {\n let element: NrTimePickerElement;\n\n beforeEach(async () => {\n element = await fixture(html`<nr-timepicker></nr-timepicker>`);\n });\n\n describe('Basic functionality', () => {\n it('should render successfully', () => {\n expect(element).to.exist;\n expect(element.tagName).to.equal('NR-TIMEPICKER');\n });\n\n it('should have default properties', () => {\n expect(element.format).to.equal(TimeFormat.TwentyFourHour);\n expect(element.showSeconds).to.be.false;\n expect(element.disabled).to.be.false;\n expect(element.readonly).to.be.false;\n expect(element.required).to.be.false;\n });\n\n it('should have empty initial value', () => {\n expect(element.value).to.equal('');\n });\n });\n\n describe('Time format handling', () => {\n it('should handle 24-hour format by default', async () => {\n element.value = '14:30';\n await element.updateComplete;\n expect(element.value).to.equal('14:30');\n });\n\n it('should handle 12-hour format', async () => {\n element.format = TimeFormat.TwelveHour;\n element.value = '2:30 PM';\n await element.updateComplete;\n expect(element.value).to.equal('2:30 PM');\n });\n\n it('should format time with seconds when enabled', async () => {\n element.showSeconds = true;\n element.value = '14:30:45';\n await element.updateComplete;\n expect(element.value).to.equal('14:30:45');\n });\n });\n\n describe('Time validation', () => {\n it('should validate time within min/max range', async () => {\n element.minTime = '09:00';\n element.maxTime = '17:00';\n await element.updateComplete;\n \n // Valid time within range\n element.value = '12:00';\n await element.updateComplete;\n expect(element.value).to.equal('12:00');\n });\n\n it('should reject invalid time formats', async () => {\n const invalidValue = 'invalid-time';\n element.value = invalidValue;\n await element.updateComplete;\n \n // Should not set invalid value\n expect(element.value).to.not.equal(invalidValue);\n });\n });\n\n describe('Clock functionality', () => {\n it('should open and close clock', async () => {\n // Check initial state via DOM\n let dropdown = element.shadowRoot?.querySelector('.time-picker__dropdown--open');\n expect(dropdown).to.not.exist;\n \n element.open();\n await element.updateComplete;\n dropdown = element.shadowRoot?.querySelector('.time-picker__dropdown--open');\n expect(dropdown).to.exist;\n \n element.close();\n await element.updateComplete;\n dropdown = element.shadowRoot?.querySelector('.time-picker__dropdown--open');\n expect(dropdown).to.not.exist;\n });\n\n it('should toggle clock state via trigger button', async () => {\n const trigger = element.shadowRoot?.querySelector('.time-picker__trigger') as HTMLButtonElement;\n \n // Initially closed\n let dropdown = element.shadowRoot?.querySelector('.time-picker__dropdown--open');\n expect(dropdown).to.not.exist;\n \n // Click to open\n trigger.click();\n await element.updateComplete;\n dropdown = element.shadowRoot?.querySelector('.time-picker__dropdown--open');\n expect(dropdown).to.exist;\n \n // Click to close\n trigger.click();\n await element.updateComplete;\n dropdown = element.shadowRoot?.querySelector('.time-picker__dropdown--open');\n expect(dropdown).to.not.exist;\n });\n });\n\n describe('Time manipulation', () => {\n it('should clear time value', async () => {\n element.value = '12:00';\n await element.updateComplete;\n \n element.clear();\n await element.updateComplete;\n expect(element.value).to.equal('');\n });\n\n it('should set current time', async () => {\n element.setToNow();\n await element.updateComplete;\n \n // Should have some value after setting to now\n expect(element.value).to.not.equal('');\n // Basic format check for 24-hour format\n expect(element.value).to.match(/^\\d{1,2}:\\d{2}$/);\n });\n });\n\n describe('Event handling', () => {\n it('should dispatch time-change event', async () => {\n let eventFired = false;\n let eventDetail = null;\n\n element.addEventListener('nr-time-change', (e: Event) => {\n const customEvent = e as CustomEvent;\n eventFired = true;\n eventDetail = customEvent.detail;\n });\n\n element.value = '15:30';\n await element.updateComplete;\n \n // Allow time for event to be dispatched\n await aTimeout(10);\n \n expect(eventFired).to.be.true;\n expect(eventDetail).to.exist;\n });\n\n it('should dispatch clock open/close events', async () => {\n let openEventFired = false;\n let closeEventFired = false;\n\n element.addEventListener('nr-clock-open', () => {\n openEventFired = true;\n });\n\n element.addEventListener('nr-clock-close', () => {\n closeEventFired = true;\n });\n\n element.open();\n await element.updateComplete;\n await aTimeout(10);\n expect(openEventFired).to.be.true;\n\n element.close();\n await element.updateComplete;\n await aTimeout(10);\n expect(closeEventFired).to.be.true;\n });\n });\n\n describe('Accessibility', () => {\n it('should have proper ARIA attributes', async () => {\n element.label = 'Select Time';\n element.required = true;\n await element.updateComplete;\n\n const input = element.shadowRoot?.querySelector('input');\n expect(input).to.exist;\n expect(input?.getAttribute('required')).to.exist;\n });\n\n it('should support disabled state', async () => {\n element.disabled = true;\n await element.updateComplete;\n\n const input = element.shadowRoot?.querySelector('input');\n expect(input?.hasAttribute('disabled')).to.be.true;\n });\n\n it('should support readonly state', async () => {\n element.readonly = true;\n await element.updateComplete;\n\n const input = element.shadowRoot?.querySelector('input');\n expect(input?.hasAttribute('readonly')).to.be.true;\n });\n });\n\n describe('Size and variant attributes', () => {\n it('should apply size attribute to host', async () => {\n element.size = TimePickerSize.Large;\n await element.updateComplete;\n expect(element.hasAttribute('size')).to.be.true;\n expect(element.getAttribute('size')).to.equal('large');\n });\n\n it('should apply variant attribute to host', async () => {\n element.variant = TimePickerVariant.Outlined;\n await element.updateComplete;\n expect(element.hasAttribute('variant')).to.be.true;\n expect(element.getAttribute('variant')).to.equal('outlined');\n });\n });\n\n describe('Controller integration', () => {\n it('should have selection controller', () => {\n // Access private controller for testing (cast to any to bypass TypeScript)\n const controller = (element as any).selectionController;\n expect(controller).to.exist;\n expect(typeof controller.selectTime).to.equal('function');\n });\n\n it('should have validation controller', () => {\n const controller = (element as any).validationController;\n expect(controller).to.exist;\n expect(typeof controller.validateConstraints).to.equal('function');\n });\n\n it('should have formatting controller', () => {\n const controller = (element as any).formattingController;\n expect(controller).to.exist;\n expect(typeof controller.formatForDisplay).to.equal('function');\n });\n });\n});\n"]}
1
+ {"version":3,"file":"timepicker.test.js","sourceRoot":"","sources":["../../../../../src/components/timepicker/test/timepicker.test.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { html, fixture, expect, aTimeout } from '@open-wc/testing';\nimport { NrTimePickerElement } from '../timepicker.component.js';\nimport { TimeFormat, TimePickerSize, TimePickerVariant } from '../timepicker.types.js';\n\ndescribe('NrTimePickerElement', () => {\n let element: NrTimePickerElement;\n\n beforeEach(async () => {\n element = await fixture(html`<nr-timepicker></nr-timepicker>`);\n });\n\n describe('Basic functionality', () => {\n it('should render successfully', () => {\n expect(element).to.exist;\n expect(element.tagName).to.equal('NR-TIMEPICKER');\n });\n\n it('should have default properties', () => {\n expect(element.format).to.equal(TimeFormat.TwentyFourHour);\n expect(element.showSeconds).to.be.false;\n expect(element.disabled).to.be.false;\n expect(element.readonly).to.be.false;\n expect(element.required).to.be.false;\n });\n\n it('should have empty initial value', () => {\n expect(element.value).to.equal('');\n });\n });\n\n describe('Time format handling', () => {\n it('should handle 24-hour format by default', async () => {\n element.value = '14:30';\n await element.updateComplete;\n expect(element.value).to.equal('14:30');\n });\n\n it('should handle 12-hour format', async () => {\n element.format = TimeFormat.TwelveHour;\n element.value = '2:30 PM';\n await element.updateComplete;\n expect(element.value).to.equal('2:30 PM');\n });\n\n it('should format time with seconds when enabled', async () => {\n element.showSeconds = true;\n element.value = '14:30:45';\n await element.updateComplete;\n expect(element.value).to.equal('14:30:45');\n });\n });\n\n describe('Time validation', () => {\n it('should validate time within min/max range', async () => {\n element.minTime = '09:00';\n element.maxTime = '17:00';\n await element.updateComplete;\n \n // Valid time within range\n element.value = '12:00';\n await element.updateComplete;\n expect(element.value).to.equal('12:00');\n });\n\n it('should reject invalid time formats', async () => {\n const invalidValue = 'invalid-time';\n element.value = invalidValue;\n await element.updateComplete;\n \n // Should not set invalid value\n expect(element.value).to.not.equal(invalidValue);\n });\n });\n\n describe('Clock functionality', () => {\n it('should open and close clock', async () => {\n // Check initial state via DOM\n let dropdown = element.shadowRoot?.querySelector('.time-picker__dropdown--open');\n expect(dropdown).to.not.exist;\n \n element.open();\n await element.updateComplete;\n dropdown = element.shadowRoot?.querySelector('.time-picker__dropdown--open');\n expect(dropdown).to.exist;\n \n element.close();\n await element.updateComplete;\n dropdown = element.shadowRoot?.querySelector('.time-picker__dropdown--open');\n expect(dropdown).to.not.exist;\n });\n\n it('should toggle clock state via trigger button', async () => {\n const trigger = element.shadowRoot?.querySelector('.time-picker__trigger') as HTMLButtonElement;\n \n // Initially closed\n let dropdown = element.shadowRoot?.querySelector('.time-picker__dropdown--open');\n expect(dropdown).to.not.exist;\n \n // Click to open\n trigger.click();\n await element.updateComplete;\n dropdown = element.shadowRoot?.querySelector('.time-picker__dropdown--open');\n expect(dropdown).to.exist;\n \n // Click to close\n trigger.click();\n await element.updateComplete;\n dropdown = element.shadowRoot?.querySelector('.time-picker__dropdown--open');\n expect(dropdown).to.not.exist;\n });\n });\n\n describe('Time manipulation', () => {\n it('should clear time value', async () => {\n element.value = '12:00';\n await element.updateComplete;\n \n element.clear();\n await element.updateComplete;\n expect(element.value).to.equal('');\n });\n\n it('should set current time', async () => {\n element.setToNow();\n await element.updateComplete;\n \n // Should have some value after setting to now\n expect(element.value).to.not.equal('');\n // Basic format check for 24-hour format\n expect(element.value).to.match(/^\\d{1,2}:\\d{2}$/);\n });\n });\n\n describe('Event handling', () => {\n it('should dispatch time-change event', async () => {\n let eventFired = false;\n let eventDetail = null;\n\n element.addEventListener('nr-time-change', (e: Event) => {\n const customEvent = e as CustomEvent;\n eventFired = true;\n eventDetail = customEvent.detail;\n });\n\n element.value = '15:30';\n await element.updateComplete;\n \n // Allow time for event to be dispatched\n await aTimeout(10);\n \n expect(eventFired).to.be.true;\n expect(eventDetail).to.exist;\n });\n\n it('should dispatch clock open/close events', async () => {\n let openEventFired = false;\n let closeEventFired = false;\n\n element.addEventListener('nr-clock-open', () => {\n openEventFired = true;\n });\n\n element.addEventListener('nr-clock-close', () => {\n closeEventFired = true;\n });\n\n element.open();\n await element.updateComplete;\n await aTimeout(10);\n expect(openEventFired).to.be.true;\n\n element.close();\n await element.updateComplete;\n await aTimeout(10);\n expect(closeEventFired).to.be.true;\n });\n });\n\n describe('Accessibility', () => {\n it('should have proper ARIA attributes', async () => {\n element.label = 'Select Time';\n element.required = true;\n await element.updateComplete;\n\n const input = element.shadowRoot?.querySelector('input');\n expect(input).to.exist;\n expect(input?.getAttribute('required')).to.exist;\n });\n\n it('should support disabled state', async () => {\n element.disabled = true;\n await element.updateComplete;\n\n const input = element.shadowRoot?.querySelector('input');\n expect(input?.hasAttribute('disabled')).to.be.true;\n });\n\n it('should support readonly state', async () => {\n element.readonly = true;\n await element.updateComplete;\n\n const input = element.shadowRoot?.querySelector('input');\n expect(input?.hasAttribute('readonly')).to.be.true;\n });\n });\n\n describe('Size and variant attributes', () => {\n it('should apply size attribute to host', async () => {\n element.size = TimePickerSize.Large;\n await element.updateComplete;\n expect(element.hasAttribute('size')).to.be.true;\n expect(element.getAttribute('size')).to.equal('large');\n });\n\n it('should apply variant attribute to host', async () => {\n element.variant = TimePickerVariant.Outlined;\n await element.updateComplete;\n expect(element.hasAttribute('variant')).to.be.true;\n expect(element.getAttribute('variant')).to.equal('outlined');\n });\n });\n\n describe('Controller integration', () => {\n it('should have selection controller', () => {\n // Access private controller for testing (cast to any to bypass TypeScript)\n const controller = (element as any).selectionController;\n expect(controller).to.exist;\n expect(typeof controller.selectTime).to.equal('function');\n });\n\n it('should have validation controller', () => {\n const controller = (element as any).validationController;\n expect(controller).to.exist;\n expect(typeof controller.validateConstraints).to.equal('function');\n });\n\n it('should have formatting controller', () => {\n const controller = (element as any).formattingController;\n expect(controller).to.exist;\n expect(typeof controller.formatForDisplay).to.equal('function');\n });\n });\n});\n"]}
@@ -1,6 +1,4 @@
1
1
  import { LitElement, TemplateResult } from 'lit';
2
- import '../input/input.component.js';
3
- import '../button/button.component.js';
4
2
  import { DropdownHost } from '@nuralyui/common/controllers';
5
3
  import { TimeValue, TimeFormat, TimePickerConfig, TimePickerPlacement } from './timepicker.types.js';
6
4
  export interface TimePickerHost extends LitElement, DropdownHost {
@@ -7,9 +7,6 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  import { LitElement, html, nothing } from 'lit';
8
8
  import { customElement, property, state } from 'lit/decorators.js';
9
9
  import { classMap } from 'lit/directives/class-map.js';
10
- // Import UI components
11
- import '../input/input.component.js';
12
- import '../button/button.component.js';
13
10
  // Import base mixin and types
14
11
  import { NuralyUIBaseMixin } from '@nuralyui/common/mixins';
15
12
  import { SharedDropdownController } from '@nuralyui/common/controllers';