@tailng-ui/components 0.1.0 → 0.12.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 (159) hide show
  1. package/README.md +83 -5
  2. package/package.json +9 -4
  3. package/src/lib/feedback/empty/tng-empty.component.d.ts.map +1 -1
  4. package/src/lib/feedback/empty/tng-empty.component.js +5 -0
  5. package/src/lib/feedback/empty/tng-empty.component.js.map +1 -1
  6. package/src/lib/feedback/progress-bar/tng-progress-bar.component.d.ts.map +1 -1
  7. package/src/lib/feedback/progress-bar/tng-progress-bar.component.js +1 -0
  8. package/src/lib/feedback/progress-bar/tng-progress-bar.component.js.map +1 -1
  9. package/src/lib/feedback/progress-spinner/tng-progress-spinner.component.d.ts.map +1 -1
  10. package/src/lib/feedback/progress-spinner/tng-progress-spinner.component.js +1 -0
  11. package/src/lib/feedback/progress-spinner/tng-progress-spinner.component.js.map +1 -1
  12. package/src/lib/feedback/skeleton/tng-skeleton.component.d.ts.map +1 -1
  13. package/src/lib/feedback/skeleton/tng-skeleton.component.js +1 -0
  14. package/src/lib/feedback/skeleton/tng-skeleton.component.js.map +1 -1
  15. package/src/lib/feedback/toast/tng-toast.component.d.ts +55 -6
  16. package/src/lib/feedback/toast/tng-toast.component.d.ts.map +1 -1
  17. package/src/lib/feedback/toast/tng-toast.component.js +235 -23
  18. package/src/lib/feedback/toast/tng-toast.component.js.map +1 -1
  19. package/src/lib/form/autocomplete/tng-autocomplete.component.js +1 -1
  20. package/src/lib/form/autocomplete/tng-autocomplete.component.js.map +1 -1
  21. package/src/lib/form/button-toggle/tng-button-toggle-group.component.d.ts.map +1 -1
  22. package/src/lib/form/button-toggle/tng-button-toggle-group.component.js +1 -0
  23. package/src/lib/form/button-toggle/tng-button-toggle-group.component.js.map +1 -1
  24. package/src/lib/form/button-toggle/tng-button-toggle.component.d.ts.map +1 -1
  25. package/src/lib/form/button-toggle/tng-button-toggle.component.js +1 -0
  26. package/src/lib/form/button-toggle/tng-button-toggle.component.js.map +1 -1
  27. package/src/lib/form/checkbox/tng-checkbox.component.d.ts.map +1 -1
  28. package/src/lib/form/checkbox/tng-checkbox.component.js +1 -0
  29. package/src/lib/form/checkbox/tng-checkbox.component.js.map +1 -1
  30. package/src/lib/form/chips/tng-chips.component.d.ts +9 -1
  31. package/src/lib/form/chips/tng-chips.component.d.ts.map +1 -1
  32. package/src/lib/form/chips/tng-chips.component.js +40 -3
  33. package/src/lib/form/chips/tng-chips.component.js.map +1 -1
  34. package/src/lib/form/combobox/tng-combobox.component.d.ts.map +1 -1
  35. package/src/lib/form/combobox/tng-combobox.component.js +1 -0
  36. package/src/lib/form/combobox/tng-combobox.component.js.map +1 -1
  37. package/src/lib/form/index.d.ts +2 -2
  38. package/src/lib/form/index.d.ts.map +1 -1
  39. package/src/lib/form/index.js +2 -2
  40. package/src/lib/form/index.js.map +1 -1
  41. package/src/lib/form/input-otp/index.d.ts +3 -0
  42. package/src/lib/form/input-otp/index.d.ts.map +1 -0
  43. package/src/lib/form/input-otp/index.js +3 -0
  44. package/src/lib/form/input-otp/index.js.map +1 -0
  45. package/src/lib/form/input-otp/tng-input-otp.component.d.ts +79 -7
  46. package/src/lib/form/input-otp/tng-input-otp.component.d.ts.map +1 -1
  47. package/src/lib/form/input-otp/tng-input-otp.component.js +441 -81
  48. package/src/lib/form/input-otp/tng-input-otp.component.js.map +1 -1
  49. package/src/lib/form/label/tng-label.component.d.ts.map +1 -1
  50. package/src/lib/form/label/tng-label.component.js +1 -0
  51. package/src/lib/form/label/tng-label.component.js.map +1 -1
  52. package/src/lib/form/radio/tng-radio.component.d.ts +4 -0
  53. package/src/lib/form/radio/tng-radio.component.d.ts.map +1 -1
  54. package/src/lib/form/radio/tng-radio.component.js +16 -0
  55. package/src/lib/form/radio/tng-radio.component.js.map +1 -1
  56. package/src/lib/form/slider/tng-slider.component.d.ts.map +1 -1
  57. package/src/lib/form/slider/tng-slider.component.js +1 -0
  58. package/src/lib/form/slider/tng-slider.component.js.map +1 -1
  59. package/src/lib/form/switch/tng-switch.component.d.ts.map +1 -1
  60. package/src/lib/form/switch/tng-switch.component.js +1 -0
  61. package/src/lib/form/switch/tng-switch.component.js.map +1 -1
  62. package/src/lib/form/textarea/tng-textarea.component.d.ts +2 -0
  63. package/src/lib/form/textarea/tng-textarea.component.d.ts.map +1 -1
  64. package/src/lib/form/textarea/tng-textarea.component.js +8 -4
  65. package/src/lib/form/textarea/tng-textarea.component.js.map +1 -1
  66. package/src/lib/form/toggle/tng-toggle.component.d.ts.map +1 -1
  67. package/src/lib/form/toggle/tng-toggle.component.js +1 -0
  68. package/src/lib/form/toggle/tng-toggle.component.js.map +1 -1
  69. package/src/lib/form/toggle-group/tng-toggle-group.component.d.ts.map +1 -1
  70. package/src/lib/form/toggle-group/tng-toggle-group.component.js +1 -0
  71. package/src/lib/form/toggle-group/tng-toggle-group.component.js.map +1 -1
  72. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.component.d.ts.map +1 -1
  73. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.component.js +1 -0
  74. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.component.js.map +1 -1
  75. package/src/lib/layout/card/tng-card.component.d.ts.map +1 -1
  76. package/src/lib/layout/card/tng-card.component.js +10 -0
  77. package/src/lib/layout/card/tng-card.component.js.map +1 -1
  78. package/src/lib/layout/collapsible/tng-collapsible.component.d.ts.map +1 -1
  79. package/src/lib/layout/collapsible/tng-collapsible.component.js +1 -0
  80. package/src/lib/layout/collapsible/tng-collapsible.component.js.map +1 -1
  81. package/src/lib/layout/grid/tng-grid.component.d.ts.map +1 -1
  82. package/src/lib/layout/grid/tng-grid.component.js +1 -0
  83. package/src/lib/layout/grid/tng-grid.component.js.map +1 -1
  84. package/src/lib/layout/separator/tng-separator.component.d.ts.map +1 -1
  85. package/src/lib/layout/separator/tng-separator.component.js +1 -0
  86. package/src/lib/layout/separator/tng-separator.component.js.map +1 -1
  87. package/src/lib/layout/stepper/tng-stepper.component.d.ts.map +1 -1
  88. package/src/lib/layout/stepper/tng-stepper.component.js +1 -0
  89. package/src/lib/layout/stepper/tng-stepper.component.js.map +1 -1
  90. package/src/lib/navigation/breadcrumb/tng-breadcrumb-item.component.d.ts +10 -0
  91. package/src/lib/navigation/breadcrumb/tng-breadcrumb-item.component.d.ts.map +1 -1
  92. package/src/lib/navigation/breadcrumb/tng-breadcrumb-item.component.js +53 -1
  93. package/src/lib/navigation/breadcrumb/tng-breadcrumb-item.component.js.map +1 -1
  94. package/src/lib/navigation/breadcrumb/tng-breadcrumb-link.component.d.ts.map +1 -1
  95. package/src/lib/navigation/breadcrumb/tng-breadcrumb-link.component.js +1 -0
  96. package/src/lib/navigation/breadcrumb/tng-breadcrumb-link.component.js.map +1 -1
  97. package/src/lib/navigation/breadcrumb/tng-breadcrumb-list.component.d.ts.map +1 -1
  98. package/src/lib/navigation/breadcrumb/tng-breadcrumb-list.component.js +1 -0
  99. package/src/lib/navigation/breadcrumb/tng-breadcrumb-list.component.js.map +1 -1
  100. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator-template.directive.d.ts.map +1 -1
  101. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator-template.directive.js +1 -0
  102. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator-template.directive.js.map +1 -1
  103. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator.component.d.ts.map +1 -1
  104. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator.component.js +1 -0
  105. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator.component.js.map +1 -1
  106. package/src/lib/navigation/breadcrumb/tng-breadcrumb.component.d.ts.map +1 -1
  107. package/src/lib/navigation/breadcrumb/tng-breadcrumb.component.js +1 -0
  108. package/src/lib/navigation/breadcrumb/tng-breadcrumb.component.js.map +1 -1
  109. package/src/lib/navigation/context-menu/tng-context-menu.component.d.ts +1 -0
  110. package/src/lib/navigation/context-menu/tng-context-menu.component.d.ts.map +1 -1
  111. package/src/lib/navigation/context-menu/tng-context-menu.component.js +21 -4
  112. package/src/lib/navigation/context-menu/tng-context-menu.component.js.map +1 -1
  113. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.component.d.ts.map +1 -1
  114. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.component.js +1 -0
  115. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.component.js.map +1 -1
  116. package/src/lib/navigation/navigation-menu/tng-navigation-menu.component.d.ts.map +1 -1
  117. package/src/lib/navigation/navigation-menu/tng-navigation-menu.component.js +1 -0
  118. package/src/lib/navigation/navigation-menu/tng-navigation-menu.component.js.map +1 -1
  119. package/src/lib/navigation/toolbar/tng-toolbar.component.d.ts.map +1 -1
  120. package/src/lib/navigation/toolbar/tng-toolbar.component.js +1 -0
  121. package/src/lib/navigation/toolbar/tng-toolbar.component.js.map +1 -1
  122. package/src/lib/overlay/dialog/tng-dialog.component.d.ts.map +1 -1
  123. package/src/lib/overlay/dialog/tng-dialog.component.js +1 -0
  124. package/src/lib/overlay/dialog/tng-dialog.component.js.map +1 -1
  125. package/src/lib/overlay/popover/tng-popover.component.d.ts +14 -19
  126. package/src/lib/overlay/popover/tng-popover.component.d.ts.map +1 -1
  127. package/src/lib/overlay/popover/tng-popover.component.js +25 -105
  128. package/src/lib/overlay/popover/tng-popover.component.js.map +1 -1
  129. package/src/lib/overlay/tng-overlay-focus-handoff.d.ts +10 -0
  130. package/src/lib/overlay/tng-overlay-focus-handoff.d.ts.map +1 -0
  131. package/src/lib/overlay/tng-overlay-focus-handoff.js +3 -0
  132. package/src/lib/overlay/tng-overlay-focus-handoff.js.map +1 -0
  133. package/src/lib/overlay/tng-overlay-runtime.d.ts +2 -2
  134. package/src/lib/overlay/tooltip/tng-tooltip.component.d.ts +1 -18
  135. package/src/lib/overlay/tooltip/tng-tooltip.component.d.ts.map +1 -1
  136. package/src/lib/overlay/tooltip/tng-tooltip.component.js +6 -85
  137. package/src/lib/overlay/tooltip/tng-tooltip.component.js.map +1 -1
  138. package/src/lib/utility/avatar/tng-avatar.component.d.ts.map +1 -1
  139. package/src/lib/utility/avatar/tng-avatar.component.js +9 -1
  140. package/src/lib/utility/avatar/tng-avatar.component.js.map +1 -1
  141. package/src/lib/utility/badge/tng-badge.component.d.ts.map +1 -1
  142. package/src/lib/utility/badge/tng-badge.component.js +1 -0
  143. package/src/lib/utility/badge/tng-badge.component.js.map +1 -1
  144. package/src/lib/utility/button/tng-button.component.d.ts.map +1 -1
  145. package/src/lib/utility/button/tng-button.component.js +1 -0
  146. package/src/lib/utility/button/tng-button.component.js.map +1 -1
  147. package/src/lib/utility/code-block/tng-code-block.component.d.ts.map +1 -1
  148. package/src/lib/utility/code-block/tng-code-block.component.js +1 -0
  149. package/src/lib/utility/code-block/tng-code-block.component.js.map +1 -1
  150. package/src/lib/utility/copy-button/tng-copy-button.component.d.ts.map +1 -1
  151. package/src/lib/utility/copy-button/tng-copy-button.component.js +1 -0
  152. package/src/lib/utility/copy-button/tng-copy-button.component.js.map +1 -1
  153. package/src/lib/utility/tag/tng-tag.component.d.ts +8 -0
  154. package/src/lib/utility/tag/tng-tag.component.d.ts.map +1 -1
  155. package/src/lib/utility/tag/tng-tag.component.js +17 -3
  156. package/src/lib/utility/tag/tng-tag.component.js.map +1 -1
  157. package/src/lib/utility/tree/tng-tree.component.d.ts.map +1 -1
  158. package/src/lib/utility/tree/tng-tree.component.js +1 -0
  159. package/src/lib/utility/tree/tng-tree.component.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tng-input-otp.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/input-otp/tng-input-otp.component.ts"],"names":[],"mappings":"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","sourcesContent":["import { Component, computed, input, output } from '@angular/core';\nimport { normalizeTngOtpLength, TngInputOtp as TngInputOtpPrimitive } from '@tailng-ui/primitives';\n\nfunction toOtpSlots(length: number, value: string): string[] {\n const slots = Array.from({ length }, () => '');\n\n for (const [index, char] of Array.from(value).entries()) {\n if (index >= length) {\n break;\n }\n\n slots[index] = char;\n }\n\n return slots;\n}\n\nfunction joinOtpSlots(slots: readonly string[]): string {\n return slots.join('');\n}\n\nexport function sanitizeTngOtpValue(value: string): string {\n return value.replace(/[^a-zA-Z0-9]/g, '');\n}\n\nexport function applyTngOtpSlotValue(\n slots: readonly string[],\n index: number,\n nextValue: string,\n): readonly string[] {\n if (index < 0 || index >= slots.length) {\n return slots;\n }\n\n const nextSlots = [...slots];\n nextSlots[index] = sanitizeTngOtpValue(nextValue).slice(0, 1);\n return nextSlots;\n}\n\nfunction isFilledOtp(slots: readonly string[]): boolean {\n return slots.every((slot) => slot.length === 1);\n}\n\nfunction focusOtpInput(index: number): void {\n const target = document.querySelector<HTMLInputElement>(`[data-tng-otp-slot='${index}']`);\n target?.focus();\n target?.select();\n}\n\nfunction readInputValue(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\nfunction readClipboardText(event: unknown): string | null {\n if (!(event instanceof ClipboardEvent)) {\n return null;\n }\n\n return event.clipboardData?.getData('text') ?? null;\n}\n\nfunction handleOtpArrowNavigation(index: number, key: string, total: number): boolean {\n if (key === 'ArrowLeft' && index > 0) {\n focusOtpInput(index - 1);\n return true;\n }\n\n if (key === 'ArrowRight' && index < total - 1) {\n focusOtpInput(index + 1);\n return true;\n }\n\n return false;\n}\n\nfunction shouldMoveBackForDelete(slots: readonly string[], index: number, key: string): boolean {\n if (key !== 'Backspace') {\n return false;\n }\n\n if (index === 0) {\n return false;\n }\n\n return slots[index] === '';\n}\n\n@Component({\n selector: 'tng-input-otp',\n imports: [TngInputOtpPrimitive],\n templateUrl: './tng-input-otp.component.html',\n styleUrl: './tng-input-otp.component.css',\n})\nexport class TngInputOtpComponent {\n public readonly length = input<number, number | string>(6, {\n transform: (value: number | string): number =>\n normalizeTngOtpLength(typeof value === 'number' ? value : Number(value)),\n });\n public readonly value = input<string>('');\n\n public readonly valueChange = output<string>();\n public readonly complete = output<string>();\n\n protected readonly slots = computed<readonly string[]>(() =>\n toOtpSlots(this.length(), sanitizeTngOtpValue(this.value())),\n );\n\n protected onSlotInput(index: number, event: unknown): void {\n const value = readInputValue(event);\n if (value === null) {\n return;\n }\n\n const nextSlots = applyTngOtpSlotValue(this.slots(), index, value);\n const nextValue = joinOtpSlots(nextSlots);\n this.valueChange.emit(nextValue);\n\n if (nextSlots[index] !== '' && index < nextSlots.length - 1) {\n focusOtpInput(index + 1);\n }\n\n if (isFilledOtp(nextSlots)) {\n this.complete.emit(nextValue);\n }\n }\n\n protected onSlotKeydown(index: number, event: unknown): void {\n if (!(event instanceof KeyboardEvent)) {\n return;\n }\n\n if (handleOtpArrowNavigation(index, event.key, this.slots().length)) {\n event.preventDefault();\n return;\n }\n\n if (!shouldMoveBackForDelete(this.slots(), index, event.key)) {\n return;\n }\n\n event.preventDefault();\n const nextSlots = applyTngOtpSlotValue(this.slots(), index - 1, '');\n this.valueChange.emit(joinOtpSlots(nextSlots));\n focusOtpInput(index - 1);\n }\n\n protected onSlotsPaste(event: unknown): void {\n const clipboardValue = readClipboardText(event);\n if (clipboardValue === null) {\n return;\n }\n\n const cleanedValue = sanitizeTngOtpValue(clipboardValue).slice(0, this.length());\n if (cleanedValue.length === 0) {\n return;\n }\n\n if (event instanceof ClipboardEvent) {\n event.preventDefault();\n }\n\n this.valueChange.emit(cleanedValue);\n\n if (cleanedValue.length >= this.length()) {\n this.complete.emit(cleanedValue);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"tng-input-otp.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/input-otp/tng-input-otp.component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AfterViewInit,\n Component,\n computed,\n effect,\n ElementRef,\n forwardRef,\n inject,\n input,\n output,\n Renderer2,\n signal,\n} from '@angular/core';\nimport { booleanAttribute } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n clampTngOtpValue,\n normalizeTngOtpLength,\n resolveTngOtpState,\n TngInputOtp as TngInputOtpPrimitive,\n} from '@tailng-ui/primitives';\n\nexport type TngInputOtpType = 'numeric' | 'alphanumeric' | 'custom';\nexport type TngInputOtpInputMode = 'numeric' | 'text' | 'tel' | 'decimal';\n\nconst tngOtpDigitPattern = /^\\d$/;\nconst tngOtpAlphanumericPattern = /^[a-zA-Z0-9]$/;\n\nlet tngInputOtpInstanceCounter = 0;\n\nfunction toNonGlobalRegex(pattern: RegExp): RegExp {\n const flags = pattern.flags.replace(/g/g, '');\n return new RegExp(pattern.source, flags);\n}\n\nexport function sanitizeTngOtpCharacters(\n value: string,\n mode: TngInputOtpType,\n pattern: string | RegExp | null,\n): readonly string[] {\n const compiledPattern =\n mode !== 'custom'\n ? null\n : typeof pattern === 'string'\n ? new RegExp(pattern)\n : pattern === null\n ? null\n : toNonGlobalRegex(pattern);\n\n const acceptedChars: string[] = [];\n for (const char of Array.from(value)) {\n if (mode === 'numeric' && !tngOtpDigitPattern.test(char)) {\n continue;\n }\n\n if (mode === 'alphanumeric' && !tngOtpAlphanumericPattern.test(char)) {\n continue;\n }\n\n if (compiledPattern && !compiledPattern.test(char)) {\n continue;\n }\n\n acceptedChars.push(char);\n }\n\n return acceptedChars;\n}\n\nexport function toTngOtpSlots(length: number, value: string): readonly string[] {\n const safeLength = normalizeTngOtpLength(length);\n const slots = Array.from({ length: safeLength }, () => '');\n const chars = Array.from(clampTngOtpValue(value, safeLength));\n\n for (const [index, char] of chars.entries()) {\n if (index >= safeLength) {\n break;\n }\n\n slots[index] = char;\n }\n\n return slots;\n}\n\nexport function applyTngOtpCharacters(\n value: string,\n startIndex: number,\n characters: readonly string[],\n maxLength: number,\n): string {\n const safeLength = normalizeTngOtpLength(maxLength);\n const nextChars = Array.from(clampTngOtpValue(value, safeLength));\n const safeStart = Math.max(0, Math.min(startIndex, safeLength - 1));\n\n let cursor = nextChars.length < safeLength ? Math.min(safeStart, nextChars.length) : safeStart;\n for (const char of characters) {\n if (cursor >= safeLength) {\n break;\n }\n\n if (cursor < nextChars.length) {\n nextChars[cursor] = char;\n } else {\n nextChars.push(char);\n }\n\n cursor += 1;\n }\n\n return nextChars.slice(0, safeLength).join('');\n}\n\nexport function removeTngOtpCharacter(value: string, index: number): string {\n const chars = Array.from(value);\n if (index < 0 || index >= chars.length) {\n return value;\n }\n\n chars.splice(index, 1);\n return chars.join('');\n}\n\nexport function resolveTngOtpEntryIndex(value: string, length: number): number {\n const safeLength = normalizeTngOtpLength(length);\n const safeValue = clampTngOtpValue(value, safeLength);\n if (safeValue.length >= safeLength) {\n return safeLength - 1;\n }\n\n return safeValue.length;\n}\n\nexport function resolveTngOtpEndIndex(value: string, length: number): number {\n const safeLength = normalizeTngOtpLength(length);\n const safeValue = clampTngOtpValue(value, safeLength);\n if (safeValue.length === 0) {\n return safeLength - 1;\n }\n\n return Math.max(0, safeValue.length - 1);\n}\n\nfunction clampOtpIndex(index: number, length: number): number {\n const safeLength = normalizeTngOtpLength(length);\n if (!Number.isFinite(index)) {\n return 0;\n }\n\n if (index < 0) {\n return 0;\n }\n\n if (index >= safeLength) {\n return safeLength - 1;\n }\n\n return Math.trunc(index);\n}\n\n@Component({\n selector: 'tng-input-otp',\n standalone: true,\n imports: [TngInputOtpPrimitive],\n templateUrl: './tng-input-otp.component.html',\n styleUrl: './tng-input-otp.component.css',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TngInputOtpComponent),\n multi: true,\n },\n ],\n})\nexport class TngInputOtpComponent implements AfterViewInit, ControlValueAccessor {\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly renderer = inject(Renderer2);\n\n private readonly generatedId = `tng-input-otp-${++tngInputOtpInstanceCounter}`;\n private resetUnlisten: (() => void) | null = null;\n private hasInitializedUncontrolled = false;\n\n private onChangeCallback: (value: string) => void = () => undefined;\n private onTouchedCallback: () => void = () => undefined;\n\n private readonly uncontrolledValue = signal('');\n private readonly formsDisabled = signal(false);\n private readonly focusedState = signal(false);\n private readonly focusVisibleState = signal(false);\n private readonly keyboardInteraction = signal(false);\n private readonly activeIndexState = signal(0);\n\n public readonly length = input<number, number | string>(6, {\n transform: (value: number | string): number =>\n normalizeTngOtpLength(typeof value === 'number' ? value : Number(value)),\n });\n public readonly valueInput = input<string | null | undefined>(undefined, { alias: 'value' });\n public readonly defaultValue = input<string>('');\n public readonly type = input<TngInputOtpType>('numeric');\n public readonly pattern = input<string | RegExp | null>(null);\n\n public readonly mask = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly disabledInput = input<boolean, boolean | string>(false, {\n alias: 'disabled',\n transform: booleanAttribute,\n });\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 invalid = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly autoFocus = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly selectOnFocus = input<boolean, boolean | string>(true, {\n transform: booleanAttribute,\n });\n\n public readonly placeholderChar = input<string>('');\n public readonly name = input<string | null>(null);\n public readonly id = input<string | null>(null);\n public readonly form = input<string | null>(null);\n public readonly autocomplete = input<string>('one-time-code');\n public readonly inputMode = input<TngInputOtpInputMode | null>(null);\n public readonly ariaLabel = input<string | null>(null);\n public readonly ariaLabelledby = input<string | null>(null);\n public readonly ariaDescribedby = input<string | null>(null);\n\n public readonly valueChange = output<string>();\n public readonly complete = output<string>();\n\n protected readonly disabled = computed(() => this.disabledInput() || this.formsDisabled());\n protected readonly focused = computed(() => this.focusedState());\n protected readonly focusVisible = computed(() => this.focusVisibleState());\n protected readonly activeIndex = computed(() => clampOtpIndex(this.activeIndexState(), this.length()));\n protected readonly rootId = computed(() => this.id() ?? this.generatedId);\n\n protected readonly currentValue = computed(() => {\n const controlled = this.valueInput();\n if (controlled !== undefined) {\n return this.normalizeAndClamp(controlled ?? '');\n }\n\n return this.normalizeAndClamp(this.uncontrolledValue());\n });\n\n protected readonly slots = computed(() => toTngOtpSlots(this.length(), this.currentValue()));\n protected readonly completionState = computed(() => resolveTngOtpState(this.length(), this.currentValue()));\n\n protected readonly resolvedInputMode = computed<TngInputOtpInputMode>(() => {\n const explicit = this.inputMode();\n if (explicit !== null) {\n return explicit;\n }\n\n return this.type() === 'numeric' ? 'numeric' : 'text';\n });\n\n protected readonly slotInputType = computed<'password' | 'text'>(() =>\n this.mask() ? 'password' : 'text',\n );\n\n private readonly syncUncontrolledState = effect(\n () => {\n const controlled = this.valueInput();\n const length = this.length();\n this.type();\n this.pattern();\n\n if (controlled !== undefined) {\n if (!this.focusedState()) {\n this.activeIndexState.set(\n resolveTngOtpEntryIndex(this.normalizeAndClamp(controlled ?? ''), length),\n );\n }\n\n return;\n }\n\n const normalizedDefault = this.normalizeAndClamp(this.defaultValue());\n if (!this.hasInitializedUncontrolled) {\n this.hasInitializedUncontrolled = true;\n this.uncontrolledValue.set(normalizedDefault);\n this.activeIndexState.set(resolveTngOtpEntryIndex(normalizedDefault, length));\n return;\n }\n\n const normalizedCurrent = this.normalizeAndClamp(this.uncontrolledValue());\n if (normalizedCurrent !== this.uncontrolledValue()) {\n this.uncontrolledValue.set(normalizedCurrent);\n }\n\n this.activeIndexState.update((index) => clampOtpIndex(index, length));\n },\n );\n\n public ngAfterViewInit(): void {\n this.attachFormResetListener();\n\n if (!this.autoFocus() || this.disabled()) {\n return;\n }\n\n queueMicrotask(() => {\n if (this.disabled()) {\n return;\n }\n\n this.focusSlot(resolveTngOtpEntryIndex(this.currentValue(), this.length()), this.selectOnFocus());\n });\n }\n\n public ngOnDestroy(): void {\n this.resetUnlisten?.();\n this.resetUnlisten = null;\n }\n\n public writeValue(value: string | null): void {\n const normalized = this.normalizeAndClamp(value ?? '');\n this.hasInitializedUncontrolled = true;\n this.uncontrolledValue.set(normalized);\n\n if (!this.focusedState()) {\n this.activeIndexState.set(resolveTngOtpEntryIndex(normalized, this.length()));\n }\n }\n\n public registerOnChange(fn: (value: string) => void): void {\n this.onChangeCallback = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouchedCallback = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.formsDisabled.set(isDisabled);\n }\n\n protected onSlotPointerDown(): void {\n this.keyboardInteraction.set(false);\n }\n\n protected onSlotFocus(index: number, event: FocusEvent): void {\n const target = event.target;\n const nextIndex = this.resolveEditableIndex(index);\n this.activeIndexState.set(nextIndex);\n this.focusedState.set(true);\n\n if (target instanceof HTMLElement && target.matches(':focus-visible')) {\n this.focusVisibleState.set(true);\n } else {\n this.focusVisibleState.set(this.keyboardInteraction());\n }\n\n if (this.selectOnFocus() && target instanceof HTMLInputElement) {\n target.select();\n }\n }\n\n protected onSlotBlur(event: FocusEvent): void {\n const host = this.hostRef.nativeElement;\n const relatedTarget = event.relatedTarget;\n if (relatedTarget instanceof Node && host.contains(relatedTarget)) {\n return;\n }\n\n queueMicrotask(() => {\n if (this.isFocusWithinHost()) {\n return;\n }\n\n this.focusedState.set(false);\n this.focusVisibleState.set(false);\n this.onTouchedCallback();\n });\n }\n\n protected onSlotKeydown(index: number, event: KeyboardEvent): void {\n this.keyboardInteraction.set(true);\n\n const editableIndex = this.resolveEditableIndex(index);\n const total = this.length();\n\n if (event.key === 'ArrowLeft') {\n event.preventDefault();\n this.focusSlot(Math.max(0, editableIndex - 1), true);\n return;\n }\n\n if (event.key === 'ArrowRight') {\n event.preventDefault();\n this.focusSlot(Math.min(total - 1, editableIndex + 1), true);\n return;\n }\n\n if (event.key === 'Home') {\n event.preventDefault();\n this.focusSlot(0, true);\n return;\n }\n\n if (event.key === 'End') {\n event.preventDefault();\n this.focusSlot(resolveTngOtpEndIndex(this.currentValue(), total), true);\n return;\n }\n\n if (event.key === 'Backspace') {\n event.preventDefault();\n this.handleBackspace(editableIndex);\n return;\n }\n\n if (event.key === 'Delete') {\n event.preventDefault();\n this.handleDelete(editableIndex);\n return;\n }\n\n if ((this.disabled() || this.readonly()) && event.key.length === 1) {\n event.preventDefault();\n }\n }\n\n protected onSlotInput(index: number, event: Event): void {\n const target = event.target;\n if (!(target instanceof HTMLInputElement)) {\n return;\n }\n\n if (this.disabled() || this.readonly()) {\n target.value = this.slotValue(this.resolveEditableIndex(index));\n return;\n }\n\n const chars = sanitizeTngOtpCharacters(target.value, this.type(), this.pattern());\n if (chars.length === 0) {\n const nextValue = removeTngOtpCharacter(this.currentValue(), this.resolveEditableIndex(index));\n this.commitValue(nextValue, this.resolveEditableIndex(index));\n return;\n }\n\n const previousValue = this.currentValue();\n const totalLength = this.length();\n const editableIndex = this.resolveEditableIndex(index);\n const wasCompleteBeforeInput = previousValue.length >= totalLength;\n const wasReplacingExistingCharacter = editableIndex < previousValue.length;\n const nextValue = applyTngOtpCharacters(previousValue, editableIndex, chars, totalLength);\n const nextFocus =\n wasCompleteBeforeInput || wasReplacingExistingCharacter\n ? Math.min(totalLength - 1, editableIndex + chars.length)\n : nextValue.length >= totalLength\n ? totalLength - 1\n : Math.min(totalLength - 1, Math.max(editableIndex + chars.length, nextValue.length));\n\n this.commitValue(nextValue, nextFocus);\n }\n\n protected onSlotPaste(index: number, event: ClipboardEvent): void {\n if (this.disabled() || this.readonly()) {\n return;\n }\n\n const clipboardValue = event.clipboardData?.getData('text') ?? '';\n const chars = sanitizeTngOtpCharacters(clipboardValue, this.type(), this.pattern());\n if (chars.length === 0) {\n event.preventDefault();\n return;\n }\n\n event.preventDefault();\n const editableIndex = this.resolveEditableIndex(index);\n const nextValue = applyTngOtpCharacters(this.currentValue(), editableIndex, chars, this.length());\n const nextFocus =\n nextValue.length >= this.length()\n ? this.length() - 1\n : Math.min(this.length() - 1, nextValue.length);\n\n this.commitValue(nextValue, nextFocus);\n }\n\n protected slotValue(index: number): string {\n const slot = this.slots()[index];\n return slot ?? '';\n }\n\n protected slotPlaceholder(index: number): string | null {\n if (this.placeholderChar().length === 0) {\n return null;\n }\n\n return this.slotValue(index) === '' ? this.placeholderChar() : null;\n }\n\n protected slotAriaLabel(index: number): string {\n const prefix = this.ariaLabel();\n const base = prefix?.trim() ? `${prefix.trim()} - ` : '';\n return `${base}Character ${index + 1} of ${this.length()}`;\n }\n\n protected isSlotTabbable(index: number): boolean {\n return this.activeIndex() === index;\n }\n\n private handleBackspace(index: number): void {\n if (this.disabled() || this.readonly()) {\n return;\n }\n\n const currentValue = this.currentValue();\n if (currentValue.length === 0) {\n return;\n }\n\n if (index < currentValue.length) {\n const nextValue = removeTngOtpCharacter(currentValue, index);\n const nextFocus = Math.min(index, Math.max(0, nextValue.length));\n this.commitValue(nextValue, nextFocus);\n return;\n }\n\n const previousIndex = Math.max(0, currentValue.length - 1);\n const nextValue = removeTngOtpCharacter(currentValue, previousIndex);\n this.commitValue(nextValue, Math.max(0, previousIndex));\n }\n\n private handleDelete(index: number): void {\n if (this.disabled() || this.readonly()) {\n return;\n }\n\n if (index >= this.currentValue().length) {\n return;\n }\n\n const nextValue = removeTngOtpCharacter(this.currentValue(), index);\n this.commitValue(nextValue, index);\n }\n\n private commitValue(nextValue: string, nextFocusIndex: number): void {\n const previousValue = this.currentValue();\n const normalized = this.normalizeAndClamp(nextValue);\n const didChange = normalized !== previousValue;\n\n if (this.valueInput() === undefined) {\n this.uncontrolledValue.set(normalized);\n }\n\n this.activeIndexState.set(clampOtpIndex(nextFocusIndex, this.length()));\n\n if (didChange) {\n this.valueChange.emit(normalized);\n this.onChangeCallback(normalized);\n\n if (resolveTngOtpState(this.length(), normalized) === 'complete') {\n this.complete.emit(normalized);\n }\n }\n\n queueMicrotask(() => {\n this.syncSlotInputValues();\n if (!this.focusedState() && !this.isFocusWithinHost()) {\n return;\n }\n\n this.focusSlot(this.activeIndex(), this.selectOnFocus());\n });\n }\n\n private resolveEditableIndex(index: number): number {\n const safeIndex = clampOtpIndex(index, this.length());\n const currentValueLength = this.currentValue().length;\n\n if (currentValueLength >= this.length()) {\n return safeIndex;\n }\n\n return Math.min(safeIndex, currentValueLength);\n }\n\n private focusSlot(index: number, select: boolean): void {\n const safeIndex = clampOtpIndex(index, this.length());\n const slot = this.hostRef.nativeElement.querySelector<HTMLInputElement>(\n `[data-tng-otp-slot='${safeIndex}']`,\n );\n\n if (!(slot instanceof HTMLInputElement)) {\n return;\n }\n\n slot.focus();\n if (select) {\n slot.select();\n }\n\n this.activeIndexState.set(safeIndex);\n }\n\n private syncSlotInputValues(): void {\n const slotValues = this.slots();\n const slotInputs = this.hostRef.nativeElement.querySelectorAll<HTMLInputElement>('.tng-input-otp-slot');\n slotInputs.forEach((slotInput, index) => {\n slotInput.value = slotValues[index] ?? '';\n });\n }\n\n private isFocusWithinHost(): boolean {\n const ownerDocument = this.hostRef.nativeElement.ownerDocument;\n const activeElement = ownerDocument?.activeElement;\n return activeElement instanceof Node && this.hostRef.nativeElement.contains(activeElement);\n }\n\n private normalizeAndClamp(value: string): string {\n const chars = sanitizeTngOtpCharacters(value, this.type(), this.pattern());\n const safeLength = this.length();\n return chars.slice(0, safeLength).join('');\n }\n\n private attachFormResetListener(): void {\n const formId = this.form();\n const ownerForm =\n formId !== null\n ? this.hostRef.nativeElement.ownerDocument?.getElementById(formId)\n : this.hostRef.nativeElement.closest('form');\n\n if (!(ownerForm instanceof HTMLFormElement)) {\n return;\n }\n\n this.resetUnlisten?.();\n this.resetUnlisten = this.renderer.listen(ownerForm, 'reset', () => {\n if (this.valueInput() !== undefined) {\n return;\n }\n\n const resetValue = this.normalizeAndClamp(this.defaultValue());\n this.uncontrolledValue.set(resetValue);\n this.activeIndexState.set(resolveTngOtpEntryIndex(resetValue, this.length()));\n this.valueChange.emit(resetValue);\n this.onChangeCallback(resetValue);\n });\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tng-label.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/label/tng-label.component.ts"],"names":[],"mappings":"AAGA,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGnE;AAED,qBAMa,iBAAiB;IAC5B,SAAgB,QAAQ,8EAErB;IACH,SAAgB,KAAK,8CAAqB;IAC1C,SAAgB,QAAQ,8EAErB;IAEI,cAAc,IAAI,MAAM,GAAG,IAAI;CAGvC"}
1
+ {"version":3,"file":"tng-label.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/label/tng-label.component.ts"],"names":[],"mappings":"AAGA,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGnE;AAED,qBAOa,iBAAiB;IAC5B,SAAgB,QAAQ,8EAErB;IACH,SAAgB,KAAK,8CAAqB;IAC1C,SAAgB,QAAQ,8EAErB;IAEI,cAAc,IAAI,MAAM,GAAG,IAAI;CAGvC"}
@@ -19,6 +19,7 @@ let TngLabelComponent = class TngLabelComponent {
19
19
  };
20
20
  TngLabelComponent = __decorate([
21
21
  Component({
22
+ standalone: true,
22
23
  selector: 'tng-label',
23
24
  imports: [TngLabelPrimitive],
24
25
  templateUrl: './tng-label.component.html',
@@ -1 +1 @@
1
- {"version":3,"file":"tng-label.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/label/tng-label.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC/B,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AAQM,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IACZ,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,KAAK,GAAG,KAAK,CAAS,EAAE,CAAC,CAAC;IAC1B,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IAEI,cAAc;QACnB,OAAO,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9C,CAAC;CACF,CAAA;AAZY,iBAAiB;IAN7B,SAAS,CAAC;QACT,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,CAAC,iBAAiB,CAAC;QAC5B,WAAW,EAAE,4BAA4B;QACzC,QAAQ,EAAE,2BAA2B;KACtC,CAAC;GACW,iBAAiB,CAY7B","sourcesContent":["import { booleanAttribute, Component, input } from '@angular/core';\nimport { TngLabel as TngLabelPrimitive } from '@tailng-ui/primitives';\n\nexport function resolveTngLabelForAttr(forId: string): string | null {\n const trimmedId = forId.trim();\n return trimmedId.length > 0 ? trimmedId : null;\n}\n\n@Component({\n selector: 'tng-label',\n imports: [TngLabelPrimitive],\n templateUrl: './tng-label.component.html',\n styleUrl: './tng-label.component.css',\n})\nexport class TngLabelComponent {\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly forId = input<string>('');\n public readonly required = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n\n public resolveForAttr(): string | null {\n return resolveTngLabelForAttr(this.forId());\n }\n}\n"]}
1
+ {"version":3,"file":"tng-label.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/label/tng-label.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAC/B,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC;AASM,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IACZ,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,KAAK,GAAG,KAAK,CAAS,EAAE,CAAC,CAAC;IAC1B,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IAEI,cAAc;QACnB,OAAO,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9C,CAAC;CACF,CAAA;AAZY,iBAAiB;IAP7B,SAAS,CAAC;QACT,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,CAAC,iBAAiB,CAAC;QAC5B,WAAW,EAAE,4BAA4B;QACzC,QAAQ,EAAE,2BAA2B;KACtC,CAAC;GACW,iBAAiB,CAY7B","sourcesContent":["import { booleanAttribute, Component, input } from '@angular/core';\nimport { TngLabel as TngLabelPrimitive } from '@tailng-ui/primitives';\n\nexport function resolveTngLabelForAttr(forId: string): string | null {\n const trimmedId = forId.trim();\n return trimmedId.length > 0 ? trimmedId : null;\n}\n\n@Component({\n standalone: true,\n selector: 'tng-label',\n imports: [TngLabelPrimitive],\n templateUrl: './tng-label.component.html',\n styleUrl: './tng-label.component.css',\n})\nexport class TngLabelComponent {\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly forId = input<string>('');\n public readonly required = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n\n public resolveForAttr(): string | null {\n return resolveTngLabelForAttr(this.forId());\n }\n}\n"]}
@@ -1,9 +1,13 @@
1
1
  export declare function readTngRadioChecked(event: unknown): boolean | null;
2
+ export declare function shouldEmitTngRadioCheckedChange(disabled: boolean, readonly: boolean): boolean;
2
3
  export declare class TngRadioComponent {
3
4
  readonly ariaDescribedBy: import("@angular/core").InputSignal<string | null>;
5
+ readonly ariaInvalid: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
4
6
  readonly checked: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
5
7
  readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
8
+ readonly invalid: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
6
9
  readonly name: import("@angular/core").InputSignal<string | null>;
10
+ readonly readonly: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
7
11
  readonly required: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
8
12
  readonly value: import("@angular/core").InputSignal<string>;
9
13
  readonly checkedChange: import("@angular/core").OutputEmitterRef<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"tng-radio.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/radio/tng-radio.component.ts"],"names":[],"mappings":"AAGA,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAWlE;AAED,qBAMa,iBAAiB;IAC5B,SAAgB,eAAe,qDAA8B;IAC7D,SAAgB,OAAO,8EAEpB;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,IAAI,qDAA8B;IAClD,SAAgB,QAAQ,8EAErB;IACH,SAAgB,KAAK,8CAAuB;IAE5C,SAAgB,aAAa,oDAAqB;IAE3C,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;CAQtC"}
1
+ {"version":3,"file":"tng-radio.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/radio/tng-radio.component.ts"],"names":[],"mappings":"AAGA,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,CAWlE;AAED,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAE7F;AAED,qBAOa,iBAAiB;IAC5B,SAAgB,eAAe,qDAA8B;IAC7D,SAAgB,WAAW,8EAExB;IACH,SAAgB,OAAO,8EAEpB;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,OAAO,8EAEpB;IACH,SAAgB,IAAI,qDAA8B;IAClD,SAAgB,QAAQ,8EAErB;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,KAAK,8CAAuB;IAE5C,SAAgB,aAAa,oDAAqB;IAE3C,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;CAYtC"}
@@ -11,15 +11,27 @@ export function readTngRadioChecked(event) {
11
11
  }
12
12
  return target.checked;
13
13
  }
14
+ export function shouldEmitTngRadioCheckedChange(disabled, readonly) {
15
+ return !disabled && !readonly;
16
+ }
14
17
  let TngRadioComponent = class TngRadioComponent {
15
18
  ariaDescribedBy = input(null);
19
+ ariaInvalid = input(false, {
20
+ transform: booleanAttribute,
21
+ });
16
22
  checked = input(false, {
17
23
  transform: booleanAttribute,
18
24
  });
19
25
  disabled = input(false, {
20
26
  transform: booleanAttribute,
21
27
  });
28
+ invalid = input(false, {
29
+ transform: booleanAttribute,
30
+ });
22
31
  name = input(null);
32
+ readonly = input(false, {
33
+ transform: booleanAttribute,
34
+ });
23
35
  required = input(false, {
24
36
  transform: booleanAttribute,
25
37
  });
@@ -30,11 +42,15 @@ let TngRadioComponent = class TngRadioComponent {
30
42
  if (checked === null) {
31
43
  return;
32
44
  }
45
+ if (!shouldEmitTngRadioCheckedChange(this.disabled(), this.readonly())) {
46
+ return;
47
+ }
33
48
  this.checkedChange.emit(checked);
34
49
  }
35
50
  };
36
51
  TngRadioComponent = __decorate([
37
52
  Component({
53
+ standalone: true,
38
54
  selector: 'tng-radio',
39
55
  imports: [TngRadioPrimitive],
40
56
  templateUrl: './tng-radio.component.html',
@@ -1 +1 @@
1
- {"version":3,"file":"tng-radio.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/radio/tng-radio.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,IAAI,CAAC,CAAC,MAAM,YAAY,gBAAgB,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAQM,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IACZ,eAAe,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;IAC7C,OAAO,GAAG,KAAK,CAA4B,KAAK,EAAE;QAChE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,IAAI,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;IAClC,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,KAAK,GAAG,KAAK,CAAS,IAAI,CAAC,CAAC;IAE5B,aAAa,GAAG,MAAM,EAAW,CAAC;IAE3C,QAAQ,CAAC,KAAc;QAC5B,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;CACF,CAAA;AAxBY,iBAAiB;IAN7B,SAAS,CAAC;QACT,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,CAAC,iBAAiB,CAAC;QAC5B,WAAW,EAAE,4BAA4B;QACzC,QAAQ,EAAE,2BAA2B;KACtC,CAAC;GACW,iBAAiB,CAwB7B","sourcesContent":["import { booleanAttribute, Component, input, output } from '@angular/core';\nimport { TngRadio as TngRadioPrimitive } from '@tailng-ui/primitives';\n\nexport function readTngRadioChecked(event: unknown): boolean | 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.checked;\n}\n\n@Component({\n selector: 'tng-radio',\n imports: [TngRadioPrimitive],\n templateUrl: './tng-radio.component.html',\n styleUrl: './tng-radio.component.css',\n})\nexport class TngRadioComponent {\n public readonly ariaDescribedBy = input<string | null>(null);\n public readonly checked = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly name = input<string | null>(null);\n public readonly required = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly value = input<string>('on');\n\n public readonly checkedChange = output<boolean>();\n\n public onChange(event: unknown): void {\n const checked = readTngRadioChecked(event);\n if (checked === null) {\n return;\n }\n\n this.checkedChange.emit(checked);\n }\n}\n"]}
1
+ {"version":3,"file":"tng-radio.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/radio/tng-radio.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,QAAQ,IAAI,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAEtE,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,IAAI,CAAC,CAAC,MAAM,YAAY,gBAAgB,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,QAAiB,EAAE,QAAiB;IAClF,OAAO,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC;AAChC,CAAC;AASM,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IACZ,eAAe,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;IAC7C,WAAW,GAAG,KAAK,CAA4B,KAAK,EAAE;QACpE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,OAAO,GAAG,KAAK,CAA4B,KAAK,EAAE;QAChE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,OAAO,GAAG,KAAK,CAA4B,KAAK,EAAE;QAChE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,IAAI,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;IAClC,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,KAAK,GAAG,KAAK,CAAS,IAAI,CAAC,CAAC;IAE5B,aAAa,GAAG,MAAM,EAAW,CAAC;IAE3C,QAAQ,CAAC,KAAc;QAC5B,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;YACvE,OAAO;QACT,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;CACF,CAAA;AArCY,iBAAiB;IAP7B,SAAS,CAAC;QACT,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,WAAW;QACrB,OAAO,EAAE,CAAC,iBAAiB,CAAC;QAC5B,WAAW,EAAE,4BAA4B;QACzC,QAAQ,EAAE,2BAA2B;KACtC,CAAC;GACW,iBAAiB,CAqC7B","sourcesContent":["import { booleanAttribute, Component, input, output } from '@angular/core';\nimport { TngRadio as TngRadioPrimitive } from '@tailng-ui/primitives';\n\nexport function readTngRadioChecked(event: unknown): boolean | 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.checked;\n}\n\nexport function shouldEmitTngRadioCheckedChange(disabled: boolean, readonly: boolean): boolean {\n return !disabled && !readonly;\n}\n\n@Component({\n standalone: true,\n selector: 'tng-radio',\n imports: [TngRadioPrimitive],\n templateUrl: './tng-radio.component.html',\n styleUrl: './tng-radio.component.css',\n})\nexport class TngRadioComponent {\n public readonly ariaDescribedBy = input<string | null>(null);\n public readonly ariaInvalid = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly checked = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly invalid = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly name = 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 value = input<string>('on');\n\n public readonly checkedChange = output<boolean>();\n\n public onChange(event: unknown): void {\n const checked = readTngRadioChecked(event);\n if (checked === null) {\n return;\n }\n\n if (!shouldEmitTngRadioCheckedChange(this.disabled(), this.readonly())) {\n return;\n }\n\n this.checkedChange.emit(checked);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tng-slider.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/slider/tng-slider.component.ts"],"names":[],"mappings":"AAQA,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAWrE;AAED,qBAMa,kBAAkB;IAC7B,SAAgB,QAAQ,8EAErB;IACH,SAAgB,GAAG,4EAGhB;IACH,SAAgB,GAAG,4EAGhB;IACH,SAAgB,IAAI,4EAGjB;IACH,SAAgB,KAAK,4EAGlB;IAEH,SAAgB,WAAW,mDAAoB;IAExC,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;CAQrC"}
1
+ {"version":3,"file":"tng-slider.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/slider/tng-slider.component.ts"],"names":[],"mappings":"AAQA,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAWrE;AAED,qBAOa,kBAAkB;IAC7B,SAAgB,QAAQ,8EAErB;IACH,SAAgB,GAAG,4EAGhB;IACH,SAAgB,GAAG,4EAGhB;IACH,SAAgB,IAAI,4EAGjB;IACH,SAAgB,KAAK,4EAGlB;IAEH,SAAgB,WAAW,mDAAoB;IAExC,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;CAQrC"}
@@ -38,6 +38,7 @@ let TngSliderComponent = class TngSliderComponent {
38
38
  };
39
39
  TngSliderComponent = __decorate([
40
40
  Component({
41
+ standalone: true,
41
42
  selector: 'tng-slider',
42
43
  imports: [TngSliderPrimitive],
43
44
  templateUrl: './tng-slider.component.html',
@@ -1 +1 @@
1
- {"version":3,"file":"tng-slider.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/slider/tng-slider.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,SAAS,IAAI,kBAAkB,GAChC,MAAM,uBAAuB,CAAC;AAE/B,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,IAAI,CAAC,CAAC,MAAM,YAAY,gBAAgB,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAQM,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IACb,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,GAAG,GAAG,KAAK,CAA0B,GAAG,EAAE;QACxD,SAAS,EAAE,CAAC,KAAsB,EAAU,EAAE,CAC5C,qBAAqB,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC3E,CAAC,CAAC;IACa,GAAG,GAAG,KAAK,CAA0B,CAAC,EAAE;QACtD,SAAS,EAAE,CAAC,KAAsB,EAAU,EAAE,CAC5C,qBAAqB,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC3E,CAAC,CAAC;IACa,IAAI,GAAG,KAAK,CAA0B,CAAC,EAAE;QACvD,SAAS,EAAE,CAAC,KAAsB,EAAU,EAAE,CAC5C,sBAAsB,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC5E,CAAC,CAAC;IACa,KAAK,GAAG,KAAK,CAA0B,CAAC,EAAE;QACxD,SAAS,EAAE,CAAC,KAAsB,EAAU,EAAE,CAC5C,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;KACpD,CAAC,CAAC;IAEa,WAAW,GAAG,MAAM,EAAU,CAAC;IAExC,OAAO,CAAC,KAAc;QAC3B,MAAM,SAAS,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;CACF,CAAA;AA/BY,kBAAkB;IAN9B,SAAS,CAAC;QACT,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,CAAC,kBAAkB,CAAC;QAC7B,WAAW,EAAE,6BAA6B;QAC1C,QAAQ,EAAE,4BAA4B;KACvC,CAAC;GACW,kBAAkB,CA+B9B","sourcesContent":["import { booleanAttribute, Component, input, output } from '@angular/core';\nimport {\n normalizeTngSliderMax,\n normalizeTngSliderMin,\n normalizeTngSliderStep,\n TngSlider as TngSliderPrimitive,\n} from '@tailng-ui/primitives';\n\nexport function readTngSliderEventValue(event: unknown): number | 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 Number(target.value);\n}\n\n@Component({\n selector: 'tng-slider',\n imports: [TngSliderPrimitive],\n templateUrl: './tng-slider.component.html',\n styleUrl: './tng-slider.component.css',\n})\nexport class TngSliderComponent {\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly max = input<number, number | string>(100, {\n transform: (value: number | string): number =>\n normalizeTngSliderMax(typeof value === 'number' ? value : Number(value)),\n });\n public readonly min = input<number, number | string>(0, {\n transform: (value: number | string): number =>\n normalizeTngSliderMin(typeof value === 'number' ? value : Number(value)),\n });\n public readonly step = input<number, number | string>(1, {\n transform: (value: number | string): number =>\n normalizeTngSliderStep(typeof value === 'number' ? value : Number(value)),\n });\n public readonly value = input<number, number | string>(0, {\n transform: (value: number | string): number =>\n typeof value === 'number' ? value : Number(value),\n });\n\n public readonly valueChange = output<number>();\n\n public onInput(event: unknown): void {\n const nextValue = readTngSliderEventValue(event);\n if (nextValue === null) {\n return;\n }\n\n this.valueChange.emit(nextValue);\n }\n}\n"]}
1
+ {"version":3,"file":"tng-slider.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/slider/tng-slider.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,SAAS,IAAI,kBAAkB,GAChC,MAAM,uBAAuB,CAAC;AAE/B,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,IAAI,CAAC,CAAC,MAAM,YAAY,gBAAgB,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AASM,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IACb,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,GAAG,GAAG,KAAK,CAA0B,GAAG,EAAE;QACxD,SAAS,EAAE,CAAC,KAAsB,EAAU,EAAE,CAC5C,qBAAqB,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC3E,CAAC,CAAC;IACa,GAAG,GAAG,KAAK,CAA0B,CAAC,EAAE;QACtD,SAAS,EAAE,CAAC,KAAsB,EAAU,EAAE,CAC5C,qBAAqB,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC3E,CAAC,CAAC;IACa,IAAI,GAAG,KAAK,CAA0B,CAAC,EAAE;QACvD,SAAS,EAAE,CAAC,KAAsB,EAAU,EAAE,CAC5C,sBAAsB,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC5E,CAAC,CAAC;IACa,KAAK,GAAG,KAAK,CAA0B,CAAC,EAAE;QACxD,SAAS,EAAE,CAAC,KAAsB,EAAU,EAAE,CAC5C,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;KACpD,CAAC,CAAC;IAEa,WAAW,GAAG,MAAM,EAAU,CAAC;IAExC,OAAO,CAAC,KAAc;QAC3B,MAAM,SAAS,GAAG,uBAAuB,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;CACF,CAAA;AA/BY,kBAAkB;IAP9B,SAAS,CAAC;QACT,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,CAAC,kBAAkB,CAAC;QAC7B,WAAW,EAAE,6BAA6B;QAC1C,QAAQ,EAAE,4BAA4B;KACvC,CAAC;GACW,kBAAkB,CA+B9B","sourcesContent":["import { booleanAttribute, Component, input, output } from '@angular/core';\nimport {\n normalizeTngSliderMax,\n normalizeTngSliderMin,\n normalizeTngSliderStep,\n TngSlider as TngSliderPrimitive,\n} from '@tailng-ui/primitives';\n\nexport function readTngSliderEventValue(event: unknown): number | 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 Number(target.value);\n}\n\n@Component({\n standalone: true,\n selector: 'tng-slider',\n imports: [TngSliderPrimitive],\n templateUrl: './tng-slider.component.html',\n styleUrl: './tng-slider.component.css',\n})\nexport class TngSliderComponent {\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly max = input<number, number | string>(100, {\n transform: (value: number | string): number =>\n normalizeTngSliderMax(typeof value === 'number' ? value : Number(value)),\n });\n public readonly min = input<number, number | string>(0, {\n transform: (value: number | string): number =>\n normalizeTngSliderMin(typeof value === 'number' ? value : Number(value)),\n });\n public readonly step = input<number, number | string>(1, {\n transform: (value: number | string): number =>\n normalizeTngSliderStep(typeof value === 'number' ? value : Number(value)),\n });\n public readonly value = input<number, number | string>(0, {\n transform: (value: number | string): number =>\n typeof value === 'number' ? value : Number(value),\n });\n\n public readonly valueChange = output<number>();\n\n public onInput(event: unknown): void {\n const nextValue = readTngSliderEventValue(event);\n if (nextValue === null) {\n return;\n }\n\n this.valueChange.emit(nextValue);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tng-switch.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/switch/tng-switch.component.ts"],"names":[],"mappings":"AAGA,KAAK,sBAAsB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,GAChE,QAAQ,CAAC;IAAE,cAAc,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC,CAAC;AAE3C,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAE9D;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAUpE;AAED,qBAMa,kBAAkB;IAC7B,SAAgB,SAAS,qDAA8B;IACvD,SAAgB,OAAO,8EAEpB;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,IAAI,qDAA8B;IAClD,SAAgB,QAAQ,8EAErB;IACH,SAAgB,KAAK,8CAAuB;IAE5C,SAAgB,aAAa,oDAAqB;IAE3C,SAAS,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI;IAc9C,QAAQ,IAAI,IAAI;CAOxB"}
1
+ {"version":3,"file":"tng-switch.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/switch/tng-switch.component.ts"],"names":[],"mappings":"AAGA,KAAK,sBAAsB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,GAChE,QAAQ,CAAC;IAAE,cAAc,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC,CAAC;AAE3C,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAE9D;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAUpE;AAED,qBAOa,kBAAkB;IAC7B,SAAgB,SAAS,qDAA8B;IACvD,SAAgB,OAAO,8EAEpB;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,IAAI,qDAA8B;IAClD,SAAgB,QAAQ,8EAErB;IACH,SAAgB,KAAK,8CAAuB;IAE5C,SAAgB,aAAa,oDAAqB;IAE3C,SAAS,CAAC,KAAK,EAAE,sBAAsB,GAAG,IAAI;IAc9C,QAAQ,IAAI,IAAI;CAOxB"}
@@ -47,6 +47,7 @@ let TngSwitchComponent = class TngSwitchComponent {
47
47
  };
48
48
  TngSwitchComponent = __decorate([
49
49
  Component({
50
+ standalone: true,
50
51
  selector: 'tng-switch',
51
52
  imports: [TngSwitchPrimitive],
52
53
  templateUrl: './tng-switch.component.html',
@@ -1 +1 @@
1
- {"version":3,"file":"tng-switch.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/switch/tng-switch.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,SAAS,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAKxE,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO,CAAC,OAAO,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,GAAW;IAClD,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAQM,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IACb,SAAS,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;IACvC,OAAO,GAAG,KAAK,CAA4B,KAAK,EAAE;QAChE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,IAAI,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;IAClC,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,KAAK,GAAG,KAAK,CAAS,IAAI,CAAC,CAAC;IAE5B,aAAa,GAAG,MAAM,EAAW,CAAC;IAE3C,SAAS,CAAC,KAA6B;QAC5C,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,wBAAwB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtD,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACvD,OAAO;QACT,CAAC;QAED,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAEM,QAAQ;QACb,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAChE,CAAC;CACF,CAAA;AArCY,kBAAkB;IAN9B,SAAS,CAAC;QACT,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,CAAC,kBAAkB,CAAC;QAC7B,WAAW,EAAE,6BAA6B;QAC1C,QAAQ,EAAE,4BAA4B;KACvC,CAAC;GACW,kBAAkB,CAqC9B","sourcesContent":["import { booleanAttribute, Component, input, output } from '@angular/core';\nimport { TngSwitch as TngSwitchPrimitive } from '@tailng-ui/primitives';\n\ntype TngSwitchKeyboardEvent = Readonly<Pick<KeyboardEvent, 'key'>> &\n Readonly<{ preventDefault: () => void }>;\n\nexport function toggleTngSwitchState(checked: boolean): boolean {\n return !checked;\n}\n\nexport function resolveTngSwitchArrowKey(key: string): boolean | null {\n if (key === 'ArrowLeft') {\n return false;\n }\n\n if (key === 'ArrowRight') {\n return true;\n }\n\n return null;\n}\n\n@Component({\n selector: 'tng-switch',\n imports: [TngSwitchPrimitive],\n templateUrl: './tng-switch.component.html',\n styleUrl: './tng-switch.component.css',\n})\nexport class TngSwitchComponent {\n public readonly ariaLabel = input<string | null>(null);\n public readonly checked = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly name = input<string | null>(null);\n public readonly required = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly value = input<string>('on');\n\n public readonly checkedChange = output<boolean>();\n\n public onKeydown(event: TngSwitchKeyboardEvent): void {\n if (this.disabled()) {\n return;\n }\n\n const nextValue = resolveTngSwitchArrowKey(event.key);\n if (nextValue === null || nextValue === this.checked()) {\n return;\n }\n\n event.preventDefault();\n this.checkedChange.emit(nextValue);\n }\n\n public onToggle(): void {\n if (this.disabled()) {\n return;\n }\n\n this.checkedChange.emit(toggleTngSwitchState(this.checked()));\n }\n}\n"]}
1
+ {"version":3,"file":"tng-switch.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/switch/tng-switch.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EAAE,SAAS,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAKxE,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,OAAO,CAAC,OAAO,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,GAAW;IAClD,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,GAAG,KAAK,YAAY,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AASM,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IACb,SAAS,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;IACvC,OAAO,GAAG,KAAK,CAA4B,KAAK,EAAE;QAChE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,IAAI,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;IAClC,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,KAAK,GAAG,KAAK,CAAS,IAAI,CAAC,CAAC;IAE5B,aAAa,GAAG,MAAM,EAAW,CAAC;IAE3C,SAAS,CAAC,KAA6B;QAC5C,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,MAAM,SAAS,GAAG,wBAAwB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACtD,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;YACvD,OAAO;QACT,CAAC;QAED,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAEM,QAAQ;QACb,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAChE,CAAC;CACF,CAAA;AArCY,kBAAkB;IAP9B,SAAS,CAAC;QACT,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,YAAY;QACtB,OAAO,EAAE,CAAC,kBAAkB,CAAC;QAC7B,WAAW,EAAE,6BAA6B;QAC1C,QAAQ,EAAE,4BAA4B;KACvC,CAAC;GACW,kBAAkB,CAqC9B","sourcesContent":["import { booleanAttribute, Component, input, output } from '@angular/core';\nimport { TngSwitch as TngSwitchPrimitive } from '@tailng-ui/primitives';\n\ntype TngSwitchKeyboardEvent = Readonly<Pick<KeyboardEvent, 'key'>> &\n Readonly<{ preventDefault: () => void }>;\n\nexport function toggleTngSwitchState(checked: boolean): boolean {\n return !checked;\n}\n\nexport function resolveTngSwitchArrowKey(key: string): boolean | null {\n if (key === 'ArrowLeft') {\n return false;\n }\n\n if (key === 'ArrowRight') {\n return true;\n }\n\n return null;\n}\n\n@Component({\n standalone: true,\n selector: 'tng-switch',\n imports: [TngSwitchPrimitive],\n templateUrl: './tng-switch.component.html',\n styleUrl: './tng-switch.component.css',\n})\nexport class TngSwitchComponent {\n public readonly ariaLabel = input<string | null>(null);\n public readonly checked = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly name = input<string | null>(null);\n public readonly required = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly value = input<string>('on');\n\n public readonly checkedChange = output<boolean>();\n\n public onKeydown(event: TngSwitchKeyboardEvent): void {\n if (this.disabled()) {\n return;\n }\n\n const nextValue = resolveTngSwitchArrowKey(event.key);\n if (nextValue === null || nextValue === this.checked()) {\n return;\n }\n\n event.preventDefault();\n this.checkedChange.emit(nextValue);\n }\n\n public onToggle(): void {\n if (this.disabled()) {\n return;\n }\n\n this.checkedChange.emit(toggleTngSwitchState(this.checked()));\n }\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import { type TngTextareaResize } from '@tailng-ui/primitives';
1
2
  type NullableBooleanInput = boolean | null | string | undefined;
2
3
  export declare function readTngTextareaEventValue(event: unknown): string | null;
3
4
  export declare class TngTextareaComponent {
@@ -9,6 +10,7 @@ export declare class TngTextareaComponent {
9
10
  readonly readonly: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
10
11
  readonly required: import("@angular/core").InputSignalWithTransform<boolean, string | boolean>;
11
12
  readonly rows: import("@angular/core").InputSignalWithTransform<number, string | number>;
13
+ readonly resize: import("@angular/core").InputSignalWithTransform<TngTextareaResize, string>;
12
14
  readonly value: import("@angular/core").InputSignal<string | null>;
13
15
  readonly valueChange: import("@angular/core").OutputEmitterRef<string>;
14
16
  onInput(event: unknown): void;
@@ -1 +1 @@
1
- {"version":3,"file":"tng-textarea.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/textarea/tng-textarea.component.ts"],"names":[],"mappings":"AAOA,KAAK,oBAAoB,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;AAEhE,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAWvE;AAED,qBAMa,oBAAoB;IAC/B,SAAgB,eAAe,qDAA8B;IAC7D,SAAgB,WAAW,yFAExB;IACH,SAAgB,YAAY,yFAEzB;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,WAAW,qDAA8B;IACzD,SAAgB,QAAQ,8EAErB;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,IAAI,4EAGjB;IACH,SAAgB,KAAK,qDAA8B;IAEnD,SAAgB,WAAW,mDAAoB;IAExC,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;CAQrC"}
1
+ {"version":3,"file":"tng-textarea.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/textarea/tng-textarea.component.ts"],"names":[],"mappings":"AACA,OAAO,EAKL,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAC;AAE/B,KAAK,oBAAoB,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;AAEhE,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAWvE;AAED,qBAOa,oBAAoB;IAC/B,SAAgB,eAAe,qDAA8B;IAC7D,SAAgB,WAAW,yFAExB;IACH,SAAgB,YAAY,yFAEzB;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,WAAW,qDAA8B;IACzD,SAAgB,QAAQ,8EAErB;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,IAAI,4EAGjB;IACH,SAAgB,MAAM,8EAEnB;IACH,SAAgB,KAAK,qDAA8B;IAEnD,SAAgB,WAAW,mDAAoB;IAExC,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;CAQrC"}
@@ -1,6 +1,6 @@
1
1
  import { __decorate } from "tslib";
2
2
  import { booleanAttribute, Component, input, output } from '@angular/core';
3
- import { coerceTngTextareaNullableBoolean, normalizeTngTextareaRows, TngTextarea as TngTextareaPrimitive, } from '@tailng-ui/primitives';
3
+ import { coerceTngInputNullableBoolean, normalizeTngTextareaResize, normalizeTngTextareaRows, TngInput, } from '@tailng-ui/primitives';
4
4
  export function readTngTextareaEventValue(event) {
5
5
  if (!(event instanceof Event)) {
6
6
  return null;
@@ -14,10 +14,10 @@ export function readTngTextareaEventValue(event) {
14
14
  let TngTextareaComponent = class TngTextareaComponent {
15
15
  ariaDescribedBy = input(null);
16
16
  ariaInvalid = input(null, {
17
- transform: coerceTngTextareaNullableBoolean,
17
+ transform: coerceTngInputNullableBoolean,
18
18
  });
19
19
  ariaRequired = input(null, {
20
- transform: coerceTngTextareaNullableBoolean,
20
+ transform: coerceTngInputNullableBoolean,
21
21
  });
22
22
  disabled = input(false, {
23
23
  transform: booleanAttribute,
@@ -32,6 +32,9 @@ let TngTextareaComponent = class TngTextareaComponent {
32
32
  rows = input(3, {
33
33
  transform: (value) => normalizeTngTextareaRows(typeof value === 'number' ? value : Number(value)),
34
34
  });
35
+ resize = input('vertical', {
36
+ transform: normalizeTngTextareaResize,
37
+ });
35
38
  value = input(null);
36
39
  valueChange = output();
37
40
  onInput(event) {
@@ -44,8 +47,9 @@ let TngTextareaComponent = class TngTextareaComponent {
44
47
  };
45
48
  TngTextareaComponent = __decorate([
46
49
  Component({
50
+ standalone: true,
47
51
  selector: 'tng-textarea',
48
- imports: [TngTextareaPrimitive],
52
+ imports: [TngInput],
49
53
  templateUrl: './tng-textarea.component.html',
50
54
  styleUrl: './tng-textarea.component.css',
51
55
  })
@@ -1 +1 @@
1
- {"version":3,"file":"tng-textarea.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/textarea/tng-textarea.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EACL,gCAAgC,EAChC,wBAAwB,EACxB,WAAW,IAAI,oBAAoB,GACpC,MAAM,uBAAuB,CAAC;AAI/B,MAAM,UAAU,yBAAyB,CAAC,KAAc;IACtD,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,IAAI,CAAC,CAAC,MAAM,YAAY,mBAAmB,CAAC,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,CAAC;AAQM,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IACf,eAAe,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;IAC7C,WAAW,GAAG,KAAK,CAAuC,IAAI,EAAE;QAC9E,SAAS,EAAE,gCAAgC;KAC5C,CAAC,CAAC;IACa,YAAY,GAAG,KAAK,CAAuC,IAAI,EAAE;QAC/E,SAAS,EAAE,gCAAgC;KAC5C,CAAC,CAAC;IACa,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,WAAW,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;IACzC,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,IAAI,GAAG,KAAK,CAA0B,CAAC,EAAE;QACvD,SAAS,EAAE,CAAC,KAAsB,EAAU,EAAE,CAC5C,wBAAwB,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC9E,CAAC,CAAC;IACa,KAAK,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;IAEnC,WAAW,GAAG,MAAM,EAAU,CAAC;IAExC,OAAO,CAAC,KAAc;QAC3B,MAAM,KAAK,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;CACF,CAAA;AAlCY,oBAAoB;IANhC,SAAS,CAAC;QACT,QAAQ,EAAE,cAAc;QACxB,OAAO,EAAE,CAAC,oBAAoB,CAAC;QAC/B,WAAW,EAAE,+BAA+B;QAC5C,QAAQ,EAAE,8BAA8B;KACzC,CAAC;GACW,oBAAoB,CAkChC","sourcesContent":["import { booleanAttribute, Component, input, output } from '@angular/core';\nimport {\n coerceTngTextareaNullableBoolean,\n normalizeTngTextareaRows,\n TngTextarea as TngTextareaPrimitive,\n} from '@tailng-ui/primitives';\n\ntype NullableBooleanInput = boolean | null | string | undefined;\n\nexport function readTngTextareaEventValue(event: unknown): string | null {\n if (!(event instanceof Event)) {\n return null;\n }\n\n const target = event.target;\n if (!(target instanceof HTMLTextAreaElement)) {\n return null;\n }\n\n return target.value;\n}\n\n@Component({\n selector: 'tng-textarea',\n imports: [TngTextareaPrimitive],\n templateUrl: './tng-textarea.component.html',\n styleUrl: './tng-textarea.component.css',\n})\nexport class TngTextareaComponent {\n public readonly ariaDescribedBy = input<string | null>(null);\n public readonly ariaInvalid = input<boolean | null, NullableBooleanInput>(null, {\n transform: coerceTngTextareaNullableBoolean,\n });\n public readonly ariaRequired = input<boolean | null, NullableBooleanInput>(null, {\n transform: coerceTngTextareaNullableBoolean,\n });\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\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 rows = input<number, number | string>(3, {\n transform: (value: number | string): number =>\n normalizeTngTextareaRows(typeof value === 'number' ? value : Number(value)),\n });\n public readonly value = input<string | null>(null);\n\n public readonly valueChange = output<string>();\n\n public onInput(event: unknown): void {\n const value = readTngTextareaEventValue(event);\n if (value === null) {\n return;\n }\n\n this.valueChange.emit(value);\n }\n}\n"]}
1
+ {"version":3,"file":"tng-textarea.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/textarea/tng-textarea.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC3E,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,EAC1B,wBAAwB,EACxB,QAAQ,GAET,MAAM,uBAAuB,CAAC;AAI/B,MAAM,UAAU,yBAAyB,CAAC,KAAc;IACtD,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,IAAI,CAAC,CAAC,MAAM,YAAY,mBAAmB,CAAC,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC;AACtB,CAAC;AASM,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IACf,eAAe,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;IAC7C,WAAW,GAAG,KAAK,CAAuC,IAAI,EAAE;QAC9E,SAAS,EAAE,6BAA6B;KACzC,CAAC,CAAC;IACa,YAAY,GAAG,KAAK,CAAuC,IAAI,EAAE;QAC/E,SAAS,EAAE,6BAA6B;KACzC,CAAC,CAAC;IACa,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,WAAW,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;IACzC,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,QAAQ,GAAG,KAAK,CAA4B,KAAK,EAAE;QACjE,SAAS,EAAE,gBAAgB;KAC5B,CAAC,CAAC;IACa,IAAI,GAAG,KAAK,CAA0B,CAAC,EAAE;QACvD,SAAS,EAAE,CAAC,KAAsB,EAAU,EAAE,CAC5C,wBAAwB,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;KAC9E,CAAC,CAAC;IACa,MAAM,GAAG,KAAK,CAAgD,UAAU,EAAE;QACxF,SAAS,EAAE,0BAA0B;KACtC,CAAC,CAAC;IACa,KAAK,GAAG,KAAK,CAAgB,IAAI,CAAC,CAAC;IAEnC,WAAW,GAAG,MAAM,EAAU,CAAC;IAExC,OAAO,CAAC,KAAc;QAC3B,MAAM,KAAK,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;CACF,CAAA;AArCY,oBAAoB;IAPhC,SAAS,CAAC;QACT,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,cAAc;QACxB,OAAO,EAAE,CAAC,QAAQ,CAAC;QACnB,WAAW,EAAE,+BAA+B;QAC5C,QAAQ,EAAE,8BAA8B;KACzC,CAAC;GACW,oBAAoB,CAqChC","sourcesContent":["import { booleanAttribute, Component, input, output } from '@angular/core';\nimport {\n coerceTngInputNullableBoolean,\n normalizeTngTextareaResize,\n normalizeTngTextareaRows,\n TngInput,\n type TngTextareaResize,\n} from '@tailng-ui/primitives';\n\ntype NullableBooleanInput = boolean | null | string | undefined;\n\nexport function readTngTextareaEventValue(event: unknown): string | null {\n if (!(event instanceof Event)) {\n return null;\n }\n\n const target = event.target;\n if (!(target instanceof HTMLTextAreaElement)) {\n return null;\n }\n\n return target.value;\n}\n\n@Component({\n standalone: true,\n selector: 'tng-textarea',\n imports: [TngInput],\n templateUrl: './tng-textarea.component.html',\n styleUrl: './tng-textarea.component.css',\n})\nexport class TngTextareaComponent {\n public readonly ariaDescribedBy = input<string | null>(null);\n public readonly ariaInvalid = input<boolean | null, NullableBooleanInput>(null, {\n transform: coerceTngInputNullableBoolean,\n });\n public readonly ariaRequired = input<boolean | null, NullableBooleanInput>(null, {\n transform: coerceTngInputNullableBoolean,\n });\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\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 rows = input<number, number | string>(3, {\n transform: (value: number | string): number =>\n normalizeTngTextareaRows(typeof value === 'number' ? value : Number(value)),\n });\n public readonly resize = input<TngTextareaResize, TngTextareaResize | string>('vertical', {\n transform: normalizeTngTextareaResize,\n });\n public readonly value = input<string | null>(null);\n\n public readonly valueChange = output<string>();\n\n public onInput(event: unknown): void {\n const value = readTngTextareaEventValue(event);\n if (value === null) {\n return;\n }\n\n this.valueChange.emit(value);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tng-toggle.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/toggle/tng-toggle.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,MAAM,EAOP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAqB,KAAK,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAO9E,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAE9D;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,GACrB,MAAM,CAER;AAED,KAAK,oBAAoB,GAAG,EAAE,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAqB/E,qBAmBa,kBAAmB,YAAW,oBAAoB,EAAE,MAAM;IACrE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAGnB;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiB;IAE7C,OAAO,CAAC,eAAe,CAA6C;IACpE,OAAO,CAAC,gBAAgB,CAA8B;IAEtD,SAAgB,SAAS,qDAA8B;IACvD,SAAgB,cAAc,qDAA8B;IAC5D,SAAgB,eAAe,qDAA8B;IAC7D,SAAgB,KAAK,qDAA8B;IAEnD,SAAgB,OAAO,yFAEpB;IACH,SAAgB,cAAc,8EAE3B;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,YAAY,8CAA4B;IACxD,SAAgB,cAAc,8CAA6B;IAE3D,SAAgB,aAAa,oDAAqB;IAElD,SAAS,CAAC,QAAQ,CAAC,gBAAgB,0CAOhC;IAEH,SAAS,CAAC,QAAQ,CAAC,eAAe,0CAgB/B;;IAMI,QAAQ,IAAI,IAAI;IAIhB,MAAM,IAAI,IAAI;IAId,wBAAwB,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI;IAepD,YAAY,IAAI,MAAM,GAAG,IAAI;IAkB7B,gBAAgB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAKpD,iBAAiB,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAKvC,gBAAgB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAK3C,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAKvC,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,iBAAiB;CAG1B"}
1
+ {"version":3,"file":"tng-toggle.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/toggle/tng-toggle.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,MAAM,EAOP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAqB,KAAK,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAO9E,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAE9D;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,GACrB,MAAM,CAER;AAED,KAAK,oBAAoB,GAAG,EAAE,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAqB/E,qBAoBa,kBAAmB,YAAW,oBAAoB,EAAE,MAAM;IACrE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAGnB;IACH,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiB;IAE7C,OAAO,CAAC,eAAe,CAA6C;IACpE,OAAO,CAAC,gBAAgB,CAA8B;IAEtD,SAAgB,SAAS,qDAA8B;IACvD,SAAgB,cAAc,qDAA8B;IAC5D,SAAgB,eAAe,qDAA8B;IAC7D,SAAgB,KAAK,qDAA8B;IAEnD,SAAgB,OAAO,yFAEpB;IACH,SAAgB,cAAc,8EAE3B;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,YAAY,8CAA4B;IACxD,SAAgB,cAAc,8CAA6B;IAE3D,SAAgB,aAAa,oDAAqB;IAElD,SAAS,CAAC,QAAQ,CAAC,gBAAgB,0CAOhC;IAEH,SAAS,CAAC,QAAQ,CAAC,eAAe,0CAgB/B;;IAMI,QAAQ,IAAI,IAAI;IAIhB,MAAM,IAAI,IAAI;IAId,wBAAwB,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI;IAepD,YAAY,IAAI,MAAM,GAAG,IAAI;IAkB7B,gBAAgB,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAKpD,iBAAiB,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI;IAKvC,gBAAgB,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI;IAK3C,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAKvC,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,iBAAiB;CAG1B"}
@@ -129,6 +129,7 @@ let TngToggleComponent = class TngToggleComponent {
129
129
  };
130
130
  TngToggleComponent = __decorate([
131
131
  Component({
132
+ standalone: true,
132
133
  selector: 'tng-toggle',
133
134
  imports: [TngTogglePrimitive],
134
135
  templateUrl: './tng-toggle.component.html',
@@ -1 +1 @@
1
- {"version":3,"file":"tng-toggle.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/toggle/tng-toggle.component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n booleanAttribute,\n Component,\n OnInit,\n computed,\n forwardRef,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\nimport {\n coerceTngToggleNullableBoolean,\n TngToggle as TngTogglePrimitive,\n TngToggleGroup as TngToggleGroupPrimitive,\n} from '@tailng-ui/primitives';\n\nexport function toggleTngToggleState(pressed: boolean): boolean {\n return !pressed;\n}\n\nexport function resolveTngToggleAriaLabel(\n pressed: boolean,\n pressedLabel: string,\n unpressedLabel: string,\n): string {\n return pressed ? pressedLabel : unpressedLabel;\n}\n\ntype NullableBooleanInput = '' | 'false' | 'true' | boolean | null | undefined;\n\nfunction normalizeStringValue(value: string | null | undefined): string | null {\n if (value === undefined || value === null) {\n return null;\n }\n\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : null;\n}\n\nconst noControlChange = (_value: boolean): void => undefined;\nconst noControlTouch = (): void => undefined;\n\nfunction injectParentToggleGroup(): TngToggleGroupPrimitive | null {\n return inject(TngToggleGroupPrimitive, {\n optional: true,\n skipSelf: true,\n });\n}\n\n@Component({\n selector: 'tng-toggle',\n imports: [TngTogglePrimitive],\n templateUrl: './tng-toggle.component.html',\n styleUrl: './tng-toggle.component.css',\n viewProviders: [\n {\n provide: TngToggleGroupPrimitive,\n useFactory: injectParentToggleGroup,\n },\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TngToggleComponent),\n multi: true,\n },\n ],\n})\nexport class TngToggleComponent implements ControlValueAccessor, OnInit {\n private readonly group = inject(TngToggleGroupPrimitive, {\n optional: true,\n skipSelf: true,\n });\n private readonly internalPressed = signal(false);\n private readonly cvaModeEnabled = signal(false);\n private readonly cvaPressed = signal(false);\n private readonly cvaDisabled = signal(false);\n\n private onControlChange: (value: boolean) => void = noControlChange;\n private onControlTouched: () => void = noControlTouch;\n\n public readonly ariaLabel = input<string | null>(null);\n public readonly ariaLabelledby = input<string | null>(null);\n public readonly ariaDescribedBy = input<string | null>(null);\n public readonly value = input<string | null>(null);\n\n public readonly pressed = input<boolean | null, NullableBooleanInput>(null, {\n transform: coerceTngToggleNullableBoolean,\n });\n public readonly defaultPressed = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly pressedLabel = input<string>('Enabled');\n public readonly unpressedLabel = input<string>('Disabled');\n\n public readonly pressedChange = output<boolean>();\n\n protected readonly resolvedDisabled = computed<boolean>(() => {\n const groupDisabled = this.group?.isGroupDisabled() === true && this.groupManagesState();\n if (this.cvaModeEnabled()) {\n return this.cvaDisabled() || groupDisabled;\n }\n\n return this.disabled() || groupDisabled;\n });\n\n protected readonly resolvedPressed = computed<boolean>(() => {\n const groupItemValue = this.groupItemValue();\n if (groupItemValue !== null && this.group !== null) {\n return this.group.isItemSelected(groupItemValue);\n }\n\n if (this.cvaModeEnabled()) {\n return this.cvaPressed();\n }\n\n const controlledPressed = this.pressed();\n if (controlledPressed !== null) {\n return controlledPressed;\n }\n\n return this.internalPressed();\n });\n\n public constructor() {\n this.internalPressed.set(false);\n }\n\n public ngOnInit(): void {\n this.internalPressed.set(this.defaultPressed());\n }\n\n public onBlur(): void {\n this.onControlTouched();\n }\n\n public onPrimitivePressedChange(nextPressed: boolean): void {\n if (this.resolvedDisabled()) {\n return;\n }\n\n if (this.cvaModeEnabled()) {\n this.cvaPressed.set(nextPressed);\n this.onControlChange(nextPressed);\n } else if (this.pressed() === null && !this.groupManagesState()) {\n this.internalPressed.set(nextPressed);\n }\n\n this.pressedChange.emit(nextPressed);\n }\n\n public getAriaLabel(): string | null {\n const explicitAriaLabel = normalizeStringValue(this.ariaLabel());\n if (explicitAriaLabel !== null) {\n return explicitAriaLabel;\n }\n\n const labelledby = normalizeStringValue(this.ariaLabelledby());\n if (labelledby !== null) {\n return null;\n }\n\n return resolveTngToggleAriaLabel(\n this.resolvedPressed(),\n this.pressedLabel(),\n this.unpressedLabel(),\n );\n }\n\n public registerOnChange(fn: (value: boolean) => void): void {\n this.cvaModeEnabled.set(true);\n this.onControlChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.cvaModeEnabled.set(true);\n this.onControlTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.cvaModeEnabled.set(true);\n this.cvaDisabled.set(isDisabled);\n }\n\n public writeValue(value: unknown): void {\n this.cvaModeEnabled.set(true);\n this.cvaPressed.set(value === true);\n }\n\n private groupItemValue(): string | null {\n return normalizeStringValue(this.value());\n }\n\n private groupManagesState(): boolean {\n return this.group !== null && this.groupItemValue() !== null;\n }\n}\n"]}
1
+ {"version":3,"file":"tng-toggle.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/toggle/tng-toggle.component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n booleanAttribute,\n Component,\n OnInit,\n computed,\n forwardRef,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';\nimport {\n coerceTngToggleNullableBoolean,\n TngToggle as TngTogglePrimitive,\n TngToggleGroup as TngToggleGroupPrimitive,\n} from '@tailng-ui/primitives';\n\nexport function toggleTngToggleState(pressed: boolean): boolean {\n return !pressed;\n}\n\nexport function resolveTngToggleAriaLabel(\n pressed: boolean,\n pressedLabel: string,\n unpressedLabel: string,\n): string {\n return pressed ? pressedLabel : unpressedLabel;\n}\n\ntype NullableBooleanInput = '' | 'false' | 'true' | boolean | null | undefined;\n\nfunction normalizeStringValue(value: string | null | undefined): string | null {\n if (value === undefined || value === null) {\n return null;\n }\n\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : null;\n}\n\nconst noControlChange = (_value: boolean): void => undefined;\nconst noControlTouch = (): void => undefined;\n\nfunction injectParentToggleGroup(): TngToggleGroupPrimitive | null {\n return inject(TngToggleGroupPrimitive, {\n optional: true,\n skipSelf: true,\n });\n}\n\n@Component({\n standalone: true,\n selector: 'tng-toggle',\n imports: [TngTogglePrimitive],\n templateUrl: './tng-toggle.component.html',\n styleUrl: './tng-toggle.component.css',\n viewProviders: [\n {\n provide: TngToggleGroupPrimitive,\n useFactory: injectParentToggleGroup,\n },\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TngToggleComponent),\n multi: true,\n },\n ],\n})\nexport class TngToggleComponent implements ControlValueAccessor, OnInit {\n private readonly group = inject(TngToggleGroupPrimitive, {\n optional: true,\n skipSelf: true,\n });\n private readonly internalPressed = signal(false);\n private readonly cvaModeEnabled = signal(false);\n private readonly cvaPressed = signal(false);\n private readonly cvaDisabled = signal(false);\n\n private onControlChange: (value: boolean) => void = noControlChange;\n private onControlTouched: () => void = noControlTouch;\n\n public readonly ariaLabel = input<string | null>(null);\n public readonly ariaLabelledby = input<string | null>(null);\n public readonly ariaDescribedBy = input<string | null>(null);\n public readonly value = input<string | null>(null);\n\n public readonly pressed = input<boolean | null, NullableBooleanInput>(null, {\n transform: coerceTngToggleNullableBoolean,\n });\n public readonly defaultPressed = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly disabled = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly pressedLabel = input<string>('Enabled');\n public readonly unpressedLabel = input<string>('Disabled');\n\n public readonly pressedChange = output<boolean>();\n\n protected readonly resolvedDisabled = computed<boolean>(() => {\n const groupDisabled = this.group?.isGroupDisabled() === true && this.groupManagesState();\n if (this.cvaModeEnabled()) {\n return this.cvaDisabled() || groupDisabled;\n }\n\n return this.disabled() || groupDisabled;\n });\n\n protected readonly resolvedPressed = computed<boolean>(() => {\n const groupItemValue = this.groupItemValue();\n if (groupItemValue !== null && this.group !== null) {\n return this.group.isItemSelected(groupItemValue);\n }\n\n if (this.cvaModeEnabled()) {\n return this.cvaPressed();\n }\n\n const controlledPressed = this.pressed();\n if (controlledPressed !== null) {\n return controlledPressed;\n }\n\n return this.internalPressed();\n });\n\n public constructor() {\n this.internalPressed.set(false);\n }\n\n public ngOnInit(): void {\n this.internalPressed.set(this.defaultPressed());\n }\n\n public onBlur(): void {\n this.onControlTouched();\n }\n\n public onPrimitivePressedChange(nextPressed: boolean): void {\n if (this.resolvedDisabled()) {\n return;\n }\n\n if (this.cvaModeEnabled()) {\n this.cvaPressed.set(nextPressed);\n this.onControlChange(nextPressed);\n } else if (this.pressed() === null && !this.groupManagesState()) {\n this.internalPressed.set(nextPressed);\n }\n\n this.pressedChange.emit(nextPressed);\n }\n\n public getAriaLabel(): string | null {\n const explicitAriaLabel = normalizeStringValue(this.ariaLabel());\n if (explicitAriaLabel !== null) {\n return explicitAriaLabel;\n }\n\n const labelledby = normalizeStringValue(this.ariaLabelledby());\n if (labelledby !== null) {\n return null;\n }\n\n return resolveTngToggleAriaLabel(\n this.resolvedPressed(),\n this.pressedLabel(),\n this.unpressedLabel(),\n );\n }\n\n public registerOnChange(fn: (value: boolean) => void): void {\n this.cvaModeEnabled.set(true);\n this.onControlChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.cvaModeEnabled.set(true);\n this.onControlTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.cvaModeEnabled.set(true);\n this.cvaDisabled.set(isDisabled);\n }\n\n public writeValue(value: unknown): void {\n this.cvaModeEnabled.set(true);\n this.cvaPressed.set(value === true);\n }\n\n private groupItemValue(): string | null {\n return normalizeStringValue(this.value());\n }\n\n private groupManagesState(): boolean {\n return this.group !== null && this.groupItemValue() !== null;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tng-toggle-group.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/toggle-group/tng-toggle-group.component.ts"],"names":[],"mappings":"AAGA,qBAyBa,uBAAuB;CAAG"}
1
+ {"version":3,"file":"tng-toggle-group.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/toggle-group/tng-toggle-group.component.ts"],"names":[],"mappings":"AAGA,qBA0Ba,uBAAuB;CAAG"}
@@ -5,6 +5,7 @@ let TngToggleGroupComponent = class TngToggleGroupComponent {
5
5
  };
6
6
  TngToggleGroupComponent = __decorate([
7
7
  Component({
8
+ standalone: true,
8
9
  selector: 'tng-toggle-group',
9
10
  templateUrl: './tng-toggle-group.component.html',
10
11
  styleUrl: './tng-toggle-group.component.css',
@@ -1 +1 @@
1
- {"version":3,"file":"tng-toggle-group.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/toggle-group/tng-toggle-group.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,cAAc,IAAI,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AA2B3E,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;CAAG,CAAA;AAA1B,uBAAuB;IAzBnC,SAAS,CAAC;QACT,QAAQ,EAAE,kBAAkB;QAC5B,WAAW,EAAE,mCAAmC;QAChD,QAAQ,EAAE,kCAAkC;QAC5C,IAAI,EAAE;YACJ,KAAK,EAAE,kBAAkB;SAC1B;QACD,cAAc,EAAE;YACd;gBACE,SAAS,EAAE,uBAAuB;gBAClC,MAAM,EAAE;oBACN,WAAW;oBACX,gBAAgB;oBAChB,aAAa;oBACb,eAAe;oBACf,UAAU;oBACV,OAAO;oBACP,QAAQ;oBACR,cAAc;oBACd,eAAe;iBAChB;gBACD,OAAO,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC;aACzC;SACF;KACF,CAAC;GACW,uBAAuB,CAAG","sourcesContent":["import { Component } from '@angular/core';\nimport { TngToggleGroup as TngToggleGroupPrimitive } from '@tailng-ui/primitives';\n\n@Component({\n selector: 'tng-toggle-group',\n templateUrl: './tng-toggle-group.component.html',\n styleUrl: './tng-toggle-group.component.css',\n host: {\n class: 'tng-toggle-group',\n },\n hostDirectives: [\n {\n directive: TngToggleGroupPrimitive,\n inputs: [\n 'ariaLabel',\n 'ariaLabelledby',\n 'orientation',\n 'selectionMode',\n 'disabled',\n 'value',\n 'values',\n 'defaultValue',\n 'defaultValues',\n ],\n outputs: ['valueChange', 'valuesChange'],\n },\n ],\n})\nexport class TngToggleGroupComponent {}\n"]}
1
+ {"version":3,"file":"tng-toggle-group.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/form/toggle-group/tng-toggle-group.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,cAAc,IAAI,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AA4B3E,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;CAAG,CAAA;AAA1B,uBAAuB;IA1BnC,SAAS,CAAC;QACT,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,kBAAkB;QAC5B,WAAW,EAAE,mCAAmC;QAChD,QAAQ,EAAE,kCAAkC;QAC5C,IAAI,EAAE;YACJ,KAAK,EAAE,kBAAkB;SAC1B;QACD,cAAc,EAAE;YACd;gBACE,SAAS,EAAE,uBAAuB;gBAClC,MAAM,EAAE;oBACN,WAAW;oBACX,gBAAgB;oBAChB,aAAa;oBACb,eAAe;oBACf,UAAU;oBACV,OAAO;oBACP,QAAQ;oBACR,cAAc;oBACd,eAAe;iBAChB;gBACD,OAAO,EAAE,CAAC,aAAa,EAAE,cAAc,CAAC;aACzC;SACF;KACF,CAAC;GACW,uBAAuB,CAAG","sourcesContent":["import { Component } from '@angular/core';\nimport { TngToggleGroup as TngToggleGroupPrimitive } from '@tailng-ui/primitives';\n\n@Component({\n standalone: true,\n selector: 'tng-toggle-group',\n templateUrl: './tng-toggle-group.component.html',\n styleUrl: './tng-toggle-group.component.css',\n host: {\n class: 'tng-toggle-group',\n },\n hostDirectives: [\n {\n directive: TngToggleGroupPrimitive,\n inputs: [\n 'ariaLabel',\n 'ariaLabelledby',\n 'orientation',\n 'selectionMode',\n 'disabled',\n 'value',\n 'values',\n 'defaultValue',\n 'defaultValues',\n ],\n outputs: ['valueChange', 'valuesChange'],\n },\n ],\n})\nexport class TngToggleGroupComponent {}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tng-bottom-sheet.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/layout/bottom-sheet/tng-bottom-sheet.component.ts"],"names":[],"mappings":"AAGA,qBAMa,uBAAuB;IAClC,SAAgB,SAAS,8CAAiC;CAC3D"}
1
+ {"version":3,"file":"tng-bottom-sheet.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/layout/bottom-sheet/tng-bottom-sheet.component.ts"],"names":[],"mappings":"AAGA,qBAOa,uBAAuB;IAClC,SAAgB,SAAS,8CAAiC;CAC3D"}
@@ -6,6 +6,7 @@ let TngBottomSheetComponent = class TngBottomSheetComponent {
6
6
  };
7
7
  TngBottomSheetComponent = __decorate([
8
8
  Component({
9
+ standalone: true,
9
10
  selector: 'tng-bottom-sheet',
10
11
  imports: [TngBottomSheetPrimitive],
11
12
  templateUrl: './tng-bottom-sheet.component.html',
@@ -1 +1 @@
1
- {"version":3,"file":"tng-bottom-sheet.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/layout/bottom-sheet/tng-bottom-sheet.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,cAAc,IAAI,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAQ3E,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAClB,SAAS,GAAG,KAAK,CAAS,cAAc,CAAC,CAAC;CAC3D,CAAA;AAFY,uBAAuB;IANnC,SAAS,CAAC;QACT,QAAQ,EAAE,kBAAkB;QAC5B,OAAO,EAAE,CAAC,uBAAuB,CAAC;QAClC,WAAW,EAAE,mCAAmC;QAChD,QAAQ,EAAE,kCAAkC;KAC7C,CAAC;GACW,uBAAuB,CAEnC","sourcesContent":["import { Component, input } from '@angular/core';\nimport { TngBottomSheet as TngBottomSheetPrimitive } from '@tailng-ui/primitives';\n\n@Component({\n selector: 'tng-bottom-sheet',\n imports: [TngBottomSheetPrimitive],\n templateUrl: './tng-bottom-sheet.component.html',\n styleUrl: './tng-bottom-sheet.component.css',\n})\nexport class TngBottomSheetComponent {\n public readonly ariaLabel = input<string>('Bottom Sheet');\n}\n"]}
1
+ {"version":3,"file":"tng-bottom-sheet.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/layout/bottom-sheet/tng-bottom-sheet.component.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,cAAc,IAAI,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAS3E,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAClB,SAAS,GAAG,KAAK,CAAS,cAAc,CAAC,CAAC;CAC3D,CAAA;AAFY,uBAAuB;IAPnC,SAAS,CAAC;QACT,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,kBAAkB;QAC5B,OAAO,EAAE,CAAC,uBAAuB,CAAC;QAClC,WAAW,EAAE,mCAAmC;QAChD,QAAQ,EAAE,kCAAkC;KAC7C,CAAC;GACW,uBAAuB,CAEnC","sourcesContent":["import { Component, input } from '@angular/core';\nimport { TngBottomSheet as TngBottomSheetPrimitive } from '@tailng-ui/primitives';\n\n@Component({\n standalone: true,\n selector: 'tng-bottom-sheet',\n imports: [TngBottomSheetPrimitive],\n templateUrl: './tng-bottom-sheet.component.html',\n styleUrl: './tng-bottom-sheet.component.css',\n})\nexport class TngBottomSheetComponent {\n public readonly ariaLabel = input<string>('Bottom Sheet');\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tng-card.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/layout/card/tng-card.component.ts"],"names":[],"mappings":"AAcA,QAAA,MAAM,YAAY,wCAAyC,CAAC;AAC5D,QAAA,MAAM,SAAS,yEAA0E,CAAC;AAC1F,QAAA,MAAM,YAAY,qCAAsC,CAAC;AACzD,QAAA,MAAM,oBAAoB,2BAA4B,CAAC;AAYvD,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAC3D,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AACrD,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAC3D,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAkCxE,qBAMa,gBAAgB;IAC3B,SAAgB,QAAQ,8EAErB;IACH,SAAgB,WAAW,8EAExB;IACH,SAAgB,OAAO,wFAEpB;IACH,SAAgB,IAAI,8HAEjB;IACH,SAAgB,OAAO,0FAEpB;CACJ;AAED,qBAMa,sBAAsB;CAClC;AAED,qBAMa,qBAAqB;CACjC;AAED,qBAMa,2BAA2B;CACvC;AAED,qBAMa,uBAAuB;CACnC;AAED,qBAMa,sBAAsB;CAClC;AAED,qBAMa,qBAAqB;CACjC;AAED,qBAMa,uBAAuB;IAClC,SAAgB,KAAK,4EAElB;CACJ;AAED,qBAMa,uBAAuB;CACnC;AAED,qBAMa,oBAAoB;IAC/B,SAAgB,SAAS,qDAA8B;IACvD,SAAgB,QAAQ,8EAErB;IACH,SAAgB,IAAI,qDAA6B;IACjD,SAAgB,GAAG,qDAA8B;IACjD,SAAgB,MAAM,qDAA8B;IAEpD,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI;CAarD"}
1
+ {"version":3,"file":"tng-card.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/layout/card/tng-card.component.ts"],"names":[],"mappings":"AAcA,QAAA,MAAM,YAAY,wCAAyC,CAAC;AAC5D,QAAA,MAAM,SAAS,yEAA0E,CAAC;AAC1F,QAAA,MAAM,YAAY,qCAAsC,CAAC;AACzD,QAAA,MAAM,oBAAoB,2BAA4B,CAAC;AAYvD,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAC3D,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AACrD,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAC3D,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC;AAkCxE,qBAOa,gBAAgB;IAC3B,SAAgB,QAAQ,8EAErB;IACH,SAAgB,WAAW,8EAExB;IACH,SAAgB,OAAO,wFAEpB;IACH,SAAgB,IAAI,8HAEjB;IACH,SAAgB,OAAO,0FAEpB;CACJ;AAED,qBAOa,sBAAsB;CAClC;AAED,qBAOa,qBAAqB;CACjC;AAED,qBAOa,2BAA2B;CACvC;AAED,qBAOa,uBAAuB;CACnC;AAED,qBAOa,sBAAsB;CAClC;AAED,qBAOa,qBAAqB;CACjC;AAED,qBAOa,uBAAuB;IAClC,SAAgB,KAAK,4EAElB;CACJ;AAED,qBAOa,uBAAuB;CACnC;AAED,qBAOa,oBAAoB;IAC/B,SAAgB,SAAS,qDAA8B;IACvD,SAAgB,QAAQ,8EAErB;IACH,SAAgB,IAAI,qDAA6B;IACjD,SAAgB,GAAG,qDAA8B;IACjD,SAAgB,MAAM,qDAA8B;IAEpD,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI;CAarD"}