@nuralyui/timepicker 0.1.1 → 0.1.3

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/index.js.map ADDED
@@ -0,0 +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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nuralyui/timepicker",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
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",
@@ -11,6 +11,9 @@
11
11
  "types": "./index.d.ts",
12
12
  "default": "./index.js"
13
13
  },
14
+ "./bundle": {
15
+ "import": "./bundle.js"
16
+ },
14
17
  "./timepicker.component.js": {
15
18
  "types": "./timepicker.component.d.ts",
16
19
  "default": "./timepicker.component.js"
@@ -19,6 +22,8 @@
19
22
  "files": [
20
23
  "*.js",
21
24
  "*.d.ts",
25
+ "*.js.map",
26
+ "bundle.js",
22
27
  "controllers/",
23
28
  "interfaces/",
24
29
  "utils/",
@@ -1,7 +1,7 @@
1
1
  import { LitElement, TemplateResult } from 'lit';
2
2
  import '../input/input.component.js';
3
3
  import '../button/button.component.js';
4
- import { DropdownHost } from '../../shared/controllers/dropdown.interface.js';
4
+ import { DropdownHost } from '@nuralyui/common/controllers';
5
5
  import { TimeValue, TimeFormat, TimePickerConfig, TimePickerPlacement } from './timepicker.types.js';
6
6
  export interface TimePickerHost extends LitElement, DropdownHost {
7
7
  getCurrentTime(): TimeValue;
@@ -12,7 +12,7 @@ export interface TimePickerHost extends LitElement, DropdownHost {
12
12
  validateTime(time: TimeValue): boolean;
13
13
  requestUpdate(): void;
14
14
  }
15
- declare const NrTimePickerElement_base: (new (...args: any[]) => import("../../shared/dependency-mixin.js").DependencyAware) & (new (...args: any[]) => import("../../shared/theme-mixin.js").ThemeAware) & (new (...args: any[]) => import("../../shared/event-handler-mixin.js").EventHandlerCapable) & typeof LitElement;
15
+ declare const NrTimePickerElement_base: (new (...args: any[]) => import("@nuralyui/common/mixins").DependencyAware) & (new (...args: any[]) => import("@nuralyui/common/mixins").ThemeAware) & (new (...args: any[]) => import("@nuralyui/common/mixins").EventHandlerCapable) & typeof LitElement;
16
16
  /**
17
17
  * A comprehensive time picker component that supports both 12-hour and 24-hour formats,
18
18
  * with optional seconds display and extensive customization options.
@@ -11,8 +11,8 @@ import { classMap } from 'lit/directives/class-map.js';
11
11
  import '../input/input.component.js';
12
12
  import '../button/button.component.js';
13
13
  // Import base mixin and types
14
- import { NuralyUIBaseMixin } from '../../shared/base-mixin.js';
15
- import { SharedDropdownController } from '../../shared/controllers/dropdown.controller.js';
14
+ import { NuralyUIBaseMixin } from '@nuralyui/common/mixins';
15
+ import { SharedDropdownController } from '@nuralyui/common/controllers';
16
16
  import { TimeFormat, TimePickerState, TimePickerPlacement, TimePeriod, TimeStep, EMPTY_TIME_VALUE, TIME_PICKER_EVENTS, } from './timepicker.types.js';
17
17
  // Import controllers
18
18
  import { TimePickerSelectionController } from './controllers/selection.controller.js';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timepicker.component.js","sourceRoot":"","sources":["../../../src/components/timepicker/timepicker.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, html, TemplateResult, nothing } from 'lit';\nimport { customElement, property, state } from 'lit/decorators.js';\nimport { classMap } from 'lit/directives/class-map.js';\n\n// Import UI components\nimport '../input/input.component.js';\nimport '../button/button.component.js';\nimport { INPUT_STATE } from '../input/input.types.js';\n\n// Import base mixin and types\nimport { NuralyUIBaseMixin } from '@nuralyui/common/mixins';\nimport { SharedDropdownController } from '@nuralyui/common/controllers';\nimport { DropdownHost } from '@nuralyui/common/controllers';\nimport {\n TimeValue,\n TimeFormat,\n TimePickerConfig,\n TimePickerState,\n TimePickerPlacement,\n TimeConstraints,\n TimePeriod,\n TimeStep,\n EMPTY_TIME_VALUE,\n TIME_PICKER_EVENTS,\n} from './timepicker.types.js';\n\n// Import controllers\nimport { TimePickerSelectionController } from './controllers/selection.controller.js';\nimport { TimePickerValidationController } from './controllers/validation.controller.js';\nimport { TimePickerFormattingController } from './controllers/formatting.controller.js';\n\n// Import utilities\nimport { TimeUtils } from './utils/time.utils.js';\n\n// Import styles\nimport { styles as timePickerStyles } from './timepicker.style.js';\n\n// Host interface for controllers\nexport interface TimePickerHost extends LitElement, DropdownHost {\n getCurrentTime(): TimeValue;\n setTime(time: TimeValue): void;\n formatTime(time: TimeValue): string;\n parseTime(timeString: string): TimeValue | null;\n getConfig(): TimePickerConfig;\n validateTime(time: TimeValue): boolean;\n requestUpdate(): void;\n}\n\n/**\n * A comprehensive time picker component that supports both 12-hour and 24-hour formats,\n * with optional seconds display and extensive customization options.\n * \n * @example\n * ```html\n * <nr-timepicker \n * value=\"14:30:00\" \n * format=\"24h\" \n * show-seconds\n * placeholder=\"Select time\">\n * </nr-timepicker>\n * ```\n */\n@customElement('nr-timepicker')\nexport class NrTimePickerElement extends NuralyUIBaseMixin(LitElement) implements TimePickerHost {\n static override styles = [timePickerStyles];\n\n // Properties\n @property({ type: String }) value = '';\n @property({ type: String }) name = '';\n @property({ type: String }) placeholder = 'Select time';\n @property({ type: String }) format: TimeFormat = TimeFormat.TwentyFourHour;\n @property({ type: Boolean, attribute: 'show-seconds' }) showSeconds = false;\n @property({ type: Boolean }) disabled = false;\n @property({ type: Boolean }) readonly = false;\n @property({ type: Boolean }) required = false;\n @property({ type: String, attribute: 'min-time' }) minTime?: string;\n @property({ type: String, attribute: 'max-time' }) maxTime?: string;\n @property({ type: Array, attribute: 'disabled-times' }) disabledTimes?: string[];\n @property({ type: Array, attribute: 'enabled-times' }) enabledTimes?: string[];\n @property({ type: String, attribute: 'helper-text' }) helperText = '';\n @property({ type: String }) label = '';\n @property({ type: String }) size: 'small' | 'medium' | 'large' = 'medium';\n @property({ type: String }) variant: 'outlined' | 'filled' | 'standard' = 'outlined';\n @property({ type: String }) placement: TimePickerPlacement = TimePickerPlacement.Bottom;\n \n /** Scroll behavior for dropdown navigation - 'instant' for immediate, 'smooth' for animated, 'auto' for browser default */\n @property({ type: String, attribute: 'scroll-behavior' }) scrollBehavior: 'auto' | 'instant' | 'smooth' = 'instant';\n\n // State\n @state() private inputValue = '';\n @state() private state: TimePickerState = TimePickerState.Default;\n @state() private validationMessage = '';\n\n // Controllers\n private dropdownController = new SharedDropdownController(this);\n private selectionController = new TimePickerSelectionController(this);\n private validationController = new TimePickerValidationController(this);\n private formattingController = new TimePickerFormattingController(this);\n\n constructor() {\n super();\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.updateConstraints();\n if (this.value) {\n this.setTimeFromValue(this.value);\n }\n \n // Add global click listener to close dropdown when clicking outside\n this.addEventListener('click', this.handleComponentClick.bind(this));\n document.addEventListener('click', this.handleDocumentClick.bind(this));\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n // Clean up global event listeners\n document.removeEventListener('click', this.handleDocumentClick.bind(this));\n }\n\n override updated(changedProperties: Map<string, any>): void {\n super.updated(changedProperties);\n\n if (changedProperties.has('value') && this.value !== this.inputValue) {\n this.setTimeFromValue(this.value);\n // Scroll to the selected time when value changes from outside\n if (this.dropdownController.isOpen) {\n setTimeout(() => {\n this.scrollToSelectedTime();\n }, 50);\n }\n }\n\n if (this.shouldUpdateConstraints(changedProperties)) {\n this.updateConstraints();\n }\n\n // Set up dropdown elements\n this.setupDropdownElements();\n }\n\n private setupDropdownElements(): void {\n const dropdown = this.shadowRoot?.querySelector('.time-picker__dropdown') as HTMLElement;\n const trigger = this.shadowRoot?.querySelector('.time-picker__input-wrapper') as HTMLElement;\n \n if (dropdown && trigger) {\n this.dropdownController.setElements(dropdown, trigger);\n }\n }\n\n override render(): TemplateResult {\n const wrapperClasses = {\n 'time-picker': true,\n 'time-picker--open': this.dropdownController.isOpen,\n 'time-picker--disabled': this.disabled,\n 'time-picker--readonly': this.readonly,\n 'time-picker--error': this.state === TimePickerState.Error,\n };\n\n return html`\n <div class=\"${classMap(wrapperClasses)}\" data-theme=\"${this.currentTheme}\" part=\"wrapper\">\n ${this.renderLabel()}\n ${this.renderInput()}\n ${this.renderDropdown()}\n ${this.renderHelperText()}\n </div>\n `;\n }\n\n // Public API methods\n open(): void { \n this.dropdownController.open();\n // Scroll to selected time when opening programmatically\n setTimeout(() => {\n this.scrollToSelectedTime();\n }, 50);\n }\n close(): void { this.dropdownController.close(); }\n clear(): void { \n this.value = '';\n this.inputValue = '';\n this.selectionController.clearSelection();\n }\n \n setToNow(): void {\n const now = TimeUtils.getCurrentTime();\n this.selectionController.selectTime(now);\n this.updateInputValue();\n // Scroll to the newly selected time if dropdown is open\n if (this.dropdownController.isOpen) {\n setTimeout(() => {\n this.scrollToSelectedTime();\n }, 10);\n }\n }\n\n validate(): boolean {\n const selectedTime = this.selectionController.getSelectedTime();\n if (!selectedTime) return true;\n return this.validationController.validateConstraints(selectedTime);\n }\n\n validateTime(time: TimeValue): boolean {\n return this.validationController.validateConstraints(time);\n }\n\n // Helper methods for checking if individual time components are valid\n private isHourValid(hour: number, selectedTime: TimeValue): boolean {\n const testTime = { ...selectedTime, hours: hour };\n return this.validateTime(testTime);\n }\n\n private isMinuteValid(minute: number, selectedTime: TimeValue): boolean {\n const testTime = { ...selectedTime, minutes: minute };\n return this.validateTime(testTime);\n }\n\n private isSecondValid(second: number, selectedTime: TimeValue): boolean {\n const testTime = { ...selectedTime, seconds: second };\n return this.validateTime(testTime);\n }\n\n // Private methods\n private renderLabel(): TemplateResult | typeof nothing {\n if (!this.label) return nothing;\n\n return html`\n <label class=\"time-picker__label\" part=\"label\" for=\"time-input\">\n ${this.label}\n ${this.required ? html`<span class=\"time-picker__required\">*</span>` : nothing}\n </label>\n `;\n }\n\n private renderInput(): TemplateResult {\n const formatPlaceholder = this.getFormatPlaceholder();\n \n return html`\n <div class=\"time-picker__input-wrapper\" part=\"input-wrapper\">\n <nr-input\n id=\"time-input\"\n part=\"input\"\n type=\"calendar\"\n .value=\"${this.inputValue}\"\n placeholder=\"${this.placeholder || formatPlaceholder}\"\n ?disabled=\"${this.disabled}\"\n ?readonly=\"${false}\"\n ?required=\"${this.required}\"\n .state=\"${this.state === TimePickerState.Error ? INPUT_STATE.Error : INPUT_STATE.Default}\"\n @click=\"${this.handleInputClick}\"\n @nr-input=\"${this.handleInputChange}\"\n @nr-blur=\"${this.handleInputBlur}\"\n >\n </nr-input>\n </div>\n `;\n }\n\n private renderDropdown(): TemplateResult | typeof nothing {\n if (!this.dropdownController.isOpen) return nothing;\n\n return html`\n <div \n class=\"time-picker__dropdown time-picker__dropdown--open\" \n part=\"dropdown\"\n @click=\"${this.handleDropdownClick}\"\n >\n ${this.renderColumnPicker()}\n ${this.renderActions()}\n </div>\n `;\n }\n\n private renderColumnPicker(): TemplateResult {\n const selectedTime = this.selectionController.getSelectedTime();\n const config = this.getConfig();\n\n return html`\n <div class=\"time-picker__columns\" part=\"columns\">\n ${this.renderHourColumn(selectedTime, config)}\n ${this.renderMinuteColumn(selectedTime)}\n ${this.showSeconds ? this.renderSecondColumn(selectedTime) : nothing}\n </div>\n `;\n }\n\n private renderHourColumn(selectedTime: TimeValue | null, config: TimePickerConfig): TemplateResult {\n const hours = config.format === TimeFormat.TwelveHour \n ? Array.from({ length: 12 }, (_, i) => i === 0 ? 12 : i)\n : Array.from({ length: 24 }, (_, i) => i);\n\n const displayHour = selectedTime && config.format === TimeFormat.TwelveHour\n ? this.formattingController.formatHours(selectedTime.hours)\n : selectedTime?.hours;\n\n return html`\n <div class=\"time-picker__column\" part=\"hour-column\">\n <div class=\"time-picker__column-list\">\n ${hours.map(hour => {\n // Convert display hour to actual hour for validation\n let actualHour = hour;\n if (config.format === TimeFormat.TwelveHour && selectedTime) {\n const currentPeriod = this.formattingController.getPeriod(selectedTime.hours);\n if (hour === 12) {\n actualHour = currentPeriod === TimePeriod.AM ? 0 : 12;\n } else {\n actualHour = currentPeriod === TimePeriod.AM ? hour : hour + 12;\n }\n }\n \n // Use EMPTY_TIME_VALUE for validation when no time is selected\n const timeForValidation = selectedTime || EMPTY_TIME_VALUE;\n const isValid = this.isHourValid(actualHour, timeForValidation);\n const isSelected = selectedTime ? hour === displayHour : false;\n \n return html`\n <div\n class=\"time-picker__column-item ${isSelected ? 'time-picker__column-item--selected' : ''} ${!isValid ? 'time-picker__column-item--disabled' : ''}\"\n @click=\"${isValid ? () => this.handleHourSelect(hour, config.format) : null}\"\n >\n ${hour.toString().padStart(2, '0')}\n </div>\n `;\n })}\n </div>\n </div>\n `;\n }\n\n private renderMinuteColumn(selectedTime: TimeValue | null): TemplateResult {\n const minutes = Array.from({ length: 60 }, (_, i) => i);\n\n return html`\n <div class=\"time-picker__column\" part=\"minute-column\">\n <div class=\"time-picker__column-list\">\n ${minutes.map(minute => {\n // Use EMPTY_TIME_VALUE for validation when no time is selected\n const timeForValidation = selectedTime || EMPTY_TIME_VALUE;\n const isValid = this.isMinuteValid(minute, timeForValidation);\n const isSelected = selectedTime ? minute === selectedTime.minutes : false;\n \n return html`\n <div\n class=\"time-picker__column-item ${isSelected ? 'time-picker__column-item--selected' : ''} ${!isValid ? 'time-picker__column-item--disabled' : ''}\"\n @click=\"${isValid ? () => this.handleMinuteSelect(minute) : null}\"\n >\n ${minute.toString().padStart(2, '0')}\n </div>\n `;\n })}\n </div>\n </div>\n `;\n }\n\n private renderSecondColumn(selectedTime: TimeValue | null): TemplateResult {\n const seconds = Array.from({ length: 60 }, (_, i) => i);\n\n return html`\n <div class=\"time-picker__column\" part=\"second-column\">\n <div class=\"time-picker__column-list\">\n ${seconds.map(second => {\n // Use EMPTY_TIME_VALUE for validation when no time is selected\n const timeForValidation = selectedTime || EMPTY_TIME_VALUE;\n const isValid = this.isSecondValid(second, timeForValidation);\n const isSelected = selectedTime ? second === selectedTime.seconds : false;\n \n return html`\n <div\n class=\"time-picker__column-item ${isSelected ? 'time-picker__column-item--selected' : ''} ${!isValid ? 'time-picker__column-item--disabled' : ''}\"\n @click=\"${isValid ? () => this.handleSecondSelect(second) : null}\"\n >\n ${second.toString().padStart(2, '0')}\n </div>\n `;\n })}\n </div>\n </div>\n `;\n }\n\n private renderActions(): TemplateResult {\n return html`\n <div class=\"time-picker__actions\">\n <nr-button\n type=\"ghost\"\n size=\"small\"\n @click=\"${() => this.setToNow()}\"\n >\n Now\n </nr-button>\n <nr-button\n type=\"primary\"\n size=\"small\"\n @click=\"${this.handleOkClick}\"\n >\n OK\n </nr-button>\n </div>\n `;\n }\n\n private renderHelperText(): TemplateResult | typeof nothing {\n const text = this.validationMessage || this.helperText;\n if (!text) return nothing;\n\n const isError = this.state === TimePickerState.Error || !!this.validationMessage;\n\n return html`\n <div class=\"time-picker__helper-text ${isError ? 'time-picker__helper-text--error' : ''}\" part=\"helper-text\">\n ${text}\n </div>\n `;\n }\n\n private scrollToSelectedTime(): void {\n try {\n const selectedTime = this.selectionController.getSelectedTime();\n if (!selectedTime) return;\n\n // Scroll each column to the selected value\n this.scrollToSelectedHour(selectedTime);\n this.scrollToSelectedMinute(selectedTime);\n if (this.showSeconds) {\n this.scrollToSelectedSecond(selectedTime);\n }\n } catch (error) {\n console.warn('Failed to scroll to selected time:', error);\n }\n }\n\n private scrollToSelectedHour(selectedTime: TimeValue): void {\n const config = this.getConfig();\n const hourColumn = this.shadowRoot?.querySelector('.time-picker__column:first-child .time-picker__column-list') as HTMLElement;\n \n if (!hourColumn) return;\n\n let displayHour: number;\n if (config.format === TimeFormat.TwelveHour) {\n // Convert 24-hour to 12-hour format\n if (selectedTime.hours === 0 || selectedTime.hours === 12) {\n displayHour = 12;\n } else {\n displayHour = selectedTime.hours > 12 ? selectedTime.hours - 12 : selectedTime.hours;\n }\n } else {\n displayHour = selectedTime.hours;\n }\n\n // Find the selected hour element\n const selectedHourElement = hourColumn.querySelector(`.time-picker__column-item:nth-child(${this.getHourIndex(displayHour, config.format) + 1})`) as HTMLElement;\n \n if (selectedHourElement) {\n selectedHourElement.scrollIntoView({\n behavior: this.scrollBehavior as ScrollBehavior,\n block: 'center',\n inline: 'nearest'\n });\n }\n }\n\n private scrollToSelectedMinute(selectedTime: TimeValue): void {\n const minuteColumn = this.shadowRoot?.querySelector('.time-picker__column:nth-child(2) .time-picker__column-list') as HTMLElement;\n \n if (!minuteColumn) return;\n\n // Find the selected minute element (minute + 1 because nth-child is 1-indexed)\n const selectedMinuteElement = minuteColumn.querySelector(`.time-picker__column-item:nth-child(${selectedTime.minutes + 1})`) as HTMLElement;\n \n if (selectedMinuteElement) {\n selectedMinuteElement.scrollIntoView({\n behavior: this.scrollBehavior as ScrollBehavior,\n block: 'center',\n inline: 'nearest'\n });\n }\n }\n\n private scrollToSelectedSecond(selectedTime: TimeValue): void {\n const secondColumn = this.shadowRoot?.querySelector('.time-picker__column:nth-child(3) .time-picker__column-list') as HTMLElement;\n \n if (!secondColumn) return;\n\n // Find the selected second element (second + 1 because nth-child is 1-indexed)\n const selectedSecondElement = secondColumn.querySelector(`.time-picker__column-item:nth-child(${selectedTime.seconds + 1})`) as HTMLElement;\n \n if (selectedSecondElement) {\n selectedSecondElement.scrollIntoView({\n behavior: this.scrollBehavior as ScrollBehavior,\n block: 'center',\n inline: 'nearest'\n });\n }\n }\n\n private getHourIndex(displayHour: number, format: TimeFormat): number {\n if (format === TimeFormat.TwelveHour) {\n // For 12-hour format: 12, 1, 2, ..., 11\n return displayHour === 12 ? 0 : displayHour;\n } else {\n // For 24-hour format: 0, 1, 2, ..., 23\n return displayHour;\n }\n }\n\n // Event handlers\n private handleComponentClick(e: Event): void {\n // Stop propagation to prevent document click handler from firing\n e.stopPropagation();\n }\n\n private handleDocumentClick(e: Event): void {\n // Close dropdown when clicking outside the component\n if (this.dropdownController.isOpen) {\n const target = e.target as Element;\n const isClickInsideComponent = this.contains(target) || \n this.shadowRoot?.contains(target);\n \n if (!isClickInsideComponent) {\n this.dropdownController.close();\n this.dispatchEvent(new CustomEvent(TIME_PICKER_EVENTS.BLUR, {\n bubbles: true,\n composed: true,\n }));\n }\n }\n }\n\n private handleDropdownClick(e: Event): void {\n // Prevent dropdown from closing when clicking inside\n e.stopPropagation();\n }\n\n private handleOkClick(): void {\n // Close the dropdown and emit final change event\n this.dropdownController.close();\n const selectedTime = this.selectionController.getSelectedTime();\n \n if (selectedTime) {\n this.dispatchEvent(new CustomEvent(TIME_PICKER_EVENTS.TIME_CHANGE, {\n bubbles: true,\n composed: true,\n detail: { value: this.value, time: selectedTime }\n }));\n }\n \n this.dispatchEvent(new CustomEvent(TIME_PICKER_EVENTS.BLUR, {\n bubbles: true,\n composed: true,\n }));\n }\n\n private handleInputBlur(): void {\n // Only close dropdown if clicking outside the component\n setTimeout(() => {\n const activeElement = document.activeElement;\n const isWithinComponent = this.contains(activeElement) || \n this.shadowRoot?.contains(activeElement);\n \n if (!isWithinComponent) {\n this.dispatchEvent(new CustomEvent(TIME_PICKER_EVENTS.BLUR, {\n bubbles: true,\n composed: true,\n }));\n }\n }, 150);\n }\n\n private handleInputClick(e: Event): void {\n e.preventDefault();\n e.stopPropagation();\n \n if (!this.disabled) {\n // Only open if closed - don't close when clicking input\n if (!this.dropdownController.isOpen) {\n this.dropdownController.open();\n // Scroll to selected items when dropdown opens\n setTimeout(() => {\n this.scrollToSelectedTime();\n }, 50);\n this.dispatchEvent(new CustomEvent(TIME_PICKER_EVENTS.FOCUS, {\n bubbles: true,\n composed: true,\n }));\n }\n }\n }\n\n private handleInputChange(e: CustomEvent): void {\n if (this.disabled) return;\n \n const inputValue = e.detail?.value || '';\n this.inputValue = inputValue;\n \n // Parse the input value and update the time selection\n const parsedTime = this.formattingController.parseInputValue(inputValue);\n if (parsedTime) {\n // Validate the parsed time\n if (this.validateTime(parsedTime)) {\n this.selectionController.selectTime(parsedTime);\n this.value = this.formattingController.formatForInput(parsedTime);\n this.state = TimePickerState.Default;\n \n // Scroll to the newly selected time if dropdown is open\n if (this.dropdownController.isOpen) {\n setTimeout(() => {\n this.scrollToSelectedTime();\n }, 10);\n }\n \n // Emit change event\n this.dispatchEvent(new CustomEvent(TIME_PICKER_EVENTS.TIME_CHANGE, {\n bubbles: true,\n composed: true,\n detail: { value: this.value, time: parsedTime }\n }));\n } else {\n // Invalid time - show error state but don't clear the input\n this.state = TimePickerState.Error;\n }\n } else if (inputValue === '') {\n // Empty input - clear the selection\n this.selectionController.clearSelection();\n this.value = '';\n this.state = TimePickerState.Default;\n \n this.dispatchEvent(new CustomEvent(TIME_PICKER_EVENTS.TIME_CHANGE, {\n bubbles: true,\n composed: true,\n detail: { value: '', time: null }\n }));\n } else {\n // Invalid format - show error state\n this.state = TimePickerState.Error;\n }\n \n // Request update to re-render with new state\n this.requestUpdate();\n }\n\n private handleHourSelect(hour: number, format: TimeFormat): void {\n const selectedTime = this.selectionController.getSelectedTime() || TimeUtils.getCurrentTime();\n let adjustedHour = hour;\n \n if (format === TimeFormat.TwelveHour) {\n const currentPeriod = this.formattingController.getPeriod(selectedTime.hours);\n if (hour === 12) {\n adjustedHour = currentPeriod === TimePeriod.AM ? 0 : 12;\n } else {\n adjustedHour = currentPeriod === TimePeriod.AM ? hour : hour + 12;\n }\n }\n \n const updatedTime = { ...selectedTime, hours: adjustedHour };\n if (this.validateTime(updatedTime)) {\n this.selectionController.selectTime(updatedTime);\n this.updateInputValue();\n // No scrolling when clicking on individual items\n }\n }\n\n private handleMinuteSelect(minute: number): void {\n const selectedTime = this.selectionController.getSelectedTime() || TimeUtils.getCurrentTime();\n const updatedTime = { ...selectedTime, minutes: minute };\n \n if (this.validateTime(updatedTime)) {\n this.selectionController.selectTime(updatedTime);\n this.updateInputValue();\n // No scrolling when clicking on individual items\n }\n }\n\n private handleSecondSelect(second: number): void {\n const selectedTime = this.selectionController.getSelectedTime() || TimeUtils.getCurrentTime();\n const updatedTime = { ...selectedTime, seconds: second };\n \n if (this.validateTime(updatedTime)) {\n this.selectionController.selectTime(updatedTime);\n this.updateInputValue();\n // No scrolling when clicking on individual items\n }\n }\n\n // Utility methods\n private shouldUpdateConstraints(changedProperties: Map<string, any>): boolean {\n return (\n changedProperties.has('minTime') ||\n changedProperties.has('maxTime') ||\n changedProperties.has('disabledTimes') ||\n changedProperties.has('enabledTimes')\n );\n }\n\n private updateConstraints(): void {\n const constraints: TimeConstraints = {\n minTime: this.minTime,\n maxTime: this.maxTime,\n disabledTimes: this.disabledTimes || [],\n enabledTimes: this.enabledTimes,\n };\n\n this.validationController.setConstraints(constraints);\n }\n\n private setTimeFromValue(value: string): void {\n if (this.selectionController.setTimeFromString(value)) {\n this.inputValue = value;\n this.requestUpdate();\n // Scroll to the time when setting from value (if dropdown is open)\n if (this.dropdownController.isOpen) {\n setTimeout(() => {\n this.scrollToSelectedTime();\n }, 50);\n }\n }\n }\n\n private updateInputValue(): void {\n const selectedTime = this.selectionController.getSelectedTime();\n if (selectedTime) {\n const formattedValue = this.formattingController.formatForDisplay(selectedTime);\n this.inputValue = formattedValue;\n this.value = formattedValue;\n \n this.dispatchEvent(new CustomEvent(TIME_PICKER_EVENTS.TIME_CHANGE, {\n detail: { value: formattedValue, time: selectedTime },\n bubbles: true,\n composed: true,\n }));\n }\n }\n\n getConfig(): TimePickerConfig {\n return {\n format: this.format,\n showSeconds: this.showSeconds,\n step: {\n hours: TimeStep.One,\n minutes: TimeStep.One,\n seconds: TimeStep.One,\n },\n use12HourClock: this.format === TimeFormat.TwelveHour,\n minuteInterval: 1,\n secondInterval: 1,\n };\n }\n\n // TimePickerHost interface implementation\n getCurrentTime(): TimeValue {\n return this.selectionController.getSelectedTime() || EMPTY_TIME_VALUE;\n }\n\n setTime(time: TimeValue): void {\n this.selectionController.selectTime(time);\n this.updateInputValue();\n // Scroll to the newly selected time if dropdown is open\n if (this.dropdownController.isOpen) {\n setTimeout(() => {\n this.scrollToSelectedTime();\n }, 10);\n }\n }\n\n formatTime(time: TimeValue): string {\n return this.formattingController.formatForDisplay(time);\n }\n\n /**\n * Get appropriate placeholder text based on format\n */\n private getFormatPlaceholder(): string {\n if (this.format === TimeFormat.TwelveHour) {\n return this.showSeconds ? 'HH:MM:SS AM/PM' : 'HH:MM AM/PM';\n } else {\n return this.showSeconds ? 'HH:MM:SS' : 'HH:MM';\n }\n }\n\n parseTime(timeString: string): TimeValue | null {\n return this.formattingController.parseInputValue(timeString);\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nr-timepicker': NrTimePickerElement;\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timepicker.constants.js","sourceRoot":"","sources":["../../../src/components/timepicker/timepicker.constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAE7D;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,MAAM,EAAE,UAAU,CAAC,cAAc;IACjC,WAAW,EAAE,KAAK;IAClB,cAAc,EAAE,CAAC;IACjB,cAAc,EAAE,CAAC;IACjB,cAAc,EAAE,KAAK;CACb,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,OAAO,CAAC;AAC3C,MAAM,CAAC,MAAM,gCAAgC,GAAG,UAAU,CAAC;AAC3D,MAAM,CAAC,MAAM,uBAAuB,GAAG,SAAS,CAAC;AACjD,MAAM,CAAC,MAAM,oCAAoC,GAAG,YAAY,CAAC;AAEjE;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,kBAAkB,CAAC;AAEtD;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,6BAA6B,CAAC;AAEnE;;GAEG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,gBAAgB,EAAE,sDAAsD;IACxE,WAAW,EAAE,mEAAmE;CACxE,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,EAAE;IACf,WAAW,EAAE,CAAC;IACd,WAAW,EAAE,EAAE;IACf,UAAU,EAAE,CAAC;IACb,UAAU,EAAE,EAAE;IACd,UAAU,EAAE,CAAC;IACb,UAAU,EAAE,EAAE;CACN,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,KAAK,EAAE,QAAQ,CAAC,GAAG;IACnB,OAAO,EAAE,QAAQ,CAAC,GAAG;IACrB,OAAO,EAAE,QAAQ,CAAC,GAAG;CACb,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,SAAS,EAAE,aAAa;IACxB,KAAK,EAAE,oBAAoB;IAC3B,KAAK,EAAE,oBAAoB;IAC3B,QAAQ,EAAE,uBAAuB;IACjC,IAAI,EAAE,mBAAmB;IACzB,MAAM,EAAE,qBAAqB;IAC7B,MAAM,EAAE,qBAAqB;IAC7B,MAAM,EAAE,qBAAqB;IAC7B,MAAM,EAAE,qBAAqB;IAC7B,SAAS,EAAE,wBAAwB;CAC3B,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,EAAE;IACV,gBAAgB,EAAE,EAAE;IACpB,kBAAkB,EAAE,EAAE;IACtB,kBAAkB,EAAE,EAAE;CACd,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { TimeFormat, TimeStep } from './timepicker.types.js';\n\n/**\n * Default time picker configuration\n */\nexport const DEFAULT_TIME_CONFIG = {\n format: TimeFormat.TwentyFourHour,\n showSeconds: false,\n minuteInterval: 1,\n secondInterval: 1,\n use12HourClock: false,\n} as const;\n\n/**\n * Default time display formats\n */\nexport const DEFAULT_TIME_FORMAT = 'HH:mm';\nexport const DEFAULT_TIME_FORMAT_WITH_SECONDS = 'HH:mm:ss';\nexport const DEFAULT_12H_TIME_FORMAT = 'hh:mm A';\nexport const DEFAULT_12H_TIME_FORMAT_WITH_SECONDS = 'hh:mm:ss A';\n\n/**\n * Time input field ID\n */\nexport const TIME_INPUT_FIELD_ID = 'time-input-field';\n\n/**\n * Clock container CSS class\n */\nexport const CLOCK_CONTAINER_CLASS = 'time-picker-clock-container';\n\n/**\n * Time validation patterns\n */\nexport const TIME_VALIDATION_PATTERNS = {\n TWENTY_FOUR_HOUR: /^([01]?[0-9]|2[0-3]):([0-5]?[0-9])(:([0-5]?[0-9]))?$/,\n TWELVE_HOUR: /^(0?[1-9]|1[0-2]):([0-5]?[0-9])(:([0-5]?[0-9]))?\\s?(AM|PM|am|pm)$/,\n} as const;\n\n/**\n * Time boundaries\n */\nexport const TIME_BOUNDARIES = {\n MIN_HOUR_24: 0,\n MAX_HOUR_24: 23,\n MIN_HOUR_12: 1,\n MAX_HOUR_12: 12,\n MIN_MINUTE: 0,\n MAX_MINUTE: 59,\n MIN_SECOND: 0,\n MAX_SECOND: 59,\n} as const;\n\n/**\n * Default step values\n */\nexport const DEFAULT_STEPS = {\n HOURS: TimeStep.One,\n MINUTES: TimeStep.One,\n SECONDS: TimeStep.One,\n} as const;\n\n/**\n * Time picker CSS classes\n */\nexport const TIME_PICKER_CLASSES = {\n CONTAINER: 'time-picker',\n INPUT: 'time-picker__input',\n CLOCK: 'time-picker__clock',\n DROPDOWN: 'time-picker__dropdown',\n HOUR: 'time-picker__hour',\n MINUTE: 'time-picker__minute',\n SECOND: 'time-picker__second',\n PERIOD: 'time-picker__period',\n BUTTON: 'time-picker__button',\n SEPARATOR: 'time-picker__separator',\n} as const;\n\n/**\n * Clock face constants\n */\nexport const CLOCK_FACE = {\n RADIUS: 100,\n CENTER: 50,\n HOUR_HAND_LENGTH: 30,\n MINUTE_HAND_LENGTH: 40,\n SECOND_HAND_LENGTH: 45,\n} as const;\n"]}
@@ -4,84 +4,20 @@
4
4
  * SPDX-License-Identifier: MIT
5
5
  */
6
6
  import { css } from 'lit';
7
+ import { styleVariables } from './timepicker.style.variables.js';
7
8
  export const styles = css `
9
+ ${styleVariables}
8
10
  :host {
9
- /* Ant Design inspired color palette - matching select component */
10
- --timepicker-font-family: var(--hybrid-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif);
11
- --timepicker-font-size: var(--hybrid-font-size-medium, 14px);
12
- --timepicker-line-height: var(--hybrid-line-height-medium, 1.5715);
13
-
14
- /* Color system matching select component exactly */
15
- --timepicker-background-color: var(--hybrid-background-color, #ffffff);
16
- --timepicker-text-color: var(--hybrid-text-color, #262626);
17
- --timepicker-text-color-secondary: var(--hybrid-text-color-secondary, #8c8c8c);
18
- --timepicker-text-color-disabled: var(--hybrid-text-color-disabled, #8c8c8c);
19
- --timepicker-border-color: var(--hybrid-border-color, #d9d9d9);
20
- --timepicker-border-color-hover: var(--hybrid-border-color-hover, #1677ff);
21
- --timepicker-focus-color: var(--hybrid-focus-color, #1677ff);
22
- --timepicker-error-color: var(--hybrid-error-color, #ff4d4f);
23
- --timepicker-warning-color: var(--hybrid-warning-color, #faad14);
24
- --timepicker-success-color: var(--hybrid-success-color, #52c41a);
25
- --timepicker-disabled-bg: var(--hybrid-disabled-bg, #f5f5f5);
26
-
27
- /* Select component matching colors */
28
- --timepicker-primary-color: #1677ff;
29
- --timepicker-primary-color-hover: #1677ff;
30
- --timepicker-primary-color-active: #1677ff;
31
- --timepicker-control-item-bg-hover: #f5f5f5;
32
- --timepicker-control-item-bg-active: #e6f7ff;
33
-
34
- /* Sizes following Ant Design */
35
- --timepicker-border-radius: var(--hybrid-border-radius, 6px);
36
- --timepicker-padding: var(--hybrid-padding-medium, 4px 11px);
37
- --timepicker-height: var(--hybrid-input-height, 32px);
38
- --timepicker-font-weight: 400;
39
-
40
- /* Clock specific - Ant Design inspired */
41
- --timepicker-clock-size: 224px;
42
- --timepicker-clock-background: var(--hybrid-background-color, #ffffff);
43
- --timepicker-clock-border: var(--hybrid-border-color, #f0f0f0);
44
- --timepicker-clock-face-color: var(--hybrid-text-color-muted, rgba(0, 0, 0, 0.65));
45
- --timepicker-clock-hand-color: var(--timepicker-primary-color);
46
- --timepicker-clock-number-color: var(--hybrid-text-color, rgba(0, 0, 0, 0.88));
47
-
48
- /* Shadows */
49
- --timepicker-box-shadow: 0 6px 16px 0 rgba(0, 0, 0, 0.08), 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);
50
- --timepicker-box-shadow-secondary: 0 2px 8px rgba(0, 0, 0, 0.15);
51
-
52
11
  display: block;
53
- font-family: var(--timepicker-font-family);
54
- font-size: var(--timepicker-font-size);
55
- line-height: var(--timepicker-line-height);
56
- font-weight: var(--timepicker-font-weight);
57
- }
58
-
59
- /* Light theme styles using data-theme attribute */
60
- .time-picker[data-theme="light"] {
61
- /* Override colors for light theme */
62
- --timepicker-background-color: #ffffff;
63
- --timepicker-text-color: #262626;
64
- --timepicker-text-color-secondary: #8c8c8c;
65
- --timepicker-border-color: #d9d9d9;
66
- --timepicker-border-color-hover: #1677ff;
67
- --timepicker-focus-color: #1677ff;
68
- --timepicker-primary-color: #1677ff;
69
- --timepicker-control-item-bg-hover: #f5f5f5;
70
- --timepicker-control-item-bg-active: #e6f7ff;
71
- }
72
-
73
- /* Dark theme styles using data-theme attribute */
74
- .time-picker[data-theme="dark"] {
75
- /* Override colors for dark theme */
76
- --timepicker-background-color: #262626;
77
- --timepicker-text-color: #ffffff;
78
- --timepicker-text-color-secondary: #8c8c8c;
79
- --timepicker-border-color: #424242;
80
- --timepicker-border-color-hover: #4096ff;
81
- --timepicker-focus-color: #4096ff;
82
- --timepicker-primary-color: #4096ff;
83
- --timepicker-control-item-bg-hover: #393939;
84
- --timepicker-control-item-bg-active: #1e3a5f;
12
+ font-family: var(--nuraly-timepicker-local-font-family);
13
+ font-size: var(--nuraly-timepicker-local-font-size);
14
+ font-weight: var(--nuraly-timepicker-local-font-weight);
15
+ }
16
+
17
+ /* Host attribute selectors for configuration */
18
+ :host([disabled]) {
19
+ opacity: var(--nuraly-timepicker-local-disabled-opacity);
20
+ pointer-events: none;
85
21
  }
86
22
 
87
23
  .time-picker {
@@ -92,21 +28,21 @@ export const styles = css `
92
28
 
93
29
  /* Input wrapper hover and focus states matching select component */
94
30
  .time-picker__input-wrapper:hover:not(.time-picker--disabled) nr-input {
95
- --hybrid-input-border-color: var(--timepicker-border-color-hover);
31
+ --nuraly-input-border-color: var(--nuraly-timepicker-local-border-color-hover);
96
32
  }
97
33
 
98
34
  .time-picker__input-wrapper:focus-within nr-input,
99
35
  .time-picker--open .time-picker__input-wrapper nr-input,
100
36
  .time-picker__input-wrapper nr-input:focus {
101
- --hybrid-input-border-color: var(--timepicker-focus-color);
102
- --hybrid-input-box-shadow: 0 0 0 2px var(--timepicker-focus-color)33;
37
+ --nuraly-input-border-color: var(--nuraly-timepicker-local-focus-color);
38
+ --nuraly-input-box-shadow: 0 0 0 2px var(--nuraly-timepicker-local-focus-color)33;
103
39
  }
104
40
 
105
41
  /* Disabled state styling */
106
42
  .time-picker--disabled .time-picker__input-wrapper nr-input {
107
- --hybrid-input-background-color: var(--timepicker-disabled-bg);
108
- --hybrid-input-border-color: var(--timepicker-border-color);
109
- --hybrid-input-text-color: var(--timepicker-text-color-disabled);
43
+ --nuraly-input-background-color: var(--nuraly-timepicker-local-disabled-bg);
44
+ --nuraly-input-border-color: var(--nuraly-timepicker-local-border-color);
45
+ --nuraly-input-text-color: var(--nuraly-timepicker-local-text-color-disabled);
110
46
  cursor: not-allowed;
111
47
  opacity: 0.6;
112
48
  }
@@ -127,26 +63,26 @@ export const styles = css `
127
63
  min-width: auto !important;
128
64
  width: 24px !important;
129
65
  height: 24px !important;
130
- border-radius: 4px !important;
66
+ border-radius: var(--nuraly-timepicker-local-border-radius-sm) !important;
131
67
  }
132
68
 
133
69
  .time-picker__trigger svg {
134
70
  width: 16px;
135
71
  height: 16px;
136
- color: var(--timepicker-text-color-secondary);
72
+ color: var(--nuraly-timepicker-local-text-color-secondary);
137
73
  transition: color 0.2s ease;
138
74
  }
139
75
 
140
76
  .time-picker__trigger:hover svg {
141
- color: var(--timepicker-primary-color);
77
+ color: var(--nuraly-timepicker-local-primary-color);
142
78
  }
143
79
 
144
80
  .time-picker__trigger:hover {
145
- color: var(--timepicker-primary-color);
81
+ color: var(--nuraly-timepicker-local-primary-color);
146
82
  }
147
83
 
148
84
  .time-picker__trigger:disabled {
149
- color: var(--timepicker-text-color-disabled);
85
+ color: var(--nuraly-timepicker-local-text-color-disabled);
150
86
  cursor: not-allowed;
151
87
  }
152
88
 
@@ -158,15 +94,12 @@ export const styles = css `
158
94
  .time-picker__dropdown {
159
95
  position: absolute;
160
96
  z-index: 1000;
161
- background-color: var(--timepicker-background-color);
97
+ background-color: var(--nuraly-timepicker-local-background-color);
162
98
  backdrop-filter: blur(12px);
163
99
  -webkit-backdrop-filter: blur(12px);
164
- border: 1px solid var(--timepicker-border-color);
165
- border-radius: 8px;
166
- box-shadow:
167
- 0 6px 16px 0 rgba(0, 0, 0, 0.08),
168
- 0 3px 6px -4px rgba(0, 0, 0, 0.12),
169
- 0 9px 28px 8px rgba(0, 0, 0, 0.05);
100
+ border: 1px solid var(--nuraly-timepicker-local-border-color);
101
+ border-radius: var(--nuraly-timepicker-local-border-radius);
102
+ box-shadow: var(--nuraly-timepicker-local-box-shadow);
170
103
  width: 100%;
171
104
  min-width: 180px;
172
105
  /* Animation and positioning - simplified to match select */
@@ -215,8 +148,8 @@ export const styles = css `
215
148
  display: flex;
216
149
  max-height: 216px;
217
150
  overflow: hidden;
218
- border-radius: 8px;
219
- background: var(--timepicker-background-color);
151
+ border-radius: var(--nuraly-timepicker-local-border-radius);
152
+ background: var(--nuraly-timepicker-local-background-color);
220
153
  padding: 4px 0;
221
154
  }
222
155
 
@@ -255,12 +188,12 @@ export const styles = css `
255
188
  .time-picker__column-list::-webkit-scrollbar-track {
256
189
  background: rgba(0, 0, 0, 0.04);
257
190
  margin: 8px 0;
258
- border-radius: 3px;
191
+ border-radius: var(--nuraly-timepicker-local-border-radius-sm);
259
192
  }
260
193
 
261
194
  .time-picker__column-list::-webkit-scrollbar-thumb {
262
195
  background-color: rgba(0, 0, 0, 0.2);
263
- border-radius: 3px;
196
+ border-radius: var(--nuraly-timepicker-local-border-radius-sm);
264
197
  transition: background-color 0.2s ease;
265
198
  /* Ensure thumb is always visible */
266
199
  min-height: 20px;
@@ -281,47 +214,47 @@ export const styles = css `
281
214
  align-items: center;
282
215
  justify-content: center;
283
216
  padding: 4px 8px;
284
- color: var(--timepicker-text-color);
285
- font-size: 14px;
286
- font-weight: 400;
217
+ color: var(--nuraly-timepicker-local-text-color);
218
+ font-size: var(--nuraly-timepicker-local-font-size);
219
+ font-weight: var(--nuraly-timepicker-local-font-weight);
287
220
  cursor: pointer;
288
221
  transition: all 0.2s ease-in-out;
289
- border-radius: 4px;
222
+ border-radius: var(--nuraly-timepicker-local-border-radius);
290
223
  position: relative;
291
224
  user-select: none;
292
- line-height: 1.5715;
225
+ line-height: var(--nuraly-timepicker-local-line-height);
293
226
  min-height: 28px;
294
227
  margin: 1px 2px;
295
228
  }
296
229
 
297
230
  .time-picker__column-item:hover {
298
- background-color: var(--timepicker-control-item-bg-hover);
299
- color: var(--timepicker-primary-color);
231
+ background-color: var(--nuraly-timepicker-local-control-item-bg-hover);
232
+ color: var(--nuraly-timepicker-local-primary-color);
300
233
  }
301
234
 
302
235
  .time-picker__column-item:active {
303
- background-color: var(--timepicker-control-item-bg-active);
304
- color: var(--timepicker-primary-color);
236
+ background-color: var(--nuraly-timepicker-local-control-item-bg-active);
237
+ color: var(--nuraly-timepicker-local-primary-color);
305
238
  }
306
239
 
307
240
  .time-picker__column-item--selected {
308
- background-color: #e6f7ff;
309
- color: #1677ff;
241
+ background-color: var(--nuraly-timepicker-local-control-item-bg-active);
242
+ color: var(--nuraly-timepicker-local-primary-color);
310
243
  font-weight: 600;
311
- border-radius: 4px;
244
+ border-radius: var(--nuraly-timepicker-local-border-radius);
312
245
  }
313
246
 
314
247
  .time-picker__column-item--selected:hover {
315
- background-color: #bae7ff;
316
- color: #1677ff;
248
+ background-color: var(--nuraly-timepicker-local-control-item-bg-active);
249
+ color: var(--nuraly-timepicker-local-primary-color);
317
250
  }
318
251
 
319
252
  .time-picker__column-item--focused {
320
- background-color: var(--timepicker-control-item-bg-hover);
321
- outline: 2px solid var(--timepicker-focus-color);
253
+ background-color: var(--nuraly-timepicker-local-control-item-bg-hover);
254
+ outline: 2px solid var(--nuraly-timepicker-local-focus-color);
322
255
  outline-offset: -2px;
323
- border-radius: 4px;
324
- color: var(--timepicker-primary-color);
256
+ border-radius: var(--nuraly-timepicker-local-border-radius);
257
+ color: var(--nuraly-timepicker-local-primary-color);
325
258
  }
326
259
 
327
260
  .time-picker__column-item--disabled {
@@ -531,7 +464,7 @@ export const styles = css `
531
464
 
532
465
  /* Style nr-button components in actions */
533
466
  .time-picker__actions nr-button {
534
- border-radius: 6px;
467
+ border-radius: var(--nuraly-timepicker-local-border-radius);
535
468
  font-weight: 400;
536
469
  font-size: 14px;
537
470
  height: 28px;
@@ -595,17 +528,6 @@ export const styles = css `
595
528
  opacity: 0.6;
596
529
  }
597
530
 
598
- /* Dark theme */
599
- :host([data-theme="dark"]) {
600
- --timepicker-background-color: var(--hybrid-dark-background-color, #1f2937);
601
- --timepicker-text-color: var(--hybrid-dark-text-color, #f9fafb);
602
- --timepicker-border-color: var(--hybrid-dark-border-color, #374151);
603
- --timepicker-clock-background: var(--hybrid-dark-background-color, #1f2937);
604
- --timepicker-clock-border: var(--hybrid-dark-border-color, #4b5563);
605
- --timepicker-clock-face-color: var(--hybrid-dark-text-color-muted, #9ca3af);
606
- --timepicker-clock-number-color: var(--hybrid-dark-text-color, #f9fafb);
607
- }
608
-
609
531
  /* Animation classes */
610
532
  .time-picker__dropdown {
611
533
  opacity: 0;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timepicker.style.js","sourceRoot":"","sources":["../../../src/components/timepicker/timepicker.style.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;IACrB,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8iBjB,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2023 Nuraly, Laabidi Aymen\n * SPDX-License-Identifier: MIT\n */\n\nimport { css } from 'lit';\nimport { styleVariables } from './timepicker.style.variables.js';\n\nexport const styles = css`\n ${styleVariables}\n :host {\n display: block;\n font-family: var(--nuraly-timepicker-local-font-family);\n font-size: var(--nuraly-timepicker-local-font-size);\n font-weight: var(--nuraly-timepicker-local-font-weight);\n }\n\n /* Host attribute selectors for configuration */\n :host([disabled]) {\n opacity: var(--nuraly-timepicker-local-disabled-opacity);\n pointer-events: none;\n }\n\n .time-picker {\n position: relative;\n display: inline-block;\n width: 100%;\n }\n\n /* Input wrapper hover and focus states matching select component */\n .time-picker__input-wrapper:hover:not(.time-picker--disabled) nr-input {\n --nuraly-input-border-color: var(--nuraly-timepicker-local-border-color-hover);\n }\n\n .time-picker__input-wrapper:focus-within nr-input,\n .time-picker--open .time-picker__input-wrapper nr-input,\n .time-picker__input-wrapper nr-input:focus {\n --nuraly-input-border-color: var(--nuraly-timepicker-local-focus-color);\n --nuraly-input-box-shadow: 0 0 0 2px var(--nuraly-timepicker-local-focus-color)33;\n }\n\n /* Disabled state styling */\n .time-picker--disabled .time-picker__input-wrapper nr-input {\n --nuraly-input-background-color: var(--nuraly-timepicker-local-disabled-bg);\n --nuraly-input-border-color: var(--nuraly-timepicker-local-border-color);\n --nuraly-input-text-color: var(--nuraly-timepicker-local-text-color-disabled);\n cursor: not-allowed;\n opacity: 0.6;\n }\n\n .time-picker__input-wrapper {\n position: relative;\n width: 100%;\n }\n\n /* Style the nr-input component */\n .time-picker__input-wrapper nr-input {\n width: 100%;\n }\n\n /* Style the trigger button inside nr-input */\n .time-picker__trigger {\n padding: 4px !important;\n min-width: auto !important;\n width: 24px !important;\n height: 24px !important;\n border-radius: var(--nuraly-timepicker-local-border-radius-sm) !important;\n }\n\n .time-picker__trigger svg {\n width: 16px;\n height: 16px;\n color: var(--nuraly-timepicker-local-text-color-secondary);\n transition: color 0.2s ease;\n }\n\n .time-picker__trigger:hover svg {\n color: var(--nuraly-timepicker-local-primary-color);\n }\n\n .time-picker__trigger:hover {\n color: var(--nuraly-timepicker-local-primary-color);\n }\n\n .time-picker__trigger:disabled {\n color: var(--nuraly-timepicker-local-text-color-disabled);\n cursor: not-allowed;\n }\n\n .time-picker__trigger svg {\n width: 14px;\n height: 14px;\n }\n\n .time-picker__dropdown {\n position: absolute;\n z-index: 1000;\n background-color: var(--nuraly-timepicker-local-background-color);\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n border: 1px solid var(--nuraly-timepicker-local-border-color);\n border-radius: var(--nuraly-timepicker-local-border-radius);\n box-shadow: var(--nuraly-timepicker-local-box-shadow);\n width: 100%;\n min-width: 180px;\n /* Animation and positioning - simplified to match select */\n opacity: 1;\n visibility: visible;\n transform: translateY(0);\n transition: all 0.2s ease-in-out;\n /* Create new stacking context to prevent layering issues */\n isolation: isolate;\n /* Ensure solid background to prevent visual bleed-through */\n backdrop-filter: blur(12px);\n -webkit-backdrop-filter: blur(12px);\n /* Force above other elements */\n transform: translateZ(0);\n animation: dropdown-enter 0.15s ease-out;\n overflow: hidden;\n }\n\n .time-picker__dropdown.placement-top {\n animation: dropdown-enter-top 0.15s ease-out;\n }\n\n @keyframes dropdown-enter {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n @keyframes dropdown-enter-top {\n from {\n opacity: 0;\n transform: translateY(8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n .time-picker__columns {\n display: flex;\n max-height: 216px;\n overflow: hidden;\n border-radius: var(--nuraly-timepicker-local-border-radius);\n background: var(--nuraly-timepicker-local-background-color);\n padding: 4px 0;\n }\n\n .time-picker__column {\n flex: 1;\n border-right: 1px solid rgba(0, 0, 0, 0.06);\n background: transparent;\n overflow: hidden;\n position: relative;\n min-width: 60px;\n }\n\n .time-picker__column:last-child {\n border-right: none;\n }\n\n .time-picker__column-list {\n max-height: 216px;\n overflow-y: scroll;\n overflow-x: hidden;\n scrollbar-width: thin;\n scrollbar-color: rgba(0, 0, 0, 0.06) transparent;\n /* Custom scrollbar styling to match modern design */\n padding: 4px 2px;\n scroll-behavior: smooth;\n /* Force scrollbar to always be visible */\n -webkit-overflow-scrolling: touch;\n }\n\n .time-picker__column-list::-webkit-scrollbar {\n width: 6px;\n /* Always show scrollbar */\n -webkit-appearance: none;\n }\n\n .time-picker__column-list::-webkit-scrollbar-track {\n background: rgba(0, 0, 0, 0.04);\n margin: 8px 0;\n border-radius: var(--nuraly-timepicker-local-border-radius-sm);\n }\n\n .time-picker__column-list::-webkit-scrollbar-thumb {\n background-color: rgba(0, 0, 0, 0.2);\n border-radius: var(--nuraly-timepicker-local-border-radius-sm);\n transition: background-color 0.2s ease;\n /* Ensure thumb is always visible */\n min-height: 20px;\n }\n\n .time-picker__column-list::-webkit-scrollbar-thumb:hover {\n background-color: rgba(0, 0, 0, 0.3);\n }\n\n .time-picker__column-list {\n scrollbar-width: thin;\n scrollbar-color: rgba(0, 0, 0, 0.2) rgba(0, 0, 0, 0.04);\n scroll-behavior: smooth;\n }\n\n .time-picker__column-item {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px 8px;\n color: var(--nuraly-timepicker-local-text-color);\n font-size: var(--nuraly-timepicker-local-font-size);\n font-weight: var(--nuraly-timepicker-local-font-weight);\n cursor: pointer;\n transition: all 0.2s ease-in-out;\n border-radius: var(--nuraly-timepicker-local-border-radius);\n position: relative;\n user-select: none;\n line-height: var(--nuraly-timepicker-local-line-height);\n min-height: 28px;\n margin: 1px 2px;\n }\n\n .time-picker__column-item:hover {\n background-color: var(--nuraly-timepicker-local-control-item-bg-hover);\n color: var(--nuraly-timepicker-local-primary-color);\n }\n\n .time-picker__column-item:active {\n background-color: var(--nuraly-timepicker-local-control-item-bg-active);\n color: var(--nuraly-timepicker-local-primary-color);\n }\n\n .time-picker__column-item--selected {\n background-color: var(--nuraly-timepicker-local-control-item-bg-active);\n color: var(--nuraly-timepicker-local-primary-color);\n font-weight: 600;\n border-radius: var(--nuraly-timepicker-local-border-radius);\n }\n\n .time-picker__column-item--selected:hover {\n background-color: var(--nuraly-timepicker-local-control-item-bg-active);\n color: var(--nuraly-timepicker-local-primary-color);\n }\n\n .time-picker__column-item--focused {\n background-color: var(--nuraly-timepicker-local-control-item-bg-hover);\n outline: 2px solid var(--nuraly-timepicker-local-focus-color);\n outline-offset: -2px;\n border-radius: var(--nuraly-timepicker-local-border-radius);\n color: var(--nuraly-timepicker-local-primary-color);\n }\n\n .time-picker__column-item--disabled {\n opacity: 0.4;\n cursor: not-allowed;\n color: var(--timepicker-text-color-disabled);\n }\n\n .time-picker__column-item--disabled:hover {\n background-color: transparent;\n color: var(--timepicker-text-color-disabled);\n }\n\n .time-picker__dropdown--top {\n top: auto;\n bottom: 100%;\n margin-top: 0;\n margin-bottom: 4px;\n }\n\n .time-picker__clock-container {\n padding: 12px;\n display: flex;\n flex-direction: column;\n gap: 12px;\n background: var(--timepicker-background-color);\n }\n\n .time-picker__digital-inputs {\n display: flex;\n align-items: center;\n gap: 8px;\n justify-content: center;\n padding: 8px 12px;\n border-bottom: 1px solid var(--timepicker-border-color);\n }\n\n .time-picker__time-input {\n width: 56px;\n height: 32px;\n text-align: center;\n padding: 4px 8px;\n border: 1px solid var(--timepicker-border-color);\n border-radius: var(--timepicker-border-radius);\n font-size: 14px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n color: var(--timepicker-text-color);\n background-color: var(--timepicker-background-color);\n transition: all 0.3s;\n outline: none;\n }\n\n .time-picker__time-input:hover {\n border-color: var(--timepicker-primary-color-hover);\n }\n\n .time-picker__time-input:focus {\n border-color: var(--timepicker-primary-color);\n box-shadow: 0 0 0 2px var(--timepicker-primary-color-active);\n }\n\n .time-picker__separator {\n font-weight: 600;\n color: var(--timepicker-text-color);\n }\n\n .time-picker__period-toggle {\n display: flex;\n flex-direction: column;\n border: 1px solid var(--timepicker-border-color);\n border-radius: var(--timepicker-border-radius);\n overflow: hidden;\n margin-left: 8px;\n }\n\n .time-picker__period-button {\n background: var(--timepicker-background-color);\n border: none;\n padding: 6px 12px;\n font-size: 12px;\n color: var(--timepicker-text-color);\n cursor: pointer;\n transition: all 0.3s;\n min-width: 44px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .time-picker__period-button:hover {\n background-color: var(--timepicker-item-hover-bg);\n color: var(--timepicker-text-color);\n }\n\n .time-picker__period-button--active {\n background-color: var(--timepicker-primary-color);\n color: #fff;\n }\n\n .time-picker__period-button + .time-picker__period-button {\n border-top: 1px solid var(--timepicker-border-color);\n }\n\n .time-picker__clock {\n width: var(--timepicker-clock-size);\n height: var(--timepicker-clock-size);\n border: 1px solid var(--timepicker-border-color);\n border-radius: 50%;\n background-color: var(--timepicker-background-color);\n position: relative;\n margin: 0 auto;\n user-select: none;\n }\n\n .time-picker__clock-face {\n width: 100%;\n height: 100%;\n position: relative;\n }\n\n .time-picker__clock-number {\n position: absolute;\n color: var(--timepicker-text-color);\n font-size: 14px;\n font-weight: 400;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border-radius: 50%;\n transition: all 0.3s;\n transform: translate(-50%, -50%);\n }\n\n .time-picker__clock-number:hover {\n background-color: var(--timepicker-item-hover-bg);\n color: var(--timepicker-text-color);\n }\n\n .time-picker__clock-number--selected {\n background-color: var(--timepicker-primary-color);\n color: #fff;\n }\n\n .time-picker__clock-hand {\n position: absolute;\n background-color: var(--timepicker-primary-color);\n transform-origin: bottom center;\n border-radius: 2px 2px 0 0;\n }\n\n .time-picker__clock-center {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 6px;\n height: 6px;\n background-color: var(--timepicker-primary-color);\n border-radius: 50%;\n z-index: 10;\n }\n\n .time-picker__mode-buttons {\n display: flex;\n gap: 8px;\n justify-content: center;\n margin-bottom: 8px;\n }\n\n .time-picker__mode-button {\n padding: 6px 16px;\n border: 1px solid var(--timepicker-border-color);\n background: var(--timepicker-background-color);\n color: var(--timepicker-text-color);\n border-radius: var(--timepicker-border-radius);\n cursor: pointer;\n font-size: 14px;\n transition: all 0.3s;\n outline: none;\n }\n\n .time-picker__mode-button:hover {\n background-color: var(--timepicker-item-hover-bg);\n border-color: var(--timepicker-primary-color-hover);\n }\n\n .time-picker__mode-button--active {\n background-color: var(--timepicker-primary-color);\n color: #fff;\n border-color: var(--timepicker-primary-color);\n }\n\n .time-picker__actions {\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n padding: 8px 12px;\n border-top: 1px solid rgba(0, 0, 0, 0.06);\n background: var(--timepicker-background-color);\n border-bottom-left-radius: 8px;\n border-bottom-right-radius: 8px;\n }\n\n /* Style nr-button components in actions */\n .time-picker__actions nr-button {\n border-radius: var(--nuraly-timepicker-local-border-radius);\n font-weight: 400;\n font-size: 14px;\n height: 28px;\n }\n\n \n\n .time-picker__label {\n display: block;\n margin-bottom: 8px;\n font-weight: 400;\n color: var(--timepicker-text-color);\n font-size: 14px;\n }\n\n .time-picker__helper-text {\n font-size: 14px;\n margin-top: 4px;\n color: var(--timepicker-text-color-secondary);\n }\n\n .time-picker__helper-text--error {\n color: var(--timepicker-error-color);\n }\n\n /* Size variants */\n :host([size=\"small\"]) {\n --timepicker-height: 32px;\n --timepicker-font-size: 12px;\n --timepicker-padding: 4px 8px;\n --timepicker-clock-size: 240px;\n }\n\n :host([size=\"large\"]) {\n --timepicker-height: 48px;\n --timepicker-font-size: 16px;\n --timepicker-padding: 12px 16px;\n --timepicker-clock-size: 320px;\n }\n\n /* Variant styles */\n :host([variant=\"outlined\"]) .time-picker__input {\n background-color: transparent;\n }\n\n :host([variant=\"filled\"]) .time-picker__input {\n border: none;\n background-color: var(--timepicker-border-color)33;\n border-bottom: 2px solid var(--timepicker-border-color);\n border-radius: var(--timepicker-border-radius) var(--timepicker-border-radius) 0 0;\n }\n\n :host([variant=\"filled\"]) .time-picker__input:focus {\n border-bottom-color: var(--timepicker-focus-color);\n box-shadow: none;\n }\n\n /* Disabled state */\n :host([disabled]) .time-picker {\n pointer-events: none;\n opacity: 0.6;\n }\n\n /* Animation classes */\n .time-picker__dropdown {\n opacity: 0;\n transform: translateY(-8px);\n transition: opacity 0.2s, transform 0.2s;\n }\n\n .time-picker__dropdown--open {\n opacity: 1;\n transform: translateY(0);\n }\n\n /* Hide scrollbars on time inputs */\n .time-picker__time-input::-webkit-outer-spin-button,\n .time-picker__time-input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n .time-picker__time-input[type=\"number\"] {\n -moz-appearance: textfield;\n }\n\n /* Responsive adjustments */\n @media (max-width: 480px) {\n .time-picker__clock {\n --timepicker-clock-size: 240px;\n }\n \n .time-picker__dropdown {\n left: 50%;\n transform: translateX(-50%);\n width: 90vw;\n max-width: 320px;\n }\n }\n`;\n"]}
@@ -0,0 +1,2 @@
1
+ export declare const styleVariables: import("lit").CSSResult;
2
+ //# sourceMappingURL=timepicker.style.variables.d.ts.map