@tailng-ui/primitives 0.13.0 → 0.14.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 (199) hide show
  1. package/package.json +2 -2
  2. package/src/lib/feedback/empty/tng-empty.d.ts.map +1 -1
  3. package/src/lib/feedback/empty/tng-empty.js +0 -5
  4. package/src/lib/feedback/empty/tng-empty.js.map +1 -1
  5. package/src/lib/feedback/progress-bar/tng-progress-bar.d.ts.map +1 -1
  6. package/src/lib/feedback/progress-bar/tng-progress-bar.js +0 -2
  7. package/src/lib/feedback/progress-bar/tng-progress-bar.js.map +1 -1
  8. package/src/lib/feedback/progress-spinner/tng-progress-spinner.d.ts.map +1 -1
  9. package/src/lib/feedback/progress-spinner/tng-progress-spinner.js +0 -1
  10. package/src/lib/feedback/progress-spinner/tng-progress-spinner.js.map +1 -1
  11. package/src/lib/feedback/skeleton/tng-skeleton.d.ts.map +1 -1
  12. package/src/lib/feedback/skeleton/tng-skeleton.js +0 -1
  13. package/src/lib/feedback/skeleton/tng-skeleton.js.map +1 -1
  14. package/src/lib/feedback/toast/tng-toast.d.ts.map +1 -1
  15. package/src/lib/feedback/toast/tng-toast.js +0 -2
  16. package/src/lib/feedback/toast/tng-toast.js.map +1 -1
  17. package/src/lib/form/_shared/select/tng-select.overlay.shared.d.ts.map +1 -1
  18. package/src/lib/form/_shared/select/tng-select.overlay.shared.js +0 -1
  19. package/src/lib/form/_shared/select/tng-select.overlay.shared.js.map +1 -1
  20. package/src/lib/form/_shared/select/tng-select.parts.shared.d.ts.map +1 -1
  21. package/src/lib/form/_shared/select/tng-select.parts.shared.js +0 -4
  22. package/src/lib/form/_shared/select/tng-select.parts.shared.js.map +1 -1
  23. package/src/lib/form/autocomplete/tng-autocomplete.d.ts.map +1 -1
  24. package/src/lib/form/autocomplete/tng-autocomplete.js +0 -1
  25. package/src/lib/form/autocomplete/tng-autocomplete.js.map +1 -1
  26. package/src/lib/form/autocomplete/tng-autocomplete.listbox.d.ts.map +1 -1
  27. package/src/lib/form/autocomplete/tng-autocomplete.listbox.js +0 -2
  28. package/src/lib/form/autocomplete/tng-autocomplete.listbox.js.map +1 -1
  29. package/src/lib/form/autocomplete/tng-autocomplete.overlay.d.ts.map +1 -1
  30. package/src/lib/form/autocomplete/tng-autocomplete.overlay.js +0 -1
  31. package/src/lib/form/autocomplete/tng-autocomplete.overlay.js.map +1 -1
  32. package/src/lib/form/autocomplete/tng-autocomplete.parts.d.ts.map +1 -1
  33. package/src/lib/form/autocomplete/tng-autocomplete.parts.js +0 -4
  34. package/src/lib/form/autocomplete/tng-autocomplete.parts.js.map +1 -1
  35. package/src/lib/form/button-toggle/tng-button-toggle.d.ts.map +1 -1
  36. package/src/lib/form/button-toggle/tng-button-toggle.js +0 -2
  37. package/src/lib/form/button-toggle/tng-button-toggle.js.map +1 -1
  38. package/src/lib/form/checkbox/tng-checkbox.d.ts.map +1 -1
  39. package/src/lib/form/checkbox/tng-checkbox.js +0 -1
  40. package/src/lib/form/checkbox/tng-checkbox.js.map +1 -1
  41. package/src/lib/form/chips/tng-chips.d.ts.map +1 -1
  42. package/src/lib/form/chips/tng-chips.js +0 -3
  43. package/src/lib/form/chips/tng-chips.js.map +1 -1
  44. package/src/lib/form/combobox/tng-combobox.d.ts.map +1 -1
  45. package/src/lib/form/combobox/tng-combobox.js +0 -1
  46. package/src/lib/form/combobox/tng-combobox.js.map +1 -1
  47. package/src/lib/form/input/tng-input.d.ts.map +1 -1
  48. package/src/lib/form/input/tng-input.js +0 -4
  49. package/src/lib/form/input/tng-input.js.map +1 -1
  50. package/src/lib/form/input-otp/tng-input-otp.d.ts.map +1 -1
  51. package/src/lib/form/input-otp/tng-input-otp.js +0 -1
  52. package/src/lib/form/input-otp/tng-input-otp.js.map +1 -1
  53. package/src/lib/form/label/tng-label.d.ts.map +1 -1
  54. package/src/lib/form/label/tng-label.js +0 -1
  55. package/src/lib/form/label/tng-label.js.map +1 -1
  56. package/src/lib/form/listbox/listbox.directive.d.ts.map +1 -1
  57. package/src/lib/form/listbox/listbox.directive.js +0 -1
  58. package/src/lib/form/listbox/listbox.directive.js.map +1 -1
  59. package/src/lib/form/listbox/option.directive.d.ts.map +1 -1
  60. package/src/lib/form/listbox/option.directive.js +0 -1
  61. package/src/lib/form/listbox/option.directive.js.map +1 -1
  62. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.d.ts.map +1 -1
  63. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.js +0 -1
  64. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.chip.js.map +1 -1
  65. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.d.ts.map +1 -1
  66. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.js +0 -1
  67. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.content.js.map +1 -1
  68. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.d.ts.map +1 -1
  69. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.js +0 -1
  70. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.js.map +1 -1
  71. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.d.ts.map +1 -1
  72. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.js +0 -2
  73. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.js.map +1 -1
  74. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.d.ts.map +1 -1
  75. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.js +0 -1
  76. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.js.map +1 -1
  77. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.d.ts.map +1 -1
  78. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.js +0 -1
  79. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.js.map +1 -1
  80. package/src/lib/form/multi-select/tng-multi-select.d.ts.map +1 -1
  81. package/src/lib/form/multi-select/tng-multi-select.js +0 -1
  82. package/src/lib/form/multi-select/tng-multi-select.js.map +1 -1
  83. package/src/lib/form/multi-select/tng-multi-select.listbox.d.ts.map +1 -1
  84. package/src/lib/form/multi-select/tng-multi-select.listbox.js +0 -2
  85. package/src/lib/form/multi-select/tng-multi-select.listbox.js.map +1 -1
  86. package/src/lib/form/multiselect/tng-multiselect.d.ts.map +1 -1
  87. package/src/lib/form/multiselect/tng-multiselect.js +0 -1
  88. package/src/lib/form/multiselect/tng-multiselect.js.map +1 -1
  89. package/src/lib/form/radio/tng-radio.d.ts.map +1 -1
  90. package/src/lib/form/radio/tng-radio.js +0 -1
  91. package/src/lib/form/radio/tng-radio.js.map +1 -1
  92. package/src/lib/form/select/tng-select.d.ts.map +1 -1
  93. package/src/lib/form/select/tng-select.js +0 -1
  94. package/src/lib/form/select/tng-select.js.map +1 -1
  95. package/src/lib/form/select/tng-select.listbox.d.ts.map +1 -1
  96. package/src/lib/form/select/tng-select.listbox.js +0 -2
  97. package/src/lib/form/select/tng-select.listbox.js.map +1 -1
  98. package/src/lib/form/slider/tng-slider.d.ts.map +1 -1
  99. package/src/lib/form/slider/tng-slider.js +0 -1
  100. package/src/lib/form/slider/tng-slider.js.map +1 -1
  101. package/src/lib/form/switch/tng-switch.d.ts.map +1 -1
  102. package/src/lib/form/switch/tng-switch.js +0 -1
  103. package/src/lib/form/switch/tng-switch.js.map +1 -1
  104. package/src/lib/form/textarea/tng-textarea.d.ts.map +1 -1
  105. package/src/lib/form/textarea/tng-textarea.js +0 -1
  106. package/src/lib/form/textarea/tng-textarea.js.map +1 -1
  107. package/src/lib/form/toggle/tng-toggle.d.ts.map +1 -1
  108. package/src/lib/form/toggle/tng-toggle.js +0 -1
  109. package/src/lib/form/toggle/tng-toggle.js.map +1 -1
  110. package/src/lib/form/toggle-group/tng-toggle-group.d.ts.map +1 -1
  111. package/src/lib/form/toggle-group/tng-toggle-group.js +0 -1
  112. package/src/lib/form/toggle-group/tng-toggle-group.js.map +1 -1
  113. package/src/lib/layout/accordion/tng-accordion.d.ts.map +1 -1
  114. package/src/lib/layout/accordion/tng-accordion.js +0 -4
  115. package/src/lib/layout/accordion/tng-accordion.js.map +1 -1
  116. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.d.ts.map +1 -1
  117. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.js +0 -1
  118. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.js.map +1 -1
  119. package/src/lib/layout/card/tng-card.d.ts.map +1 -1
  120. package/src/lib/layout/card/tng-card.js +0 -10
  121. package/src/lib/layout/card/tng-card.js.map +1 -1
  122. package/src/lib/layout/collapsible/tng-collapsible.d.ts.map +1 -1
  123. package/src/lib/layout/collapsible/tng-collapsible.js +0 -3
  124. package/src/lib/layout/collapsible/tng-collapsible.js.map +1 -1
  125. package/src/lib/layout/drawer/tng-drawer.d.ts.map +1 -1
  126. package/src/lib/layout/drawer/tng-drawer.js +0 -6
  127. package/src/lib/layout/drawer/tng-drawer.js.map +1 -1
  128. package/src/lib/layout/grid/tng-grid.d.ts.map +1 -1
  129. package/src/lib/layout/grid/tng-grid.js +0 -1
  130. package/src/lib/layout/grid/tng-grid.js.map +1 -1
  131. package/src/lib/layout/separator/tng-separator.d.ts.map +1 -1
  132. package/src/lib/layout/separator/tng-separator.js +0 -1
  133. package/src/lib/layout/separator/tng-separator.js.map +1 -1
  134. package/src/lib/layout/stepper/tng-stepper.d.ts.map +1 -1
  135. package/src/lib/layout/stepper/tng-stepper.js +0 -1
  136. package/src/lib/layout/stepper/tng-stepper.js.map +1 -1
  137. package/src/lib/layout/tree/tng-tree-group.d.ts.map +1 -1
  138. package/src/lib/layout/tree/tng-tree-group.js +0 -1
  139. package/src/lib/layout/tree/tng-tree-group.js.map +1 -1
  140. package/src/lib/layout/tree/tng-tree-indicator.d.ts.map +1 -1
  141. package/src/lib/layout/tree/tng-tree-indicator.js +0 -1
  142. package/src/lib/layout/tree/tng-tree-indicator.js.map +1 -1
  143. package/src/lib/layout/tree/tng-tree-item.d.ts.map +1 -1
  144. package/src/lib/layout/tree/tng-tree-item.js +0 -1
  145. package/src/lib/layout/tree/tng-tree-item.js.map +1 -1
  146. package/src/lib/layout/tree/tng-tree.d.ts.map +1 -1
  147. package/src/lib/layout/tree/tng-tree.js +0 -1
  148. package/src/lib/layout/tree/tng-tree.js.map +1 -1
  149. package/src/lib/navigation/breadcrumb/tng-breadcrumb.d.ts.map +1 -1
  150. package/src/lib/navigation/breadcrumb/tng-breadcrumb.js +0 -5
  151. package/src/lib/navigation/breadcrumb/tng-breadcrumb.js.map +1 -1
  152. package/src/lib/navigation/context-menu/tng-context-menu.d.ts.map +1 -1
  153. package/src/lib/navigation/context-menu/tng-context-menu.js +0 -2
  154. package/src/lib/navigation/context-menu/tng-context-menu.js.map +1 -1
  155. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.d.ts.map +1 -1
  156. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.js +0 -1
  157. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.js.map +1 -1
  158. package/src/lib/navigation/menu/tng-menu.d.ts.map +1 -1
  159. package/src/lib/navigation/menu/tng-menu.js +0 -6
  160. package/src/lib/navigation/menu/tng-menu.js.map +1 -1
  161. package/src/lib/navigation/menubar/tng-menubar.d.ts.map +1 -1
  162. package/src/lib/navigation/menubar/tng-menubar.js +0 -2
  163. package/src/lib/navigation/menubar/tng-menubar.js.map +1 -1
  164. package/src/lib/navigation/navigation-menu/tng-navigation-menu.d.ts.map +1 -1
  165. package/src/lib/navigation/navigation-menu/tng-navigation-menu.js +0 -1
  166. package/src/lib/navigation/navigation-menu/tng-navigation-menu.js.map +1 -1
  167. package/src/lib/navigation/tabs/tng-tabs.d.ts.map +1 -1
  168. package/src/lib/navigation/tabs/tng-tabs.js +0 -6
  169. package/src/lib/navigation/tabs/tng-tabs.js.map +1 -1
  170. package/src/lib/navigation/toolbar/tng-toolbar.d.ts.map +1 -1
  171. package/src/lib/navigation/toolbar/tng-toolbar.js +0 -1
  172. package/src/lib/navigation/toolbar/tng-toolbar.js.map +1 -1
  173. package/src/lib/overlay/dialog/tng-dialog.d.ts.map +1 -1
  174. package/src/lib/overlay/dialog/tng-dialog.js +0 -9
  175. package/src/lib/overlay/dialog/tng-dialog.js.map +1 -1
  176. package/src/lib/overlay/popover/tng-popover.d.ts.map +1 -1
  177. package/src/lib/overlay/popover/tng-popover.js +0 -4
  178. package/src/lib/overlay/popover/tng-popover.js.map +1 -1
  179. package/src/lib/overlay/tooltip/tng-tooltip.d.ts.map +1 -1
  180. package/src/lib/overlay/tooltip/tng-tooltip.js +0 -3
  181. package/src/lib/overlay/tooltip/tng-tooltip.js.map +1 -1
  182. package/src/lib/utility/avatar/tng-avatar.d.ts.map +1 -1
  183. package/src/lib/utility/avatar/tng-avatar.js +0 -3
  184. package/src/lib/utility/avatar/tng-avatar.js.map +1 -1
  185. package/src/lib/utility/badge/tng-badge.d.ts.map +1 -1
  186. package/src/lib/utility/badge/tng-badge.js +0 -1
  187. package/src/lib/utility/badge/tng-badge.js.map +1 -1
  188. package/src/lib/utility/code-block/tng-code-block.d.ts.map +1 -1
  189. package/src/lib/utility/code-block/tng-code-block.js +0 -5
  190. package/src/lib/utility/code-block/tng-code-block.js.map +1 -1
  191. package/src/lib/utility/copy/tng-copy.d.ts.map +1 -1
  192. package/src/lib/utility/copy/tng-copy.js +0 -1
  193. package/src/lib/utility/copy/tng-copy.js.map +1 -1
  194. package/src/lib/utility/press/tng-press.d.ts.map +1 -1
  195. package/src/lib/utility/press/tng-press.js +0 -1
  196. package/src/lib/utility/press/tng-press.js.map +1 -1
  197. package/src/lib/utility/tag/tng-tag.d.ts.map +1 -1
  198. package/src/lib/utility/tag/tng-tag.js +0 -3
  199. package/src/lib/utility/tag/tng-tag.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-autocomplete.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n HostBinding,\n inject,\n input,\n model,\n output,\n} from '@angular/core';\nimport { TNG_MULTI_AUTOCOMPLETE } from './tng-multi-autocomplete.tokens';\nimport type { TngMultiAutocompleteListboxApi } from './tng-multi-autocomplete.listbox.types';\n\n@Directive({\n selector: '[tngMultiAutocomplete]',\n exportAs: 'tngMultiAutocomplete',\n standalone: true,\n providers: [{ provide: TNG_MULTI_AUTOCOMPLETE, useExisting: TngMultiAutocomplete }],\n})\nexport class TngMultiAutocomplete<T = unknown> {\n readonly hostElement = inject(ElementRef<HTMLElement>).nativeElement;\n\n /** Whether overlay is open. */\n readonly open = model<boolean>(false);\n\n /** Disabled state. */\n readonly disabled = input<boolean>(false);\n\n /** Selected values (always array). */\n readonly value = model<readonly T[]>([]);\n\n /** Current input query (used for filtering). */\n readonly query = model<string>('');\n\n /** Emits whenever query changes (focus-open emit, typing, selection-clear, etc.) */\n readonly queryChange = output<string>();\n\n /** Optional states (styling/aria). */\n readonly loading = input<boolean>(false);\n readonly invalid = input<boolean>(false);\n\n // ---- internal bridge state ----\n private _contentId: string | null = null;\n private _listboxId: string | null = null;\n private _activeId: string | null = null;\n private _listboxApi: TngMultiAutocompleteListboxApi | null = null;\n\n // ---- host styling hooks ----\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'multi-autocomplete' as const;\n\n @HostBinding('attr.data-state')\n protected get dataState(): 'open' | 'closed' {\n return this.open() ? 'open' : 'closed';\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabled(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n @HostBinding('attr.data-loading')\n protected get dataLoading(): '' | null {\n return this.loading() ? '' : null;\n }\n\n @HostBinding('attr.data-invalid')\n protected get dataInvalid(): '' | null {\n return this.invalid() ? '' : null;\n }\n\n // ---- overlay control ----\n\n openSelect(): void {\n if (this.disabled()) return;\n this.open.set(true);\n }\n\n close(): void {\n this.open.set(false);\n }\n\n toggleOpen(): void {\n if (this.disabled()) return;\n this.open.set(!this.open());\n }\n\n // =========================================================\n // Selection API\n // =========================================================\n\n add(value: T): void {\n if (this.disabled()) return;\n\n const current = this.value();\n const exists = current.some((v) => Object.is(v, value));\n if (exists) return;\n\n this.value.set([...current, value]);\n }\n\n remove(value: T): void {\n if (this.disabled()) return;\n\n const current = this.value();\n const next = current.filter((v) => !Object.is(v, value));\n\n if (next.length !== current.length) {\n this.value.set(next);\n }\n }\n\n toggle(value: T): void {\n if (this.disabled()) return;\n\n const current = this.value();\n const exists = current.some((v) => Object.is(v, value));\n\n if (exists) {\n this.value.set(current.filter((v) => !Object.is(v, value)));\n } else {\n this.value.set([...current, value]);\n }\n }\n\n clear(): void {\n if (this.disabled()) return;\n this.value.set([]);\n }\n\n removeLast(): void {\n if (this.disabled()) return;\n\n const current = this.value();\n if (current.length === 0) return;\n\n this.value.set(current.slice(0, -1));\n }\n\n // =========================================================\n // Listbox bridge\n // =========================================================\n\n setContentId(id: string | null): void {\n this._contentId = id;\n }\n getContentId(): string | null {\n return this._contentId;\n }\n\n setListboxId(id: string | null): void {\n this._listboxId = id;\n }\n getListboxId(): string | null {\n return this._listboxId;\n }\n\n setActiveDescendantId(id: string | null): void {\n this._activeId = id;\n }\n getActiveDescendantId(): string | null {\n return this._activeId;\n }\n\n setListboxApi(api: TngMultiAutocompleteListboxApi | null): void {\n this._listboxApi = api;\n }\n getListboxApi(): TngMultiAutocompleteListboxApi | null {\n return this._listboxApi;\n }\n}\n"]}
1
+ {"version":3,"file":"tng-multi-autocomplete.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n HostBinding,\n inject,\n input,\n model,\n output,\n} from '@angular/core';\nimport { TNG_MULTI_AUTOCOMPLETE } from './tng-multi-autocomplete.tokens';\nimport type { TngMultiAutocompleteListboxApi } from './tng-multi-autocomplete.listbox.types';\n\n@Directive({\n selector: '[tngMultiAutocomplete]',\n exportAs: 'tngMultiAutocomplete',\n providers: [{ provide: TNG_MULTI_AUTOCOMPLETE, useExisting: TngMultiAutocomplete }],\n})\nexport class TngMultiAutocomplete<T = unknown> {\n readonly hostElement = inject(ElementRef<HTMLElement>).nativeElement;\n\n /** Whether overlay is open. */\n readonly open = model<boolean>(false);\n\n /** Disabled state. */\n readonly disabled = input<boolean>(false);\n\n /** Selected values (always array). */\n readonly value = model<readonly T[]>([]);\n\n /** Current input query (used for filtering). */\n readonly query = model<string>('');\n\n /** Emits whenever query changes (focus-open emit, typing, selection-clear, etc.) */\n readonly queryChange = output<string>();\n\n /** Optional states (styling/aria). */\n readonly loading = input<boolean>(false);\n readonly invalid = input<boolean>(false);\n\n // ---- internal bridge state ----\n private _contentId: string | null = null;\n private _listboxId: string | null = null;\n private _activeId: string | null = null;\n private _listboxApi: TngMultiAutocompleteListboxApi | null = null;\n\n // ---- host styling hooks ----\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'multi-autocomplete' as const;\n\n @HostBinding('attr.data-state')\n protected get dataState(): 'open' | 'closed' {\n return this.open() ? 'open' : 'closed';\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabled(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n @HostBinding('attr.data-loading')\n protected get dataLoading(): '' | null {\n return this.loading() ? '' : null;\n }\n\n @HostBinding('attr.data-invalid')\n protected get dataInvalid(): '' | null {\n return this.invalid() ? '' : null;\n }\n\n // ---- overlay control ----\n\n openSelect(): void {\n if (this.disabled()) return;\n this.open.set(true);\n }\n\n close(): void {\n this.open.set(false);\n }\n\n toggleOpen(): void {\n if (this.disabled()) return;\n this.open.set(!this.open());\n }\n\n // =========================================================\n // Selection API\n // =========================================================\n\n add(value: T): void {\n if (this.disabled()) return;\n\n const current = this.value();\n const exists = current.some((v) => Object.is(v, value));\n if (exists) return;\n\n this.value.set([...current, value]);\n }\n\n remove(value: T): void {\n if (this.disabled()) return;\n\n const current = this.value();\n const next = current.filter((v) => !Object.is(v, value));\n\n if (next.length !== current.length) {\n this.value.set(next);\n }\n }\n\n toggle(value: T): void {\n if (this.disabled()) return;\n\n const current = this.value();\n const exists = current.some((v) => Object.is(v, value));\n\n if (exists) {\n this.value.set(current.filter((v) => !Object.is(v, value)));\n } else {\n this.value.set([...current, value]);\n }\n }\n\n clear(): void {\n if (this.disabled()) return;\n this.value.set([]);\n }\n\n removeLast(): void {\n if (this.disabled()) return;\n\n const current = this.value();\n if (current.length === 0) return;\n\n this.value.set(current.slice(0, -1));\n }\n\n // =========================================================\n // Listbox bridge\n // =========================================================\n\n setContentId(id: string | null): void {\n this._contentId = id;\n }\n getContentId(): string | null {\n return this._contentId;\n }\n\n setListboxId(id: string | null): void {\n this._listboxId = id;\n }\n getListboxId(): string | null {\n return this._listboxId;\n }\n\n setActiveDescendantId(id: string | null): void {\n this._activeId = id;\n }\n getActiveDescendantId(): string | null {\n return this._activeId;\n }\n\n setListboxApi(api: TngMultiAutocompleteListboxApi | null): void {\n this._listboxApi = api;\n }\n getListboxApi(): TngMultiAutocompleteListboxApi | null {\n return this._listboxApi;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-autocomplete.listbox.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;;;AAI7F,qBAkBa,2BAA2B,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,8BAA8B,CAAC,CAAC,CAAC;IAChG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2D;IACjF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkD;IAG1E,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,4BAA4B,CAAU;IAGpE,SAAS,CAAC,QAAQ,CAAC,EAAE,SAAqB;;IAuC1C,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B,WAAW,IAAI,MAAM,GAAG,IAAI;IAI5B,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAI3C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO;IAInD,YAAY,IAAI,IAAI;IAUpB,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,GAAG,IAAI;IAsBpE,QAAQ,CAAC,IAAI,SAAS,CAAC,EAAE;yCAhGd,2BAA2B;2CAA3B,2BAA2B;CAqGvC;AAED,qBAUa,0BAA0B,CAAC,CAAC,GAAG,OAAO;IAEjD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,2BAA2B,CAAU;yCAFxD,0BAA0B;2CAA1B,0BAA0B;CAGtC"}
1
+ {"version":3,"file":"tng-multi-autocomplete.listbox.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,wCAAwC,CAAC;;;AAI7F,qBAiBa,2BAA2B,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,8BAA8B,CAAC,CAAC,CAAC;IAChG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2D;IACjF,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkD;IAG1E,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,4BAA4B,CAAU;IAGpE,SAAS,CAAC,QAAQ,CAAC,EAAE,SAAqB;;IAuC1C,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B,WAAW,IAAI,MAAM,GAAG,IAAI;IAI5B,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAI3C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO;IAInD,YAAY,IAAI,IAAI;IAUpB,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,GAAG,IAAI;IAsBpE,QAAQ,CAAC,IAAI,SAAS,CAAC,EAAE;yCAhGd,2BAA2B;2CAA3B,2BAA2B;CAqGvC;AAED,qBASa,0BAA0B,CAAC,CAAC,GAAG,OAAO;IAEjD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,2BAA2B,CAAU;yCAFxD,0BAA0B;2CAA1B,0BAA0B;CAGtC"}
@@ -99,7 +99,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
99
99
  type: Directive,
100
100
  args: [{
101
101
  selector: '[tngMultiAutocompleteListbox]',
102
- standalone: true,
103
102
  providers: [
104
103
  { provide: TNG_MULTI_AUTOCOMPLETE_LISTBOX, useExisting: TngMultiAutocompleteListbox },
105
104
  // Multi-autocomplete typing happens in the input. Listbox must NOT typeahead.
@@ -134,7 +133,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
134
133
  type: Directive,
135
134
  args: [{
136
135
  selector: '[tngMultiAutocompleteOption]',
137
- standalone: true,
138
136
  hostDirectives: [
139
137
  {
140
138
  directive: TngOptionDirective,
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-autocomplete.listbox.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,OAAO,EACL,UAAU,EACV,SAAS,EACT,WAAW,EACX,YAAY,EACZ,MAAM,EACN,MAAM,EACN,SAAS,GACV,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EACL,2BAA2B,EAC3B,0BAA0B,EAC1B,wCAAwC,EACxC,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAEzE,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;;;AAGzF,MAAM,eAAe,GAAG,kBAAkB,CAAC,gCAAgC,CAAC,CAAC;AAoB7E,MAAM,OAAO,2BAA2B;IACrB,KAAK,GAAG,MAAM,CAA0B,sBAAsB,CAAC,CAAC;IAChE,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAChC,OAAO,GAAG,MAAM,CAAC,CAAA,mBAAsB,CAAA,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAGvD,QAAQ,GAAG,4BAAqC,CAAC;IAGjD,EAAE,GAAG,eAAe,EAAE,CAAC;IAE1C;QACE,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAE/B,qEAAqE;QACrE,MAAM,CAAC,GAAG,EAAE;YACV,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,eAAe;YAC7C,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,kBAAkB;YACzE,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;gBACvC,CAAC,CAAE,OAAwB;gBAC3B,CAAC,CAAC,OAAO,KAAK,IAAI;oBAChB,CAAC,CAAE,EAAmB;oBACtB,CAAC,CAAE,CAAC,OAAY,CAAW,CAAC;YAEhC,qDAAqD;YACrD,IACE,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;gBAC9B,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAClD,CAAC;gBACD,OAAO;YACT,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAiB,CAAC,CAAC;YAE/C,+EAA+E;YAC/E,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;gBACvB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,EAAE;YAC7B,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC;IACzB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IACpC,CAAC;IAED,YAAY,CAAC,IAAuB;QAClC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,SAAS,CAAC,GAAW,EAAE,QAAkB;QACvC,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,YAAY;QACV,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAC5C,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO;QAChC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAU,CAAC,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAGS,oBAAoB,CAAC,KAA8B;QAC3D,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YAAE,OAAO;QAElC,MAAM,GAAG,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAEzE,mFAAmF;QACnF,iFAAiF;QACjF,uDAAuD;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnC,IACE,OAAO,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM;YAC7B,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EACjD,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAiB,CAAC,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAED,QAAQ;QACN,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAkB,CAAC,CAAC,CAAE,CAAC,CAAM,CAAW,CAAC;IACtE,CAAC;uGApGU,2BAA2B;2FAA3B,2BAA2B,6NAf3B;YACT,EAAE,OAAO,EAAE,8BAA8B,EAAE,WAAW,EAAE,2BAA2B,EAAE;YACrF,8EAA8E;YAC9E,EAAE,OAAO,EAAE,2BAA2B,EAAE,QAAQ,EAAE,KAAK,EAAE;YACzD,EAAE,OAAO,EAAE,0BAA0B,EAAE,QAAQ,EAAE,IAAI,EAAE;YACvD,EAAE,OAAO,EAAE,wCAAwC,EAAE,QAAQ,EAAE,IAAI,EAAE;SACtE;;2FASU,2BAA2B;kBAlBvC,SAAS;mBAAC;oBACT,QAAQ,EAAE,+BAA+B;oBACzC,UAAU,EAAE,IAAI;oBAChB,SAAS,EAAE;wBACT,EAAE,OAAO,EAAE,8BAA8B,EAAE,WAAW,6BAA6B,EAAE;wBACrF,8EAA8E;wBAC9E,EAAE,OAAO,EAAE,2BAA2B,EAAE,QAAQ,EAAE,KAAK,EAAE;wBACzD,EAAE,OAAO,EAAE,0BAA0B,EAAE,QAAQ,EAAE,IAAI,EAAE;wBACvD,EAAE,OAAO,EAAE,wCAAwC,EAAE,QAAQ,EAAE,IAAI,EAAE;qBACtE;oBACD,cAAc,EAAE;wBACd;4BACE,SAAS,EAAE,mBAAmB;4BAC9B,MAAM,EAAE,CAAC,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC;4BACjE,OAAO,EAAE,CAAC,aAAa,CAAC;yBACzB;qBACF;iBACF;;sBAME,WAAW;uBAAC,gBAAgB;;sBAG5B,WAAW;uBAAC,SAAS;;sBAiErB,YAAY;uBAAC,aAAa,EAAE,CAAC,QAAQ,CAAC;;AAwCzC,MAAM,OAAO,0BAA0B;IAElB,QAAQ,GAAG,2BAAoC,CAAC;uGAFxD,0BAA0B;2FAA1B,0BAA0B;;2FAA1B,0BAA0B;kBAVtC,SAAS;mBAAC;oBACT,QAAQ,EAAE,8BAA8B;oBACxC,UAAU,EAAE,IAAI;oBAChB,cAAc,EAAE;wBACd;4BACE,SAAS,EAAE,kBAAkB;4BAC7B,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;yBACjC;qBACF;iBACF;;sBAEE,WAAW;uBAAC,gBAAgB","sourcesContent":["// libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.ts\nimport {\n DestroyRef,\n Directive,\n HostBinding,\n HostListener,\n effect,\n inject,\n untracked,\n} from '@angular/core';\n\nimport { createTngIdFactory } from '@tailng-ui/cdk';\nimport {\n TNG_LISTBOX_FORCE_TYPEAHEAD,\n TNG_LISTBOX_FORCE_MULTIPLE,\n TNG_LISTBOX_PRESERVE_VALUE_ON_UNREGISTER,\n TngListboxDirective,\n TngOptionDirective,\n} from '@tailng-ui/primitives';\n\nimport { TNG_MULTI_AUTOCOMPLETE } from './tng-multi-autocomplete.tokens';\nimport type { TngMultiAutocomplete } from './tng-multi-autocomplete';\nimport { TNG_MULTI_AUTOCOMPLETE_LISTBOX } from './tng-multi-autocomplete.listbox.tokens';\nimport type { TngMultiAutocompleteListboxApi } from './tng-multi-autocomplete.listbox.types';\n\nconst createListboxId = createTngIdFactory('tng-multi-autocomplete-listbox');\n\n@Directive({\n selector: '[tngMultiAutocompleteListbox]',\n standalone: true,\n providers: [\n { provide: TNG_MULTI_AUTOCOMPLETE_LISTBOX, useExisting: TngMultiAutocompleteListbox },\n // Multi-autocomplete typing happens in the input. Listbox must NOT typeahead.\n { provide: TNG_LISTBOX_FORCE_TYPEAHEAD, useValue: false },\n { provide: TNG_LISTBOX_FORCE_MULTIPLE, useValue: true },\n { provide: TNG_LISTBOX_PRESERVE_VALUE_ON_UNREGISTER, useValue: true },\n ],\n hostDirectives: [\n {\n directive: TngListboxDirective,\n inputs: ['orientation', 'direction', 'disabled', 'loop', 'value'],\n outputs: ['valueChange'],\n },\n ],\n})\nexport class TngMultiAutocompleteListbox<T = unknown> implements TngMultiAutocompleteListboxApi<T> {\n private readonly multi = inject<TngMultiAutocomplete<T>>(TNG_MULTI_AUTOCOMPLETE);\n private readonly destroyRef = inject(DestroyRef);\n private readonly listbox = inject(TngListboxDirective<T>, { self: true });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'multi-autocomplete-listbox' as const;\n\n @HostBinding('attr.id')\n protected readonly id = createListboxId();\n\n constructor() {\n this.multi.setListboxId(this.id);\n this.multi.setListboxApi(this);\n\n // External multi.value -> listbox.value (keeps selection UI in sync)\n effect(() => {\n const v = this.multi.value(); // readonly T[]\n const current = untracked(() => this.listbox.value()); // ListboxValue<T>\n const currentArr = Array.isArray(current)\n ? (current as readonly T[])\n : current === null\n ? ([] as readonly T[])\n : ([current as T] as const);\n\n // compare by order + Object.is (good enough for now)\n if (\n currentArr.length === v.length &&\n v.every((val, i) => Object.is(val, currentArr[i]))\n ) {\n return;\n }\n\n this.listbox.value.set([...v] as readonly T[]);\n\n // External controlled value changes while closed should reset filtering state.\n if (!this.multi.open()) {\n this.multi.query.set('');\n this.multi.queryChange.emit('');\n }\n });\n\n this.destroyRef.onDestroy(() => {\n this.multi.setListboxId(null);\n this.multi.setListboxApi(null);\n });\n }\n\n getHostId(): string | null {\n return this.id ?? null;\n }\n\n getActiveId(): string | null {\n return this.listbox.getActiveId();\n }\n\n ensureActive(pref?: 'first' | 'last'): void {\n this.listbox.ensureActive(pref);\n }\n\n handleKey(key: string, shiftKey?: boolean): boolean {\n return this.listbox.handleKeyFromCombobox(key, shiftKey);\n }\n\n commitActive(): void {\n const value = this.listbox.getActiveValue();\n if (value === undefined) return;\n this.multi.toggle(value as T);\n this.listbox.setActiveId(null);\n this.multi.query.set('');\n this.multi.queryChange.emit('');\n }\n\n @HostListener('valueChange', ['$event'])\n protected onListboxValueChange(value: T | readonly T[] | null): void {\n if (this.multi.disabled()) return;\n\n const arr = value === null ? [] : Array.isArray(value) ? value : [value];\n\n // Option unregister/re-register during filtering can cause listbox to emit a fresh\n // array instance even when the logical selection did not change. Treat that as a\n // no-op so typing does not clear the controlled query.\n const current = this.multi.value();\n if (\n current.length === arr.length &&\n arr.every((val, i) => Object.is(val, current[i]))\n ) {\n return;\n }\n\n this.multi.value.set([...arr] as readonly T[]);\n this.listbox.setActiveId(null);\n this.multi.query.set('');\n this.multi.queryChange.emit('');\n }\n\n getValue?(): readonly T[] {\n const v = this.listbox.value();\n if (v === null) return [];\n return Array.isArray(v) ? (v as readonly T[]) : ([v as T] as const);\n }\n}\n\n@Directive({\n selector: '[tngMultiAutocompleteOption]',\n standalone: true,\n hostDirectives: [\n {\n directive: TngOptionDirective,\n inputs: ['tngValue', 'disabled'],\n },\n ],\n})\nexport class TngMultiAutocompleteOption<T = unknown> {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'multi-autocomplete-option' as const;\n}\n"]}
1
+ {"version":3,"file":"tng-multi-autocomplete.listbox.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.ts"],"names":[],"mappings":"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","sourcesContent":["// libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.listbox.ts\nimport {\n DestroyRef,\n Directive,\n HostBinding,\n HostListener,\n effect,\n inject,\n untracked,\n} from '@angular/core';\n\nimport { createTngIdFactory } from '@tailng-ui/cdk';\nimport {\n TNG_LISTBOX_FORCE_TYPEAHEAD,\n TNG_LISTBOX_FORCE_MULTIPLE,\n TNG_LISTBOX_PRESERVE_VALUE_ON_UNREGISTER,\n TngListboxDirective,\n TngOptionDirective,\n} from '@tailng-ui/primitives';\n\nimport { TNG_MULTI_AUTOCOMPLETE } from './tng-multi-autocomplete.tokens';\nimport type { TngMultiAutocomplete } from './tng-multi-autocomplete';\nimport { TNG_MULTI_AUTOCOMPLETE_LISTBOX } from './tng-multi-autocomplete.listbox.tokens';\nimport type { TngMultiAutocompleteListboxApi } from './tng-multi-autocomplete.listbox.types';\n\nconst createListboxId = createTngIdFactory('tng-multi-autocomplete-listbox');\n\n@Directive({\n selector: '[tngMultiAutocompleteListbox]',\n providers: [\n { provide: TNG_MULTI_AUTOCOMPLETE_LISTBOX, useExisting: TngMultiAutocompleteListbox },\n // Multi-autocomplete typing happens in the input. Listbox must NOT typeahead.\n { provide: TNG_LISTBOX_FORCE_TYPEAHEAD, useValue: false },\n { provide: TNG_LISTBOX_FORCE_MULTIPLE, useValue: true },\n { provide: TNG_LISTBOX_PRESERVE_VALUE_ON_UNREGISTER, useValue: true },\n ],\n hostDirectives: [\n {\n directive: TngListboxDirective,\n inputs: ['orientation', 'direction', 'disabled', 'loop', 'value'],\n outputs: ['valueChange'],\n },\n ],\n})\nexport class TngMultiAutocompleteListbox<T = unknown> implements TngMultiAutocompleteListboxApi<T> {\n private readonly multi = inject<TngMultiAutocomplete<T>>(TNG_MULTI_AUTOCOMPLETE);\n private readonly destroyRef = inject(DestroyRef);\n private readonly listbox = inject(TngListboxDirective<T>, { self: true });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'multi-autocomplete-listbox' as const;\n\n @HostBinding('attr.id')\n protected readonly id = createListboxId();\n\n constructor() {\n this.multi.setListboxId(this.id);\n this.multi.setListboxApi(this);\n\n // External multi.value -> listbox.value (keeps selection UI in sync)\n effect(() => {\n const v = this.multi.value(); // readonly T[]\n const current = untracked(() => this.listbox.value()); // ListboxValue<T>\n const currentArr = Array.isArray(current)\n ? (current as readonly T[])\n : current === null\n ? ([] as readonly T[])\n : ([current as T] as const);\n\n // compare by order + Object.is (good enough for now)\n if (\n currentArr.length === v.length &&\n v.every((val, i) => Object.is(val, currentArr[i]))\n ) {\n return;\n }\n\n this.listbox.value.set([...v] as readonly T[]);\n\n // External controlled value changes while closed should reset filtering state.\n if (!this.multi.open()) {\n this.multi.query.set('');\n this.multi.queryChange.emit('');\n }\n });\n\n this.destroyRef.onDestroy(() => {\n this.multi.setListboxId(null);\n this.multi.setListboxApi(null);\n });\n }\n\n getHostId(): string | null {\n return this.id ?? null;\n }\n\n getActiveId(): string | null {\n return this.listbox.getActiveId();\n }\n\n ensureActive(pref?: 'first' | 'last'): void {\n this.listbox.ensureActive(pref);\n }\n\n handleKey(key: string, shiftKey?: boolean): boolean {\n return this.listbox.handleKeyFromCombobox(key, shiftKey);\n }\n\n commitActive(): void {\n const value = this.listbox.getActiveValue();\n if (value === undefined) return;\n this.multi.toggle(value as T);\n this.listbox.setActiveId(null);\n this.multi.query.set('');\n this.multi.queryChange.emit('');\n }\n\n @HostListener('valueChange', ['$event'])\n protected onListboxValueChange(value: T | readonly T[] | null): void {\n if (this.multi.disabled()) return;\n\n const arr = value === null ? [] : Array.isArray(value) ? value : [value];\n\n // Option unregister/re-register during filtering can cause listbox to emit a fresh\n // array instance even when the logical selection did not change. Treat that as a\n // no-op so typing does not clear the controlled query.\n const current = this.multi.value();\n if (\n current.length === arr.length &&\n arr.every((val, i) => Object.is(val, current[i]))\n ) {\n return;\n }\n\n this.multi.value.set([...arr] as readonly T[]);\n this.listbox.setActiveId(null);\n this.multi.query.set('');\n this.multi.queryChange.emit('');\n }\n\n getValue?(): readonly T[] {\n const v = this.listbox.value();\n if (v === null) return [];\n return Array.isArray(v) ? (v as readonly T[]) : ([v as T] as const);\n }\n}\n\n@Directive({\n selector: '[tngMultiAutocompleteOption]',\n hostDirectives: [\n {\n directive: TngOptionDirective,\n inputs: ['tngValue', 'disabled'],\n },\n ],\n})\nexport class TngMultiAutocompleteOption<T = unknown> {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'multi-autocomplete-option' as const;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-autocomplete.overlay.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.ts"],"names":[],"mappings":";AAEA,qBAKa,2BAA2B;IAEtC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,4BAA4B,CAAU;yCAFzD,2BAA2B;2CAA3B,2BAA2B;CAGvC"}
1
+ {"version":3,"file":"tng-multi-autocomplete.overlay.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.ts"],"names":[],"mappings":";AAEA,qBAIa,2BAA2B;IAEtC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,4BAA4B,CAAU;yCAFzD,2BAA2B;2CAA3B,2BAA2B;CAGvC"}
@@ -10,7 +10,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
10
10
  args: [{
11
11
  selector: '[tngMultiAutocompleteOverlay]',
12
12
  exportAs: 'tngMultiAutocompleteOverlay',
13
- standalone: true,
14
13
  }]
15
14
  }], propDecorators: { dataSlot: [{
16
15
  type: HostBinding,
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-autocomplete.overlay.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;;AAOvD,MAAM,OAAO,2BAA2B;IAEnB,QAAQ,GAAG,4BAAqC,CAAC;uGAFzD,2BAA2B;2FAA3B,2BAA2B;;2FAA3B,2BAA2B;kBALvC,SAAS;mBAAC;oBACT,QAAQ,EAAE,+BAA+B;oBACzC,QAAQ,EAAE,6BAA6B;oBACvC,UAAU,EAAE,IAAI;iBACjB;;sBAEE,WAAW;uBAAC,gBAAgB","sourcesContent":["import { Directive, HostBinding } from '@angular/core';\n\n@Directive({\n selector: '[tngMultiAutocompleteOverlay]',\n exportAs: 'tngMultiAutocompleteOverlay',\n standalone: true,\n})\nexport class TngMultiAutocompleteOverlay {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'multi-autocomplete-overlay' as const;\n}"]}
1
+ {"version":3,"file":"tng-multi-autocomplete.overlay.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.overlay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;;AAMvD,MAAM,OAAO,2BAA2B;IAEnB,QAAQ,GAAG,4BAAqC,CAAC;uGAFzD,2BAA2B;2FAA3B,2BAA2B;;2FAA3B,2BAA2B;kBAJvC,SAAS;mBAAC;oBACT,QAAQ,EAAE,+BAA+B;oBACzC,QAAQ,EAAE,6BAA6B;iBACxC;;sBAEE,WAAW;uBAAC,gBAAgB","sourcesContent":["import { Directive, HostBinding } from '@angular/core';\n\n@Directive({\n selector: '[tngMultiAutocompleteOverlay]',\n exportAs: 'tngMultiAutocompleteOverlay',\n})\nexport class TngMultiAutocompleteOverlay {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'multi-autocomplete-overlay' as const;\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-autocomplete.trigger.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.ts"],"names":[],"mappings":";AAeA,qBAKa,2BAA2B;IACtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwD;IAC9E,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAwC;IAE3D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAG3B;IAEL,OAAO,KAAK,OAAO,GAElB;IAED,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAuB;IAG/C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,4BAA4B,CAAU;IAGpE,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;IAG9C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,SAAS,CAAU;IAGjD,SAAS,KAAK,YAAY,IAAI,MAAM,GAAG,OAAO,CAE7C;IAGD,SAAS,KAAK,YAAY,IAAI,MAAM,GAAG,IAAI,CAE1C;IAGD,SAAS,KAAK,YAAY,IAAI,MAAM,GAAG,IAAI,CAG1C;IAGD,SAAS,KAAK,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAGlD;IAGD,SAAS,CAAC,OAAO,IAAI,IAAI;IAiBzB,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAiBrC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAqJ/C,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAoB7C,SAAS,CAAC,kBAAkB,IAAI,IAAI;IAKpC,SAAS,CAAC,gBAAgB,IAAI,IAAI;yCAhQvB,2BAA2B;2CAA3B,2BAA2B;CA+QvC"}
1
+ {"version":3,"file":"tng-multi-autocomplete.trigger.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.ts"],"names":[],"mappings":";AAeA,qBAIa,2BAA2B;IACtC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAwD;IAC9E,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAwC;IAE3D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAG3B;IAEL,OAAO,KAAK,OAAO,GAElB;IAED,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAuB;IAG/C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,4BAA4B,CAAU;IAGpE,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;IAG9C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,SAAS,CAAU;IAGjD,SAAS,KAAK,YAAY,IAAI,MAAM,GAAG,OAAO,CAE7C;IAGD,SAAS,KAAK,YAAY,IAAI,MAAM,GAAG,IAAI,CAE1C;IAGD,SAAS,KAAK,YAAY,IAAI,MAAM,GAAG,IAAI,CAG1C;IAGD,SAAS,KAAK,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAGlD;IAGD,SAAS,CAAC,OAAO,IAAI,IAAI;IAiBzB,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAiBrC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAqJ/C,SAAS,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAoB7C,SAAS,CAAC,kBAAkB,IAAI,IAAI;IAKpC,SAAS,CAAC,gBAAgB,IAAI,IAAI;yCAhQvB,2BAA2B;2CAA3B,2BAA2B;CA+QvC"}
@@ -224,7 +224,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
224
224
  args: [{
225
225
  selector: '[tngMultiAutocompleteTrigger]',
226
226
  exportAs: 'tngMultiAutocompleteTrigger',
227
- standalone: true,
228
227
  }]
229
228
  }], propDecorators: { dataSlot: [{
230
229
  type: HostBinding,
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-autocomplete.trigger.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n inject,\n} from '@angular/core';\n\nimport type { TngMultiAutocomplete } from './tng-multi-autocomplete';\nimport { TNG_MULTI_AUTOCOMPLETE } from './tng-multi-autocomplete.tokens';\nimport { TNG_MULTI_AUTOCOMPLETE_LISTBOX } from './tng-multi-autocomplete.listbox.tokens';\nimport type { TngMultiAutocompleteListboxApi } from './tng-multi-autocomplete.listbox.types';\n\nconst NAV_KEYS = new Set(['ArrowDown', 'ArrowUp'] as const);\n\n@Directive({\n selector: '[tngMultiAutocompleteTrigger]',\n exportAs: 'tngMultiAutocompleteTrigger',\n standalone: true,\n})\nexport class TngMultiAutocompleteTrigger {\n private readonly multi = inject<TngMultiAutocomplete>(TNG_MULTI_AUTOCOMPLETE);\n private readonly el = inject(ElementRef<HTMLInputElement>);\n\n private readonly injectedListbox =\n inject<TngMultiAutocompleteListboxApi>(TNG_MULTI_AUTOCOMPLETE_LISTBOX, {\n optional: true,\n });\n\n private get listbox(): TngMultiAutocompleteListboxApi | null {\n return this.multi.getListboxApi() ?? this.injectedListbox ?? null;\n }\n\n private composing = false;\n private lastEmittedQuery: string | null = null;\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'multi-autocomplete-trigger' as const;\n\n @HostBinding('attr.role')\n protected readonly role = 'combobox' as const;\n\n @HostBinding('attr.aria-haspopup')\n protected readonly haspopup = 'listbox' as const;\n\n @HostBinding('attr.aria-expanded')\n protected get ariaExpanded(): 'true' | 'false' {\n return this.multi.open() ? 'true' : 'false';\n }\n\n @HostBinding('attr.aria-disabled')\n protected get ariaDisabled(): 'true' | null {\n return this.multi.disabled() ? 'true' : null;\n }\n\n @HostBinding('attr.aria-controls')\n protected get ariaControls(): string | null {\n if (!this.multi.open()) return null;\n return this.multi.getContentId() ?? this.multi.getListboxId();\n }\n\n @HostBinding('attr.aria-activedescendant')\n protected get ariaActiveDescendant(): string | null {\n if (!this.multi.open()) return null;\n return this.listbox?.activeId?.() ?? this.multi.getActiveDescendantId();\n }\n\n @HostListener('focus')\n protected onFocus(): void {\n if (this.multi.disabled()) return;\n\n if (!this.multi.open()) {\n this.multi.openSelect();\n\n const q = this.el.nativeElement.value ?? '';\n this.multi.query.set(q);\n\n this.lastEmittedQuery = q;\n this.multi.queryChange.emit(q);\n\n this.listbox?.ensureActive('first');\n }\n }\n\n @HostListener('input', ['$event'])\n protected onInput(event: Event): void {\n if (this.multi.disabled()) return;\n\n const value = (event.target as HTMLInputElement | null)?.value ?? '';\n this.multi.query.set(value);\n\n // Policy A: do not emit during IME composition\n if (this.composing) return;\n\n // Avoid double-emit (e.g., compositionend followed by input)\n if (this.lastEmittedQuery === value) return;\n\n this.lastEmittedQuery = value;\n this.multi.queryChange.emit(value);\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n if (this.multi.disabled()) return;\n\n // Tab should leave the widget and close any open overlay.\n if (event.key === 'Tab') {\n if (this.multi.open()) {\n this.multi.close();\n }\n return;\n }\n\n // Escape closes overlay (no selection changes)\n if (event.key === 'Escape') {\n if (this.multi.open()) {\n event.preventDefault();\n event.stopPropagation();\n this.multi.close();\n }\n return;\n }\n\n // Backspace removes last chip when input is empty\n if (event.key === 'Backspace') {\n const inputValue = this.el.nativeElement.value ?? '';\n if (inputValue.length > 0) return;\n\n const selected = this.multi.value();\n if (selected.length === 0) return;\n\n event.preventDefault();\n event.stopPropagation();\n this.multi.removeLast();\n return;\n }\n\n // Enter commits active option (toggle) and stays open\n if (event.key === 'Enter') {\n if (!this.multi.open()) return;\n if (!this.listbox) return;\n\n event.preventDefault();\n event.stopPropagation();\n this.listbox.commitActive();\n return;\n }\n\n // ArrowLeft on input at caret-start → focus last chip (chips UX loop)\n if (event.key === 'ArrowLeft') {\n const input = this.el.nativeElement;\n\n const start = input.selectionStart ?? 0;\n const end = input.selectionEnd ?? 0;\n\n // Only when caret is at the beginning and there's no selection range.\n if (start === 0 && end === 0) {\n const chips = Array.from(\n this.multi.hostElement.querySelectorAll('[data-slot=\"multi-autocomplete-chip\"]'),\n ) as HTMLElement[];\n\n const lastChip = chips[chips.length - 1] ?? null;\n if (lastChip) {\n event.preventDefault();\n event.stopPropagation();\n lastChip.focus();\n }\n }\n\n return;\n }\n\n // Home / End\n // Home\n if (event.key === 'Home') {\n const input = this.el.nativeElement;\n const start = input.selectionStart ?? 0;\n const end = input.selectionEnd ?? 0;\n\n // Chip UX has priority over listbox navigation\n if (start === 0 && end === 0) {\n const chips = Array.from(\n this.multi.hostElement.querySelectorAll('[data-slot=\"multi-autocomplete-chip\"]'),\n ) as HTMLElement[];\n\n const firstChip = chips[0] ?? null;\n if (firstChip) {\n event.preventDefault();\n event.stopPropagation();\n firstChip.focus();\n return;\n }\n }\n\n // Otherwise delegate to listbox when open\n if (this.multi.open()) {\n const handled = this.listbox?.handleKey(event.key, event.shiftKey);\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n return;\n }\n\n // End\n if (event.key === 'End') {\n // When open → delegate to listbox\n if (this.multi.open()) {\n const handled = this.listbox?.handleKey(event.key, event.shiftKey);\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n return;\n }\n\n // When closed → let browser move caret\n return;\n }\n \n // Navigation keys\n if (NAV_KEYS.has(event.key as any)) {\n if (!this.multi.open()) {\n event.preventDefault();\n event.stopPropagation();\n\n this.multi.openSelect();\n if (event.key === 'ArrowUp' || event.key === 'End') {\n this.listbox?.ensureActive('last');\n } else {\n this.listbox?.ensureActive('first');\n }\n return;\n }\n\n if (this.listbox) {\n const handled = this.listbox.handleKey(event.key, event.shiftKey);\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n return;\n }\n\n // printable keys are NOT prevented (input stays editable)\n }\n\n @HostListener('focusout', ['$event'])\n protected onFocusOut(event: FocusEvent): void {\n if (!this.multi.open()) return;\n\n const next = event.relatedTarget as Node | null;\n if (next && this.multi.hostElement.contains(next)) {\n return;\n }\n\n // Some focus transitions report null relatedTarget. Re-check after DOM focus settles.\n queueMicrotask(() => {\n const active = this.el.nativeElement.ownerDocument.activeElement;\n if (active && this.multi.hostElement.contains(active)) {\n return;\n }\n\n this.multi.close();\n });\n }\n\n @HostListener('compositionstart')\n protected onCompositionStart(): void {\n this.composing = true;\n }\n\n @HostListener('compositionend')\n protected onCompositionEnd(): void {\n this.composing = false;\n\n if (this.multi.disabled()) return;\n\n // Policy A: emit once with the final committed value\n const q = this.el.nativeElement.value ?? '';\n this.multi.query.set(q);\n\n if (this.lastEmittedQuery !== q) {\n this.lastEmittedQuery = q;\n this.multi.queryChange.emit(q);\n }\n }\n\n}\n"]}
1
+ {"version":3,"file":"tng-multi-autocomplete.trigger.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-autocomplete/tng-multi-autocomplete.trigger.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n inject,\n} from '@angular/core';\n\nimport type { TngMultiAutocomplete } from './tng-multi-autocomplete';\nimport { TNG_MULTI_AUTOCOMPLETE } from './tng-multi-autocomplete.tokens';\nimport { TNG_MULTI_AUTOCOMPLETE_LISTBOX } from './tng-multi-autocomplete.listbox.tokens';\nimport type { TngMultiAutocompleteListboxApi } from './tng-multi-autocomplete.listbox.types';\n\nconst NAV_KEYS = new Set(['ArrowDown', 'ArrowUp'] as const);\n\n@Directive({\n selector: '[tngMultiAutocompleteTrigger]',\n exportAs: 'tngMultiAutocompleteTrigger',\n})\nexport class TngMultiAutocompleteTrigger {\n private readonly multi = inject<TngMultiAutocomplete>(TNG_MULTI_AUTOCOMPLETE);\n private readonly el = inject(ElementRef<HTMLInputElement>);\n\n private readonly injectedListbox =\n inject<TngMultiAutocompleteListboxApi>(TNG_MULTI_AUTOCOMPLETE_LISTBOX, {\n optional: true,\n });\n\n private get listbox(): TngMultiAutocompleteListboxApi | null {\n return this.multi.getListboxApi() ?? this.injectedListbox ?? null;\n }\n\n private composing = false;\n private lastEmittedQuery: string | null = null;\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'multi-autocomplete-trigger' as const;\n\n @HostBinding('attr.role')\n protected readonly role = 'combobox' as const;\n\n @HostBinding('attr.aria-haspopup')\n protected readonly haspopup = 'listbox' as const;\n\n @HostBinding('attr.aria-expanded')\n protected get ariaExpanded(): 'true' | 'false' {\n return this.multi.open() ? 'true' : 'false';\n }\n\n @HostBinding('attr.aria-disabled')\n protected get ariaDisabled(): 'true' | null {\n return this.multi.disabled() ? 'true' : null;\n }\n\n @HostBinding('attr.aria-controls')\n protected get ariaControls(): string | null {\n if (!this.multi.open()) return null;\n return this.multi.getContentId() ?? this.multi.getListboxId();\n }\n\n @HostBinding('attr.aria-activedescendant')\n protected get ariaActiveDescendant(): string | null {\n if (!this.multi.open()) return null;\n return this.listbox?.activeId?.() ?? this.multi.getActiveDescendantId();\n }\n\n @HostListener('focus')\n protected onFocus(): void {\n if (this.multi.disabled()) return;\n\n if (!this.multi.open()) {\n this.multi.openSelect();\n\n const q = this.el.nativeElement.value ?? '';\n this.multi.query.set(q);\n\n this.lastEmittedQuery = q;\n this.multi.queryChange.emit(q);\n\n this.listbox?.ensureActive('first');\n }\n }\n\n @HostListener('input', ['$event'])\n protected onInput(event: Event): void {\n if (this.multi.disabled()) return;\n\n const value = (event.target as HTMLInputElement | null)?.value ?? '';\n this.multi.query.set(value);\n\n // Policy A: do not emit during IME composition\n if (this.composing) return;\n\n // Avoid double-emit (e.g., compositionend followed by input)\n if (this.lastEmittedQuery === value) return;\n\n this.lastEmittedQuery = value;\n this.multi.queryChange.emit(value);\n }\n\n @HostListener('keydown', ['$event'])\n protected onKeydown(event: KeyboardEvent): void {\n if (this.multi.disabled()) return;\n\n // Tab should leave the widget and close any open overlay.\n if (event.key === 'Tab') {\n if (this.multi.open()) {\n this.multi.close();\n }\n return;\n }\n\n // Escape closes overlay (no selection changes)\n if (event.key === 'Escape') {\n if (this.multi.open()) {\n event.preventDefault();\n event.stopPropagation();\n this.multi.close();\n }\n return;\n }\n\n // Backspace removes last chip when input is empty\n if (event.key === 'Backspace') {\n const inputValue = this.el.nativeElement.value ?? '';\n if (inputValue.length > 0) return;\n\n const selected = this.multi.value();\n if (selected.length === 0) return;\n\n event.preventDefault();\n event.stopPropagation();\n this.multi.removeLast();\n return;\n }\n\n // Enter commits active option (toggle) and stays open\n if (event.key === 'Enter') {\n if (!this.multi.open()) return;\n if (!this.listbox) return;\n\n event.preventDefault();\n event.stopPropagation();\n this.listbox.commitActive();\n return;\n }\n\n // ArrowLeft on input at caret-start → focus last chip (chips UX loop)\n if (event.key === 'ArrowLeft') {\n const input = this.el.nativeElement;\n\n const start = input.selectionStart ?? 0;\n const end = input.selectionEnd ?? 0;\n\n // Only when caret is at the beginning and there's no selection range.\n if (start === 0 && end === 0) {\n const chips = Array.from(\n this.multi.hostElement.querySelectorAll('[data-slot=\"multi-autocomplete-chip\"]'),\n ) as HTMLElement[];\n\n const lastChip = chips[chips.length - 1] ?? null;\n if (lastChip) {\n event.preventDefault();\n event.stopPropagation();\n lastChip.focus();\n }\n }\n\n return;\n }\n\n // Home / End\n // Home\n if (event.key === 'Home') {\n const input = this.el.nativeElement;\n const start = input.selectionStart ?? 0;\n const end = input.selectionEnd ?? 0;\n\n // Chip UX has priority over listbox navigation\n if (start === 0 && end === 0) {\n const chips = Array.from(\n this.multi.hostElement.querySelectorAll('[data-slot=\"multi-autocomplete-chip\"]'),\n ) as HTMLElement[];\n\n const firstChip = chips[0] ?? null;\n if (firstChip) {\n event.preventDefault();\n event.stopPropagation();\n firstChip.focus();\n return;\n }\n }\n\n // Otherwise delegate to listbox when open\n if (this.multi.open()) {\n const handled = this.listbox?.handleKey(event.key, event.shiftKey);\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n return;\n }\n\n // End\n if (event.key === 'End') {\n // When open → delegate to listbox\n if (this.multi.open()) {\n const handled = this.listbox?.handleKey(event.key, event.shiftKey);\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n return;\n }\n\n // When closed → let browser move caret\n return;\n }\n \n // Navigation keys\n if (NAV_KEYS.has(event.key as any)) {\n if (!this.multi.open()) {\n event.preventDefault();\n event.stopPropagation();\n\n this.multi.openSelect();\n if (event.key === 'ArrowUp' || event.key === 'End') {\n this.listbox?.ensureActive('last');\n } else {\n this.listbox?.ensureActive('first');\n }\n return;\n }\n\n if (this.listbox) {\n const handled = this.listbox.handleKey(event.key, event.shiftKey);\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n return;\n }\n\n // printable keys are NOT prevented (input stays editable)\n }\n\n @HostListener('focusout', ['$event'])\n protected onFocusOut(event: FocusEvent): void {\n if (!this.multi.open()) return;\n\n const next = event.relatedTarget as Node | null;\n if (next && this.multi.hostElement.contains(next)) {\n return;\n }\n\n // Some focus transitions report null relatedTarget. Re-check after DOM focus settles.\n queueMicrotask(() => {\n const active = this.el.nativeElement.ownerDocument.activeElement;\n if (active && this.multi.hostElement.contains(active)) {\n return;\n }\n\n this.multi.close();\n });\n }\n\n @HostListener('compositionstart')\n protected onCompositionStart(): void {\n this.composing = true;\n }\n\n @HostListener('compositionend')\n protected onCompositionEnd(): void {\n this.composing = false;\n\n if (this.multi.disabled()) return;\n\n // Policy A: emit once with the final committed value\n const q = this.el.nativeElement.value ?? '';\n this.multi.query.set(q);\n\n if (this.lastEmittedQuery !== q) {\n this.lastEmittedQuery = q;\n this.multi.queryChange.emit(q);\n }\n }\n\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-select.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;;AAE5E,qBASa,cAAc,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,gBAAgB;IAClE,QAAQ,CAAC,WAAW,MAAiD;IACrE,SAAgB,IAAI,+CAAyB;IAC7C,SAAgB,QAAQ,+CAAyB;IACjD,8DAA8D;IAC9D,SAAgB,KAAK,oDAA2B;IAEhD,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,WAAW,CAA4C;IAE/D,SAAgB,OAAO,+CAAyB;IAChD,SAAgB,OAAO,+CAAyB;IAChD,SAAgB,OAAO,qDAA8B;IACrD,SAAgB,aAAa,qDAA8B;IAC3D,SAAgB,OAAO,qDAA8B;IAGrD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAkB;IAG7D,SAAS,KAAK,SAAS,IAAI,MAAM,GAAG,QAAQ,CAE3C;IAGD,SAAS,KAAK,YAAY,IAAI,EAAE,GAAG,IAAI,CAEtC;IAGD,SAAS,KAAK,WAAW,IAAI,EAAE,GAAG,IAAI,CAErC;IAGD,SAAS,KAAK,WAAW,IAAI,EAAE,GAAG,IAAI,CAErC;IAED,6DAA6D;IAC7D,SAAgB,QAAQ,QAAO,OAAO,CAAS;IAExC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAGrC,YAAY,IAAI,MAAM,GAAG,IAAI;IAG7B,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAGrC,YAAY,IAAI,MAAM,GAAG,IAAI;IAG7B,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAG9C,qBAAqB,IAAI,MAAM,GAAG,IAAI;IAItC,UAAU,IAAI,IAAI;IAIlB,KAAK,IAAI,IAAI;IAGb,MAAM,IAAI,IAAI;IAKrB,6DAA6D;IACtD,eAAe,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAOrC,gEAAgE;IACzD,kBAAkB,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAQxC,gFAAgF;IACzE,kBAAkB,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAWxC,4BAA4B;IACrB,KAAK,IAAI,IAAI;IAKb,aAAa,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI;IAG5D,aAAa,IAAI,wBAAwB,CAAC,CAAC,CAAC,GAAG,IAAI;yCAjH/C,cAAc;2CAAd,cAAc;CAoH1B"}
1
+ {"version":3,"file":"tng-multi-select.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;;AAE5E,qBAQa,cAAc,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,gBAAgB;IAClE,QAAQ,CAAC,WAAW,MAAiD;IACrE,SAAgB,IAAI,+CAAyB;IAC7C,SAAgB,QAAQ,+CAAyB;IACjD,8DAA8D;IAC9D,SAAgB,KAAK,oDAA2B;IAEhD,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,WAAW,CAA4C;IAE/D,SAAgB,OAAO,+CAAyB;IAChD,SAAgB,OAAO,+CAAyB;IAChD,SAAgB,OAAO,qDAA8B;IACrD,SAAgB,aAAa,qDAA8B;IAC3D,SAAgB,OAAO,qDAA8B;IAGrD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAkB;IAG7D,SAAS,KAAK,SAAS,IAAI,MAAM,GAAG,QAAQ,CAE3C;IAGD,SAAS,KAAK,YAAY,IAAI,EAAE,GAAG,IAAI,CAEtC;IAGD,SAAS,KAAK,WAAW,IAAI,EAAE,GAAG,IAAI,CAErC;IAGD,SAAS,KAAK,WAAW,IAAI,EAAE,GAAG,IAAI,CAErC;IAED,6DAA6D;IAC7D,SAAgB,QAAQ,QAAO,OAAO,CAAS;IAExC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAGrC,YAAY,IAAI,MAAM,GAAG,IAAI;IAG7B,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAGrC,YAAY,IAAI,MAAM,GAAG,IAAI;IAG7B,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAG9C,qBAAqB,IAAI,MAAM,GAAG,IAAI;IAItC,UAAU,IAAI,IAAI;IAIlB,KAAK,IAAI,IAAI;IAGb,MAAM,IAAI,IAAI;IAKrB,6DAA6D;IACtD,eAAe,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAOrC,gEAAgE;IACzD,kBAAkB,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAQxC,gFAAgF;IACzE,kBAAkB,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAWxC,4BAA4B;IACrB,KAAK,IAAI,IAAI;IAKb,aAAa,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI;IAG5D,aAAa,IAAI,wBAAwB,CAAC,CAAC,CAAC,GAAG,IAAI;yCAjH/C,cAAc;2CAAd,cAAc;CAoH1B"}
@@ -116,7 +116,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
116
116
  args: [{
117
117
  selector: '[tngMultiSelect]',
118
118
  exportAs: 'tngMultiSelect',
119
- standalone: true,
120
119
  providers: [
121
120
  { provide: TNG_MULTI_SELECT, useExisting: TngMultiSelect },
122
121
  { provide: TNG_SELECT_HOST, useExisting: TngMultiSelect },
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-select.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.ts"],"names":[],"mappings":"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","sourcesContent":["import { Directive, ElementRef, HostBinding, inject, input, model } from '@angular/core';\nimport { TNG_MULTI_SELECT } from './tng-multi-select.tokens';\nimport { TNG_SELECT_HOST } from '../_shared/select/tng-select.tokens.shared';\nimport type { TngSelectHostApi } from '../_shared/select/tng-select.host-api';\nimport { TngMultiSelectListboxApi } from './tng-multi-select.listbox.types';\n\n@Directive({\n selector: '[tngMultiSelect]',\n exportAs: 'tngMultiSelect',\n standalone: true,\n providers: [\n { provide: TNG_MULTI_SELECT, useExisting: TngMultiSelect },\n { provide: TNG_SELECT_HOST, useExisting: TngMultiSelect },\n ],\n})\nexport class TngMultiSelect<T = unknown> implements TngSelectHostApi {\n readonly hostElement = inject(ElementRef<HTMLElement>).nativeElement;\n public readonly open = model<boolean>(false);\n public readonly disabled = input<boolean>(false);\n /** Values of selected options. Empty array = no selection. */\n public readonly value = model<readonly T[]>([]);\n\n private _contentId: string | null = null;\n private _listboxId: string | null = null;\n private _activeId: string | null = null;\n private _listboxApi: TngMultiSelectListboxApi<T> | null = null;\n\n public readonly loading = input<boolean>(false);\n public readonly invalid = input<boolean>(false);\n public readonly labelId = input<string | null>(null);\n public readonly descriptionId = input<string | null>(null);\n public readonly errorId = input<string | null>(null);\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot: 'multi-select' = 'multi-select';\n\n @HostBinding('attr.data-state')\n protected get dataState(): 'open' | 'closed' {\n return this.open() ? 'open' : 'closed';\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabled(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n @HostBinding('attr.data-loading')\n protected get dataLoading(): '' | null {\n return this.loading() ? '' : null;\n }\n\n @HostBinding('attr.data-invalid')\n protected get dataInvalid(): '' | null {\n return this.invalid() ? '' : null;\n }\n\n /** Multi-select: always true. Satisfies TngSelectHostApi. */\n public readonly multiple = (): boolean => true;\n\n public setContentId(id: string | null): void {\n this._contentId = id;\n }\n public getContentId(): string | null {\n return this._contentId;\n }\n public setListboxId(id: string | null): void {\n this._listboxId = id;\n }\n public getListboxId(): string | null {\n return this._listboxId;\n }\n public setActiveDescendantId(id: string | null): void {\n this._activeId = id;\n }\n public getActiveDescendantId(): string | null {\n return this._activeId;\n }\n\n public openSelect(): void {\n if (this.disabled()) return;\n this.open.set(true);\n }\n public close(): void {\n this.open.set(false);\n }\n public toggle(): void {\n if (this.disabled()) return;\n this.open.set(!this.open());\n }\n\n /** Adds an item to the selection if not already selected. */\n public addSelectedItem(item: T): void {\n if (this.disabled()) return;\n const cur = this.value();\n if (cur.some((v) => Object.is(v, item))) return;\n this.value.set([...cur, item]);\n }\n\n /** Removes an item from the selection if currently selected. */\n public removeSelectedItem(item: T): void {\n if (this.disabled()) return;\n const cur = this.value();\n const idx = cur.findIndex((v) => Object.is(v, item));\n if (idx < 0) return;\n this.value.set([...cur.slice(0, idx), ...cur.slice(idx + 1)]);\n }\n\n /** Toggles an item in the selection (add if not present, remove if present). */\n public toggleSelectedItem(item: T): void {\n if (this.disabled()) return;\n const cur = this.value();\n const idx = cur.findIndex((v) => Object.is(v, item));\n const next =\n idx >= 0\n ? [...cur.slice(0, idx), ...cur.slice(idx + 1)]\n : [...cur, item];\n this.value.set(next);\n }\n\n /** Clears the selection. */\n public clear(): void {\n if (this.disabled()) return;\n this.value.set([]);\n }\n\n public setListboxApi(api: TngMultiSelectListboxApi<T> | null): void {\n this._listboxApi = api;\n }\n public getListboxApi(): TngMultiSelectListboxApi<T> | null {\n return this._listboxApi;\n }\n}\n"]}
1
+ {"version":3,"file":"tng-multi-select.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.ts"],"names":[],"mappings":"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","sourcesContent":["import { Directive, ElementRef, HostBinding, inject, input, model } from '@angular/core';\nimport { TNG_MULTI_SELECT } from './tng-multi-select.tokens';\nimport { TNG_SELECT_HOST } from '../_shared/select/tng-select.tokens.shared';\nimport type { TngSelectHostApi } from '../_shared/select/tng-select.host-api';\nimport { TngMultiSelectListboxApi } from './tng-multi-select.listbox.types';\n\n@Directive({\n selector: '[tngMultiSelect]',\n exportAs: 'tngMultiSelect',\n providers: [\n { provide: TNG_MULTI_SELECT, useExisting: TngMultiSelect },\n { provide: TNG_SELECT_HOST, useExisting: TngMultiSelect },\n ],\n})\nexport class TngMultiSelect<T = unknown> implements TngSelectHostApi {\n readonly hostElement = inject(ElementRef<HTMLElement>).nativeElement;\n public readonly open = model<boolean>(false);\n public readonly disabled = input<boolean>(false);\n /** Values of selected options. Empty array = no selection. */\n public readonly value = model<readonly T[]>([]);\n\n private _contentId: string | null = null;\n private _listboxId: string | null = null;\n private _activeId: string | null = null;\n private _listboxApi: TngMultiSelectListboxApi<T> | null = null;\n\n public readonly loading = input<boolean>(false);\n public readonly invalid = input<boolean>(false);\n public readonly labelId = input<string | null>(null);\n public readonly descriptionId = input<string | null>(null);\n public readonly errorId = input<string | null>(null);\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot: 'multi-select' = 'multi-select';\n\n @HostBinding('attr.data-state')\n protected get dataState(): 'open' | 'closed' {\n return this.open() ? 'open' : 'closed';\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabled(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n @HostBinding('attr.data-loading')\n protected get dataLoading(): '' | null {\n return this.loading() ? '' : null;\n }\n\n @HostBinding('attr.data-invalid')\n protected get dataInvalid(): '' | null {\n return this.invalid() ? '' : null;\n }\n\n /** Multi-select: always true. Satisfies TngSelectHostApi. */\n public readonly multiple = (): boolean => true;\n\n public setContentId(id: string | null): void {\n this._contentId = id;\n }\n public getContentId(): string | null {\n return this._contentId;\n }\n public setListboxId(id: string | null): void {\n this._listboxId = id;\n }\n public getListboxId(): string | null {\n return this._listboxId;\n }\n public setActiveDescendantId(id: string | null): void {\n this._activeId = id;\n }\n public getActiveDescendantId(): string | null {\n return this._activeId;\n }\n\n public openSelect(): void {\n if (this.disabled()) return;\n this.open.set(true);\n }\n public close(): void {\n this.open.set(false);\n }\n public toggle(): void {\n if (this.disabled()) return;\n this.open.set(!this.open());\n }\n\n /** Adds an item to the selection if not already selected. */\n public addSelectedItem(item: T): void {\n if (this.disabled()) return;\n const cur = this.value();\n if (cur.some((v) => Object.is(v, item))) return;\n this.value.set([...cur, item]);\n }\n\n /** Removes an item from the selection if currently selected. */\n public removeSelectedItem(item: T): void {\n if (this.disabled()) return;\n const cur = this.value();\n const idx = cur.findIndex((v) => Object.is(v, item));\n if (idx < 0) return;\n this.value.set([...cur.slice(0, idx), ...cur.slice(idx + 1)]);\n }\n\n /** Toggles an item in the selection (add if not present, remove if present). */\n public toggleSelectedItem(item: T): void {\n if (this.disabled()) return;\n const cur = this.value();\n const idx = cur.findIndex((v) => Object.is(v, item));\n const next =\n idx >= 0\n ? [...cur.slice(0, idx), ...cur.slice(idx + 1)]\n : [...cur, item];\n this.value.set(next);\n }\n\n /** Clears the selection. */\n public clear(): void {\n if (this.disabled()) return;\n this.value.set([]);\n }\n\n public setListboxApi(api: TngMultiSelectListboxApi<T> | null): void {\n this._listboxApi = api;\n }\n public getListboxApi(): TngMultiSelectListboxApi<T> | null {\n return this._listboxApi;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-select.listbox.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.listbox.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;;;AAK5E,qBAYa,qBAAqB,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,wBAAwB,CAAC,CAAC,CAAC;IACpF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+C;IAC3E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkD;IAG1E,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAA0B;IAG7E,SAAS,CAAC,QAAQ,CAAC,EAAE,SAAqB;;IAuB1C,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B,WAAW,IAAI,MAAM,GAAG,IAAI;IAI5B,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAI3C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO;IAInD,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI/B,mDAAmD;IACnD,YAAY,IAAI,IAAI;IAKpB,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,GAAG,IAAI;yCA1DzD,qBAAqB;2CAArB,qBAAqB;CAoEjC;AAED,qBAUa,oBAAoB,CAAC,CAAC;IAEjC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAyB;yCAFhE,oBAAoB;2CAApB,oBAAoB;CAGhC"}
1
+ {"version":3,"file":"tng-multi-select.listbox.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.listbox.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;;;AAK5E,qBAWa,qBAAqB,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,wBAAwB,CAAC,CAAC,CAAC;IACpF,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+C;IAC3E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkD;IAG1E,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAA0B;IAG7E,SAAS,CAAC,QAAQ,CAAC,EAAE,SAAqB;;IAuB1C,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B,WAAW,IAAI,MAAM,GAAG,IAAI;IAI5B,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAI3C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO;IAInD,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI/B,mDAAmD;IACnD,YAAY,IAAI,IAAI;IAKpB,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,GAAG,IAAI;yCA1DzD,qBAAqB;2CAArB,qBAAqB;CAoEjC;AAED,qBASa,oBAAoB,CAAC,CAAC;IAEjC,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAyB;yCAFhE,oBAAoB;2CAApB,oBAAoB;CAGhC"}
@@ -68,7 +68,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
68
68
  type: Directive,
69
69
  args: [{
70
70
  selector: '[tngMultiSelectListbox]',
71
- standalone: true,
72
71
  providers: [{ provide: TNG_MULTI_SELECT_LISTBOX, useExisting: TngMultiSelectListbox }],
73
72
  hostDirectives: [
74
73
  {
@@ -97,7 +96,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
97
96
  type: Directive,
98
97
  args: [{
99
98
  selector: '[tngMultiSelectOption]',
100
- standalone: true,
101
99
  hostDirectives: [
102
100
  {
103
101
  directive: TngOptionDirective,
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multi-select.listbox.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.listbox.ts"],"names":[],"mappings":"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","sourcesContent":["import { DestroyRef, Directive, effect, HostBinding, HostListener, inject, untracked } from '@angular/core';\nimport { createTngIdFactory } from '@tailng-ui/cdk';\nimport { arraysEqual, normalizeToArray } from '../../internal/combobox';\nimport type { ListboxValue } from '../listbox/listbox.directive';\nimport { TngListboxDirective, TngOptionDirective } from '@tailng-ui/primitives';\nimport { TNG_MULTI_SELECT } from './tng-multi-select.tokens';\nimport type { TngMultiSelect } from './tng-multi-select';\nimport { TngMultiSelectListboxApi } from './tng-multi-select.listbox.types';\nimport { TNG_MULTI_SELECT_LISTBOX } from './tng-multi-select.listbox.tokens';\n\nconst createListboxId = createTngIdFactory('tng-multi-select-listbox');\n\n@Directive({\n selector: '[tngMultiSelectListbox]',\n standalone: true,\n providers: [{ provide: TNG_MULTI_SELECT_LISTBOX, useExisting: TngMultiSelectListbox }],\n hostDirectives: [\n {\n directive: TngListboxDirective,\n inputs: ['orientation', 'direction', 'disabled', 'loop', 'value', 'multiple'],\n outputs: ['valueChange'],\n },\n ],\n})\nexport class TngMultiSelectListbox<T = unknown> implements TngMultiSelectListboxApi<T> {\n private readonly multiSelect = inject<TngMultiSelect<T>>(TNG_MULTI_SELECT);\n private readonly destroyRef = inject(DestroyRef);\n private readonly listbox = inject(TngListboxDirective<T>, { self: true });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot: 'multi-select-listbox' = 'multi-select-listbox';\n\n @HostBinding('attr.id')\n protected readonly id = createListboxId();\n\n constructor() {\n this.multiSelect.setListboxId(this.id);\n this.multiSelect.setListboxApi(this);\n\n effect(() => {\n const v = this.multiSelect.value();\n if (this.multiSelect.open()) return;\n\n const current = untracked(this.listbox.value);\n const arrV = v.length > 0 ? ([...v] as readonly T[]) : null;\n const arrCur = normalizeToArray(current);\n if (arraysEqual(arrV, arrCur)) return;\n this.listbox.value.set((v.length > 0 ? v : null) as ListboxValue<T>);\n });\n\n this.destroyRef.onDestroy(() => {\n this.multiSelect.setListboxId(null);\n this.multiSelect.setListboxApi(null);\n });\n }\n\n getHostId(): string | null {\n return this.id ?? null;\n }\n\n getActiveId(): string | null {\n return this.listbox.getActiveId();\n }\n\n ensureActive(pref?: 'first' | 'last'): void {\n this.listbox.ensureActive(pref);\n }\n\n handleKey(key: string, shiftKey?: boolean): boolean {\n return this.listbox.handleKeyFromCombobox(key, shiftKey);\n }\n\n typeahead(key: string): boolean {\n return this.listbox.typeaheadFromCombobox(key);\n }\n\n /** Multi: Enter toggles option, does not close. */\n commitActive(): void {\n this.listbox.handleKeyFromCombobox('Enter');\n }\n\n @HostListener('valueChange', ['$event'])\n protected onListboxValueChange(value: T | readonly T[] | null): void {\n if (this.multiSelect.disabled()) return;\n\n const next = normalizeToArray(value);\n const cur = this.multiSelect.value();\n if (arraysEqual(next, cur.length > 0 ? cur : null)) return;\n\n this.multiSelect.value.set(next && next.length > 0 ? [...next] : []);\n // Multi: overlay stays open\n }\n}\n\n@Directive({\n selector: '[tngMultiSelectOption]',\n standalone: true,\n hostDirectives: [\n {\n directive: TngOptionDirective,\n inputs: ['tngValue', 'disabled'],\n },\n ],\n})\nexport class TngMultiSelectOption<T> {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot: 'multi-select-option' = 'multi-select-option';\n}\n"]}
1
+ {"version":3,"file":"tng-multi-select.listbox.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multi-select/tng-multi-select.listbox.ts"],"names":[],"mappings":"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","sourcesContent":["import { DestroyRef, Directive, effect, HostBinding, HostListener, inject, untracked } from '@angular/core';\nimport { createTngIdFactory } from '@tailng-ui/cdk';\nimport { arraysEqual, normalizeToArray } from '../../internal/combobox';\nimport type { ListboxValue } from '../listbox/listbox.directive';\nimport { TngListboxDirective, TngOptionDirective } from '@tailng-ui/primitives';\nimport { TNG_MULTI_SELECT } from './tng-multi-select.tokens';\nimport type { TngMultiSelect } from './tng-multi-select';\nimport { TngMultiSelectListboxApi } from './tng-multi-select.listbox.types';\nimport { TNG_MULTI_SELECT_LISTBOX } from './tng-multi-select.listbox.tokens';\n\nconst createListboxId = createTngIdFactory('tng-multi-select-listbox');\n\n@Directive({\n selector: '[tngMultiSelectListbox]',\n providers: [{ provide: TNG_MULTI_SELECT_LISTBOX, useExisting: TngMultiSelectListbox }],\n hostDirectives: [\n {\n directive: TngListboxDirective,\n inputs: ['orientation', 'direction', 'disabled', 'loop', 'value', 'multiple'],\n outputs: ['valueChange'],\n },\n ],\n})\nexport class TngMultiSelectListbox<T = unknown> implements TngMultiSelectListboxApi<T> {\n private readonly multiSelect = inject<TngMultiSelect<T>>(TNG_MULTI_SELECT);\n private readonly destroyRef = inject(DestroyRef);\n private readonly listbox = inject(TngListboxDirective<T>, { self: true });\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot: 'multi-select-listbox' = 'multi-select-listbox';\n\n @HostBinding('attr.id')\n protected readonly id = createListboxId();\n\n constructor() {\n this.multiSelect.setListboxId(this.id);\n this.multiSelect.setListboxApi(this);\n\n effect(() => {\n const v = this.multiSelect.value();\n if (this.multiSelect.open()) return;\n\n const current = untracked(this.listbox.value);\n const arrV = v.length > 0 ? ([...v] as readonly T[]) : null;\n const arrCur = normalizeToArray(current);\n if (arraysEqual(arrV, arrCur)) return;\n this.listbox.value.set((v.length > 0 ? v : null) as ListboxValue<T>);\n });\n\n this.destroyRef.onDestroy(() => {\n this.multiSelect.setListboxId(null);\n this.multiSelect.setListboxApi(null);\n });\n }\n\n getHostId(): string | null {\n return this.id ?? null;\n }\n\n getActiveId(): string | null {\n return this.listbox.getActiveId();\n }\n\n ensureActive(pref?: 'first' | 'last'): void {\n this.listbox.ensureActive(pref);\n }\n\n handleKey(key: string, shiftKey?: boolean): boolean {\n return this.listbox.handleKeyFromCombobox(key, shiftKey);\n }\n\n typeahead(key: string): boolean {\n return this.listbox.typeaheadFromCombobox(key);\n }\n\n /** Multi: Enter toggles option, does not close. */\n commitActive(): void {\n this.listbox.handleKeyFromCombobox('Enter');\n }\n\n @HostListener('valueChange', ['$event'])\n protected onListboxValueChange(value: T | readonly T[] | null): void {\n if (this.multiSelect.disabled()) return;\n\n const next = normalizeToArray(value);\n const cur = this.multiSelect.value();\n if (arraysEqual(next, cur.length > 0 ? cur : null)) return;\n\n this.multiSelect.value.set(next && next.length > 0 ? [...next] : []);\n // Multi: overlay stays open\n }\n}\n\n@Directive({\n selector: '[tngMultiSelectOption]',\n hostDirectives: [\n {\n directive: TngOptionDirective,\n inputs: ['tngValue', 'disabled'],\n },\n ],\n})\nexport class TngMultiSelectOption<T> {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot: 'multi-select-option' = 'multi-select-option';\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multiselect.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multiselect/tng-multiselect.ts"],"names":[],"mappings":";AAEA,qBAKa,cAAc;IAEzB,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,aAAa,CAAU;yCAF1C,cAAc;2CAAd,cAAc;CAG1B"}
1
+ {"version":3,"file":"tng-multiselect.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multiselect/tng-multiselect.ts"],"names":[],"mappings":";AAEA,qBAIa,cAAc;IAEzB,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,aAAa,CAAU;yCAF1C,cAAc;2CAAd,cAAc;CAG1B"}
@@ -10,7 +10,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
10
10
  args: [{
11
11
  selector: '[tngMultiselect]',
12
12
  exportAs: 'tngMultiselect',
13
- standalone: true,
14
13
  }]
15
14
  }], propDecorators: { dataSlot: [{
16
15
  type: HostBinding,
@@ -1 +1 @@
1
- {"version":3,"file":"tng-multiselect.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multiselect/tng-multiselect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;;AAOvD,MAAM,OAAO,cAAc;IAEN,QAAQ,GAAG,aAAsB,CAAC;uGAF1C,cAAc;2FAAd,cAAc;;2FAAd,cAAc;kBAL1B,SAAS;mBAAC;oBACT,QAAQ,EAAE,kBAAkB;oBAC5B,QAAQ,EAAE,gBAAgB;oBAC1B,UAAU,EAAE,IAAI;iBACjB;;sBAEE,WAAW;uBAAC,gBAAgB","sourcesContent":["import { Directive, HostBinding } from '@angular/core';\n\n@Directive({\n selector: '[tngMultiselect]',\n exportAs: 'tngMultiselect',\n standalone: true,\n})\nexport class TngMultiselect {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'multiselect' as const;\n}\n"]}
1
+ {"version":3,"file":"tng-multiselect.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/multiselect/tng-multiselect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;;AAMvD,MAAM,OAAO,cAAc;IAEN,QAAQ,GAAG,aAAsB,CAAC;uGAF1C,cAAc;2FAAd,cAAc;;2FAAd,cAAc;kBAJ1B,SAAS;mBAAC;oBACT,QAAQ,EAAE,kBAAkB;oBAC5B,QAAQ,EAAE,gBAAgB;iBAC3B;;sBAEE,WAAW;uBAAC,gBAAgB","sourcesContent":["import { Directive, HostBinding } from '@angular/core';\n\n@Directive({\n selector: '[tngMultiselect]',\n exportAs: 'tngMultiselect',\n})\nexport class TngMultiselect {\n @HostBinding('attr.data-slot')\n protected readonly dataSlot = 'multiselect' as const;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tng-radio.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/radio/tng-radio.ts"],"names":[],"mappings":";AAUA,KAAK,oBAAoB,GAAG,EAAE,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAE/E,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAO5F;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,GAAG,IAAI,CAczF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,WAAW,CAElF;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,OAAO,GAAG,IAAI,EACvB,WAAW,EAAE,OAAO,GAAG,IAAI,GAC1B,OAAO,CAUT;AAED,qBAKa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoD;IAC/E,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAS;IAE7B,SAAgB,eAAe,qDAA8B;IAC7D,SAAgB,WAAW,yFAExB;IACH,SAAgB,OAAO,8EAEpB;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,OAAO,yFAEpB;IACH,SAAgB,IAAI,qDAA8B;IAClD,SAAgB,QAAQ,8EAErB;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,KAAK,qDAA8B;IACnD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,OAAO,CAAU;IAG/C,SAAS,KAAK,WAAW,IAAI,OAAO,CAEnC;IAGD,SAAS,KAAK,eAAe,IAAI,OAAO,GAAG,MAAM,CAEhD;IAGD,SAAS,KAAK,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAE9C;IAGD,SAAS,KAAK,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAEjD;IAGD,SAAS,KAAK,eAAe,IAAI,MAAM,GAAG,IAAI,CAE7C;IAGD,SAAS,KAAK,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAE9C;IAGD,SAAS,KAAK,eAAe,IAAI,EAAE,GAAG,IAAI,CAEzC;IAGD,SAAS,KAAK,gBAAgB,IAAI,EAAE,GAAG,IAAI,CAE1C;IAGD,SAAS,KAAK,eAAe,IAAI,EAAE,GAAG,IAAI,CAEzC;IAGD,SAAS,KAAK,oBAAoB,IAAI,EAAE,GAAG,IAAI,CAE9C;IAGD,SAAS,KAAK,eAAe,IAAI,EAAE,GAAG,IAAI,CAEzC;IAGD,SAAS,KAAK,gBAAgB,IAAI,EAAE,GAAG,IAAI,CAE1C;IAGD,SAAS,KAAK,gBAAgB,IAAI,EAAE,GAAG,IAAI,CAE1C;IAGD,SAAS,KAAK,aAAa,IAAI,SAAS,GAAG,WAAW,CAErD;IAGD,SAAS,KAAK,iBAAiB,IAAI,EAAE,GAAG,IAAI,CAE3C;IAGD,SAAS,KAAK,YAAY,IAAI,EAAE,GAAG,IAAI,CAEtC;IAGD,SAAS,KAAK,QAAQ,IAAI,MAAM,GAAG,IAAI,CAEtC;IAGD,SAAS,KAAK,YAAY,IAAI,EAAE,GAAG,IAAI,CAEtC;IAGD,SAAS,KAAK,YAAY,IAAI,OAAO,CAEpC;IAGD,SAAS,KAAK,SAAS,IAAI,MAAM,GAAG,IAAI,CAEvC;IAGM,MAAM,IAAI,IAAI;IAMd,OAAO,IAAI,IAAI;IAMf,gBAAgB,IAAI,IAAI;IAQ/B,OAAO,CAAC,SAAS;yCArJN,QAAQ;2CAAR,QAAQ;CAwJpB"}
1
+ {"version":3,"file":"tng-radio.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/radio/tng-radio.ts"],"names":[],"mappings":";AAUA,KAAK,oBAAoB,GAAG,EAAE,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;AAE/E,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAO5F;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,GAAG,IAAI,CAczF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,WAAW,CAElF;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,OAAO,GAAG,IAAI,EACvB,WAAW,EAAE,OAAO,GAAG,IAAI,GAC1B,OAAO,CAUT;AAED,qBAIa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoD;IAC/E,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAS;IAE7B,SAAgB,eAAe,qDAA8B;IAC7D,SAAgB,WAAW,yFAExB;IACH,SAAgB,OAAO,8EAEpB;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,OAAO,yFAEpB;IACH,SAAgB,IAAI,qDAA8B;IAClD,SAAgB,QAAQ,8EAErB;IACH,SAAgB,QAAQ,8EAErB;IACH,SAAgB,KAAK,qDAA8B;IACnD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAG,OAAO,CAAU;IAG/C,SAAS,KAAK,WAAW,IAAI,OAAO,CAEnC;IAGD,SAAS,KAAK,eAAe,IAAI,OAAO,GAAG,MAAM,CAEhD;IAGD,SAAS,KAAK,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAE9C;IAGD,SAAS,KAAK,mBAAmB,IAAI,MAAM,GAAG,IAAI,CAEjD;IAGD,SAAS,KAAK,eAAe,IAAI,MAAM,GAAG,IAAI,CAE7C;IAGD,SAAS,KAAK,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAE9C;IAGD,SAAS,KAAK,eAAe,IAAI,EAAE,GAAG,IAAI,CAEzC;IAGD,SAAS,KAAK,gBAAgB,IAAI,EAAE,GAAG,IAAI,CAE1C;IAGD,SAAS,KAAK,eAAe,IAAI,EAAE,GAAG,IAAI,CAEzC;IAGD,SAAS,KAAK,oBAAoB,IAAI,EAAE,GAAG,IAAI,CAE9C;IAGD,SAAS,KAAK,eAAe,IAAI,EAAE,GAAG,IAAI,CAEzC;IAGD,SAAS,KAAK,gBAAgB,IAAI,EAAE,GAAG,IAAI,CAE1C;IAGD,SAAS,KAAK,gBAAgB,IAAI,EAAE,GAAG,IAAI,CAE1C;IAGD,SAAS,KAAK,aAAa,IAAI,SAAS,GAAG,WAAW,CAErD;IAGD,SAAS,KAAK,iBAAiB,IAAI,EAAE,GAAG,IAAI,CAE3C;IAGD,SAAS,KAAK,YAAY,IAAI,EAAE,GAAG,IAAI,CAEtC;IAGD,SAAS,KAAK,QAAQ,IAAI,MAAM,GAAG,IAAI,CAEtC;IAGD,SAAS,KAAK,YAAY,IAAI,EAAE,GAAG,IAAI,CAEtC;IAGD,SAAS,KAAK,YAAY,IAAI,OAAO,CAEpC;IAGD,SAAS,KAAK,SAAS,IAAI,MAAM,GAAG,IAAI,CAEvC;IAGM,MAAM,IAAI,IAAI;IAMd,OAAO,IAAI,IAAI;IAMf,gBAAgB,IAAI,IAAI;IAQ/B,OAAO,CAAC,SAAS;yCArJN,QAAQ;2CAAR,QAAQ;CAwJpB"}
@@ -130,7 +130,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
130
130
  args: [{
131
131
  selector: 'input[tngRadio]',
132
132
  exportAs: 'tngRadio',
133
- standalone: true,
134
133
  }]
135
134
  }], propDecorators: { ariaDescribedBy: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaDescribedBy", required: false }] }], ariaInvalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaInvalid", required: false }] }], checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], invalid: [{ type: i0.Input, args: [{ isSignal: true, alias: "invalid", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], checkedProp: [{
136
135
  type: HostBinding,
@@ -1 +1 @@
1
- {"version":3,"file":"tng-radio.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/radio/tng-radio.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n booleanAttribute,\n inject,\n input,\n} from '@angular/core';\n\ntype NullableBooleanInput = '' | 'false' | 'true' | boolean | null | undefined;\n\nexport function normalizeTngRadioStringValue(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\nexport function coerceTngRadioNullableBoolean(value: NullableBooleanInput): boolean | null {\n if (value === undefined || value === null) {\n return null;\n }\n\n if (value === '' || value === true || value === 'true') {\n return true;\n }\n\n if (value === false || value === 'false') {\n return false;\n }\n\n return null;\n}\n\nexport function resolveTngRadioDataState(checked: boolean): 'checked' | 'unchecked' {\n return checked ? 'checked' : 'unchecked';\n}\n\nexport function resolveTngRadioInvalidState(\n invalid: boolean | null,\n ariaInvalid: boolean | null,\n): boolean {\n if (invalid !== null) {\n return invalid;\n }\n\n if (ariaInvalid !== null) {\n return ariaInvalid;\n }\n\n return false;\n}\n\n@Directive({\n selector: 'input[tngRadio]',\n exportAs: 'tngRadio',\n standalone: true,\n})\nexport class TngRadio {\n private readonly elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private focused = false;\n private focusVisible = false;\n\n public readonly ariaDescribedBy = input<string | null>(null);\n public readonly ariaInvalid = input<boolean | null, NullableBooleanInput>(null, {\n transform: coerceTngRadioNullableBoolean,\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 | null, NullableBooleanInput>(null, {\n transform: coerceTngRadioNullableBoolean,\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 | null>(null);\n protected readonly typeAttr = 'radio' as const;\n\n @HostBinding('checked')\n protected get checkedProp(): boolean {\n return this.checked();\n }\n\n @HostBinding('attr.aria-checked')\n protected get ariaCheckedAttr(): 'false' | 'true' {\n return this.checked() ? 'true' : 'false';\n }\n\n @HostBinding('attr.aria-disabled')\n protected get ariaDisabledAttr(): 'true' | null {\n return this.disabled() ? 'true' : null;\n }\n\n @HostBinding('attr.aria-describedby')\n protected get ariaDescribedByAttr(): string | null {\n return normalizeTngRadioStringValue(this.ariaDescribedBy());\n }\n\n @HostBinding('attr.aria-invalid')\n protected get ariaInvalidAttr(): 'true' | null {\n return this.isInvalid() ? 'true' : null;\n }\n\n @HostBinding('attr.aria-readonly')\n protected get ariaReadonlyAttr(): 'true' | null {\n return this.readonly() ? 'true' : null;\n }\n\n @HostBinding('attr.data-checked')\n protected get dataCheckedAttr(): '' | null {\n return this.checked() ? '' : null;\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabledAttr(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n @HostBinding('attr.data-focused')\n protected get dataFocusedAttr(): '' | null {\n return this.focused ? '' : null;\n }\n\n @HostBinding('attr.data-focus-visible')\n protected get dataFocusVisibleAttr(): '' | null {\n return this.focusVisible ? '' : null;\n }\n\n @HostBinding('attr.data-invalid')\n protected get dataInvalidAttr(): '' | null {\n return this.isInvalid() ? '' : null;\n }\n\n @HostBinding('attr.data-readonly')\n protected get dataReadonlyAttr(): '' | null {\n return this.readonly() ? '' : null;\n }\n\n @HostBinding('attr.data-required')\n protected get dataRequiredAttr(): '' | null {\n return this.required() ? '' : null;\n }\n\n @HostBinding('attr.data-state')\n protected get dataStateAttr(): 'checked' | 'unchecked' {\n return resolveTngRadioDataState(this.checked());\n }\n\n @HostBinding('attr.data-unchecked')\n protected get dataUncheckedAttr(): '' | null {\n return this.checked() ? null : '';\n }\n\n @HostBinding('attr.disabled')\n protected get disabledAttr(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n @HostBinding('attr.name')\n protected get nameAttr(): string | null {\n return normalizeTngRadioStringValue(this.name());\n }\n\n @HostBinding('attr.required')\n protected get requiredAttr(): '' | null {\n return this.required() ? '' : null;\n }\n\n @HostBinding('attr.type')\n protected get hostTypeAttr(): 'radio' {\n return this.typeAttr;\n }\n\n @HostBinding('attr.value')\n protected get valueAttr(): string | null {\n return normalizeTngRadioStringValue(this.value());\n }\n\n @HostListener('blur')\n public onBlur(): void {\n this.focused = false;\n this.focusVisible = false;\n }\n\n @HostListener('focus')\n public onFocus(): void {\n this.focused = true;\n this.focusVisible = this.elementRef.nativeElement.matches(':focus-visible');\n }\n\n @HostListener('change')\n public onReadonlyChange(): void {\n if (!this.readonly() || this.disabled()) {\n return;\n }\n\n this.elementRef.nativeElement.checked = this.checked();\n }\n\n private isInvalid(): boolean {\n return resolveTngRadioInvalidState(this.invalid(), this.ariaInvalid());\n }\n}\n"]}
1
+ {"version":3,"file":"tng-radio.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/radio/tng-radio.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n booleanAttribute,\n inject,\n input,\n} from '@angular/core';\n\ntype NullableBooleanInput = '' | 'false' | 'true' | boolean | null | undefined;\n\nexport function normalizeTngRadioStringValue(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\nexport function coerceTngRadioNullableBoolean(value: NullableBooleanInput): boolean | null {\n if (value === undefined || value === null) {\n return null;\n }\n\n if (value === '' || value === true || value === 'true') {\n return true;\n }\n\n if (value === false || value === 'false') {\n return false;\n }\n\n return null;\n}\n\nexport function resolveTngRadioDataState(checked: boolean): 'checked' | 'unchecked' {\n return checked ? 'checked' : 'unchecked';\n}\n\nexport function resolveTngRadioInvalidState(\n invalid: boolean | null,\n ariaInvalid: boolean | null,\n): boolean {\n if (invalid !== null) {\n return invalid;\n }\n\n if (ariaInvalid !== null) {\n return ariaInvalid;\n }\n\n return false;\n}\n\n@Directive({\n selector: 'input[tngRadio]',\n exportAs: 'tngRadio',\n})\nexport class TngRadio {\n private readonly elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private focused = false;\n private focusVisible = false;\n\n public readonly ariaDescribedBy = input<string | null>(null);\n public readonly ariaInvalid = input<boolean | null, NullableBooleanInput>(null, {\n transform: coerceTngRadioNullableBoolean,\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 | null, NullableBooleanInput>(null, {\n transform: coerceTngRadioNullableBoolean,\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 | null>(null);\n protected readonly typeAttr = 'radio' as const;\n\n @HostBinding('checked')\n protected get checkedProp(): boolean {\n return this.checked();\n }\n\n @HostBinding('attr.aria-checked')\n protected get ariaCheckedAttr(): 'false' | 'true' {\n return this.checked() ? 'true' : 'false';\n }\n\n @HostBinding('attr.aria-disabled')\n protected get ariaDisabledAttr(): 'true' | null {\n return this.disabled() ? 'true' : null;\n }\n\n @HostBinding('attr.aria-describedby')\n protected get ariaDescribedByAttr(): string | null {\n return normalizeTngRadioStringValue(this.ariaDescribedBy());\n }\n\n @HostBinding('attr.aria-invalid')\n protected get ariaInvalidAttr(): 'true' | null {\n return this.isInvalid() ? 'true' : null;\n }\n\n @HostBinding('attr.aria-readonly')\n protected get ariaReadonlyAttr(): 'true' | null {\n return this.readonly() ? 'true' : null;\n }\n\n @HostBinding('attr.data-checked')\n protected get dataCheckedAttr(): '' | null {\n return this.checked() ? '' : null;\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabledAttr(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n @HostBinding('attr.data-focused')\n protected get dataFocusedAttr(): '' | null {\n return this.focused ? '' : null;\n }\n\n @HostBinding('attr.data-focus-visible')\n protected get dataFocusVisibleAttr(): '' | null {\n return this.focusVisible ? '' : null;\n }\n\n @HostBinding('attr.data-invalid')\n protected get dataInvalidAttr(): '' | null {\n return this.isInvalid() ? '' : null;\n }\n\n @HostBinding('attr.data-readonly')\n protected get dataReadonlyAttr(): '' | null {\n return this.readonly() ? '' : null;\n }\n\n @HostBinding('attr.data-required')\n protected get dataRequiredAttr(): '' | null {\n return this.required() ? '' : null;\n }\n\n @HostBinding('attr.data-state')\n protected get dataStateAttr(): 'checked' | 'unchecked' {\n return resolveTngRadioDataState(this.checked());\n }\n\n @HostBinding('attr.data-unchecked')\n protected get dataUncheckedAttr(): '' | null {\n return this.checked() ? null : '';\n }\n\n @HostBinding('attr.disabled')\n protected get disabledAttr(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n @HostBinding('attr.name')\n protected get nameAttr(): string | null {\n return normalizeTngRadioStringValue(this.name());\n }\n\n @HostBinding('attr.required')\n protected get requiredAttr(): '' | null {\n return this.required() ? '' : null;\n }\n\n @HostBinding('attr.type')\n protected get hostTypeAttr(): 'radio' {\n return this.typeAttr;\n }\n\n @HostBinding('attr.value')\n protected get valueAttr(): string | null {\n return normalizeTngRadioStringValue(this.value());\n }\n\n @HostListener('blur')\n public onBlur(): void {\n this.focused = false;\n this.focusVisible = false;\n }\n\n @HostListener('focus')\n public onFocus(): void {\n this.focused = true;\n this.focusVisible = this.elementRef.nativeElement.matches(':focus-visible');\n }\n\n @HostListener('change')\n public onReadonlyChange(): void {\n if (!this.readonly() || this.disabled()) {\n return;\n }\n\n this.elementRef.nativeElement.checked = this.checked();\n }\n\n private isInvalid(): boolean {\n return resolveTngRadioInvalidState(this.invalid(), this.ariaInvalid());\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tng-select.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/select/tng-select.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;;AAEjE,qBASa,SAAS,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,gBAAgB;IAC7D,QAAQ,CAAC,WAAW,MAAiD;IACrE,SAAgB,IAAI,+CAAyB;IAC7C,SAAgB,QAAQ,+CAAyB;IACjD,wDAAwD;IACxD,SAAgB,KAAK,gDAAyB;IAE9C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,WAAW,CAAuC;IAE1D,SAAgB,OAAO,+CAAyB;IAChD,SAAgB,OAAO,+CAAyB;IAChD,SAAgB,OAAO,qDAA8B;IACrD,SAAgB,aAAa,qDAA8B;IAC3D,SAAgB,OAAO,qDAA8B;IAGrD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAY;IAGjD,SAAS,KAAK,SAAS,IAAI,MAAM,GAAG,QAAQ,CAE3C;IAGD,SAAS,KAAK,YAAY,IAAI,EAAE,GAAG,IAAI,CAEtC;IAGD,SAAS,KAAK,WAAW,IAAI,EAAE,GAAG,IAAI,CAErC;IAGD,SAAS,KAAK,WAAW,IAAI,EAAE,GAAG,IAAI,CAErC;IAED,+DAA+D;IAC/D,SAAgB,QAAQ,QAAO,OAAO,CAAU;IAEzC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAGrC,YAAY,IAAI,MAAM,GAAG,IAAI;IAG7B,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAGrC,YAAY,IAAI,MAAM,GAAG,IAAI;IAG7B,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAG9C,qBAAqB,IAAI,MAAM,GAAG,IAAI;IAItC,UAAU,IAAI,IAAI;IAIlB,KAAK,IAAI,IAAI;IAGb,MAAM,IAAI,IAAI;IAKd,WAAW,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAM3B,aAAa,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI;IAGvD,aAAa,IAAI,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI;yCApF1C,SAAS;2CAAT,SAAS;CAuFrB"}
1
+ {"version":3,"file":"tng-select.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/select/tng-select.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;;AAEjE,qBAQa,SAAS,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,gBAAgB;IAC7D,QAAQ,CAAC,WAAW,MAAiD;IACrE,SAAgB,IAAI,+CAAyB;IAC7C,SAAgB,QAAQ,+CAAyB;IACjD,wDAAwD;IACxD,SAAgB,KAAK,gDAAyB;IAE9C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,WAAW,CAAuC;IAE1D,SAAgB,OAAO,+CAAyB;IAChD,SAAgB,OAAO,+CAAyB;IAChD,SAAgB,OAAO,qDAA8B;IACrD,SAAgB,aAAa,qDAA8B;IAC3D,SAAgB,OAAO,qDAA8B;IAGrD,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAY;IAGjD,SAAS,KAAK,SAAS,IAAI,MAAM,GAAG,QAAQ,CAE3C;IAGD,SAAS,KAAK,YAAY,IAAI,EAAE,GAAG,IAAI,CAEtC;IAGD,SAAS,KAAK,WAAW,IAAI,EAAE,GAAG,IAAI,CAErC;IAGD,SAAS,KAAK,WAAW,IAAI,EAAE,GAAG,IAAI,CAErC;IAED,+DAA+D;IAC/D,SAAgB,QAAQ,QAAO,OAAO,CAAU;IAEzC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAGrC,YAAY,IAAI,MAAM,GAAG,IAAI;IAG7B,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAGrC,YAAY,IAAI,MAAM,GAAG,IAAI;IAG7B,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAG9C,qBAAqB,IAAI,MAAM,GAAG,IAAI;IAItC,UAAU,IAAI,IAAI;IAIlB,KAAK,IAAI,IAAI;IAGb,MAAM,IAAI,IAAI;IAKd,WAAW,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI;IAM3B,aAAa,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI;IAGvD,aAAa,IAAI,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI;yCApF1C,SAAS;2CAAT,SAAS;CAuFrB"}
@@ -86,7 +86,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
86
86
  args: [{
87
87
  selector: '[tngSelect]',
88
88
  exportAs: 'tngSelect',
89
- standalone: true,
90
89
  providers: [
91
90
  { provide: TNG_SELECT, useExisting: TngSelect },
92
91
  { provide: TNG_SELECT_HOST, useExisting: TngSelect },
@@ -1 +1 @@
1
- {"version":3,"file":"tng-select.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/select/tng-select.ts"],"names":[],"mappings":"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","sourcesContent":["import { Directive, ElementRef, HostBinding, inject, input, model } from '@angular/core';\nimport { TNG_SELECT } from './tng-select.tokens';\nimport { TNG_SELECT_HOST } from '../_shared/select/tng-select.tokens.shared';\nimport type { TngSelectHostApi } from '../_shared/select/tng-select.host-api';\nimport { TngSelectListboxApi } from './tng-select.listbox.types';\n\n@Directive({\n selector: '[tngSelect]',\n exportAs: 'tngSelect',\n standalone: true,\n providers: [\n { provide: TNG_SELECT, useExisting: TngSelect },\n { provide: TNG_SELECT_HOST, useExisting: TngSelect },\n ],\n})\nexport class TngSelect<T = unknown> implements TngSelectHostApi {\n readonly hostElement = inject(ElementRef<HTMLElement>).nativeElement;\n public readonly open = model<boolean>(false);\n public readonly disabled = input<boolean>(false);\n /** Value of the selected option. Single-select only. */\n public readonly value = model<T | null>(null);\n\n private _contentId: string | null = null;\n private _listboxId: string | null = null;\n private _activeId: string | null = null;\n private _listboxApi: TngSelectListboxApi<T> | null = null;\n\n public readonly loading = input<boolean>(false);\n public readonly invalid = input<boolean>(false);\n public readonly labelId = input<string | null>(null);\n public readonly descriptionId = input<string | null>(null);\n public readonly errorId = input<string | null>(null);\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot: 'select' = 'select';\n\n @HostBinding('attr.data-state')\n protected get dataState(): 'open' | 'closed' {\n return this.open() ? 'open' : 'closed';\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabled(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n @HostBinding('attr.data-loading')\n protected get dataLoading(): '' | null {\n return this.loading() ? '' : null;\n }\n\n @HostBinding('attr.data-invalid')\n protected get dataInvalid(): '' | null {\n return this.invalid() ? '' : null;\n }\n\n /** Single-select: always false. Satisfies TngSelectHostApi. */\n public readonly multiple = (): boolean => false;\n\n public setContentId(id: string | null): void {\n this._contentId = id;\n }\n public getContentId(): string | null {\n return this._contentId;\n }\n public setListboxId(id: string | null): void {\n this._listboxId = id;\n }\n public getListboxId(): string | null {\n return this._listboxId;\n }\n public setActiveDescendantId(id: string | null): void {\n this._activeId = id;\n }\n public getActiveDescendantId(): string | null {\n return this._activeId;\n }\n\n public openSelect(): void {\n if (this.disabled()) return;\n this.open.set(true);\n }\n public close(): void {\n this.open.set(false);\n }\n public toggle(): void {\n if (this.disabled()) return;\n this.open.set(!this.open());\n }\n\n public selectValue(value: T): void {\n if (this.disabled()) return;\n this.value.set(value);\n this.close();\n }\n\n public setListboxApi(api: TngSelectListboxApi<T> | null): void {\n this._listboxApi = api;\n }\n public getListboxApi(): TngSelectListboxApi<T> | null {\n return this._listboxApi;\n }\n}\n"]}
1
+ {"version":3,"file":"tng-select.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/select/tng-select.ts"],"names":[],"mappings":"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","sourcesContent":["import { Directive, ElementRef, HostBinding, inject, input, model } from '@angular/core';\nimport { TNG_SELECT } from './tng-select.tokens';\nimport { TNG_SELECT_HOST } from '../_shared/select/tng-select.tokens.shared';\nimport type { TngSelectHostApi } from '../_shared/select/tng-select.host-api';\nimport { TngSelectListboxApi } from './tng-select.listbox.types';\n\n@Directive({\n selector: '[tngSelect]',\n exportAs: 'tngSelect',\n providers: [\n { provide: TNG_SELECT, useExisting: TngSelect },\n { provide: TNG_SELECT_HOST, useExisting: TngSelect },\n ],\n})\nexport class TngSelect<T = unknown> implements TngSelectHostApi {\n readonly hostElement = inject(ElementRef<HTMLElement>).nativeElement;\n public readonly open = model<boolean>(false);\n public readonly disabled = input<boolean>(false);\n /** Value of the selected option. Single-select only. */\n public readonly value = model<T | null>(null);\n\n private _contentId: string | null = null;\n private _listboxId: string | null = null;\n private _activeId: string | null = null;\n private _listboxApi: TngSelectListboxApi<T> | null = null;\n\n public readonly loading = input<boolean>(false);\n public readonly invalid = input<boolean>(false);\n public readonly labelId = input<string | null>(null);\n public readonly descriptionId = input<string | null>(null);\n public readonly errorId = input<string | null>(null);\n\n @HostBinding('attr.data-slot')\n protected readonly dataSlot: 'select' = 'select';\n\n @HostBinding('attr.data-state')\n protected get dataState(): 'open' | 'closed' {\n return this.open() ? 'open' : 'closed';\n }\n\n @HostBinding('attr.data-disabled')\n protected get dataDisabled(): '' | null {\n return this.disabled() ? '' : null;\n }\n\n @HostBinding('attr.data-loading')\n protected get dataLoading(): '' | null {\n return this.loading() ? '' : null;\n }\n\n @HostBinding('attr.data-invalid')\n protected get dataInvalid(): '' | null {\n return this.invalid() ? '' : null;\n }\n\n /** Single-select: always false. Satisfies TngSelectHostApi. */\n public readonly multiple = (): boolean => false;\n\n public setContentId(id: string | null): void {\n this._contentId = id;\n }\n public getContentId(): string | null {\n return this._contentId;\n }\n public setListboxId(id: string | null): void {\n this._listboxId = id;\n }\n public getListboxId(): string | null {\n return this._listboxId;\n }\n public setActiveDescendantId(id: string | null): void {\n this._activeId = id;\n }\n public getActiveDescendantId(): string | null {\n return this._activeId;\n }\n\n public openSelect(): void {\n if (this.disabled()) return;\n this.open.set(true);\n }\n public close(): void {\n this.open.set(false);\n }\n public toggle(): void {\n if (this.disabled()) return;\n this.open.set(!this.open());\n }\n\n public selectValue(value: T): void {\n if (this.disabled()) return;\n this.value.set(value);\n this.close();\n }\n\n public setListboxApi(api: TngSelectListboxApi<T> | null): void {\n this._listboxApi = api;\n }\n public getListboxApi(): TngSelectListboxApi<T> | null {\n return this._listboxApi;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"tng-select.listbox.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/select/tng-select.listbox.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;;;AAIjE,qBAYa,gBAAgB,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,mBAAmB,CAAC,CAAC,CAAC;IAC1E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;IAC3D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkD;IAG1E,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAoB;IAGjE,SAAS,CAAC,QAAQ,CAAC,EAAE,SAAqB;;IA6B1C,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B,WAAW,IAAI,MAAM,GAAG,IAAI;IAI5B,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAI3C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO;IAInD,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI/B,YAAY,IAAI,IAAI;IAOpB,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,GAAG,IAAI;yCAjEzD,gBAAgB;2CAAhB,gBAAgB;CAyF5B;AAED,qBAUa,eAAe,CAAC,CAAC;IAE5B,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAmB;yCAFpD,eAAe;2CAAf,eAAe;CAG3B"}
1
+ {"version":3,"file":"tng-select.listbox.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/primitives/src/lib/form/select/tng-select.listbox.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;;;AAIjE,qBAWa,gBAAgB,CAAC,CAAC,GAAG,OAAO,CAAE,YAAW,mBAAmB,CAAC,CAAC,CAAC;IAC1E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;IAC3D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkD;IAG1E,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAoB;IAGjE,SAAS,CAAC,QAAQ,CAAC,EAAE,SAAqB;;IA6B1C,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B,WAAW,IAAI,MAAM,GAAG,IAAI;IAI5B,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI;IAI3C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO;IAInD,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI/B,YAAY,IAAI,IAAI;IAOpB,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,IAAI,GAAG,IAAI;yCAjEzD,gBAAgB;2CAAhB,gBAAgB;CAyF5B;AAED,qBASa,eAAe,CAAC,CAAC;IAE5B,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAmB;yCAFpD,eAAe;2CAAf,eAAe;CAG3B"}
@@ -84,7 +84,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
84
84
  type: Directive,
85
85
  args: [{
86
86
  selector: '[tngSelectListbox]',
87
- standalone: true,
88
87
  providers: [{ provide: TNG_SELECT_LISTBOX, useExisting: TngSelectListbox }],
89
88
  hostDirectives: [
90
89
  {
@@ -113,7 +112,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImpor
113
112
  type: Directive,
114
113
  args: [{
115
114
  selector: '[tngSelectOption]',
116
- standalone: true,
117
115
  hostDirectives: [
118
116
  {
119
117
  directive: TngOptionDirective,