igniteui-webcomponents 7.2.0 → 7.2.2

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.
Files changed (94) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/components/button/button-base.js.map +1 -1
  3. package/components/button/themes/button/dark/button.bootstrap.css.js +1 -1
  4. package/components/button/themes/button/dark/button.bootstrap.css.js.map +1 -1
  5. package/components/button/themes/button/dark/button.fluent.css.js +1 -1
  6. package/components/button/themes/button/dark/button.fluent.css.js.map +1 -1
  7. package/components/button/themes/button/dark/button.indigo.css.js +1 -1
  8. package/components/button/themes/button/dark/button.indigo.css.js.map +1 -1
  9. package/components/button/themes/button/dark/button.material.css.js +1 -1
  10. package/components/button/themes/button/dark/button.material.css.js.map +1 -1
  11. package/components/button/themes/button/light/button.bootstrap.css.js +1 -1
  12. package/components/button/themes/button/light/button.bootstrap.css.js.map +1 -1
  13. package/components/button/themes/button/light/button.fluent.css.js +1 -1
  14. package/components/button/themes/button/light/button.fluent.css.js.map +1 -1
  15. package/components/button/themes/button/light/button.indigo.css.js +1 -1
  16. package/components/button/themes/button/light/button.indigo.css.js.map +1 -1
  17. package/components/button/themes/button/light/button.material.css.js +1 -1
  18. package/components/button/themes/button/light/button.material.css.js.map +1 -1
  19. package/components/button/themes/button/light/button.shared.css.js +1 -1
  20. package/components/button/themes/button/light/button.shared.css.js.map +1 -1
  21. package/components/button-group/themes/dark/button-group.bootstrap.css.js +1 -1
  22. package/components/button-group/themes/dark/button-group.bootstrap.css.js.map +1 -1
  23. package/components/button-group/themes/light/button-group.bootstrap.css.js +1 -1
  24. package/components/button-group/themes/light/button-group.bootstrap.css.js.map +1 -1
  25. package/components/chat/chat-input.js +1 -1
  26. package/components/chat/chat-input.js.map +1 -1
  27. package/components/chat/chat-state.d.ts +2 -1
  28. package/components/chat/chat-state.js +2 -2
  29. package/components/chat/chat-state.js.map +1 -1
  30. package/components/chat/chat.d.ts +3 -9
  31. package/components/chat/chat.js.map +1 -1
  32. package/components/chat/message-attachments.d.ts +1 -0
  33. package/components/chat/message-attachments.js.map +1 -1
  34. package/components/chat/types.d.ts +16 -2
  35. package/components/chat/types.js.map +1 -1
  36. package/components/combo/themes/dark/combo.indigo.css.js +1 -1
  37. package/components/combo/themes/dark/combo.indigo.css.js.map +1 -1
  38. package/components/common/mixins/alert.d.ts +2 -2
  39. package/components/common/mixins/alert.js.map +1 -1
  40. package/components/common/mixins/combo-box.js.map +1 -1
  41. package/components/date-range-picker/date-range-input.d.ts +9 -3
  42. package/components/date-range-picker/date-range-input.js +4 -7
  43. package/components/date-range-picker/date-range-input.js.map +1 -1
  44. package/components/date-time-input/date-time-input.base.d.ts +1 -6
  45. package/components/date-time-input/date-time-input.base.js +1 -2
  46. package/components/date-time-input/date-time-input.base.js.map +1 -1
  47. package/components/date-time-input/date-time-input.d.ts +11 -5
  48. package/components/date-time-input/date-time-input.js +3 -2
  49. package/components/date-time-input/date-time-input.js.map +1 -1
  50. package/components/dialog/themes/dark/dialog.indigo.css.js +1 -1
  51. package/components/dialog/themes/dark/dialog.indigo.css.js.map +1 -1
  52. package/components/dropdown/themes/dark/dropdown.indigo.css.js +1 -1
  53. package/components/dropdown/themes/dark/dropdown.indigo.css.js.map +1 -1
  54. package/components/expansion-panel/themes/expansion-panel.base.css.js +1 -1
  55. package/components/expansion-panel/themes/expansion-panel.base.css.js.map +1 -1
  56. package/components/highlight/service.d.ts +2 -2
  57. package/components/highlight/service.js.map +1 -1
  58. package/components/input/input-base.js.map +1 -1
  59. package/components/mask-input/mask-input.js.map +1 -1
  60. package/components/select/themes/dark/select.indigo.css.js +1 -1
  61. package/components/select/themes/dark/select.indigo.css.js.map +1 -1
  62. package/components/snackbar/themes/dark/snackbar.indigo.css.js +1 -1
  63. package/components/snackbar/themes/dark/snackbar.indigo.css.js.map +1 -1
  64. package/components/splitter/types.js.map +1 -1
  65. package/components/toast/themes/dark/toast.indigo.css.js +1 -1
  66. package/components/toast/themes/dark/toast.indigo.css.js.map +1 -1
  67. package/components/tooltip/themes/dark/tooltip.indigo.css.js +1 -1
  68. package/components/tooltip/themes/dark/tooltip.indigo.css.js.map +1 -1
  69. package/components/tree/tree.js.map +1 -1
  70. package/components/types.d.ts +1 -0
  71. package/components/types.js.map +1 -1
  72. package/custom-elements.json +331 -510
  73. package/igniteui-webcomponents.css-data.json +1 -1
  74. package/igniteui-webcomponents.html-data.json +1 -1
  75. package/index.d.ts +1 -3
  76. package/index.js.map +1 -1
  77. package/package.json +1 -1
  78. package/skills/igniteui-wc-choose-components/SKILL.md +122 -160
  79. package/skills/igniteui-wc-customize-component-theme/SKILL.md +83 -311
  80. package/skills/igniteui-wc-customize-component-theme/references/mcp-setup.md +69 -0
  81. package/skills/igniteui-wc-generate-from-image-design/SKILL.md +4 -1
  82. package/skills/igniteui-wc-generate-from-image-design/references/component-mapping.md +60 -61
  83. package/skills/igniteui-wc-generate-from-image-design/references/gotchas.md +15 -11
  84. package/skills/igniteui-wc-migrate-grid-lite-to-premium/SKILL.md +446 -0
  85. package/skills/igniteui-wc-optimize-bundle-size/SKILL.md +23 -274
  86. package/themes/dark/bootstrap.css +1 -1
  87. package/themes/dark/fluent.css +1 -1
  88. package/themes/dark/indigo.css +1 -1
  89. package/themes/dark/material.css +1 -1
  90. package/themes/light/bootstrap.css +1 -1
  91. package/themes/light/fluent.css +1 -1
  92. package/themes/light/indigo.css +1 -1
  93. package/themes/light/material.css +1 -1
  94. package/web-types.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"date-range-input.js","sourceRoot":"","sources":["../../../src/components/date-range-picker/date-range-input.ts"],"names":[],"mappings":"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","sourcesContent":["import { property } from 'lit/decorators.js';\nimport { addThemingController } from '../../theming/theming-controller.js';\nimport { CalendarDay } from '../calendar/model.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport { formatDisplayDate } from '../common/i18n/i18n-controller.js';\nimport { FormValueDateRangeTransformers } from '../common/mixins/forms/form-transformers.js';\nimport { createFormValueState } from '../common/mixins/forms/form-value.js';\nimport { equal } from '../common/util.js';\nimport {\n type DatePart,\n type DatePartDeltas,\n DatePartType,\n} from '../date-time-input/date-part.js';\nimport {\n IgcDateTimeInputBaseComponent,\n type IgcDateTimeInputComponentEventMap,\n} from '../date-time-input/date-time-input.base.js';\nimport { DateParts } from '../date-time-input/datetime-mask-parser.js';\nimport { styles } from '../input/themes/input.base.css.js';\nimport { styles as shared } from '../input/themes/shared/input.common.css.js';\nimport { all } from '../input/themes/themes.js';\nimport type { DateRangeValue } from '../types.js';\nimport {\n DateRangeMaskParser,\n type DateRangePart,\n DateRangePosition,\n} from './date-range-mask-parser.js';\n\nexport interface IgcDateRangeInputEventMap extends Omit<\n IgcDateTimeInputComponentEventMap,\n 'igcChange'\n> {\n igcChange: CustomEvent<DateRangeValue | null>;\n}\n\nexport default class IgcDateRangeInputComponent extends IgcDateTimeInputBaseComponent {\n public static readonly tagName = 'igc-date-range-input';\n public static styles = [styles, shared];\n\n /* blazorSuppress */\n public static register() {\n registerComponent(IgcDateRangeInputComponent);\n }\n\n //#region Private state and properties\n\n protected override readonly _formValue = createFormValueState(this, {\n initialValue: { start: null, end: null },\n transformers: FormValueDateRangeTransformers,\n });\n\n protected override readonly _themes = addThemingController(this, all);\n protected override readonly _parser = new DateRangeMaskParser();\n\n protected override get _datePartDeltas(): DatePartDeltas {\n return {\n date: 1,\n month: 1,\n year: 1,\n };\n }\n\n protected _oldValue: DateRangeValue | null = null;\n\n // #endregion\n\n // #region Public attributes and properties\n\n /* @tsTwoWayProperty(true, \"igcChange\", \"detail\", false, true) */\n /**\n * The value of the date range input.\n * @attr\n */\n @property({ attribute: false })\n public set value(value: DateRangeValue | null) {\n this._formValue.setValueAndFormState(value);\n this._updateMaskDisplay();\n }\n\n public get value(): DateRangeValue | null {\n return this._formValue.value;\n }\n\n // #endregion\n\n // #region Lifecycle Hooks\n\n public override connectedCallback(): void {\n super.connectedCallback();\n this._initializeDefaultMask();\n this._updateMaskDisplay();\n }\n\n // #endregion\n\n // #region Event Handlers Overrides\n\n protected override async _handleFocus(): Promise<void> {\n this._focused = true;\n\n if (this.readOnly) {\n return;\n }\n\n this._oldValue = this.value;\n\n if (!this.value || (!this.value.start && !this.value.end)) {\n this._maskedValue = this._parser.emptyMask;\n await this.updateComplete;\n this.select();\n } else if (this.displayFormat !== this.inputFormat) {\n this._updateMaskDisplay();\n }\n }\n\n protected override _handleBlur(): void {\n const isSameValue = equal(this._oldValue, this.value);\n\n this._focused = false;\n\n if (!(this._isMaskComplete() || this._isEmptyMask)) {\n const parsed = this._parser.parseDateRange(this._maskedValue);\n\n if (parsed && (parsed.start || parsed.end)) {\n this.value = parsed;\n } else {\n this.value = null;\n this._maskedValue = '';\n }\n } else {\n this._updateMaskDisplay();\n }\n\n if (!(this.readOnly || isSameValue)) {\n this.emitEvent('igcChange', { detail: this.value });\n }\n\n super._handleBlur();\n }\n\n // #endregion\n\n // #region Keybindings overrides\n\n protected override _setCurrentDateTime(): void {\n const today = CalendarDay.today.native;\n this.value = { start: today, end: today };\n this._emitInputEvent();\n }\n\n protected override _calculatePartNavigationPosition(\n inputValue: string,\n direction: number\n ): number {\n const cursorPos = this._maskSelection.start;\n const rangeParts = this._parser.rangeParts;\n\n const currentPart = rangeParts.find(\n (p) =>\n p.type !== DateParts.Literal &&\n cursorPos >= p.start &&\n cursorPos <= p.end\n );\n\n const isStartOrEndPart =\n currentPart &&\n (currentPart.position === DateRangePosition.Start ||\n currentPart.position === DateRangePosition.End);\n\n if (direction === 0) {\n // Backward: if inside a start/end part, move to its start; else, move to previous part's start\n if (isStartOrEndPart && cursorPos !== currentPart.start) {\n return currentPart.start;\n }\n const prevPart = [...rangeParts]\n .reverse()\n .find((p) => p.type !== DateParts.Literal && p.end < cursorPos);\n return prevPart?.start ?? 0;\n }\n\n // Forward: if inside a start/end part, move to its end; else, move to next part's end\n if (isStartOrEndPart && cursorPos !== currentPart.end) {\n return currentPart.end;\n }\n const nextPart = rangeParts.find(\n (p) => p.type !== DateParts.Literal && p.start > cursorPos\n );\n return nextPart?.end ?? inputValue.length;\n }\n\n // #endregion\n\n // #region Internal API Overrides\n\n protected override _updateMaskDisplay(): void {\n if (this._focused) {\n // Only reset mask from value when value is non-null (i.e. after spinning or programmatic set).\n // When value is null the user is mid-typing — leave _maskedValue unchanged.\n if (this.value?.start || this.value?.end) {\n this._maskedValue = this._buildMaskedValue();\n } else if (!this._maskedValue) {\n this._maskedValue = this._parser.emptyMask;\n }\n return;\n }\n\n this._maskedValue = this._buildDisplayValue();\n }\n\n protected override _performStep(\n datePart: unknown,\n delta: number | undefined,\n isDecrement: boolean\n ): void {\n // If no value exists, set to today's date first\n if (!this.value?.start && !this.value?.end) {\n const today = CalendarDay.today.native;\n this.value = { start: today, end: today };\n const { start, end } = this._inputSelection;\n this.updateComplete.then(() =>\n this._input?.setSelectionRange(start, end)\n );\n return;\n }\n\n super._performStep(datePart, delta, isDecrement);\n }\n\n protected override _commitSpunValue(value: unknown): void {\n this.value = value as DateRangeValue;\n }\n\n protected override _buildDisplayValue(): string {\n if (!this.value?.start && !this.value?.end) {\n return '';\n }\n\n const { start, end } = this.value;\n const startStr = start\n ? formatDisplayDate(start, this.locale, this.displayFormat)\n : '';\n const endStr = end\n ? formatDisplayDate(end, this.locale, this.displayFormat)\n : '';\n return startStr && endStr\n ? `${startStr}${this._parser.separator}${endStr}`\n : startStr || endStr;\n }\n\n protected override _calculateSpunValue(\n datePart: unknown,\n delta: number | undefined,\n isDecrement: boolean\n ): DateRangeValue {\n const range = datePart as DateRangePart;\n const part = this._parser.getPartByTypeAndPosition(\n range.part as DatePartType,\n range.position\n );\n\n const today = CalendarDay.today.native;\n const defaultValue = { start: today, end: today };\n\n if (!part) {\n return this.value || defaultValue;\n }\n\n const effectiveDelta =\n delta ?? this._datePartDeltas[range.part as keyof DatePartDeltas] ?? 1;\n const spinAmount = effectiveDelta * (isDecrement ? -1 : 1);\n\n // For AM/PM spinning, extract the current AM/PM value from the mask\n const amPmValue =\n part.type === DatePartType.AmPm\n ? this._maskedValue.substring(part.start, part.end)\n : undefined;\n\n return this._parser.spinDateRangePart(\n part,\n spinAmount,\n this.value,\n this.spinLoop,\n amPmValue\n );\n }\n\n /**\n * Gets the date range part at the current cursor position.\n * If the cursor is at a literal, finds the nearest non-literal part.\n * Returns undefined if no valid part is found.\n */\n protected override _getDatePartAtCursor(): DateRangePart | undefined {\n const cursorPos = this._inputSelection.start;\n let part = this._parser.getDateRangePartForCursor(cursorPos);\n\n // If cursor is at a literal, find the nearest non-literal part\n if (part?.type === DatePartType.Literal) {\n const nextPart = this._parser.rangeParts.find(\n (p) => p.start >= cursorPos && p.type !== DatePartType.Literal\n );\n if (nextPart) {\n part = nextPart;\n } else {\n part = this._parser.rangeParts.findLast(\n (p) => p.end <= cursorPos && p.type !== DatePartType.Literal\n );\n }\n }\n\n if (part && part.type !== DatePartType.Literal) {\n return {\n part: part.type as DatePart,\n position: part.position,\n };\n }\n\n return undefined;\n }\n\n /**\n * Gets the default date range part to target when the input is not focused.\n * Returns the first date part at the start position.\n */\n protected override _getDefaultDatePart(): DateRangePart | undefined {\n const firstPart = this._parser.getFirstDatePartForPosition(\n DateRangePosition.Start\n );\n if (firstPart) {\n return {\n part: firstPart.type as DatePart,\n position: DateRangePosition.Start,\n };\n }\n\n return undefined;\n }\n\n protected override _buildMaskedValue(): string {\n return this._parser.formatDateRange(this.value);\n }\n\n protected override _applyMask(string: string): void {\n const previous = this._parser.mask;\n\n this._parser.mask = string;\n this._defaultMask = string;\n this._parser.prompt = this.prompt;\n\n // Update placeholder if not set or if it matches the previous format\n if (!this.placeholder || previous === this.placeholder) {\n this.placeholder = this._parser.mask;\n }\n }\n\n protected override _syncValueFromMask(): void {\n if (!this._isMaskComplete()) {\n this.value = null;\n return;\n }\n\n const parsed = this._parser.parseDateRange(this._maskedValue);\n this.value = parsed?.start || parsed?.end ? parsed : null;\n }\n\n // #region Public API Overrides\n\n /** Increments a date/time portion. */\n public override stepUp(datePart?: DateRangePart, delta?: number): void {\n super.stepUp(datePart, delta);\n }\n\n /** Decrements a date/time portion. */\n public override stepDown(datePart?: DateRangePart, delta?: number): void {\n super.stepDown(datePart, delta);\n }\n\n /** Clears the input element of user input. */\n public override clear(): void {\n this._maskedValue = '';\n this.value = null;\n }\n\n public override hasDateParts(): boolean {\n return this._parser.rangeParts.some(\n (p) =>\n p.type === DatePartType.Date ||\n p.type === DatePartType.Month ||\n p.type === DatePartType.Year\n );\n }\n\n public override hasTimeParts(): boolean {\n return this._parser.rangeParts.some(\n (p) =>\n p.type === DatePartType.Hours ||\n p.type === DatePartType.Minutes ||\n p.type === DatePartType.Seconds\n );\n }\n\n // #endregion\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-date-range-input': IgcDateRangeInputComponent;\n }\n}\n"]}
1
+ {"version":3,"file":"date-range-input.js","sourceRoot":"","sources":["../../../src/components/date-range-picker/date-range-input.ts"],"names":[],"mappings":"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","sourcesContent":["import { property } from 'lit/decorators.js';\nimport { addThemingController } from '../../theming/theming-controller.js';\nimport { CalendarDay } from '../calendar/model.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport { formatDisplayDate } from '../common/i18n/i18n-controller.js';\nimport type { AbstractConstructor } from '../common/mixins/constructor.js';\nimport { EventEmitterMixin } from '../common/mixins/event-emitter.js';\nimport { FormValueDateRangeTransformers } from '../common/mixins/forms/form-transformers.js';\nimport { createFormValueState } from '../common/mixins/forms/form-value.js';\nimport { equal } from '../common/util.js';\nimport {\n type DatePart,\n type DatePartDeltas,\n DatePartType,\n} from '../date-time-input/date-part.js';\nimport { IgcDateTimeInputBaseComponent } from '../date-time-input/date-time-input.base.js';\nimport { DateParts } from '../date-time-input/datetime-mask-parser.js';\nimport { styles } from '../input/themes/input.base.css.js';\nimport { styles as shared } from '../input/themes/shared/input.common.css.js';\nimport { all } from '../input/themes/themes.js';\nimport type { DateRangeValue } from '../types.js';\nimport {\n DateRangeMaskParser,\n type DateRangePart,\n DateRangePosition,\n} from './date-range-mask-parser.js';\n\nexport interface IgcDateRangeInputComponentEventMap {\n /* alternateName: inputOcurred */\n igcInput: CustomEvent<string>;\n /* blazorSuppress */\n igcChange: CustomEvent<DateRangeValue | null>;\n // For analyzer meta only:\n /* skipWCPrefix */\n focus: FocusEvent;\n /* skipWCPrefix */\n blur: FocusEvent;\n}\n\n/* blazorSuppress */\nexport default class IgcDateRangeInputComponent extends EventEmitterMixin<\n IgcDateRangeInputComponentEventMap,\n AbstractConstructor<IgcDateTimeInputBaseComponent>\n>(IgcDateTimeInputBaseComponent) {\n public static readonly tagName = 'igc-date-range-input';\n public static styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(IgcDateRangeInputComponent);\n }\n\n //#region Private state and properties\n\n protected override readonly _formValue = createFormValueState(this, {\n initialValue: { start: null, end: null },\n transformers: FormValueDateRangeTransformers,\n });\n\n protected override readonly _themes = addThemingController(this, all);\n protected override readonly _parser = new DateRangeMaskParser();\n\n protected override get _datePartDeltas(): DatePartDeltas {\n return { date: 1, month: 1, year: 1 };\n }\n\n protected _oldValue: DateRangeValue | null = null;\n\n // #endregion\n\n // #region Public attributes and properties\n\n /* @tsTwoWayProperty(true, \"igcChange\", \"detail\", false, true) */\n /**\n * The value of the date range input.\n * @attr\n */\n @property({ attribute: false })\n public set value(value: DateRangeValue | null) {\n this._formValue.setValueAndFormState(value);\n this._updateMaskDisplay();\n }\n\n public get value(): DateRangeValue | null {\n return this._formValue.value;\n }\n\n // #endregion\n\n // #region Lifecycle Hooks\n\n public override connectedCallback(): void {\n super.connectedCallback();\n this._initializeDefaultMask();\n this._updateMaskDisplay();\n }\n\n // #endregion\n\n // #region Event Handlers Overrides\n\n protected override async _handleFocus(): Promise<void> {\n this._focused = true;\n\n if (this.readOnly) {\n return;\n }\n\n this._oldValue = this.value;\n\n if (!this.value || (!this.value.start && !this.value.end)) {\n this._maskedValue = this._parser.emptyMask;\n await this.updateComplete;\n this.select();\n } else if (this.displayFormat !== this.inputFormat) {\n this._updateMaskDisplay();\n }\n }\n\n protected override _handleBlur(): void {\n const isSameValue = equal(this._oldValue, this.value);\n\n this._focused = false;\n\n if (!(this._isMaskComplete() || this._isEmptyMask)) {\n const parsed = this._parser.parseDateRange(this._maskedValue);\n\n if (parsed && (parsed.start || parsed.end)) {\n this.value = parsed;\n } else {\n this.value = null;\n this._maskedValue = '';\n }\n } else {\n this._updateMaskDisplay();\n }\n\n if (!(this.readOnly || isSameValue)) {\n this.emitEvent('igcChange', { detail: this.value });\n }\n\n super._handleBlur();\n }\n\n // #endregion\n\n // #region Keybindings overrides\n\n protected override _setCurrentDateTime(): void {\n const today = CalendarDay.today.native;\n this.value = { start: today, end: today };\n this._emitInputEvent();\n }\n\n protected override _calculatePartNavigationPosition(\n inputValue: string,\n direction: number\n ): number {\n const cursorPos = this._maskSelection.start;\n const rangeParts = this._parser.rangeParts;\n\n const currentPart = rangeParts.find(\n (p) =>\n p.type !== DateParts.Literal &&\n cursorPos >= p.start &&\n cursorPos <= p.end\n );\n\n const isStartOrEndPart =\n currentPart &&\n (currentPart.position === DateRangePosition.Start ||\n currentPart.position === DateRangePosition.End);\n\n if (direction === 0) {\n // Backward: if inside a start/end part, move to its start; else, move to previous part's start\n if (isStartOrEndPart && cursorPos !== currentPart.start) {\n return currentPart.start;\n }\n const prevPart = [...rangeParts]\n .reverse()\n .find((p) => p.type !== DateParts.Literal && p.end < cursorPos);\n return prevPart?.start ?? 0;\n }\n\n // Forward: if inside a start/end part, move to its end; else, move to next part's end\n if (isStartOrEndPart && cursorPos !== currentPart.end) {\n return currentPart.end;\n }\n const nextPart = rangeParts.find(\n (p) => p.type !== DateParts.Literal && p.start > cursorPos\n );\n return nextPart?.end ?? inputValue.length;\n }\n\n // #endregion\n\n // #region Internal API Overrides\n\n protected override _updateMaskDisplay(): void {\n if (this._focused) {\n // Only reset mask from value when value is non-null (i.e. after spinning or programmatic set).\n // When value is null the user is mid-typing — leave _maskedValue unchanged.\n if (this.value?.start || this.value?.end) {\n this._maskedValue = this._buildMaskedValue();\n } else if (!this._maskedValue) {\n this._maskedValue = this._parser.emptyMask;\n }\n return;\n }\n\n this._maskedValue = this._buildDisplayValue();\n }\n\n protected override _performStep(\n datePart: unknown,\n delta: number | undefined,\n isDecrement: boolean\n ): void {\n // If no value exists, set to today's date first\n if (!this.value?.start && !this.value?.end) {\n const today = CalendarDay.today.native;\n this.value = { start: today, end: today };\n const { start, end } = this._inputSelection;\n this.updateComplete.then(() =>\n this._input?.setSelectionRange(start, end)\n );\n return;\n }\n\n super._performStep(datePart, delta, isDecrement);\n }\n\n protected override _commitSpunValue(value: unknown): void {\n this.value = value as DateRangeValue;\n }\n\n protected override _buildDisplayValue(): string {\n if (!this.value?.start && !this.value?.end) {\n return '';\n }\n\n const { start, end } = this.value;\n const startStr = start\n ? formatDisplayDate(start, this.locale, this.displayFormat)\n : '';\n const endStr = end\n ? formatDisplayDate(end, this.locale, this.displayFormat)\n : '';\n return startStr && endStr\n ? `${startStr}${this._parser.separator}${endStr}`\n : startStr || endStr;\n }\n\n protected override _calculateSpunValue(\n datePart: unknown,\n delta: number | undefined,\n isDecrement: boolean\n ): DateRangeValue {\n const range = datePart as DateRangePart;\n const part = this._parser.getPartByTypeAndPosition(\n range.part as DatePartType,\n range.position\n );\n\n const today = CalendarDay.today.native;\n const defaultValue = { start: today, end: today };\n\n if (!part) {\n return this.value || defaultValue;\n }\n\n const effectiveDelta =\n delta ?? this._datePartDeltas[range.part as keyof DatePartDeltas] ?? 1;\n const spinAmount = effectiveDelta * (isDecrement ? -1 : 1);\n\n // For AM/PM spinning, extract the current AM/PM value from the mask\n const amPmValue =\n part.type === DatePartType.AmPm\n ? this._maskedValue.substring(part.start, part.end)\n : undefined;\n\n return this._parser.spinDateRangePart(\n part,\n spinAmount,\n this.value,\n this.spinLoop,\n amPmValue\n );\n }\n\n /**\n * Gets the date range part at the current cursor position.\n * If the cursor is at a literal, finds the nearest non-literal part.\n * Returns undefined if no valid part is found.\n */\n protected override _getDatePartAtCursor(): DateRangePart | undefined {\n const cursorPos = this._inputSelection.start;\n let part = this._parser.getDateRangePartForCursor(cursorPos);\n\n // If cursor is at a literal, find the nearest non-literal part\n if (part?.type === DatePartType.Literal) {\n const nextPart = this._parser.rangeParts.find(\n (p) => p.start >= cursorPos && p.type !== DatePartType.Literal\n );\n if (nextPart) {\n part = nextPart;\n } else {\n part = this._parser.rangeParts.findLast(\n (p) => p.end <= cursorPos && p.type !== DatePartType.Literal\n );\n }\n }\n\n if (part && part.type !== DatePartType.Literal) {\n return {\n part: part.type as DatePart,\n position: part.position,\n };\n }\n\n return undefined;\n }\n\n /**\n * Gets the default date range part to target when the input is not focused.\n * Returns the first date part at the start position.\n */\n protected override _getDefaultDatePart(): DateRangePart | undefined {\n const firstPart = this._parser.getFirstDatePartForPosition(\n DateRangePosition.Start\n );\n if (firstPart) {\n return {\n part: firstPart.type as DatePart,\n position: DateRangePosition.Start,\n };\n }\n\n return undefined;\n }\n\n protected override _buildMaskedValue(): string {\n return this._parser.formatDateRange(this.value);\n }\n\n protected override _applyMask(string: string): void {\n const previous = this._parser.mask;\n\n this._parser.mask = string;\n this._defaultMask = string;\n this._parser.prompt = this.prompt;\n\n // Update placeholder if not set or if it matches the previous format\n if (!this.placeholder || previous === this.placeholder) {\n this.placeholder = this._parser.mask;\n }\n }\n\n protected override _syncValueFromMask(): void {\n if (!this._isMaskComplete()) {\n this.value = null;\n return;\n }\n\n const parsed = this._parser.parseDateRange(this._maskedValue);\n this.value = parsed?.start || parsed?.end ? parsed : null;\n }\n\n // #region Public API Overrides\n\n /** Increments a date/time portion. */\n public override stepUp(datePart?: DateRangePart, delta?: number): void {\n super.stepUp(datePart, delta);\n }\n\n /** Decrements a date/time portion. */\n public override stepDown(datePart?: DateRangePart, delta?: number): void {\n super.stepDown(datePart, delta);\n }\n\n /** Clears the input element of user input. */\n public override clear(): void {\n this._maskedValue = '';\n this.value = null;\n }\n\n public override hasDateParts(): boolean {\n return this._parser.rangeParts.some(\n (p) =>\n p.type === DatePartType.Date ||\n p.type === DatePartType.Month ||\n p.type === DatePartType.Year\n );\n }\n\n public override hasTimeParts(): boolean {\n return this._parser.rangeParts.some(\n (p) =>\n p.type === DatePartType.Hours ||\n p.type === DatePartType.Minutes ||\n p.type === DatePartType.Seconds\n );\n }\n\n // #endregion\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-date-range-input': IgcDateRangeInputComponent;\n }\n}\n"]}
@@ -1,14 +1,9 @@
1
1
  import { LitElement, type PropertyValues, type TemplateResult } from 'lit';
2
2
  import type { ThemingController } from '../../theming/theming-controller.js';
3
- import type { Constructor } from '../common/mixins/constructor.js';
4
3
  import { type MaskSelection } from '../common/mixins/mask-behavior.js';
5
- import type { IgcInputComponentEventMap } from '../input/input-base.js';
6
4
  import type { DatePartDeltas } from './date-part.js';
7
5
  export type { MaskSelection };
8
- export interface IgcDateTimeInputComponentEventMap extends Omit<IgcInputComponentEventMap, 'igcChange'> {
9
- igcChange: CustomEvent<unknown>;
10
- }
11
- declare const IgcDateTimeInputBaseComponent_base: import("../common/mixins/constructor.js").AbstractConstructor<import("../common/mixins/mask-behavior.js").MaskBehaviorElementInterface> & Constructor<import("../common/mixins/forms/types.js").FormRequiredInterface & import("../common/mixins/forms/types.js").FormAssociatedElementInterface> & Constructor<import("../common/mixins/event-emitter.js").EventEmitterInterface<IgcDateTimeInputComponentEventMap>> & Constructor<LitElement>;
6
+ declare const IgcDateTimeInputBaseComponent_base: import("../common/mixins/constructor.js").AbstractConstructor<import("../common/mixins/mask-behavior.js").MaskBehaviorElementInterface> & import("../common/mixins/constructor.js").Constructor<import("../common/mixins/forms/types.js").FormRequiredInterface & import("../common/mixins/forms/types.js").FormAssociatedElementInterface> & typeof LitElement;
12
7
  export declare abstract class IgcDateTimeInputBaseComponent extends IgcDateTimeInputBaseComponent_base {
13
8
  protected abstract readonly _themes: ThemingController;
14
9
  protected readonly _slots: import("../common/controllers/slot.js").SlotController<"invalid" | "prefix" | "[default]" | "helper-text" | "suffix" | "value-missing" | "custom-error" | "range-overflow" | "range-underflow">;
@@ -14,14 +14,13 @@ import { addSlotController, setSlots } from '../common/controllers/slot.js';
14
14
  import { blazorDeepImport } from '../common/decorators/blazorDeepImport.js';
15
15
  import { shadowOptions } from '../common/decorators/shadow-options.js';
16
16
  import { addI18nController, getDefaultDateTimeFormat, } from '../common/i18n/i18n-controller.js';
17
- import { EventEmitterMixin } from '../common/mixins/event-emitter.js';
18
17
  import { FormAssociatedRequiredMixin } from '../common/mixins/forms/associated-required.js';
19
18
  import { MaskBehaviorMixin, } from '../common/mixins/mask-behavior.js';
20
19
  import { nextInputId, renderInputShell, } from '../common/templates/input-shell.js';
21
20
  import { renderMaskedNativeInput } from '../common/templates/masked-input.js';
22
21
  import { dateTimeInputValidators } from './validators.js';
23
22
  const Slots = setSlots('prefix', 'suffix', 'helper-text', 'value-missing', 'range-overflow', 'range-underflow', 'custom-error', 'invalid');
24
- let IgcDateTimeInputBaseComponent = class IgcDateTimeInputBaseComponent extends MaskBehaviorMixin(FormAssociatedRequiredMixin(EventEmitterMixin(LitElement))) {
23
+ let IgcDateTimeInputBaseComponent = class IgcDateTimeInputBaseComponent extends MaskBehaviorMixin(FormAssociatedRequiredMixin(LitElement)) {
25
24
  get __validators() {
26
25
  return dateTimeInputValidators;
27
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"date-time-input.base.js","sourceRoot":"","sources":["../../../src/components/date-time-input/date-time-input.base.ts"],"names":[],"mappings":"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","sourcesContent":["import { getDateFormatter } from 'igniteui-i18n-core';\nimport { LitElement, type PropertyValues, type TemplateResult } from 'lit';\nimport { eventOptions, property, query } from 'lit/decorators.js';\nimport { cache } from 'lit/directives/cache.js';\nimport type { ThemingController } from '../../theming/theming-controller.js';\nimport { convertToDate } from '../calendar/helpers.js';\nimport {\n addKeybindings,\n arrowDown,\n arrowLeft,\n arrowRight,\n arrowUp,\n ctrlKey,\n} from '../common/controllers/key-bindings.js';\nimport { addSlotController, setSlots } from '../common/controllers/slot.js';\nimport { blazorDeepImport } from '../common/decorators/blazorDeepImport.js';\nimport { shadowOptions } from '../common/decorators/shadow-options.js';\nimport {\n addI18nController,\n getDefaultDateTimeFormat,\n} from '../common/i18n/i18n-controller.js';\nimport type { Constructor } from '../common/mixins/constructor.js';\nimport { EventEmitterMixin } from '../common/mixins/event-emitter.js';\nimport { FormAssociatedRequiredMixin } from '../common/mixins/forms/associated-required.js';\nimport {\n MaskBehaviorMixin,\n type MaskSelection,\n} from '../common/mixins/mask-behavior.js';\nimport {\n nextInputId,\n renderInputShell,\n} from '../common/templates/input-shell.js';\nimport { renderMaskedNativeInput } from '../common/templates/masked-input.js';\nimport type { IgcInputComponentEventMap } from '../input/input-base.js';\nimport type { DatePartDeltas } from './date-part.js';\nimport { dateTimeInputValidators } from './validators.js';\n\nexport type { MaskSelection };\n\nconst Slots = setSlots(\n 'prefix',\n 'suffix',\n 'helper-text',\n 'value-missing',\n 'range-overflow',\n 'range-underflow',\n 'custom-error',\n 'invalid'\n);\n\nexport interface IgcDateTimeInputComponentEventMap extends Omit<\n IgcInputComponentEventMap,\n 'igcChange'\n> {\n igcChange: CustomEvent<unknown>;\n}\n\n@blazorDeepImport\n@shadowOptions({ delegatesFocus: true })\nexport abstract class IgcDateTimeInputBaseComponent extends MaskBehaviorMixin(\n FormAssociatedRequiredMixin(\n EventEmitterMixin<\n IgcDateTimeInputComponentEventMap,\n Constructor<LitElement>\n >(LitElement)\n )\n) {\n // #region Internal state and properties\n\n protected abstract readonly _themes: ThemingController;\n\n protected readonly _slots = addSlotController(this, { slots: Slots });\n\n protected readonly _inputId = nextInputId();\n\n @query('input')\n protected override readonly _input?: HTMLInputElement;\n\n protected override get __validators() {\n return dateTimeInputValidators;\n }\n\n private readonly _i18nController = addI18nController(this, {\n defaultEN: {},\n onResourceChange: this._handleResourceChange,\n });\n\n protected _min: Date | null = null;\n protected _max: Date | null = null;\n\n protected _defaultMask!: string;\n\n protected _defaultDisplayFormat = '';\n protected _displayFormat?: string;\n protected _inputFormat?: string;\n\n protected get _targetDatePart(): unknown {\n return this._focused\n ? this._getDatePartAtCursor()\n : this._getDefaultDatePart();\n }\n\n // #endregion\n\n // #region Public attributes and properties\n\n /**\n * Whether the control will have outlined appearance.\n *\n * @attr\n * @default false\n */\n @property({ type: Boolean, reflect: true })\n public outlined = false;\n\n /**\n * The placeholder attribute of the control.\n * @attr\n */\n @property()\n public placeholder!: string;\n\n /**\n * The label for the control.\n * @attr\n */\n @property()\n public label!: string;\n\n /**\n * The date format to apply on the input.\n * @attr input-format\n */\n @property({ attribute: 'input-format' })\n public get inputFormat(): string {\n return this._inputFormat || this._parser.mask;\n }\n\n public set inputFormat(val: string) {\n if (val) {\n this._applyMask(val);\n this._inputFormat = val;\n this._updateMaskDisplay();\n }\n }\n\n /**\n * The minimum value required for the input to remain valid.\n * @attr\n */\n @property({ converter: convertToDate })\n public set min(value: Date | string | null | undefined) {\n this._min = convertToDate(value);\n this._validate();\n }\n\n public get min(): Date | null {\n return this._min;\n }\n\n /**\n * The maximum value required for the input to remain valid.\n * @attr\n */\n @property({ converter: convertToDate })\n public set max(value: Date | string | null | undefined) {\n this._max = convertToDate(value);\n this._validate();\n }\n\n public get max(): Date | null {\n return this._max;\n }\n\n /**\n * Format to display the value in when not editing.\n * Defaults to the locale format if not set.\n * @attr display-format\n */\n @property({ attribute: 'display-format' })\n public set displayFormat(value: string) {\n this._displayFormat = value;\n }\n\n public get displayFormat(): string {\n return (\n this._displayFormat ?? this._inputFormat ?? this._defaultDisplayFormat\n );\n }\n\n /**\n * Delta values used to increment or decrement each date part on step actions.\n * All values default to `1`.\n */\n @property({ attribute: false })\n public spinDelta?: DatePartDeltas;\n\n /**\n * Sets whether to loop over the currently spun segment.\n * @attr spin-loop\n */\n @property({ type: Boolean, attribute: 'spin-loop' })\n public spinLoop = true;\n\n /**\n * Gets/Sets the locale used for formatting the display value.\n * @attr locale\n */\n @property()\n public set locale(value: string) {\n this._i18nController.locale = value;\n }\n\n public get locale(): string {\n return this._i18nController.locale;\n }\n\n // #endregion\n\n //#region Lifecycle Hooks\n\n constructor() {\n super();\n\n addKeybindings(this, {\n skip: () => this.readOnly,\n bindingDefaults: { repeat: true },\n })\n .set([ctrlKey, ';'], this._setCurrentDateTime)\n .set(arrowUp, this._keyboardSpin.bind(this, 'up'))\n .set(arrowDown, this._keyboardSpin.bind(this, 'down'))\n .set([ctrlKey, arrowLeft], this._navigateParts.bind(this, 0))\n .set([ctrlKey, arrowRight], this._navigateParts.bind(this, 1));\n }\n\n protected override update(props: PropertyValues<this>): void {\n if (props.has('displayFormat')) {\n this._updateDefaultDisplayFormat();\n }\n\n if (props.has('locale')) {\n this._initializeDefaultMask();\n }\n\n if (props.has('displayFormat') || props.has('locale')) {\n this._updateMaskDisplay();\n }\n\n super.update(props);\n }\n\n //#endregion\n\n // #region Event handlers\n\n private _handleResourceChange(): void {\n this._initializeDefaultMask();\n this._updateMaskDisplay();\n }\n\n protected _handleDragLeave(): void {\n if (!this._focused) {\n this._updateMaskDisplay();\n }\n }\n\n protected _handleDragEnter(): void {\n if (!this._focused) {\n this._maskedValue = this._buildMaskedValue();\n }\n }\n\n /**\n * Handles wheel events for spinning date parts.\n */\n @eventOptions({ passive: false })\n protected async _handleWheel(event: WheelEvent): Promise<void> {\n if (!this._focused || this.readOnly) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n const { start, end } = this._inputSelection;\n event.deltaY > 0 ? this.stepDown() : this.stepUp();\n this._emitInputEvent();\n\n await this.updateComplete;\n this.setSelectionRange(start, end);\n }\n\n // #endregion\n\n //#region Keybindings\n\n /**\n * Navigates to the previous or next date part.\n */\n protected _navigateParts(direction: number): void {\n const position = this._calculatePartNavigationPosition(\n this._input?.value ?? '',\n direction\n );\n this.setSelectionRange(position, position);\n }\n\n /**\n * Handles keyboard-triggered spinning (arrow up/down).\n */\n protected async _keyboardSpin(direction: 'up' | 'down'): Promise<void> {\n direction === 'up' ? this.stepUp() : this.stepDown();\n this._emitInputEvent();\n await this.updateComplete;\n this.setSelectionRange(this._maskSelection.start, this._maskSelection.end);\n }\n\n // #endregion\n\n //#region Internal API\n\n /**\n * Common logic for stepping up or down a date part.\n * @internal\n */\n protected _performStep(\n datePart: unknown,\n delta: number | undefined,\n isDecrement: boolean\n ): void {\n const part = datePart || this._targetDatePart;\n if (!part) return;\n\n const { start, end } = this._inputSelection;\n const newValue = this._calculateSpunValue(part, delta, isDecrement);\n this._commitSpunValue(newValue);\n this.updateComplete.then(() => this._input?.setSelectionRange(start, end));\n }\n\n /**\n * Updates the displayed mask value based on focus state.\n * When focused, shows the editable mask. When unfocused, defers to the leaf's display formatter.\n */\n protected _updateMaskDisplay(): void {\n this._maskedValue = this._focused\n ? this._buildMaskedValue()\n : this._buildDisplayValue();\n }\n\n /**\n * Checks if all mask positions are filled (no prompt characters remain).\n */\n protected _isMaskComplete(): boolean {\n return !this._maskedValue.includes(this.prompt);\n }\n\n /**\n * Applies a mask pattern to the input, parsing the format string into date parts.\n */\n protected _applyMask(formatString: string): void {\n const previous = this._parser.mask;\n this._parser.mask = formatString;\n\n // Update placeholder if not set or if it matches the old format\n if (!this.placeholder || previous === this.placeholder) {\n this.placeholder = this._parser.mask;\n }\n }\n\n /**\n * Updates the default display format based on current locale.\n */\n private _updateDefaultDisplayFormat(): void {\n this._defaultDisplayFormat = getDateFormatter().getLocaleDateTimeFormat(\n this.locale\n );\n }\n\n protected _initializeDefaultMask(): void {\n this._updateDefaultDisplayFormat();\n\n if (!this._inputFormat) {\n this._applyMask(getDefaultDateTimeFormat(this.locale));\n }\n }\n\n /**\n * Resolves the part names for the container based on the current state.\n */\n protected _resolvePartNames(base: string): Record<string, boolean> {\n return {\n [base]: true,\n prefixed: this._slots.hasAssignedElements('prefix', {\n selector: '[slot=\"prefix\"]:not([hidden])',\n }),\n suffixed: this._slots.hasAssignedElements('suffix', {\n selector: '[slot=\"suffix\"]:not([hidden])',\n }),\n filled: !this._isEmptyMask,\n };\n }\n\n // #endregion\n\n // #region Public API\n\n /** Selects all the text inside the input. */\n public select(): void {\n this._input?.select();\n }\n\n /* alternateName: focusComponent */\n /** Sets focus on the control. */\n public override focus(options?: FocusOptions): void {\n this._input?.focus(options);\n }\n\n /* alternateName: blurComponent */\n /** Removes focus from the control. */\n public override blur(): void {\n this._input?.blur();\n }\n\n /** Increments a date/time portion. */\n public stepUp(datePart?: unknown, delta?: number): void {\n this._performStep(datePart, delta, false);\n }\n\n /** Decrements a date/time portion. */\n public stepDown(datePart?: unknown, delta?: number): void {\n this._performStep(datePart, delta, true);\n }\n\n /** Clears the input element of user input. */\n public abstract clear(): void;\n\n //#endregion\n\n //#region Render\n\n protected _renderInput(): TemplateResult {\n const hasNegativeTabIndex = this.getAttribute('tabindex') === '-1';\n const hasHelperText = this._slots.hasAssignedElements('helper-text');\n\n return renderMaskedNativeInput({\n id: this._inputId,\n partNames: this._resolvePartNames('input'),\n name: this.name,\n value: this._maskedValue,\n placeholder: this.placeholder || this._parser.emptyMask,\n readOnly: this.readOnly,\n disabled: this.disabled,\n tabindex: hasNegativeTabIndex ? -1 : undefined,\n ariaDescribedBy: hasHelperText ? 'helper-text' : undefined,\n onInput: this._handleInput,\n onFocus: this._handleFocus,\n onBlur: this._handleBlur,\n onClick: this._handleClick,\n onSetMaskSelection: this._setMaskSelection,\n onCompositionStart: this._handleCompositionStart,\n onCompositionEnd: this._handleCompositionEnd,\n onWheel: this._handleWheel,\n onDragEnter: this._handleDragEnter,\n onDragLeave: this._handleDragLeave,\n });\n }\n\n protected override render() {\n return cache(\n renderInputShell(this, {\n theme: this._themes.theme,\n label: this.label,\n labelId: this._inputId,\n containerParts: this._resolvePartNames('container'),\n renderInput: this._renderInput,\n })\n );\n }\n\n //#endregion\n\n // #region Abstract methods and properties\n\n protected abstract get _datePartDeltas(): DatePartDeltas;\n\n protected abstract _buildMaskedValue(): string;\n protected abstract _buildDisplayValue(): string;\n protected abstract override _syncValueFromMask(): void;\n protected abstract _calculatePartNavigationPosition(\n value: string,\n direction: number\n ): number;\n protected abstract _calculateSpunValue(\n part: unknown,\n delta: number | undefined,\n isDecrement: boolean\n ): unknown;\n protected abstract _commitSpunValue(value: unknown): void;\n protected abstract _setCurrentDateTime(): void;\n protected abstract _handleFocus(): Promise<void>;\n protected abstract _getDatePartAtCursor(): unknown;\n protected abstract _getDefaultDatePart(): unknown;\n\n public abstract hasDateParts(): boolean;\n public abstract hasTimeParts(): boolean;\n\n // #endregion\n}\n"]}
1
+ {"version":3,"file":"date-time-input.base.js","sourceRoot":"","sources":["../../../src/components/date-time-input/date-time-input.base.ts"],"names":[],"mappings":"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","sourcesContent":["import { getDateFormatter } from 'igniteui-i18n-core';\nimport { LitElement, type PropertyValues, type TemplateResult } from 'lit';\nimport { eventOptions, property, query } from 'lit/decorators.js';\nimport { cache } from 'lit/directives/cache.js';\nimport type { ThemingController } from '../../theming/theming-controller.js';\nimport { convertToDate } from '../calendar/helpers.js';\nimport {\n addKeybindings,\n arrowDown,\n arrowLeft,\n arrowRight,\n arrowUp,\n ctrlKey,\n} from '../common/controllers/key-bindings.js';\nimport { addSlotController, setSlots } from '../common/controllers/slot.js';\nimport { blazorDeepImport } from '../common/decorators/blazorDeepImport.js';\nimport { shadowOptions } from '../common/decorators/shadow-options.js';\nimport {\n addI18nController,\n getDefaultDateTimeFormat,\n} from '../common/i18n/i18n-controller.js';\nimport { FormAssociatedRequiredMixin } from '../common/mixins/forms/associated-required.js';\nimport {\n MaskBehaviorMixin,\n type MaskSelection,\n} from '../common/mixins/mask-behavior.js';\nimport {\n nextInputId,\n renderInputShell,\n} from '../common/templates/input-shell.js';\nimport { renderMaskedNativeInput } from '../common/templates/masked-input.js';\nimport type { DatePartDeltas } from './date-part.js';\nimport { dateTimeInputValidators } from './validators.js';\n\nexport type { MaskSelection };\n\nconst Slots = setSlots(\n 'prefix',\n 'suffix',\n 'helper-text',\n 'value-missing',\n 'range-overflow',\n 'range-underflow',\n 'custom-error',\n 'invalid'\n);\n\n/* blazorIndirectRender */\n/* blazorSupportsVisualChildren */\n@blazorDeepImport\n@shadowOptions({ delegatesFocus: true })\nexport abstract class IgcDateTimeInputBaseComponent extends MaskBehaviorMixin(\n FormAssociatedRequiredMixin(LitElement)\n) {\n // #region Internal state and properties\n\n protected abstract readonly _themes: ThemingController;\n\n protected readonly _slots = addSlotController(this, { slots: Slots });\n\n protected readonly _inputId = nextInputId();\n\n @query('input')\n protected override readonly _input?: HTMLInputElement;\n\n protected override get __validators() {\n return dateTimeInputValidators;\n }\n\n private readonly _i18nController = addI18nController(this, {\n defaultEN: {},\n onResourceChange: this._handleResourceChange,\n });\n\n protected _min: Date | null = null;\n protected _max: Date | null = null;\n\n protected _defaultMask!: string;\n\n protected _defaultDisplayFormat = '';\n protected _displayFormat?: string;\n protected _inputFormat?: string;\n\n protected get _targetDatePart(): unknown {\n return this._focused\n ? this._getDatePartAtCursor()\n : this._getDefaultDatePart();\n }\n\n // #endregion\n\n // #region Public attributes and properties\n\n /**\n * Whether the control will have outlined appearance.\n *\n * @attr\n * @default false\n */\n @property({ type: Boolean, reflect: true })\n public outlined = false;\n\n /**\n * The placeholder attribute of the control.\n * @attr\n */\n @property()\n public placeholder!: string;\n\n /**\n * The label for the control.\n * @attr\n */\n @property()\n public label!: string;\n\n /**\n * The date format to apply on the input.\n * @attr input-format\n */\n @property({ attribute: 'input-format' })\n public get inputFormat(): string {\n return this._inputFormat || this._parser.mask;\n }\n\n public set inputFormat(val: string) {\n if (val) {\n this._applyMask(val);\n this._inputFormat = val;\n this._updateMaskDisplay();\n }\n }\n\n /**\n * The minimum value required for the input to remain valid.\n * @attr\n */\n @property({ converter: convertToDate })\n public set min(value: Date | string | null | undefined) {\n this._min = convertToDate(value);\n this._validate();\n }\n\n public get min(): Date | null {\n return this._min;\n }\n\n /**\n * The maximum value required for the input to remain valid.\n * @attr\n */\n @property({ converter: convertToDate })\n public set max(value: Date | string | null | undefined) {\n this._max = convertToDate(value);\n this._validate();\n }\n\n public get max(): Date | null {\n return this._max;\n }\n\n /**\n * Format to display the value in when not editing.\n * Defaults to the locale format if not set.\n * @attr display-format\n */\n @property({ attribute: 'display-format' })\n public set displayFormat(value: string) {\n this._displayFormat = value;\n }\n\n public get displayFormat(): string {\n return (\n this._displayFormat ?? this._inputFormat ?? this._defaultDisplayFormat\n );\n }\n\n /**\n * Delta values used to increment or decrement each date part on step actions.\n * All values default to `1`.\n */\n @property({ attribute: false })\n public spinDelta?: DatePartDeltas;\n\n /**\n * Sets whether to loop over the currently spun segment.\n * @attr spin-loop\n */\n @property({ type: Boolean, attribute: 'spin-loop' })\n public spinLoop = true;\n\n /**\n * Gets/Sets the locale used for formatting the display value.\n * @attr locale\n */\n @property()\n public set locale(value: string) {\n this._i18nController.locale = value;\n }\n\n public get locale(): string {\n return this._i18nController.locale;\n }\n\n // #endregion\n\n //#region Lifecycle Hooks\n\n constructor() {\n super();\n\n addKeybindings(this, {\n skip: () => this.readOnly,\n bindingDefaults: { repeat: true },\n })\n .set([ctrlKey, ';'], this._setCurrentDateTime)\n .set(arrowUp, this._keyboardSpin.bind(this, 'up'))\n .set(arrowDown, this._keyboardSpin.bind(this, 'down'))\n .set([ctrlKey, arrowLeft], this._navigateParts.bind(this, 0))\n .set([ctrlKey, arrowRight], this._navigateParts.bind(this, 1));\n }\n\n protected override update(props: PropertyValues<this>): void {\n if (props.has('displayFormat')) {\n this._updateDefaultDisplayFormat();\n }\n\n if (props.has('locale')) {\n this._initializeDefaultMask();\n }\n\n if (props.has('displayFormat') || props.has('locale')) {\n this._updateMaskDisplay();\n }\n\n super.update(props);\n }\n\n //#endregion\n\n // #region Event handlers\n\n private _handleResourceChange(): void {\n this._initializeDefaultMask();\n this._updateMaskDisplay();\n }\n\n protected _handleDragLeave(): void {\n if (!this._focused) {\n this._updateMaskDisplay();\n }\n }\n\n protected _handleDragEnter(): void {\n if (!this._focused) {\n this._maskedValue = this._buildMaskedValue();\n }\n }\n\n /**\n * Handles wheel events for spinning date parts.\n */\n @eventOptions({ passive: false })\n protected async _handleWheel(event: WheelEvent): Promise<void> {\n if (!this._focused || this.readOnly) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n const { start, end } = this._inputSelection;\n event.deltaY > 0 ? this.stepDown() : this.stepUp();\n this._emitInputEvent();\n\n await this.updateComplete;\n this.setSelectionRange(start, end);\n }\n\n // #endregion\n\n //#region Keybindings\n\n /**\n * Navigates to the previous or next date part.\n */\n protected _navigateParts(direction: number): void {\n const position = this._calculatePartNavigationPosition(\n this._input?.value ?? '',\n direction\n );\n this.setSelectionRange(position, position);\n }\n\n /**\n * Handles keyboard-triggered spinning (arrow up/down).\n */\n protected async _keyboardSpin(direction: 'up' | 'down'): Promise<void> {\n direction === 'up' ? this.stepUp() : this.stepDown();\n this._emitInputEvent();\n await this.updateComplete;\n this.setSelectionRange(this._maskSelection.start, this._maskSelection.end);\n }\n\n // #endregion\n\n //#region Internal API\n\n /**\n * Common logic for stepping up or down a date part.\n * @internal\n */\n protected _performStep(\n datePart: unknown,\n delta: number | undefined,\n isDecrement: boolean\n ): void {\n const part = datePart || this._targetDatePart;\n if (!part) return;\n\n const { start, end } = this._inputSelection;\n const newValue = this._calculateSpunValue(part, delta, isDecrement);\n this._commitSpunValue(newValue);\n this.updateComplete.then(() => this._input?.setSelectionRange(start, end));\n }\n\n /**\n * Updates the displayed mask value based on focus state.\n * When focused, shows the editable mask. When unfocused, defers to the leaf's display formatter.\n */\n protected _updateMaskDisplay(): void {\n this._maskedValue = this._focused\n ? this._buildMaskedValue()\n : this._buildDisplayValue();\n }\n\n /**\n * Checks if all mask positions are filled (no prompt characters remain).\n */\n protected _isMaskComplete(): boolean {\n return !this._maskedValue.includes(this.prompt);\n }\n\n /**\n * Applies a mask pattern to the input, parsing the format string into date parts.\n */\n protected _applyMask(formatString: string): void {\n const previous = this._parser.mask;\n this._parser.mask = formatString;\n\n // Update placeholder if not set or if it matches the old format\n if (!this.placeholder || previous === this.placeholder) {\n this.placeholder = this._parser.mask;\n }\n }\n\n /**\n * Updates the default display format based on current locale.\n */\n private _updateDefaultDisplayFormat(): void {\n this._defaultDisplayFormat = getDateFormatter().getLocaleDateTimeFormat(\n this.locale\n );\n }\n\n protected _initializeDefaultMask(): void {\n this._updateDefaultDisplayFormat();\n\n if (!this._inputFormat) {\n this._applyMask(getDefaultDateTimeFormat(this.locale));\n }\n }\n\n /**\n * Resolves the part names for the container based on the current state.\n */\n protected _resolvePartNames(base: string): Record<string, boolean> {\n return {\n [base]: true,\n prefixed: this._slots.hasAssignedElements('prefix', {\n selector: '[slot=\"prefix\"]:not([hidden])',\n }),\n suffixed: this._slots.hasAssignedElements('suffix', {\n selector: '[slot=\"suffix\"]:not([hidden])',\n }),\n filled: !this._isEmptyMask,\n };\n }\n\n // #endregion\n\n // #region Public API\n\n /** Selects all the text inside the input. */\n public select(): void {\n this._input?.select();\n }\n\n /* alternateName: focusComponent */\n /** Sets focus on the control. */\n public override focus(options?: FocusOptions): void {\n this._input?.focus(options);\n }\n\n /* alternateName: blurComponent */\n /** Removes focus from the control. */\n public override blur(): void {\n this._input?.blur();\n }\n\n /* blazorSuppress */\n /** Increments a date/time portion. */\n public stepUp(datePart?: unknown, delta?: number): void {\n this._performStep(datePart, delta, false);\n }\n\n /* blazorSuppress */\n /** Decrements a date/time portion. */\n public stepDown(datePart?: unknown, delta?: number): void {\n this._performStep(datePart, delta, true);\n }\n\n /** Clears the input element of user input. */\n public abstract clear(): void;\n\n //#endregion\n\n //#region Render\n\n protected _renderInput(): TemplateResult {\n const hasNegativeTabIndex = this.getAttribute('tabindex') === '-1';\n const hasHelperText = this._slots.hasAssignedElements('helper-text');\n\n return renderMaskedNativeInput({\n id: this._inputId,\n partNames: this._resolvePartNames('input'),\n name: this.name,\n value: this._maskedValue,\n placeholder: this.placeholder || this._parser.emptyMask,\n readOnly: this.readOnly,\n disabled: this.disabled,\n tabindex: hasNegativeTabIndex ? -1 : undefined,\n ariaDescribedBy: hasHelperText ? 'helper-text' : undefined,\n onInput: this._handleInput,\n onFocus: this._handleFocus,\n onBlur: this._handleBlur,\n onClick: this._handleClick,\n onSetMaskSelection: this._setMaskSelection,\n onCompositionStart: this._handleCompositionStart,\n onCompositionEnd: this._handleCompositionEnd,\n onWheel: this._handleWheel,\n onDragEnter: this._handleDragEnter,\n onDragLeave: this._handleDragLeave,\n });\n }\n\n protected override render() {\n return cache(\n renderInputShell(this, {\n theme: this._themes.theme,\n label: this.label,\n labelId: this._inputId,\n containerParts: this._resolvePartNames('container'),\n renderInput: this._renderInput,\n })\n );\n }\n\n //#endregion\n\n // #region Abstract methods and properties\n\n protected abstract get _datePartDeltas(): DatePartDeltas;\n\n protected abstract _buildMaskedValue(): string;\n protected abstract _buildDisplayValue(): string;\n protected abstract override _syncValueFromMask(): void;\n protected abstract _calculatePartNavigationPosition(\n value: string,\n direction: number\n ): number;\n protected abstract _calculateSpunValue(\n part: unknown,\n delta: number | undefined,\n isDecrement: boolean\n ): unknown;\n protected abstract _commitSpunValue(value: unknown): void;\n protected abstract _setCurrentDateTime(): void;\n protected abstract _handleFocus(): Promise<void>;\n protected abstract _getDatePartAtCursor(): unknown;\n protected abstract _getDefaultDatePart(): unknown;\n\n public abstract hasDateParts(): boolean;\n public abstract hasTimeParts(): boolean;\n\n // #endregion\n}\n"]}
@@ -1,6 +1,14 @@
1
+ import type { AbstractConstructor } from '../common/mixins/constructor.js';
1
2
  import { DatePart, type DatePartDeltas } from './date-part.js';
2
- import { IgcDateTimeInputBaseComponent, type IgcDateTimeInputComponentEventMap } from './date-time-input.base.js';
3
+ import { IgcDateTimeInputBaseComponent } from './date-time-input.base.js';
3
4
  import { DateTimeMaskParser } from './datetime-mask-parser.js';
5
+ export interface IgcDateTimeInputComponentEventMap {
6
+ igcInput: CustomEvent<string>;
7
+ igcChange: CustomEvent<Date | null>;
8
+ focus: FocusEvent;
9
+ blur: FocusEvent;
10
+ }
11
+ declare const IgcDateTimeInputComponent_base: import("../common/mixins/constructor.js").Constructor<import("../common/mixins/event-emitter.js").EventEmitterInterface<IgcDateTimeInputComponentEventMap>> & AbstractConstructor<IgcDateTimeInputBaseComponent>;
4
12
  /**
5
13
  * A date time input is an input field that lets you set and edit the date and time in a chosen input element
6
14
  * using customizable display and input formats.
@@ -26,10 +34,7 @@ import { DateTimeMaskParser } from './datetime-mask-parser.js';
26
34
  * @csspart suffix - The suffix wrapper.
27
35
  * @csspart helper-text - The helper text wrapper.
28
36
  */
29
- export interface IgcDateTimeInputEventMap extends Omit<IgcDateTimeInputComponentEventMap, 'igcChange'> {
30
- igcChange: CustomEvent<Date | null>;
31
- }
32
- export default class IgcDateTimeInputComponent extends IgcDateTimeInputBaseComponent {
37
+ export default class IgcDateTimeInputComponent extends IgcDateTimeInputComponent_base {
33
38
  static readonly tagName = "igc-date-time-input";
34
39
  static styles: import("lit").CSSResult[];
35
40
  static register(): void;
@@ -121,3 +126,4 @@ declare global {
121
126
  'igc-date-time-input': IgcDateTimeInputComponent;
122
127
  }
123
128
  }
129
+ export {};
@@ -9,6 +9,7 @@ import { addThemingController } from '../../theming/theming-controller.js';
9
9
  import { convertToDate, isValidDate } from '../calendar/helpers.js';
10
10
  import { registerComponent } from '../common/definitions/register.js';
11
11
  import { formatDisplayDate } from '../common/i18n/i18n-controller.js';
12
+ import { EventEmitterMixin } from '../common/mixins/event-emitter.js';
12
13
  import { FormValueDateTimeTransformers } from '../common/mixins/forms/form-transformers.js';
13
14
  import { createFormValueState } from '../common/mixins/forms/form-value.js';
14
15
  import { equal } from '../common/util.js';
@@ -17,10 +18,10 @@ import { styles as shared } from '../input/themes/shared/input.common.css.js';
17
18
  import { all } from '../input/themes/themes.js';
18
19
  import IgcValidationContainerComponent from '../validation-container/validation-container.js';
19
20
  import { DatePart, DEFAULT_DATE_PARTS_SPIN_DELTAS, } from './date-part.js';
20
- import { IgcDateTimeInputBaseComponent, } from './date-time-input.base.js';
21
+ import { IgcDateTimeInputBaseComponent } from './date-time-input.base.js';
21
22
  import { createDatePart, DateParts, DateTimeMaskParser, } from './datetime-mask-parser.js';
22
23
  import { dateTimeInputValidators } from './validators.js';
23
- export default class IgcDateTimeInputComponent extends IgcDateTimeInputBaseComponent {
24
+ export default class IgcDateTimeInputComponent extends EventEmitterMixin(IgcDateTimeInputBaseComponent) {
24
25
  constructor() {
25
26
  super(...arguments);
26
27
  this._themes = addThemingController(this, all);
@@ -1 +1 @@
1
- {"version":3,"file":"date-time-input.js","sourceRoot":"","sources":["../../../src/components/date-time-input/date-time-input.ts"],"names":[],"mappings":"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","sourcesContent":["import { property } from 'lit/decorators.js';\nimport { addThemingController } from '../../theming/theming-controller.js';\nimport { convertToDate, isValidDate } from '../calendar/helpers.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport { formatDisplayDate } from '../common/i18n/i18n-controller.js';\nimport { FormValueDateTimeTransformers } from '../common/mixins/forms/form-transformers.js';\nimport { createFormValueState } from '../common/mixins/forms/form-value.js';\nimport { equal } from '../common/util.js';\nimport { styles } from '../input/themes/input.base.css.js';\nimport { styles as shared } from '../input/themes/shared/input.common.css.js';\nimport { all } from '../input/themes/themes.js';\nimport IgcValidationContainerComponent from '../validation-container/validation-container.js';\nimport {\n DatePart,\n type DatePartDeltas,\n DEFAULT_DATE_PARTS_SPIN_DELTAS,\n} from './date-part.js';\nimport {\n IgcDateTimeInputBaseComponent,\n type IgcDateTimeInputComponentEventMap,\n} from './date-time-input.base.js';\nimport {\n createDatePart,\n DateParts,\n DateTimeMaskParser,\n} from './datetime-mask-parser.js';\nimport { dateTimeInputValidators } from './validators.js';\n\n/**\n * A date time input is an input field that lets you set and edit the date and time in a chosen input element\n * using customizable display and input formats.\n *\n * @element igc-date-time-input\n *\n * @slot prefix - Renders content before the input.\n * @slot suffix - Renders content after input.\n * @slot helper-text - Renders content below the input.\n * @slot value-missing - Renders content when the required validation fails.\n * @slot range-overflow - Renders content when the max validation fails.\n * @slot range-underflow - Renders content when the min validation fails.\n * @slot custom-error - Renders content when setCustomValidity(message) is set.\n * @slot invalid - Renders content when the component is in invalid state (validity.valid = false).\n *\n * @fires igcInput - Emitted when the control input receives user input.\n * @fires igcChange - Emitted when the control's checked state changes.\n *\n * @csspart container - The main wrapper that holds all main input elements.\n * @csspart input - The native input element.\n * @csspart label - The native label element.\n * @csspart prefix - The prefix wrapper.\n * @csspart suffix - The suffix wrapper.\n * @csspart helper-text - The helper text wrapper.\n */\nexport interface IgcDateTimeInputEventMap extends Omit<\n IgcDateTimeInputComponentEventMap,\n 'igcChange'\n> {\n igcChange: CustomEvent<Date | null>;\n}\n\nexport default class IgcDateTimeInputComponent extends IgcDateTimeInputBaseComponent {\n public static readonly tagName = 'igc-date-time-input';\n public static styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(\n IgcDateTimeInputComponent,\n IgcValidationContainerComponent\n );\n }\n\n //#region Private state and properties\n\n protected override readonly _themes = addThemingController(this, all);\n protected override readonly _parser = new DateTimeMaskParser();\n protected override readonly _formValue = createFormValueState(this, {\n initialValue: null,\n transformers: FormValueDateTimeTransformers,\n });\n\n protected override get __validators() {\n return dateTimeInputValidators;\n }\n\n protected override get _datePartDeltas(): DatePartDeltas {\n return { ...DEFAULT_DATE_PARTS_SPIN_DELTAS, ...this.spinDelta };\n }\n\n protected _oldValue: Date | null = null;\n\n //#endregion\n\n //#region Public attributes and properties\n\n /* @tsTwoWayProperty(true, \"igcChange\", \"detail\", false) */\n /**\n * The value of the input.\n * @attr\n */\n @property({ converter: convertToDate })\n public set value(value: Date | string | null | undefined) {\n this._formValue.setValueAndFormState(value as Date | null);\n this._updateMaskDisplay();\n }\n\n public get value(): Date | null {\n return this._formValue.value;\n }\n\n //#endregion\n\n //#region Event handlers\n\n protected async _handleFocus(): Promise<void> {\n this._focused = true;\n\n if (this.readOnly) {\n return;\n }\n\n this._oldValue = this.value;\n\n if (!this.value) {\n this._maskedValue = this._parser.emptyMask;\n await this.updateComplete;\n this.select();\n } else if (this.displayFormat !== this.inputFormat) {\n this._updateMaskDisplay();\n }\n }\n\n protected override _handleBlur(): void {\n this._focused = false;\n\n // Handle incomplete mask input\n if (!(this._isMaskComplete() || this._isEmptyMask)) {\n const parsedDate = this._parser.parseDate(this._maskedValue);\n\n if (parsedDate) {\n this.value = parsedDate;\n } else {\n this.clear();\n }\n } else {\n this._updateMaskDisplay();\n }\n\n // Emit change event if value changed\n if (!this.readOnly && !equal(this._oldValue, this.value)) {\n this.emitEvent('igcChange', { detail: this.value });\n }\n\n super._handleBlur();\n }\n\n //#endregion\n\n //#region Navigation\n\n /**\n * Calculates the new cursor position when navigating between date parts.\n * direction = 0: navigate to start of previous part\n * direction = 1: navigate to start of next part\n */\n protected override _calculatePartNavigationPosition(\n inputValue: string,\n direction: number\n ): number {\n const cursorPos = this._maskSelection.start;\n const dateParts = this._parser.dateParts;\n\n if (direction === 0) {\n // Navigate backwards: find last literal before cursor\n const part = dateParts.findLast(\n (part) => part.type === DateParts.Literal && part.end < cursorPos\n );\n return part?.end ?? 0;\n }\n\n // Navigate forwards: find first literal after cursor\n const part = dateParts.find(\n (part) => part.type === DateParts.Literal && part.start > cursorPos\n );\n return part?.start ?? inputValue.length;\n }\n\n //#endregion\n\n //#region Internal API\n\n /**\n * Gets the date part at the current cursor position.\n * Uses inclusive end to handle cursor at the end of the last part.\n * Returns undefined if cursor is not within a valid date part.\n */\n protected override _getDatePartAtCursor(): DatePart | undefined {\n return this._parser.getDatePartForCursor(this._inputSelection.start)\n ?.type as DatePart | undefined;\n }\n\n /**\n * Gets the default date part to target when the input is not focused.\n * Prioritizes: Date > Hours > First available part\n */\n protected override _getDefaultDatePart(): DatePart | undefined {\n return (this._parser.getPartByType(DateParts.Date)?.type ??\n this._parser.getPartByType(DateParts.Hours)?.type ??\n this._parser.getFirstDatePart()?.type) as DatePart | undefined;\n }\n\n /**\n * Builds the masked value string from the current date value.\n * Returns empty mask if no value, or existing masked value if incomplete.\n */\n protected override _buildMaskedValue(): string {\n return isValidDate(this.value)\n ? this._parser.formatDate(this.value)\n : this._maskedValue || this._parser.emptyMask;\n }\n\n /**\n * Builds the formatted display value shown when the input is not focused.\n */\n protected override _buildDisplayValue(): string {\n return isValidDate(this.value)\n ? formatDisplayDate(this.value, this.locale, this.displayFormat)\n : '';\n }\n\n /**\n * Commits a value produced by spinning a date part.\n */\n protected override _commitSpunValue(value: unknown): void {\n this.value = value as Date;\n }\n\n /**\n * Sets the value to the current date/time.\n */\n protected override _setCurrentDateTime(): void {\n this.value = new Date();\n this._emitInputEvent();\n }\n\n /**\n * Emits an `igcInput` event whose `detail` is the parsed value as an ISO\n * string (preserving the legacy contract for this component).\n */\n protected override _emitInputEvent(): void {\n this._setTouchedState();\n this.emitEvent('igcInput', { detail: this.value?.toISOString() });\n }\n\n /**\n * Calculates the new date value after spinning a date part.\n */\n protected override _calculateSpunValue(\n datePart: DatePart,\n delta: number | undefined,\n isDecrement: boolean\n ): Date {\n // Default to 1 if delta is 0 or undefined\n const effectiveDelta =\n delta || this._datePartDeltas[datePart as keyof DatePartDeltas] || 1;\n\n const spinAmount = isDecrement\n ? -Math.abs(effectiveDelta)\n : Math.abs(effectiveDelta);\n\n return this._spinDatePart(datePart, spinAmount);\n }\n\n /**\n * Spins a specific date part by the given delta.\n */\n protected _spinDatePart(datePart: DatePart, delta: number): Date {\n if (!isValidDate(this.value)) {\n return new Date();\n }\n\n const newDate = new Date(this.value.getTime());\n const partType = datePart as unknown as DateParts;\n\n // Get the part instance from the parser, or create one for explicit spin operations\n let part = this._parser.getPartByType(partType);\n if (!part) {\n // For explicit spin operations (e.g., stepDown(DatePart.Minutes)),\n // create a temporary part even if not in the format\n part = createDatePart(partType, { start: 0, end: 0, format: '' });\n }\n\n // For AM/PM, we need to extract the current AM/PM value from the mask\n let amPmValue: string | undefined;\n if (datePart === DatePart.AmPm) {\n const formatPart = this._parser.getPartByType(DateParts.AmPm);\n if (formatPart) {\n amPmValue = this._maskedValue.substring(\n formatPart.start,\n formatPart.end\n );\n }\n }\n\n part.spin(delta, {\n date: newDate,\n spinLoop: this.spinLoop,\n amPmValue,\n originalDate: this.value,\n });\n\n return newDate;\n }\n\n /**\n * Updates the internal value based on the current masked input.\n * Only sets a value if the mask is complete and parses to a valid date.\n */\n protected override _syncValueFromMask(): void {\n if (!this._isMaskComplete()) {\n this.value = null;\n return;\n }\n\n const parsedDate = this._parser.parseDate(this._maskedValue);\n this.value = isValidDate(parsedDate) ? parsedDate : null;\n }\n\n //#endregion\n\n //#region Public API\n\n /** Increments a date/time portion. */\n public override stepUp(datePart?: DatePart, delta?: number): void {\n super.stepUp(datePart, delta);\n }\n\n /** Decrements a date/time portion. */\n public override stepDown(datePart?: DatePart, delta?: number): void {\n super.stepDown(datePart, delta);\n }\n\n /** Clears the input element of user input. */\n public override clear(): void {\n this._maskedValue = '';\n this.value = null;\n }\n\n /* blazorSuppress */\n /**\n * Checks whether the current format includes date parts (day, month, year).\n * @internal\n */\n public override hasDateParts(): boolean {\n return this._parser.hasDateParts();\n }\n\n /* blazorSuppress */\n /**\n * Checks whether the current format includes time parts (hours, minutes, seconds).\n * @internal\n */\n public override hasTimeParts(): boolean {\n return this._parser.hasTimeParts();\n }\n\n //#endregion\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-date-time-input': IgcDateTimeInputComponent;\n }\n}\n"]}
1
+ {"version":3,"file":"date-time-input.js","sourceRoot":"","sources":["../../../src/components/date-time-input/date-time-input.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,6BAA6B,EAAE,MAAM,6CAA6C,CAAC;AAC5F,OAAO,EAAE,oBAAoB,EAAE,MAAM,sCAAsC,CAAC;AAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,4CAA4C,CAAC;AAC9E,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAChD,OAAO,+BAA+B,MAAM,iDAAiD,CAAC;AAC9F,OAAO,EACL,QAAQ,EAER,8BAA8B,GAC/B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,6BAA6B,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EACL,cAAc,EACd,SAAS,EACT,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAwC1D,MAAM,CAAC,OAAO,OAAO,yBAA0B,SAAQ,iBAAiB,CAGtE,6BAA6B,CAAC;IAHhC;;QAiB8B,YAAO,GAAG,oBAAoB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC1C,YAAO,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACnC,eAAU,GAAG,oBAAoB,CAAC,IAAI,EAAE;YAClE,YAAY,EAAE,IAAI;YAClB,YAAY,EAAE,6BAA6B;SAC5C,CAAC,CAAC;QAUO,cAAS,GAAgB,IAAI,CAAC;IAsR1C,CAAC;aAlTwB,YAAO,GAAG,qBAAqB,AAAxB,CAAyB;aACzC,WAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,AAAnB,CAAoB;IAGjC,MAAM,CAAC,QAAQ;QACpB,iBAAiB,CACf,yBAAyB,EACzB,+BAA+B,CAChC,CAAC;IACJ,CAAC;IAWD,IAAuB,YAAY;QACjC,OAAO,uBAAuB,CAAC;IACjC,CAAC;IAED,IAAuB,eAAe;QACpC,OAAO,EAAE,GAAG,8BAA8B,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;IAClE,CAAC;IAcD,IAAW,KAAK,CAAC,KAAuC;QACtD,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,KAAoB,CAAC,CAAC;QAC3D,IAAI,CAAC,kBAAkB,EAAE,CAAC;IAC5B,CAAC;IAED,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;IAC/B,CAAC;IAMS,KAAK,CAAC,YAAY;QAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;QAE5B,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;YAC3C,MAAM,IAAI,CAAC,cAAc,CAAC;YAC1B,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;aAAM,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;YACnD,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAEkB,WAAW;QAC5B,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QAGtB,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YACnD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAE7D,IAAI,UAAU,EAAE,CAAC;gBACf,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;YAC1B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC5B,CAAC;QAGD,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACzD,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACtD,CAAC;QAED,KAAK,CAAC,WAAW,EAAE,CAAC;IACtB,CAAC;IAWkB,gCAAgC,CACjD,UAAkB,EAClB,SAAiB;QAEjB,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QAEzC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;YAEpB,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAC7B,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,GAAG,SAAS,CAClE,CAAC;YACF,OAAO,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC;QACxB,CAAC;QAGD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CACzB,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,GAAG,SAAS,CACpE,CAAC;QACF,OAAO,IAAI,EAAE,KAAK,IAAI,UAAU,CAAC,MAAM,CAAC;IAC1C,CAAC;IAWkB,oBAAoB;QACrC,OAAO,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC;YAClE,EAAE,IAA4B,CAAC;IACnC,CAAC;IAMkB,mBAAmB;QACpC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI;YACtD,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI;YACjD,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAyB,CAAC;IACnE,CAAC;IAMkB,iBAAiB;QAClC,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;YAC5B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;YACrC,CAAC,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;IAClD,CAAC;IAKkB,kBAAkB;QACnC,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;YAC5B,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC;YAChE,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IAKkB,gBAAgB,CAAC,KAAc;QAChD,IAAI,CAAC,KAAK,GAAG,KAAa,CAAC;IAC7B,CAAC;IAKkB,mBAAmB;QACpC,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC;IAMkB,eAAe;QAChC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;IACpE,CAAC;IAKkB,mBAAmB,CACpC,QAAkB,EAClB,KAAyB,EACzB,WAAoB;QAGpB,MAAM,cAAc,GAClB,KAAK,IAAI,IAAI,CAAC,eAAe,CAAC,QAAgC,CAAC,IAAI,CAAC,CAAC;QAEvE,MAAM,UAAU,GAAG,WAAW;YAC5B,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC;YAC3B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAE7B,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAClD,CAAC;IAKS,aAAa,CAAC,QAAkB,EAAE,KAAa;QACvD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,QAAgC,CAAC;QAGlD,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,EAAE,CAAC;YAGV,IAAI,GAAG,cAAc,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QACpE,CAAC;QAGD,IAAI,SAA6B,CAAC;QAClC,IAAI,QAAQ,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC9D,IAAI,UAAU,EAAE,CAAC;gBACf,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CACrC,UAAU,CAAC,KAAK,EAChB,UAAU,CAAC,GAAG,CACf,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACf,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS;YACT,YAAY,EAAE,IAAI,CAAC,KAAK;SACzB,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC;IAMkB,kBAAkB;QACnC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC7D,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3D,CAAC;IAOe,MAAM,CAAC,QAAmB,EAAE,KAAc;QACxD,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAGe,QAAQ,CAAC,QAAmB,EAAE,KAAc;QAC1D,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAClC,CAAC;IAGe,KAAK;QACnB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACpB,CAAC;IAOe,YAAY;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;IACrC,CAAC;IAOe,YAAY;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;IACrC,CAAC;;AAvQD;IADC,QAAQ,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;sDAItC","sourcesContent":["import { property } from 'lit/decorators.js';\nimport { addThemingController } from '../../theming/theming-controller.js';\nimport { convertToDate, isValidDate } from '../calendar/helpers.js';\nimport { registerComponent } from '../common/definitions/register.js';\nimport { formatDisplayDate } from '../common/i18n/i18n-controller.js';\nimport type { AbstractConstructor } from '../common/mixins/constructor.js';\nimport { EventEmitterMixin } from '../common/mixins/event-emitter.js';\nimport { FormValueDateTimeTransformers } from '../common/mixins/forms/form-transformers.js';\nimport { createFormValueState } from '../common/mixins/forms/form-value.js';\nimport { equal } from '../common/util.js';\nimport { styles } from '../input/themes/input.base.css.js';\nimport { styles as shared } from '../input/themes/shared/input.common.css.js';\nimport { all } from '../input/themes/themes.js';\nimport IgcValidationContainerComponent from '../validation-container/validation-container.js';\nimport {\n DatePart,\n type DatePartDeltas,\n DEFAULT_DATE_PARTS_SPIN_DELTAS,\n} from './date-part.js';\nimport { IgcDateTimeInputBaseComponent } from './date-time-input.base.js';\nimport {\n createDatePart,\n DateParts,\n DateTimeMaskParser,\n} from './datetime-mask-parser.js';\nimport { dateTimeInputValidators } from './validators.js';\n\nexport interface IgcDateTimeInputComponentEventMap {\n /* alternateName: inputOcurred */\n igcInput: CustomEvent<string>;\n igcChange: CustomEvent<Date | null>;\n // For analyzer meta only:\n /* skipWCPrefix */\n focus: FocusEvent;\n /* skipWCPrefix */\n blur: FocusEvent;\n}\n\n/* blazorIndirectRender */\n/* blazorSupportsVisualChildren */\n/**\n * A date time input is an input field that lets you set and edit the date and time in a chosen input element\n * using customizable display and input formats.\n *\n * @element igc-date-time-input\n *\n * @slot prefix - Renders content before the input.\n * @slot suffix - Renders content after input.\n * @slot helper-text - Renders content below the input.\n * @slot value-missing - Renders content when the required validation fails.\n * @slot range-overflow - Renders content when the max validation fails.\n * @slot range-underflow - Renders content when the min validation fails.\n * @slot custom-error - Renders content when setCustomValidity(message) is set.\n * @slot invalid - Renders content when the component is in invalid state (validity.valid = false).\n *\n * @fires igcInput - Emitted when the control input receives user input.\n * @fires igcChange - Emitted when the control's checked state changes.\n *\n * @csspart container - The main wrapper that holds all main input elements.\n * @csspart input - The native input element.\n * @csspart label - The native label element.\n * @csspart prefix - The prefix wrapper.\n * @csspart suffix - The suffix wrapper.\n * @csspart helper-text - The helper text wrapper.\n */\nexport default class IgcDateTimeInputComponent extends EventEmitterMixin<\n IgcDateTimeInputComponentEventMap,\n AbstractConstructor<IgcDateTimeInputBaseComponent>\n>(IgcDateTimeInputBaseComponent) {\n public static readonly tagName = 'igc-date-time-input';\n public static styles = [styles, shared];\n\n /* blazorSuppress */\n public static register(): void {\n registerComponent(\n IgcDateTimeInputComponent,\n IgcValidationContainerComponent\n );\n }\n\n //#region Private state and properties\n\n protected override readonly _themes = addThemingController(this, all);\n protected override readonly _parser = new DateTimeMaskParser();\n protected override readonly _formValue = createFormValueState(this, {\n initialValue: null,\n transformers: FormValueDateTimeTransformers,\n });\n\n protected override get __validators() {\n return dateTimeInputValidators;\n }\n\n protected override get _datePartDeltas(): DatePartDeltas {\n return { ...DEFAULT_DATE_PARTS_SPIN_DELTAS, ...this.spinDelta };\n }\n\n protected _oldValue: Date | null = null;\n\n //#endregion\n\n //#region Public attributes and properties\n\n /* @tsTwoWayProperty(true, \"igcChange\", \"detail\", false) */\n /**\n * The value of the input.\n * @attr\n */\n @property({ converter: convertToDate })\n public set value(value: Date | string | null | undefined) {\n this._formValue.setValueAndFormState(value as Date | null);\n this._updateMaskDisplay();\n }\n\n public get value(): Date | null {\n return this._formValue.value;\n }\n\n //#endregion\n\n //#region Event handlers\n\n protected async _handleFocus(): Promise<void> {\n this._focused = true;\n\n if (this.readOnly) {\n return;\n }\n\n this._oldValue = this.value;\n\n if (!this.value) {\n this._maskedValue = this._parser.emptyMask;\n await this.updateComplete;\n this.select();\n } else if (this.displayFormat !== this.inputFormat) {\n this._updateMaskDisplay();\n }\n }\n\n protected override _handleBlur(): void {\n this._focused = false;\n\n // Handle incomplete mask input\n if (!(this._isMaskComplete() || this._isEmptyMask)) {\n const parsedDate = this._parser.parseDate(this._maskedValue);\n\n if (parsedDate) {\n this.value = parsedDate;\n } else {\n this.clear();\n }\n } else {\n this._updateMaskDisplay();\n }\n\n // Emit change event if value changed\n if (!this.readOnly && !equal(this._oldValue, this.value)) {\n this.emitEvent('igcChange', { detail: this.value });\n }\n\n super._handleBlur();\n }\n\n //#endregion\n\n //#region Navigation\n\n /**\n * Calculates the new cursor position when navigating between date parts.\n * direction = 0: navigate to start of previous part\n * direction = 1: navigate to start of next part\n */\n protected override _calculatePartNavigationPosition(\n inputValue: string,\n direction: number\n ): number {\n const cursorPos = this._maskSelection.start;\n const dateParts = this._parser.dateParts;\n\n if (direction === 0) {\n // Navigate backwards: find last literal before cursor\n const part = dateParts.findLast(\n (part) => part.type === DateParts.Literal && part.end < cursorPos\n );\n return part?.end ?? 0;\n }\n\n // Navigate forwards: find first literal after cursor\n const part = dateParts.find(\n (part) => part.type === DateParts.Literal && part.start > cursorPos\n );\n return part?.start ?? inputValue.length;\n }\n\n //#endregion\n\n //#region Internal API\n\n /**\n * Gets the date part at the current cursor position.\n * Uses inclusive end to handle cursor at the end of the last part.\n * Returns undefined if cursor is not within a valid date part.\n */\n protected override _getDatePartAtCursor(): DatePart | undefined {\n return this._parser.getDatePartForCursor(this._inputSelection.start)\n ?.type as DatePart | undefined;\n }\n\n /**\n * Gets the default date part to target when the input is not focused.\n * Prioritizes: Date > Hours > First available part\n */\n protected override _getDefaultDatePart(): DatePart | undefined {\n return (this._parser.getPartByType(DateParts.Date)?.type ??\n this._parser.getPartByType(DateParts.Hours)?.type ??\n this._parser.getFirstDatePart()?.type) as DatePart | undefined;\n }\n\n /**\n * Builds the masked value string from the current date value.\n * Returns empty mask if no value, or existing masked value if incomplete.\n */\n protected override _buildMaskedValue(): string {\n return isValidDate(this.value)\n ? this._parser.formatDate(this.value)\n : this._maskedValue || this._parser.emptyMask;\n }\n\n /**\n * Builds the formatted display value shown when the input is not focused.\n */\n protected override _buildDisplayValue(): string {\n return isValidDate(this.value)\n ? formatDisplayDate(this.value, this.locale, this.displayFormat)\n : '';\n }\n\n /**\n * Commits a value produced by spinning a date part.\n */\n protected override _commitSpunValue(value: unknown): void {\n this.value = value as Date;\n }\n\n /**\n * Sets the value to the current date/time.\n */\n protected override _setCurrentDateTime(): void {\n this.value = new Date();\n this._emitInputEvent();\n }\n\n /**\n * Emits an `igcInput` event whose `detail` is the parsed value as an ISO\n * string (preserving the legacy contract for this component).\n */\n protected override _emitInputEvent(): void {\n this._setTouchedState();\n this.emitEvent('igcInput', { detail: this.value?.toISOString() });\n }\n\n /**\n * Calculates the new date value after spinning a date part.\n */\n protected override _calculateSpunValue(\n datePart: DatePart,\n delta: number | undefined,\n isDecrement: boolean\n ): Date {\n // Default to 1 if delta is 0 or undefined\n const effectiveDelta =\n delta || this._datePartDeltas[datePart as keyof DatePartDeltas] || 1;\n\n const spinAmount = isDecrement\n ? -Math.abs(effectiveDelta)\n : Math.abs(effectiveDelta);\n\n return this._spinDatePart(datePart, spinAmount);\n }\n\n /**\n * Spins a specific date part by the given delta.\n */\n protected _spinDatePart(datePart: DatePart, delta: number): Date {\n if (!isValidDate(this.value)) {\n return new Date();\n }\n\n const newDate = new Date(this.value.getTime());\n const partType = datePart as unknown as DateParts;\n\n // Get the part instance from the parser, or create one for explicit spin operations\n let part = this._parser.getPartByType(partType);\n if (!part) {\n // For explicit spin operations (e.g., stepDown(DatePart.Minutes)),\n // create a temporary part even if not in the format\n part = createDatePart(partType, { start: 0, end: 0, format: '' });\n }\n\n // For AM/PM, we need to extract the current AM/PM value from the mask\n let amPmValue: string | undefined;\n if (datePart === DatePart.AmPm) {\n const formatPart = this._parser.getPartByType(DateParts.AmPm);\n if (formatPart) {\n amPmValue = this._maskedValue.substring(\n formatPart.start,\n formatPart.end\n );\n }\n }\n\n part.spin(delta, {\n date: newDate,\n spinLoop: this.spinLoop,\n amPmValue,\n originalDate: this.value,\n });\n\n return newDate;\n }\n\n /**\n * Updates the internal value based on the current masked input.\n * Only sets a value if the mask is complete and parses to a valid date.\n */\n protected override _syncValueFromMask(): void {\n if (!this._isMaskComplete()) {\n this.value = null;\n return;\n }\n\n const parsedDate = this._parser.parseDate(this._maskedValue);\n this.value = isValidDate(parsedDate) ? parsedDate : null;\n }\n\n //#endregion\n\n //#region Public API\n\n /** Increments a date/time portion. */\n public override stepUp(datePart?: DatePart, delta?: number): void {\n super.stepUp(datePart, delta);\n }\n\n /** Decrements a date/time portion. */\n public override stepDown(datePart?: DatePart, delta?: number): void {\n super.stepDown(datePart, delta);\n }\n\n /** Clears the input element of user input. */\n public override clear(): void {\n this._maskedValue = '';\n this.value = null;\n }\n\n /* blazorSuppress */\n /**\n * Checks whether the current format includes date parts (day, month, year).\n * @internal\n */\n public override hasDateParts(): boolean {\n return this._parser.hasDateParts();\n }\n\n /* blazorSuppress */\n /**\n * Checks whether the current format includes time parts (hours, minutes, seconds).\n * @internal\n */\n public override hasTimeParts(): boolean {\n return this._parser.hasTimeParts();\n }\n\n //#endregion\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'igc-date-time-input': IgcDateTimeInputComponent;\n }\n}\n"]}
@@ -1,3 +1,3 @@
1
1
  import { css } from 'lit';
2
- export const styles = css `:host{--elevation: var(--ig-dialog-elevation, var(--ig-elevation-23));--background: var(--ig-dialog-background, var(--ig-gray-50));--title-color: var(--ig-dialog-title-color, var(--ig-gray-900));--message-color: var(--ig-dialog-message-color, var(--ig-gray-700));--border-color: var(--ig-dialog-border-color, transparent);--backdrop: var(--ig-dialog-backdrop, hsl(from var(--ig-gray-500) h s l/0.54));--border-radius: var(--ig-dialog-border-radius, clamp(0rem, calc(var(--ig-radius-factor, 0.2777777778) * 2.25rem), 2.25rem));--default-size: var(--ig-dialog-default-size, 2);--ig-theme: indigo;--ig-theme-variant: dark}`;
2
+ export const styles = css `:host{--elevation: var(--ig-dialog-elevation, var(--ig-elevation-24));--background: var(--ig-dialog-background, var(--ig-gray-50));--title-color: var(--ig-dialog-title-color, var(--ig-gray-900));--message-color: var(--ig-dialog-message-color, var(--ig-gray-700));--border-color: var(--ig-dialog-border-color, transparent);--backdrop: var(--ig-dialog-backdrop, hsl(from var(--ig-gray-500) h s l/0.54));--border-radius: var(--ig-dialog-border-radius, clamp(0rem, calc(var(--ig-radius-factor, 0.2777777778) * 2.25rem), 2.25rem));--default-size: var(--ig-dialog-default-size, 2);--ig-theme: indigo;--ig-theme-variant: dark}`;
3
3
  //# sourceMappingURL=dialog.indigo.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dialog.indigo.css.js","sourceRoot":"","sources":["../../../../../src/components/dialog/themes/dark/dialog.indigo.css.ts"],"names":[],"mappings":"AACE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,6mBAA6mB,CAAC","sourcesContent":["\n import { css } from 'lit';\n export const styles = css`:host{--elevation: var(--ig-dialog-elevation, var(--ig-elevation-23));--background: var(--ig-dialog-background, var(--ig-gray-50));--title-color: var(--ig-dialog-title-color, var(--ig-gray-900));--message-color: var(--ig-dialog-message-color, var(--ig-gray-700));--border-color: var(--ig-dialog-border-color, transparent);--backdrop: var(--ig-dialog-backdrop, hsl(from var(--ig-gray-500) h s l/0.54));--border-radius: var(--ig-dialog-border-radius, clamp(0rem, calc(var(--ig-radius-factor, 0.2777777778) * 2.25rem), 2.25rem));--default-size: var(--ig-dialog-default-size, 2);--ig-theme: indigo;--ig-theme-variant: dark}`;\n "]}
1
+ {"version":3,"file":"dialog.indigo.css.js","sourceRoot":"","sources":["../../../../../src/components/dialog/themes/dark/dialog.indigo.css.ts"],"names":[],"mappings":"AACE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,6mBAA6mB,CAAC","sourcesContent":["\n import { css } from 'lit';\n export const styles = css`:host{--elevation: var(--ig-dialog-elevation, var(--ig-elevation-24));--background: var(--ig-dialog-background, var(--ig-gray-50));--title-color: var(--ig-dialog-title-color, var(--ig-gray-900));--message-color: var(--ig-dialog-message-color, var(--ig-gray-700));--border-color: var(--ig-dialog-border-color, transparent);--backdrop: var(--ig-dialog-backdrop, hsl(from var(--ig-gray-500) h s l/0.54));--border-radius: var(--ig-dialog-border-radius, clamp(0rem, calc(var(--ig-radius-factor, 0.2777777778) * 2.25rem), 2.25rem));--default-size: var(--ig-dialog-default-size, 2);--ig-theme: indigo;--ig-theme-variant: dark}`;\n "]}
@@ -1,3 +1,3 @@
1
1
  import { css } from 'lit';
2
- export const styles = css `:host{--elevation: var(--ig-drop-down-elevation, var(--ig-elevation-2));--background-color: var(--ig-drop-down-background-color, var(--ig-gray-50));--header-text-color: var(--ig-drop-down-header-text-color, hsl(from var(--ig-gray-50-contrast) h s l/0.6));--item-text-color: var(--ig-drop-down-item-text-color, hsl(from var(--ig-gray-50-contrast) h s l/0.8));--item-icon-color: var(--ig-drop-down-item-icon-color, hsl(from var(--ig-gray-50-contrast) h s l/0.6));--hover-item-background: var(--ig-drop-down-hover-item-background, hsl(from var(--ig-gray-50-contrast) h s l/0.1));--hover-item-text-color: var(--ig-drop-down-hover-item-text-color, var(--ig-gray-50-contrast));--hover-item-icon-color: var(--ig-drop-down-hover-item-icon-color, hsl(from var(--ig-gray-50-contrast) h s l/0.8));--focused-item-background: var(--ig-drop-down-focused-item-background, transparent);--focused-item-text-color: var(--ig-drop-down-focused-item-text-color, hsl(from var(--ig-gray-50-contrast) h s l/0.8));--focused-item-border-color: var(--ig-drop-down-focused-item-border-color, var(--ig-primary-400));--selected-item-background: var(--ig-drop-down-selected-item-background, hsl(from var(--ig-primary-400) h s l/0.3));--disabled-item-background: var(--ig-drop-down-disabled-item-background, transparent);--disabled-item-text-color: var(--ig-drop-down-disabled-item-text-color, hsl(from var(--ig-gray-50-contrast) h s l/0.2));--border-width: var(--ig-drop-down-border-width, 1px);--border-radius: var(--ig-drop-down-border-radius, clamp(0rem, calc(var(--ig-radius-factor, 0.2) * 1.25rem), 1.25rem));--item-border-radius: var(--ig-drop-down-item-border-radius, clamp(0rem, calc(var(--ig-radius-factor, 0.1) * 1.25rem), 1.25rem));--size: var(--ig-drop-down-size, max(var(--is-large, 1) * max(2rem, -1 * 2rem), var(--is-medium, 1) * max(1.75rem, -1 * 1.75rem), var(--is-small, 1) * max(1.5rem, -1 * 1.5rem)));--default-size: var(--ig-drop-down-default-size, 2);--selected-item-text-color: var(--ig-drop-down-selected-item-text-color, var(--ig-gray-50-contrast));--selected-item-icon-color: var(--ig-drop-down-selected-item-icon-color, hsl(from var(--ig-gray-50-contrast) h s l/0.8));--selected-hover-item-background: var(--ig-drop-down-selected-hover-item-background, hsl(from var(--ig-primary-400) h s l/0.5));--selected-hover-item-text-color: var(--ig-drop-down-selected-hover-item-text-color, var(--ig-gray-50-contrast));--selected-hover-item-icon-color: var(--ig-drop-down-selected-hover-item-icon-color, var(--ig-gray-50-contrast));--selected-focus-item-background: var(--ig-drop-down-selected-focus-item-background, hsl(from var(--ig-primary-400) h s l/0.3));--selected-focus-item-text-color: var(--ig-drop-down-selected-focus-item-text-color, var(--ig-gray-50-contrast));--ig-theme: indigo;--ig-theme-variant: dark}`;
2
+ export const styles = css `:host{--elevation: var(--ig-drop-down-elevation, var(--ig-elevation-3));--background-color: var(--ig-drop-down-background-color, var(--ig-gray-50));--header-text-color: var(--ig-drop-down-header-text-color, hsl(from var(--ig-gray-50-contrast) h s l/0.6));--item-text-color: var(--ig-drop-down-item-text-color, hsl(from var(--ig-gray-50-contrast) h s l/0.8));--item-icon-color: var(--ig-drop-down-item-icon-color, hsl(from var(--ig-gray-50-contrast) h s l/0.6));--hover-item-background: var(--ig-drop-down-hover-item-background, hsl(from var(--ig-gray-50-contrast) h s l/0.1));--hover-item-text-color: var(--ig-drop-down-hover-item-text-color, var(--ig-gray-50-contrast));--hover-item-icon-color: var(--ig-drop-down-hover-item-icon-color, hsl(from var(--ig-gray-50-contrast) h s l/0.8));--focused-item-background: var(--ig-drop-down-focused-item-background, transparent);--focused-item-text-color: var(--ig-drop-down-focused-item-text-color, hsl(from var(--ig-gray-50-contrast) h s l/0.8));--focused-item-border-color: var(--ig-drop-down-focused-item-border-color, var(--ig-primary-400));--selected-item-background: var(--ig-drop-down-selected-item-background, hsl(from var(--ig-primary-400) h s l/0.3));--disabled-item-background: var(--ig-drop-down-disabled-item-background, transparent);--disabled-item-text-color: var(--ig-drop-down-disabled-item-text-color, hsl(from var(--ig-gray-50-contrast) h s l/0.2));--border-width: var(--ig-drop-down-border-width, 1px);--border-radius: var(--ig-drop-down-border-radius, clamp(0rem, calc(var(--ig-radius-factor, 0.2) * 1.25rem), 1.25rem));--item-border-radius: var(--ig-drop-down-item-border-radius, clamp(0rem, calc(var(--ig-radius-factor, 0.1) * 1.25rem), 1.25rem));--size: var(--ig-drop-down-size, max(var(--is-large, 1) * max(2rem, -1 * 2rem), var(--is-medium, 1) * max(1.75rem, -1 * 1.75rem), var(--is-small, 1) * max(1.5rem, -1 * 1.5rem)));--default-size: var(--ig-drop-down-default-size, 2);--selected-item-text-color: var(--ig-drop-down-selected-item-text-color, var(--ig-gray-50-contrast));--selected-item-icon-color: var(--ig-drop-down-selected-item-icon-color, hsl(from var(--ig-gray-50-contrast) h s l/0.8));--selected-hover-item-background: var(--ig-drop-down-selected-hover-item-background, hsl(from var(--ig-primary-400) h s l/0.5));--selected-hover-item-text-color: var(--ig-drop-down-selected-hover-item-text-color, var(--ig-gray-50-contrast));--selected-hover-item-icon-color: var(--ig-drop-down-selected-hover-item-icon-color, var(--ig-gray-50-contrast));--selected-focus-item-background: var(--ig-drop-down-selected-focus-item-background, hsl(from var(--ig-primary-400) h s l/0.3));--selected-focus-item-text-color: var(--ig-drop-down-selected-focus-item-text-color, var(--ig-gray-50-contrast));--ig-theme: indigo;--ig-theme-variant: dark}`;
3
3
  //# sourceMappingURL=dropdown.indigo.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dropdown.indigo.css.js","sourceRoot":"","sources":["../../../../../src/components/dropdown/themes/dark/dropdown.indigo.css.ts"],"names":[],"mappings":"AACE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,qvFAAqvF,CAAC","sourcesContent":["\n import { css } from 'lit';\n export const styles = css`:host{--elevation: var(--ig-drop-down-elevation, var(--ig-elevation-2));--background-color: var(--ig-drop-down-background-color, var(--ig-gray-50));--header-text-color: var(--ig-drop-down-header-text-color, hsl(from var(--ig-gray-50-contrast) h s l/0.6));--item-text-color: var(--ig-drop-down-item-text-color, hsl(from var(--ig-gray-50-contrast) h s l/0.8));--item-icon-color: var(--ig-drop-down-item-icon-color, hsl(from var(--ig-gray-50-contrast) h s l/0.6));--hover-item-background: var(--ig-drop-down-hover-item-background, hsl(from var(--ig-gray-50-contrast) h s l/0.1));--hover-item-text-color: var(--ig-drop-down-hover-item-text-color, var(--ig-gray-50-contrast));--hover-item-icon-color: var(--ig-drop-down-hover-item-icon-color, hsl(from var(--ig-gray-50-contrast) h s l/0.8));--focused-item-background: var(--ig-drop-down-focused-item-background, transparent);--focused-item-text-color: var(--ig-drop-down-focused-item-text-color, hsl(from var(--ig-gray-50-contrast) h s l/0.8));--focused-item-border-color: var(--ig-drop-down-focused-item-border-color, var(--ig-primary-400));--selected-item-background: var(--ig-drop-down-selected-item-background, hsl(from var(--ig-primary-400) h s l/0.3));--disabled-item-background: var(--ig-drop-down-disabled-item-background, transparent);--disabled-item-text-color: var(--ig-drop-down-disabled-item-text-color, hsl(from var(--ig-gray-50-contrast) h s l/0.2));--border-width: var(--ig-drop-down-border-width, 1px);--border-radius: var(--ig-drop-down-border-radius, clamp(0rem, calc(var(--ig-radius-factor, 0.2) * 1.25rem), 1.25rem));--item-border-radius: var(--ig-drop-down-item-border-radius, clamp(0rem, calc(var(--ig-radius-factor, 0.1) * 1.25rem), 1.25rem));--size: var(--ig-drop-down-size, max(var(--is-large, 1) * max(2rem, -1 * 2rem), var(--is-medium, 1) * max(1.75rem, -1 * 1.75rem), var(--is-small, 1) * max(1.5rem, -1 * 1.5rem)));--default-size: var(--ig-drop-down-default-size, 2);--selected-item-text-color: var(--ig-drop-down-selected-item-text-color, var(--ig-gray-50-contrast));--selected-item-icon-color: var(--ig-drop-down-selected-item-icon-color, hsl(from var(--ig-gray-50-contrast) h s l/0.8));--selected-hover-item-background: var(--ig-drop-down-selected-hover-item-background, hsl(from var(--ig-primary-400) h s l/0.5));--selected-hover-item-text-color: var(--ig-drop-down-selected-hover-item-text-color, var(--ig-gray-50-contrast));--selected-hover-item-icon-color: var(--ig-drop-down-selected-hover-item-icon-color, var(--ig-gray-50-contrast));--selected-focus-item-background: var(--ig-drop-down-selected-focus-item-background, hsl(from var(--ig-primary-400) h s l/0.3));--selected-focus-item-text-color: var(--ig-drop-down-selected-focus-item-text-color, var(--ig-gray-50-contrast));--ig-theme: indigo;--ig-theme-variant: dark}`;\n "]}
1
+ {"version":3,"file":"dropdown.indigo.css.js","sourceRoot":"","sources":["../../../../../src/components/dropdown/themes/dark/dropdown.indigo.css.ts"],"names":[],"mappings":"AACE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,qvFAAqvF,CAAC","sourcesContent":["\n import { css } from 'lit';\n export const styles = css`:host{--elevation: var(--ig-drop-down-elevation, var(--ig-elevation-3));--background-color: var(--ig-drop-down-background-color, var(--ig-gray-50));--header-text-color: var(--ig-drop-down-header-text-color, hsl(from var(--ig-gray-50-contrast) h s l/0.6));--item-text-color: var(--ig-drop-down-item-text-color, hsl(from var(--ig-gray-50-contrast) h s l/0.8));--item-icon-color: var(--ig-drop-down-item-icon-color, hsl(from var(--ig-gray-50-contrast) h s l/0.6));--hover-item-background: var(--ig-drop-down-hover-item-background, hsl(from var(--ig-gray-50-contrast) h s l/0.1));--hover-item-text-color: var(--ig-drop-down-hover-item-text-color, var(--ig-gray-50-contrast));--hover-item-icon-color: var(--ig-drop-down-hover-item-icon-color, hsl(from var(--ig-gray-50-contrast) h s l/0.8));--focused-item-background: var(--ig-drop-down-focused-item-background, transparent);--focused-item-text-color: var(--ig-drop-down-focused-item-text-color, hsl(from var(--ig-gray-50-contrast) h s l/0.8));--focused-item-border-color: var(--ig-drop-down-focused-item-border-color, var(--ig-primary-400));--selected-item-background: var(--ig-drop-down-selected-item-background, hsl(from var(--ig-primary-400) h s l/0.3));--disabled-item-background: var(--ig-drop-down-disabled-item-background, transparent);--disabled-item-text-color: var(--ig-drop-down-disabled-item-text-color, hsl(from var(--ig-gray-50-contrast) h s l/0.2));--border-width: var(--ig-drop-down-border-width, 1px);--border-radius: var(--ig-drop-down-border-radius, clamp(0rem, calc(var(--ig-radius-factor, 0.2) * 1.25rem), 1.25rem));--item-border-radius: var(--ig-drop-down-item-border-radius, clamp(0rem, calc(var(--ig-radius-factor, 0.1) * 1.25rem), 1.25rem));--size: var(--ig-drop-down-size, max(var(--is-large, 1) * max(2rem, -1 * 2rem), var(--is-medium, 1) * max(1.75rem, -1 * 1.75rem), var(--is-small, 1) * max(1.5rem, -1 * 1.5rem)));--default-size: var(--ig-drop-down-default-size, 2);--selected-item-text-color: var(--ig-drop-down-selected-item-text-color, var(--ig-gray-50-contrast));--selected-item-icon-color: var(--ig-drop-down-selected-item-icon-color, hsl(from var(--ig-gray-50-contrast) h s l/0.8));--selected-hover-item-background: var(--ig-drop-down-selected-hover-item-background, hsl(from var(--ig-primary-400) h s l/0.5));--selected-hover-item-text-color: var(--ig-drop-down-selected-hover-item-text-color, var(--ig-gray-50-contrast));--selected-hover-item-icon-color: var(--ig-drop-down-selected-hover-item-icon-color, var(--ig-gray-50-contrast));--selected-focus-item-background: var(--ig-drop-down-selected-focus-item-background, hsl(from var(--ig-primary-400) h s l/0.3));--selected-focus-item-text-color: var(--ig-drop-down-selected-focus-item-text-color, var(--ig-gray-50-contrast));--ig-theme: indigo;--ig-theme-variant: dark}`;\n "]}
@@ -1,3 +1,3 @@
1
1
  import { css } from 'lit';
2
- export const styles = css `:host{--is-large: clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-large, 3), 1);--is-medium: min( clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-medium, 2), 1), clamp(0, var(--ig-size-large, 3) - var(--component-size, 1), 1) );--is-small: clamp(0, var(--ig-size-medium) - var(--component-size, 1), 1);position:relative;box-sizing:border-box;scrollbar-width:var(--ig-scrollbar-size, var(--sb-size));scrollbar-color:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color)) var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar{width:var(--ig-scrollbar-size, var(--sb-size));height:var(--ig-scrollbar-size, var(--sb-size));background:var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar-thumb{background:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color))}:host *,:host *::before,:host *::after{box-sizing:border-box}:host([hidden]),[hidden]{display:none !important}:host{--lines-clamped: 1;width:auto;overflow:hidden;display:flex;flex-direction:column}[part=header]{display:flex;align-items:center;cursor:pointer;padding-inline:max(var(--is-large, 1)*max(24px, -1 * 24px)*var(--ig-spacing-inline-large, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-medium, 1)*max(24px, -1 * 24px)*var(--ig-spacing-inline-medium, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-small, 1)*max(24px, -1 * 24px)*var(--ig-spacing-inline-small, var(--ig-spacing-inline, var(--ig-spacing))));padding-block:max(var(--is-large, 1)*max(16px, -1 * 16px)*var(--ig-spacing-block-large, var(--ig-spacing-block, var(--ig-spacing))),var(--is-medium, 1)*max(16px, -1 * 16px)*var(--ig-spacing-block-medium, var(--ig-spacing-block, var(--ig-spacing))),var(--is-small, 1)*max(16px, -1 * 16px)*var(--ig-spacing-block-small, var(--ig-spacing-block, var(--ig-spacing))))}[part=header]:focus,[part=header]:active{outline:rgba(0,0,0,0)}[part=header] *:not([part~=indicator]){display:flex;flex-direction:column;justify-content:center;flex:1 0 0%;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;user-select:none}[part=title]::slotted(*){font-family:var(--ig-h5-font-family, var(--ig-font-family));font-size:var(--ig-h5-font-size);font-weight:var(--ig-h5-font-weight);font-style:var(--ig-h5-font-style);line-height:var(--ig-h5-line-height);letter-spacing:var(--ig-h5-letter-spacing);text-transform:var(--ig-h5-text-transform);margin-top:var(--ig-h5-margin-top);margin-bottom:var(--ig-h5-margin-bottom);display:-webkit-inline-box;-webkit-line-clamp:var(--lines-clamped);-webkit-box-orient:vertical;overflow:hidden;margin:0}[part=subtitle]::slotted(*){font-family:var(--ig-subtitle-2-font-family, var(--ig-font-family));font-size:var(--ig-subtitle-2-font-size);font-weight:var(--ig-subtitle-2-font-weight);font-style:var(--ig-subtitle-2-font-style);line-height:var(--ig-subtitle-2-line-height);letter-spacing:var(--ig-subtitle-2-letter-spacing);text-transform:var(--ig-subtitle-2-text-transform);margin-top:var(--ig-subtitle-2-margin-top);margin-bottom:var(--ig-subtitle-2-margin-bottom);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}[part=content] ::slotted(*){font-family:var(--ig-body-2-font-family, var(--ig-font-family));font-size:var(--ig-body-2-font-size);font-weight:var(--ig-body-2-font-weight);font-style:var(--ig-body-2-font-style);line-height:var(--ig-body-2-line-height);letter-spacing:var(--ig-body-2-letter-spacing);text-transform:var(--ig-body-2-text-transform);margin-top:var(--ig-body-2-margin-top);margin-bottom:var(--ig-body-2-margin-bottom);display:block}[part~=content]{overflow:hidden}[part~=content]>slot{display:block;padding-inline:max(var(--is-large, 1)*max(24px, -1 * 24px)*var(--ig-spacing-inline-large, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-medium, 1)*max(24px, -1 * 24px)*var(--ig-spacing-inline-medium, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-small, 1)*max(24px, -1 * 24px)*var(--ig-spacing-inline-small, var(--ig-spacing-inline, var(--ig-spacing))));padding-block:max(var(--is-large, 1)*max(16px, -1 * 16px)*var(--ig-spacing-block-large, var(--ig-spacing-block, var(--ig-spacing))),var(--is-medium, 1)*max(16px, -1 * 16px)*var(--ig-spacing-block-medium, var(--ig-spacing-block, var(--ig-spacing))),var(--is-small, 1)*max(16px, -1 * 16px)*var(--ig-spacing-block-small, var(--ig-spacing-block, var(--ig-spacing))))}:host(:not([open])) [part~=content]{height:0}:host([open]) [part~=content]{height:auto}[part~=indicator] igc-icon{--ig-size: 3}:host([indicator-position=start]) [part~=indicator]{margin-inline-end:max(var(--is-large, 1)*max(16px, -1 * 16px)*var(--ig-spacing-inline-large, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-medium, 1)*max(16px, -1 * 16px)*var(--ig-spacing-inline-medium, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-small, 1)*max(16px, -1 * 16px)*var(--ig-spacing-inline-small, var(--ig-spacing-inline, var(--ig-spacing))))}:host([indicator-position=end]) [part~=indicator]{order:2;margin-inline-start:max(var(--is-large, 1)*max(16px, -1 * 16px)*var(--ig-spacing-inline-large, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-medium, 1)*max(16px, -1 * 16px)*var(--ig-spacing-inline-medium, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-small, 1)*max(16px, -1 * 16px)*var(--ig-spacing-inline-small, var(--ig-spacing-inline, var(--ig-spacing))))}:host([indicator-position=none]) [part~=indicator]{display:none}:host([disabled]){pointer-events:none}`;
2
+ export const styles = css `:host{--is-large: clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-large, 3), 1);--is-medium: min( clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-medium, 2), 1), clamp(0, var(--ig-size-large, 3) - var(--component-size, 1), 1) );--is-small: clamp(0, var(--ig-size-medium) - var(--component-size, 1), 1);position:relative;box-sizing:border-box;scrollbar-width:var(--ig-scrollbar-size, var(--sb-size));scrollbar-color:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color)) var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar{width:var(--ig-scrollbar-size, var(--sb-size));height:var(--ig-scrollbar-size, var(--sb-size));background:var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar-thumb{background:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color))}:host *,:host *::before,:host *::after{box-sizing:border-box}:host([hidden]),[hidden]{display:none !important}:host{--lines-clamped: 1;width:auto;overflow:hidden;display:flex;flex-direction:column}[part=header]{display:flex;align-items:center;cursor:pointer;padding-inline:max(var(--is-large, 1)*max(24px, -1 * 24px)*var(--ig-spacing-inline-large, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-medium, 1)*max(24px, -1 * 24px)*var(--ig-spacing-inline-medium, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-small, 1)*max(24px, -1 * 24px)*var(--ig-spacing-inline-small, var(--ig-spacing-inline, var(--ig-spacing))));padding-block:max(var(--is-large, 1)*max(16px, -1 * 16px)*var(--ig-spacing-block-large, var(--ig-spacing-block, var(--ig-spacing))),var(--is-medium, 1)*max(16px, -1 * 16px)*var(--ig-spacing-block-medium, var(--ig-spacing-block, var(--ig-spacing))),var(--is-small, 1)*max(16px, -1 * 16px)*var(--ig-spacing-block-small, var(--ig-spacing-block, var(--ig-spacing))))}[part=header]:focus,[part=header]:active{outline:rgba(0,0,0,0)}[part=header] *:not([part~=indicator]){display:flex;flex-direction:column;justify-content:center;flex:1 0 0%;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;user-select:none}[part=title]::slotted(*){font-family:var(--ig-h5-font-family, var(--ig-font-family));font-size:var(--ig-h5-font-size);font-weight:var(--ig-h5-font-weight);font-style:var(--ig-h5-font-style);line-height:var(--ig-h5-line-height);letter-spacing:var(--ig-h5-letter-spacing);text-transform:var(--ig-h5-text-transform);margin-top:var(--ig-h5-margin-top);margin-bottom:var(--ig-h5-margin-bottom);display:-webkit-inline-box;-webkit-line-clamp:var(--lines-clamped);-webkit-box-orient:vertical;overflow:hidden;margin:0;line-height:normal}[part=subtitle]::slotted(*){font-family:var(--ig-subtitle-2-font-family, var(--ig-font-family));font-size:var(--ig-subtitle-2-font-size);font-weight:var(--ig-subtitle-2-font-weight);font-style:var(--ig-subtitle-2-font-style);line-height:var(--ig-subtitle-2-line-height);letter-spacing:var(--ig-subtitle-2-letter-spacing);text-transform:var(--ig-subtitle-2-text-transform);margin-top:var(--ig-subtitle-2-margin-top);margin-bottom:var(--ig-subtitle-2-margin-bottom);white-space:nowrap;text-overflow:ellipsis;overflow:hidden;line-height:normal}[part=content] ::slotted(*){font-family:var(--ig-body-2-font-family, var(--ig-font-family));font-size:var(--ig-body-2-font-size);font-weight:var(--ig-body-2-font-weight);font-style:var(--ig-body-2-font-style);line-height:var(--ig-body-2-line-height);letter-spacing:var(--ig-body-2-letter-spacing);text-transform:var(--ig-body-2-text-transform);margin-top:var(--ig-body-2-margin-top);margin-bottom:var(--ig-body-2-margin-bottom);display:block}[part~=content]{overflow:hidden}[part~=content]>slot{display:block;padding-inline:max(var(--is-large, 1)*max(24px, -1 * 24px)*var(--ig-spacing-inline-large, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-medium, 1)*max(24px, -1 * 24px)*var(--ig-spacing-inline-medium, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-small, 1)*max(24px, -1 * 24px)*var(--ig-spacing-inline-small, var(--ig-spacing-inline, var(--ig-spacing))));padding-block:max(var(--is-large, 1)*max(16px, -1 * 16px)*var(--ig-spacing-block-large, var(--ig-spacing-block, var(--ig-spacing))),var(--is-medium, 1)*max(16px, -1 * 16px)*var(--ig-spacing-block-medium, var(--ig-spacing-block, var(--ig-spacing))),var(--is-small, 1)*max(16px, -1 * 16px)*var(--ig-spacing-block-small, var(--ig-spacing-block, var(--ig-spacing))))}:host(:not([open])) [part~=content]{height:0}:host([open]) [part~=content]{height:auto}[part~=indicator] igc-icon{--ig-size: 3}:host([indicator-position=start]) [part~=indicator]{margin-inline-end:max(var(--is-large, 1)*max(16px, -1 * 16px)*var(--ig-spacing-inline-large, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-medium, 1)*max(16px, -1 * 16px)*var(--ig-spacing-inline-medium, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-small, 1)*max(16px, -1 * 16px)*var(--ig-spacing-inline-small, var(--ig-spacing-inline, var(--ig-spacing))))}:host([indicator-position=end]) [part~=indicator]{order:2;margin-inline-start:max(var(--is-large, 1)*max(16px, -1 * 16px)*var(--ig-spacing-inline-large, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-medium, 1)*max(16px, -1 * 16px)*var(--ig-spacing-inline-medium, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-small, 1)*max(16px, -1 * 16px)*var(--ig-spacing-inline-small, var(--ig-spacing-inline, var(--ig-spacing))))}:host([indicator-position=none]) [part~=indicator]{display:none}:host([disabled]){pointer-events:none}`;
3
3
  //# sourceMappingURL=expansion-panel.base.css.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"expansion-panel.base.css.js","sourceRoot":"","sources":["../../../../src/components/expansion-panel/themes/expansion-panel.base.css.ts"],"names":[],"mappings":"AACE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,u1KAAu1K,CAAC","sourcesContent":["\n import { css } from 'lit';\n export const styles = css`:host{--is-large: clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-large, 3), 1);--is-medium: min( clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-medium, 2), 1), clamp(0, var(--ig-size-large, 3) - var(--component-size, 1), 1) );--is-small: clamp(0, var(--ig-size-medium) - var(--component-size, 1), 1);position:relative;box-sizing:border-box;scrollbar-width:var(--ig-scrollbar-size, var(--sb-size));scrollbar-color:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color)) var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar{width:var(--ig-scrollbar-size, var(--sb-size));height:var(--ig-scrollbar-size, var(--sb-size));background:var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar-thumb{background:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color))}:host *,:host *::before,:host *::after{box-sizing:border-box}:host([hidden]),[hidden]{display:none !important}:host{--lines-clamped: 1;width:auto;overflow:hidden;display:flex;flex-direction:column}[part=header]{display:flex;align-items:center;cursor:pointer;padding-inline:max(var(--is-large, 1)*max(24px, -1 * 24px)*var(--ig-spacing-inline-large, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-medium, 1)*max(24px, -1 * 24px)*var(--ig-spacing-inline-medium, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-small, 1)*max(24px, -1 * 24px)*var(--ig-spacing-inline-small, var(--ig-spacing-inline, var(--ig-spacing))));padding-block:max(var(--is-large, 1)*max(16px, -1 * 16px)*var(--ig-spacing-block-large, var(--ig-spacing-block, var(--ig-spacing))),var(--is-medium, 1)*max(16px, -1 * 16px)*var(--ig-spacing-block-medium, var(--ig-spacing-block, var(--ig-spacing))),var(--is-small, 1)*max(16px, -1 * 16px)*var(--ig-spacing-block-small, var(--ig-spacing-block, var(--ig-spacing))))}[part=header]:focus,[part=header]:active{outline:rgba(0,0,0,0)}[part=header] *:not([part~=indicator]){display:flex;flex-direction:column;justify-content:center;flex:1 0 0%;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;user-select:none}[part=title]::slotted(*){font-family:var(--ig-h5-font-family, var(--ig-font-family));font-size:var(--ig-h5-font-size);font-weight:var(--ig-h5-font-weight);font-style:var(--ig-h5-font-style);line-height:var(--ig-h5-line-height);letter-spacing:var(--ig-h5-letter-spacing);text-transform:var(--ig-h5-text-transform);margin-top:var(--ig-h5-margin-top);margin-bottom:var(--ig-h5-margin-bottom);display:-webkit-inline-box;-webkit-line-clamp:var(--lines-clamped);-webkit-box-orient:vertical;overflow:hidden;margin:0}[part=subtitle]::slotted(*){font-family:var(--ig-subtitle-2-font-family, var(--ig-font-family));font-size:var(--ig-subtitle-2-font-size);font-weight:var(--ig-subtitle-2-font-weight);font-style:var(--ig-subtitle-2-font-style);line-height:var(--ig-subtitle-2-line-height);letter-spacing:var(--ig-subtitle-2-letter-spacing);text-transform:var(--ig-subtitle-2-text-transform);margin-top:var(--ig-subtitle-2-margin-top);margin-bottom:var(--ig-subtitle-2-margin-bottom);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}[part=content] ::slotted(*){font-family:var(--ig-body-2-font-family, var(--ig-font-family));font-size:var(--ig-body-2-font-size);font-weight:var(--ig-body-2-font-weight);font-style:var(--ig-body-2-font-style);line-height:var(--ig-body-2-line-height);letter-spacing:var(--ig-body-2-letter-spacing);text-transform:var(--ig-body-2-text-transform);margin-top:var(--ig-body-2-margin-top);margin-bottom:var(--ig-body-2-margin-bottom);display:block}[part~=content]{overflow:hidden}[part~=content]>slot{display:block;padding-inline:max(var(--is-large, 1)*max(24px, -1 * 24px)*var(--ig-spacing-inline-large, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-medium, 1)*max(24px, -1 * 24px)*var(--ig-spacing-inline-medium, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-small, 1)*max(24px, -1 * 24px)*var(--ig-spacing-inline-small, var(--ig-spacing-inline, var(--ig-spacing))));padding-block:max(var(--is-large, 1)*max(16px, -1 * 16px)*var(--ig-spacing-block-large, var(--ig-spacing-block, var(--ig-spacing))),var(--is-medium, 1)*max(16px, -1 * 16px)*var(--ig-spacing-block-medium, var(--ig-spacing-block, var(--ig-spacing))),var(--is-small, 1)*max(16px, -1 * 16px)*var(--ig-spacing-block-small, var(--ig-spacing-block, var(--ig-spacing))))}:host(:not([open])) [part~=content]{height:0}:host([open]) [part~=content]{height:auto}[part~=indicator] igc-icon{--ig-size: 3}:host([indicator-position=start]) [part~=indicator]{margin-inline-end:max(var(--is-large, 1)*max(16px, -1 * 16px)*var(--ig-spacing-inline-large, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-medium, 1)*max(16px, -1 * 16px)*var(--ig-spacing-inline-medium, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-small, 1)*max(16px, -1 * 16px)*var(--ig-spacing-inline-small, var(--ig-spacing-inline, var(--ig-spacing))))}:host([indicator-position=end]) [part~=indicator]{order:2;margin-inline-start:max(var(--is-large, 1)*max(16px, -1 * 16px)*var(--ig-spacing-inline-large, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-medium, 1)*max(16px, -1 * 16px)*var(--ig-spacing-inline-medium, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-small, 1)*max(16px, -1 * 16px)*var(--ig-spacing-inline-small, var(--ig-spacing-inline, var(--ig-spacing))))}:host([indicator-position=none]) [part~=indicator]{display:none}:host([disabled]){pointer-events:none}`;\n "]}
1
+ {"version":3,"file":"expansion-panel.base.css.js","sourceRoot":"","sources":["../../../../src/components/expansion-panel/themes/expansion-panel.base.css.ts"],"names":[],"mappings":"AACE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA,63KAA63K,CAAC","sourcesContent":["\n import { css } from 'lit';\n export const styles = css`:host{--is-large: clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-large, 3), 1);--is-medium: min( clamp(0, (var(--component-size, 1) + 1) - var(--ig-size-medium, 2), 1), clamp(0, var(--ig-size-large, 3) - var(--component-size, 1), 1) );--is-small: clamp(0, var(--ig-size-medium) - var(--component-size, 1), 1);position:relative;box-sizing:border-box;scrollbar-width:var(--ig-scrollbar-size, var(--sb-size));scrollbar-color:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color)) var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar{width:var(--ig-scrollbar-size, var(--sb-size));height:var(--ig-scrollbar-size, var(--sb-size));background:var(--ig-scrollbar-track-background, var(--sb-track-bg-color))}:host ::-webkit-scrollbar-thumb{background:var(--ig-scrollbar-thumb-background, var(--sb-thumb-bg-color))}:host *,:host *::before,:host *::after{box-sizing:border-box}:host([hidden]),[hidden]{display:none !important}:host{--lines-clamped: 1;width:auto;overflow:hidden;display:flex;flex-direction:column}[part=header]{display:flex;align-items:center;cursor:pointer;padding-inline:max(var(--is-large, 1)*max(24px, -1 * 24px)*var(--ig-spacing-inline-large, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-medium, 1)*max(24px, -1 * 24px)*var(--ig-spacing-inline-medium, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-small, 1)*max(24px, -1 * 24px)*var(--ig-spacing-inline-small, var(--ig-spacing-inline, var(--ig-spacing))));padding-block:max(var(--is-large, 1)*max(16px, -1 * 16px)*var(--ig-spacing-block-large, var(--ig-spacing-block, var(--ig-spacing))),var(--is-medium, 1)*max(16px, -1 * 16px)*var(--ig-spacing-block-medium, var(--ig-spacing-block, var(--ig-spacing))),var(--is-small, 1)*max(16px, -1 * 16px)*var(--ig-spacing-block-small, var(--ig-spacing-block, var(--ig-spacing))))}[part=header]:focus,[part=header]:active{outline:rgba(0,0,0,0)}[part=header] *:not([part~=indicator]){display:flex;flex-direction:column;justify-content:center;flex:1 0 0%;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;user-select:none}[part=title]::slotted(*){font-family:var(--ig-h5-font-family, var(--ig-font-family));font-size:var(--ig-h5-font-size);font-weight:var(--ig-h5-font-weight);font-style:var(--ig-h5-font-style);line-height:var(--ig-h5-line-height);letter-spacing:var(--ig-h5-letter-spacing);text-transform:var(--ig-h5-text-transform);margin-top:var(--ig-h5-margin-top);margin-bottom:var(--ig-h5-margin-bottom);display:-webkit-inline-box;-webkit-line-clamp:var(--lines-clamped);-webkit-box-orient:vertical;overflow:hidden;margin:0;line-height:normal}[part=subtitle]::slotted(*){font-family:var(--ig-subtitle-2-font-family, var(--ig-font-family));font-size:var(--ig-subtitle-2-font-size);font-weight:var(--ig-subtitle-2-font-weight);font-style:var(--ig-subtitle-2-font-style);line-height:var(--ig-subtitle-2-line-height);letter-spacing:var(--ig-subtitle-2-letter-spacing);text-transform:var(--ig-subtitle-2-text-transform);margin-top:var(--ig-subtitle-2-margin-top);margin-bottom:var(--ig-subtitle-2-margin-bottom);white-space:nowrap;text-overflow:ellipsis;overflow:hidden;line-height:normal}[part=content] ::slotted(*){font-family:var(--ig-body-2-font-family, var(--ig-font-family));font-size:var(--ig-body-2-font-size);font-weight:var(--ig-body-2-font-weight);font-style:var(--ig-body-2-font-style);line-height:var(--ig-body-2-line-height);letter-spacing:var(--ig-body-2-letter-spacing);text-transform:var(--ig-body-2-text-transform);margin-top:var(--ig-body-2-margin-top);margin-bottom:var(--ig-body-2-margin-bottom);display:block}[part~=content]{overflow:hidden}[part~=content]>slot{display:block;padding-inline:max(var(--is-large, 1)*max(24px, -1 * 24px)*var(--ig-spacing-inline-large, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-medium, 1)*max(24px, -1 * 24px)*var(--ig-spacing-inline-medium, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-small, 1)*max(24px, -1 * 24px)*var(--ig-spacing-inline-small, var(--ig-spacing-inline, var(--ig-spacing))));padding-block:max(var(--is-large, 1)*max(16px, -1 * 16px)*var(--ig-spacing-block-large, var(--ig-spacing-block, var(--ig-spacing))),var(--is-medium, 1)*max(16px, -1 * 16px)*var(--ig-spacing-block-medium, var(--ig-spacing-block, var(--ig-spacing))),var(--is-small, 1)*max(16px, -1 * 16px)*var(--ig-spacing-block-small, var(--ig-spacing-block, var(--ig-spacing))))}:host(:not([open])) [part~=content]{height:0}:host([open]) [part~=content]{height:auto}[part~=indicator] igc-icon{--ig-size: 3}:host([indicator-position=start]) [part~=indicator]{margin-inline-end:max(var(--is-large, 1)*max(16px, -1 * 16px)*var(--ig-spacing-inline-large, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-medium, 1)*max(16px, -1 * 16px)*var(--ig-spacing-inline-medium, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-small, 1)*max(16px, -1 * 16px)*var(--ig-spacing-inline-small, var(--ig-spacing-inline, var(--ig-spacing))))}:host([indicator-position=end]) [part~=indicator]{order:2;margin-inline-start:max(var(--is-large, 1)*max(16px, -1 * 16px)*var(--ig-spacing-inline-large, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-medium, 1)*max(16px, -1 * 16px)*var(--ig-spacing-inline-medium, var(--ig-spacing-inline, var(--ig-spacing))),var(--is-small, 1)*max(16px, -1 * 16px)*var(--ig-spacing-inline-small, var(--ig-spacing-inline, var(--ig-spacing))))}:host([indicator-position=none]) [part~=indicator]{display:none}:host([disabled]){pointer-events:none}`;\n "]}
@@ -3,10 +3,10 @@ import type IgcHighlightComponent from './highlight.js';
3
3
  /**
4
4
  * Options for controlling navigation behavior when moving the active highlight.
5
5
  */
6
- export type HighlightNavigation = {
6
+ export interface HighlightNavigation {
7
7
  /** If true, prevents the component from scrolling the new active match into view. */
8
8
  preventScroll?: boolean;
9
- };
9
+ }
10
10
  declare class HighlightService implements ReactiveController {
11
11
  private readonly _host;
12
12
  private readonly _id;
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/components/highlight/service.ts"],"names":[],"mappings":"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","sourcesContent":["import { isServer, type ReactiveController } from 'lit';\nimport {\n escapeRegex,\n iterNodes,\n nanoid,\n scrollIntoView,\n wrap,\n} from '../common/util.js';\nimport type IgcHighlightComponent from './highlight.js';\n\ntype Match = { node: Node; indices: [start: number, end: number] };\n\n/**\n * Options for controlling navigation behavior when moving the active highlight.\n */\nexport type HighlightNavigation = {\n /** If true, prevents the component from scrolling the new active match into view. */\n preventScroll?: boolean;\n};\n\nfunction* matchText(\n nodes: IterableIterator<Node>,\n regexp: RegExp\n): Generator<Match> {\n for (const node of nodes) {\n if (node.textContent) {\n for (const match of node.textContent.matchAll(regexp)) {\n const [start, end] = match.indices![0]!;\n yield { node, indices: [start, end] } satisfies Match;\n }\n }\n }\n}\n\nclass HighlightService implements ReactiveController {\n //#region Private properties\n\n private readonly _host: IgcHighlightComponent;\n private readonly _id: string;\n private readonly _activeId: string;\n private readonly _styles: string;\n private readonly _styleSheet?: CSSStyleSheet;\n\n private _highlight!: Highlight;\n private _activeHighlight!: Highlight;\n private _ranges: Range[] = [];\n\n private _current = 0;\n\n //#endregion\n\n //#region Public properties\n\n /**\n * The total number of matches found in the component's content.\n */\n public get size(): number {\n return this._ranges.length;\n }\n\n /**\n * The index of the currently active match. Returns 0 if there are no matches.\n */\n public get current(): number {\n return this._current;\n }\n\n //#endregion\n\n constructor(host: IgcHighlightComponent) {\n this._host = host;\n this._host.addController(this);\n this._id = `igc-highlight-${nanoid()}`;\n this._activeId = `${this._id}-active`;\n\n this._styles = `\n ::highlight(${this._id}) {\n background-color: var(--background, var(--ig-secondary-700));\n color: var(--foreground, var(--ig-secondary-700-contrast));\n }\n ::highlight(${this._activeId}) {\n background-color: var(--background-active, var(--ig-primary-500));\n color: var(--foreground-active, var(--ig-primary-500-contrast));\n }`;\n\n if (!isServer) {\n this._styleSheet = new CSSStyleSheet();\n this._styleSheet.replaceSync(this._styles);\n }\n }\n\n //#region Controller life-cycle\n\n /** @internal */\n public hostConnected(): void {\n this._createHighlightEntries();\n this.find(this._host.searchText);\n }\n\n /** @internal */\n public hostDisconnected(): void {\n this._removeHighlightEntries();\n this._removeStyleSheet();\n }\n\n //#endregion\n\n //#region Private methods\n\n private _removeStyleSheet(): void {\n const root = this._host.renderRoot as ShadowRoot;\n\n if (this._styleSheet) {\n root.adoptedStyleSheets = root.adoptedStyleSheets.filter(\n (sheet) => sheet !== this._styleSheet\n );\n }\n }\n\n private _createHighlightEntries(): void {\n this._highlight = new Highlight();\n this._highlight.priority = 0;\n\n this._activeHighlight = new Highlight();\n this._activeHighlight.priority = 1;\n\n CSS.highlights.set(this._id, this._highlight);\n CSS.highlights.set(this._activeId, this._activeHighlight);\n }\n\n private _removeHighlightEntries(): void {\n CSS.highlights.delete(this._id);\n CSS.highlights.delete(this._activeId);\n this._ranges.length = 0;\n }\n\n private _createRegex(value: string): RegExp {\n return new RegExp(\n escapeRegex(value),\n this._host.caseSensitive ? 'dg' : 'dgi'\n );\n }\n\n private _updateActiveHighlight(): void {\n if (this.size) {\n this._activeHighlight.clear();\n this._activeHighlight.add(this._ranges[this._current]);\n }\n }\n\n private _goTo(index: number, options?: HighlightNavigation): void {\n if (!this.size) {\n return;\n }\n\n this._current = wrap(0, this.size - 1, index);\n const range = this._ranges[this._current];\n\n this._activeHighlight.clear();\n this._activeHighlight.add(range);\n\n if (!options?.preventScroll) {\n scrollIntoView(range.commonAncestorContainer.parentElement, {\n block: 'center',\n inline: 'center',\n });\n }\n }\n\n //#endregion\n\n //#region Public methods\n\n /**\n * Attaches the service's stylesheet to the render root.\n * Necessary for the component to apply highlight styles to its content.\n */\n public attachStylesheet(): void {\n const adoptedSheets = (this._host.renderRoot as ShadowRoot)\n .adoptedStyleSheets;\n\n if (this._styleSheet && !adoptedSheets.includes(this._styleSheet)) {\n adoptedSheets.push(this._styleSheet);\n }\n }\n\n /**\n * Finds matches for the given search text in the component's content and creates highlight ranges for them.\n */\n public find(value: string): void {\n if (!value?.trim()) {\n return;\n }\n\n const iterator = matchText(\n iterNodes(this._host, { show: 'SHOW_TEXT' }),\n this._createRegex(value)\n );\n\n for (const {\n node,\n indices: [start, end],\n } of iterator) {\n const range = new Range();\n range.setStart(node, start);\n range.setEnd(node, end);\n\n this._ranges.push(range);\n this._highlight.add(range);\n }\n\n this._updateActiveHighlight();\n }\n\n /** Moves the active state to the next match. */\n public next(options?: HighlightNavigation): void {\n this._goTo(this._current + 1, options);\n }\n\n /** Moves the active state to the previous match. */\n public previous(options?: HighlightNavigation): void {\n this._goTo(this._current - 1, options);\n }\n\n /** Moves the active state to the given index. */\n public setActive(index: number, options?: HighlightNavigation): void {\n this._goTo(index, options);\n }\n\n /** Clears highlight collections. */\n public clear(): void {\n this._activeHighlight.clear();\n this._highlight.clear();\n this._ranges.length = 0;\n this._current = 0;\n }\n\n //#endregion\n}\n\nexport function createHighlightController(\n host: IgcHighlightComponent\n): HighlightService {\n return new HighlightService(host);\n}\n"]}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/components/highlight/service.ts"],"names":[],"mappings":"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","sourcesContent":["import { isServer, type ReactiveController } from 'lit';\nimport {\n escapeRegex,\n iterNodes,\n nanoid,\n scrollIntoView,\n wrap,\n} from '../common/util.js';\nimport type IgcHighlightComponent from './highlight.js';\n\ntype Match = { node: Node; indices: [start: number, end: number] };\n\n/* jsonAPIPlainObject */\n/* marshalByValue */\n/**\n * Options for controlling navigation behavior when moving the active highlight.\n */\nexport interface HighlightNavigation {\n /** If true, prevents the component from scrolling the new active match into view. */\n preventScroll?: boolean;\n}\n\nfunction* matchText(\n nodes: IterableIterator<Node>,\n regexp: RegExp\n): Generator<Match> {\n for (const node of nodes) {\n if (node.textContent) {\n for (const match of node.textContent.matchAll(regexp)) {\n const [start, end] = match.indices![0]!;\n yield { node, indices: [start, end] } satisfies Match;\n }\n }\n }\n}\n\nclass HighlightService implements ReactiveController {\n //#region Private properties\n\n private readonly _host: IgcHighlightComponent;\n private readonly _id: string;\n private readonly _activeId: string;\n private readonly _styles: string;\n private readonly _styleSheet?: CSSStyleSheet;\n\n private _highlight!: Highlight;\n private _activeHighlight!: Highlight;\n private _ranges: Range[] = [];\n\n private _current = 0;\n\n //#endregion\n\n //#region Public properties\n\n /**\n * The total number of matches found in the component's content.\n */\n public get size(): number {\n return this._ranges.length;\n }\n\n /**\n * The index of the currently active match. Returns 0 if there are no matches.\n */\n public get current(): number {\n return this._current;\n }\n\n //#endregion\n\n constructor(host: IgcHighlightComponent) {\n this._host = host;\n this._host.addController(this);\n this._id = `igc-highlight-${nanoid()}`;\n this._activeId = `${this._id}-active`;\n\n this._styles = `\n ::highlight(${this._id}) {\n background-color: var(--background, var(--ig-secondary-700));\n color: var(--foreground, var(--ig-secondary-700-contrast));\n }\n ::highlight(${this._activeId}) {\n background-color: var(--background-active, var(--ig-primary-500));\n color: var(--foreground-active, var(--ig-primary-500-contrast));\n }`;\n\n if (!isServer) {\n this._styleSheet = new CSSStyleSheet();\n this._styleSheet.replaceSync(this._styles);\n }\n }\n\n //#region Controller life-cycle\n\n /** @internal */\n public hostConnected(): void {\n this._createHighlightEntries();\n this.find(this._host.searchText);\n }\n\n /** @internal */\n public hostDisconnected(): void {\n this._removeHighlightEntries();\n this._removeStyleSheet();\n }\n\n //#endregion\n\n //#region Private methods\n\n private _removeStyleSheet(): void {\n const root = this._host.renderRoot as ShadowRoot;\n\n if (this._styleSheet) {\n root.adoptedStyleSheets = root.adoptedStyleSheets.filter(\n (sheet) => sheet !== this._styleSheet\n );\n }\n }\n\n private _createHighlightEntries(): void {\n this._highlight = new Highlight();\n this._highlight.priority = 0;\n\n this._activeHighlight = new Highlight();\n this._activeHighlight.priority = 1;\n\n CSS.highlights.set(this._id, this._highlight);\n CSS.highlights.set(this._activeId, this._activeHighlight);\n }\n\n private _removeHighlightEntries(): void {\n CSS.highlights.delete(this._id);\n CSS.highlights.delete(this._activeId);\n this._ranges.length = 0;\n }\n\n private _createRegex(value: string): RegExp {\n return new RegExp(\n escapeRegex(value),\n this._host.caseSensitive ? 'dg' : 'dgi'\n );\n }\n\n private _updateActiveHighlight(): void {\n if (this.size) {\n this._activeHighlight.clear();\n this._activeHighlight.add(this._ranges[this._current]);\n }\n }\n\n private _goTo(index: number, options?: HighlightNavigation): void {\n if (!this.size) {\n return;\n }\n\n this._current = wrap(0, this.size - 1, index);\n const range = this._ranges[this._current];\n\n this._activeHighlight.clear();\n this._activeHighlight.add(range);\n\n if (!options?.preventScroll) {\n scrollIntoView(range.commonAncestorContainer.parentElement, {\n block: 'center',\n inline: 'center',\n });\n }\n }\n\n //#endregion\n\n //#region Public methods\n\n /**\n * Attaches the service's stylesheet to the render root.\n * Necessary for the component to apply highlight styles to its content.\n */\n public attachStylesheet(): void {\n const adoptedSheets = (this._host.renderRoot as ShadowRoot)\n .adoptedStyleSheets;\n\n if (this._styleSheet && !adoptedSheets.includes(this._styleSheet)) {\n adoptedSheets.push(this._styleSheet);\n }\n }\n\n /**\n * Finds matches for the given search text in the component's content and creates highlight ranges for them.\n */\n public find(value: string): void {\n if (!value?.trim()) {\n return;\n }\n\n const iterator = matchText(\n iterNodes(this._host, { show: 'SHOW_TEXT' }),\n this._createRegex(value)\n );\n\n for (const {\n node,\n indices: [start, end],\n } of iterator) {\n const range = new Range();\n range.setStart(node, start);\n range.setEnd(node, end);\n\n this._ranges.push(range);\n this._highlight.add(range);\n }\n\n this._updateActiveHighlight();\n }\n\n /** Moves the active state to the next match. */\n public next(options?: HighlightNavigation): void {\n this._goTo(this._current + 1, options);\n }\n\n /** Moves the active state to the previous match. */\n public previous(options?: HighlightNavigation): void {\n this._goTo(this._current - 1, options);\n }\n\n /** Moves the active state to the given index. */\n public setActive(index: number, options?: HighlightNavigation): void {\n this._goTo(index, options);\n }\n\n /** Clears highlight collections. */\n public clear(): void {\n this._activeHighlight.clear();\n this._highlight.clear();\n this._ranges.length = 0;\n this._current = 0;\n }\n\n //#endregion\n}\n\nexport function createHighlightController(\n host: IgcHighlightComponent\n): HighlightService {\n return new HighlightService(host);\n}\n"]}