@raintonic/formaui 0.2.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 (240) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +145 -0
  3. package/fesm2022/raintonic-formaui-cdk-drag-drop.mjs +806 -0
  4. package/fesm2022/raintonic-formaui-cdk-drag-drop.mjs.map +1 -0
  5. package/fesm2022/raintonic-formaui-cdk-form-field.mjs +86 -0
  6. package/fesm2022/raintonic-formaui-cdk-form-field.mjs.map +1 -0
  7. package/fesm2022/raintonic-formaui-cdk-overlay.mjs +1757 -0
  8. package/fesm2022/raintonic-formaui-cdk-overlay.mjs.map +1 -0
  9. package/fesm2022/raintonic-formaui-cdk-virtual-scroll.mjs +287 -0
  10. package/fesm2022/raintonic-formaui-cdk-virtual-scroll.mjs.map +1 -0
  11. package/fesm2022/raintonic-formaui-components-accordion.mjs +217 -0
  12. package/fesm2022/raintonic-formaui-components-accordion.mjs.map +1 -0
  13. package/fesm2022/raintonic-formaui-components-alert.mjs +161 -0
  14. package/fesm2022/raintonic-formaui-components-alert.mjs.map +1 -0
  15. package/fesm2022/raintonic-formaui-components-autocomplete.mjs +726 -0
  16. package/fesm2022/raintonic-formaui-components-autocomplete.mjs.map +1 -0
  17. package/fesm2022/raintonic-formaui-components-avatar.mjs +92 -0
  18. package/fesm2022/raintonic-formaui-components-avatar.mjs.map +1 -0
  19. package/fesm2022/raintonic-formaui-components-badge.mjs +107 -0
  20. package/fesm2022/raintonic-formaui-components-badge.mjs.map +1 -0
  21. package/fesm2022/raintonic-formaui-components-big-menu.mjs +68 -0
  22. package/fesm2022/raintonic-formaui-components-big-menu.mjs.map +1 -0
  23. package/fesm2022/raintonic-formaui-components-breadcrumb.mjs +55 -0
  24. package/fesm2022/raintonic-formaui-components-breadcrumb.mjs.map +1 -0
  25. package/fesm2022/raintonic-formaui-components-button-group.mjs +103 -0
  26. package/fesm2022/raintonic-formaui-components-button-group.mjs.map +1 -0
  27. package/fesm2022/raintonic-formaui-components-button.mjs +241 -0
  28. package/fesm2022/raintonic-formaui-components-button.mjs.map +1 -0
  29. package/fesm2022/raintonic-formaui-components-card.mjs +270 -0
  30. package/fesm2022/raintonic-formaui-components-card.mjs.map +1 -0
  31. package/fesm2022/raintonic-formaui-components-checkbox.mjs +295 -0
  32. package/fesm2022/raintonic-formaui-components-checkbox.mjs.map +1 -0
  33. package/fesm2022/raintonic-formaui-components-data-table.mjs +631 -0
  34. package/fesm2022/raintonic-formaui-components-data-table.mjs.map +1 -0
  35. package/fesm2022/raintonic-formaui-components-date-picker.mjs +1331 -0
  36. package/fesm2022/raintonic-formaui-components-date-picker.mjs.map +1 -0
  37. package/fesm2022/raintonic-formaui-components-divider.mjs +41 -0
  38. package/fesm2022/raintonic-formaui-components-divider.mjs.map +1 -0
  39. package/fesm2022/raintonic-formaui-components-drawer.mjs +190 -0
  40. package/fesm2022/raintonic-formaui-components-drawer.mjs.map +1 -0
  41. package/fesm2022/raintonic-formaui-components-dynamic-form.mjs +266 -0
  42. package/fesm2022/raintonic-formaui-components-dynamic-form.mjs.map +1 -0
  43. package/fesm2022/raintonic-formaui-components-empty-state.mjs +33 -0
  44. package/fesm2022/raintonic-formaui-components-empty-state.mjs.map +1 -0
  45. package/fesm2022/raintonic-formaui-components-file-upload.mjs +246 -0
  46. package/fesm2022/raintonic-formaui-components-file-upload.mjs.map +1 -0
  47. package/fesm2022/raintonic-formaui-components-form-field.mjs +482 -0
  48. package/fesm2022/raintonic-formaui-components-form-field.mjs.map +1 -0
  49. package/fesm2022/raintonic-formaui-components-icon.mjs +117 -0
  50. package/fesm2022/raintonic-formaui-components-icon.mjs.map +1 -0
  51. package/fesm2022/raintonic-formaui-components-input.mjs +327 -0
  52. package/fesm2022/raintonic-formaui-components-input.mjs.map +1 -0
  53. package/fesm2022/raintonic-formaui-components-list.mjs +149 -0
  54. package/fesm2022/raintonic-formaui-components-list.mjs.map +1 -0
  55. package/fesm2022/raintonic-formaui-components-menu.mjs +896 -0
  56. package/fesm2022/raintonic-formaui-components-menu.mjs.map +1 -0
  57. package/fesm2022/raintonic-formaui-components-number-input.mjs +345 -0
  58. package/fesm2022/raintonic-formaui-components-number-input.mjs.map +1 -0
  59. package/fesm2022/raintonic-formaui-components-paginator.mjs +139 -0
  60. package/fesm2022/raintonic-formaui-components-paginator.mjs.map +1 -0
  61. package/fesm2022/raintonic-formaui-components-password-input.mjs +306 -0
  62. package/fesm2022/raintonic-formaui-components-password-input.mjs.map +1 -0
  63. package/fesm2022/raintonic-formaui-components-popover.mjs +451 -0
  64. package/fesm2022/raintonic-formaui-components-popover.mjs.map +1 -0
  65. package/fesm2022/raintonic-formaui-components-progressbar.mjs +148 -0
  66. package/fesm2022/raintonic-formaui-components-progressbar.mjs.map +1 -0
  67. package/fesm2022/raintonic-formaui-components-radio.mjs +260 -0
  68. package/fesm2022/raintonic-formaui-components-radio.mjs.map +1 -0
  69. package/fesm2022/raintonic-formaui-components-select.mjs +1011 -0
  70. package/fesm2022/raintonic-formaui-components-select.mjs.map +1 -0
  71. package/fesm2022/raintonic-formaui-components-side-panel.mjs +150 -0
  72. package/fesm2022/raintonic-formaui-components-side-panel.mjs.map +1 -0
  73. package/fesm2022/raintonic-formaui-components-sidebar.mjs +257 -0
  74. package/fesm2022/raintonic-formaui-components-sidebar.mjs.map +1 -0
  75. package/fesm2022/raintonic-formaui-components-skeleton.mjs +50 -0
  76. package/fesm2022/raintonic-formaui-components-skeleton.mjs.map +1 -0
  77. package/fesm2022/raintonic-formaui-components-slider.mjs +347 -0
  78. package/fesm2022/raintonic-formaui-components-slider.mjs.map +1 -0
  79. package/fesm2022/raintonic-formaui-components-spinner.mjs +63 -0
  80. package/fesm2022/raintonic-formaui-components-spinner.mjs.map +1 -0
  81. package/fesm2022/raintonic-formaui-components-stepper.mjs +317 -0
  82. package/fesm2022/raintonic-formaui-components-stepper.mjs.map +1 -0
  83. package/fesm2022/raintonic-formaui-components-tab.mjs +197 -0
  84. package/fesm2022/raintonic-formaui-components-tab.mjs.map +1 -0
  85. package/fesm2022/raintonic-formaui-components-tag.mjs +78 -0
  86. package/fesm2022/raintonic-formaui-components-tag.mjs.map +1 -0
  87. package/fesm2022/raintonic-formaui-components-time-picker.mjs +644 -0
  88. package/fesm2022/raintonic-formaui-components-time-picker.mjs.map +1 -0
  89. package/fesm2022/raintonic-formaui-components-toggle.mjs +171 -0
  90. package/fesm2022/raintonic-formaui-components-toggle.mjs.map +1 -0
  91. package/fesm2022/raintonic-formaui-components-toolbar.mjs +140 -0
  92. package/fesm2022/raintonic-formaui-components-toolbar.mjs.map +1 -0
  93. package/fesm2022/raintonic-formaui-components-tooltip.mjs +555 -0
  94. package/fesm2022/raintonic-formaui-components-tooltip.mjs.map +1 -0
  95. package/fesm2022/raintonic-formaui-components-tree-select.mjs +314 -0
  96. package/fesm2022/raintonic-formaui-components-tree-select.mjs.map +1 -0
  97. package/fesm2022/raintonic-formaui-components-tree-table.mjs +103 -0
  98. package/fesm2022/raintonic-formaui-components-tree-table.mjs.map +1 -0
  99. package/fesm2022/raintonic-formaui-components-tree.mjs +430 -0
  100. package/fesm2022/raintonic-formaui-components-tree.mjs.map +1 -0
  101. package/fesm2022/raintonic-formaui-core.mjs +62 -0
  102. package/fesm2022/raintonic-formaui-core.mjs.map +1 -0
  103. package/fesm2022/raintonic-formaui-services-dialog.mjs +798 -0
  104. package/fesm2022/raintonic-formaui-services-dialog.mjs.map +1 -0
  105. package/fesm2022/raintonic-formaui-services-notification.mjs +391 -0
  106. package/fesm2022/raintonic-formaui-services-notification.mjs.map +1 -0
  107. package/fesm2022/raintonic-formaui-services-theme.mjs +248 -0
  108. package/fesm2022/raintonic-formaui-services-theme.mjs.map +1 -0
  109. package/fesm2022/raintonic-formaui-test-utils.mjs +66 -0
  110. package/fesm2022/raintonic-formaui-test-utils.mjs.map +1 -0
  111. package/fesm2022/raintonic-formaui.mjs +15 -0
  112. package/fesm2022/raintonic-formaui.mjs.map +1 -0
  113. package/llms-full.txt +1627 -0
  114. package/llms.txt +60 -0
  115. package/package.json +251 -0
  116. package/styles/_fonts-entry.scss +3 -0
  117. package/styles/fonts/dm-mono-400-latin.woff2 +0 -0
  118. package/styles/fonts/inter-tight-latin-italic.woff2 +0 -0
  119. package/styles/fonts/inter-tight-latin.woff2 +0 -0
  120. package/styles/index.scss +127 -0
  121. package/styles/partials/_constants.scss +29 -0
  122. package/styles/partials/_fonts.scss +36 -0
  123. package/styles/partials/_grid.scss +171 -0
  124. package/styles/partials/_mixins.scss +145 -0
  125. package/styles/partials/_motion.scss +252 -0
  126. package/styles/partials/_theme.scss +275 -0
  127. package/styles/partials/_typography.scss +112 -0
  128. package/styles/partials/_utilities.scss +480 -0
  129. package/styles/partials/themes/_dark.scss +254 -0
  130. package/styles/partials/themes/_light.scss +254 -0
  131. package/types/raintonic-formaui-cdk-drag-drop.d.ts +196 -0
  132. package/types/raintonic-formaui-cdk-drag-drop.d.ts.map +1 -0
  133. package/types/raintonic-formaui-cdk-form-field.d.ts +62 -0
  134. package/types/raintonic-formaui-cdk-form-field.d.ts.map +1 -0
  135. package/types/raintonic-formaui-cdk-overlay.d.ts +843 -0
  136. package/types/raintonic-formaui-cdk-overlay.d.ts.map +1 -0
  137. package/types/raintonic-formaui-cdk-virtual-scroll.d.ts +112 -0
  138. package/types/raintonic-formaui-cdk-virtual-scroll.d.ts.map +1 -0
  139. package/types/raintonic-formaui-components-accordion.d.ts +124 -0
  140. package/types/raintonic-formaui-components-accordion.d.ts.map +1 -0
  141. package/types/raintonic-formaui-components-alert.d.ts +143 -0
  142. package/types/raintonic-formaui-components-alert.d.ts.map +1 -0
  143. package/types/raintonic-formaui-components-autocomplete.d.ts +193 -0
  144. package/types/raintonic-formaui-components-autocomplete.d.ts.map +1 -0
  145. package/types/raintonic-formaui-components-avatar.d.ts +52 -0
  146. package/types/raintonic-formaui-components-avatar.d.ts.map +1 -0
  147. package/types/raintonic-formaui-components-badge.d.ts +47 -0
  148. package/types/raintonic-formaui-components-badge.d.ts.map +1 -0
  149. package/types/raintonic-formaui-components-big-menu.d.ts +62 -0
  150. package/types/raintonic-formaui-components-big-menu.d.ts.map +1 -0
  151. package/types/raintonic-formaui-components-breadcrumb.d.ts +26 -0
  152. package/types/raintonic-formaui-components-breadcrumb.d.ts.map +1 -0
  153. package/types/raintonic-formaui-components-button-group.d.ts +61 -0
  154. package/types/raintonic-formaui-components-button-group.d.ts.map +1 -0
  155. package/types/raintonic-formaui-components-button.d.ts +116 -0
  156. package/types/raintonic-formaui-components-button.d.ts.map +1 -0
  157. package/types/raintonic-formaui-components-card.d.ts +191 -0
  158. package/types/raintonic-formaui-components-card.d.ts.map +1 -0
  159. package/types/raintonic-formaui-components-checkbox.d.ts +132 -0
  160. package/types/raintonic-formaui-components-checkbox.d.ts.map +1 -0
  161. package/types/raintonic-formaui-components-data-table.d.ts +368 -0
  162. package/types/raintonic-formaui-components-data-table.d.ts.map +1 -0
  163. package/types/raintonic-formaui-components-date-picker.d.ts +341 -0
  164. package/types/raintonic-formaui-components-date-picker.d.ts.map +1 -0
  165. package/types/raintonic-formaui-components-divider.d.ts +21 -0
  166. package/types/raintonic-formaui-components-divider.d.ts.map +1 -0
  167. package/types/raintonic-formaui-components-drawer.d.ts +48 -0
  168. package/types/raintonic-formaui-components-drawer.d.ts.map +1 -0
  169. package/types/raintonic-formaui-components-dynamic-form.d.ts +412 -0
  170. package/types/raintonic-formaui-components-dynamic-form.d.ts.map +1 -0
  171. package/types/raintonic-formaui-components-empty-state.d.ts +14 -0
  172. package/types/raintonic-formaui-components-empty-state.d.ts.map +1 -0
  173. package/types/raintonic-formaui-components-file-upload.d.ts +77 -0
  174. package/types/raintonic-formaui-components-file-upload.d.ts.map +1 -0
  175. package/types/raintonic-formaui-components-form-field.d.ts +271 -0
  176. package/types/raintonic-formaui-components-form-field.d.ts.map +1 -0
  177. package/types/raintonic-formaui-components-icon.d.ts +61 -0
  178. package/types/raintonic-formaui-components-icon.d.ts.map +1 -0
  179. package/types/raintonic-formaui-components-input.d.ts +149 -0
  180. package/types/raintonic-formaui-components-input.d.ts.map +1 -0
  181. package/types/raintonic-formaui-components-list.d.ts +48 -0
  182. package/types/raintonic-formaui-components-list.d.ts.map +1 -0
  183. package/types/raintonic-formaui-components-menu.d.ts +403 -0
  184. package/types/raintonic-formaui-components-menu.d.ts.map +1 -0
  185. package/types/raintonic-formaui-components-number-input.d.ts +127 -0
  186. package/types/raintonic-formaui-components-number-input.d.ts.map +1 -0
  187. package/types/raintonic-formaui-components-paginator.d.ts +37 -0
  188. package/types/raintonic-formaui-components-paginator.d.ts.map +1 -0
  189. package/types/raintonic-formaui-components-password-input.d.ts +111 -0
  190. package/types/raintonic-formaui-components-password-input.d.ts.map +1 -0
  191. package/types/raintonic-formaui-components-popover.d.ts +131 -0
  192. package/types/raintonic-formaui-components-popover.d.ts.map +1 -0
  193. package/types/raintonic-formaui-components-progressbar.d.ts +111 -0
  194. package/types/raintonic-formaui-components-progressbar.d.ts.map +1 -0
  195. package/types/raintonic-formaui-components-radio.d.ts +95 -0
  196. package/types/raintonic-formaui-components-radio.d.ts.map +1 -0
  197. package/types/raintonic-formaui-components-select.d.ts +307 -0
  198. package/types/raintonic-formaui-components-select.d.ts.map +1 -0
  199. package/types/raintonic-formaui-components-side-panel.d.ts +51 -0
  200. package/types/raintonic-formaui-components-side-panel.d.ts.map +1 -0
  201. package/types/raintonic-formaui-components-sidebar.d.ts +174 -0
  202. package/types/raintonic-formaui-components-sidebar.d.ts.map +1 -0
  203. package/types/raintonic-formaui-components-skeleton.d.ts +20 -0
  204. package/types/raintonic-formaui-components-skeleton.d.ts.map +1 -0
  205. package/types/raintonic-formaui-components-slider.d.ts +108 -0
  206. package/types/raintonic-formaui-components-slider.d.ts.map +1 -0
  207. package/types/raintonic-formaui-components-spinner.d.ts +42 -0
  208. package/types/raintonic-formaui-components-spinner.d.ts.map +1 -0
  209. package/types/raintonic-formaui-components-stepper.d.ts +126 -0
  210. package/types/raintonic-formaui-components-stepper.d.ts.map +1 -0
  211. package/types/raintonic-formaui-components-tab.d.ts +96 -0
  212. package/types/raintonic-formaui-components-tab.d.ts.map +1 -0
  213. package/types/raintonic-formaui-components-tag.d.ts +34 -0
  214. package/types/raintonic-formaui-components-tag.d.ts.map +1 -0
  215. package/types/raintonic-formaui-components-time-picker.d.ts +172 -0
  216. package/types/raintonic-formaui-components-time-picker.d.ts.map +1 -0
  217. package/types/raintonic-formaui-components-toggle.d.ts +70 -0
  218. package/types/raintonic-formaui-components-toggle.d.ts.map +1 -0
  219. package/types/raintonic-formaui-components-toolbar.d.ts +128 -0
  220. package/types/raintonic-formaui-components-toolbar.d.ts.map +1 -0
  221. package/types/raintonic-formaui-components-tooltip.d.ts +268 -0
  222. package/types/raintonic-formaui-components-tooltip.d.ts.map +1 -0
  223. package/types/raintonic-formaui-components-tree-select.d.ts +80 -0
  224. package/types/raintonic-formaui-components-tree-select.d.ts.map +1 -0
  225. package/types/raintonic-formaui-components-tree-table.d.ts +90 -0
  226. package/types/raintonic-formaui-components-tree-table.d.ts.map +1 -0
  227. package/types/raintonic-formaui-components-tree.d.ts +104 -0
  228. package/types/raintonic-formaui-components-tree.d.ts.map +1 -0
  229. package/types/raintonic-formaui-core.d.ts +115 -0
  230. package/types/raintonic-formaui-core.d.ts.map +1 -0
  231. package/types/raintonic-formaui-services-dialog.d.ts +451 -0
  232. package/types/raintonic-formaui-services-dialog.d.ts.map +1 -0
  233. package/types/raintonic-formaui-services-notification.d.ts +221 -0
  234. package/types/raintonic-formaui-services-notification.d.ts.map +1 -0
  235. package/types/raintonic-formaui-services-theme.d.ts +126 -0
  236. package/types/raintonic-formaui-services-theme.d.ts.map +1 -0
  237. package/types/raintonic-formaui-test-utils.d.ts +24 -0
  238. package/types/raintonic-formaui-test-utils.d.ts.map +1 -0
  239. package/types/raintonic-formaui.d.ts +4 -0
  240. package/types/raintonic-formaui.d.ts.map +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raintonic-formaui-components-tab.mjs","sources":["../../../lib/components/tab/tab.component.ts","../../../lib/components/tab/tab-group.component.ts","../../../lib/components/tab/tab-group.component.html","../../../lib/components/tab/raintonic-formaui-components-tab.ts"],"sourcesContent":["import { Component, input, TemplateRef, ViewChild, InputSignal } from '@angular/core';\n\n/**\n * @component FuiTabComponent\n * @selector fui-tab\n * @description Individual tab definition used inside `fui-tab-group`. Provides a label\n * for the tab header and wraps its content in an `ng-template` for lazy rendering.\n *\n * @input label - (required) Text displayed in the tab header button\n * @input disabled - Whether the tab is disabled and cannot be selected (default: false)\n *\n * @example\n * <fui-tab label=\"Settings\" [disabled]=\"!canEdit\">\n * <p>Settings panel content here.</p>\n * </fui-tab>\n */\n@Component({\n selector: 'fui-tab',\n standalone: true,\n template: `\n <ng-template>\n <ng-content></ng-content>\n </ng-template>\n `,\n})\nexport class FuiTabComponent {\n /**\n * The label for the tab\n */\n readonly label: InputSignal<string> = input.required<string>();\n\n /**\n * Whether the tab is disabled\n */\n readonly disabled: InputSignal<boolean> = input(false);\n\n /**\n * Template reference for the tab content\n */\n @ViewChild(TemplateRef, { static: true }) content!: TemplateRef<unknown>;\n}\n","import {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n ContentChildren,\n effect,\n ElementRef,\n model,\n ModelSignal,\n output,\n OutputEmitterRef,\n QueryList,\n signal,\n ViewChildren,\n ViewEncapsulation,\n WritableSignal,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FuiTabComponent } from './tab.component';\n\nlet nextTabGroupId = 0;\n\n/**\n * @component FuiTabGroupComponent\n * @selector fui-tab-group\n * @description Container for `fui-tab` components. Manages tab selection, keyboard navigation\n * (ArrowLeft/Right, Home, End, Enter, Space), and roving tabindex for accessibility.\n * Uses content projection to collect tab definitions and renders their content lazily.\n *\n * @input selectedIndex - Two-way model signal for the active tab index (default: 0)\n *\n * @output selectedTabChange - Emits the FuiTabComponent instance when a new tab is selected\n *\n * @cssvar --fui-tab-label-font-size - Font size of tab labels\n * @cssvar --fui-tab-label-min-height - Minimum height of tab header buttons\n * @cssvar --fui-tab-label-padding-x - Horizontal padding of tab labels\n * @cssvar --fui-tab-label-padding-y - Vertical padding of tab labels\n * @cssvar --fui-tab-panel-padding - Padding of the tab content panel\n * @cssvar --fui-tab-indicator-height - Height of the active-tab underline indicator\n * @cssvar --fui-tab-active-color - Color of the active tab label and indicator\n *\n * @example\n * <fui-tab-group [(selectedIndex)]=\"activeTab\">\n * <fui-tab label=\"Overview\">Overview content</fui-tab>\n * <fui-tab label=\"Details\">Details content</fui-tab>\n * <fui-tab label=\"History\" [disabled]=\"true\">History content</fui-tab>\n * </fui-tab-group>\n */\n@Component({\n selector: 'fui-tab-group',\n standalone: true,\n imports: [CommonModule],\n templateUrl: './tab-group.component.html',\n styleUrls: ['./tab-group.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'fui-tab-group',\n },\n})\nexport class FuiTabGroupComponent implements AfterContentInit {\n /** Unique ID prefix for this tab group instance to avoid collisions */\n readonly tabGroupId = `fui-tab-group-${nextTabGroupId++}`;\n\n /**\n * The index of the selected tab\n */\n readonly selectedIndex: ModelSignal<number> = model(0);\n\n /**\n * Event emitted when a tab is selected\n */\n readonly selectedTabChange: OutputEmitterRef<FuiTabComponent> = output<FuiTabComponent>();\n\n /**\n * Query for all tab components\n */\n @ContentChildren(FuiTabComponent) tabComponents!: QueryList<FuiTabComponent>;\n\n /**\n * Query for tab header buttons for focus management\n */\n @ViewChildren('tabButton') tabButtons!: QueryList<ElementRef<HTMLButtonElement>>;\n\n /**\n * Signal containing all tabs\n */\n readonly tabs: WritableSignal<FuiTabComponent[]> = signal<FuiTabComponent[]>([]);\n\n constructor() {\n // React to external or internal selectedIndex changes and emit selectedTabChange accordingly\n effect(() => {\n const idx = this.selectedIndex();\n const tabs = this.tabs();\n if (!tabs?.length) return;\n if (idx >= 0 && idx < tabs.length) {\n const tab = tabs[idx];\n if (!tab.disabled()) {\n this.selectedTabChange.emit(tab);\n }\n }\n });\n }\n\n ngAfterContentInit(): void {\n this.tabs.set(this.tabComponents.toArray());\n\n // Listen for changes in tab components\n this.tabComponents.changes.subscribe(() => {\n this.tabs.set(this.tabComponents.toArray());\n });\n }\n\n /**\n * Select a tab by index\n */\n selectTab(index: number): void {\n const tabs = this.tabs();\n if (index >= 0 && index < tabs.length && !tabs[index].disabled()) {\n // Update the model; the effect defined in ngAfterContentInit will emit selectedTabChange\n this.selectedIndex.set(index);\n }\n }\n\n onKeydown(event: KeyboardEvent, index: number): void {\n const tabs = this.tabs();\n if (!tabs?.length) return;\n const last = tabs.length - 1;\n let next = index;\n switch (event.key) {\n case 'ArrowRight':\n next = index === last ? 0 : index + 1;\n break;\n case 'ArrowLeft':\n next = index === 0 ? last : index - 1;\n break;\n case 'Home':\n next = 0;\n break;\n case 'End':\n next = last;\n break;\n case 'Enter':\n case ' ': // Space key\n this.selectTab(index);\n return;\n default:\n return;\n }\n event.preventDefault();\n while (tabs[next]?.disabled()) {\n next = (next + 1) % tabs.length;\n if (next === index) break;\n }\n // Focus the target tab button (roving tabindex)\n const buttons = this.tabButtons?.toArray();\n if (buttons?.[next]) {\n buttons[next].nativeElement.focus();\n }\n }\n}\n","<div class=\"fui-tab-group\">\n <div class=\"fui-tab-header\" role=\"tablist\">\n @for (tab of tabs(); track $index) {\n <button\n #tabButton\n class=\"fui-tab-label\"\n [class.fui-tab-label--active]=\"selectedIndex() === $index\"\n [class.fui-tab-label--disabled]=\"tab.disabled()\"\n [disabled]=\"tab.disabled()\"\n [attr.aria-selected]=\"selectedIndex() === $index\"\n [attr.tabindex]=\"selectedIndex() === $index ? 0 : -1\"\n [attr.aria-controls]=\"tabGroupId + '-panel-' + $index\"\n [id]=\"tabGroupId + '-tab-' + $index\"\n role=\"tab\"\n type=\"button\"\n (click)=\"selectTab($index)\"\n (keydown)=\"onKeydown($event, $index)\"\n >\n {{ tab.label() }}\n </button>\n }\n </div>\n\n <div class=\"fui-tab-content\">\n @for (tab of tabs(); track $index) {\n <div\n class=\"fui-tab-panel\"\n [class.fui-tab-panel--active]=\"selectedIndex() === $index\"\n [attr.aria-labelledby]=\"tabGroupId + '-tab-' + $index\"\n [id]=\"tabGroupId + '-panel-' + $index\"\n role=\"tabpanel\"\n [attr.tabindex]=\"selectedIndex() === $index ? 0 : null\"\n [attr.aria-hidden]=\"selectedIndex() !== $index\"\n >\n @if (selectedIndex() === $index) {\n <ng-container [ngTemplateOutlet]=\"tab.content\"></ng-container>\n }\n </div>\n }\n </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, booleanAttribute, output, signal, computed, effect, ViewEncapsulation, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { FuiIconComponent } from '@raintonic/formaui/components/icon';
4
+
5
+ const FUI_TAG_VARIANTS = [
6
+ 'primary',
7
+ 'secondary',
8
+ 'success',
9
+ 'warning',
10
+ 'danger',
11
+ 'info',
12
+ ];
13
+ const FUI_TAG_SIZES = ['sm', 'md'];
14
+
15
+ class FuiTagComponent {
16
+ label = input.required(...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
17
+ variant = input('primary', { ...(ngDevMode ? { debugName: "variant" } : /* istanbul ignore next */ {}), transform: (v) => (FUI_TAG_VARIANTS.includes(v) ? v : 'primary') });
18
+ size = input('md', ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
19
+ icon = input(null, ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
20
+ removable = input(false, ...(ngDevMode ? [{ debugName: "removable" }] : /* istanbul ignore next */ []));
21
+ selectable = input(false, ...(ngDevMode ? [{ debugName: "selectable" }] : /* istanbul ignore next */ []));
22
+ selected = input(false, ...(ngDevMode ? [{ debugName: "selected" }] : /* istanbul ignore next */ []));
23
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
24
+ removed = output();
25
+ selectedChange = output();
26
+ _selected = signal(false, ...(ngDevMode ? [{ debugName: "_selected" }] : /* istanbul ignore next */ []));
27
+ computedClasses = computed(() => {
28
+ return `fui-tag fui-tag--${this.variant()} fui-tag--${this.size()}`;
29
+ }, ...(ngDevMode ? [{ debugName: "computedClasses" }] : /* istanbul ignore next */ []));
30
+ constructor() {
31
+ effect(() => {
32
+ this._selected.set(this.selected());
33
+ });
34
+ }
35
+ onClick() {
36
+ if (this.disabled())
37
+ return;
38
+ if (this.selectable()) {
39
+ this._selected.update((v) => !v);
40
+ this.selectedChange.emit(this._selected());
41
+ }
42
+ }
43
+ onSpace(event) {
44
+ event.preventDefault();
45
+ this.onClick();
46
+ }
47
+ onRemove(event) {
48
+ event.stopPropagation();
49
+ if (!this.disabled()) {
50
+ this.removed.emit({ tag: this });
51
+ }
52
+ }
53
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: FuiTagComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
54
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.6", type: FuiTagComponent, isStandalone: true, selector: "fui-tag", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, removable: { classPropertyName: "removable", publicName: "removable", isSignal: true, isRequired: false, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, selected: { classPropertyName: "selected", publicName: "selected", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { removed: "removed", selectedChange: "selectedChange" }, host: { listeners: { "click": "onClick()", "keydown.enter": "onClick()", "keydown.space": "onSpace($event)" }, properties: { "class": "computedClasses()", "class.fui-tag--selected": "_selected()", "class.fui-tag--disabled": "disabled()", "attr.role": "selectable() ? \"option\" : null", "attr.aria-selected": "selectable() ? _selected() : null", "attr.aria-pressed": "selectable() ? _selected() : null", "attr.tabindex": "selectable() || removable() ? 0 : null" }, classAttribute: "fui-tag" }, ngImport: i0, template: "<span class=\"fui-tag__content\">\n @if (icon()) {\n <fui-icon class=\"fui-tag__icon\" [name]=\"icon()!\" size=\"sm\" aria-hidden=\"true\" />\n }\n <span class=\"fui-tag__label\">{{ label() }}</span>\n</span>\n\n@if (removable() && !disabled()) {\n <button\n class=\"fui-tag__remove\"\n type=\"button\"\n [attr.aria-label]=\"'Remove ' + label()\"\n (click)=\"onRemove($event)\"\n (keydown.enter)=\"onRemove($event)\"\n >\n <fui-icon name=\"x\" size=\"sm\" aria-hidden=\"true\" />\n </button>\n}\n", styles: ["@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition:opacity var(--fui-duration-fast-02) var(--fui-ease-entrance) 0ms}.fui-motion-fade-out{transition:opacity var(--fui-duration-fast-01) var(--fui-ease-exit) 0ms}.fui-motion-slide-in-bottom{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition:transform,opacity var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-moderate-01) var(--fui-ease-entrance)}.fui-tag{display:inline-flex;align-items:center;gap:var(--fui-gap-4, .25rem);border-radius:var(--fui-border-radius-pill, 999px);font-family:var(--fui-font-family-sans);font-weight:var(--fui-font-weight-medium, 500);cursor:default;-webkit-user-select:none;user-select:none;transition:background-color border-color color var(--fui-duration-fast-02, .15s) var(--fui-ease-standard) 0ms}.fui-tag--sm{padding:.125rem var(--fui-gap-8, .5rem);font-size:var(--fui-font-size-01);height:1.25rem}.fui-tag--md{padding:.25rem var(--fui-gap-12, .75rem);font-size:var(--fui-font-size-02);height:1.625rem}.fui-tag--primary{background-color:var(--fui-primary-20);color:var(--fui-primary-80)}.fui-tag--secondary{background-color:var(--fui-secondary-20);color:var(--fui-secondary-80)}.fui-tag--success{background-color:var(--fui-success-20);color:var(--fui-success-80)}.fui-tag--warning{background-color:var(--fui-warning-20);color:var(--fui-warning-80)}.fui-tag--danger{background-color:var(--fui-danger-20);color:var(--fui-danger-80)}.fui-tag--info{background-color:var(--fui-info-20);color:var(--fui-info-80)}.fui-tag--selected.fui-tag--primary{background-color:var(--fui-primary);color:var(--fui-white)}.fui-tag--selected.fui-tag--secondary{background-color:var(--fui-secondary-80);color:var(--fui-white)}.fui-tag--selected.fui-tag--success{background-color:var(--fui-success);color:var(--fui-white)}.fui-tag--selected.fui-tag--warning{background-color:var(--fui-warning);color:var(--fui-white)}.fui-tag--selected.fui-tag--danger{background-color:var(--fui-danger);color:var(--fui-white)}.fui-tag--selected.fui-tag--info{background-color:var(--fui-info);color:var(--fui-white)}.fui-tag__content{display:inline-flex;align-items:center;gap:var(--fui-gap-4, .25rem)}.fui-tag__remove{background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer;outline:none}.fui-tag__remove:focus-visible{outline:2px solid var(--fui-primary);outline-offset:2px}.fui-tag__remove{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;width:1rem;height:1rem;margin-left:var(--fui-gap-4, .25rem)}.fui-tag__remove:hover{background-color:var(--fui-black-10)}.fui-tag[tabindex=\"0\"]{cursor:pointer}.fui-tag:focus-visible{outline:2px solid var(--fui-primary);outline-offset:2px}.fui-tag--disabled{opacity:var(--fui-opacity-disabled, .38);cursor:not-allowed;pointer-events:none}\n"], dependencies: [{ kind: "component", type: FuiIconComponent, selector: "fui-icon", inputs: ["name", "size", "weight", "color", "ariaLabel", "spin", "pulse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
55
+ }
56
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.6", ngImport: i0, type: FuiTagComponent, decorators: [{
57
+ type: Component,
58
+ args: [{ selector: 'fui-tag', standalone: true, imports: [FuiIconComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
59
+ class: 'fui-tag',
60
+ '[class]': 'computedClasses()',
61
+ '[class.fui-tag--selected]': '_selected()',
62
+ '[class.fui-tag--disabled]': 'disabled()',
63
+ '[attr.role]': 'selectable() ? "option" : null',
64
+ '[attr.aria-selected]': 'selectable() ? _selected() : null',
65
+ '[attr.aria-pressed]': 'selectable() ? _selected() : null',
66
+ '[attr.tabindex]': 'selectable() || removable() ? 0 : null',
67
+ '(click)': 'onClick()',
68
+ '(keydown.enter)': 'onClick()',
69
+ '(keydown.space)': 'onSpace($event)',
70
+ }, template: "<span class=\"fui-tag__content\">\n @if (icon()) {\n <fui-icon class=\"fui-tag__icon\" [name]=\"icon()!\" size=\"sm\" aria-hidden=\"true\" />\n }\n <span class=\"fui-tag__label\">{{ label() }}</span>\n</span>\n\n@if (removable() && !disabled()) {\n <button\n class=\"fui-tag__remove\"\n type=\"button\"\n [attr.aria-label]=\"'Remove ' + label()\"\n (click)=\"onRemove($event)\"\n (keydown.enter)=\"onRemove($event)\"\n >\n <fui-icon name=\"x\" size=\"sm\" aria-hidden=\"true\" />\n </button>\n}\n", styles: ["@keyframes fui-skeleton-pulse{0%{opacity:1}50%{opacity:.4}to{opacity:1}}@keyframes fui-spin{to{transform:rotate(360deg)}}@keyframes fui-shake{0%,to{transform:translate(0)}10%,30%,50%,70%,90%{transform:translate(-2px)}20%,40%,60%,80%{transform:translate(2px)}}.fui-motion-fade-in{transition:opacity var(--fui-duration-fast-02) var(--fui-ease-entrance) 0ms}.fui-motion-fade-out{transition:opacity var(--fui-duration-fast-01) var(--fui-ease-exit) 0ms}.fui-motion-slide-in-bottom{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-bottom.fui-motion-entering{transform:translateY(1rem)}.fui-motion-slide-in-top{transition:transform var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:translateY(0)}.fui-motion-slide-in-top.fui-motion-entering{transform:translateY(-1rem)}.fui-motion-scale-in{transition:transform,opacity var(--fui-duration-moderate-01) var(--fui-ease-entrance) 0ms;transform:scale(1);opacity:1}.fui-motion-scale-in.fui-motion-entering{transform:scale(.95);opacity:0}.fui-no-motion{transition:none!important;animation:none!important}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@keyframes fui-pulse{0%{transform:scale(1);opacity:1}50%{transform:scale(1.05)}to{transform:scale(1);opacity:1}}@keyframes fui-slide-in{0%{transform:translate(120%)}to{transform:translate(0)}}.fui-slide-in{animation:fui-slide-in var(--fui-duration-moderate-01) var(--fui-ease-entrance)}.fui-tag{display:inline-flex;align-items:center;gap:var(--fui-gap-4, .25rem);border-radius:var(--fui-border-radius-pill, 999px);font-family:var(--fui-font-family-sans);font-weight:var(--fui-font-weight-medium, 500);cursor:default;-webkit-user-select:none;user-select:none;transition:background-color border-color color var(--fui-duration-fast-02, .15s) var(--fui-ease-standard) 0ms}.fui-tag--sm{padding:.125rem var(--fui-gap-8, .5rem);font-size:var(--fui-font-size-01);height:1.25rem}.fui-tag--md{padding:.25rem var(--fui-gap-12, .75rem);font-size:var(--fui-font-size-02);height:1.625rem}.fui-tag--primary{background-color:var(--fui-primary-20);color:var(--fui-primary-80)}.fui-tag--secondary{background-color:var(--fui-secondary-20);color:var(--fui-secondary-80)}.fui-tag--success{background-color:var(--fui-success-20);color:var(--fui-success-80)}.fui-tag--warning{background-color:var(--fui-warning-20);color:var(--fui-warning-80)}.fui-tag--danger{background-color:var(--fui-danger-20);color:var(--fui-danger-80)}.fui-tag--info{background-color:var(--fui-info-20);color:var(--fui-info-80)}.fui-tag--selected.fui-tag--primary{background-color:var(--fui-primary);color:var(--fui-white)}.fui-tag--selected.fui-tag--secondary{background-color:var(--fui-secondary-80);color:var(--fui-white)}.fui-tag--selected.fui-tag--success{background-color:var(--fui-success);color:var(--fui-white)}.fui-tag--selected.fui-tag--warning{background-color:var(--fui-warning);color:var(--fui-white)}.fui-tag--selected.fui-tag--danger{background-color:var(--fui-danger);color:var(--fui-white)}.fui-tag--selected.fui-tag--info{background-color:var(--fui-info);color:var(--fui-white)}.fui-tag__content{display:inline-flex;align-items:center;gap:var(--fui-gap-4, .25rem)}.fui-tag__remove{background:none;border:none;padding:0;margin:0;font:inherit;color:inherit;cursor:pointer;outline:none}.fui-tag__remove:focus-visible{outline:2px solid var(--fui-primary);outline-offset:2px}.fui-tag__remove{display:inline-flex;align-items:center;justify-content:center;border-radius:50%;width:1rem;height:1rem;margin-left:var(--fui-gap-4, .25rem)}.fui-tag__remove:hover{background-color:var(--fui-black-10)}.fui-tag[tabindex=\"0\"]{cursor:pointer}.fui-tag:focus-visible{outline:2px solid var(--fui-primary);outline-offset:2px}.fui-tag--disabled{opacity:var(--fui-opacity-disabled, .38);cursor:not-allowed;pointer-events:none}\n"] }]
71
+ }], ctorParameters: () => [], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], removable: [{ type: i0.Input, args: [{ isSignal: true, alias: "removable", required: false }] }], selectable: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectable", required: false }] }], selected: [{ type: i0.Input, args: [{ isSignal: true, alias: "selected", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], removed: [{ type: i0.Output, args: ["removed"] }], selectedChange: [{ type: i0.Output, args: ["selectedChange"] }] } });
72
+
73
+ /**
74
+ * Generated bundle index. Do not edit.
75
+ */
76
+
77
+ export { FUI_TAG_SIZES, FUI_TAG_VARIANTS, FuiTagComponent };
78
+ //# sourceMappingURL=raintonic-formaui-components-tag.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raintonic-formaui-components-tag.mjs","sources":["../../../lib/components/tag/tag.types.ts","../../../lib/components/tag/tag.component.ts","../../../lib/components/tag/tag.component.html","../../../lib/components/tag/raintonic-formaui-components-tag.ts"],"sourcesContent":["export type FuiTagVariant = 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'info';\nexport type FuiTagSize = 'sm' | 'md';\n\nexport const FUI_TAG_VARIANTS: readonly FuiTagVariant[] = [\n 'primary',\n 'secondary',\n 'success',\n 'warning',\n 'danger',\n 'info',\n] as const;\nexport const FUI_TAG_SIZES: readonly FuiTagSize[] = ['sm', 'md'] as const;\n\nexport interface FuiTagRemoveEvent {\n tag: unknown;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ViewEncapsulation,\n computed,\n effect,\n input,\n output,\n signal,\n booleanAttribute,\n} from '@angular/core';\nimport { FuiIconComponent } from '@raintonic/formaui/components/icon';\nimport { FuiTagVariant, FuiTagSize, FUI_TAG_VARIANTS, FuiTagRemoveEvent } from './tag.types';\n\n@Component({\n selector: 'fui-tag',\n standalone: true,\n imports: [FuiIconComponent],\n templateUrl: './tag.component.html',\n styleUrls: ['./tag.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'fui-tag',\n '[class]': 'computedClasses()',\n '[class.fui-tag--selected]': '_selected()',\n '[class.fui-tag--disabled]': 'disabled()',\n '[attr.role]': 'selectable() ? \"option\" : null',\n '[attr.aria-selected]': 'selectable() ? _selected() : null',\n '[attr.aria-pressed]': 'selectable() ? _selected() : null',\n '[attr.tabindex]': 'selectable() || removable() ? 0 : null',\n '(click)': 'onClick()',\n '(keydown.enter)': 'onClick()',\n '(keydown.space)': 'onSpace($event)',\n },\n})\nexport class FuiTagComponent {\n readonly label = input.required<string>();\n readonly variant = input<FuiTagVariant, FuiTagVariant | string>('primary', {\n transform: (v) => ((FUI_TAG_VARIANTS as readonly string[]).includes(v) ? (v as FuiTagVariant) : 'primary'),\n });\n readonly size = input<FuiTagSize>('md');\n readonly icon = input<string | null>(null);\n readonly removable = input(false);\n readonly selectable = input(false);\n readonly selected = input(false);\n readonly disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n readonly removed = output<FuiTagRemoveEvent>();\n readonly selectedChange = output<boolean>();\n\n readonly _selected = signal(false);\n\n readonly computedClasses = computed(() => {\n return `fui-tag fui-tag--${this.variant()} fui-tag--${this.size()}`;\n });\n\n constructor() {\n effect(() => {\n this._selected.set(this.selected());\n });\n }\n\n onClick(): void {\n if (this.disabled()) return;\n if (this.selectable()) {\n this._selected.update((v) => !v);\n this.selectedChange.emit(this._selected());\n }\n }\n\n onSpace(event: Event): void {\n event.preventDefault();\n this.onClick();\n }\n\n onRemove(event: Event): void {\n event.stopPropagation();\n if (!this.disabled()) {\n this.removed.emit({ tag: this });\n }\n }\n}\n","<span class=\"fui-tag__content\">\n @if (icon()) {\n <fui-icon class=\"fui-tag__icon\" [name]=\"icon()!\" size=\"sm\" aria-hidden=\"true\" />\n }\n <span class=\"fui-tag__label\">{{ label() }}</span>\n</span>\n\n@if (removable() && !disabled()) {\n <button\n class=\"fui-tag__remove\"\n type=\"button\"\n [attr.aria-label]=\"'Remove ' + label()\"\n (click)=\"onRemove($event)\"\n (keydown.enter)=\"onRemove($event)\"\n >\n <fui-icon name=\"x\" size=\"sm\" aria-hidden=\"true\" />\n </button>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}