@tailng-ui/components 0.14.0 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/package.json +3 -2
  2. package/src/lib/form/button-toggle/tng-button-toggle-group.component.d.ts +2 -2
  3. package/src/lib/form/datepicker/tng-datepicker.component.d.ts +236 -0
  4. package/src/lib/form/datepicker/tng-datepicker.component.d.ts.map +1 -0
  5. package/src/lib/form/datepicker/tng-datepicker.component.js +684 -0
  6. package/src/lib/form/datepicker/tng-datepicker.component.js.map +1 -0
  7. package/src/lib/form/form-field/tng-form-field.component.d.ts +15 -0
  8. package/src/lib/form/form-field/tng-form-field.component.d.ts.map +1 -0
  9. package/src/lib/form/form-field/tng-form-field.component.js +50 -0
  10. package/src/lib/form/form-field/tng-form-field.component.js.map +1 -0
  11. package/src/lib/form/index.d.ts +4 -0
  12. package/src/lib/form/index.d.ts.map +1 -1
  13. package/src/lib/form/index.js +4 -0
  14. package/src/lib/form/index.js.map +1 -1
  15. package/src/lib/form/input/tng-input.component.d.ts +45 -12
  16. package/src/lib/form/input/tng-input.component.d.ts.map +1 -1
  17. package/src/lib/form/input/tng-input.component.js +102 -5
  18. package/src/lib/form/input/tng-input.component.js.map +1 -1
  19. package/src/lib/layout/card/tng-card.component.d.ts +1 -1
  20. package/src/lib/layout/grid/tng-grid.component.d.ts +4 -1
  21. package/src/lib/layout/grid/tng-grid.component.d.ts.map +1 -1
  22. package/src/lib/layout/grid/tng-grid.component.js +101 -4
  23. package/src/lib/layout/grid/tng-grid.component.js.map +1 -1
  24. package/src/lib/layout/index.d.ts +1 -1
  25. package/src/lib/layout/index.d.ts.map +1 -1
  26. package/src/lib/layout/index.js +1 -1
  27. package/src/lib/layout/index.js.map +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-datepicker.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/datepicker/tng-datepicker.component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n ElementRef,\n HostBinding,\n LOCALE_ID,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\nimport { booleanAttribute } from '@angular/core';\nimport type { OnDestroy } from '@angular/core';\nimport {\n computeOverlayPosition,\n type TngOverlayCollisionOptions,\n type TngOverlayOffset,\n type TngOverlayPlacement,\n} from '@tailng-ui/cdk';\nimport {\n createDatepickerController,\n type TngCalendarView,\n type TngDateCell,\n type TngDateAdapter,\n type TngDateInputValue,\n type TngDateSelectionInput,\n type TngDateValue,\n type TngDatepickerCloseReason,\n type TngDatepickerDirection,\n type TngDatepickerOutputs,\n type TngDatepickerSelectionMode,\n type TngMonthOption,\n type TngWeekdayIndex,\n type TngYearOption,\n} from '@tailng-ui/primitives';\n\ntype OptionalBooleanInput = boolean | null | string | undefined;\ntype TngDatepickerPlacement = 'auto' | 'bottom' | 'top';\n\ntype MaybeRect = Readonly<{\n height: number;\n left: number;\n top: number;\n width: number;\n}>;\n\nconst OVERLAY_VIEWPORT_MARGIN = 12;\nconst OVERLAY_OFFSET = 9;\n\nfunction rectFromClientRect(rect: DOMRect | ClientRect): MaybeRect {\n return {\n height: rect.height,\n left: rect.left,\n top: rect.top,\n width: rect.width,\n };\n}\n\nfunction viewportRect(windowRef: Window): MaybeRect {\n return {\n height: windowRef.innerHeight || 768,\n left: 0,\n top: 0,\n width: windowRef.innerWidth || 1024,\n };\n}\n\nfunction normalizeOptionalBooleanInput(value: OptionalBooleanInput): boolean | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n\n return booleanAttribute(value);\n}\n\nfunction normalizeNumberInput(value: number | string): number {\n return typeof value === 'number' ? value : Number(value);\n}\n\nfunction normalizeWeekdayInput(value: TngWeekdayIndex | number | string): TngWeekdayIndex {\n const normalized = Math.max(0, Math.min(6, Math.trunc(normalizeNumberInput(value))));\n return normalized as TngWeekdayIndex;\n}\n\nfunction isKeyboardEventTarget(value: EventTarget | null): value is HTMLElement {\n return value instanceof HTMLElement;\n}\n\nlet nextDatepickerInputId = 0;\n\nfunction createDatepickerInputId(): string {\n nextDatepickerInputId += 1;\n return `tng-datepicker-input-${nextDatepickerInputId}`;\n}\n\n@Component({\n selector: 'tng-datepicker',\n templateUrl: './tng-datepicker.component.html',\n styleUrl: './tng-datepicker.component.css',\n})\nexport class TngDatepickerComponent<TDate = Date> implements OnDestroy {\n private readonly hostElement = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly defaultLocale = inject(LOCALE_ID);\n private readonly fallbackInputId = createDatepickerInputId();\n private readonly ownerDocument = this.hostElement.nativeElement.ownerDocument ?? null;\n private readonly ownerWindow = this.ownerDocument?.defaultView ?? null;\n private readonly renderVersion = signal(0);\n private readonly overlayOpen = signal(false);\n private readonly resolvedOverlayPlacement = signal<'bottom' | 'top'>('bottom');\n private readonly anchorRef = viewChild<ElementRef<HTMLElement>>('anchorShell');\n private readonly triggerRef = viewChild<ElementRef<HTMLElement>>('triggerButton');\n private readonly overlayRef = viewChild<ElementRef<HTMLElement>>('overlayPanel');\n private overlayPlaceholder: Comment | null = null;\n private overlayOriginalParent: Node | null = null;\n private removeResizeListener: (() => void) | null = null;\n private removeScrollListener: (() => void) | null = null;\n private resizeObserver: ResizeObserver | null = null;\n private overlayLayoutFrame: number | null = null;\n private appliedInitialState = false;\n private readonly controller = createDatepickerController<TDate>({\n allowManualInput: true,\n autoCommitView: false,\n closeOnEscape: true,\n closeOnOutsideClick: true,\n closeOnSelect: true,\n locale: this.defaultLocale,\n ownerDocument: this.ownerDocument,\n restoreFocus: true,\n showOutsideDays: true,\n trapFocus: true,\n value: null,\n });\n private readonly unsubscribe = this.controller.subscribe((event) => {\n this.renderVersion.update((value) => value + 1);\n\n switch (event.type) {\n case 'activeChange':\n this.activeDateChange.emit(event.activeDate);\n break;\n case 'closed':\n this.overlayOpen.set(false);\n this.openChange.emit(false);\n this.closed.emit(event.reason);\n break;\n case 'monthChange':\n this.monthChange.emit(event.visibleMonth);\n break;\n case 'opened':\n this.overlayOpen.set(true);\n this.openChange.emit(true);\n this.queueOverlayFocusSync();\n break;\n case 'valueChange':\n this.valueChange.emit(event.value);\n break;\n case 'viewChange':\n this.viewChange.emit(event.view);\n break;\n case 'yearChange':\n this.yearChange.emit(event.year);\n break;\n }\n });\n\n public readonly adapter = input<TngDateAdapter<TDate> | undefined>(undefined);\n public readonly allowDeselect = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly allowManualInput = input<boolean, boolean | string>(true, {\n transform: booleanAttribute,\n });\n public readonly ariaDescribedBy = input<string | null>(null);\n public readonly ariaLabel = input<string | null>(null);\n public readonly ariaLabelledBy = input<string | null>(null);\n public readonly autoCommitView = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly closeOnEscape = input<boolean, boolean | string>(true, {\n transform: booleanAttribute,\n });\n public readonly closeOnOutsideClick = input<boolean, boolean | string>(true, {\n transform: booleanAttribute,\n });\n public readonly closeOnSelect = input<boolean, boolean | string>(true, {\n transform: booleanAttribute,\n });\n public readonly closeOthersOnOpen = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly defaultOpen = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly defaultValue = input<TngDateSelectionInput<TDate> | undefined>(undefined);\n public readonly direction = input<TngDatepickerDirection>('ltr');\n public readonly disableDate = input<((date: TDate) => boolean) | null>(null);\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly fullWidth = input<boolean, boolean | string>(true, {\n transform: booleanAttribute,\n });\n public readonly id = input<string | null>(null);\n public readonly inputAriaLabel = input<string>('Date input');\n public readonly invalid = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly locale = input<string>(this.defaultLocale);\n public readonly maxDate = input<TngDateInputValue<TDate> | undefined>(undefined);\n public readonly minDate = input<TngDateInputValue<TDate> | undefined>(undefined);\n public readonly open = input<boolean | undefined, OptionalBooleanInput>(undefined, {\n transform: normalizeOptionalBooleanInput,\n });\n public readonly overlaySize = input<number, number | string>(320, {\n transform: normalizeNumberInput,\n });\n public readonly placement = input<TngDatepickerPlacement>('auto');\n public readonly placeholder = input<string>('MM-DD-YYYY');\n public readonly readonly = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly restoreFocus = input<boolean, boolean | string>(true, {\n transform: booleanAttribute,\n });\n public readonly selectionMode = input<TngDatepickerSelectionMode>('single');\n public readonly showOutsideDays = input<boolean, boolean | string>(true, {\n transform: booleanAttribute,\n });\n public readonly today = input<TngDateInputValue<TDate> | undefined>(undefined);\n public readonly trapFocus = input<boolean, boolean | string>(true, {\n transform: booleanAttribute,\n });\n public readonly value = input<TngDateSelectionInput<TDate> | undefined>(undefined);\n public readonly weekStartsOn = input<TngWeekdayIndex, TngWeekdayIndex | number | string>(0, {\n transform: normalizeWeekdayInput,\n });\n public readonly yearPageSize = input<number, number | string>(24, {\n transform: normalizeNumberInput,\n });\n\n public readonly activeDateChange = output<TDate>();\n public readonly closed = output<TngDatepickerCloseReason>();\n public readonly monthChange = output<TDate>();\n public readonly openChange = output<boolean>();\n public readonly valueChange = output<TngDateValue<TDate>>();\n public readonly viewChange = output<TngCalendarView>();\n public readonly yearChange = output<number>();\n\n protected readonly outputs = computed(() => {\n this.renderVersion();\n return this.controller.getOutputs();\n });\n\n protected readonly invalidState = computed(\n () => this.invalid() || this.outputs().validationError !== null,\n );\n protected readonly currentOverlayPlacement = computed(() => this.resolvedOverlayPlacement());\n\n protected readonly materialPeriodLabel = computed(() => {\n const outputs = this.outputs();\n if (outputs.view === 'year') {\n const startYear = outputs.yearOptions[0]?.year;\n const endYear = outputs.yearOptions[outputs.yearOptions.length - 1]?.year;\n if (startYear !== undefined && endYear !== undefined) {\n return `${startYear} - ${endYear}`;\n }\n }\n\n if (outputs.view === 'month') {\n return this.controller.formatDate(outputs.visibleMonth, 'year-label');\n }\n\n return outputs.labelMonthYear;\n });\n\n @HostBinding('attr.data-full-width')\n protected get dataFullWidth(): '' | null {\n return this.fullWidth() ? '' : null;\n }\n\n public constructor() {\n effect(() => {\n const trigger = this.triggerRef()?.nativeElement ?? null;\n this.controller.registerTrigger(trigger);\n });\n\n effect(() => {\n const overlay = this.overlayRef()?.nativeElement ?? null;\n this.controller.registerOverlay(overlay);\n this.initializeOverlayPortal(overlay);\n this.renderVersion.update((value) => value + 1);\n });\n\n effect(() => {\n const overlay = this.overlayRef()?.nativeElement;\n if (overlay === undefined) {\n return;\n }\n\n if (this.overlayOpen()) {\n this.mountOverlayToBodyAndPosition();\n return;\n }\n\n this.restoreOverlayToPlaceholder();\n });\n\n effect(() => {\n this.placement();\n this.direction();\n this.overlaySize();\n\n if (!this.overlayOpen()) {\n return;\n }\n\n this.scheduleOverlayLayoutSync();\n });\n\n effect(() => {\n this.controller.setConfig({\n adapter: this.adapter(),\n allowDeselect: this.allowDeselect(),\n allowManualInput: this.allowManualInput(),\n ariaDescribedBy: this.ariaDescribedBy(),\n ariaLabel: this.ariaLabel(),\n ariaLabelledBy: this.ariaLabelledBy(),\n autoCommitView: this.autoCommitView(),\n closeOnEscape: this.closeOnEscape(),\n closeOnOutsideClick: this.closeOnOutsideClick(),\n closeOnSelect: this.closeOnSelect(),\n closeOthersOnOpen: this.closeOthersOnOpen(),\n direction: this.direction(),\n disableDate: this.disableDate() ?? undefined,\n disabled: this.disabled(),\n id: this.id() ?? undefined,\n locale: this.locale(),\n maxDate: this.maxDate(),\n minDate: this.minDate(),\n overlaySize: this.overlaySize(),\n ownerDocument: this.ownerDocument,\n restoreFocus: this.restoreFocus(),\n selectionMode: this.selectionMode(),\n showOutsideDays: this.showOutsideDays(),\n today: this.today(),\n trapFocus: this.trapFocus(),\n weekStartsOn: this.weekStartsOn(),\n yearPageSize: this.yearPageSize(),\n });\n\n const controlledValue = this.value();\n if (controlledValue !== undefined) {\n this.controller.setValue(controlledValue);\n }\n\n const controlledOpen = this.open();\n const currentOpen = this.controller.getOutputs().open;\n if (controlledOpen !== undefined) {\n this.controller.setOpen(controlledOpen);\n }\n\n if (!this.appliedInitialState) {\n if (controlledValue === undefined && this.defaultValue() !== undefined) {\n this.controller.setValue(this.defaultValue() as TngDateSelectionInput<TDate>);\n }\n\n if (controlledOpen === undefined && this.defaultOpen()) {\n this.controller.setOpen(true);\n }\n\n this.appliedInitialState = true;\n }\n });\n }\n\n public ngOnDestroy(): void {\n if (this.overlayLayoutFrame !== null && this.ownerWindow !== null) {\n this.ownerWindow.cancelAnimationFrame(this.overlayLayoutFrame);\n this.overlayLayoutFrame = null;\n }\n\n this.teardownOverlayRepositionListeners();\n this.restoreOverlayToPlaceholder(true);\n this.unsubscribe();\n this.controller.destroy();\n }\n\n public clear(): void {\n this.controller.clear();\n this.controller.showDaysPanel();\n this.queueOverlayFocusSync();\n }\n\n public close(reason: TngDatepickerCloseReason = 'programmatic'): void {\n this.controller.close(reason);\n }\n\n public openDatepicker(): void {\n this.controller.open();\n }\n\n public showDaysPanel(): void {\n this.controller.showDaysPanel();\n this.queueOverlayFocusSync();\n }\n\n public showMonthsPanel(): void {\n this.controller.showMonthsPanel();\n this.queueOverlayFocusSync();\n }\n\n public showYearsPanel(): void {\n this.controller.showYearsPanel();\n this.queueOverlayFocusSync();\n }\n\n public toggleOpen(): void {\n this.controller.toggleOpen();\n }\n\n protected resolveInputId(): string {\n const id = this.id()?.trim();\n if (id !== undefined && id !== '') {\n return `${id}-input`;\n }\n\n return this.fallbackInputId;\n }\n\n protected isDayView(): boolean {\n return this.outputs().view === 'day';\n }\n\n protected isMonthView(): boolean {\n return this.outputs().view === 'month';\n }\n\n protected isYearView(): boolean {\n return this.outputs().view === 'year';\n }\n\n protected onDayCellClick(cell: Readonly<TngDateCell<TDate>>): void {\n if (cell.disabled || cell.hidden) {\n return;\n }\n\n this.controller.handleCellClick(cell.date);\n }\n\n protected onInputBlur(): void {\n if (!this.allowManualInput()) {\n return;\n }\n\n this.controller.commitInputText();\n this.renderVersion.update((value) => value + 1);\n }\n\n protected onInputChange(event: Event): void {\n if (!this.allowManualInput()) {\n return;\n }\n\n const target = event.target;\n if (!(target instanceof HTMLInputElement)) {\n return;\n }\n\n this.controller.setInputText(target.value);\n this.renderVersion.update((value) => value + 1);\n }\n\n protected onInputKeydown(event: KeyboardEvent): void {\n if (event.key === 'Enter' && this.allowManualInput()) {\n event.preventDefault();\n this.controller.commitInputText();\n this.renderVersion.update((value) => value + 1);\n return;\n }\n\n if (event.key === 'ArrowDown' && !this.outputs().open) {\n event.preventDefault();\n this.controller.open();\n }\n }\n\n protected onGridKeydown(event: KeyboardEvent): void {\n this.controller.handleGridKeyDown(event);\n if (this.shouldSyncOverlayFocusAfterPickerKey(event.key)) {\n this.queueOverlayFocusSync();\n }\n }\n\n protected onMonthKeydown(event: KeyboardEvent): void {\n this.controller.handleMonthGridKeyDown(event);\n if (this.isPickerActivationKey(event.key)) {\n this.controller.showDaysPanel();\n }\n if (this.shouldSyncOverlayFocusAfterPickerKey(event.key)) {\n this.queueOverlayFocusSync();\n }\n }\n\n protected onMonthOptionClick(option: Readonly<TngMonthOption<TDate>>): void {\n if (option.disabled) {\n return;\n }\n\n this.controller.selectMonth(option.index);\n this.controller.showDaysPanel();\n this.queueOverlayFocusSync();\n }\n\n protected onOverlayKeydown(event: KeyboardEvent): void {\n this.controller.handleOverlayKeyDown(event);\n }\n\n protected onTriggerClick(): void {\n if (this.disabled()) {\n return;\n }\n\n this.controller.toggleOpen();\n }\n\n protected onTriggerKeydown(event: KeyboardEvent): void {\n this.controller.handleTriggerKeyDown(event);\n }\n\n protected onPeriodButtonClick(): void {\n if (this.isYearView()) {\n return;\n }\n\n this.controller.showYearsPanel();\n this.queueOverlayFocusSync();\n }\n\n protected onYearKeydown(event: KeyboardEvent): void {\n this.controller.handleYearGridKeyDown(event);\n if (this.isPickerActivationKey(event.key)) {\n this.controller.showMonthsPanel();\n }\n if (this.shouldSyncOverlayFocusAfterPickerKey(event.key)) {\n this.queueOverlayFocusSync();\n }\n }\n\n protected onYearOptionClick(option: Readonly<TngYearOption<TDate>>): void {\n if (option.disabled) {\n return;\n }\n\n this.controller.selectYear(option.year);\n this.controller.showMonthsPanel();\n this.queueOverlayFocusSync();\n }\n\n protected pageBackward(): void {\n if (this.isDayView()) {\n this.controller.prevMonth();\n this.queueOverlayFocusSync();\n return;\n }\n\n if (this.isMonthView() || this.isYearView()) {\n this.controller.prevYear();\n this.queueOverlayFocusSync();\n return;\n }\n }\n\n protected pageForward(): void {\n if (this.isDayView()) {\n this.controller.nextMonth();\n this.queueOverlayFocusSync();\n return;\n }\n\n if (this.isMonthView() || this.isYearView()) {\n this.controller.nextYear();\n this.queueOverlayFocusSync();\n return;\n }\n }\n\n private queueOverlayFocusSync(): void {\n this.scheduleOverlayLayoutSync();\n\n queueMicrotask(() => {\n const focusActiveTarget = (): void => {\n const outputs = this.outputs();\n if (!outputs.open || this.ownerDocument === null) {\n return;\n }\n\n const targetId = this.resolveCurrentFocusTargetId(outputs);\n if (targetId === null) {\n return;\n }\n\n const target = this.ownerDocument.getElementById(targetId);\n if (!isKeyboardEventTarget(target)) {\n return;\n }\n\n target.focus();\n };\n\n if (typeof requestAnimationFrame === 'function') {\n requestAnimationFrame(() => {\n focusActiveTarget();\n });\n return;\n }\n\n setTimeout(() => {\n focusActiveTarget();\n }, 0);\n });\n }\n\n private resolveCurrentFocusTargetId(outputs: TngDatepickerOutputs<TDate>): string | null {\n if (outputs.view === 'day') {\n return outputs.cells.find((cell) => cell.active)?.id ?? null;\n }\n\n if (outputs.view === 'month') {\n return outputs.monthOptions.find((option) => option.active)?.id ?? null;\n }\n\n if (outputs.view === 'year') {\n return outputs.yearOptions.find((option) => option.active)?.id ?? null;\n }\n\n return null;\n }\n\n private shouldSyncOverlayFocusAfterPickerKey(key: string): boolean {\n return (\n key === 'ArrowUp' ||\n key === 'ArrowDown' ||\n key === 'ArrowLeft' ||\n key === 'ArrowRight' ||\n key === 'Home' ||\n key === 'End' ||\n key === 'PageUp' ||\n key === 'PageDown' ||\n key === 'Enter' ||\n key === ' ' ||\n key === 'Escape'\n );\n }\n\n private isPickerActivationKey(key: string): boolean {\n return key === 'Enter' || key === ' ';\n }\n\n private scheduleOverlayLayoutSync(): void {\n if (!this.overlayOpen() || this.ownerWindow === null) {\n return;\n }\n\n if (this.overlayLayoutFrame !== null) {\n this.ownerWindow.cancelAnimationFrame(this.overlayLayoutFrame);\n }\n\n this.overlayLayoutFrame = this.ownerWindow.requestAnimationFrame(() => {\n this.overlayLayoutFrame = null;\n this.positionOverlay();\n });\n }\n\n private initializeOverlayPortal(overlay: HTMLElement | null): void {\n if (overlay === null || this.overlayPlaceholder !== null) {\n return;\n }\n\n const placeholderDocument = this.ownerDocument ?? document;\n this.overlayPlaceholder = placeholderDocument.createComment('tng-datepicker-overlay-anchor');\n this.overlayOriginalParent = overlay.parentNode;\n this.overlayOriginalParent?.insertBefore(this.overlayPlaceholder, overlay);\n }\n\n private positionOverlay(): void {\n const overlay = this.overlayRef()?.nativeElement;\n const anchor = this.anchorRef()?.nativeElement;\n if (overlay === undefined || anchor === undefined || this.ownerWindow === null) {\n return;\n }\n\n const anchorRect = rectFromClientRect(anchor.getBoundingClientRect());\n const viewport = viewportRect(this.ownerWindow);\n const width = Math.max(\n 0,\n Math.min(anchorRect.width, viewport.width - OVERLAY_VIEWPORT_MARGIN * 2),\n );\n\n overlay.style.width = `${width}px`;\n overlay.style.maxWidth = `${Math.max(0, viewport.width - OVERLAY_VIEWPORT_MARGIN * 2)}px`;\n overlay.style.maxHeight = '';\n\n const overlayRect = rectFromClientRect(overlay.getBoundingClientRect());\n const result = computeOverlayPosition({\n anchorRect,\n collision: this.resolveOverlayCollision(this.placement()),\n direction: this.direction(),\n offset: this.resolveOverlayOffset(),\n overlayRect,\n placement: this.resolveOverlayPlacement(this.placement()),\n viewportRect: viewport,\n });\n\n overlay.style.left = `${result.x}px`;\n overlay.style.top = `${result.y}px`;\n\n const anchorBottom = anchorRect.top + anchorRect.height;\n const availableHeight =\n result.side === 'top'\n ? Math.max(0, Math.floor(anchorRect.top - OVERLAY_VIEWPORT_MARGIN - OVERLAY_OFFSET))\n : Math.max(\n 0,\n Math.floor(viewport.height - anchorBottom - OVERLAY_VIEWPORT_MARGIN - OVERLAY_OFFSET),\n );\n\n if (availableHeight > 0) {\n overlay.style.maxHeight = `${availableHeight}px`;\n }\n\n this.resolvedOverlayPlacement.set(result.side === 'top' ? 'top' : 'bottom');\n overlay.style.visibility = '';\n }\n\n private mountOverlayToBodyAndPosition(): void {\n const overlay = this.overlayRef()?.nativeElement;\n if (overlay === undefined || this.ownerDocument === null) {\n return;\n }\n\n this.initializeOverlayPortal(overlay);\n this.setupOverlayRepositionListeners();\n\n if (overlay.parentNode !== this.ownerDocument.body) {\n this.ownerDocument.body.appendChild(overlay);\n }\n\n overlay.style.position = 'fixed';\n overlay.style.left = '0px';\n overlay.style.top = '0px';\n overlay.style.visibility = 'hidden';\n overlay.style.zIndex = '1000';\n\n queueMicrotask(() => {\n if (!this.overlayOpen()) {\n return;\n }\n\n this.positionOverlay();\n });\n }\n\n private restoreOverlayToPlaceholder(force = false): void {\n const overlay = this.overlayRef()?.nativeElement;\n if (overlay === undefined) {\n return;\n }\n\n if (!force && overlay.parentNode !== this.ownerDocument?.body) {\n return;\n }\n\n const placeholder = this.overlayPlaceholder;\n if (placeholder?.parentNode !== null && placeholder !== null) {\n placeholder.parentNode.insertBefore(overlay, placeholder);\n } else if (this.overlayOriginalParent !== null) {\n this.overlayOriginalParent.appendChild(overlay);\n }\n\n this.teardownOverlayRepositionListeners();\n this.resolvedOverlayPlacement.set(this.placement() === 'top' ? 'top' : 'bottom');\n overlay.style.left = '';\n overlay.style.maxHeight = '';\n overlay.style.maxWidth = '';\n overlay.style.position = '';\n overlay.style.top = '';\n overlay.style.visibility = '';\n overlay.style.width = '';\n overlay.style.zIndex = '';\n }\n\n private setupOverlayRepositionListeners(): void {\n if (this.ownerWindow === null || this.removeResizeListener !== null || this.removeScrollListener !== null) {\n return;\n }\n\n const schedule = (): void => {\n this.scheduleOverlayLayoutSync();\n };\n\n this.ownerWindow.addEventListener('resize', schedule);\n this.ownerWindow.addEventListener('scroll', schedule, true);\n this.removeResizeListener = () => this.ownerWindow?.removeEventListener('resize', schedule);\n this.removeScrollListener = () => this.ownerWindow?.removeEventListener('scroll', schedule, true);\n\n if ('ResizeObserver' in this.ownerWindow) {\n this.resizeObserver = new this.ownerWindow.ResizeObserver(() => {\n this.scheduleOverlayLayoutSync();\n });\n\n const anchor = this.anchorRef()?.nativeElement;\n if (anchor !== undefined) {\n this.resizeObserver.observe(anchor);\n }\n\n const overlay = this.overlayRef()?.nativeElement;\n if (overlay !== undefined) {\n this.resizeObserver.observe(overlay);\n }\n }\n }\n\n private teardownOverlayRepositionListeners(): void {\n this.removeResizeListener?.();\n this.removeScrollListener?.();\n this.removeResizeListener = null;\n this.removeScrollListener = null;\n this.resizeObserver?.disconnect();\n this.resizeObserver = null;\n }\n\n private resolveOverlayCollision(\n placement: TngDatepickerPlacement,\n ): TngOverlayCollisionOptions {\n return {\n flip: placement === 'auto',\n padding: OVERLAY_VIEWPORT_MARGIN,\n shift: true,\n };\n }\n\n private resolveOverlayOffset(): TngOverlayOffset {\n return { side: OVERLAY_OFFSET };\n }\n\n private resolveOverlayPlacement(placement: TngDatepickerPlacement): TngOverlayPlacement {\n return {\n align: 'start',\n side: placement === 'top' ? 'top' : 'bottom',\n };\n }\n}\n"]}
@@ -0,0 +1,15 @@
1
+ export type TngFormFieldAppearance = 'outline' | 'solid' | 'ghost';
2
+ export type TngFormFieldSize = 'sm' | 'md' | 'lg';
3
+ export type TngFormFieldTone = 'neutral' | 'primary' | 'success' | 'danger';
4
+ export declare class TngFormFieldComponent {
5
+ readonly appearance: import("@angular/core").InputSignal<TngFormFieldAppearance>;
6
+ readonly size: import("@angular/core").InputSignal<TngFormFieldSize>;
7
+ readonly tone: import("@angular/core").InputSignal<TngFormFieldTone>;
8
+ readonly fullWidth: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
9
+ protected readonly dataSlot: "form-field-wrapper";
10
+ protected get dataAppearance(): TngFormFieldAppearance;
11
+ protected get dataSize(): TngFormFieldSize;
12
+ protected get dataTone(): TngFormFieldTone;
13
+ protected get dataFullWidth(): '' | null;
14
+ }
15
+ //# sourceMappingURL=tng-form-field.component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-form-field.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/form-field/tng-form-field.component.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,sBAAsB,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AACnE,MAAM,MAAM,gBAAgB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAClD,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE5E,qBAMa,qBAAqB;IAChC,SAAgB,UAAU,8DAA4C;IACtE,SAAgB,IAAI,wDAAiC;IACrD,SAAgB,IAAI,wDAAsC;IAE1D,SAAgB,SAAS,8EAEtB;IAGH,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,oBAAoB,CAAU;IAG5D,SAAS,KAAK,cAAc,IAAI,sBAAsB,CAErD;IAGD,SAAS,KAAK,QAAQ,IAAI,gBAAgB,CAEzC;IAGD,SAAS,KAAK,QAAQ,IAAI,gBAAgB,CAEzC;IAGD,SAAS,KAAK,aAAa,IAAI,EAAE,GAAG,IAAI,CAEvC;CACF"}
@@ -0,0 +1,50 @@
1
+ import { __decorate } from "tslib";
2
+ import { Component, HostBinding, input } from '@angular/core';
3
+ import { booleanAttribute } from '@angular/core';
4
+ import { TngInputGroup, TngPrefix, TngSuffix } from '@tailng-ui/primitives';
5
+ let TngFormFieldComponent = class TngFormFieldComponent {
6
+ appearance = input('outline');
7
+ size = input('md');
8
+ tone = input('neutral');
9
+ fullWidth = input(true, {
10
+ transform: booleanAttribute,
11
+ });
12
+ dataSlot = 'form-field-wrapper';
13
+ get dataAppearance() {
14
+ return this.appearance();
15
+ }
16
+ get dataSize() {
17
+ return this.size();
18
+ }
19
+ get dataTone() {
20
+ return this.tone();
21
+ }
22
+ get dataFullWidth() {
23
+ return this.fullWidth() ? '' : null;
24
+ }
25
+ };
26
+ __decorate([
27
+ HostBinding('attr.data-slot')
28
+ ], TngFormFieldComponent.prototype, "dataSlot", void 0);
29
+ __decorate([
30
+ HostBinding('attr.data-appearance')
31
+ ], TngFormFieldComponent.prototype, "dataAppearance", null);
32
+ __decorate([
33
+ HostBinding('attr.data-size')
34
+ ], TngFormFieldComponent.prototype, "dataSize", null);
35
+ __decorate([
36
+ HostBinding('attr.data-tone')
37
+ ], TngFormFieldComponent.prototype, "dataTone", null);
38
+ __decorate([
39
+ HostBinding('attr.data-full-width')
40
+ ], TngFormFieldComponent.prototype, "dataFullWidth", null);
41
+ TngFormFieldComponent = __decorate([
42
+ Component({
43
+ selector: 'tng-form-field',
44
+ imports: [TngInputGroup, TngPrefix, TngSuffix],
45
+ templateUrl: './tng-form-field.component.html',
46
+ styleUrl: './tng-form-field.component.css',
47
+ })
48
+ ], TngFormFieldComponent);
49
+ export { TngFormFieldComponent };
50
+ //# sourceMappingURL=tng-form-field.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tng-form-field.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/form-field/tng-form-field.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAYrE,IAAM,qBAAqB,GAA3B,MAAM,qBAAqB;IAChB,UAAU,GAAG,KAAK,CAAyB,SAAS,CAAC,CAAC;IACtD,IAAI,GAAG,KAAK,CAAmB,IAAI,CAAC,CAAC;IACrC,IAAI,GAAG,KAAK,CAAmB,SAAS,CAAC,CAAC;IAE1C,SAAS,GAAG,KAAK,CAA4B,IAAI,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IAGgB,QAAQ,GAAG,oBAA6B,CAAC;IAG5D,IAAc,cAAc;QAC1B,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;IAC3B,CAAC;IAGD,IAAc,QAAQ;QACpB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;IAGD,IAAc,QAAQ;QACpB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;IAGD,IAAc,aAAa;QACzB,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACtC,CAAC;CACF,CAAA;AArBoB;IADlB,WAAW,CAAC,gBAAgB,CAAC;uDAC8B;AAG5D;IADC,WAAW,CAAC,sBAAsB,CAAC;2DAGnC;AAGD;IADC,WAAW,CAAC,gBAAgB,CAAC;qDAG7B;AAGD;IADC,WAAW,CAAC,gBAAgB,CAAC;qDAG7B;AAGD;IADC,WAAW,CAAC,sBAAsB,CAAC;0DAGnC;AA9BU,qBAAqB;IANjC,SAAS,CAAC;QACT,QAAQ,EAAE,gBAAgB;QAC1B,OAAO,EAAE,CAAC,aAAa,EAAE,SAAS,EAAE,SAAS,CAAC;QAC9C,WAAW,EAAE,iCAAiC;QAC9C,QAAQ,EAAE,gCAAgC;KAC3C,CAAC;GACW,qBAAqB,CA+BjC","sourcesContent":["import { Component, HostBinding, input } from '@angular/core';\nimport { booleanAttribute } from '@angular/core';\n\nimport { TngInputGroup, TngPrefix, TngSuffix } from '@tailng-ui/primitives';\n\nexport type TngFormFieldAppearance = 'outline' | 'solid' | 'ghost';\nexport type TngFormFieldSize = 'sm' | 'md' | 'lg';\nexport type TngFormFieldTone = 'neutral' | 'primary' | 'success' | 'danger';\n\n@Component({\n selector: 'tng-form-field',\n imports: [TngInputGroup, TngPrefix, TngSuffix],\n templateUrl: './tng-form-field.component.html',\n styleUrl: './tng-form-field.component.css',\n})\nexport class TngFormFieldComponent {\n public readonly appearance = input<TngFormFieldAppearance>('outline');\n public readonly size = input<TngFormFieldSize>('md');\n public readonly tone = input<TngFormFieldTone>('neutral');\n\n public readonly fullWidth = input<boolean, boolean | string>(true, {\n transform: booleanAttribute,\n });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'form-field-wrapper' as const;\n\n @HostBinding('attr.data-appearance')\n protected get dataAppearance(): TngFormFieldAppearance {\n return this.appearance();\n }\n\n @HostBinding('attr.data-size')\n protected get dataSize(): TngFormFieldSize {\n return this.size();\n }\n\n @HostBinding('attr.data-tone')\n protected get dataTone(): TngFormFieldTone {\n return this.tone();\n }\n\n @HostBinding('attr.data-full-width')\n protected get dataFullWidth(): '' | null {\n return this.fullWidth() ? '' : null;\n }\n}\n"]}
@@ -10,6 +10,10 @@ export * from './chips/tng-chips.component';
10
10
  export { TngChipsComponent } from './chips/tng-chips.component';
11
11
  export * from './combobox/tng-combobox.component';
12
12
  export { TngComboboxComponent } from './combobox/tng-combobox.component';
13
+ export * from './datepicker/tng-datepicker.component';
14
+ export { TngDatepickerComponent } from './datepicker/tng-datepicker.component';
15
+ export * from './form-field/tng-form-field.component';
16
+ export { TngFormFieldComponent } from './form-field/tng-form-field.component';
13
17
  export * from './input/tng-input.component';
14
18
  export { TngInputComponent } from './input/tng-input.component';
15
19
  export * from './input-otp';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../libs/tailng-ui/components/src/lib/form/index.ts"],"names":[],"mappings":"AAAA,cAAc,2CAA2C,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,cAAc,6CAA6C,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAC;AACvF,cAAc,mDAAmD,CAAC;AAClE,OAAO,EAAE,6BAA6B,EAAC,MAAM,mDAAmD,CAAC;AACjG,cAAc,mCAAmC,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAC,MAAM,mCAAmC,CAAC;AACxE,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAC,MAAM,6BAA6B,CAAC;AAC/D,cAAc,mCAAmC,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAC,MAAM,mCAAmC,CAAC;AACxE,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAC,MAAM,6BAA6B,CAAC;AAC/D,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAC,MAAM,6BAA6B,CAAC;AAC/D,cAAc,uDAAuD,CAAC;AACtE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uDAAuD,CAAC;AACtG,cAAc,yCAAyC,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAC,MAAM,6BAA6B,CAAC;AAC/D,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAC,MAAM,+BAA+B,CAAC;AAClE,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAC,MAAM,+BAA+B,CAAC;AAClE,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAC,MAAM,+BAA+B,CAAC;AAClE,cAAc,mCAAmC,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAC,MAAM,mCAAmC,CAAC;AACxE,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAC,MAAM,+BAA+B,CAAC;AAClE,cAAc,2CAA2C,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAC,MAAM,2CAA2C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../libs/tailng-ui/components/src/lib/form/index.ts"],"names":[],"mappings":"AAAA,cAAc,2CAA2C,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,cAAc,6CAA6C,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAC;AACvF,cAAc,mDAAmD,CAAC;AAClE,OAAO,EAAE,6BAA6B,EAAE,MAAM,mDAAmD,CAAC;AAClG,cAAc,mCAAmC,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,cAAc,mCAAmC,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,cAAc,uCAAuC,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,cAAc,uCAAuC,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,cAAc,uDAAuD,CAAC;AACtE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uDAAuD,CAAC;AACtG,cAAc,yCAAyC,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,cAAc,mCAAmC,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,cAAc,2CAA2C,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC"}
@@ -10,6 +10,10 @@ export * from './chips/tng-chips.component';
10
10
  export { TngChipsComponent } from './chips/tng-chips.component';
11
11
  export * from './combobox/tng-combobox.component';
12
12
  export { TngComboboxComponent } from './combobox/tng-combobox.component';
13
+ export * from './datepicker/tng-datepicker.component';
14
+ export { TngDatepickerComponent } from './datepicker/tng-datepicker.component';
15
+ export * from './form-field/tng-form-field.component';
16
+ export { TngFormFieldComponent } from './form-field/tng-form-field.component';
13
17
  export * from './input/tng-input.component';
14
18
  export { TngInputComponent } from './input/tng-input.component';
15
19
  export * from './input-otp';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/tailng-ui/components/src/lib/form/index.ts"],"names":[],"mappings":"AAAA,cAAc,2CAA2C,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,cAAc,6CAA6C,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAC;AACvF,cAAc,mDAAmD,CAAC;AAClE,OAAO,EAAE,6BAA6B,EAAC,MAAM,mDAAmD,CAAC;AACjG,cAAc,mCAAmC,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAC,MAAM,mCAAmC,CAAC;AACxE,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAC,MAAM,6BAA6B,CAAC;AAC/D,cAAc,mCAAmC,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAC,MAAM,mCAAmC,CAAC;AACxE,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAC,MAAM,6BAA6B,CAAC;AAC/D,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAC,MAAM,6BAA6B,CAAC;AAC/D,cAAc,uDAAuD,CAAC;AACtE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uDAAuD,CAAC;AACtG,cAAc,yCAAyC,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAC,MAAM,6BAA6B,CAAC;AAC/D,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAC,MAAM,+BAA+B,CAAC;AAClE,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAC,MAAM,+BAA+B,CAAC;AAClE,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAC,MAAM,+BAA+B,CAAC;AAClE,cAAc,mCAAmC,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAC,MAAM,mCAAmC,CAAC;AACxE,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAC,MAAM,+BAA+B,CAAC;AAClE,cAAc,2CAA2C,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAC,MAAM,2CAA2C,CAAC","sourcesContent":["export * from './autocomplete/tng-autocomplete.component';\nexport { TngAutocompleteComponent } from './autocomplete/tng-autocomplete.component';\nexport * from './button-toggle/tng-button-toggle.component';\nexport { TngButtonToggleComponent } from './button-toggle/tng-button-toggle.component';\nexport * from './button-toggle/tng-button-toggle-group.component';\nexport { TngButtonToggleGroupComponent} from './button-toggle/tng-button-toggle-group.component';\nexport * from './checkbox/tng-checkbox.component';\nexport { TngCheckboxComponent} from './checkbox/tng-checkbox.component';\nexport * from './chips/tng-chips.component';\nexport { TngChipsComponent} from './chips/tng-chips.component';\nexport * from './combobox/tng-combobox.component';\nexport { TngComboboxComponent} from './combobox/tng-combobox.component';\nexport * from './input/tng-input.component';\nexport { TngInputComponent} from './input/tng-input.component';\nexport * from './input-otp';\nexport { TngInputOtpComponent } from './input-otp';\nexport * from './label/tng-label.component';\nexport { TngLabelComponent} from './label/tng-label.component';\nexport * from './multi-autocomplete/tng-multi-autocomplete.component';\nexport { TngMultiAutocompleteComponent } from './multi-autocomplete/tng-multi-autocomplete.component';\nexport * from './multiselect/tng-multiselect.component';\nexport { TngMultiSelectComponent } from './multiselect/tng-multiselect.component';\nexport * from './radio/tng-radio.component';\nexport { TngRadioComponent} from './radio/tng-radio.component';\nexport * from './select/tng-select.component';\nexport { TngSelectComponent} from './select/tng-select.component';\nexport * from './slider/tng-slider.component';\nexport { TngSliderComponent} from './slider/tng-slider.component';\nexport * from './switch/tng-switch.component';\nexport { TngSwitchComponent} from './switch/tng-switch.component';\nexport * from './textarea/tng-textarea.component';\nexport { TngTextareaComponent} from './textarea/tng-textarea.component';\nexport * from './toggle/tng-toggle.component';\nexport { TngToggleComponent} from './toggle/tng-toggle.component';\nexport * from './toggle-group/tng-toggle-group.component';\nexport { TngToggleGroupComponent} from './toggle-group/tng-toggle-group.component';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../libs/tailng-ui/components/src/lib/form/index.ts"],"names":[],"mappings":"AAAA,cAAc,2CAA2C,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,cAAc,6CAA6C,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAC;AACvF,cAAc,mDAAmD,CAAC;AAClE,OAAO,EAAE,6BAA6B,EAAE,MAAM,mDAAmD,CAAC;AAClG,cAAc,mCAAmC,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,cAAc,mCAAmC,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,cAAc,uCAAuC,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,cAAc,uCAAuC,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,cAAc,uDAAuD,CAAC;AACtE,OAAO,EAAE,6BAA6B,EAAE,MAAM,uDAAuD,CAAC;AACtG,cAAc,yCAAyC,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,yCAAyC,CAAC;AAClF,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,cAAc,mCAAmC,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,cAAc,2CAA2C,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC","sourcesContent":["export * from './autocomplete/tng-autocomplete.component';\nexport { TngAutocompleteComponent } from './autocomplete/tng-autocomplete.component';\nexport * from './button-toggle/tng-button-toggle.component';\nexport { TngButtonToggleComponent } from './button-toggle/tng-button-toggle.component';\nexport * from './button-toggle/tng-button-toggle-group.component';\nexport { TngButtonToggleGroupComponent } from './button-toggle/tng-button-toggle-group.component';\nexport * from './checkbox/tng-checkbox.component';\nexport { TngCheckboxComponent } from './checkbox/tng-checkbox.component';\nexport * from './chips/tng-chips.component';\nexport { TngChipsComponent } from './chips/tng-chips.component';\nexport * from './combobox/tng-combobox.component';\nexport { TngComboboxComponent } from './combobox/tng-combobox.component';\nexport * from './datepicker/tng-datepicker.component';\nexport { TngDatepickerComponent } from './datepicker/tng-datepicker.component';\nexport * from './form-field/tng-form-field.component';\nexport { TngFormFieldComponent } from './form-field/tng-form-field.component';\nexport * from './input/tng-input.component';\nexport { TngInputComponent } from './input/tng-input.component';\nexport * from './input-otp';\nexport { TngInputOtpComponent } from './input-otp';\nexport * from './label/tng-label.component';\nexport { TngLabelComponent } from './label/tng-label.component';\nexport * from './multi-autocomplete/tng-multi-autocomplete.component';\nexport { TngMultiAutocompleteComponent } from './multi-autocomplete/tng-multi-autocomplete.component';\nexport * from './multiselect/tng-multiselect.component';\nexport { TngMultiSelectComponent } from './multiselect/tng-multiselect.component';\nexport * from './radio/tng-radio.component';\nexport { TngRadioComponent } from './radio/tng-radio.component';\nexport * from './select/tng-select.component';\nexport { TngSelectComponent } from './select/tng-select.component';\nexport * from './slider/tng-slider.component';\nexport { TngSliderComponent } from './slider/tng-slider.component';\nexport * from './switch/tng-switch.component';\nexport { TngSwitchComponent } from './switch/tng-switch.component';\nexport * from './textarea/tng-textarea.component';\nexport { TngTextareaComponent } from './textarea/tng-textarea.component';\nexport * from './toggle/tng-toggle.component';\nexport { TngToggleComponent } from './toggle/tng-toggle.component';\nexport * from './toggle-group/tng-toggle-group.component';\nexport { TngToggleGroupComponent } from './toggle-group/tng-toggle-group.component';\n"]}
@@ -1,16 +1,49 @@
1
- export type TngInputAppearance = 'outline' | 'solid' | 'ghost';
2
- export type TngInputSize = 'sm' | 'md' | 'lg';
3
- export type TngInputTone = 'neutral' | 'primary' | 'success' | 'danger';
4
- export declare class TngInputComponent {
5
- readonly appearance: import("@angular/core").InputSignal<TngInputAppearance>;
6
- readonly size: import("@angular/core").InputSignal<TngInputSize>;
7
- readonly tone: import("@angular/core").InputSignal<TngInputTone>;
8
- /** Default true so forms look consistent out-of-the-box */
1
+ import { ControlValueAccessor } from '@angular/forms';
2
+ import { type TngInputType } from '@tailng-ui/primitives';
3
+ import { type TngFormFieldAppearance, type TngFormFieldSize, type TngFormFieldTone } from '../form-field/tng-form-field.component';
4
+ type NullableBooleanInput = boolean | null | string | undefined;
5
+ export declare function readTngInputEventValue(event: unknown): string | null;
6
+ export declare class TngInputComponent implements ControlValueAccessor {
7
+ readonly appearance: import("@angular/core").InputSignal<TngFormFieldAppearance>;
8
+ readonly size: import("@angular/core").InputSignal<TngFormFieldSize>;
9
+ readonly tone: import("@angular/core").InputSignal<TngFormFieldTone>;
9
10
  readonly fullWidth: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
10
- protected readonly dataSlot: "input-wrapper";
11
- protected get dataAppearance(): TngInputAppearance;
12
- protected get dataSize(): TngInputSize;
13
- protected get dataTone(): TngInputTone;
11
+ readonly ariaDescribedBy: import("@angular/core").InputSignal<string | null>;
12
+ readonly ariaInvalid: import("@angular/core").InputSignalWithTransform<boolean | null, NullableBooleanInput>;
13
+ readonly ariaLabel: import("@angular/core").InputSignal<string | null>;
14
+ readonly ariaLabelledby: import("@angular/core").InputSignal<string | null>;
15
+ readonly ariaRequired: import("@angular/core").InputSignalWithTransform<boolean | null, NullableBooleanInput>;
16
+ readonly autocomplete: import("@angular/core").InputSignal<string | null>;
17
+ readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
18
+ readonly id: import("@angular/core").InputSignal<string | null>;
19
+ readonly name: import("@angular/core").InputSignal<string | null>;
20
+ readonly placeholder: import("@angular/core").InputSignal<string | null>;
21
+ readonly readonly: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
22
+ readonly required: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
23
+ readonly type: import("@angular/core").InputSignal<TngInputType>;
24
+ readonly value: import("@angular/core").InputSignal<string | null>;
25
+ readonly valueChange: import("@angular/core").OutputEmitterRef<string>;
26
+ readonly inputEvent: import("@angular/core").OutputEmitterRef<Event>;
27
+ readonly blurEvent: import("@angular/core").OutputEmitterRef<FocusEvent>;
28
+ private cvaValue;
29
+ private cvaDisabled;
30
+ private usingCva;
31
+ private onChange;
32
+ private onTouched;
33
+ protected readonly dataSlot: "input-component";
34
+ protected get dataAppearance(): TngFormFieldAppearance;
35
+ protected get dataSize(): TngFormFieldSize;
36
+ protected get dataTone(): TngFormFieldTone;
14
37
  protected get dataFullWidth(): '' | null;
38
+ protected get effectiveValue(): string;
39
+ protected get effectiveDisabled(): boolean;
40
+ writeValue(value: unknown): void;
41
+ registerOnChange(fn: (value: string) => void): void;
42
+ registerOnTouched(fn: () => void): void;
43
+ setDisabledState(isDisabled: boolean): void;
44
+ onInput(event: unknown): void;
45
+ onBlur(event: FocusEvent): void;
46
+ protected normalizeAttrValue(value: string | null | undefined): string | null;
15
47
  }
48
+ export {};
16
49
  //# sourceMappingURL=tng-input.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-input.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/input/tng-input.component.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAC/D,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC9C,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAExE,qBAMa,iBAAiB;IAC5B,SAAgB,UAAU,0DAAwC;IAClE,SAAgB,IAAI,oDAA6B;IACjD,SAAgB,IAAI,oDAAkC;IAEtD,2DAA2D;IAC3D,SAAgB,SAAS,8EAEtB;IAGH,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,eAAe,CAAU;IAGvD,SAAS,KAAK,cAAc,IAAI,kBAAkB,CAEjD;IAGD,SAAS,KAAK,QAAQ,IAAI,YAAY,CAErC;IAGD,SAAS,KAAK,QAAQ,IAAI,YAAY,CAErC;IAGD,SAAS,KAAK,aAAa,IAAI,EAAE,GAAG,IAAI,CAEvC;CACF"}
1
+ {"version":3,"file":"tng-input.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/input/tng-input.component.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,oBAAoB,EAAqB,MAAM,gBAAgB,CAAC;AAEzE,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,wCAAwC,CAAC;AAEhD,KAAK,oBAAoB,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;AAUhE,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAWpE;AAED,qBAaa,iBAAkB,YAAW,oBAAoB;IAC5D,SAAgB,UAAU,8DAA4C;IACtE,SAAgB,IAAI,wDAAiC;IACrD,SAAgB,IAAI,wDAAsC;IAC1D,SAAgB,SAAS,8EAEtB;IAEH,SAAgB,eAAe,qDAA8B;IAC7D,SAAgB,WAAW,yFAExB;IACH,SAAgB,SAAS,qDAA8B;IACvD,SAAgB,cAAc,qDAA8B;IAC5D,SAAgB,YAAY,yFAEzB;IACH,SAAgB,YAAY,qDAA8B;IAC1D,SAAgB,QAAQ,8EAErB;IACH,SAAgB,EAAE,qDAA8B;IAChD,SAAgB,IAAI,qDAA8B;IAClD,SAAgB,WAAW,qDAA8B;IACzD,SAAgB,QAAQ,8EAErB;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,IAAI,oDAA+B;IACnD,SAAgB,KAAK,qDAA8B;IAEnD,SAAgB,WAAW,mDAAoB;IAC/C,SAAgB,UAAU,kDAAqC;IAC/D,SAAgB,SAAS,uDAAyC;IAElE,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,SAAS,CAAwB;IAGzC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,iBAAiB,CAAU;IAGzD,SAAS,KAAK,cAAc,IAAI,sBAAsB,CAErD;IAGD,SAAS,KAAK,QAAQ,IAAI,gBAAgB,CAEzC;IAGD,SAAS,KAAK,QAAQ,IAAI,gBAAgB,CAEzC;IAGD,SAAS,KAAK,aAAa,IAAI,EAAE,GAAG,IAAI,CAEvC;IAED,SAAS,KAAK,cAAc,IAAI,MAAM,CAGrC;IAED,SAAS,KAAK,iBAAiB,IAAI,OAAO,CAEzC;IAEM,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAKhC,gBAAgB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAInD,iBAAiB,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAIvC,gBAAgB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAI3C,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAiB7B,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAKtC,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI;CAG9E"}
@@ -1,16 +1,65 @@
1
1
  import { __decorate } from "tslib";
2
- import { Component, HostBinding, input } from '@angular/core';
2
+ import { Component, forwardRef, HostBinding, input, output, } from '@angular/core';
3
3
  import { booleanAttribute } from '@angular/core';
4
- import { TngInputGroup, TngInputLeading, TngInputTrailing } from '@tailng-ui/primitives';
4
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
5
+ import { coerceTngInputNullableBoolean, TngInput, } from '@tailng-ui/primitives';
6
+ import { TngFormFieldComponent, } from '../form-field/tng-form-field.component';
7
+ function normalizeStringValue(value) {
8
+ if (value === undefined || value === null) {
9
+ return null;
10
+ }
11
+ return value;
12
+ }
13
+ export function readTngInputEventValue(event) {
14
+ if (!(event instanceof Event)) {
15
+ return null;
16
+ }
17
+ const target = event.target;
18
+ if (!(target instanceof HTMLInputElement)) {
19
+ return null;
20
+ }
21
+ return target.value;
22
+ }
5
23
  let TngInputComponent = class TngInputComponent {
6
24
  appearance = input('outline');
7
25
  size = input('md');
8
26
  tone = input('neutral');
9
- /** Default true so forms look consistent out-of-the-box */
10
27
  fullWidth = input(true, {
11
28
  transform: booleanAttribute,
12
29
  });
13
- dataSlot = 'input-wrapper';
30
+ ariaDescribedBy = input(null);
31
+ ariaInvalid = input(null, {
32
+ transform: coerceTngInputNullableBoolean,
33
+ });
34
+ ariaLabel = input(null);
35
+ ariaLabelledby = input(null);
36
+ ariaRequired = input(null, {
37
+ transform: coerceTngInputNullableBoolean,
38
+ });
39
+ autocomplete = input(null);
40
+ disabled = input(false, {
41
+ transform: booleanAttribute,
42
+ });
43
+ id = input(null);
44
+ name = input(null);
45
+ placeholder = input(null);
46
+ readonly = input(false, {
47
+ transform: booleanAttribute,
48
+ });
49
+ required = input(false, {
50
+ transform: booleanAttribute,
51
+ });
52
+ type = input('text');
53
+ value = input(null);
54
+ valueChange = output();
55
+ inputEvent = output({ alias: 'input' });
56
+ blurEvent = output({ alias: 'blur' });
57
+ cvaValue = null;
58
+ cvaDisabled = false;
59
+ usingCva = false;
60
+ onChange = () => { };
61
+ onTouched = () => { };
62
+ dataSlot = 'input-component';
14
63
  get dataAppearance() {
15
64
  return this.appearance();
16
65
  }
@@ -23,6 +72,47 @@ let TngInputComponent = class TngInputComponent {
23
72
  get dataFullWidth() {
24
73
  return this.fullWidth() ? '' : null;
25
74
  }
75
+ get effectiveValue() {
76
+ const value = this.usingCva ? this.cvaValue : this.value();
77
+ return value ?? '';
78
+ }
79
+ get effectiveDisabled() {
80
+ return this.cvaDisabled || this.disabled();
81
+ }
82
+ writeValue(value) {
83
+ this.usingCva = true;
84
+ this.cvaValue = typeof value === 'string' ? value : value == null ? null : String(value);
85
+ }
86
+ registerOnChange(fn) {
87
+ this.onChange = fn;
88
+ }
89
+ registerOnTouched(fn) {
90
+ this.onTouched = fn;
91
+ }
92
+ setDisabledState(isDisabled) {
93
+ this.cvaDisabled = isDisabled;
94
+ }
95
+ onInput(event) {
96
+ const value = readTngInputEventValue(event);
97
+ if (value === null) {
98
+ return;
99
+ }
100
+ if (this.usingCva) {
101
+ this.cvaValue = value;
102
+ }
103
+ this.onChange(value);
104
+ this.valueChange.emit(value);
105
+ if (event instanceof Event) {
106
+ this.inputEvent.emit(event);
107
+ }
108
+ }
109
+ onBlur(event) {
110
+ this.onTouched();
111
+ this.blurEvent.emit(event);
112
+ }
113
+ normalizeAttrValue(value) {
114
+ return normalizeStringValue(value);
115
+ }
26
116
  };
27
117
  __decorate([
28
118
  HostBinding('attr.data-slot')
@@ -42,9 +132,16 @@ __decorate([
42
132
  TngInputComponent = __decorate([
43
133
  Component({
44
134
  selector: 'tng-input',
45
- imports: [TngInputGroup, TngInputLeading, TngInputTrailing],
135
+ imports: [TngFormFieldComponent, TngInput],
46
136
  templateUrl: './tng-input.component.html',
47
137
  styleUrl: './tng-input.component.css',
138
+ providers: [
139
+ {
140
+ provide: NG_VALUE_ACCESSOR,
141
+ useExisting: forwardRef(() => TngInputComponent),
142
+ multi: true,
143
+ },
144
+ ],
48
145
  })
49
146
  ], TngInputComponent);
50
147
  export { TngInputComponent };
@@ -1 +1 @@
1
- {"version":3,"file":"tng-input.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/input/tng-input.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAYlF,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IACZ,UAAU,GAAG,KAAK,CAAqB,SAAS,CAAC,CAAC;IAClD,IAAI,GAAG,KAAK,CAAe,IAAI,CAAC,CAAC;IACjC,IAAI,GAAG,KAAK,CAAe,SAAS,CAAC,CAAC;IAEtD,2DAA2D;IAC3C,SAAS,GAAG,KAAK,CAA4B,IAAI,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IAGgB,QAAQ,GAAG,eAAwB,CAAC;IAGvD,IAAc,cAAc;QAC1B,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;IAC3B,CAAC;IAGD,IAAc,QAAQ;QACpB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;IAGD,IAAc,QAAQ;QACpB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;IAGD,IAAc,aAAa;QACzB,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IACtC,CAAC;CACF,CAAA;AArBoB;IADlB,WAAW,CAAC,gBAAgB,CAAC;mDACyB;AAGvD;IADC,WAAW,CAAC,sBAAsB,CAAC;uDAGnC;AAGD;IADC,WAAW,CAAC,gBAAgB,CAAC;iDAG7B;AAGD;IADC,WAAW,CAAC,gBAAgB,CAAC;iDAG7B;AAGD;IADC,WAAW,CAAC,sBAAsB,CAAC;sDAGnC;AA/BU,iBAAiB;IAN7B,SAAS,CAAC;QACT,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,CAAC,aAAa,EAAE,eAAe,EAAE,gBAAgB,CAAC;QAC3D,WAAW,EAAE,4BAA4B;QACzC,QAAQ,EAAE,2BAA2B;KACtC,CAAC;GACW,iBAAiB,CAgC7B","sourcesContent":["import { Component, HostBinding, input } from '@angular/core';\nimport { booleanAttribute } from '@angular/core';\n\nimport { TngInputGroup, TngInputLeading, TngInputTrailing } from '@tailng-ui/primitives';\n\nexport type TngInputAppearance = 'outline' | 'solid' | 'ghost';\nexport type TngInputSize = 'sm' | 'md' | 'lg';\nexport type TngInputTone = 'neutral' | 'primary' | 'success' | 'danger';\n\n@Component({\n selector: 'tng-input',\n imports: [TngInputGroup, TngInputLeading, TngInputTrailing],\n templateUrl: './tng-input.component.html',\n styleUrl: './tng-input.component.css',\n})\nexport class TngInputComponent {\n public readonly appearance = input<TngInputAppearance>('outline');\n public readonly size = input<TngInputSize>('md');\n public readonly tone = input<TngInputTone>('neutral');\n\n /** Default true so forms look consistent out-of-the-box */\n public readonly fullWidth = input<boolean, boolean | string>(true, {\n transform: booleanAttribute,\n });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'input-wrapper' as const;\n\n @HostBinding('attr.data-appearance')\n protected get dataAppearance(): TngInputAppearance {\n return this.appearance();\n }\n\n @HostBinding('attr.data-size')\n protected get dataSize(): TngInputSize {\n return this.size();\n }\n\n @HostBinding('attr.data-tone')\n protected get dataTone(): TngInputTone {\n return this.tone();\n }\n\n @HostBinding('attr.data-full-width')\n protected get dataFullWidth(): '' | null {\n return this.fullWidth() ? '' : null;\n }\n}\n"]}
1
+ {"version":3,"file":"tng-input.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/input/tng-input.component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Component,\n forwardRef,\n HostBinding,\n input,\n output,\n} from '@angular/core';\nimport { booleanAttribute } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport {\n coerceTngInputNullableBoolean,\n TngInput,\n type TngInputType,\n} from '@tailng-ui/primitives';\nimport {\n TngFormFieldComponent,\n type TngFormFieldAppearance,\n type TngFormFieldSize,\n type TngFormFieldTone,\n} from '../form-field/tng-form-field.component';\n\ntype NullableBooleanInput = boolean | null | string | undefined;\n\nfunction normalizeStringValue(value: string | null | undefined): string | null {\n if (value === undefined || value === null) {\n return null;\n }\n\n return value;\n}\n\nexport function readTngInputEventValue(event: unknown): string | null {\n if (!(event instanceof Event)) {\n return null;\n }\n\n const target = event.target;\n if (!(target instanceof HTMLInputElement)) {\n return null;\n }\n\n return target.value;\n}\n\n@Component({\n selector: 'tng-input',\n imports: [TngFormFieldComponent, TngInput],\n templateUrl: './tng-input.component.html',\n styleUrl: './tng-input.component.css',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TngInputComponent),\n multi: true,\n },\n ],\n})\nexport class TngInputComponent implements ControlValueAccessor {\n public readonly appearance = input<TngFormFieldAppearance>('outline');\n public readonly size = input<TngFormFieldSize>('md');\n public readonly tone = input<TngFormFieldTone>('neutral');\n public readonly fullWidth = input<boolean, boolean | string>(true, {\n transform: booleanAttribute,\n });\n\n public readonly ariaDescribedBy = input<string | null>(null);\n public readonly ariaInvalid = input<boolean | null, NullableBooleanInput>(null, {\n transform: coerceTngInputNullableBoolean,\n });\n public readonly ariaLabel = input<string | null>(null);\n public readonly ariaLabelledby = input<string | null>(null);\n public readonly ariaRequired = input<boolean | null, NullableBooleanInput>(null, {\n transform: coerceTngInputNullableBoolean,\n });\n public readonly autocomplete = input<string | null>(null);\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly id = input<string | null>(null);\n public readonly name = input<string | null>(null);\n public readonly placeholder = input<string | null>(null);\n public readonly readonly = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly required = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly type = input<TngInputType>('text');\n public readonly value = input<string | null>(null);\n\n public readonly valueChange = output<string>();\n public readonly inputEvent = output<Event>({ alias: 'input' });\n public readonly blurEvent = output<FocusEvent>({ alias: 'blur' });\n\n private cvaValue: string | null = null;\n private cvaDisabled = false;\n private usingCva = false;\n private onChange: (value: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'input-component' as const;\n\n @HostBinding('attr.data-appearance')\n protected get dataAppearance(): TngFormFieldAppearance {\n return this.appearance();\n }\n\n @HostBinding('attr.data-size')\n protected get dataSize(): TngFormFieldSize {\n return this.size();\n }\n\n @HostBinding('attr.data-tone')\n protected get dataTone(): TngFormFieldTone {\n return this.tone();\n }\n\n @HostBinding('attr.data-full-width')\n protected get dataFullWidth(): '' | null {\n return this.fullWidth() ? '' : null;\n }\n\n protected get effectiveValue(): string {\n const value = this.usingCva ? this.cvaValue : this.value();\n return value ?? '';\n }\n\n protected get effectiveDisabled(): boolean {\n return this.cvaDisabled || this.disabled();\n }\n\n public writeValue(value: unknown): void {\n this.usingCva = true;\n this.cvaValue = typeof value === 'string' ? value : value == null ? null : String(value);\n }\n\n public registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled = isDisabled;\n }\n\n public onInput(event: unknown): void {\n const value = readTngInputEventValue(event);\n if (value === null) {\n return;\n }\n\n if (this.usingCva) {\n this.cvaValue = value;\n }\n\n this.onChange(value);\n this.valueChange.emit(value);\n if (event instanceof Event) {\n this.inputEvent.emit(event);\n }\n }\n\n public onBlur(event: FocusEvent): void {\n this.onTouched();\n this.blurEvent.emit(event);\n }\n\n protected normalizeAttrValue(value: string | null | undefined): string | null {\n return normalizeStringValue(value);\n }\n}\n"]}
@@ -26,7 +26,7 @@ export declare class TngCardFooterComponent {
26
26
  export declare class TngCardMediaComponent {
27
27
  }
28
28
  export declare class TngCardActionsComponent {
29
- readonly align: import("@angular/core").InputSignalWithTransform<"end" | "start", string>;
29
+ readonly align: import("@angular/core").InputSignalWithTransform<"start" | "end", string>;
30
30
  }
31
31
  export declare class TngCardDividerComponent {
32
32
  }
@@ -1,4 +1,7 @@
1
1
  export declare class TngGridComponent {
2
- readonly ariaLabel: import("@angular/core").InputSignal<string>;
2
+ }
3
+ export declare class TngGridRowComponent {
4
+ }
5
+ export declare class TngGridCellComponent {
3
6
  }
4
7
  //# sourceMappingURL=tng-grid.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-grid.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/layout/grid/tng-grid.component.ts"],"names":[],"mappings":"AAGA,qBAMa,gBAAgB;IAC3B,SAAgB,SAAS,8CAAyB;CACnD"}
1
+ {"version":3,"file":"tng-grid.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/layout/grid/tng-grid.component.ts"],"names":[],"mappings":"AAOA,qBAwBa,gBAAgB;CAAG;AAEhC,qBAca,mBAAmB;CAAG;AAEnC,qBAwDa,oBAAoB;CAAG"}