@tekus/design-system 5.36.0 → 5.38.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/assets/tokens/tk-foundations.json +4 -0
  2. package/fesm2022/tekus-design-system-components-autocomplete.mjs +7 -17
  3. package/fesm2022/tekus-design-system-components-autocomplete.mjs.map +1 -1
  4. package/fesm2022/tekus-design-system-components-avatar.mjs +120 -0
  5. package/fesm2022/tekus-design-system-components-avatar.mjs.map +1 -0
  6. package/fesm2022/tekus-design-system-components-button.mjs +2 -2
  7. package/fesm2022/tekus-design-system-components-button.mjs.map +1 -1
  8. package/fesm2022/tekus-design-system-components-card.mjs +1 -1
  9. package/fesm2022/tekus-design-system-components-card.mjs.map +1 -1
  10. package/fesm2022/tekus-design-system-components-checkbox.mjs +9 -3
  11. package/fesm2022/tekus-design-system-components-checkbox.mjs.map +1 -1
  12. package/fesm2022/tekus-design-system-components-color-picker.mjs +203 -29
  13. package/fesm2022/tekus-design-system-components-color-picker.mjs.map +1 -1
  14. package/fesm2022/tekus-design-system-components-date-picker.mjs +16 -3
  15. package/fesm2022/tekus-design-system-components-date-picker.mjs.map +1 -1
  16. package/fesm2022/tekus-design-system-components-grid-container.mjs +181 -0
  17. package/fesm2022/tekus-design-system-components-grid-container.mjs.map +1 -0
  18. package/fesm2022/tekus-design-system-components-input-number.mjs +37 -3
  19. package/fesm2022/tekus-design-system-components-input-number.mjs.map +1 -1
  20. package/fesm2022/tekus-design-system-components-input-text.mjs +2 -2
  21. package/fesm2022/tekus-design-system-components-input-text.mjs.map +1 -1
  22. package/fesm2022/tekus-design-system-components-menu.mjs +2 -2
  23. package/fesm2022/tekus-design-system-components-menu.mjs.map +1 -1
  24. package/fesm2022/tekus-design-system-components-multiselect.mjs +2 -2
  25. package/fesm2022/tekus-design-system-components-multiselect.mjs.map +1 -1
  26. package/fesm2022/tekus-design-system-components-panel-menu.mjs +2 -2
  27. package/fesm2022/tekus-design-system-components-panel-menu.mjs.map +1 -1
  28. package/fesm2022/tekus-design-system-components-radio-button.mjs +9 -3
  29. package/fesm2022/tekus-design-system-components-radio-button.mjs.map +1 -1
  30. package/fesm2022/tekus-design-system-components-section.mjs +63 -0
  31. package/fesm2022/tekus-design-system-components-section.mjs.map +1 -0
  32. package/fesm2022/tekus-design-system-components-select.mjs +37 -32
  33. package/fesm2022/tekus-design-system-components-select.mjs.map +1 -1
  34. package/fesm2022/tekus-design-system-components-sidebar-layout.mjs +2 -2
  35. package/fesm2022/tekus-design-system-components-sidebar-layout.mjs.map +1 -1
  36. package/fesm2022/tekus-design-system-components-table.mjs +1 -1
  37. package/fesm2022/tekus-design-system-components-table.mjs.map +1 -1
  38. package/fesm2022/tekus-design-system-components-tabs.mjs +2 -2
  39. package/fesm2022/tekus-design-system-components-tabs.mjs.map +1 -1
  40. package/fesm2022/tekus-design-system-components-textarea.mjs +2 -2
  41. package/fesm2022/tekus-design-system-components-textarea.mjs.map +1 -1
  42. package/fesm2022/tekus-design-system-components-time-picker.mjs +13 -3
  43. package/fesm2022/tekus-design-system-components-time-picker.mjs.map +1 -1
  44. package/fesm2022/tekus-design-system-components-toggle.mjs +4 -3
  45. package/fesm2022/tekus-design-system-components-toggle.mjs.map +1 -1
  46. package/fesm2022/tekus-design-system-components-toolbar.mjs +2 -2
  47. package/fesm2022/tekus-design-system-components-toolbar.mjs.map +1 -1
  48. package/fesm2022/tekus-design-system-components-topbar.mjs +2 -2
  49. package/fesm2022/tekus-design-system-components-topbar.mjs.map +1 -1
  50. package/fesm2022/tekus-design-system-components-tree-table.mjs +94 -0
  51. package/fesm2022/tekus-design-system-components-tree-table.mjs.map +1 -0
  52. package/fesm2022/tekus-design-system-core-types.mjs +26 -10
  53. package/fesm2022/tekus-design-system-core-types.mjs.map +1 -1
  54. package/fesm2022/tekus-design-system-core.mjs +26 -10
  55. package/fesm2022/tekus-design-system-core.mjs.map +1 -1
  56. package/fesm2022/tekus-design-system-directives-gird-item.mjs +1 -1
  57. package/fesm2022/tekus-design-system-directives-gird-item.mjs.map +1 -1
  58. package/package.json +17 -1
  59. package/scss/_config.scss +242 -0
  60. package/scss/tk-bundle.scss +105 -0
  61. package/styles/variables.css +1 -0
  62. package/types/tekus-design-system-components-autocomplete.d.ts +3 -12
  63. package/types/tekus-design-system-components-avatar.d.ts +104 -0
  64. package/types/tekus-design-system-components-checkbox.d.ts +7 -1
  65. package/types/tekus-design-system-components-color-picker.d.ts +75 -12
  66. package/types/tekus-design-system-components-date-picker.d.ts +11 -1
  67. package/types/tekus-design-system-components-grid-container.d.ts +123 -0
  68. package/types/tekus-design-system-components-input-number.d.ts +35 -1
  69. package/types/tekus-design-system-components-radio-button.d.ts +7 -1
  70. package/types/tekus-design-system-components-section.d.ts +45 -0
  71. package/types/tekus-design-system-components-select.d.ts +2 -6
  72. package/types/tekus-design-system-components-time-picker.d.ts +8 -1
  73. package/types/tekus-design-system-components-toggle.d.ts +2 -1
  74. package/types/tekus-design-system-components-tree-table.d.ts +62 -0
  75. package/types/tekus-design-system-core-types.d.ts +7 -7
  76. package/types/tekus-design-system-core.d.ts +7 -7
  77. package/types/tekus-design-system-directives-gird-item.d.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tekus-design-system-components-date-picker.mjs","sources":["../../../projects/design-system/components/date-picker/src/date-picker.component.ts","../../../projects/design-system/components/date-picker/src/date-picker.component.html","../../../projects/design-system/components/date-picker/tekus-design-system-components-date-picker.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n OnInit,\n inject,\n input,\n model,\n signal,\n computed,\n output,\n effect,\n untracked,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { switchMap } from 'rxjs';\nimport {\n FormsModule,\n ReactiveFormsModule,\n FormControl,\n ControlValueAccessor,\n NgControl,\n Validator,\n ValidationErrors,\n} from '@angular/forms';\n\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { FloatLabelModule } from 'primeng/floatlabel';\nimport { IconComponent } from '@tekus/design-system/components/icon';\n\nexport type DateValue = Date | [Date, Date] | null;\n\nlet _datePickerUid = 0;\n\n/**\n * @description\n * Wrapper around PrimeNG's DatePicker with support for single-date, date-range,\n * and combined date+time modes. Implements `ControlValueAccessor` and `Validator`\n * so it works transparently with reactive forms (`[formControl]`, `[control]`)\n * and template-driven forms (`[(ngModel)]`). A signal model (`[(modelValue)]`)\n * is also available for standalone usage without Angular forms.\n *\n * For time-only selection use `tk-time-picker` instead.\n *\n * @example\n * <!-- Date range with reactive form -->\n * <tk-date-picker\n * [control]=\"form.controls.stayRange\"\n * selectionMode=\"range\"\n * labelText=\"Stay dates\"\n * [showClear]=\"true\">\n * </tk-date-picker>\n *\n * @example\n * <!-- Combined date + time -->\n * <tk-date-picker\n * [showTime]=\"true\"\n * hourFormat=\"24\"\n * [(modelValue)]=\"appointmentDateTime\"\n * labelText=\"Appointment\">\n * </tk-date-picker>\n */\n@Component({\n selector: 'tk-date-picker',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n DatePickerModule,\n FloatLabelModule,\n IconComponent,\n ],\n templateUrl: './date-picker.component.html',\n styleUrl: './date-picker.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DatePickerComponent implements OnInit, ControlValueAccessor, Validator {\n /** @internal */\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n /** @internal */\n private readonly destroyRef = inject(DestroyRef);\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n toObservable(this.effectiveControl)\n .pipe(\n switchMap(ctrl => {\n this.disabledStatus.set(ctrl.disabled);\n return ctrl.statusChanges;\n }),\n takeUntilDestroyed()\n )\n .subscribe(() => {\n this.disabledStatus.set(this.effectiveControl().disabled);\n });\n\n effect(() => {\n this.required();\n this.minDate();\n this.maxDate();\n untracked(() => {\n this.onValidatorChange();\n this.effectiveControl().updateValueAndValidity({ emitEvent: false });\n });\n });\n }\n\n /**\n * @description\n * Marks the field as required. When `true`, the component returns a\n * `{ required: true }` validation error when no date is selected.\n *\n * @default false\n *\n * @example\n * <tk-date-picker [required]=\"true\" errorMessage=\"Date is required\" />\n */\n required = input<boolean>(false);\n\n /**\n * @description\n * Selection behaviour for the date calendar.\n * - `'single'` — one date.\n * - `'range'` — a pair of dates `[start, end]`.\n *\n * @default 'range'\n *\n * @example\n * <tk-date-picker selectionMode=\"single\" />\n */\n selectionMode = input<'single' | 'range'>('range');\n\n /**\n * @description\n * Shows a clear (×) button that resets the value to `null`.\n *\n * @default true\n *\n * @example\n * <tk-date-picker [showClear]=\"false\" />\n */\n showClear = input<boolean>(true);\n\n /**\n * @description\n * Shows the calendar icon inside the input field.\n * When `false`, the overlay can only be opened by clicking the input itself.\n *\n * @default true\n *\n * @example\n * <tk-date-picker [showIcon]=\"false\" />\n */\n showIcon = input<boolean>(true);\n\n /**\n * @description\n * Date display format forwarded to PrimeNG (e.g. `'dd/mm/yy'`, `'yy-mm-dd'`).\n *\n * @default 'dd/mm/yy'\n *\n * @example\n * <tk-date-picker dateFormat=\"yy-mm-dd\" />\n */\n dateFormat = input<string>('dd/mm/yy');\n\n /**\n * @description Hour increment/decrement step for the time spinner (used when `showTime=true`).\n * @default 1\n */\n stepHour = input<number>(1);\n\n /**\n * @description Minute increment/decrement step for the time spinner (used when `showTime=true`).\n * @default 1\n */\n stepMinute = input<number>(1);\n\n /**\n * @description Second increment/decrement step for the time spinner (used when `showTime=true`).\n * @default 1\n */\n stepSecond = input<number>(1);\n\n /**\n * @description\n * Whether to show the seconds segment in the time spinner.\n * Only active when `showTime=true` and `hourFormat=\"24\"`.\n *\n * @default false\n */\n showSeconds = input<boolean>(false);\n\n /**\n * @description\n * Disables the entire component. Can also be controlled through the bound\n * form control via `control.disable()` / `control.enable()`.\n *\n * @default false\n *\n * @example\n * <tk-date-picker [disabled]=\"isReadonly()\" />\n */\n disabled = input<boolean>(false);\n\n /**\n * @description\n * Renders the calendar inline (always visible) instead of in a dropdown overlay.\n *\n * @default false\n *\n * @example\n * <tk-date-picker [inline]=\"true\" selectionMode=\"single\" />\n */\n inline = input<boolean>(false);\n\n /**\n * @description\n * Adds a time spinner alongside the date calendar.\n *\n * @default false\n *\n * @example\n * <tk-date-picker [showTime]=\"true\" hourFormat=\"24\" />\n */\n showTime = input<boolean>(false);\n\n /**\n * @description\n * Hour format for the time spinner (only relevant when `showTime=true`).\n * - `'24'` — 0–23 hours.\n * - `'12'` — 1–12 hours with AM/PM toggle.\n *\n * @default '24'\n *\n * @example\n * <tk-date-picker [showTime]=\"true\" hourFormat=\"12\" />\n */\n hourFormat = input<'12' | '24'>('24');\n\n /**\n * @description\n * Target element or CSS selector to which the overlay panel is appended.\n * Use `'body'` to escape `overflow:hidden` parent containers (e.g. modals).\n *\n * @default 'body'\n *\n * @example\n * <tk-date-picker appendTo=\"body\" />\n */\n appendTo = input<string | HTMLElement | null | undefined>('body');\n\n /**\n * @description Base z-index applied to the overlay panel.\n * @default 10000\n */\n baseZIndex = input<number>(10000);\n\n /**\n * @description\n * Latest selectable date. Enforced both by PrimeNG (disables calendar days)\n * and by Angular form validation.\n *\n * @default null\n *\n * @example\n * <tk-date-picker [maxDate]=\"today\" errorMessage=\"Date cannot be in the future\" />\n */\n maxDate = input<Date | null>(null);\n\n /**\n * @description\n * Earliest selectable date. Enforced both by PrimeNG (disables calendar days)\n * and by Angular form validation.\n *\n * @default null\n *\n * @example\n * <tk-date-picker [minDate]=\"today\" errorMessage=\"Date must be today or later\" />\n */\n minDate = input<Date | null>(null);\n\n /**\n * @description Floating label text shown above the input field.\n * @default 'Select a date'\n * @example\n * <tk-date-picker labelText=\"Check-in date\" />\n */\n labelText = input<string>('Select a date');\n\n /**\n * @description\n * Validation error message rendered beneath the field when the bound control\n * is invalid and the field has been dirtied or touched.\n *\n * @default null\n *\n * @example\n * <tk-date-picker [minDate]=\"minDate\" errorMessage=\"Date is required\" />\n */\n errorMessage = input<string | null>(null);\n\n /**\n * @description\n * Optional external `FormControl` to bind when not using the standard\n * `formControl` / `formControlName` / `ngModel` directives.\n *\n * @example\n * <tk-date-picker [control]=\"form.controls.startDate\" />\n */\n control = input<FormControl | undefined>(undefined);\n\n /**\n * @description\n * Two-way signal binding for the selected value.\n * Accepts `Date` (single), `[Date, Date]` (range), or `null` (cleared).\n *\n * @example\n * <tk-date-picker [(modelValue)]=\"selectedDate\" />\n */\n modelValue = model<DateValue>(null);\n\n /**\n * @description\n * Emits the selected value whenever a complete selection is made.\n * In range mode, fires only when both start and end dates are chosen.\n *\n * @example\n * <tk-date-picker (handleSelect)=\"onDateSelected($event)\" />\n */\n handleSelect = output<DateValue>();\n\n /**\n * @description Emits when the user clears the field via the clear button.\n * @example\n * <tk-date-picker (handleClear)=\"onCleared()\" />\n */\n handleClear = output<void>();\n\n /** @internal */\n disabledStatus = signal<boolean>(false);\n\n /** @internal */\n effectiveDisabled = computed(() => this.disabled() || this.disabledStatus());\n\n /** @internal */\n effectiveMinDate = computed(() => this.minDate());\n\n /** @internal */\n effectiveMaxDate = computed(() => this.maxDate());\n\n /** @internal */\n effectiveSelectionMode = computed(() => this.selectionMode());\n\n /** @internal */\n effectiveHourFormat = computed<'12' | '24'>(() => this.hourFormat());\n\n /** @internal */\n effectiveDateFormat = computed(() => this.dateFormat());\n\n /** @internal */\n effectiveShowSeconds = computed(\n () => this.showTime() && this.hourFormat() === '24' && this.showSeconds()\n );\n\n /** @internal */\n effectiveShowTime = computed(() => this.showTime());\n\n /** @internal */\n private readonly internalControl = new FormControl<DateValue>(null);\n\n /**\n * @description\n * Memoised signal returning the active `FormControl` in priority order:\n * `NgControl` (reactive forms) → `control` input → internal fallback control.\n */\n readonly effectiveControl = computed<FormControl>(\n () => (this.ngControl?.control as FormControl) ?? this.control() ?? this.internalControl\n );\n\n /** @internal Unique DOM id used for `inputId` / `for` binding on every instance. */\n readonly uid = `tk-datepicker-${++_datePickerUid}`;\n\n /** @internal */ onChange: (value: DateValue) => void = () => {};\n /** @internal */ onTouched: () => void = () => {};\n /** @internal */ onValidatorChange: () => void = () => {};\n /** @internal */ private lastValue: DateValue = null;\n /** @internal */ private readonly boundValidate = this.validate.bind(this);\n\n /** @inheritdoc */\n ngOnInit(): void {\n const control = this.effectiveControl();\n\n this.disabledStatus.set(control.disabled);\n\n const initialValue = control.value;\n if (initialValue !== null && initialValue !== undefined) {\n this.modelValue.set(initialValue);\n this.lastValue = initialValue;\n }\n\n if (!this.ngControl) {\n const currentModel = this.modelValue();\n if (currentModel !== null && currentModel !== undefined) {\n this.handleSelect.emit(currentModel);\n this.onChange(currentModel);\n }\n }\n\n control.addValidators(this.boundValidate);\n control.updateValueAndValidity({ emitEvent: false });\n this.destroyRef.onDestroy(() => {\n control.removeValidators(this.boundValidate);\n });\n }\n\n /** @inheritdoc */\n writeValue(value: DateValue): void {\n this.modelValue.set(value);\n this.lastValue = value;\n }\n\n /** @inheritdoc */\n registerOnChange(fn: (value: DateValue) => void): void {\n this.onChange = fn;\n }\n\n /** @inheritdoc */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /** @inheritdoc */\n registerOnValidatorChange(fn: () => void): void {\n this.onValidatorChange = fn;\n }\n\n /** @inheritdoc */\n validate(): ValidationErrors | null {\n const value = this.modelValue();\n if (!value) return this.required() ? { required: true } : null;\n\n const min = this.minDate();\n const max = this.maxDate();\n\n if (value instanceof Date) return this.validateBounds(value, min, max);\n if (!Array.isArray(value)) return null;\n\n const [start, end] = value;\n if (start instanceof Date) {\n const err = this.validateBounds(start, min, max);\n if (err) return err;\n }\n return end instanceof Date ? this.validateBounds(end, min, max) : null;\n }\n\n private validateBounds(date: Date, min: Date | null, max: Date | null): ValidationErrors | null {\n if (min && date < min) return { minDate: { min, actual: date } };\n if (max && date > max) return { maxDate: { max, actual: date } };\n return null;\n }\n\n /** @inheritdoc */\n setDisabledState(isDisabled: boolean): void {\n this.disabledStatus.set(isDisabled);\n const control = this.effectiveControl();\n if (isDisabled && control.enabled) {\n control.disable({ emitEvent: false });\n } else if (!isDisabled && control.disabled) {\n control.enable({ emitEvent: false });\n }\n }\n\n /** @description Central change handler for PrimeNG's `ngModelChange`. */\n onModelChange(value: DateValue): void {\n let finalValue = value;\n\n if (\n this.effectiveSelectionMode() === 'single' &&\n finalValue instanceof Date &&\n this.lastValue instanceof Date &&\n finalValue.toDateString() === this.lastValue.toDateString()\n ) {\n finalValue = this.applyTimeCascading(this.lastValue, finalValue);\n }\n\n this.lastValue = finalValue;\n this.modelValue.set(finalValue);\n this.onChange(finalValue);\n this.effectiveControl().setValue(finalValue, { emitEvent: false });\n if (finalValue !== null) {\n this.effectiveControl().markAsDirty();\n }\n\n if (finalValue === null) {\n this.handleClear.emit();\n } else if (\n finalValue instanceof Date ||\n (Array.isArray(finalValue) && finalValue[0] instanceof Date && finalValue[1] instanceof Date)\n ) {\n this.handleSelect.emit(finalValue);\n }\n }\n\n /** @description Marks the control as touched when the user leaves the field. */\n onBlur(): void {\n this.onTouched();\n this.effectiveControl().markAsTouched();\n }\n\n /**\n * @description Programmatically clears the selected value, resetting it to `null`.\n *\n * @example\n * <tk-date-picker #picker />\n * <button (click)=\"picker.clear()\">Reset</button>\n */\n clear() {\n this.onModelChange(null);\n }\n\n /**\n * @description\n * Adjusts hours or minutes when the spinner rolls over a unit boundary.\n */\n private applyTimeCascading(prev: Date, curr: Date): Date {\n const updated = new Date(curr);\n\n if (prev.getSeconds() === 59 && updated.getSeconds() === 0) {\n updated.setMinutes(updated.getMinutes() + 1);\n } else if (prev.getSeconds() === 0 && updated.getSeconds() === 59) {\n updated.setMinutes(updated.getMinutes() - 1);\n }\n\n if (prev.getMinutes() === 59 && updated.getMinutes() === 0) {\n updated.setHours(updated.getHours() + 1);\n } else if (prev.getMinutes() === 0 && updated.getMinutes() === 59) {\n updated.setHours(updated.getHours() - 1);\n }\n\n return updated;\n }\n}\n","<div class=\"datepicker-container\" [class.inline]=\"inline()\">\n @if (inline()) {\n <p-datepicker\n [inputId]=\"uid\"\n [ngModel]=\"modelValue()\"\n (ngModelChange)=\"onModelChange($event)\"\n (onBlur)=\"onBlur()\"\n [selectionMode]=\"effectiveSelectionMode()\"\n [readonlyInput]=\"true\"\n [showClear]=\"showClear()\"\n [showIcon]=\"showIcon()\"\n [minDate]=\"effectiveMinDate()\"\n [maxDate]=\"effectiveMaxDate()\"\n [disabled]=\"effectiveDisabled()\"\n [dateFormat]=\"effectiveDateFormat()\"\n [timeOnly]=\"false\"\n [inline]=\"true\"\n [showTime]=\"effectiveShowTime()\"\n [hourFormat]=\"effectiveHourFormat()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [showSeconds]=\"effectiveShowSeconds()\">\n </p-datepicker>\n } @else {\n <p-floatlabel>\n <p-datepicker\n [inputId]=\"uid\"\n iconDisplay=\"input\"\n [ngModel]=\"modelValue()\"\n (ngModelChange)=\"onModelChange($event)\"\n (onBlur)=\"onBlur()\"\n [selectionMode]=\"effectiveSelectionMode()\"\n [readonlyInput]=\"true\"\n [showClear]=\"showClear()\"\n [showIcon]=\"showIcon()\"\n [minDate]=\"effectiveMinDate()\"\n [maxDate]=\"effectiveMaxDate()\"\n [disabled]=\"effectiveDisabled()\"\n [dateFormat]=\"effectiveDateFormat()\"\n [timeOnly]=\"false\"\n [showTime]=\"effectiveShowTime()\"\n [hourFormat]=\"effectiveHourFormat()\"\n [appendTo]=\"appendTo()\"\n [baseZIndex]=\"baseZIndex()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [showSeconds]=\"effectiveShowSeconds()\">\n <ng-template #inputicon let-clickCallBack=\"clickCallBack\">\n <tk-icon\n icon=\"calendar-day\"\n tabindex=\"0\"\n (keydown.enter)=\"clickCallBack($event)\"\n (keydown.space)=\"clickCallBack($event)\"\n (click)=\"clickCallBack($event)\">\n </tk-icon>\n </ng-template>\n </p-datepicker>\n <label [for]=\"uid\">{{ labelText() }}</label>\n </p-floatlabel>\n }\n @if (errorMessage() && effectiveControl().invalid && (effectiveControl().dirty || effectiveControl().touched)) {\n <small class=\"p-error\">{{ errorMessage() }}</small>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tekus-design-system-components-date-picker.mjs","sources":["../../../projects/design-system/components/date-picker/src/date-picker.component.ts","../../../projects/design-system/components/date-picker/src/date-picker.component.html","../../../projects/design-system/components/date-picker/tekus-design-system-components-date-picker.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n OnInit,\n inject,\n input,\n model,\n signal,\n computed,\n output,\n effect,\n untracked,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { switchMap } from 'rxjs';\nimport {\n FormsModule,\n ReactiveFormsModule,\n FormControl,\n ControlValueAccessor,\n NgControl,\n Validator,\n ValidationErrors,\n} from '@angular/forms';\n\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { FloatLabelModule } from 'primeng/floatlabel';\nimport { MessageModule } from 'primeng/message';\nimport { IconComponent } from '@tekus/design-system/components/icon';\n\nexport type DateValue = Date | [Date, Date] | null;\n\nlet _datePickerUid = 0;\n\n/**\n * @description\n * Wrapper around PrimeNG's DatePicker with support for single-date, date-range,\n * and combined date+time modes. Implements `ControlValueAccessor` and `Validator`\n * so it works transparently with reactive forms (`[formControl]`, `[control]`)\n * and template-driven forms (`[(ngModel)]`). A signal model (`[(modelValue)]`)\n * is also available for standalone usage without Angular forms.\n *\n * For time-only selection use `tk-time-picker` instead.\n *\n * @example\n * <!-- Date range with reactive form -->\n * <tk-date-picker\n * [control]=\"form.controls.stayRange\"\n * selectionMode=\"range\"\n * labelText=\"Stay dates\"\n * [showClear]=\"true\">\n * </tk-date-picker>\n *\n * @example\n * <!-- Combined date + time -->\n * <tk-date-picker\n * [showTime]=\"true\"\n * hourFormat=\"24\"\n * [(modelValue)]=\"appointmentDateTime\"\n * labelText=\"Appointment\">\n * </tk-date-picker>\n */\n@Component({\n selector: 'tk-date-picker',\n imports: [\n FormsModule,\n ReactiveFormsModule,\n DatePickerModule,\n FloatLabelModule,\n MessageModule,\n IconComponent,\n ],\n templateUrl: './date-picker.component.html',\n styleUrl: './date-picker.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class DatePickerComponent implements OnInit, ControlValueAccessor, Validator {\n /** @internal */\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n /** @internal */\n private readonly destroyRef = inject(DestroyRef);\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n\n toObservable(this.effectiveControl)\n .pipe(\n switchMap(ctrl => {\n this.disabledStatus.set(ctrl.disabled);\n return ctrl.statusChanges;\n }),\n takeUntilDestroyed()\n )\n .subscribe(() => {\n this.disabledStatus.set(this.effectiveControl().disabled);\n });\n\n effect(() => {\n this.required();\n this.minDate();\n this.maxDate();\n untracked(() => {\n this.onValidatorChange();\n this.effectiveControl().updateValueAndValidity({ emitEvent: false });\n });\n });\n }\n\n /**\n * @description\n * Marks the field as required. When `true`, the component returns a\n * `{ required: true }` validation error when no date is selected.\n *\n * @default false\n *\n * @example\n * <tk-date-picker [required]=\"true\" errorMessage=\"Date is required\" />\n */\n required = input<boolean>(false);\n\n /**\n * @description\n * Selection behaviour for the date calendar.\n * - `'single'` — one date.\n * - `'range'` — a pair of dates `[start, end]`.\n *\n * @default 'range'\n *\n * @example\n * <tk-date-picker selectionMode=\"single\" />\n */\n selectionMode = input<'single' | 'range'>('range');\n\n /**\n * @description\n * Shows a clear (×) button that resets the value to `null`.\n *\n * @default true\n *\n * @example\n * <tk-date-picker [showClear]=\"false\" />\n */\n showClear = input<boolean>(true);\n\n /**\n * @description\n * Shows the calendar icon inside the input field.\n * When `false`, the overlay can only be opened by clicking the input itself.\n *\n * @default true\n *\n * @example\n * <tk-date-picker [showIcon]=\"false\" />\n */\n showIcon = input<boolean>(true);\n\n /**\n * @description\n * Date display format forwarded to PrimeNG (e.g. `'dd/mm/yy'`, `'yy-mm-dd'`).\n *\n * @default 'dd/mm/yy'\n *\n * @example\n * <tk-date-picker dateFormat=\"yy-mm-dd\" />\n */\n dateFormat = input<string>('dd/mm/yy');\n\n /**\n * @description Hour increment/decrement step for the time spinner (used when `showTime=true`).\n * @default 1\n */\n stepHour = input<number>(1);\n\n /**\n * @description Minute increment/decrement step for the time spinner (used when `showTime=true`).\n * @default 1\n */\n stepMinute = input<number>(1);\n\n /**\n * @description Second increment/decrement step for the time spinner (used when `showTime=true`).\n * @default 1\n */\n stepSecond = input<number>(1);\n\n /**\n * @description\n * Whether to show the seconds segment in the time spinner.\n * Only active when `showTime=true` and `hourFormat=\"24\"`.\n *\n * @default false\n */\n showSeconds = input<boolean>(false);\n\n /**\n * @description\n * Disables the entire component. Can also be controlled through the bound\n * form control via `control.disable()` / `control.enable()`.\n *\n * @default false\n *\n * @example\n * <tk-date-picker [disabled]=\"isReadonly()\" />\n */\n disabled = input<boolean>(false);\n\n /**\n * @description\n * Renders the calendar inline (always visible) instead of in a dropdown overlay.\n *\n * @default false\n *\n * @example\n * <tk-date-picker [inline]=\"true\" selectionMode=\"single\" />\n */\n inline = input<boolean>(false);\n\n /**\n * @description\n * Adds a time spinner alongside the date calendar.\n *\n * @default false\n *\n * @example\n * <tk-date-picker [showTime]=\"true\" hourFormat=\"24\" />\n */\n showTime = input<boolean>(false);\n\n /**\n * @description\n * Hour format for the time spinner (only relevant when `showTime=true`).\n * - `'24'` — 0–23 hours.\n * - `'12'` — 1–12 hours with AM/PM toggle.\n *\n * @default '24'\n *\n * @example\n * <tk-date-picker [showTime]=\"true\" hourFormat=\"12\" />\n */\n hourFormat = input<'12' | '24'>('24');\n\n /**\n * @description\n * Target element or CSS selector to which the overlay panel is appended.\n * Use `'body'` to escape `overflow:hidden` parent containers (e.g. modals).\n *\n * @default 'body'\n *\n * @example\n * <tk-date-picker appendTo=\"body\" />\n */\n appendTo = input<string | HTMLElement | null | undefined>('body');\n\n /**\n * @description Base z-index applied to the overlay panel.\n * @default 10000\n */\n baseZIndex = input<number>(10000);\n\n /**\n * @description\n * Latest selectable date. Enforced both by PrimeNG (disables calendar days)\n * and by Angular form validation.\n *\n * @default null\n *\n * @example\n * <tk-date-picker [maxDate]=\"today\" errorMessage=\"Date cannot be in the future\" />\n */\n maxDate = input<Date | null>(null);\n\n /**\n * @description\n * Earliest selectable date. Enforced both by PrimeNG (disables calendar days)\n * and by Angular form validation.\n *\n * @default null\n *\n * @example\n * <tk-date-picker [minDate]=\"today\" errorMessage=\"Date must be today or later\" />\n */\n minDate = input<Date | null>(null);\n\n /**\n * @description Floating label text shown above the input field.\n * @default 'Select a date'\n * @example\n * <tk-date-picker labelText=\"Check-in date\" />\n */\n labelText = input<string>('Select a date');\n\n /**\n * @description\n * Validation error message rendered beneath the field when the bound control\n * is invalid and the field has been dirtied or touched.\n *\n * @default null\n *\n * @example\n * <tk-date-picker [minDate]=\"minDate\" errorMessage=\"Date is required\" />\n */\n errorMessage = input<string | null>(null);\n\n /**\n * @description\n * Hint text rendered beneath the field when there is no error to show.\n *\n * @default null\n *\n * @example\n * <tk-date-picker hint=\"Format: dd/mm/yyyy\" />\n */\n hint = input<string | null>(null);\n\n /**\n * @description\n * Optional external `FormControl` to bind when not using the standard\n * `formControl` / `formControlName` / `ngModel` directives.\n *\n * @example\n * <tk-date-picker [control]=\"form.controls.startDate\" />\n */\n control = input<FormControl | undefined>(undefined);\n\n /**\n * @description\n * Two-way signal binding for the selected value.\n * Accepts `Date` (single), `[Date, Date]` (range), or `null` (cleared).\n *\n * @example\n * <tk-date-picker [(modelValue)]=\"selectedDate\" />\n */\n modelValue = model<DateValue>(null);\n\n /**\n * @description\n * Emits the selected value whenever a complete selection is made.\n * In range mode, fires only when both start and end dates are chosen.\n *\n * @example\n * <tk-date-picker (handleSelect)=\"onDateSelected($event)\" />\n */\n handleSelect = output<DateValue>();\n\n /**\n * @description Emits when the user clears the field via the clear button.\n * @example\n * <tk-date-picker (handleClear)=\"onCleared()\" />\n */\n handleClear = output<void>();\n\n /** @internal */\n disabledStatus = signal<boolean>(false);\n\n /** @internal */\n effectiveDisabled = computed(() => this.disabled() || this.disabledStatus());\n\n /** @internal */\n effectiveMinDate = computed(() => this.minDate());\n\n /** @internal */\n effectiveMaxDate = computed(() => this.maxDate());\n\n /** @internal */\n effectiveSelectionMode = computed(() => this.selectionMode());\n\n /** @internal */\n effectiveHourFormat = computed<'12' | '24'>(() => this.hourFormat());\n\n /** @internal */\n effectiveDateFormat = computed(() => this.dateFormat());\n\n /** @internal */\n effectiveShowSeconds = computed(\n () => this.showTime() && this.hourFormat() === '24' && this.showSeconds()\n );\n\n /** @internal */\n effectiveShowTime = computed(() => this.showTime());\n\n /** @internal */\n private readonly internalControl = new FormControl<DateValue>(null);\n\n /**\n * @description\n * Memoised signal returning the active `FormControl` in priority order:\n * `NgControl` (reactive forms) → `control` input → internal fallback control.\n */\n readonly effectiveControl = computed<FormControl>(\n () => (this.ngControl?.control as FormControl) ?? this.control() ?? this.internalControl\n );\n\n /** @internal Unique DOM id used for `inputId` / `for` binding on every instance. */\n readonly uid = `tk-datepicker-${++_datePickerUid}`;\n\n /** @internal */ onChange: (value: DateValue) => void = () => {};\n /** @internal */ onTouched: () => void = () => {};\n /** @internal */ onValidatorChange: () => void = () => {};\n /** @internal */ private lastValue: DateValue = null;\n /** @internal */ private readonly boundValidate = this.validate.bind(this);\n\n /** @inheritdoc */\n ngOnInit(): void {\n const control = this.effectiveControl();\n\n this.disabledStatus.set(control.disabled);\n\n const initialValue = control.value;\n if (initialValue !== null && initialValue !== undefined) {\n this.modelValue.set(initialValue);\n this.lastValue = initialValue;\n }\n\n if (!this.ngControl) {\n const currentModel = this.modelValue();\n if (currentModel !== null && currentModel !== undefined) {\n this.handleSelect.emit(currentModel);\n this.onChange(currentModel);\n }\n }\n\n control.addValidators(this.boundValidate);\n control.updateValueAndValidity({ emitEvent: false });\n this.destroyRef.onDestroy(() => {\n control.removeValidators(this.boundValidate);\n });\n }\n\n /** @inheritdoc */\n writeValue(value: DateValue): void {\n this.modelValue.set(value);\n this.lastValue = value;\n }\n\n /** @inheritdoc */\n registerOnChange(fn: (value: DateValue) => void): void {\n this.onChange = fn;\n }\n\n /** @inheritdoc */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /** @inheritdoc */\n registerOnValidatorChange(fn: () => void): void {\n this.onValidatorChange = fn;\n }\n\n /** @inheritdoc */\n validate(): ValidationErrors | null {\n const value = this.modelValue();\n if (!value) return this.required() ? { required: true } : null;\n\n const min = this.minDate();\n const max = this.maxDate();\n\n if (value instanceof Date) return this.validateBounds(value, min, max);\n if (!Array.isArray(value)) return null;\n\n const [start, end] = value;\n if (start instanceof Date) {\n const err = this.validateBounds(start, min, max);\n if (err) return err;\n }\n return end instanceof Date ? this.validateBounds(end, min, max) : null;\n }\n\n private validateBounds(date: Date, min: Date | null, max: Date | null): ValidationErrors | null {\n if (min && date < min) return { minDate: { min, actual: date } };\n if (max && date > max) return { maxDate: { max, actual: date } };\n return null;\n }\n\n /** @inheritdoc */\n setDisabledState(isDisabled: boolean): void {\n this.disabledStatus.set(isDisabled);\n const control = this.effectiveControl();\n if (isDisabled && control.enabled) {\n control.disable({ emitEvent: false });\n } else if (!isDisabled && control.disabled) {\n control.enable({ emitEvent: false });\n }\n }\n\n /** @description Central change handler for PrimeNG's `ngModelChange`. */\n onModelChange(value: DateValue): void {\n let finalValue = value;\n\n if (\n this.effectiveSelectionMode() === 'single' &&\n finalValue instanceof Date &&\n this.lastValue instanceof Date &&\n finalValue.toDateString() === this.lastValue.toDateString()\n ) {\n finalValue = this.applyTimeCascading(this.lastValue, finalValue);\n }\n\n this.lastValue = finalValue;\n this.modelValue.set(finalValue);\n this.onChange(finalValue);\n this.effectiveControl().setValue(finalValue, { emitEvent: false });\n if (finalValue !== null) {\n this.effectiveControl().markAsDirty();\n }\n\n if (finalValue === null) {\n this.handleClear.emit();\n } else if (\n finalValue instanceof Date ||\n (Array.isArray(finalValue) && finalValue[0] instanceof Date && finalValue[1] instanceof Date)\n ) {\n this.handleSelect.emit(finalValue);\n }\n }\n\n /** @description Marks the control as touched when the user leaves the field. */\n onBlur(): void {\n this.onTouched();\n this.effectiveControl().markAsTouched();\n }\n\n /**\n * @description Programmatically clears the selected value, resetting it to `null`.\n *\n * @example\n * <tk-date-picker #picker />\n * <button (click)=\"picker.clear()\">Reset</button>\n */\n clear() {\n this.onModelChange(null);\n }\n\n /**\n * @description\n * Adjusts hours or minutes when the spinner rolls over a unit boundary.\n */\n private applyTimeCascading(prev: Date, curr: Date): Date {\n const updated = new Date(curr);\n\n if (prev.getSeconds() === 59 && updated.getSeconds() === 0) {\n updated.setMinutes(updated.getMinutes() + 1);\n } else if (prev.getSeconds() === 0 && updated.getSeconds() === 59) {\n updated.setMinutes(updated.getMinutes() - 1);\n }\n\n if (prev.getMinutes() === 59 && updated.getMinutes() === 0) {\n updated.setHours(updated.getHours() + 1);\n } else if (prev.getMinutes() === 0 && updated.getMinutes() === 59) {\n updated.setHours(updated.getHours() - 1);\n }\n\n return updated;\n }\n}\n","<div class=\"datepicker-container\" [class.inline]=\"inline()\">\n @if (inline()) {\n <p-datepicker\n [inputId]=\"uid\"\n [ngModel]=\"modelValue()\"\n (ngModelChange)=\"onModelChange($event)\"\n (onBlur)=\"onBlur()\"\n [selectionMode]=\"effectiveSelectionMode()\"\n [readonlyInput]=\"true\"\n [showClear]=\"showClear()\"\n [showIcon]=\"showIcon()\"\n [minDate]=\"effectiveMinDate()\"\n [maxDate]=\"effectiveMaxDate()\"\n [disabled]=\"effectiveDisabled()\"\n [dateFormat]=\"effectiveDateFormat()\"\n [timeOnly]=\"false\"\n [inline]=\"true\"\n [showTime]=\"effectiveShowTime()\"\n [hourFormat]=\"effectiveHourFormat()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [showSeconds]=\"effectiveShowSeconds()\">\n </p-datepicker>\n } @else {\n <p-floatlabel>\n <p-datepicker\n [inputId]=\"uid\"\n iconDisplay=\"input\"\n [ngModel]=\"modelValue()\"\n (ngModelChange)=\"onModelChange($event)\"\n (onBlur)=\"onBlur()\"\n [selectionMode]=\"effectiveSelectionMode()\"\n [readonlyInput]=\"true\"\n [showClear]=\"showClear()\"\n [showIcon]=\"showIcon()\"\n [minDate]=\"effectiveMinDate()\"\n [maxDate]=\"effectiveMaxDate()\"\n [disabled]=\"effectiveDisabled()\"\n [dateFormat]=\"effectiveDateFormat()\"\n [timeOnly]=\"false\"\n [showTime]=\"effectiveShowTime()\"\n [hourFormat]=\"effectiveHourFormat()\"\n [appendTo]=\"appendTo()\"\n [baseZIndex]=\"baseZIndex()\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [showSeconds]=\"effectiveShowSeconds()\">\n <ng-template #inputicon let-clickCallBack=\"clickCallBack\">\n <tk-icon\n icon=\"calendar-day\"\n tabindex=\"0\"\n (keydown.enter)=\"clickCallBack($event)\"\n (keydown.space)=\"clickCallBack($event)\"\n (click)=\"clickCallBack($event)\">\n </tk-icon>\n </ng-template>\n </p-datepicker>\n <label [for]=\"uid\">{{ labelText() }}</label>\n </p-floatlabel>\n }\n @let showError = errorMessage() && effectiveControl().invalid && (effectiveControl().dirty || effectiveControl().touched);\n @if (showError || hint()) {\n <div class=\"tk-input-bottom\">\n <div class=\"tk-input-messages\">\n @if (showError) {\n <p-message severity=\"error\" size=\"small\" variant=\"simple\">{{ errorMessage() }}</p-message>\n } @else if (hint()) {\n <p-message severity=\"secondary\" size=\"small\" variant=\"simple\">{{ hint() }}</p-message>\n }\n </div>\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,181 @@
1
+ import * as i0 from '@angular/core';
2
+ import { model, inject, computed, Component } from '@angular/core';
3
+ import { GridItemDirective } from '@tekus/design-system/directives/gird-item';
4
+ import { BreakpointObserver } from '@angular/cdk/layout';
5
+ import { toSignal } from '@angular/core/rxjs-interop';
6
+ import { Gutter, Breakpoints, GapGutter, PaddingGridContainer } from '@tekus/design-system/core/types';
7
+
8
+ /**
9
+ * A responsive CSS Grid container that exposes typed, two-way models to control
10
+ * column count, track size, inter-item gutter, and container padding.
11
+ *
12
+ * Behavior:
13
+ * - columns: GridColumns (default 12). Numeric values are capped per Breakpoints
14
+ * (2/3/4/8 for mobileSmall/mobileLarge/tabletVertical/tabletHorizontal). No cap when size is minmax().
15
+ * - size: ComposeSize (default '1fr'). Required to be minmax() when columns is 'auto-fill', otherwise an error is thrown.
16
+ * - gutter: Gutter (default 'normal'), mapped to GapGutter for host gap.
17
+ * - containerType: ContainerType (default 'medium'), mapped to PaddingGridContainer for host padding.
18
+ *
19
+ * Host bindings:
20
+ * - style.grid-template-columns via repeat(...) from computed columns/size.
21
+ * - style.gap via GapGutter.
22
+ * - style.padding via PaddingGridContainer.
23
+ *
24
+ * Intended to wrap GridItemDirective children. Public type is compatible with FixedGridProps | AutoFillGridProps.
25
+ * @selector tk-grid-container
26
+ */
27
+ class GridContainerComponent {
28
+ constructor() {
29
+ /**
30
+ * Two-way bound model defining the number of columns in the grid.
31
+ *
32
+ * The value is capped based on the current screen breakpoint. If the `size` model
33
+ * is a `minmax()` function, the column cap is disabled.
34
+ *
35
+ * @default 12
36
+ * @see GridColumns
37
+ */
38
+ this.columns = model(12, ...(ngDevMode ? [{ debugName: "columns" }] : /* istanbul ignore next */ []));
39
+ /**
40
+ * Two-way bound model defining the spacing between grid items.
41
+ *
42
+ * The value is mapped to a CSS `gap` property based on the `Gutter` type.
43
+ *
44
+ * @default Gutter.normal
45
+ * @see Gutter
46
+ * @see GutterType
47
+ */
48
+ this.gutter = model(Gutter.normal, ...(ngDevMode ? [{ debugName: "gutter" }] : /* istanbul ignore next */ []));
49
+ /**
50
+ * Two-way bound model defining the grid track size.
51
+ *
52
+ * Accepts any ComposeSize value (e.g., '1fr', fixed lengths, or minmax()) and
53
+ * drives the computed grid template for the container.
54
+ *
55
+ * @default '1fr'
56
+ * @see ComposeSize
57
+ */
58
+ this.size = model('1fr', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
59
+ /**
60
+ * Two-way bound model defining the internal spacing of the grid container.
61
+ *
62
+ * The value is mapped to a CSS `padding` property based on the `PaddingGridContainer` type.
63
+ *
64
+ * @default 'medium'
65
+ * @see ContainerType
66
+ */
67
+ this.containerType = model('medium', ...(ngDevMode ? [{ debugName: "containerType" }] : /* istanbul ignore next */ []));
68
+ /**
69
+ * A private static RegExp to validate strings that match the `minmax()` function.
70
+ */
71
+ this.MINMAX_RE = /^minmax\(\s*(\d+(px|rem|em|%|fr))\s*,\s*(\d+(px|rem|em|%|fr))\s*\)$/i;
72
+ /**
73
+ * A private service injection to observe screen breakpoint changes.
74
+ */
75
+ this.breakpointObserver = inject(BreakpointObserver);
76
+ /**
77
+ * A signal derived from `breakpointObserver` to reactively track changes
78
+ * across all defined breakpoints.
79
+ */
80
+ this.screenChanges = toSignal(this.breakpointObserver.observe([
81
+ Breakpoints.mobileSmall,
82
+ Breakpoints.mobile,
83
+ Breakpoints.mobileLarge,
84
+ Breakpoints.tabletVertical,
85
+ Breakpoints.tabletHorizontal,
86
+ Breakpoints.desktopSmall,
87
+ Breakpoints.desktop,
88
+ Breakpoints.desktopLarge,
89
+ ]));
90
+ /**
91
+ * A computed signal that determines the final number of columns for the grid.
92
+ *
93
+ * It caps the `columns` model value based on the current screen breakpoint,
94
+ * unless the `size` model is a `minmax()` function.
95
+ */
96
+ this.finalColumns = computed(() => {
97
+ const breakpoints = this.screenChanges()?.breakpoints;
98
+ const columnsNumber = Number.parseInt(this.columns());
99
+ if (Number.isNaN(columnsNumber) ||
100
+ !breakpoints ||
101
+ this.isMinMax(this.size())) {
102
+ return this.columns();
103
+ }
104
+ let maxColumns = 12;
105
+ if (breakpoints[Breakpoints.mobileSmall] ||
106
+ breakpoints[Breakpoints.mobile]) {
107
+ maxColumns = 2;
108
+ }
109
+ else if (breakpoints[Breakpoints.mobileLarge]) {
110
+ maxColumns = 3;
111
+ }
112
+ else if (breakpoints[Breakpoints.tabletVertical]) {
113
+ maxColumns = 4;
114
+ }
115
+ else if (breakpoints[Breakpoints.tabletHorizontal]) {
116
+ maxColumns = 8;
117
+ }
118
+ return Math.min(columnsNumber, maxColumns);
119
+ }, ...(ngDevMode ? [{ debugName: "finalColumns" }] : /* istanbul ignore next */ []));
120
+ /**
121
+ * Host binding that maps the `gutter` model to the host element's `style.gap` property.
122
+ */
123
+ this.hostGap = computed(() => {
124
+ const key = this.gutter() ?? Gutter.normal;
125
+ return GapGutter[key];
126
+ }, ...(ngDevMode ? [{ debugName: "hostGap" }] : /* istanbul ignore next */ []));
127
+ /**
128
+ * Host binding that sets the `style.grid-template-columns` property based on
129
+ * the computed column count and track size.
130
+ */
131
+ this.gridColumns = computed(() => this.computeGridTemplateColumns(), ...(ngDevMode ? [{ debugName: "gridColumns" }] : /* istanbul ignore next */ []));
132
+ /**
133
+ * Host binding that sets the `style.padding` property based on the `containerType` model.
134
+ */
135
+ this.containerPadding = computed(() => PaddingGridContainer[this.containerType()] ?? PaddingGridContainer.medium, ...(ngDevMode ? [{ debugName: "containerPadding" }] : /* istanbul ignore next */ []));
136
+ }
137
+ /**
138
+ * Computes the final `grid-template-columns` string for the host element.
139
+ *
140
+ * It handles both fixed and `auto-fill` column types and validates that the `size`
141
+ * model is a `minmax()` function when `columns` is set to `'auto-fill'`.
142
+ * @returns The CSS value for the `grid-template-columns` property.
143
+ */
144
+ computeGridTemplateColumns() {
145
+ const columnsVal = this.finalColumns();
146
+ const sizeVal = this.size() ?? '1fr';
147
+ if (columnsVal === 'auto-fill') {
148
+ if (this.isMinMax(sizeVal)) {
149
+ return `repeat(auto-fill, ${sizeVal})`;
150
+ }
151
+ throw new Error('When using columns="auto-fill", the "size" model must be a minmax() function, e.g., minmax(200px,1fr).');
152
+ }
153
+ return `repeat(${columnsVal}, ${sizeVal})`;
154
+ }
155
+ /**
156
+ * A private helper method to check if a given value is a valid `minmax()` function string.
157
+ * @param value The value to check.
158
+ * @returns `true` if the value is a valid `minmax()` string, `false` otherwise.
159
+ */
160
+ isMinMax(value) {
161
+ return (typeof value === 'string' &&
162
+ this.MINMAX_RE.test(value.trim()));
163
+ }
164
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: GridContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
165
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.17", type: GridContainerComponent, isStandalone: true, selector: "tk-grid-container", inputs: { columns: { classPropertyName: "columns", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null }, gutter: { classPropertyName: "gutter", publicName: "gutter", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, containerType: { classPropertyName: "containerType", publicName: "containerType", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { columns: "columnsChange", gutter: "gutterChange", size: "sizeChange", containerType: "containerTypeChange" }, host: { properties: { "style.gap": "hostGap()", "style.grid-template-columns": "gridColumns()", "style.padding": "containerPadding()" } }, ngImport: i0, template: `<ng-content />`, isInline: true, styles: [":host{display:grid}\n"] }); }
166
+ }
167
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: GridContainerComponent, decorators: [{
168
+ type: Component,
169
+ args: [{ selector: 'tk-grid-container', standalone: true, imports: [GridItemDirective], template: `<ng-content />`, host: {
170
+ '[style.gap]': 'hostGap()',
171
+ '[style.grid-template-columns]': 'gridColumns()',
172
+ '[style.padding]': 'containerPadding()',
173
+ }, styles: [":host{display:grid}\n"] }]
174
+ }], propDecorators: { columns: [{ type: i0.Input, args: [{ isSignal: true, alias: "columns", required: false }] }, { type: i0.Output, args: ["columnsChange"] }], gutter: [{ type: i0.Input, args: [{ isSignal: true, alias: "gutter", required: false }] }, { type: i0.Output, args: ["gutterChange"] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }, { type: i0.Output, args: ["sizeChange"] }], containerType: [{ type: i0.Input, args: [{ isSignal: true, alias: "containerType", required: false }] }, { type: i0.Output, args: ["containerTypeChange"] }] } });
175
+
176
+ /**
177
+ * Generated bundle index. Do not edit.
178
+ */
179
+
180
+ export { GridContainerComponent };
181
+ //# sourceMappingURL=tekus-design-system-components-grid-container.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tekus-design-system-components-grid-container.mjs","sources":["../../../projects/design-system/components/grid-container/src/grid-container.component.ts","../../../projects/design-system/components/grid-container/tekus-design-system-components-grid-container.ts"],"sourcesContent":["import { Component, computed, inject, model } from '@angular/core';\nimport { GridItemDirective } from '@tekus/design-system/directives/gird-item';\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport {\n AutoFillGridProps,\n ComposeMinMax,\n ComposeSize,\n ContainerType,\n FixedGridProps,\n GapGutter,\n GridColumns,\n PaddingGridContainer,\n Breakpoints,\n Gutter,\n GutterType\n} from '@tekus/design-system/core/types';\n\n/**\n * A responsive CSS Grid container that exposes typed, two-way models to control\n * column count, track size, inter-item gutter, and container padding.\n *\n * Behavior:\n * - columns: GridColumns (default 12). Numeric values are capped per Breakpoints\n * (2/3/4/8 for mobileSmall/mobileLarge/tabletVertical/tabletHorizontal). No cap when size is minmax().\n * - size: ComposeSize (default '1fr'). Required to be minmax() when columns is 'auto-fill', otherwise an error is thrown.\n * - gutter: Gutter (default 'normal'), mapped to GapGutter for host gap.\n * - containerType: ContainerType (default 'medium'), mapped to PaddingGridContainer for host padding.\n *\n * Host bindings:\n * - style.grid-template-columns via repeat(...) from computed columns/size.\n * - style.gap via GapGutter.\n * - style.padding via PaddingGridContainer.\n *\n * Intended to wrap GridItemDirective children. Public type is compatible with FixedGridProps | AutoFillGridProps.\n * @selector tk-grid-container\n */\n@Component({\n selector: 'tk-grid-container',\n standalone: true,\n imports: [GridItemDirective],\n styleUrls: ['./grid-container.component.scss'],\n template: `<ng-content />`,\n host: {\n '[style.gap]': 'hostGap()',\n '[style.grid-template-columns]': 'gridColumns()',\n '[style.padding]': 'containerPadding()',\n },\n})\nexport class GridContainerComponent {\n\n /**\n * Two-way bound model defining the number of columns in the grid.\n *\n * The value is capped based on the current screen breakpoint. If the `size` model\n * is a `minmax()` function, the column cap is disabled.\n *\n * @default 12\n * @see GridColumns\n */\n columns = model<GridColumns>(12);\n\n /**\n * Two-way bound model defining the spacing between grid items.\n *\n * The value is mapped to a CSS `gap` property based on the `Gutter` type.\n *\n * @default Gutter.normal\n * @see Gutter\n * @see GutterType\n */\n gutter = model<GutterType>(Gutter.normal);\n\n /**\n * Two-way bound model defining the grid track size.\n *\n * Accepts any ComposeSize value (e.g., '1fr', fixed lengths, or minmax()) and\n * drives the computed grid template for the container.\n *\n * @default '1fr'\n * @see ComposeSize\n */\n size = model<ComposeSize>('1fr');\n\n /**\n * Two-way bound model defining the internal spacing of the grid container.\n *\n * The value is mapped to a CSS `padding` property based on the `PaddingGridContainer` type.\n *\n * @default 'medium'\n * @see ContainerType\n */\n containerType = model<ContainerType>('medium');\n\n /**\n * A private static RegExp to validate strings that match the `minmax()` function.\n */\n readonly MINMAX_RE = /^minmax\\(\\s*(\\d+(px|rem|em|%|fr))\\s*,\\s*(\\d+(px|rem|em|%|fr))\\s*\\)$/i;\n\n /**\n * A private service injection to observe screen breakpoint changes.\n */\n private readonly breakpointObserver = inject(BreakpointObserver);\n\n /**\n * A signal derived from `breakpointObserver` to reactively track changes\n * across all defined breakpoints.\n */\n screenChanges = toSignal(\n this.breakpointObserver.observe([\n Breakpoints.mobileSmall,\n Breakpoints.mobile,\n Breakpoints.mobileLarge,\n Breakpoints.tabletVertical,\n Breakpoints.tabletHorizontal,\n Breakpoints.desktopSmall,\n Breakpoints.desktop,\n Breakpoints.desktopLarge,\n ])\n );\n\n /**\n * A computed signal that determines the final number of columns for the grid.\n *\n * It caps the `columns` model value based on the current screen breakpoint,\n * unless the `size` model is a `minmax()` function.\n */\n readonly finalColumns = computed(() => {\n const breakpoints = this.screenChanges()?.breakpoints;\n const columnsNumber = Number.parseInt(this.columns() as string);\n if (\n Number.isNaN(columnsNumber) ||\n !breakpoints ||\n this.isMinMax(this.size())\n ) {\n return this.columns();\n }\n\n let maxColumns = 12;\n\n if (\n breakpoints[Breakpoints.mobileSmall] ||\n breakpoints[Breakpoints.mobile]\n ) {\n maxColumns = 2;\n } else if (breakpoints[Breakpoints.mobileLarge]) {\n maxColumns = 3;\n } else if (breakpoints[Breakpoints.tabletVertical]) {\n maxColumns = 4;\n } else if (breakpoints[Breakpoints.tabletHorizontal]) {\n maxColumns = 8;\n }\n\n return Math.min(columnsNumber, maxColumns);\n });\n\n /**\n * Host binding that maps the `gutter` model to the host element's `style.gap` property.\n */\n readonly hostGap = computed<GapGutter>(() => {\n const key: GutterType = this.gutter() ?? Gutter.normal;\n return GapGutter[key as Gutter];\n });\n\n /**\n * Host binding that sets the `style.grid-template-columns` property based on\n * the computed column count and track size.\n */\n readonly gridColumns = computed<string>(() => this.computeGridTemplateColumns());\n\n /**\n * Host binding that sets the `style.padding` property based on the `containerType` model.\n */\n readonly containerPadding = computed<string>(() =>\n PaddingGridContainer[this.containerType() as keyof typeof PaddingGridContainer] ?? PaddingGridContainer.medium\n );\n\n /**\n * Computes the final `grid-template-columns` string for the host element.\n *\n * It handles both fixed and `auto-fill` column types and validates that the `size`\n * model is a `minmax()` function when `columns` is set to `'auto-fill'`.\n * @returns The CSS value for the `grid-template-columns` property.\n */\n computeGridTemplateColumns(): string {\n const columnsVal = this.finalColumns();\n const sizeVal = this.size() ?? '1fr';\n\n if (columnsVal === 'auto-fill') {\n if (this.isMinMax(sizeVal)) {\n return `repeat(auto-fill, ${sizeVal})`;\n }\n throw new Error(\n 'When using columns=\"auto-fill\", the \"size\" model must be a minmax() function, e.g., minmax(200px,1fr).'\n );\n }\n\n return `repeat(${columnsVal}, ${sizeVal})`;\n }\n\n /**\n * A private helper method to check if a given value is a valid `minmax()` function string.\n * @param value The value to check.\n * @returns `true` if the value is a valid `minmax()` string, `false` otherwise.\n */\n private isMinMax(value: unknown): value is ComposeMinMax {\n return (\n typeof value === 'string' &&\n this.MINMAX_RE.test(value.trim())\n );\n }\n}\n\n/**\n * A public type to represent an instance of the `GridContainerComponent` class,\n * combined with its public input properties.\n *\n * This allows for better type-checking when the component is used in a template.\n */\nexport type GridComponent = new () => GridContainerComponent &\n (FixedGridProps | AutoFillGridProps);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -44,6 +44,12 @@ class InputNumberComponent {
44
44
  * Message to display when the control is invalid and touched.
45
45
  */
46
46
  this.errorMessage = input('', ...(ngDevMode ? [{ debugName: "errorMessage" }] : /* istanbul ignore next */ []));
47
+ /**
48
+ * @property {InputSignal<string>} hint
49
+ * @description
50
+ * Hint text to display below the input.
51
+ */
52
+ this.hint = input('', ...(ngDevMode ? [{ debugName: "hint" }] : /* istanbul ignore next */ []));
47
53
  /**
48
54
  * @property {InputSignal<boolean>} showButtons
49
55
  * @description
@@ -51,6 +57,34 @@ class InputNumberComponent {
51
57
  * @default false
52
58
  */
53
59
  this.showButtons = input(false, ...(ngDevMode ? [{ debugName: "showButtons" }] : /* istanbul ignore next */ []));
60
+ /**
61
+ * @property {InputSignal<boolean>} useGrouping
62
+ * @description
63
+ * Whether to display thousands separators.
64
+ * @default false
65
+ */
66
+ this.useGrouping = input(false, ...(ngDevMode ? [{ debugName: "useGrouping" }] : /* istanbul ignore next */ []));
67
+ /**
68
+ * @property {InputSignal<number | null>} minFractionDigits
69
+ * @description
70
+ * Minimum number of decimal digits allowed.
71
+ */
72
+ this.minFractionDigits = input(null, ...(ngDevMode ? [{ debugName: "minFractionDigits" }] : /* istanbul ignore next */ []));
73
+ /**
74
+ * @property {InputSignal<number | null>} maxFractionDigits
75
+ * @description
76
+ * Maximum number of decimal digits allowed. Left unset (`null`) by
77
+ * default — integer entry only, matching prior behavior — and safe for
78
+ * already-bound decimal values (Intl.NumberFormat applies its own default
79
+ * of up to 3 decimal places for display when this isn't set, so no
80
+ * rounding happens). PrimeNG's InputNumber only lets the user *type* a new
81
+ * decimal separator when this is explicitly set to a value greater than 0
82
+ * — set it (e.g. `[maxFractionDigits]="2"`) to accept typed decimal
83
+ * input. Set to 0 only if you deliberately want to force integer-only
84
+ * display too — it rounds any already-bound decimal value.
85
+ * @default null
86
+ */
87
+ this.maxFractionDigits = input(null, ...(ngDevMode ? [{ debugName: "maxFractionDigits" }] : /* istanbul ignore next */ []));
54
88
  /**
55
89
  * @property {boolean} disabled
56
90
  * @description
@@ -149,7 +183,7 @@ class InputNumberComponent {
149
183
  this.effectiveControl?.markAsTouched();
150
184
  }
151
185
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: InputNumberComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
152
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: InputNumberComponent, isStandalone: true, selector: "tk-input-number", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, control: { classPropertyName: "control", publicName: "control", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, showButtons: { classPropertyName: "showButtons", publicName: "showButtons", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, ngImport: i0, template: "<p-floatlabel>\n <div class=\"tk-input-wrapper\">\n <p-inputnumber\n [inputId]=\"id()\"\n [ngModel]=\"value()\"\n (ngModelChange)=\"onInput($event)\"\n (onBlur)=\"onBlur()\"\n [showButtons]=\"showButtons()\"\n [disabled]=\"disabled()\"\n mode=\"decimal\"\n [useGrouping]=\"false\"\n [class.ng-invalid]=\"effectiveControl?.invalid\"\n [class.ng-dirty]=\"effectiveControl?.dirty\"\n [class.ng-touched]=\"effectiveControl?.touched\" />\n\n <label [for]=\"id()\">{{ label() }}</label>\n </div>\n</p-floatlabel>\n\n<div class=\"tk-input-bottom\">\n <div class=\"tk-input-messages\">\n @if ((effectiveControl?.invalid && (effectiveControl?.dirty ||\n effectiveControl?.touched)) && errorMessage()) {\n <p-message severity=\"error\" size=\"small\" variant=\"simple\">{{\n errorMessage()\n }}</p-message>\n }\n </div>\n</div>\n", styles: [":host ::ng-deep .p-inputnumber-input{width:100%;flex:1;border:none;border-bottom:.0625rem solid var(--tk-color-base-surface-300, #d2d2d2);border-radius:0;padding:var(--tk-spacing-base-75, .75rem);padding-left:var(--tk-spacing-padding-xs, .25rem);color:var(--tk-color-base-surface-950, #191a1b);background-color:transparent}:host ::ng-deep .p-inputnumber-input:focus{border-color:var(--tk-color-base-primary-600, #140065);box-shadow:none}:host ::ng-deep .p-inputnumber-input.ng-invalid.ng-dirty,:host ::ng-deep .p-inputnumber-input.ng-invalid.ng-touched{border-color:var(--tk-color-base-red-700, #cf2604)}:host ::ng-deep .p-inputnumber-input:disabled{background-color:var(--tk-color-base-surface-200, #e4e4e4);color:var(--tk-color-base-surface-500, #8a8a8b);opacity:1}:host ::ng-deep .p-inputnumber{display:flex}:host ::ng-deep .p-floatlabel label{color:var(--tk-color-base-surface-500, #8a8a8b);font-weight:var(--tk-font-weight-400, 400);left:var(--tk-spacing-base-25, .25rem);transition-duration:.2s}:host ::ng-deep .p-floatlabel:has(input:disabled) label{display:none}:host ::ng-deep .p-floatlabel:has(.p-inputwrapper-filled) label,:host ::ng-deep .p-floatlabel:has(input.p-filled) label{top:-.75rem;color:var(--tk-color-base-surface-950, #191a1b)}:host ::ng-deep .p-floatlabel:has(input:focus) label{top:-.75rem;color:var(--tk-color-base-primary-600, #140065)}:host ::ng-deep .p-floatlabel:has(input.has-icon) label{left:var(--tk-spacing-base-200, 2rem)}:host ::ng-deep .p-floatlabel:has(.p-inputnumber-input.ng-invalid.ng-dirty) label,:host ::ng-deep .p-floatlabel:has(.p-inputnumber-input.ng-invalid.ng-touched) label{color:var(--tk-color-base-red-700, #cf2604)}:host ::ng-deep .tk-input-wrapper{position:relative}:host ::ng-deep p-message[severity=error] .p-inline-message-text,:host ::ng-deep p-message[severity=error] span{color:var(--tk-color-base-red-700, #cf2604)}:host ::ng-deep .tk-input-bottom{display:flex;justify-content:space-between;align-items:flex-start;margin-top:var(--tk-spacing-base-25, .25rem);min-height:var(--tk-spacing-base-125, 1.25rem)}:host ::ng-deep .tk-input-messages{flex:1;margin-right:var(--tk-spacing-base-100, 1rem)}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: InputNumber, selector: "p-inputNumber, p-inputnumber, p-input-number", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "placeholder", "tabindex", "title", "ariaLabelledBy", "ariaDescribedBy", "ariaLabel", "ariaRequired", "autocomplete", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "ngmodule", type: FloatLabelModule }, { kind: "component", type: i2.FloatLabel, selector: "p-floatlabel, p-floatLabel, p-float-label", inputs: ["variant"] }, { kind: "component", type: Message, selector: "p-message", inputs: ["severity", "text", "escape", "style", "styleClass", "closable", "icon", "closeIcon", "life", "showTransitionOptions", "hideTransitionOptions", "size", "variant", "motionOptions"], outputs: ["onClose"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
186
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.17", type: InputNumberComponent, isStandalone: true, selector: "tk-input-number", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, control: { classPropertyName: "control", publicName: "control", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, showButtons: { classPropertyName: "showButtons", publicName: "showButtons", isSignal: true, isRequired: false, transformFunction: null }, useGrouping: { classPropertyName: "useGrouping", publicName: "useGrouping", isSignal: true, isRequired: false, transformFunction: null }, minFractionDigits: { classPropertyName: "minFractionDigits", publicName: "minFractionDigits", isSignal: true, isRequired: false, transformFunction: null }, maxFractionDigits: { classPropertyName: "maxFractionDigits", publicName: "maxFractionDigits", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange" }, ngImport: i0, template: "<p-floatlabel>\n <div class=\"tk-input-wrapper\">\n <p-inputnumber\n [inputId]=\"id()\"\n [ngModel]=\"value()\"\n (ngModelChange)=\"onInput($event)\"\n (onBlur)=\"onBlur()\"\n [showButtons]=\"showButtons()\"\n [disabled]=\"disabled()\"\n mode=\"decimal\"\n [useGrouping]=\"useGrouping()\"\n [minFractionDigits]=\"minFractionDigits()\"\n [maxFractionDigits]=\"maxFractionDigits()\"\n [class.ng-invalid]=\"effectiveControl?.invalid\"\n [class.ng-dirty]=\"effectiveControl?.dirty\"\n [class.ng-touched]=\"effectiveControl?.touched\" />\n\n <label [for]=\"id()\">{{ label() }}</label>\n </div>\n</p-floatlabel>\n\n<div class=\"tk-input-bottom\">\n <div class=\"tk-input-messages\">\n @let showError = (effectiveControl?.invalid && (effectiveControl?.dirty ||\n effectiveControl?.touched)) && errorMessage();\n @if (showError) {\n <p-message severity=\"error\" size=\"small\" variant=\"simple\">{{\n errorMessage()\n }}</p-message>\n } @else if (hint()) {\n <p-message severity=\"secondary\" size=\"small\" variant=\"simple\">{{\n hint()\n }}</p-message>\n }\n </div>\n</div>\n", styles: [":host ::ng-deep .p-inputnumber-input{width:100%;flex:1;border:none;border-bottom:.0625rem solid var(--tk-color-base-surface-300, #d2d2d2);border-radius:0;padding:var(--tk-spacing-base-75, .75rem);padding-left:var(--tk-spacing-padding-xs, .25rem);color:var(--tk-color-base-surface-950, #191a1b);background-color:transparent}:host ::ng-deep .p-inputnumber-input:focus{border-color:var(--tk-color-base-primary-600, #140065);box-shadow:none}:host ::ng-deep .p-inputnumber-input.ng-invalid.ng-dirty,:host ::ng-deep .p-inputnumber-input.ng-invalid.ng-touched{border-color:var(--tk-color-base-red-700, #cf2604)}:host ::ng-deep .p-inputnumber-input:disabled{background-color:var(--tk-color-base-surface-200, #e4e4e4);color:var(--tk-color-base-surface-500, #8a8a8b);opacity:1}:host ::ng-deep .p-inputnumber{display:flex}:host ::ng-deep .p-floatlabel label{color:var(--tk-color-base-surface-500, #8a8a8b);font-weight:var(--tk-font-weight-400, 400);left:var(--tk-spacing-base-25, .25rem);transition-duration:.2s}:host ::ng-deep .p-floatlabel:has(input:disabled) label{display:none}:host ::ng-deep .p-floatlabel:has(.p-inputwrapper-filled) label,:host ::ng-deep .p-floatlabel:has(input.p-filled) label{top:-.75rem;color:var(--tk-color-base-surface-950, #191a1b)}:host ::ng-deep .p-floatlabel:has(input:focus) label{top:-.75rem;color:var(--tk-color-base-primary-600, #140065)}:host ::ng-deep .p-floatlabel:has(input.has-icon) label{left:var(--tk-spacing-base-200, 2rem)}:host ::ng-deep .p-floatlabel:has(.p-inputnumber-input.ng-invalid.ng-dirty) label,:host ::ng-deep .p-floatlabel:has(.p-inputnumber-input.ng-invalid.ng-touched) label{color:var(--tk-color-base-red-700, #cf2604)}:host ::ng-deep .tk-input-wrapper{position:relative}:host ::ng-deep p-message[severity=error] .p-inline-message-text,:host ::ng-deep p-message[severity=error] span{color:var(--tk-color-base-red-700, #cf2604)}:host ::ng-deep p-message[severity=secondary] .p-inline-message-text,:host ::ng-deep p-message[severity=secondary] span{color:var(--tk-color-base-surface-600, #5d5d5e)}:host ::ng-deep .tk-input-bottom{display:flex;justify-content:space-between;align-items:flex-start;margin-top:var(--tk-spacing-base-25, .25rem);min-height:var(--tk-spacing-base-125, 1.25rem)}:host ::ng-deep .tk-input-messages{flex:1;margin-right:var(--tk-spacing-base-100, 1rem)}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: InputNumber, selector: "p-inputNumber, p-inputnumber, p-input-number", inputs: ["showButtons", "format", "buttonLayout", "inputId", "styleClass", "placeholder", "tabindex", "title", "ariaLabelledBy", "ariaDescribedBy", "ariaLabel", "ariaRequired", "autocomplete", "incrementButtonClass", "decrementButtonClass", "incrementButtonIcon", "decrementButtonIcon", "readonly", "allowEmpty", "locale", "localeMatcher", "mode", "currency", "currencyDisplay", "useGrouping", "minFractionDigits", "maxFractionDigits", "prefix", "suffix", "inputStyle", "inputStyleClass", "showClear", "autofocus"], outputs: ["onInput", "onFocus", "onBlur", "onKeyDown", "onClear"] }, { kind: "ngmodule", type: FloatLabelModule }, { kind: "component", type: i2.FloatLabel, selector: "p-floatlabel, p-floatLabel, p-float-label", inputs: ["variant"] }, { kind: "component", type: Message, selector: "p-message", inputs: ["severity", "text", "escape", "style", "styleClass", "closable", "icon", "closeIcon", "life", "showTransitionOptions", "hideTransitionOptions", "size", "variant", "motionOptions"], outputs: ["onClose"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
153
187
  }
154
188
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImport: i0, type: InputNumberComponent, decorators: [{
155
189
  type: Component,
@@ -159,8 +193,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.17", ngImpo
159
193
  InputNumber,
160
194
  FloatLabelModule,
161
195
  Message,
162
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<p-floatlabel>\n <div class=\"tk-input-wrapper\">\n <p-inputnumber\n [inputId]=\"id()\"\n [ngModel]=\"value()\"\n (ngModelChange)=\"onInput($event)\"\n (onBlur)=\"onBlur()\"\n [showButtons]=\"showButtons()\"\n [disabled]=\"disabled()\"\n mode=\"decimal\"\n [useGrouping]=\"false\"\n [class.ng-invalid]=\"effectiveControl?.invalid\"\n [class.ng-dirty]=\"effectiveControl?.dirty\"\n [class.ng-touched]=\"effectiveControl?.touched\" />\n\n <label [for]=\"id()\">{{ label() }}</label>\n </div>\n</p-floatlabel>\n\n<div class=\"tk-input-bottom\">\n <div class=\"tk-input-messages\">\n @if ((effectiveControl?.invalid && (effectiveControl?.dirty ||\n effectiveControl?.touched)) && errorMessage()) {\n <p-message severity=\"error\" size=\"small\" variant=\"simple\">{{\n errorMessage()\n }}</p-message>\n }\n </div>\n</div>\n", styles: [":host ::ng-deep .p-inputnumber-input{width:100%;flex:1;border:none;border-bottom:.0625rem solid var(--tk-color-base-surface-300, #d2d2d2);border-radius:0;padding:var(--tk-spacing-base-75, .75rem);padding-left:var(--tk-spacing-padding-xs, .25rem);color:var(--tk-color-base-surface-950, #191a1b);background-color:transparent}:host ::ng-deep .p-inputnumber-input:focus{border-color:var(--tk-color-base-primary-600, #140065);box-shadow:none}:host ::ng-deep .p-inputnumber-input.ng-invalid.ng-dirty,:host ::ng-deep .p-inputnumber-input.ng-invalid.ng-touched{border-color:var(--tk-color-base-red-700, #cf2604)}:host ::ng-deep .p-inputnumber-input:disabled{background-color:var(--tk-color-base-surface-200, #e4e4e4);color:var(--tk-color-base-surface-500, #8a8a8b);opacity:1}:host ::ng-deep .p-inputnumber{display:flex}:host ::ng-deep .p-floatlabel label{color:var(--tk-color-base-surface-500, #8a8a8b);font-weight:var(--tk-font-weight-400, 400);left:var(--tk-spacing-base-25, .25rem);transition-duration:.2s}:host ::ng-deep .p-floatlabel:has(input:disabled) label{display:none}:host ::ng-deep .p-floatlabel:has(.p-inputwrapper-filled) label,:host ::ng-deep .p-floatlabel:has(input.p-filled) label{top:-.75rem;color:var(--tk-color-base-surface-950, #191a1b)}:host ::ng-deep .p-floatlabel:has(input:focus) label{top:-.75rem;color:var(--tk-color-base-primary-600, #140065)}:host ::ng-deep .p-floatlabel:has(input.has-icon) label{left:var(--tk-spacing-base-200, 2rem)}:host ::ng-deep .p-floatlabel:has(.p-inputnumber-input.ng-invalid.ng-dirty) label,:host ::ng-deep .p-floatlabel:has(.p-inputnumber-input.ng-invalid.ng-touched) label{color:var(--tk-color-base-red-700, #cf2604)}:host ::ng-deep .tk-input-wrapper{position:relative}:host ::ng-deep p-message[severity=error] .p-inline-message-text,:host ::ng-deep p-message[severity=error] span{color:var(--tk-color-base-red-700, #cf2604)}:host ::ng-deep .tk-input-bottom{display:flex;justify-content:space-between;align-items:flex-start;margin-top:var(--tk-spacing-base-25, .25rem);min-height:var(--tk-spacing-base-125, 1.25rem)}:host ::ng-deep .tk-input-messages{flex:1;margin-right:var(--tk-spacing-base-100, 1rem)}\n"] }]
163
- }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], control: [{ type: i0.Input, args: [{ isSignal: true, alias: "control", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], errorMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorMessage", required: false }] }], showButtons: [{ type: i0.Input, args: [{ isSignal: true, alias: "showButtons", required: false }] }] } });
196
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<p-floatlabel>\n <div class=\"tk-input-wrapper\">\n <p-inputnumber\n [inputId]=\"id()\"\n [ngModel]=\"value()\"\n (ngModelChange)=\"onInput($event)\"\n (onBlur)=\"onBlur()\"\n [showButtons]=\"showButtons()\"\n [disabled]=\"disabled()\"\n mode=\"decimal\"\n [useGrouping]=\"useGrouping()\"\n [minFractionDigits]=\"minFractionDigits()\"\n [maxFractionDigits]=\"maxFractionDigits()\"\n [class.ng-invalid]=\"effectiveControl?.invalid\"\n [class.ng-dirty]=\"effectiveControl?.dirty\"\n [class.ng-touched]=\"effectiveControl?.touched\" />\n\n <label [for]=\"id()\">{{ label() }}</label>\n </div>\n</p-floatlabel>\n\n<div class=\"tk-input-bottom\">\n <div class=\"tk-input-messages\">\n @let showError = (effectiveControl?.invalid && (effectiveControl?.dirty ||\n effectiveControl?.touched)) && errorMessage();\n @if (showError) {\n <p-message severity=\"error\" size=\"small\" variant=\"simple\">{{\n errorMessage()\n }}</p-message>\n } @else if (hint()) {\n <p-message severity=\"secondary\" size=\"small\" variant=\"simple\">{{\n hint()\n }}</p-message>\n }\n </div>\n</div>\n", styles: [":host ::ng-deep .p-inputnumber-input{width:100%;flex:1;border:none;border-bottom:.0625rem solid var(--tk-color-base-surface-300, #d2d2d2);border-radius:0;padding:var(--tk-spacing-base-75, .75rem);padding-left:var(--tk-spacing-padding-xs, .25rem);color:var(--tk-color-base-surface-950, #191a1b);background-color:transparent}:host ::ng-deep .p-inputnumber-input:focus{border-color:var(--tk-color-base-primary-600, #140065);box-shadow:none}:host ::ng-deep .p-inputnumber-input.ng-invalid.ng-dirty,:host ::ng-deep .p-inputnumber-input.ng-invalid.ng-touched{border-color:var(--tk-color-base-red-700, #cf2604)}:host ::ng-deep .p-inputnumber-input:disabled{background-color:var(--tk-color-base-surface-200, #e4e4e4);color:var(--tk-color-base-surface-500, #8a8a8b);opacity:1}:host ::ng-deep .p-inputnumber{display:flex}:host ::ng-deep .p-floatlabel label{color:var(--tk-color-base-surface-500, #8a8a8b);font-weight:var(--tk-font-weight-400, 400);left:var(--tk-spacing-base-25, .25rem);transition-duration:.2s}:host ::ng-deep .p-floatlabel:has(input:disabled) label{display:none}:host ::ng-deep .p-floatlabel:has(.p-inputwrapper-filled) label,:host ::ng-deep .p-floatlabel:has(input.p-filled) label{top:-.75rem;color:var(--tk-color-base-surface-950, #191a1b)}:host ::ng-deep .p-floatlabel:has(input:focus) label{top:-.75rem;color:var(--tk-color-base-primary-600, #140065)}:host ::ng-deep .p-floatlabel:has(input.has-icon) label{left:var(--tk-spacing-base-200, 2rem)}:host ::ng-deep .p-floatlabel:has(.p-inputnumber-input.ng-invalid.ng-dirty) label,:host ::ng-deep .p-floatlabel:has(.p-inputnumber-input.ng-invalid.ng-touched) label{color:var(--tk-color-base-red-700, #cf2604)}:host ::ng-deep .tk-input-wrapper{position:relative}:host ::ng-deep p-message[severity=error] .p-inline-message-text,:host ::ng-deep p-message[severity=error] span{color:var(--tk-color-base-red-700, #cf2604)}:host ::ng-deep p-message[severity=secondary] .p-inline-message-text,:host ::ng-deep p-message[severity=secondary] span{color:var(--tk-color-base-surface-600, #5d5d5e)}:host ::ng-deep .tk-input-bottom{display:flex;justify-content:space-between;align-items:flex-start;margin-top:var(--tk-spacing-base-25, .25rem);min-height:var(--tk-spacing-base-125, 1.25rem)}:host ::ng-deep .tk-input-messages{flex:1;margin-right:var(--tk-spacing-base-100, 1rem)}\n"] }]
197
+ }], ctorParameters: () => [], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], control: [{ type: i0.Input, args: [{ isSignal: true, alias: "control", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], errorMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorMessage", required: false }] }], hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], showButtons: [{ type: i0.Input, args: [{ isSignal: true, alias: "showButtons", required: false }] }], useGrouping: [{ type: i0.Input, args: [{ isSignal: true, alias: "useGrouping", required: false }] }], minFractionDigits: [{ type: i0.Input, args: [{ isSignal: true, alias: "minFractionDigits", required: false }] }], maxFractionDigits: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxFractionDigits", required: false }] }] } });
164
198
 
165
199
  /**
166
200
  * Generated bundle index. Do not edit.
@@ -1 +1 @@
1
- {"version":3,"file":"tekus-design-system-components-input-number.mjs","sources":["../../../projects/design-system/components/input-number/src/input-number.component.ts","../../../projects/design-system/components/input-number/src/input-number.component.html","../../../projects/design-system/components/input-number/tekus-design-system-components-input-number.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n input,\n model,\n signal,\n OnInit,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n ControlValueAccessor,\n FormControl,\n ReactiveFormsModule,\n NgControl,\n FormsModule,\n} from '@angular/forms';\nimport { FloatLabelModule } from 'primeng/floatlabel';\nimport { InputNumber } from 'primeng/inputnumber';\nimport { Message } from 'primeng/message';\n\n@Component({\n selector: 'tk-input-number',\n imports: [\n ReactiveFormsModule,\n FormsModule,\n InputNumber,\n FloatLabelModule,\n Message,\n ],\n templateUrl: './input-number.component.html',\n styleUrl: './input-number.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InputNumberComponent\n implements ControlValueAccessor, OnInit\n{\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n private readonly destroyRef = inject(DestroyRef);\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n /**\n * @property {ModelSignal<number | null>} value\n * @description\n * The value of the input. Supports two-way binding via signals.\n */\n value = model<number | null>(null);\n\n /**\n * @property {InputSignal<FormControl>} control\n * @description\n * External FormControl used to read/set the input value.\n * If not provided, an internal FormControl is created.\n */\n control = input<FormControl>(new FormControl(null));\n\n /**\n * @property {InputSignal<string>} label\n * @description\n * Label displayed above the input.\n */\n label = input<string>('');\n\n /**\n * @property {InputSignal<string>} id\n * @description\n * HTML id attribute for the input.\n * @default 'tk-input-number'\n */\n id = input<string>('tk-input-number');\n\n /**\n * @property {InputSignal<string>} errorMessage\n * @description\n * Message to display when the control is invalid and touched.\n */\n errorMessage = input<string>('');\n\n /**\n * @property {InputSignal<boolean>} showButtons\n * @description\n * Whether to display spinner buttons.\n * @default false\n */\n showButtons = input<boolean>(false);\n\n /**\n * @property {boolean} disabled\n * @description\n * Whether the input is disabled.\n */\n disabled = signal<boolean>(false);\n\n get effectiveControl(): FormControl | null {\n return (this.ngControl?.control as FormControl) || this.control();\n }\n\n onChange: (value: number | null) => void = () => {};\n onTouched: () => void = () => {};\n private isWriting = false;\n\n ngOnInit(): void {\n const control = this.effectiveControl;\n if (control?.value !== null && control?.value !== undefined) {\n this.value.set(control.value);\n }\n\n this.disabled.set(control?.disabled ?? false);\n\n control?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(val => {\n if (this.isWriting) return;\n if (val !== this.value()) {\n this.value.set(val ?? null);\n this.onChange(val);\n }\n });\n\n control?.statusChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.disabled.set(control?.disabled ?? false);\n });\n }\n\n /**\n * @method writeValue\n * @description\n * Writes a new value to the element.\n * @param value The new value.\n */\n writeValue(value: number | null): void {\n this.value.set(value ?? null);\n }\n\n /**\n * @method registerOnChange\n * @description\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function.\n */\n registerOnChange(fn: (value: number | null) => void): void {\n this.onChange = fn;\n }\n\n /**\n * @method registerOnTouched\n * @description\n * Registers a callback function that is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function.\n */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /**\n * @method setDisabledState\n * @description\n * Function that is called by the forms API when the control status changes to or from 'DISABLED'.\n * @param isDisabled The disabled status to set on the element.\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n /**\n * @method onInput\n * @description\n * Handles input events to update the model and notify forms.\n * @param value The new numeric value.\n */\n onInput(value: number | null): void {\n this.isWriting = true;\n this.value.set(value);\n this.onChange(value);\n this.effectiveControl?.setValue(value);\n this.effectiveControl?.markAsDirty();\n this.isWriting = false;\n }\n\n /**\n * @method onBlur\n * @description\n * Handles blur events to mark the control as touched.\n */\n onBlur(): void {\n this.onTouched();\n this.effectiveControl?.markAsTouched();\n }\n}\n","<p-floatlabel>\n <div class=\"tk-input-wrapper\">\n <p-inputnumber\n [inputId]=\"id()\"\n [ngModel]=\"value()\"\n (ngModelChange)=\"onInput($event)\"\n (onBlur)=\"onBlur()\"\n [showButtons]=\"showButtons()\"\n [disabled]=\"disabled()\"\n mode=\"decimal\"\n [useGrouping]=\"false\"\n [class.ng-invalid]=\"effectiveControl?.invalid\"\n [class.ng-dirty]=\"effectiveControl?.dirty\"\n [class.ng-touched]=\"effectiveControl?.touched\" />\n\n <label [for]=\"id()\">{{ label() }}</label>\n </div>\n</p-floatlabel>\n\n<div class=\"tk-input-bottom\">\n <div class=\"tk-input-messages\">\n @if ((effectiveControl?.invalid && (effectiveControl?.dirty ||\n effectiveControl?.touched)) && errorMessage()) {\n <p-message severity=\"error\" size=\"small\" variant=\"simple\">{{\n errorMessage()\n }}</p-message>\n }\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tekus-design-system-components-input-number.mjs","sources":["../../../projects/design-system/components/input-number/src/input-number.component.ts","../../../projects/design-system/components/input-number/src/input-number.component.html","../../../projects/design-system/components/input-number/tekus-design-system-components-input-number.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n input,\n model,\n signal,\n OnInit,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n ControlValueAccessor,\n FormControl,\n ReactiveFormsModule,\n NgControl,\n FormsModule,\n} from '@angular/forms';\nimport { FloatLabelModule } from 'primeng/floatlabel';\nimport { InputNumber } from 'primeng/inputnumber';\nimport { Message } from 'primeng/message';\n\n@Component({\n selector: 'tk-input-number',\n imports: [\n ReactiveFormsModule,\n FormsModule,\n InputNumber,\n FloatLabelModule,\n Message,\n ],\n templateUrl: './input-number.component.html',\n styleUrl: './input-number.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class InputNumberComponent\n implements ControlValueAccessor, OnInit\n{\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n private readonly destroyRef = inject(DestroyRef);\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n /**\n * @property {ModelSignal<number | null>} value\n * @description\n * The value of the input. Supports two-way binding via signals.\n */\n value = model<number | null>(null);\n\n /**\n * @property {InputSignal<FormControl>} control\n * @description\n * External FormControl used to read/set the input value.\n * If not provided, an internal FormControl is created.\n */\n control = input<FormControl>(new FormControl(null));\n\n /**\n * @property {InputSignal<string>} label\n * @description\n * Label displayed above the input.\n */\n label = input<string>('');\n\n /**\n * @property {InputSignal<string>} id\n * @description\n * HTML id attribute for the input.\n * @default 'tk-input-number'\n */\n id = input<string>('tk-input-number');\n\n /**\n * @property {InputSignal<string>} errorMessage\n * @description\n * Message to display when the control is invalid and touched.\n */\n errorMessage = input<string>('');\n\n /**\n * @property {InputSignal<string>} hint\n * @description\n * Hint text to display below the input.\n */\n hint = input<string>('');\n\n /**\n * @property {InputSignal<boolean>} showButtons\n * @description\n * Whether to display spinner buttons.\n * @default false\n */\n showButtons = input<boolean>(false);\n\n /**\n * @property {InputSignal<boolean>} useGrouping\n * @description\n * Whether to display thousands separators.\n * @default false\n */\n useGrouping = input<boolean>(false);\n\n /**\n * @property {InputSignal<number | null>} minFractionDigits\n * @description\n * Minimum number of decimal digits allowed.\n */\n minFractionDigits = input<number | null>(null);\n\n /**\n * @property {InputSignal<number | null>} maxFractionDigits\n * @description\n * Maximum number of decimal digits allowed. Left unset (`null`) by\n * default — integer entry only, matching prior behavior — and safe for\n * already-bound decimal values (Intl.NumberFormat applies its own default\n * of up to 3 decimal places for display when this isn't set, so no\n * rounding happens). PrimeNG's InputNumber only lets the user *type* a new\n * decimal separator when this is explicitly set to a value greater than 0\n * — set it (e.g. `[maxFractionDigits]=\"2\"`) to accept typed decimal\n * input. Set to 0 only if you deliberately want to force integer-only\n * display too — it rounds any already-bound decimal value.\n * @default null\n */\n maxFractionDigits = input<number | null>(null);\n\n /**\n * @property {boolean} disabled\n * @description\n * Whether the input is disabled.\n */\n disabled = signal<boolean>(false);\n\n get effectiveControl(): FormControl | null {\n return (this.ngControl?.control as FormControl) || this.control();\n }\n\n onChange: (value: number | null) => void = () => {};\n onTouched: () => void = () => {};\n private isWriting = false;\n\n ngOnInit(): void {\n const control = this.effectiveControl;\n if (control?.value !== null && control?.value !== undefined) {\n this.value.set(control.value);\n }\n\n this.disabled.set(control?.disabled ?? false);\n\n control?.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(val => {\n if (this.isWriting) return;\n if (val !== this.value()) {\n this.value.set(val ?? null);\n this.onChange(val);\n }\n });\n\n control?.statusChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.disabled.set(control?.disabled ?? false);\n });\n }\n\n /**\n * @method writeValue\n * @description\n * Writes a new value to the element.\n * @param value The new value.\n */\n writeValue(value: number | null): void {\n this.value.set(value ?? null);\n }\n\n /**\n * @method registerOnChange\n * @description\n * Registers a callback function that is called when the control's value changes in the UI.\n * @param fn The callback function.\n */\n registerOnChange(fn: (value: number | null) => void): void {\n this.onChange = fn;\n }\n\n /**\n * @method registerOnTouched\n * @description\n * Registers a callback function that is called by the forms API on initialization to update the form model on blur.\n * @param fn The callback function.\n */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /**\n * @method setDisabledState\n * @description\n * Function that is called by the forms API when the control status changes to or from 'DISABLED'.\n * @param isDisabled The disabled status to set on the element.\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n /**\n * @method onInput\n * @description\n * Handles input events to update the model and notify forms.\n * @param value The new numeric value.\n */\n onInput(value: number | null): void {\n this.isWriting = true;\n this.value.set(value);\n this.onChange(value);\n this.effectiveControl?.setValue(value);\n this.effectiveControl?.markAsDirty();\n this.isWriting = false;\n }\n\n /**\n * @method onBlur\n * @description\n * Handles blur events to mark the control as touched.\n */\n onBlur(): void {\n this.onTouched();\n this.effectiveControl?.markAsTouched();\n }\n}\n","<p-floatlabel>\n <div class=\"tk-input-wrapper\">\n <p-inputnumber\n [inputId]=\"id()\"\n [ngModel]=\"value()\"\n (ngModelChange)=\"onInput($event)\"\n (onBlur)=\"onBlur()\"\n [showButtons]=\"showButtons()\"\n [disabled]=\"disabled()\"\n mode=\"decimal\"\n [useGrouping]=\"useGrouping()\"\n [minFractionDigits]=\"minFractionDigits()\"\n [maxFractionDigits]=\"maxFractionDigits()\"\n [class.ng-invalid]=\"effectiveControl?.invalid\"\n [class.ng-dirty]=\"effectiveControl?.dirty\"\n [class.ng-touched]=\"effectiveControl?.touched\" />\n\n <label [for]=\"id()\">{{ label() }}</label>\n </div>\n</p-floatlabel>\n\n<div class=\"tk-input-bottom\">\n <div class=\"tk-input-messages\">\n @let showError = (effectiveControl?.invalid && (effectiveControl?.dirty ||\n effectiveControl?.touched)) && errorMessage();\n @if (showError) {\n <p-message severity=\"error\" size=\"small\" variant=\"simple\">{{\n errorMessage()\n }}</p-message>\n } @else if (hint()) {\n <p-message severity=\"secondary\" size=\"small\" variant=\"simple\">{{\n hint()\n }}</p-message>\n }\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}