@tailng-ui/components 0.16.0 → 0.18.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 (257) hide show
  1. package/package.json +17 -6
  2. package/src/lib/feedback/empty/tng-empty.component.d.ts +16 -1
  3. package/src/lib/feedback/empty/tng-empty.component.d.ts.map +1 -1
  4. package/src/lib/feedback/empty/tng-empty.component.js +47 -57
  5. package/src/lib/feedback/empty/tng-empty.component.js.map +1 -1
  6. package/src/lib/feedback/index.d.ts +0 -5
  7. package/src/lib/feedback/index.d.ts.map +1 -1
  8. package/src/lib/feedback/index.js +4 -5
  9. package/src/lib/feedback/index.js.map +1 -1
  10. package/src/lib/feedback/progress-bar/tng-progress-bar.component.d.ts +4 -0
  11. package/src/lib/feedback/progress-bar/tng-progress-bar.component.d.ts.map +1 -1
  12. package/src/lib/feedback/progress-bar/tng-progress-bar.component.js +16 -26
  13. package/src/lib/feedback/progress-bar/tng-progress-bar.component.js.map +1 -1
  14. package/src/lib/feedback/progress-spinner/tng-progress-spinner.component.d.ts +4 -0
  15. package/src/lib/feedback/progress-spinner/tng-progress-spinner.component.d.ts.map +1 -1
  16. package/src/lib/feedback/progress-spinner/tng-progress-spinner.component.js +18 -32
  17. package/src/lib/feedback/progress-spinner/tng-progress-spinner.component.js.map +1 -1
  18. package/src/lib/feedback/skeleton/tng-skeleton.component.d.ts +4 -0
  19. package/src/lib/feedback/skeleton/tng-skeleton.component.d.ts.map +1 -1
  20. package/src/lib/feedback/skeleton/tng-skeleton.component.js +14 -20
  21. package/src/lib/feedback/skeleton/tng-skeleton.component.js.map +1 -1
  22. package/src/lib/feedback/toast/tng-toast.component.d.ts +4 -1
  23. package/src/lib/feedback/toast/tng-toast.component.d.ts.map +1 -1
  24. package/src/lib/feedback/toast/tng-toast.component.js +17 -19
  25. package/src/lib/feedback/toast/tng-toast.component.js.map +1 -1
  26. package/src/lib/form/autocomplete/tng-autocomplete.component.d.ts +4 -0
  27. package/src/lib/form/autocomplete/tng-autocomplete.component.d.ts.map +1 -1
  28. package/src/lib/form/autocomplete/tng-autocomplete.component.js +46 -49
  29. package/src/lib/form/autocomplete/tng-autocomplete.component.js.map +1 -1
  30. package/src/lib/form/button-toggle/tng-button-toggle-group.component.d.ts +3 -0
  31. package/src/lib/form/button-toggle/tng-button-toggle-group.component.d.ts.map +1 -1
  32. package/src/lib/form/button-toggle/tng-button-toggle-group.component.js +33 -58
  33. package/src/lib/form/button-toggle/tng-button-toggle-group.component.js.map +1 -1
  34. package/src/lib/form/button-toggle/tng-button-toggle.component.d.ts +3 -0
  35. package/src/lib/form/button-toggle/tng-button-toggle.component.d.ts.map +1 -1
  36. package/src/lib/form/button-toggle/tng-button-toggle.component.js +15 -26
  37. package/src/lib/form/button-toggle/tng-button-toggle.component.js.map +1 -1
  38. package/src/lib/form/checkbox/tng-checkbox.component.d.ts +3 -0
  39. package/src/lib/form/checkbox/tng-checkbox.component.d.ts.map +1 -1
  40. package/src/lib/form/checkbox/tng-checkbox.component.js +32 -42
  41. package/src/lib/form/checkbox/tng-checkbox.component.js.map +1 -1
  42. package/src/lib/form/chips/tng-chips.component.d.ts +3 -0
  43. package/src/lib/form/chips/tng-chips.component.d.ts.map +1 -1
  44. package/src/lib/form/chips/tng-chips.component.js +14 -19
  45. package/src/lib/form/chips/tng-chips.component.js.map +1 -1
  46. package/src/lib/form/combobox/tng-combobox.component.d.ts +3 -0
  47. package/src/lib/form/combobox/tng-combobox.component.d.ts.map +1 -1
  48. package/src/lib/form/combobox/tng-combobox.component.js +10 -13
  49. package/src/lib/form/combobox/tng-combobox.component.js.map +1 -1
  50. package/src/lib/form/datepicker/tng-datepicker.component.d.ts +4 -1
  51. package/src/lib/form/datepicker/tng-datepicker.component.d.ts.map +1 -1
  52. package/src/lib/form/datepicker/tng-datepicker.component.js +58 -98
  53. package/src/lib/form/datepicker/tng-datepicker.component.js.map +1 -1
  54. package/src/lib/form/form-field/tng-form-field.component.d.ts +3 -0
  55. package/src/lib/form/form-field/tng-form-field.component.d.ts.map +1 -1
  56. package/src/lib/form/form-field/tng-form-field.component.js +28 -33
  57. package/src/lib/form/form-field/tng-form-field.component.js.map +1 -1
  58. package/src/lib/form/index.d.ts +0 -20
  59. package/src/lib/form/index.d.ts.map +1 -1
  60. package/src/lib/form/index.js +4 -20
  61. package/src/lib/form/index.js.map +1 -1
  62. package/src/lib/form/input/tng-input.component.d.ts +9 -3
  63. package/src/lib/form/input/tng-input.component.d.ts.map +1 -1
  64. package/src/lib/form/input/tng-input.component.js +96 -81
  65. package/src/lib/form/input/tng-input.component.js.map +1 -1
  66. package/src/lib/form/input-otp/tng-input-otp.component.d.ts +3 -0
  67. package/src/lib/form/input-otp/tng-input-otp.component.d.ts.map +1 -1
  68. package/src/lib/form/input-otp/tng-input-otp.component.js +55 -69
  69. package/src/lib/form/input-otp/tng-input-otp.component.js.map +1 -1
  70. package/src/lib/form/label/tng-label.component.d.ts +3 -0
  71. package/src/lib/form/label/tng-label.component.d.ts.map +1 -1
  72. package/src/lib/form/label/tng-label.component.js +12 -19
  73. package/src/lib/form/label/tng-label.component.js.map +1 -1
  74. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.component.d.ts +4 -0
  75. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.component.d.ts.map +1 -1
  76. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.component.js +40 -43
  77. package/src/lib/form/multi-autocomplete/tng-multi-autocomplete.component.js.map +1 -1
  78. package/src/lib/form/multiselect/tng-multiselect.component.d.ts +4 -0
  79. package/src/lib/form/multiselect/tng-multiselect.component.d.ts.map +1 -1
  80. package/src/lib/form/multiselect/tng-multiselect.component.js +49 -52
  81. package/src/lib/form/multiselect/tng-multiselect.component.js.map +1 -1
  82. package/src/lib/form/radio/tng-radio.component.d.ts +3 -0
  83. package/src/lib/form/radio/tng-radio.component.d.ts.map +1 -1
  84. package/src/lib/form/radio/tng-radio.component.js +18 -33
  85. package/src/lib/form/radio/tng-radio.component.js.map +1 -1
  86. package/src/lib/form/select/tng-select.component.d.ts +4 -0
  87. package/src/lib/form/select/tng-select.component.d.ts.map +1 -1
  88. package/src/lib/form/select/tng-select.component.js +52 -53
  89. package/src/lib/form/select/tng-select.component.js.map +1 -1
  90. package/src/lib/form/select/tng-select.slots.d.ts +5 -0
  91. package/src/lib/form/select/tng-select.slots.d.ts.map +1 -1
  92. package/src/lib/form/select/tng-select.slots.js +21 -17
  93. package/src/lib/form/select/tng-select.slots.js.map +1 -1
  94. package/src/lib/form/slider/tng-slider.component.d.ts +3 -0
  95. package/src/lib/form/slider/tng-slider.component.d.ts.map +1 -1
  96. package/src/lib/form/slider/tng-slider.component.js +14 -27
  97. package/src/lib/form/slider/tng-slider.component.js.map +1 -1
  98. package/src/lib/form/switch/tng-switch.component.d.ts +3 -0
  99. package/src/lib/form/switch/tng-switch.component.d.ts.map +1 -1
  100. package/src/lib/form/switch/tng-switch.component.js +15 -24
  101. package/src/lib/form/switch/tng-switch.component.js.map +1 -1
  102. package/src/lib/form/textarea/tng-textarea.component.d.ts +3 -0
  103. package/src/lib/form/textarea/tng-textarea.component.d.ts.map +1 -1
  104. package/src/lib/form/textarea/tng-textarea.component.js +19 -36
  105. package/src/lib/form/textarea/tng-textarea.component.js.map +1 -1
  106. package/src/lib/form/toggle/tng-toggle.component.d.ts +3 -0
  107. package/src/lib/form/toggle/tng-toggle.component.d.ts.map +1 -1
  108. package/src/lib/form/toggle/tng-toggle.component.js +41 -41
  109. package/src/lib/form/toggle/tng-toggle.component.js.map +1 -1
  110. package/src/lib/form/toggle-group/tng-toggle-group.component.d.ts +4 -0
  111. package/src/lib/form/toggle-group/tng-toggle-group.component.d.ts.map +1 -1
  112. package/src/lib/form/toggle-group/tng-toggle-group.component.js +28 -31
  113. package/src/lib/form/toggle-group/tng-toggle-group.component.js.map +1 -1
  114. package/src/lib/layout/accordion/tng-accordion.component.d.ts +10 -0
  115. package/src/lib/layout/accordion/tng-accordion.component.d.ts.map +1 -1
  116. package/src/lib/layout/accordion/tng-accordion.component.js +49 -148
  117. package/src/lib/layout/accordion/tng-accordion.component.js.map +1 -1
  118. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.component.d.ts +3 -0
  119. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.component.d.ts.map +1 -1
  120. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.component.js +10 -13
  121. package/src/lib/layout/bottom-sheet/tng-bottom-sheet.component.js.map +1 -1
  122. package/src/lib/layout/card/tng-card.component.d.ts +21 -0
  123. package/src/lib/layout/card/tng-card.component.d.ts.map +1 -1
  124. package/src/lib/layout/card/tng-card.component.js +92 -136
  125. package/src/lib/layout/card/tng-card.component.js.map +1 -1
  126. package/src/lib/layout/collapsible/tng-collapsible.component.d.ts +3 -0
  127. package/src/lib/layout/collapsible/tng-collapsible.component.d.ts.map +1 -1
  128. package/src/lib/layout/collapsible/tng-collapsible.component.js +17 -24
  129. package/src/lib/layout/collapsible/tng-collapsible.component.js.map +1 -1
  130. package/src/lib/layout/drawer/tng-drawer.component.d.ts +4 -0
  131. package/src/lib/layout/drawer/tng-drawer.component.d.ts.map +1 -1
  132. package/src/lib/layout/drawer/tng-drawer.component.js +48 -51
  133. package/src/lib/layout/drawer/tng-drawer.component.js.map +1 -1
  134. package/src/lib/layout/grid/tng-grid.component.d.ts +8 -0
  135. package/src/lib/layout/grid/tng-grid.component.d.ts.map +1 -1
  136. package/src/lib/layout/grid/tng-grid.component.js +48 -110
  137. package/src/lib/layout/grid/tng-grid.component.js.map +1 -1
  138. package/src/lib/layout/index.d.ts +1 -8
  139. package/src/lib/layout/index.d.ts.map +1 -1
  140. package/src/lib/layout/index.js +5 -8
  141. package/src/lib/layout/index.js.map +1 -1
  142. package/src/lib/layout/separator/tng-separator.component.d.ts +3 -0
  143. package/src/lib/layout/separator/tng-separator.component.d.ts.map +1 -1
  144. package/src/lib/layout/separator/tng-separator.component.js +11 -16
  145. package/src/lib/layout/separator/tng-separator.component.js.map +1 -1
  146. package/src/lib/layout/stepper/tng-stepper.component.d.ts +3 -0
  147. package/src/lib/layout/stepper/tng-stepper.component.d.ts.map +1 -1
  148. package/src/lib/layout/stepper/tng-stepper.component.js +10 -13
  149. package/src/lib/layout/stepper/tng-stepper.component.js.map +1 -1
  150. package/src/lib/navigation/breadcrumb/tng-breadcrumb-item.component.d.ts +4 -0
  151. package/src/lib/navigation/breadcrumb/tng-breadcrumb-item.component.d.ts.map +1 -1
  152. package/src/lib/navigation/breadcrumb/tng-breadcrumb-item.component.js +47 -49
  153. package/src/lib/navigation/breadcrumb/tng-breadcrumb-item.component.js.map +1 -1
  154. package/src/lib/navigation/breadcrumb/tng-breadcrumb-link.component.d.ts +4 -0
  155. package/src/lib/navigation/breadcrumb/tng-breadcrumb-link.component.d.ts.map +1 -1
  156. package/src/lib/navigation/breadcrumb/tng-breadcrumb-link.component.js +16 -18
  157. package/src/lib/navigation/breadcrumb/tng-breadcrumb-link.component.js.map +1 -1
  158. package/src/lib/navigation/breadcrumb/tng-breadcrumb-list.component.d.ts +4 -0
  159. package/src/lib/navigation/breadcrumb/tng-breadcrumb-list.component.d.ts.map +1 -1
  160. package/src/lib/navigation/breadcrumb/tng-breadcrumb-list.component.js +10 -12
  161. package/src/lib/navigation/breadcrumb/tng-breadcrumb-list.component.js.map +1 -1
  162. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator-template.directive.d.ts +3 -0
  163. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator-template.directive.d.ts.map +1 -1
  164. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator-template.directive.js +12 -10
  165. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator-template.directive.js.map +1 -1
  166. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator.component.d.ts +4 -0
  167. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator.component.d.ts.map +1 -1
  168. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator.component.js +12 -14
  169. package/src/lib/navigation/breadcrumb/tng-breadcrumb-separator.component.js.map +1 -1
  170. package/src/lib/navigation/breadcrumb/tng-breadcrumb.component.d.ts +4 -0
  171. package/src/lib/navigation/breadcrumb/tng-breadcrumb.component.d.ts.map +1 -1
  172. package/src/lib/navigation/breadcrumb/tng-breadcrumb.component.js +23 -25
  173. package/src/lib/navigation/breadcrumb/tng-breadcrumb.component.js.map +1 -1
  174. package/src/lib/navigation/context-menu/tng-context-menu.component.d.ts +5 -0
  175. package/src/lib/navigation/context-menu/tng-context-menu.component.d.ts.map +1 -1
  176. package/src/lib/navigation/context-menu/tng-context-menu.component.js +24 -26
  177. package/src/lib/navigation/context-menu/tng-context-menu.component.js.map +1 -1
  178. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.component.d.ts +4 -0
  179. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.component.d.ts.map +1 -1
  180. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.component.js +19 -23
  181. package/src/lib/navigation/dropdown-menu/tng-dropdown-menu.component.js.map +1 -1
  182. package/src/lib/navigation/index.d.ts +0 -12
  183. package/src/lib/navigation/index.d.ts.map +1 -1
  184. package/src/lib/navigation/index.js +4 -12
  185. package/src/lib/navigation/index.js.map +1 -1
  186. package/src/lib/navigation/menu/tng-menu-trigger-for.directive.d.ts +3 -0
  187. package/src/lib/navigation/menu/tng-menu-trigger-for.directive.d.ts.map +1 -1
  188. package/src/lib/navigation/menu/tng-menu-trigger-for.directive.js +22 -20
  189. package/src/lib/navigation/menu/tng-menu-trigger-for.directive.js.map +1 -1
  190. package/src/lib/navigation/menu/tng-menu.component.d.ts +5 -0
  191. package/src/lib/navigation/menu/tng-menu.component.d.ts.map +1 -1
  192. package/src/lib/navigation/menu/tng-menu.component.js +21 -23
  193. package/src/lib/navigation/menu/tng-menu.component.js.map +1 -1
  194. package/src/lib/navigation/menubar/tng-menubar.component.d.ts +5 -0
  195. package/src/lib/navigation/menubar/tng-menubar.component.d.ts.map +1 -1
  196. package/src/lib/navigation/menubar/tng-menubar.component.js +20 -22
  197. package/src/lib/navigation/menubar/tng-menubar.component.js.map +1 -1
  198. package/src/lib/navigation/navigation-menu/tng-navigation-menu.component.d.ts +4 -0
  199. package/src/lib/navigation/navigation-menu/tng-navigation-menu.component.d.ts.map +1 -1
  200. package/src/lib/navigation/navigation-menu/tng-navigation-menu.component.js +11 -13
  201. package/src/lib/navigation/navigation-menu/tng-navigation-menu.component.js.map +1 -1
  202. package/src/lib/navigation/tabs/tng-tabs.component.d.ts +5 -0
  203. package/src/lib/navigation/tabs/tng-tabs.component.d.ts.map +1 -1
  204. package/src/lib/navigation/tabs/tng-tabs.component.js +32 -34
  205. package/src/lib/navigation/tabs/tng-tabs.component.js.map +1 -1
  206. package/src/lib/navigation/toolbar/tng-toolbar.component.d.ts +4 -0
  207. package/src/lib/navigation/toolbar/tng-toolbar.component.d.ts.map +1 -1
  208. package/src/lib/navigation/toolbar/tng-toolbar.component.js +11 -13
  209. package/src/lib/navigation/toolbar/tng-toolbar.component.js.map +1 -1
  210. package/src/lib/overlay/dialog/tng-dialog.component.d.ts +4 -0
  211. package/src/lib/overlay/dialog/tng-dialog.component.d.ts.map +1 -1
  212. package/src/lib/overlay/dialog/tng-dialog.component.js +18 -25
  213. package/src/lib/overlay/dialog/tng-dialog.component.js.map +1 -1
  214. package/src/lib/overlay/index.d.ts +0 -3
  215. package/src/lib/overlay/index.d.ts.map +1 -1
  216. package/src/lib/overlay/index.js +4 -3
  217. package/src/lib/overlay/index.js.map +1 -1
  218. package/src/lib/overlay/popover/tng-popover.component.d.ts +4 -0
  219. package/src/lib/overlay/popover/tng-popover.component.d.ts.map +1 -1
  220. package/src/lib/overlay/popover/tng-popover.component.js +23 -37
  221. package/src/lib/overlay/popover/tng-popover.component.js.map +1 -1
  222. package/src/lib/overlay/tooltip/tng-tooltip.component.d.ts +4 -0
  223. package/src/lib/overlay/tooltip/tng-tooltip.component.d.ts.map +1 -1
  224. package/src/lib/overlay/tooltip/tng-tooltip.component.js +17 -21
  225. package/src/lib/overlay/tooltip/tng-tooltip.component.js.map +1 -1
  226. package/src/lib/utility/avatar/tng-avatar.component.d.ts +4 -1
  227. package/src/lib/utility/avatar/tng-avatar.component.d.ts.map +1 -1
  228. package/src/lib/utility/avatar/tng-avatar.component.js +20 -22
  229. package/src/lib/utility/avatar/tng-avatar.component.js.map +1 -1
  230. package/src/lib/utility/badge/tng-badge.component.d.ts +4 -0
  231. package/src/lib/utility/badge/tng-badge.component.d.ts.map +1 -1
  232. package/src/lib/utility/badge/tng-badge.component.js +13 -10
  233. package/src/lib/utility/badge/tng-badge.component.js.map +1 -1
  234. package/src/lib/utility/button/tng-button.component.d.ts +4 -1
  235. package/src/lib/utility/button/tng-button.component.d.ts.map +1 -1
  236. package/src/lib/utility/button/tng-button.component.js +19 -29
  237. package/src/lib/utility/button/tng-button.component.js.map +1 -1
  238. package/src/lib/utility/code-block/tng-code-block.component.d.ts +4 -0
  239. package/src/lib/utility/code-block/tng-code-block.component.d.ts.map +1 -1
  240. package/src/lib/utility/code-block/tng-code-block.component.js +73 -103
  241. package/src/lib/utility/code-block/tng-code-block.component.js.map +1 -1
  242. package/src/lib/utility/copy-button/tng-copy-button.component.d.ts +4 -1
  243. package/src/lib/utility/copy-button/tng-copy-button.component.d.ts.map +1 -1
  244. package/src/lib/utility/copy-button/tng-copy-button.component.js +28 -36
  245. package/src/lib/utility/copy-button/tng-copy-button.component.js.map +1 -1
  246. package/src/lib/utility/index.d.ts +1 -9
  247. package/src/lib/utility/index.d.ts.map +1 -1
  248. package/src/lib/utility/index.js +5 -8
  249. package/src/lib/utility/index.js.map +1 -1
  250. package/src/lib/utility/tag/tng-tag.component.d.ts +4 -1
  251. package/src/lib/utility/tag/tng-tag.component.d.ts.map +1 -1
  252. package/src/lib/utility/tag/tng-tag.component.js +18 -24
  253. package/src/lib/utility/tag/tng-tag.component.js.map +1 -1
  254. package/src/lib/utility/tree/tng-tree.component.d.ts +4 -1
  255. package/src/lib/utility/tree/tng-tree.component.d.ts.map +1 -1
  256. package/src/lib/utility/tree/tng-tree.component.js +23 -25
  257. package/src/lib/utility/tree/tng-tree.component.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tng-code-block.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/utility/code-block/tng-code-block.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tng-code-block.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/utility/code-block/tng-code-block.component.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,SAAS,EACf,MAAM,eAAe,CAAC;AACvB,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AASxE,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;;AAalG,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,MAAM,CAAC;AACpD,MAAM,MAAM,8BAA8B,GAAG,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAChF,MAAM,MAAM,yBAAyB,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC;AAC9D,MAAM,MAAM,2BAA2B,GAAG,OAAO,GAAG,MAAM,CAAC;AAC3D,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,aAAa,GAAG,cAAc,GAAG,MAAM,CAAC;AACxF,MAAM,MAAM,wBAAwB,GAAG,OAAO,GAAG,MAAM,CAAC;AACxD,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAElE,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,6BAA6B;IAC5C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,uBAAuB,CAAC;CAChC;AAkPD,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,MAAM,GAAG,yBAAyB,CAMxF;AAED,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAOlF;AAED,wBAAgB,oCAAoC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAEnF;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAMlF;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,kBAAkB,SAAI,GACrB,SAAS,MAAM,EAAE,CAGnB;AAED,qBAaa,qBAAsB,YAAW,SAAS;IACrD,SAAgB,OAAO,qDAA8B;IACrD,SAAgB,OAAO,qDAA8B;IACrD,SAAgB,IAAI,8CAAqB;IACzC,SAAgB,QAAQ,8GAMtB;IACF,SAAgB,SAAS,8CAA8B;IACvD,SAAgB,WAAW,8CAA2B;IACtD,SAAgB,iBAAiB,4EAE9B;IACH,SAAgB,qBAAqB,oGAKnC;IACF,SAAgB,QAAQ,sDAAyB,uBAAuB,KAAK,MAAM,UAAgB;IACnG,SAAgB,UAAU,8CAAgC;IAC1D,SAAgB,UAAU,8EAEvB;IACH,SAAgB,SAAS,8EAEtB;IACH,SAAgB,mBAAmB,4EAEhC;IACH,SAAgB,cAAc,wFAAiE;IAC/F,SAAgB,aAAa,sFAE1B;IACH,SAAgB,QAAQ,qDAA8B;IACtD,SAAgB,eAAe,qHAM5B;IACH,SAAgB,SAAS,8DAAuC;IAChE,SAAgB,YAAY,kHAKzB;IACH,SAAgB,UAAU,8EAEvB;IACH,SAAgB,iBAAiB,8EAE9B;IACH,SAAgB,eAAe,6GAK7B;IACF,SAAgB,kBAAkB,4EAE/B;IACH,SAAgB,KAAK,qDAA8B;IACnD,SAAgB,KAAK,qDAA8B;IACnD,SAAgB,OAAO,2DAAyC;IAChE,SAAgB,IAAI,8EAEjB;IAEH,SAAgB,IAAI,yDAA0B;IAC9C,SAAgB,SAAS,8DAA+B;IACxD,SAAgB,WAAW,gEAAiC;IAC5D,SAAgB,iBAAiB,0EAA2C;IAE5E,SAAgB,SAAS,mDAAoB;IAC7C,SAAgB,YAAY,kDAAmB;IAE/C,SAAS,CAAC,QAAQ,CAAC,eAAe,yCAW/B;IAEH,SAAS,CAAC,QAAQ,CAAC,WAAW,yCAmB3B;IAEH,SAAS,CAAC,QAAQ,CAAC,WAAW,mDAE5B;IAEF,SAAS,CAAC,QAAQ,CAAC,YAAY,mDAE7B;IAEF,SAAS,CAAC,QAAQ,CAAC,eAAe,mDAEhC;IAEF,SAAS,CAAC,QAAQ,CAAC,QAAQ,mDAAsE;IAEjG,SAAS,CAAC,QAAQ,CAAC,0BAA0B,yCAE1C;IAEH,SAAS,CAAC,QAAQ,CAAC,oBAAoB,0CAYpC;IAEH,SAAS,CAAC,QAAQ,CAAC,gBAAgB,0CAEhC;IAEH,SAAS,CAAC,QAAQ,CAAC,gBAAgB,0CAEhC;IAEH,SAAS,CAAC,QAAQ,CAAC,gBAAgB,sDAEjC;IAEF,SAAS,CAAC,QAAQ,CAAC,cAAc,0CAAkE;IAEnG,SAAS,CAAC,QAAQ,CAAC,gBAAgB,gDAEhC;IAEH,SAAS,CAAC,QAAQ,CAAC,aAAa,yCAE7B;IAEH,SAAS,CAAC,QAAQ,CAAC,WAAW,oDAE3B;IAEH,SAAS,CAAC,QAAQ,CAAC,iBAAiB,gDAAmE;IAEvG,SAAS,CAAC,QAAQ,CAAC,cAAc,yCAAkE;IAEnG,SAAS,CAAC,QAAQ,CAAC,WAAW,kEAA2C;IAEzE,SAAS,CAAC,QAAQ,CAAC,aAAa;gBA3cxB,OAAO;qBACF,OAAO;cACd,QAAQ,GAAG,MAAM;oBACX,MAAM;UAydf;IAEH,SAAS,CAAC,QAAQ,CAAC,2BAA2B,0CAAwD;IAEtG,SAAS,CAAC,QAAQ,CAAC,kBAAkB,0CAElC;IAEH,SAAS,CAAC,QAAQ,CAAC,oBAAoB,0CAOpC;IAEH,SAAS,CAAC,QAAQ,CAAC,SAAS,gDAAwE;IAEpG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgD;IAC7E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyC;IACnE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAwB;IACrD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAEjC;IACF,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA4E;IAC/G,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA+B;IAEhE,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,sBAAsB,CAA8C;IAC5E,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,sBAAsB,CAAmC;IACjE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8D;;IAmBnF,WAAW,IAAI,IAAI;IAO1B,SAAS,CAAC,eAAe,CAAC,GAAG,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI;IAc5D,SAAS,CAAC,oBAAoB,CAAC,GAAG,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI;IAgBjE,SAAS,CAAC,sBAAsB,CAAC,GAAG,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI;IAoBnE,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,4BAA4B;IAgCpC,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,2BAA2B;IASnC,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,yBAAyB;IAIjC,OAAO,CAAC,kBAAkB;YAUZ,aAAa;yCApbhB,qBAAqB;2CAArB,qBAAqB;CAoejC;AACD,OAAO,EAAE,qBAAqB,IAAI,YAAY,EAAE,CAAC"}
@@ -1,8 +1,8 @@
1
- import { __decorate } from "tslib";
2
1
  import { booleanAttribute, Component, computed, effect, inject, input, output, signal, } from '@angular/core';
3
2
  import { DomSanitizer } from '@angular/platform-browser';
4
3
  import { TngCodeBlock as TngCodeBlockPrimitive, TngCodeBlockBody as TngCodeBlockBodyPrimitive, TngCodeBlockCode as TngCodeBlockCodePrimitive, TngCodeBlockGutter as TngCodeBlockGutterPrimitive, TngCodeBlockHeader as TngCodeBlockHeaderPrimitive, TngCopy, } from '@tailng-ui/primitives';
5
4
  import { escapeTngCodeHtml, normalizeTngCodeLanguage, resolveTngCodeHighlightResult, TNG_CODE_HIGHLIGHTING_CONFIG, } from './highlighting';
5
+ import * as i0 from "@angular/core";
6
6
  const defaultCopyResetDuration = 1500;
7
7
  const highlightModeSet = new Set(['auto', 'off', 'on']);
8
8
  function normalizeOptionalString(value) {
@@ -196,64 +196,36 @@ export function toTngCodeBlockLineNumbers(code, startingLineNumber = 1) {
196
196
  const normalizedStart = Math.max(1, Math.round(startingLineNumber));
197
197
  return splitCodeLines(code).map((_, index) => normalizedStart + index);
198
198
  }
199
- let TngCodeBlockComponent = class TngCodeBlockComponent {
200
- adapter = input(null);
201
- caption = input(null);
202
- code = input('');
203
- copyMode = input('auto', {
204
- alias: 'copy',
205
- transform: coerceTngCodeBlockCopyMode,
206
- });
207
- copyLabel = input('Copy code');
208
- copiedLabel = input('Copied');
209
- copyResetDuration = input(defaultCopyResetDuration, {
210
- transform: coerceTngCodeBlockCopyResetDuration,
211
- });
212
- copySuccessDurationMs = input(undefined, {
213
- transform: coerceOptionalPositiveNumber,
214
- });
215
- copyText = input(null);
216
- errorLabel = input('Copy failed');
217
- focusLines = input(false, {
218
- transform: booleanAttribute,
219
- });
220
- highlight = input(true, {
221
- transform: booleanAttribute,
222
- });
223
- highlightDebounceMs = input(0, {
224
- transform: coerceTngCodeBlockCopyResetDuration,
225
- });
226
- highlightLines = input(null);
227
- highlightMode = input('auto', {
228
- transform: coerceTngCodeBlockHighlightMode,
229
- });
230
- language = input(null);
231
- lineNumbersMode = input(false, {
232
- alias: 'lineNumbers',
233
- transform: coerceTngCodeBlockLineNumbersMode,
234
- });
235
- maxHeight = input(null);
236
- sanitizeHtml = input('auto', {
237
- transform: coerceTngCodeBlockSanitizeHtml,
238
- });
239
- showHeader = input(true, {
240
- transform: booleanAttribute,
241
- });
242
- showLanguageBadge = input(true, {
243
- transform: booleanAttribute,
244
- });
245
- showLineNumbers = input(undefined, {
246
- transform: coerceOptionalBoolean,
247
- });
248
- startingLineNumber = input(1, {
249
- transform: coerceTngCodeBlockStartingLineNumber,
250
- });
251
- theme = input(null);
252
- title = input(null);
253
- variant = input('default');
254
- wrap = input(false, {
255
- transform: booleanAttribute,
256
- });
199
+ export class TngCodeBlockComponent {
200
+ adapter = input(null, ...(ngDevMode ? [{ debugName: "adapter" }] : []));
201
+ caption = input(null, ...(ngDevMode ? [{ debugName: "caption" }] : []));
202
+ code = input('', ...(ngDevMode ? [{ debugName: "code" }] : []));
203
+ copyMode = input('auto', { ...(ngDevMode ? { debugName: "copyMode" } : {}), alias: 'copy',
204
+ transform: coerceTngCodeBlockCopyMode });
205
+ copyLabel = input('Copy code', ...(ngDevMode ? [{ debugName: "copyLabel" }] : []));
206
+ copiedLabel = input('Copied', ...(ngDevMode ? [{ debugName: "copiedLabel" }] : []));
207
+ copyResetDuration = input(defaultCopyResetDuration, { ...(ngDevMode ? { debugName: "copyResetDuration" } : {}), transform: coerceTngCodeBlockCopyResetDuration });
208
+ copySuccessDurationMs = input(undefined, { ...(ngDevMode ? { debugName: "copySuccessDurationMs" } : {}), transform: coerceOptionalPositiveNumber });
209
+ copyText = input(null, ...(ngDevMode ? [{ debugName: "copyText" }] : []));
210
+ errorLabel = input('Copy failed', ...(ngDevMode ? [{ debugName: "errorLabel" }] : []));
211
+ focusLines = input(false, { ...(ngDevMode ? { debugName: "focusLines" } : {}), transform: booleanAttribute });
212
+ highlight = input(true, { ...(ngDevMode ? { debugName: "highlight" } : {}), transform: booleanAttribute });
213
+ highlightDebounceMs = input(0, { ...(ngDevMode ? { debugName: "highlightDebounceMs" } : {}), transform: coerceTngCodeBlockCopyResetDuration });
214
+ highlightLines = input(null, ...(ngDevMode ? [{ debugName: "highlightLines" }] : []));
215
+ highlightMode = input('auto', { ...(ngDevMode ? { debugName: "highlightMode" } : {}), transform: coerceTngCodeBlockHighlightMode });
216
+ language = input(null, ...(ngDevMode ? [{ debugName: "language" }] : []));
217
+ lineNumbersMode = input(false, { ...(ngDevMode ? { debugName: "lineNumbersMode" } : {}), alias: 'lineNumbers',
218
+ transform: coerceTngCodeBlockLineNumbersMode });
219
+ maxHeight = input(null, ...(ngDevMode ? [{ debugName: "maxHeight" }] : []));
220
+ sanitizeHtml = input('auto', { ...(ngDevMode ? { debugName: "sanitizeHtml" } : {}), transform: coerceTngCodeBlockSanitizeHtml });
221
+ showHeader = input(true, { ...(ngDevMode ? { debugName: "showHeader" } : {}), transform: booleanAttribute });
222
+ showLanguageBadge = input(true, { ...(ngDevMode ? { debugName: "showLanguageBadge" } : {}), transform: booleanAttribute });
223
+ showLineNumbers = input(undefined, { ...(ngDevMode ? { debugName: "showLineNumbers" } : {}), transform: coerceOptionalBoolean });
224
+ startingLineNumber = input(1, { ...(ngDevMode ? { debugName: "startingLineNumber" } : {}), transform: coerceTngCodeBlockStartingLineNumber });
225
+ theme = input(null, ...(ngDevMode ? [{ debugName: "theme" }] : []));
226
+ title = input(null, ...(ngDevMode ? [{ debugName: "title" }] : []));
227
+ variant = input('default', ...(ngDevMode ? [{ debugName: "variant" }] : []));
228
+ wrap = input(false, { ...(ngDevMode ? { debugName: "wrap" } : {}), transform: booleanAttribute });
257
229
  copy = output();
258
230
  copyError = output();
259
231
  copySuccess = output();
@@ -269,7 +241,7 @@ let TngCodeBlockComponent = class TngCodeBlockComponent {
269
241
  return this.errorLabel();
270
242
  }
271
243
  return this.copyLabel();
272
- });
244
+ }, ...(ngDevMode ? [{ debugName: "copyButtonLabel" }] : []));
273
245
  copyPayload = computed(() => {
274
246
  const value = this.copyText();
275
247
  if (typeof value === 'function') {
@@ -288,14 +260,14 @@ let TngCodeBlockComponent = class TngCodeBlockComponent {
288
260
  return value;
289
261
  }
290
262
  return this.normalizedCode();
291
- });
292
- dataHasCopy = computed(() => this.shouldShowCopyAction() ? 'true' : 'false');
293
- dataHasTitle = computed(() => this.titleText() === null ? 'false' : 'true');
294
- dataHighlighted = computed(() => this.renderState() === 'highlighted' ? 'true' : 'false');
295
- dataWrap = computed(() => (this.wrap() ? 'true' : 'false'));
263
+ }, ...(ngDevMode ? [{ debugName: "copyPayload" }] : []));
264
+ dataHasCopy = computed(() => this.shouldShowCopyAction() ? 'true' : 'false', ...(ngDevMode ? [{ debugName: "dataHasCopy" }] : []));
265
+ dataHasTitle = computed(() => this.titleText() === null ? 'false' : 'true', ...(ngDevMode ? [{ debugName: "dataHasTitle" }] : []));
266
+ dataHighlighted = computed(() => this.renderState() === 'highlighted' ? 'true' : 'false', ...(ngDevMode ? [{ debugName: "dataHighlighted" }] : []));
267
+ dataWrap = computed(() => (this.wrap() ? 'true' : 'false'), ...(ngDevMode ? [{ debugName: "dataWrap" }] : []));
296
268
  effectiveCopyResetDuration = computed(() => {
297
269
  return this.copySuccessDurationMs() ?? this.copyResetDuration();
298
- });
270
+ }, ...(ngDevMode ? [{ debugName: "effectiveCopyResetDuration" }] : []));
299
271
  effectiveLineNumbers = computed(() => {
300
272
  const legacyValue = this.showLineNumbers();
301
273
  if (legacyValue !== undefined) {
@@ -306,27 +278,27 @@ let TngCodeBlockComponent = class TngCodeBlockComponent {
306
278
  return splitCodeLines(this.normalizedCode()).length > 1;
307
279
  }
308
280
  return mode;
309
- });
281
+ }, ...(ngDevMode ? [{ debugName: "effectiveLineNumbers" }] : []));
310
282
  hasHeaderContent = computed(() => {
311
283
  return this.titleText() !== null || this.hasLanguageBadge() || this.shouldShowCopyAction();
312
- });
284
+ }, ...(ngDevMode ? [{ debugName: "hasHeaderContent" }] : []));
313
285
  hasLanguageBadge = computed(() => {
314
286
  return this.showLanguageBadge() && this.languageForBadge() !== null;
315
- });
316
- highlightLineSet = computed(() => toNormalizedHighlightLineSet(this.highlightLines()));
317
- isHighlighting = computed(() => this.renderState() === 'highlighting');
287
+ }, ...(ngDevMode ? [{ debugName: "hasLanguageBadge" }] : []));
288
+ highlightLineSet = computed(() => toNormalizedHighlightLineSet(this.highlightLines()), ...(ngDevMode ? [{ debugName: "highlightLineSet" }] : []));
289
+ isHighlighting = computed(() => this.renderState() === 'highlighting', ...(ngDevMode ? [{ debugName: "isHighlighting" }] : []));
318
290
  languageForBadge = computed(() => {
319
291
  return this.resolvedLanguage() ?? this.normalizedLanguage();
320
- });
292
+ }, ...(ngDevMode ? [{ debugName: "languageForBadge" }] : []));
321
293
  languageLabel = computed(() => {
322
294
  return this.languageForBadge() ?? 'text';
323
- });
295
+ }, ...(ngDevMode ? [{ debugName: "languageLabel" }] : []));
324
296
  lineNumbers = computed(() => {
325
297
  return this.renderedLines().map((line) => line.lineNumber);
326
- });
327
- maxHeightCssValue = computed(() => toCssSizeValue(this.maxHeight()));
328
- normalizedCode = computed(() => normalizeTngCodeBlockCode(this.code()));
329
- renderState = signal('idle');
298
+ }, ...(ngDevMode ? [{ debugName: "lineNumbers" }] : []));
299
+ maxHeightCssValue = computed(() => toCssSizeValue(this.maxHeight()), ...(ngDevMode ? [{ debugName: "maxHeightCssValue" }] : []));
300
+ normalizedCode = computed(() => normalizeTngCodeBlockCode(this.code()), ...(ngDevMode ? [{ debugName: "normalizedCode" }] : []));
301
+ renderState = signal('idle', ...(ngDevMode ? [{ debugName: "renderState" }] : []));
330
302
  renderedLines = computed(() => {
331
303
  const baseLines = this.baseLineHtml();
332
304
  const start = this.startingLineNumber();
@@ -342,25 +314,25 @@ let TngCodeBlockComponent = class TngCodeBlockComponent {
342
314
  lineNumber,
343
315
  };
344
316
  });
345
- });
346
- shouldRenderBodyLineNumbers = computed(() => this.effectiveLineNumbers());
317
+ }, ...(ngDevMode ? [{ debugName: "renderedLines" }] : []));
318
+ shouldRenderBodyLineNumbers = computed(() => this.effectiveLineNumbers(), ...(ngDevMode ? [{ debugName: "shouldRenderBodyLineNumbers" }] : []));
347
319
  shouldRenderHeader = computed(() => {
348
320
  return this.showHeader() && this.hasHeaderContent();
349
- });
321
+ }, ...(ngDevMode ? [{ debugName: "shouldRenderHeader" }] : []));
350
322
  shouldShowCopyAction = computed(() => {
351
323
  const mode = this.copyMode();
352
324
  if (mode === 'auto') {
353
325
  return this.normalizedCode().length > 0;
354
326
  }
355
327
  return mode;
356
- });
357
- titleText = computed(() => normalizeOptionalString(this.title()));
358
- baseLineHtml = signal(['']);
359
- copyState = signal('idle');
328
+ }, ...(ngDevMode ? [{ debugName: "shouldShowCopyAction" }] : []));
329
+ titleText = computed(() => normalizeOptionalString(this.title()), ...(ngDevMode ? [{ debugName: "titleText" }] : []));
330
+ baseLineHtml = signal([''], ...(ngDevMode ? [{ debugName: "baseLineHtml" }] : []));
331
+ copyState = signal('idle', ...(ngDevMode ? [{ debugName: "copyState" }] : []));
360
332
  domSanitizer = inject(DomSanitizer);
361
333
  highlightingConfig = inject(TNG_CODE_HIGHLIGHTING_CONFIG);
362
- normalizedLanguage = computed(() => normalizeTngCodeLanguage(this.language()));
363
- resolvedLanguage = signal(null);
334
+ normalizedLanguage = computed(() => normalizeTngCodeLanguage(this.language()), ...(ngDevMode ? [{ debugName: "normalizedLanguage" }] : []));
335
+ resolvedLanguage = signal(null, ...(ngDevMode ? [{ debugName: "resolvedLanguage" }] : []));
364
336
  copyResetTimer = null;
365
337
  destroyed = false;
366
338
  highlightDebounceTimer = null;
@@ -566,21 +538,19 @@ let TngCodeBlockComponent = class TngCodeBlockComponent {
566
538
  this.setRenderState('error', error);
567
539
  }
568
540
  }
569
- };
570
- TngCodeBlockComponent = __decorate([
571
- Component({
572
- selector: 'tng-code-block',
573
- imports: [
574
- TngCodeBlockPrimitive,
575
- TngCodeBlockHeaderPrimitive,
576
- TngCodeBlockBodyPrimitive,
577
- TngCodeBlockGutterPrimitive,
578
- TngCodeBlockCodePrimitive,
579
- TngCopy,
580
- ],
581
- templateUrl: './tng-code-block.component.html',
582
- styleUrl: './tng-code-block.component.css',
583
- })
584
- ], TngCodeBlockComponent);
585
- export { TngCodeBlockComponent };
541
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngCodeBlockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
542
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.1", type: TngCodeBlockComponent, isStandalone: true, selector: "tng-code-block", inputs: { adapter: { classPropertyName: "adapter", publicName: "adapter", isSignal: true, isRequired: false, transformFunction: null }, caption: { classPropertyName: "caption", publicName: "caption", isSignal: true, isRequired: false, transformFunction: null }, code: { classPropertyName: "code", publicName: "code", isSignal: true, isRequired: false, transformFunction: null }, copyMode: { classPropertyName: "copyMode", publicName: "copy", isSignal: true, isRequired: false, transformFunction: null }, copyLabel: { classPropertyName: "copyLabel", publicName: "copyLabel", isSignal: true, isRequired: false, transformFunction: null }, copiedLabel: { classPropertyName: "copiedLabel", publicName: "copiedLabel", isSignal: true, isRequired: false, transformFunction: null }, copyResetDuration: { classPropertyName: "copyResetDuration", publicName: "copyResetDuration", isSignal: true, isRequired: false, transformFunction: null }, copySuccessDurationMs: { classPropertyName: "copySuccessDurationMs", publicName: "copySuccessDurationMs", isSignal: true, isRequired: false, transformFunction: null }, copyText: { classPropertyName: "copyText", publicName: "copyText", isSignal: true, isRequired: false, transformFunction: null }, errorLabel: { classPropertyName: "errorLabel", publicName: "errorLabel", isSignal: true, isRequired: false, transformFunction: null }, focusLines: { classPropertyName: "focusLines", publicName: "focusLines", isSignal: true, isRequired: false, transformFunction: null }, highlight: { classPropertyName: "highlight", publicName: "highlight", isSignal: true, isRequired: false, transformFunction: null }, highlightDebounceMs: { classPropertyName: "highlightDebounceMs", publicName: "highlightDebounceMs", isSignal: true, isRequired: false, transformFunction: null }, highlightLines: { classPropertyName: "highlightLines", publicName: "highlightLines", isSignal: true, isRequired: false, transformFunction: null }, highlightMode: { classPropertyName: "highlightMode", publicName: "highlightMode", isSignal: true, isRequired: false, transformFunction: null }, language: { classPropertyName: "language", publicName: "language", isSignal: true, isRequired: false, transformFunction: null }, lineNumbersMode: { classPropertyName: "lineNumbersMode", publicName: "lineNumbers", isSignal: true, isRequired: false, transformFunction: null }, maxHeight: { classPropertyName: "maxHeight", publicName: "maxHeight", isSignal: true, isRequired: false, transformFunction: null }, sanitizeHtml: { classPropertyName: "sanitizeHtml", publicName: "sanitizeHtml", isSignal: true, isRequired: false, transformFunction: null }, showHeader: { classPropertyName: "showHeader", publicName: "showHeader", isSignal: true, isRequired: false, transformFunction: null }, showLanguageBadge: { classPropertyName: "showLanguageBadge", publicName: "showLanguageBadge", isSignal: true, isRequired: false, transformFunction: null }, showLineNumbers: { classPropertyName: "showLineNumbers", publicName: "showLineNumbers", isSignal: true, isRequired: false, transformFunction: null }, startingLineNumber: { classPropertyName: "startingLineNumber", publicName: "startingLineNumber", isSignal: true, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, wrap: { classPropertyName: "wrap", publicName: "wrap", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { copy: "copy", copyError: "copyError", copySuccess: "copySuccess", renderStateChange: "renderStateChange", tngCopied: "tngCopied", tngCopyError: "tngCopyError" }, ngImport: i0, template: "<section\n tngCodeBlock\n class=\"tng-code-block\"\n [attr.data-has-copy]=\"dataHasCopy()\"\n [attr.data-has-title]=\"dataHasTitle()\"\n [attr.data-highlighted]=\"dataHighlighted()\"\n [attr.data-state]=\"renderState()\"\n [attr.data-variant]=\"variant()\"\n [attr.data-wrap]=\"dataWrap()\"\n>\n @if (shouldRenderHeader()) {\n <header tngCodeBlockHeader class=\"tng-code-block__header\" data-slot=\"header\">\n @if (titleText(); as title) {\n <h3 class=\"tng-code-block__title\" data-slot=\"title\">{{ title }}</h3>\n }\n\n <div class=\"tng-code-block__actions\" data-slot=\"actions\">\n @if (hasLanguageBadge()) {\n <span class=\"tng-code-block__language\" data-slot=\"language-badge\">{{ languageLabel() }}</span>\n }\n\n @if (shouldShowCopyAction()) {\n <button\n type=\"button\"\n tngCopy\n class=\"tng-code-block__copy-button\"\n data-slot=\"copy-button\"\n [attr.aria-label]=\"copyLabel()\"\n [attr.data-copy-state]=\"copyButtonLabel()\"\n [tngCopyButtonSuccessDurationMs]=\"effectiveCopyResetDuration()\"\n [tngCopyButtonText]=\"copyPayload()\"\n [tngCopyDisabled]=\"normalizedCode().length === 0\"\n (tngCopy)=\"onPrimitiveCopy($event)\"\n (tngCopyError)=\"onPrimitiveCopyError($event)\"\n (tngCopySuccess)=\"onPrimitiveCopySuccess($event)\"\n >\n {{ copyButtonLabel() }}\n </button>\n }\n </div>\n </header>\n }\n\n <div\n tngCodeBlockBody\n class=\"tng-code-block__body\"\n data-slot=\"body\"\n [class.tng-code-block__body--line-numbers]=\"shouldRenderBodyLineNumbers()\"\n [class.tng-code-block__body--wrap]=\"wrap()\"\n >\n @if (shouldRenderBodyLineNumbers()) {\n <ol tngCodeBlockGutter class=\"tng-code-block__gutter\" aria-hidden=\"true\" data-slot=\"line-numbers\">\n @for (lineNumber of lineNumbers(); track lineNumber) {\n <li class=\"tng-code-block__line-number\">{{ lineNumber }}</li>\n }\n </ol>\n }\n\n <pre\n class=\"tng-code-block__pre\"\n data-slot=\"pre\"\n [attr.data-highlighting]=\"isHighlighting() ? 'pending' : 'ready'\"\n [style.max-height]=\"maxHeightCssValue()\"\n [style.overflow-y]=\"maxHeightCssValue() ? 'auto' : null\"\n ><code tngCodeBlockCode class=\"tng-code-block__code\" data-slot=\"code\">@for (line of renderedLines(); track line.lineNumber; let isLast = $last) {<span\n class=\"tng-code-block__line\"\n data-slot=\"line\"\n [attr.data-line-number]=\"line.lineNumber\"\n [class.tng-code-block__line--dim]=\"line.dimmed\"\n [class.tng-code-block__line--highlight]=\"line.highlighted\"\n [innerHTML]=\"line.html\"\n ></span>@if (!isLast) {&#10;}}</code></pre>\n </div>\n\n @if (caption(); as caption) {\n <p class=\"tng-code-block__caption\" data-slot=\"caption\">{{ caption }}</p>\n }\n</section>\n", styles: [":host {\n display: block;\n}\n\n.tng-code-block {\n background: var(--tng-code-block-bg, var(--tng-semantic-background-base, #ffffff));\n border: 1px solid var(--tng-code-block-border, var(--tng-semantic-border-subtle, #cbd5e1));\n border-radius: var(--tng-code-block-radius, 0.8rem);\n color: var(--tng-code-block-fg, var(--tng-semantic-foreground-primary, #0f172a));\n display: grid;\n overflow: hidden;\n}\n\n.tng-code-block__header {\n align-items: center;\n background: var(\n --tng-code-block-header-bg,\n color-mix(\n in srgb,\n var(--tng-semantic-background-surface, #f8fafc) 90%,\n var(--tng-semantic-background-canvas, #ffffff) 10%\n )\n );\n border-bottom: 1px solid var(--tng-code-block-border, var(--tng-semantic-border-subtle, #cbd5e1));\n display: flex;\n justify-content: space-between;\n min-height: 2.25rem;\n padding: 0.35rem 0.65rem;\n}\n\n.tng-code-block__title {\n color: inherit;\n font-size: 0.95rem;\n font-weight: 600;\n margin: 0;\n}\n\n.tng-code-block__actions {\n align-items: center;\n display: inline-flex;\n gap: 0.45rem;\n}\n\n.tng-code-block__language {\n color: var(--tng-code-block-language-fg, var(--tng-semantic-accent-brand, #2563eb));\n font-size: 0.72rem;\n font-weight: 700;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n}\n\n.tng-code-block__copy-button {\n appearance: none;\n background: var(--tng-code-block-copy-bg, transparent);\n border: 1px solid var(--tng-code-block-copy-border, var(--tng-semantic-border-strong, #94a3b8));\n border-radius: 0.55rem;\n color: var(--tng-code-block-copy-fg, var(--tng-semantic-foreground-secondary, #475569));\n cursor: pointer;\n font: inherit;\n font-size: 0.75rem;\n font-weight: 600;\n min-height: 1.85rem;\n padding: 0 0.7rem;\n transition: background-color 120ms ease, border-color 120ms ease, color 120ms ease, opacity 120ms ease;\n}\n\n.tng-code-block__copy-button[data-copy-state='Copied'] {\n background: var(--tng-code-block-copy-success-bg, var(--tng-semantic-accent-success, #16a34a));\n border-color: var(--tng-code-block-copy-success-bg, var(--tng-semantic-accent-success, #16a34a));\n color: var(--tng-code-block-copy-success-fg, #f0fdf4);\n}\n\n.tng-code-block__copy-button[data-copy-state='Copy failed'] {\n background: var(--tng-code-block-copy-error-bg, var(--tng-semantic-accent-danger, #dc2626));\n border-color: var(--tng-code-block-copy-error-bg, var(--tng-semantic-accent-danger, #dc2626));\n color: var(--tng-code-block-copy-error-fg, #fef2f2);\n}\n\n.tng-code-block__copy-button:focus-visible {\n box-shadow: 0 0 0 3px var(--tng-code-block-focus-ring, var(--tng-semantic-focus-ring, rgba(59, 130, 246, 0.45)));\n outline: none;\n}\n\n.tng-code-block__copy-button:disabled,\n.tng-code-block__copy-button[data-copy-disabled] {\n cursor: not-allowed;\n opacity: 0.55;\n}\n\n.tng-code-block__body {\n display: grid;\n}\n\n.tng-code-block__body--line-numbers {\n grid-template-columns: auto minmax(0, 1fr);\n}\n\n.tng-code-block__gutter {\n background: var(\n --tng-code-block-gutter-bg,\n color-mix(\n in srgb,\n var(--tng-semantic-background-surface, #f8fafc) 80%,\n var(--tng-semantic-background-canvas, #ffffff) 20%\n )\n );\n border-right: 1px solid var(--tng-code-block-border, var(--tng-semantic-border-subtle, #cbd5e1));\n color: var(--tng-code-block-gutter-fg, var(--tng-semantic-foreground-muted, #64748b));\n list-style: none;\n margin: 0;\n min-width: 2.8rem;\n padding: 0.75rem 0.45rem;\n text-align: right;\n}\n\n.tng-code-block__line-number {\n font-family: var(--tng-code-block-font-family, 'IBM Plex Mono', 'Fira Code', 'Menlo', monospace);\n font-size: var(--tng-code-block-line-number-size, var(--tng-code-block-font-size, 0.84rem));\n font-variant-numeric: tabular-nums;\n line-height: var(--tng-code-block-line-height, 1.6);\n}\n\n.tng-code-block__pre {\n margin: 0;\n overflow-x: auto;\n overflow-y: hidden;\n padding: 0.75rem 0.9rem;\n}\n\n.tng-code-block__code {\n color: inherit;\n display: block;\n font-family: var(--tng-code-block-font-family, 'IBM Plex Mono', 'Fira Code', 'Menlo', monospace);\n font-size: var(--tng-code-block-font-size, 0.84rem);\n min-height: 100%;\n white-space: normal;\n}\n\n.tng-code-block__line {\n display: block;\n line-height: var(--tng-code-block-line-height, 1.6);\n min-height: calc(1em * var(--tng-code-block-line-height, 1.6));\n white-space: pre;\n}\n\n.tng-code-block__line--dim {\n opacity: var(--tng-code-block-line-dim-opacity, 0.55);\n}\n\n.tng-code-block__line--highlight {\n background: var(\n --tng-code-block-line-highlight-bg,\n color-mix(in srgb, var(--tng-semantic-accent-brand, #2563eb) 14%, transparent)\n );\n border-radius: 0.25rem;\n margin-inline: -0.2rem;\n padding-inline: 0.2rem;\n}\n\n.tng-code-block__caption {\n color: var(--tng-code-block-caption-fg, var(--tng-semantic-foreground-secondary, #475569));\n font-size: 0.78rem;\n margin: 0;\n padding: 0 0.9rem 0.75rem;\n}\n\n.tng-code-block__body--wrap .tng-code-block__line {\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n word-break: break-word;\n}\n"], dependencies: [{ kind: "directive", type: TngCodeBlockPrimitive, selector: "[tngCodeBlock]", exportAs: ["tngCodeBlock"] }, { kind: "directive", type: TngCodeBlockHeaderPrimitive, selector: "[tngCodeBlockHeader]", exportAs: ["tngCodeBlockHeader"] }, { kind: "directive", type: TngCodeBlockBodyPrimitive, selector: "[tngCodeBlockBody]", exportAs: ["tngCodeBlockBody"] }, { kind: "directive", type: TngCodeBlockGutterPrimitive, selector: "[tngCodeBlockGutter]", exportAs: ["tngCodeBlockGutter"] }, { kind: "directive", type: TngCodeBlockCodePrimitive, selector: "[tngCodeBlockCode]", exportAs: ["tngCodeBlockCode"] }, { kind: "directive", type: TngCopy, selector: "[tngCopy], [tngCopyButton]", inputs: ["tngCopyButtonText", "tngCopyButtonTarget", "tngCopyButtonFormat", "tngCopyButtonSuccessDurationMs", "tngCopyButtonDisabled", "tngCopyButtonHotkey", "tngCopyButtonAnnounce", "tngCopyButtonSuccessMessage", "tngCopyButtonErrorMessage", "tngCopyDisabled", "tngCopyFrom", "tngCopyIgnoreSelectors", "tngCopyText"], outputs: ["tngCopy", "tngCopied", "tngCopySuccess", "tngCopyError", "tngCopyAnnounced"], exportAs: ["tngCopy"] }] });
543
+ }
544
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.1", ngImport: i0, type: TngCodeBlockComponent, decorators: [{
545
+ type: Component,
546
+ args: [{ selector: 'tng-code-block', imports: [
547
+ TngCodeBlockPrimitive,
548
+ TngCodeBlockHeaderPrimitive,
549
+ TngCodeBlockBodyPrimitive,
550
+ TngCodeBlockGutterPrimitive,
551
+ TngCodeBlockCodePrimitive,
552
+ TngCopy,
553
+ ], template: "<section\n tngCodeBlock\n class=\"tng-code-block\"\n [attr.data-has-copy]=\"dataHasCopy()\"\n [attr.data-has-title]=\"dataHasTitle()\"\n [attr.data-highlighted]=\"dataHighlighted()\"\n [attr.data-state]=\"renderState()\"\n [attr.data-variant]=\"variant()\"\n [attr.data-wrap]=\"dataWrap()\"\n>\n @if (shouldRenderHeader()) {\n <header tngCodeBlockHeader class=\"tng-code-block__header\" data-slot=\"header\">\n @if (titleText(); as title) {\n <h3 class=\"tng-code-block__title\" data-slot=\"title\">{{ title }}</h3>\n }\n\n <div class=\"tng-code-block__actions\" data-slot=\"actions\">\n @if (hasLanguageBadge()) {\n <span class=\"tng-code-block__language\" data-slot=\"language-badge\">{{ languageLabel() }}</span>\n }\n\n @if (shouldShowCopyAction()) {\n <button\n type=\"button\"\n tngCopy\n class=\"tng-code-block__copy-button\"\n data-slot=\"copy-button\"\n [attr.aria-label]=\"copyLabel()\"\n [attr.data-copy-state]=\"copyButtonLabel()\"\n [tngCopyButtonSuccessDurationMs]=\"effectiveCopyResetDuration()\"\n [tngCopyButtonText]=\"copyPayload()\"\n [tngCopyDisabled]=\"normalizedCode().length === 0\"\n (tngCopy)=\"onPrimitiveCopy($event)\"\n (tngCopyError)=\"onPrimitiveCopyError($event)\"\n (tngCopySuccess)=\"onPrimitiveCopySuccess($event)\"\n >\n {{ copyButtonLabel() }}\n </button>\n }\n </div>\n </header>\n }\n\n <div\n tngCodeBlockBody\n class=\"tng-code-block__body\"\n data-slot=\"body\"\n [class.tng-code-block__body--line-numbers]=\"shouldRenderBodyLineNumbers()\"\n [class.tng-code-block__body--wrap]=\"wrap()\"\n >\n @if (shouldRenderBodyLineNumbers()) {\n <ol tngCodeBlockGutter class=\"tng-code-block__gutter\" aria-hidden=\"true\" data-slot=\"line-numbers\">\n @for (lineNumber of lineNumbers(); track lineNumber) {\n <li class=\"tng-code-block__line-number\">{{ lineNumber }}</li>\n }\n </ol>\n }\n\n <pre\n class=\"tng-code-block__pre\"\n data-slot=\"pre\"\n [attr.data-highlighting]=\"isHighlighting() ? 'pending' : 'ready'\"\n [style.max-height]=\"maxHeightCssValue()\"\n [style.overflow-y]=\"maxHeightCssValue() ? 'auto' : null\"\n ><code tngCodeBlockCode class=\"tng-code-block__code\" data-slot=\"code\">@for (line of renderedLines(); track line.lineNumber; let isLast = $last) {<span\n class=\"tng-code-block__line\"\n data-slot=\"line\"\n [attr.data-line-number]=\"line.lineNumber\"\n [class.tng-code-block__line--dim]=\"line.dimmed\"\n [class.tng-code-block__line--highlight]=\"line.highlighted\"\n [innerHTML]=\"line.html\"\n ></span>@if (!isLast) {&#10;}}</code></pre>\n </div>\n\n @if (caption(); as caption) {\n <p class=\"tng-code-block__caption\" data-slot=\"caption\">{{ caption }}</p>\n }\n</section>\n", styles: [":host {\n display: block;\n}\n\n.tng-code-block {\n background: var(--tng-code-block-bg, var(--tng-semantic-background-base, #ffffff));\n border: 1px solid var(--tng-code-block-border, var(--tng-semantic-border-subtle, #cbd5e1));\n border-radius: var(--tng-code-block-radius, 0.8rem);\n color: var(--tng-code-block-fg, var(--tng-semantic-foreground-primary, #0f172a));\n display: grid;\n overflow: hidden;\n}\n\n.tng-code-block__header {\n align-items: center;\n background: var(\n --tng-code-block-header-bg,\n color-mix(\n in srgb,\n var(--tng-semantic-background-surface, #f8fafc) 90%,\n var(--tng-semantic-background-canvas, #ffffff) 10%\n )\n );\n border-bottom: 1px solid var(--tng-code-block-border, var(--tng-semantic-border-subtle, #cbd5e1));\n display: flex;\n justify-content: space-between;\n min-height: 2.25rem;\n padding: 0.35rem 0.65rem;\n}\n\n.tng-code-block__title {\n color: inherit;\n font-size: 0.95rem;\n font-weight: 600;\n margin: 0;\n}\n\n.tng-code-block__actions {\n align-items: center;\n display: inline-flex;\n gap: 0.45rem;\n}\n\n.tng-code-block__language {\n color: var(--tng-code-block-language-fg, var(--tng-semantic-accent-brand, #2563eb));\n font-size: 0.72rem;\n font-weight: 700;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n}\n\n.tng-code-block__copy-button {\n appearance: none;\n background: var(--tng-code-block-copy-bg, transparent);\n border: 1px solid var(--tng-code-block-copy-border, var(--tng-semantic-border-strong, #94a3b8));\n border-radius: 0.55rem;\n color: var(--tng-code-block-copy-fg, var(--tng-semantic-foreground-secondary, #475569));\n cursor: pointer;\n font: inherit;\n font-size: 0.75rem;\n font-weight: 600;\n min-height: 1.85rem;\n padding: 0 0.7rem;\n transition: background-color 120ms ease, border-color 120ms ease, color 120ms ease, opacity 120ms ease;\n}\n\n.tng-code-block__copy-button[data-copy-state='Copied'] {\n background: var(--tng-code-block-copy-success-bg, var(--tng-semantic-accent-success, #16a34a));\n border-color: var(--tng-code-block-copy-success-bg, var(--tng-semantic-accent-success, #16a34a));\n color: var(--tng-code-block-copy-success-fg, #f0fdf4);\n}\n\n.tng-code-block__copy-button[data-copy-state='Copy failed'] {\n background: var(--tng-code-block-copy-error-bg, var(--tng-semantic-accent-danger, #dc2626));\n border-color: var(--tng-code-block-copy-error-bg, var(--tng-semantic-accent-danger, #dc2626));\n color: var(--tng-code-block-copy-error-fg, #fef2f2);\n}\n\n.tng-code-block__copy-button:focus-visible {\n box-shadow: 0 0 0 3px var(--tng-code-block-focus-ring, var(--tng-semantic-focus-ring, rgba(59, 130, 246, 0.45)));\n outline: none;\n}\n\n.tng-code-block__copy-button:disabled,\n.tng-code-block__copy-button[data-copy-disabled] {\n cursor: not-allowed;\n opacity: 0.55;\n}\n\n.tng-code-block__body {\n display: grid;\n}\n\n.tng-code-block__body--line-numbers {\n grid-template-columns: auto minmax(0, 1fr);\n}\n\n.tng-code-block__gutter {\n background: var(\n --tng-code-block-gutter-bg,\n color-mix(\n in srgb,\n var(--tng-semantic-background-surface, #f8fafc) 80%,\n var(--tng-semantic-background-canvas, #ffffff) 20%\n )\n );\n border-right: 1px solid var(--tng-code-block-border, var(--tng-semantic-border-subtle, #cbd5e1));\n color: var(--tng-code-block-gutter-fg, var(--tng-semantic-foreground-muted, #64748b));\n list-style: none;\n margin: 0;\n min-width: 2.8rem;\n padding: 0.75rem 0.45rem;\n text-align: right;\n}\n\n.tng-code-block__line-number {\n font-family: var(--tng-code-block-font-family, 'IBM Plex Mono', 'Fira Code', 'Menlo', monospace);\n font-size: var(--tng-code-block-line-number-size, var(--tng-code-block-font-size, 0.84rem));\n font-variant-numeric: tabular-nums;\n line-height: var(--tng-code-block-line-height, 1.6);\n}\n\n.tng-code-block__pre {\n margin: 0;\n overflow-x: auto;\n overflow-y: hidden;\n padding: 0.75rem 0.9rem;\n}\n\n.tng-code-block__code {\n color: inherit;\n display: block;\n font-family: var(--tng-code-block-font-family, 'IBM Plex Mono', 'Fira Code', 'Menlo', monospace);\n font-size: var(--tng-code-block-font-size, 0.84rem);\n min-height: 100%;\n white-space: normal;\n}\n\n.tng-code-block__line {\n display: block;\n line-height: var(--tng-code-block-line-height, 1.6);\n min-height: calc(1em * var(--tng-code-block-line-height, 1.6));\n white-space: pre;\n}\n\n.tng-code-block__line--dim {\n opacity: var(--tng-code-block-line-dim-opacity, 0.55);\n}\n\n.tng-code-block__line--highlight {\n background: var(\n --tng-code-block-line-highlight-bg,\n color-mix(in srgb, var(--tng-semantic-accent-brand, #2563eb) 14%, transparent)\n );\n border-radius: 0.25rem;\n margin-inline: -0.2rem;\n padding-inline: 0.2rem;\n}\n\n.tng-code-block__caption {\n color: var(--tng-code-block-caption-fg, var(--tng-semantic-foreground-secondary, #475569));\n font-size: 0.78rem;\n margin: 0;\n padding: 0 0.9rem 0.75rem;\n}\n\n.tng-code-block__body--wrap .tng-code-block__line {\n overflow-wrap: anywhere;\n white-space: pre-wrap;\n word-break: break-word;\n}\n"] }]
554
+ }], ctorParameters: () => [], propDecorators: { adapter: [{ type: i0.Input, args: [{ isSignal: true, alias: "adapter", required: false }] }], caption: [{ type: i0.Input, args: [{ isSignal: true, alias: "caption", required: false }] }], code: [{ type: i0.Input, args: [{ isSignal: true, alias: "code", required: false }] }], copyMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "copy", required: false }] }], copyLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "copyLabel", required: false }] }], copiedLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "copiedLabel", required: false }] }], copyResetDuration: [{ type: i0.Input, args: [{ isSignal: true, alias: "copyResetDuration", required: false }] }], copySuccessDurationMs: [{ type: i0.Input, args: [{ isSignal: true, alias: "copySuccessDurationMs", required: false }] }], copyText: [{ type: i0.Input, args: [{ isSignal: true, alias: "copyText", required: false }] }], errorLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "errorLabel", required: false }] }], focusLines: [{ type: i0.Input, args: [{ isSignal: true, alias: "focusLines", required: false }] }], highlight: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlight", required: false }] }], highlightDebounceMs: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightDebounceMs", required: false }] }], highlightLines: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightLines", required: false }] }], highlightMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightMode", required: false }] }], language: [{ type: i0.Input, args: [{ isSignal: true, alias: "language", required: false }] }], lineNumbersMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "lineNumbers", required: false }] }], maxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxHeight", required: false }] }], sanitizeHtml: [{ type: i0.Input, args: [{ isSignal: true, alias: "sanitizeHtml", required: false }] }], showHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "showHeader", required: false }] }], showLanguageBadge: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLanguageBadge", required: false }] }], showLineNumbers: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLineNumbers", required: false }] }], startingLineNumber: [{ type: i0.Input, args: [{ isSignal: true, alias: "startingLineNumber", required: false }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], wrap: [{ type: i0.Input, args: [{ isSignal: true, alias: "wrap", required: false }] }], copy: [{ type: i0.Output, args: ["copy"] }], copyError: [{ type: i0.Output, args: ["copyError"] }], copySuccess: [{ type: i0.Output, args: ["copySuccess"] }], renderStateChange: [{ type: i0.Output, args: ["renderStateChange"] }], tngCopied: [{ type: i0.Output, args: ["tngCopied"] }], tngCopyError: [{ type: i0.Output, args: ["tngCopyError"] }] } });
555
+ export { TngCodeBlockComponent as TngCodeBlock };
586
556
  //# sourceMappingURL=tng-code-block.component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-code-block.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/utility/code-block/tng-code-block.component.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n booleanAttribute,\n Component,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n type OnDestroy,\n} from '@angular/core';\nimport { DomSanitizer, type SafeHtml } from '@angular/platform-browser';\nimport {\n TngCodeBlock as TngCodeBlockPrimitive,\n TngCodeBlockBody as TngCodeBlockBodyPrimitive,\n TngCodeBlockCode as TngCodeBlockCodePrimitive,\n TngCodeBlockGutter as TngCodeBlockGutterPrimitive,\n TngCodeBlockHeader as TngCodeBlockHeaderPrimitive,\n TngCopy,\n} from '@tailng-ui/primitives';\nimport type { TngCopyErrorEvent, TngCopyEvent, TngCopySuccessEvent } from '@tailng-ui/primitives';\nimport {\n escapeTngCodeHtml,\n normalizeTngCodeLanguage,\n resolveTngCodeHighlightResult,\n TNG_CODE_HIGHLIGHTING_CONFIG,\n type TngCodeHighlightToken,\n type TngCodeHighlightTokenLine,\n type TngCodeHighlightRequest,\n type TngNormalizedCodeHighlightResult,\n type TngResolvedCodeHighlightingConfig,\n} from './highlighting';\n\nexport type TngCodeBlockCopyMode = boolean | 'auto';\nexport type TngCodeBlockHighlightLineInput = number | readonly [number, number];\nexport type TngCodeBlockHighlightMode = 'auto' | 'off' | 'on';\nexport type TngCodeBlockLineNumbersMode = boolean | 'auto';\nexport type TngCodeBlockRenderState = 'error' | 'highlighted' | 'highlighting' | 'idle';\nexport type TngCodeBlockSanitizeHtml = boolean | 'auto';\nexport type TngCodeBlockVariant = 'compact' | 'default' | 'ghost';\n\nexport interface TngCodeBlockCopyContext {\n code: string;\n language: string | null;\n theme: string | null;\n}\n\nexport interface TngCodeBlockRenderStateChange {\n error?: unknown;\n state: TngCodeBlockRenderState;\n}\n\ntype TngCodeBlockCopyState = 'copied' | 'error' | 'idle';\n\ntype TngCodeBlockRenderRequest = Readonly<{\n adapter: string | null;\n code: string;\n includeLineWrappers: boolean;\n language: string | null;\n theme: string | null;\n}>;\n\ntype TngCodeBlockRenderedLine = Readonly<{\n dimmed: boolean;\n highlighted: boolean;\n html: SafeHtml | string;\n lineNumber: number;\n}>;\n\nconst defaultCopyResetDuration = 1500;\nconst highlightModeSet = new Set<TngCodeBlockHighlightMode>(['auto', 'off', 'on']);\n\nfunction normalizeOptionalString(value: string | null | undefined): string | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : null;\n}\n\nfunction toRoundedPositiveNumber(value: number): number {\n return Math.max(0, Math.round(value));\n}\n\nfunction coerceOptionalBoolean(value: boolean | string | null | undefined): boolean | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n\n return booleanAttribute(value);\n}\n\nfunction coercePositiveInteger(value: number | string, fallback: number): number {\n const numericValue = typeof value === 'number' ? value : Number(value);\n if (!Number.isFinite(numericValue)) {\n return fallback;\n }\n\n return Math.max(1, Math.round(numericValue));\n}\n\nfunction coerceOptionalPositiveNumber(value: number | string | undefined): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n const numericValue = typeof value === 'number' ? value : Number(value);\n if (!Number.isFinite(numericValue)) {\n return undefined;\n }\n\n return toRoundedPositiveNumber(numericValue);\n}\n\nfunction coerceTngCodeBlockCopyMode(\n value: TngCodeBlockCopyMode | boolean | string | null | undefined,\n): TngCodeBlockCopyMode {\n if (value === 'auto' || value === undefined || value === null) {\n return 'auto';\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 'auto';\n}\n\nfunction coerceTngCodeBlockLineNumbersMode(\n value: TngCodeBlockLineNumbersMode | boolean | string | null | undefined,\n): TngCodeBlockLineNumbersMode {\n if (value === 'auto') {\n return 'auto';\n }\n\n if (value === undefined || value === null) {\n return false;\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 false;\n}\n\nfunction coerceTngCodeBlockSanitizeHtml(\n value: TngCodeBlockSanitizeHtml | string | null | undefined,\n): TngCodeBlockSanitizeHtml {\n if (value === undefined || value === null || value === 'auto') {\n return 'auto';\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 'auto';\n}\n\nfunction normalizeHighlightLineNumber(value: number): number | null {\n if (!Number.isFinite(value)) {\n return null;\n }\n\n const normalized = Math.round(value);\n return normalized > 0 ? normalized : null;\n}\n\nfunction toNormalizedHighlightLineSet(\n value: readonly TngCodeBlockHighlightLineInput[] | null | undefined,\n): ReadonlySet<number> {\n if (value === undefined || value === null || value.length === 0) {\n return new Set<number>();\n }\n\n const normalizedValues = new Set<number>();\n\n for (const entry of value) {\n if (typeof entry === 'number') {\n const normalized = normalizeHighlightLineNumber(entry);\n if (normalized !== null) {\n normalizedValues.add(normalized);\n }\n continue;\n }\n\n const [start, end] = entry;\n const normalizedStart = normalizeHighlightLineNumber(start);\n const normalizedEnd = normalizeHighlightLineNumber(end);\n if (normalizedStart === null || normalizedEnd === null) {\n continue;\n }\n\n const from = Math.min(normalizedStart, normalizedEnd);\n const to = Math.max(normalizedStart, normalizedEnd);\n for (let current = from; current <= to; current += 1) {\n normalizedValues.add(current);\n }\n }\n\n return normalizedValues;\n}\n\nfunction tokenClassNameToAttributeValue(className: string | null | undefined): string {\n if (className === null || className === undefined) {\n return '';\n }\n\n return className\n .trim()\n .split(/\\s+/)\n .filter((token) => token.length > 0)\n .join(' ');\n}\n\nfunction renderToken(token: TngCodeHighlightToken): string {\n const escapedContent = escapeTngCodeHtml(token.content);\n const normalizedClassName = tokenClassNameToAttributeValue(token.className);\n if (normalizedClassName.length === 0) {\n return escapedContent;\n }\n\n return `<span class=\"${escapeTngCodeHtml(normalizedClassName)}\">${escapedContent}</span>`;\n}\n\nfunction renderTokenLine(line: TngCodeHighlightTokenLine): string {\n return line.map((token) => renderToken(token)).join('');\n}\n\nfunction splitCodeLines(code: string): readonly string[] {\n if (code.length === 0) {\n return [''];\n }\n\n const lines = code.split('\\n');\n if (lines.length > 1 && lines[lines.length - 1] === '') {\n lines.pop();\n }\n\n return lines;\n}\n\nfunction toNormalizedCopyError(value: unknown): Error {\n if (value instanceof Error) {\n return value;\n }\n\n if (typeof value === 'object' && value !== null && 'error' in value) {\n const nestedError = (value as { error: unknown }).error;\n if (nestedError instanceof Error) {\n return nestedError;\n }\n }\n\n return new Error('Copy failed.');\n}\n\nfunction toCssSizeValue(value: number | string | null | undefined): string | null {\n if (value === undefined || value === null) {\n return null;\n }\n\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) {\n return null;\n }\n\n return `${Math.max(0, value)}px`;\n }\n\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : null;\n}\n\nfunction shouldHighlight(mode: TngCodeBlockHighlightMode): boolean {\n return mode === 'auto' || mode === 'on';\n}\n\nexport function coerceTngCodeBlockHighlightMode(value: string): TngCodeBlockHighlightMode {\n if (highlightModeSet.has(value as TngCodeBlockHighlightMode)) {\n return value as TngCodeBlockHighlightMode;\n }\n\n return 'auto';\n}\n\nexport function coerceTngCodeBlockCopyResetDuration(value: number | string): number {\n const numericValue = typeof value === 'number' ? value : Number(value);\n if (!Number.isFinite(numericValue)) {\n return defaultCopyResetDuration;\n }\n\n return toRoundedPositiveNumber(numericValue);\n}\n\nexport function coerceTngCodeBlockStartingLineNumber(value: number | string): number {\n return coercePositiveInteger(value, 1);\n}\n\nexport function normalizeTngCodeBlockCode(value: string | null | undefined): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n return value.replace(/\\r\\n?/g, '\\n');\n}\n\nexport function toTngCodeBlockLineNumbers(\n code: string,\n startingLineNumber = 1,\n): readonly number[] {\n const normalizedStart = Math.max(1, Math.round(startingLineNumber));\n return splitCodeLines(code).map((_, index) => normalizedStart + index);\n}\n\n@Component({\n selector: 'tng-code-block',\n imports: [\n TngCodeBlockPrimitive,\n TngCodeBlockHeaderPrimitive,\n TngCodeBlockBodyPrimitive,\n TngCodeBlockGutterPrimitive,\n TngCodeBlockCodePrimitive,\n TngCopy,\n ],\n templateUrl: './tng-code-block.component.html',\n styleUrl: './tng-code-block.component.css',\n})\nexport class TngCodeBlockComponent implements OnDestroy {\n public readonly adapter = input<string | null>(null);\n public readonly caption = input<string | null>(null);\n public readonly code = input<string>('');\n public readonly copyMode = input<TngCodeBlockCopyMode, TngCodeBlockCopyMode | boolean | string | null | undefined>(\n 'auto',\n {\n alias: 'copy',\n transform: coerceTngCodeBlockCopyMode,\n },\n );\n public readonly copyLabel = input<string>('Copy code');\n public readonly copiedLabel = input<string>('Copied');\n public readonly copyResetDuration = input<number, number | string>(defaultCopyResetDuration, {\n transform: coerceTngCodeBlockCopyResetDuration,\n });\n public readonly copySuccessDurationMs = input<number | undefined, number | string | undefined>(\n undefined,\n {\n transform: coerceOptionalPositiveNumber,\n },\n );\n public readonly copyText = input<string | ((ctx: TngCodeBlockCopyContext) => string) | null>(null);\n public readonly errorLabel = input<string>('Copy failed');\n public readonly focusLines = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly highlight = input<boolean, boolean | string>(true, {\n transform: booleanAttribute,\n });\n public readonly highlightDebounceMs = input<number, number | string>(0, {\n transform: coerceTngCodeBlockCopyResetDuration,\n });\n public readonly highlightLines = input<readonly TngCodeBlockHighlightLineInput[] | null>(null);\n public readonly highlightMode = input<TngCodeBlockHighlightMode, string>('auto', {\n transform: coerceTngCodeBlockHighlightMode,\n });\n public readonly language = input<string | null>(null);\n public readonly lineNumbersMode = input<\n TngCodeBlockLineNumbersMode,\n TngCodeBlockLineNumbersMode | boolean | string | null | undefined\n >(false, {\n alias: 'lineNumbers',\n transform: coerceTngCodeBlockLineNumbersMode,\n });\n public readonly maxHeight = input<string | number | null>(null);\n public readonly sanitizeHtml = input<\n TngCodeBlockSanitizeHtml,\n TngCodeBlockSanitizeHtml | string | null | undefined\n >('auto', {\n transform: coerceTngCodeBlockSanitizeHtml,\n });\n public readonly showHeader = input<boolean, boolean | string>(true, {\n transform: booleanAttribute,\n });\n public readonly showLanguageBadge = input<boolean, boolean | string>(true, {\n transform: booleanAttribute,\n });\n public readonly showLineNumbers = input<boolean | undefined, boolean | string | null | undefined>(\n undefined,\n {\n transform: coerceOptionalBoolean,\n },\n );\n public readonly startingLineNumber = input<number, number | string>(1, {\n transform: coerceTngCodeBlockStartingLineNumber,\n });\n public readonly theme = input<string | null>(null);\n public readonly title = input<string | null>(null);\n public readonly variant = input<TngCodeBlockVariant>('default');\n public readonly wrap = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n\n public readonly copy = output<TngCopyEvent>();\n public readonly copyError = output<TngCopyErrorEvent>();\n public readonly copySuccess = output<TngCopySuccessEvent>();\n public readonly renderStateChange = output<TngCodeBlockRenderStateChange>();\n\n public readonly tngCopied = output<string>();\n public readonly tngCopyError = output<Error>();\n\n protected readonly copyButtonLabel = computed((): string => {\n const state = this.copyState();\n if (state === 'copied') {\n return this.copiedLabel();\n }\n\n if (state === 'error') {\n return this.errorLabel();\n }\n\n return this.copyLabel();\n });\n\n protected readonly copyPayload = computed((): string => {\n const value = this.copyText();\n if (typeof value === 'function') {\n try {\n return value({\n code: this.normalizedCode(),\n language: this.languageForBadge(),\n theme: normalizeTngCodeLanguage(this.theme()),\n });\n } catch {\n return this.normalizedCode();\n }\n }\n\n if (typeof value === 'string') {\n return value;\n }\n\n return this.normalizedCode();\n });\n\n protected readonly dataHasCopy = computed((): 'false' | 'true' =>\n this.shouldShowCopyAction() ? 'true' : 'false',\n );\n\n protected readonly dataHasTitle = computed((): 'false' | 'true' =>\n this.titleText() === null ? 'false' : 'true',\n );\n\n protected readonly dataHighlighted = computed((): 'false' | 'true' =>\n this.renderState() === 'highlighted' ? 'true' : 'false',\n );\n\n protected readonly dataWrap = computed((): 'false' | 'true' => (this.wrap() ? 'true' : 'false'));\n\n protected readonly effectiveCopyResetDuration = computed((): number => {\n return this.copySuccessDurationMs() ?? this.copyResetDuration();\n });\n\n protected readonly effectiveLineNumbers = computed((): boolean => {\n const legacyValue = this.showLineNumbers();\n if (legacyValue !== undefined) {\n return legacyValue;\n }\n\n const mode = this.lineNumbersMode();\n if (mode === 'auto') {\n return splitCodeLines(this.normalizedCode()).length > 1;\n }\n\n return mode;\n });\n\n protected readonly hasHeaderContent = computed((): boolean => {\n return this.titleText() !== null || this.hasLanguageBadge() || this.shouldShowCopyAction();\n });\n\n protected readonly hasLanguageBadge = computed((): boolean => {\n return this.showLanguageBadge() && this.languageForBadge() !== null;\n });\n\n protected readonly highlightLineSet = computed((): ReadonlySet<number> =>\n toNormalizedHighlightLineSet(this.highlightLines()),\n );\n\n protected readonly isHighlighting = computed((): boolean => this.renderState() === 'highlighting');\n\n protected readonly languageForBadge = computed((): string | null => {\n return this.resolvedLanguage() ?? this.normalizedLanguage();\n });\n\n protected readonly languageLabel = computed((): string => {\n return this.languageForBadge() ?? 'text';\n });\n\n protected readonly lineNumbers = computed((): readonly number[] => {\n return this.renderedLines().map((line) => line.lineNumber);\n });\n\n protected readonly maxHeightCssValue = computed((): string | null => toCssSizeValue(this.maxHeight()));\n\n protected readonly normalizedCode = computed((): string => normalizeTngCodeBlockCode(this.code()));\n\n protected readonly renderState = signal<TngCodeBlockRenderState>('idle');\n\n protected readonly renderedLines = computed((): readonly TngCodeBlockRenderedLine[] => {\n const baseLines = this.baseLineHtml();\n const start = this.startingLineNumber();\n const highlightSet = this.highlightLineSet();\n const shouldDim = this.focusLines() && highlightSet.size > 0;\n\n return baseLines.map((html, index) => {\n const lineNumber = start + index;\n const highlighted = highlightSet.has(lineNumber);\n\n return {\n dimmed: shouldDim && !highlighted,\n highlighted,\n html,\n lineNumber,\n };\n });\n });\n\n protected readonly shouldRenderBodyLineNumbers = computed((): boolean => this.effectiveLineNumbers());\n\n protected readonly shouldRenderHeader = computed((): boolean => {\n return this.showHeader() && this.hasHeaderContent();\n });\n\n protected readonly shouldShowCopyAction = computed((): boolean => {\n const mode = this.copyMode();\n if (mode === 'auto') {\n return this.normalizedCode().length > 0;\n }\n\n return mode;\n });\n\n protected readonly titleText = computed((): string | null => normalizeOptionalString(this.title()));\n\n private readonly baseLineHtml = signal<readonly (SafeHtml | string)[]>(['']);\n private readonly copyState = signal<TngCodeBlockCopyState>('idle');\n private readonly domSanitizer = inject(DomSanitizer);\n private readonly highlightingConfig = inject<TngResolvedCodeHighlightingConfig>(\n TNG_CODE_HIGHLIGHTING_CONFIG,\n );\n private readonly normalizedLanguage = computed((): string | null => normalizeTngCodeLanguage(this.language()));\n private readonly resolvedLanguage = signal<string | null>(null);\n\n private copyResetTimer: ReturnType<typeof setTimeout> | null = null;\n private destroyed = false;\n private highlightDebounceTimer: ReturnType<typeof setTimeout> | null = null;\n private highlightRequestId = 0;\n private lastEmittedRenderState: TngCodeBlockRenderState = 'idle';\n private readonly renderCache = new Map<string, TngNormalizedCodeHighlightResult | null>();\n\n public constructor() {\n effect((): void => {\n const request: TngCodeBlockRenderRequest = {\n adapter: normalizeTngCodeLanguage(this.adapter()),\n code: this.normalizedCode(),\n includeLineWrappers: this.shouldIncludeLineWrappers(),\n language: this.normalizedLanguage(),\n theme: normalizeTngCodeLanguage(this.theme()),\n };\n\n this.enqueueRenderRequest({\n request,\n shouldHighlight: this.shouldHighlightCode(),\n });\n });\n }\n\n public ngOnDestroy(): void {\n this.destroyed = true;\n this.highlightRequestId += 1;\n this.clearCopyResetTimer();\n this.clearHighlightDebounceTimer();\n }\n\n protected onPrimitiveCopy(...args: readonly unknown[]): void {\n const [event] = args;\n if (\n typeof event === 'object' &&\n event !== null &&\n 'text' in event &&\n 'trigger' in event &&\n typeof (event as { text: unknown }).text === 'string' &&\n typeof (event as { trigger: unknown }).trigger === 'string'\n ) {\n this.copy.emit(event as TngCopyEvent);\n }\n }\n\n protected onPrimitiveCopyError(...args: readonly unknown[]): void {\n const [event] = args;\n const normalizedError = toNormalizedCopyError(event);\n\n this.copyState.set('error');\n this.tngCopyError.emit(normalizedError);\n\n if (typeof event === 'object' && event !== null && 'error' in event) {\n this.copyError.emit(event as TngCopyErrorEvent);\n } else {\n this.copyError.emit({ error: normalizedError });\n }\n\n this.scheduleCopyStateReset();\n }\n\n protected onPrimitiveCopySuccess(...args: readonly unknown[]): void {\n const [event] = args;\n if (\n typeof event !== 'object' ||\n event === null ||\n !('text' in event) ||\n !('method' in event) ||\n typeof (event as { text: unknown }).text !== 'string' ||\n typeof (event as { method: unknown }).method !== 'string'\n ) {\n return;\n }\n\n const payload = event as TngCopySuccessEvent;\n this.copyState.set('copied');\n this.copySuccess.emit(payload);\n this.tngCopied.emit(payload.text);\n this.scheduleCopyStateReset();\n }\n\n private applyPlainText(code: string, language: string | null): void {\n this.resolvedLanguage.set(language);\n this.baseLineHtml.set(splitCodeLines(code).map((line) => escapeTngCodeHtml(line)));\n }\n\n private applyResolvedHighlightResult(\n result: TngNormalizedCodeHighlightResult,\n request: TngCodeBlockRenderRequest,\n ): boolean {\n this.resolvedLanguage.set(result.language ?? request.language);\n\n if (result.kind === 'tokens') {\n if (result.tokens.length === 0) {\n return false;\n }\n\n this.baseLineHtml.set(result.tokens.map((line) => renderTokenLine(line)));\n return true;\n }\n\n const htmlLines = result.html.split('\\n');\n if (htmlLines.length === 0 || (htmlLines.length === 1 && htmlLines[0].length === 0)) {\n return false;\n }\n\n const shouldBypassSanitization = this.sanitizeHtml() === false && result.trustedHtml;\n if (shouldBypassSanitization) {\n this.baseLineHtml.set(\n htmlLines.map((line) => this.domSanitizer.bypassSecurityTrustHtml(line)),\n );\n return true;\n }\n\n this.baseLineHtml.set(htmlLines);\n return true;\n }\n\n private buildCacheKey(request: TngCodeBlockRenderRequest): string {\n return [\n request.adapter ?? '',\n request.language ?? '',\n request.theme ?? '',\n request.includeLineWrappers ? '1' : '0',\n request.code,\n ].join('\\u241f');\n }\n\n private clearCopyResetTimer(): void {\n if (this.copyResetTimer === null) {\n return;\n }\n\n clearTimeout(this.copyResetTimer);\n this.copyResetTimer = null;\n }\n\n private clearHighlightDebounceTimer(): void {\n if (this.highlightDebounceTimer === null) {\n return;\n }\n\n clearTimeout(this.highlightDebounceTimer);\n this.highlightDebounceTimer = null;\n }\n\n private enqueueRenderRequest(input: Readonly<{ request: TngCodeBlockRenderRequest; shouldHighlight: boolean }>): void {\n this.clearHighlightDebounceTimer();\n\n const debounceMs = this.highlightDebounceMs();\n if (debounceMs <= 0) {\n void this.renderRequest(input);\n return;\n }\n\n this.highlightDebounceTimer = setTimeout((): void => {\n this.highlightDebounceTimer = null;\n void this.renderRequest(input);\n }, debounceMs);\n }\n\n private isStaleRequest(requestId: number): boolean {\n return this.destroyed || requestId !== this.highlightRequestId;\n }\n\n private scheduleCopyStateReset(): void {\n this.clearCopyResetTimer();\n this.copyResetTimer = setTimeout((): void => {\n this.copyState.set('idle');\n this.copyResetTimer = null;\n }, this.effectiveCopyResetDuration());\n }\n\n private setRenderState(state: TngCodeBlockRenderState, error?: unknown): void {\n this.renderState.set(state);\n\n if (this.lastEmittedRenderState === state) {\n return;\n }\n\n this.lastEmittedRenderState = state;\n if (state === 'error') {\n this.renderStateChange.emit({ error, state });\n return;\n }\n\n this.renderStateChange.emit({ state });\n }\n\n private shouldHighlightCode(): boolean {\n if (!this.highlight()) {\n return false;\n }\n\n return shouldHighlight(this.highlightMode());\n }\n\n private shouldIncludeLineWrappers(): boolean {\n return this.effectiveLineNumbers() || this.highlightLineSet().size > 0 || this.focusLines();\n }\n\n private toHighlightRequest(request: TngCodeBlockRenderRequest): TngCodeHighlightRequest {\n return {\n adapter: request.adapter,\n code: request.code,\n includeLineWrappers: request.includeLineWrappers,\n language: request.language,\n theme: request.theme,\n };\n }\n\n private async renderRequest(input: Readonly<{ request: TngCodeBlockRenderRequest; shouldHighlight: boolean }>): Promise<void> {\n const requestId = this.highlightRequestId + 1;\n this.highlightRequestId = requestId;\n\n if (!input.shouldHighlight) {\n this.applyPlainText(input.request.code, input.request.language);\n this.setRenderState('idle');\n return;\n }\n\n this.setRenderState('highlighting');\n\n try {\n const cacheKey = this.buildCacheKey(input.request);\n let resolvedResult = this.renderCache.get(cacheKey);\n if (resolvedResult === undefined) {\n resolvedResult = await resolveTngCodeHighlightResult(\n this.toHighlightRequest(input.request),\n this.highlightingConfig,\n );\n this.renderCache.set(cacheKey, resolvedResult);\n }\n\n if (this.isStaleRequest(requestId)) {\n return;\n }\n\n if (resolvedResult === null) {\n this.applyPlainText(input.request.code, input.request.language);\n this.setRenderState('highlighted');\n return;\n }\n\n const didRenderHighlight = this.applyResolvedHighlightResult(resolvedResult, input.request);\n if (!didRenderHighlight) {\n this.applyPlainText(input.request.code, input.request.language);\n }\n\n this.setRenderState('highlighted');\n } catch (error) {\n if (this.isStaleRequest(requestId)) {\n return;\n }\n\n this.applyPlainText(input.request.code, input.request.language);\n this.setRenderState('error', error);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"tng-code-block.component.js","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/utility/code-block/tng-code-block.component.ts","../../../../../../../../libs/tailng-ui/components/src/lib/utility/code-block/tng-code-block.component.html"],"names":[],"mappings":"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","sourcesContent":["import {\n booleanAttribute,\n Component,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n type OnDestroy,\n} from '@angular/core';\nimport { DomSanitizer, type SafeHtml } from '@angular/platform-browser';\nimport {\n TngCodeBlock as TngCodeBlockPrimitive,\n TngCodeBlockBody as TngCodeBlockBodyPrimitive,\n TngCodeBlockCode as TngCodeBlockCodePrimitive,\n TngCodeBlockGutter as TngCodeBlockGutterPrimitive,\n TngCodeBlockHeader as TngCodeBlockHeaderPrimitive,\n TngCopy,\n} from '@tailng-ui/primitives';\nimport type { TngCopyErrorEvent, TngCopyEvent, TngCopySuccessEvent } from '@tailng-ui/primitives';\nimport {\n escapeTngCodeHtml,\n normalizeTngCodeLanguage,\n resolveTngCodeHighlightResult,\n TNG_CODE_HIGHLIGHTING_CONFIG,\n type TngCodeHighlightToken,\n type TngCodeHighlightTokenLine,\n type TngCodeHighlightRequest,\n type TngNormalizedCodeHighlightResult,\n type TngResolvedCodeHighlightingConfig,\n} from './highlighting';\n\nexport type TngCodeBlockCopyMode = boolean | 'auto';\nexport type TngCodeBlockHighlightLineInput = number | readonly [number, number];\nexport type TngCodeBlockHighlightMode = 'auto' | 'off' | 'on';\nexport type TngCodeBlockLineNumbersMode = boolean | 'auto';\nexport type TngCodeBlockRenderState = 'error' | 'highlighted' | 'highlighting' | 'idle';\nexport type TngCodeBlockSanitizeHtml = boolean | 'auto';\nexport type TngCodeBlockVariant = 'compact' | 'default' | 'ghost';\n\nexport interface TngCodeBlockCopyContext {\n code: string;\n language: string | null;\n theme: string | null;\n}\n\nexport interface TngCodeBlockRenderStateChange {\n error?: unknown;\n state: TngCodeBlockRenderState;\n}\n\ntype TngCodeBlockCopyState = 'copied' | 'error' | 'idle';\n\ntype TngCodeBlockRenderRequest = Readonly<{\n adapter: string | null;\n code: string;\n includeLineWrappers: boolean;\n language: string | null;\n theme: string | null;\n}>;\n\ntype TngCodeBlockRenderedLine = Readonly<{\n dimmed: boolean;\n highlighted: boolean;\n html: SafeHtml | string;\n lineNumber: number;\n}>;\n\nconst defaultCopyResetDuration = 1500;\nconst highlightModeSet = new Set<TngCodeBlockHighlightMode>(['auto', 'off', 'on']);\n\nfunction normalizeOptionalString(value: string | null | undefined): string | null {\n if (value === null || value === undefined) {\n return null;\n }\n\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : null;\n}\n\nfunction toRoundedPositiveNumber(value: number): number {\n return Math.max(0, Math.round(value));\n}\n\nfunction coerceOptionalBoolean(value: boolean | string | null | undefined): boolean | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n\n return booleanAttribute(value);\n}\n\nfunction coercePositiveInteger(value: number | string, fallback: number): number {\n const numericValue = typeof value === 'number' ? value : Number(value);\n if (!Number.isFinite(numericValue)) {\n return fallback;\n }\n\n return Math.max(1, Math.round(numericValue));\n}\n\nfunction coerceOptionalPositiveNumber(value: number | string | undefined): number | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n const numericValue = typeof value === 'number' ? value : Number(value);\n if (!Number.isFinite(numericValue)) {\n return undefined;\n }\n\n return toRoundedPositiveNumber(numericValue);\n}\n\nfunction coerceTngCodeBlockCopyMode(\n value: TngCodeBlockCopyMode | boolean | string | null | undefined,\n): TngCodeBlockCopyMode {\n if (value === 'auto' || value === undefined || value === null) {\n return 'auto';\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 'auto';\n}\n\nfunction coerceTngCodeBlockLineNumbersMode(\n value: TngCodeBlockLineNumbersMode | boolean | string | null | undefined,\n): TngCodeBlockLineNumbersMode {\n if (value === 'auto') {\n return 'auto';\n }\n\n if (value === undefined || value === null) {\n return false;\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 false;\n}\n\nfunction coerceTngCodeBlockSanitizeHtml(\n value: TngCodeBlockSanitizeHtml | string | null | undefined,\n): TngCodeBlockSanitizeHtml {\n if (value === undefined || value === null || value === 'auto') {\n return 'auto';\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 'auto';\n}\n\nfunction normalizeHighlightLineNumber(value: number): number | null {\n if (!Number.isFinite(value)) {\n return null;\n }\n\n const normalized = Math.round(value);\n return normalized > 0 ? normalized : null;\n}\n\nfunction toNormalizedHighlightLineSet(\n value: readonly TngCodeBlockHighlightLineInput[] | null | undefined,\n): ReadonlySet<number> {\n if (value === undefined || value === null || value.length === 0) {\n return new Set<number>();\n }\n\n const normalizedValues = new Set<number>();\n\n for (const entry of value) {\n if (typeof entry === 'number') {\n const normalized = normalizeHighlightLineNumber(entry);\n if (normalized !== null) {\n normalizedValues.add(normalized);\n }\n continue;\n }\n\n const [start, end] = entry;\n const normalizedStart = normalizeHighlightLineNumber(start);\n const normalizedEnd = normalizeHighlightLineNumber(end);\n if (normalizedStart === null || normalizedEnd === null) {\n continue;\n }\n\n const from = Math.min(normalizedStart, normalizedEnd);\n const to = Math.max(normalizedStart, normalizedEnd);\n for (let current = from; current <= to; current += 1) {\n normalizedValues.add(current);\n }\n }\n\n return normalizedValues;\n}\n\nfunction tokenClassNameToAttributeValue(className: string | null | undefined): string {\n if (className === null || className === undefined) {\n return '';\n }\n\n return className\n .trim()\n .split(/\\s+/)\n .filter((token) => token.length > 0)\n .join(' ');\n}\n\nfunction renderToken(token: TngCodeHighlightToken): string {\n const escapedContent = escapeTngCodeHtml(token.content);\n const normalizedClassName = tokenClassNameToAttributeValue(token.className);\n if (normalizedClassName.length === 0) {\n return escapedContent;\n }\n\n return `<span class=\"${escapeTngCodeHtml(normalizedClassName)}\">${escapedContent}</span>`;\n}\n\nfunction renderTokenLine(line: TngCodeHighlightTokenLine): string {\n return line.map((token) => renderToken(token)).join('');\n}\n\nfunction splitCodeLines(code: string): readonly string[] {\n if (code.length === 0) {\n return [''];\n }\n\n const lines = code.split('\\n');\n if (lines.length > 1 && lines[lines.length - 1] === '') {\n lines.pop();\n }\n\n return lines;\n}\n\nfunction toNormalizedCopyError(value: unknown): Error {\n if (value instanceof Error) {\n return value;\n }\n\n if (typeof value === 'object' && value !== null && 'error' in value) {\n const nestedError = (value as { error: unknown }).error;\n if (nestedError instanceof Error) {\n return nestedError;\n }\n }\n\n return new Error('Copy failed.');\n}\n\nfunction toCssSizeValue(value: number | string | null | undefined): string | null {\n if (value === undefined || value === null) {\n return null;\n }\n\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) {\n return null;\n }\n\n return `${Math.max(0, value)}px`;\n }\n\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : null;\n}\n\nfunction shouldHighlight(mode: TngCodeBlockHighlightMode): boolean {\n return mode === 'auto' || mode === 'on';\n}\n\nexport function coerceTngCodeBlockHighlightMode(value: string): TngCodeBlockHighlightMode {\n if (highlightModeSet.has(value as TngCodeBlockHighlightMode)) {\n return value as TngCodeBlockHighlightMode;\n }\n\n return 'auto';\n}\n\nexport function coerceTngCodeBlockCopyResetDuration(value: number | string): number {\n const numericValue = typeof value === 'number' ? value : Number(value);\n if (!Number.isFinite(numericValue)) {\n return defaultCopyResetDuration;\n }\n\n return toRoundedPositiveNumber(numericValue);\n}\n\nexport function coerceTngCodeBlockStartingLineNumber(value: number | string): number {\n return coercePositiveInteger(value, 1);\n}\n\nexport function normalizeTngCodeBlockCode(value: string | null | undefined): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n return value.replace(/\\r\\n?/g, '\\n');\n}\n\nexport function toTngCodeBlockLineNumbers(\n code: string,\n startingLineNumber = 1,\n): readonly number[] {\n const normalizedStart = Math.max(1, Math.round(startingLineNumber));\n return splitCodeLines(code).map((_, index) => normalizedStart + index);\n}\n\n@Component({\n selector: 'tng-code-block',\n imports: [\n TngCodeBlockPrimitive,\n TngCodeBlockHeaderPrimitive,\n TngCodeBlockBodyPrimitive,\n TngCodeBlockGutterPrimitive,\n TngCodeBlockCodePrimitive,\n TngCopy,\n ],\n templateUrl: './tng-code-block.component.html',\n styleUrl: './tng-code-block.component.css',\n})\nexport class TngCodeBlockComponent implements OnDestroy {\n public readonly adapter = input<string | null>(null);\n public readonly caption = input<string | null>(null);\n public readonly code = input<string>('');\n public readonly copyMode = input<TngCodeBlockCopyMode, TngCodeBlockCopyMode | boolean | string | null | undefined>(\n 'auto',\n {\n alias: 'copy',\n transform: coerceTngCodeBlockCopyMode,\n },\n );\n public readonly copyLabel = input<string>('Copy code');\n public readonly copiedLabel = input<string>('Copied');\n public readonly copyResetDuration = input<number, number | string>(defaultCopyResetDuration, {\n transform: coerceTngCodeBlockCopyResetDuration,\n });\n public readonly copySuccessDurationMs = input<number | undefined, number | string | undefined>(\n undefined,\n {\n transform: coerceOptionalPositiveNumber,\n },\n );\n public readonly copyText = input<string | ((ctx: TngCodeBlockCopyContext) => string) | null>(null);\n public readonly errorLabel = input<string>('Copy failed');\n public readonly focusLines = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n public readonly highlight = input<boolean, boolean | string>(true, {\n transform: booleanAttribute,\n });\n public readonly highlightDebounceMs = input<number, number | string>(0, {\n transform: coerceTngCodeBlockCopyResetDuration,\n });\n public readonly highlightLines = input<readonly TngCodeBlockHighlightLineInput[] | null>(null);\n public readonly highlightMode = input<TngCodeBlockHighlightMode, string>('auto', {\n transform: coerceTngCodeBlockHighlightMode,\n });\n public readonly language = input<string | null>(null);\n public readonly lineNumbersMode = input<\n TngCodeBlockLineNumbersMode,\n TngCodeBlockLineNumbersMode | boolean | string | null | undefined\n >(false, {\n alias: 'lineNumbers',\n transform: coerceTngCodeBlockLineNumbersMode,\n });\n public readonly maxHeight = input<string | number | null>(null);\n public readonly sanitizeHtml = input<\n TngCodeBlockSanitizeHtml,\n TngCodeBlockSanitizeHtml | string | null | undefined\n >('auto', {\n transform: coerceTngCodeBlockSanitizeHtml,\n });\n public readonly showHeader = input<boolean, boolean | string>(true, {\n transform: booleanAttribute,\n });\n public readonly showLanguageBadge = input<boolean, boolean | string>(true, {\n transform: booleanAttribute,\n });\n public readonly showLineNumbers = input<boolean | undefined, boolean | string | null | undefined>(\n undefined,\n {\n transform: coerceOptionalBoolean,\n },\n );\n public readonly startingLineNumber = input<number, number | string>(1, {\n transform: coerceTngCodeBlockStartingLineNumber,\n });\n public readonly theme = input<string | null>(null);\n public readonly title = input<string | null>(null);\n public readonly variant = input<TngCodeBlockVariant>('default');\n public readonly wrap = input<boolean, boolean | string>(false, {\n transform: booleanAttribute,\n });\n\n public readonly copy = output<TngCopyEvent>();\n public readonly copyError = output<TngCopyErrorEvent>();\n public readonly copySuccess = output<TngCopySuccessEvent>();\n public readonly renderStateChange = output<TngCodeBlockRenderStateChange>();\n\n public readonly tngCopied = output<string>();\n public readonly tngCopyError = output<Error>();\n\n protected readonly copyButtonLabel = computed((): string => {\n const state = this.copyState();\n if (state === 'copied') {\n return this.copiedLabel();\n }\n\n if (state === 'error') {\n return this.errorLabel();\n }\n\n return this.copyLabel();\n });\n\n protected readonly copyPayload = computed((): string => {\n const value = this.copyText();\n if (typeof value === 'function') {\n try {\n return value({\n code: this.normalizedCode(),\n language: this.languageForBadge(),\n theme: normalizeTngCodeLanguage(this.theme()),\n });\n } catch {\n return this.normalizedCode();\n }\n }\n\n if (typeof value === 'string') {\n return value;\n }\n\n return this.normalizedCode();\n });\n\n protected readonly dataHasCopy = computed((): 'false' | 'true' =>\n this.shouldShowCopyAction() ? 'true' : 'false',\n );\n\n protected readonly dataHasTitle = computed((): 'false' | 'true' =>\n this.titleText() === null ? 'false' : 'true',\n );\n\n protected readonly dataHighlighted = computed((): 'false' | 'true' =>\n this.renderState() === 'highlighted' ? 'true' : 'false',\n );\n\n protected readonly dataWrap = computed((): 'false' | 'true' => (this.wrap() ? 'true' : 'false'));\n\n protected readonly effectiveCopyResetDuration = computed((): number => {\n return this.copySuccessDurationMs() ?? this.copyResetDuration();\n });\n\n protected readonly effectiveLineNumbers = computed((): boolean => {\n const legacyValue = this.showLineNumbers();\n if (legacyValue !== undefined) {\n return legacyValue;\n }\n\n const mode = this.lineNumbersMode();\n if (mode === 'auto') {\n return splitCodeLines(this.normalizedCode()).length > 1;\n }\n\n return mode;\n });\n\n protected readonly hasHeaderContent = computed((): boolean => {\n return this.titleText() !== null || this.hasLanguageBadge() || this.shouldShowCopyAction();\n });\n\n protected readonly hasLanguageBadge = computed((): boolean => {\n return this.showLanguageBadge() && this.languageForBadge() !== null;\n });\n\n protected readonly highlightLineSet = computed((): ReadonlySet<number> =>\n toNormalizedHighlightLineSet(this.highlightLines()),\n );\n\n protected readonly isHighlighting = computed((): boolean => this.renderState() === 'highlighting');\n\n protected readonly languageForBadge = computed((): string | null => {\n return this.resolvedLanguage() ?? this.normalizedLanguage();\n });\n\n protected readonly languageLabel = computed((): string => {\n return this.languageForBadge() ?? 'text';\n });\n\n protected readonly lineNumbers = computed((): readonly number[] => {\n return this.renderedLines().map((line) => line.lineNumber);\n });\n\n protected readonly maxHeightCssValue = computed((): string | null => toCssSizeValue(this.maxHeight()));\n\n protected readonly normalizedCode = computed((): string => normalizeTngCodeBlockCode(this.code()));\n\n protected readonly renderState = signal<TngCodeBlockRenderState>('idle');\n\n protected readonly renderedLines = computed((): readonly TngCodeBlockRenderedLine[] => {\n const baseLines = this.baseLineHtml();\n const start = this.startingLineNumber();\n const highlightSet = this.highlightLineSet();\n const shouldDim = this.focusLines() && highlightSet.size > 0;\n\n return baseLines.map((html, index) => {\n const lineNumber = start + index;\n const highlighted = highlightSet.has(lineNumber);\n\n return {\n dimmed: shouldDim && !highlighted,\n highlighted,\n html,\n lineNumber,\n };\n });\n });\n\n protected readonly shouldRenderBodyLineNumbers = computed((): boolean => this.effectiveLineNumbers());\n\n protected readonly shouldRenderHeader = computed((): boolean => {\n return this.showHeader() && this.hasHeaderContent();\n });\n\n protected readonly shouldShowCopyAction = computed((): boolean => {\n const mode = this.copyMode();\n if (mode === 'auto') {\n return this.normalizedCode().length > 0;\n }\n\n return mode;\n });\n\n protected readonly titleText = computed((): string | null => normalizeOptionalString(this.title()));\n\n private readonly baseLineHtml = signal<readonly (SafeHtml | string)[]>(['']);\n private readonly copyState = signal<TngCodeBlockCopyState>('idle');\n private readonly domSanitizer = inject(DomSanitizer);\n private readonly highlightingConfig = inject<TngResolvedCodeHighlightingConfig>(\n TNG_CODE_HIGHLIGHTING_CONFIG,\n );\n private readonly normalizedLanguage = computed((): string | null => normalizeTngCodeLanguage(this.language()));\n private readonly resolvedLanguage = signal<string | null>(null);\n\n private copyResetTimer: ReturnType<typeof setTimeout> | null = null;\n private destroyed = false;\n private highlightDebounceTimer: ReturnType<typeof setTimeout> | null = null;\n private highlightRequestId = 0;\n private lastEmittedRenderState: TngCodeBlockRenderState = 'idle';\n private readonly renderCache = new Map<string, TngNormalizedCodeHighlightResult | null>();\n\n public constructor() {\n effect((): void => {\n const request: TngCodeBlockRenderRequest = {\n adapter: normalizeTngCodeLanguage(this.adapter()),\n code: this.normalizedCode(),\n includeLineWrappers: this.shouldIncludeLineWrappers(),\n language: this.normalizedLanguage(),\n theme: normalizeTngCodeLanguage(this.theme()),\n };\n\n this.enqueueRenderRequest({\n request,\n shouldHighlight: this.shouldHighlightCode(),\n });\n });\n }\n\n public ngOnDestroy(): void {\n this.destroyed = true;\n this.highlightRequestId += 1;\n this.clearCopyResetTimer();\n this.clearHighlightDebounceTimer();\n }\n\n protected onPrimitiveCopy(...args: readonly unknown[]): void {\n const [event] = args;\n if (\n typeof event === 'object' &&\n event !== null &&\n 'text' in event &&\n 'trigger' in event &&\n typeof (event as { text: unknown }).text === 'string' &&\n typeof (event as { trigger: unknown }).trigger === 'string'\n ) {\n this.copy.emit(event as TngCopyEvent);\n }\n }\n\n protected onPrimitiveCopyError(...args: readonly unknown[]): void {\n const [event] = args;\n const normalizedError = toNormalizedCopyError(event);\n\n this.copyState.set('error');\n this.tngCopyError.emit(normalizedError);\n\n if (typeof event === 'object' && event !== null && 'error' in event) {\n this.copyError.emit(event as TngCopyErrorEvent);\n } else {\n this.copyError.emit({ error: normalizedError });\n }\n\n this.scheduleCopyStateReset();\n }\n\n protected onPrimitiveCopySuccess(...args: readonly unknown[]): void {\n const [event] = args;\n if (\n typeof event !== 'object' ||\n event === null ||\n !('text' in event) ||\n !('method' in event) ||\n typeof (event as { text: unknown }).text !== 'string' ||\n typeof (event as { method: unknown }).method !== 'string'\n ) {\n return;\n }\n\n const payload = event as TngCopySuccessEvent;\n this.copyState.set('copied');\n this.copySuccess.emit(payload);\n this.tngCopied.emit(payload.text);\n this.scheduleCopyStateReset();\n }\n\n private applyPlainText(code: string, language: string | null): void {\n this.resolvedLanguage.set(language);\n this.baseLineHtml.set(splitCodeLines(code).map((line) => escapeTngCodeHtml(line)));\n }\n\n private applyResolvedHighlightResult(\n result: TngNormalizedCodeHighlightResult,\n request: TngCodeBlockRenderRequest,\n ): boolean {\n this.resolvedLanguage.set(result.language ?? request.language);\n\n if (result.kind === 'tokens') {\n if (result.tokens.length === 0) {\n return false;\n }\n\n this.baseLineHtml.set(result.tokens.map((line) => renderTokenLine(line)));\n return true;\n }\n\n const htmlLines = result.html.split('\\n');\n if (htmlLines.length === 0 || (htmlLines.length === 1 && htmlLines[0].length === 0)) {\n return false;\n }\n\n const shouldBypassSanitization = this.sanitizeHtml() === false && result.trustedHtml;\n if (shouldBypassSanitization) {\n this.baseLineHtml.set(\n htmlLines.map((line) => this.domSanitizer.bypassSecurityTrustHtml(line)),\n );\n return true;\n }\n\n this.baseLineHtml.set(htmlLines);\n return true;\n }\n\n private buildCacheKey(request: TngCodeBlockRenderRequest): string {\n return [\n request.adapter ?? '',\n request.language ?? '',\n request.theme ?? '',\n request.includeLineWrappers ? '1' : '0',\n request.code,\n ].join('\\u241f');\n }\n\n private clearCopyResetTimer(): void {\n if (this.copyResetTimer === null) {\n return;\n }\n\n clearTimeout(this.copyResetTimer);\n this.copyResetTimer = null;\n }\n\n private clearHighlightDebounceTimer(): void {\n if (this.highlightDebounceTimer === null) {\n return;\n }\n\n clearTimeout(this.highlightDebounceTimer);\n this.highlightDebounceTimer = null;\n }\n\n private enqueueRenderRequest(input: Readonly<{ request: TngCodeBlockRenderRequest; shouldHighlight: boolean }>): void {\n this.clearHighlightDebounceTimer();\n\n const debounceMs = this.highlightDebounceMs();\n if (debounceMs <= 0) {\n void this.renderRequest(input);\n return;\n }\n\n this.highlightDebounceTimer = setTimeout((): void => {\n this.highlightDebounceTimer = null;\n void this.renderRequest(input);\n }, debounceMs);\n }\n\n private isStaleRequest(requestId: number): boolean {\n return this.destroyed || requestId !== this.highlightRequestId;\n }\n\n private scheduleCopyStateReset(): void {\n this.clearCopyResetTimer();\n this.copyResetTimer = setTimeout((): void => {\n this.copyState.set('idle');\n this.copyResetTimer = null;\n }, this.effectiveCopyResetDuration());\n }\n\n private setRenderState(state: TngCodeBlockRenderState, error?: unknown): void {\n this.renderState.set(state);\n\n if (this.lastEmittedRenderState === state) {\n return;\n }\n\n this.lastEmittedRenderState = state;\n if (state === 'error') {\n this.renderStateChange.emit({ error, state });\n return;\n }\n\n this.renderStateChange.emit({ state });\n }\n\n private shouldHighlightCode(): boolean {\n if (!this.highlight()) {\n return false;\n }\n\n return shouldHighlight(this.highlightMode());\n }\n\n private shouldIncludeLineWrappers(): boolean {\n return this.effectiveLineNumbers() || this.highlightLineSet().size > 0 || this.focusLines();\n }\n\n private toHighlightRequest(request: TngCodeBlockRenderRequest): TngCodeHighlightRequest {\n return {\n adapter: request.adapter,\n code: request.code,\n includeLineWrappers: request.includeLineWrappers,\n language: request.language,\n theme: request.theme,\n };\n }\n\n private async renderRequest(input: Readonly<{ request: TngCodeBlockRenderRequest; shouldHighlight: boolean }>): Promise<void> {\n const requestId = this.highlightRequestId + 1;\n this.highlightRequestId = requestId;\n\n if (!input.shouldHighlight) {\n this.applyPlainText(input.request.code, input.request.language);\n this.setRenderState('idle');\n return;\n }\n\n this.setRenderState('highlighting');\n\n try {\n const cacheKey = this.buildCacheKey(input.request);\n let resolvedResult = this.renderCache.get(cacheKey);\n if (resolvedResult === undefined) {\n resolvedResult = await resolveTngCodeHighlightResult(\n this.toHighlightRequest(input.request),\n this.highlightingConfig,\n );\n this.renderCache.set(cacheKey, resolvedResult);\n }\n\n if (this.isStaleRequest(requestId)) {\n return;\n }\n\n if (resolvedResult === null) {\n this.applyPlainText(input.request.code, input.request.language);\n this.setRenderState('highlighted');\n return;\n }\n\n const didRenderHighlight = this.applyResolvedHighlightResult(resolvedResult, input.request);\n if (!didRenderHighlight) {\n this.applyPlainText(input.request.code, input.request.language);\n }\n\n this.setRenderState('highlighted');\n } catch (error) {\n if (this.isStaleRequest(requestId)) {\n return;\n }\n\n this.applyPlainText(input.request.code, input.request.language);\n this.setRenderState('error', error);\n }\n }\n}\nexport { TngCodeBlockComponent as TngCodeBlock };\n","<section\n tngCodeBlock\n class=\"tng-code-block\"\n [attr.data-has-copy]=\"dataHasCopy()\"\n [attr.data-has-title]=\"dataHasTitle()\"\n [attr.data-highlighted]=\"dataHighlighted()\"\n [attr.data-state]=\"renderState()\"\n [attr.data-variant]=\"variant()\"\n [attr.data-wrap]=\"dataWrap()\"\n>\n @if (shouldRenderHeader()) {\n <header tngCodeBlockHeader class=\"tng-code-block__header\" data-slot=\"header\">\n @if (titleText(); as title) {\n <h3 class=\"tng-code-block__title\" data-slot=\"title\">{{ title }}</h3>\n }\n\n <div class=\"tng-code-block__actions\" data-slot=\"actions\">\n @if (hasLanguageBadge()) {\n <span class=\"tng-code-block__language\" data-slot=\"language-badge\">{{ languageLabel() }}</span>\n }\n\n @if (shouldShowCopyAction()) {\n <button\n type=\"button\"\n tngCopy\n class=\"tng-code-block__copy-button\"\n data-slot=\"copy-button\"\n [attr.aria-label]=\"copyLabel()\"\n [attr.data-copy-state]=\"copyButtonLabel()\"\n [tngCopyButtonSuccessDurationMs]=\"effectiveCopyResetDuration()\"\n [tngCopyButtonText]=\"copyPayload()\"\n [tngCopyDisabled]=\"normalizedCode().length === 0\"\n (tngCopy)=\"onPrimitiveCopy($event)\"\n (tngCopyError)=\"onPrimitiveCopyError($event)\"\n (tngCopySuccess)=\"onPrimitiveCopySuccess($event)\"\n >\n {{ copyButtonLabel() }}\n </button>\n }\n </div>\n </header>\n }\n\n <div\n tngCodeBlockBody\n class=\"tng-code-block__body\"\n data-slot=\"body\"\n [class.tng-code-block__body--line-numbers]=\"shouldRenderBodyLineNumbers()\"\n [class.tng-code-block__body--wrap]=\"wrap()\"\n >\n @if (shouldRenderBodyLineNumbers()) {\n <ol tngCodeBlockGutter class=\"tng-code-block__gutter\" aria-hidden=\"true\" data-slot=\"line-numbers\">\n @for (lineNumber of lineNumbers(); track lineNumber) {\n <li class=\"tng-code-block__line-number\">{{ lineNumber }}</li>\n }\n </ol>\n }\n\n <pre\n class=\"tng-code-block__pre\"\n data-slot=\"pre\"\n [attr.data-highlighting]=\"isHighlighting() ? 'pending' : 'ready'\"\n [style.max-height]=\"maxHeightCssValue()\"\n [style.overflow-y]=\"maxHeightCssValue() ? 'auto' : null\"\n ><code tngCodeBlockCode class=\"tng-code-block__code\" data-slot=\"code\">@for (line of renderedLines(); track line.lineNumber; let isLast = $last) {<span\n class=\"tng-code-block__line\"\n data-slot=\"line\"\n [attr.data-line-number]=\"line.lineNumber\"\n [class.tng-code-block__line--dim]=\"line.dimmed\"\n [class.tng-code-block__line--highlight]=\"line.highlighted\"\n [innerHTML]=\"line.html\"\n ></span>@if (!isLast) {&#10;}}</code></pre>\n </div>\n\n @if (caption(); as caption) {\n <p class=\"tng-code-block__caption\" data-slot=\"caption\">{{ caption }}</p>\n }\n</section>\n"]}
@@ -1,5 +1,6 @@
1
1
  import { type OnDestroy } from '@angular/core';
2
2
  import type { TngCopyFromTarget, TngCopyIgnoreSelectorsInput } from '@tailng-ui/primitives';
3
+ import * as i0 from "@angular/core";
3
4
  type TngCopyButtonState = 'copied' | 'copying' | 'error' | 'idle';
4
5
  export type TngCopyButtonAppearance = 'ghost' | 'outline' | 'solid';
5
6
  export type TngCopyButtonSize = 'md' | 'sm';
@@ -34,6 +35,8 @@ export declare class TngCopyButtonComponent implements OnDestroy {
34
35
  protected onPrimitiveCopyError(...args: readonly unknown[]): void;
35
36
  private clearResetTimer;
36
37
  private scheduleReset;
38
+ static ɵfac: i0.ɵɵFactoryDeclaration<TngCopyButtonComponent, never>;
39
+ static ɵcmp: i0.ɵɵComponentDeclaration<TngCopyButtonComponent, "tng-copy-button", never, { "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "copiedIconText": { "alias": "copiedIconText"; "required": false; "isSignal": true; }; "copyLabel": { "alias": "copyLabel"; "required": false; "isSignal": true; }; "copyIconText": { "alias": "copyIconText"; "required": false; "isSignal": true; }; "copiedLabel": { "alias": "copiedLabel"; "required": false; "isSignal": true; }; "copyingLabel": { "alias": "copyingLabel"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "errorLabel": { "alias": "errorLabel"; "required": false; "isSignal": true; }; "from": { "alias": "from"; "required": false; "isSignal": true; }; "ignoreSelectors": { "alias": "ignoreSelectors"; "required": false; "isSignal": true; }; "resetDelay": { "alias": "resetDelay"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "showIcon": { "alias": "showIcon"; "required": false; "isSignal": true; }; "text": { "alias": "text"; "required": false; "isSignal": true; }; }, { "tngCopied": "tngCopied"; "tngCopyError": "tngCopyError"; }, never, ["[copiedIcon]", "[copyIcon]"], true, never>;
37
40
  }
38
- export {};
41
+ export { TngCopyButtonComponent as TngCopyButton };
39
42
  //# sourceMappingURL=tng-copy-button.component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tng-copy-button.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/utility/copy-button/tng-copy-button.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AAI5F,KAAK,kBAAkB,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAClE,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AACpE,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAAC;AAC5C,KAAK,sBAAsB,GAAG,QAAQ,GAAG,MAAM,CAAC;AAqBhD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAO5E;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,kBAAkB,GAAG,sBAAsB,CAM/F;AAED,qBAMa,sBAAuB,YAAW,SAAS;IACtD,SAAgB,UAAU,+DAA6C;IACvE,SAAgB,cAAc,8CAAsB;IACpD,SAAgB,SAAS,8CAAyB;IAClD,SAAgB,YAAY,8CAAsB;IAClD,SAAgB,WAAW,8CAA2B;IACtD,SAAgB,YAAY,8CAA+B;IAC3D,SAAgB,QAAQ,8EAErB;IACH,SAAgB,UAAU,8CAAgC;IAC1D,SAAgB,IAAI,yDAAkC;IACtD,SAAgB,eAAe,mEAA4C;IAC3E,SAAgB,UAAU,4EAEvB;IACH,SAAgB,IAAI,yDAAkC;IACtD,SAAgB,QAAQ,8EAErB;IACH,SAAgB,IAAI,iEAA+C;IAEnE,SAAgB,SAAS,mDAAoB;IAC7C,SAAgB,YAAY,kDAAmB;IAE/C,SAAS,CAAC,QAAQ,CAAC,WAAW,yCAW3B;IAEH,SAAS,CAAC,QAAQ,CAAC,KAAK,yCAerB;IAEH,SAAS,CAAC,QAAQ,CAAC,SAAS,yDAE1B;IAEF,SAAS,CAAC,QAAQ,CAAC,KAAK,6DAAsC;IAE9D,OAAO,CAAC,UAAU,CAA8C;IAEzD,WAAW,IAAI,IAAI;IAI1B,SAAS,CAAC,WAAW,IAAI,IAAI;IAQ7B,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMlD,SAAS,CAAC,oBAAoB,CAAC,GAAG,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI;IAQjE,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,aAAa;CAOtB"}
1
+ {"version":3,"file":"tng-copy-button.component.d.ts","sourceRoot":"","sources":["../../../../../../../../libs/tailng-ui/components/src/lib/utility/copy-button/tng-copy-button.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,iBAAiB,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;;AAI5F,KAAK,kBAAkB,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAClE,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AACpE,MAAM,MAAM,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAAC;AAC5C,KAAK,sBAAsB,GAAG,QAAQ,GAAG,MAAM,CAAC;AAqBhD,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAO5E;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,kBAAkB,GAAG,sBAAsB,CAM/F;AAED,qBAMa,sBAAuB,YAAW,SAAS;IACtD,SAAgB,UAAU,+DAA6C;IACvE,SAAgB,cAAc,8CAAsB;IACpD,SAAgB,SAAS,8CAAyB;IAClD,SAAgB,YAAY,8CAAsB;IAClD,SAAgB,WAAW,8CAA2B;IACtD,SAAgB,YAAY,8CAA+B;IAC3D,SAAgB,QAAQ,8EAErB;IACH,SAAgB,UAAU,8CAAgC;IAC1D,SAAgB,IAAI,yDAAkC;IACtD,SAAgB,eAAe,mEAA4C;IAC3E,SAAgB,UAAU,4EAEvB;IACH,SAAgB,IAAI,yDAAkC;IACtD,SAAgB,QAAQ,8EAErB;IACH,SAAgB,IAAI,iEAA+C;IAEnE,SAAgB,SAAS,mDAAoB;IAC7C,SAAgB,YAAY,kDAAmB;IAE/C,SAAS,CAAC,QAAQ,CAAC,WAAW,yCAW3B;IAEH,SAAS,CAAC,QAAQ,CAAC,KAAK,yCAerB;IAEH,SAAS,CAAC,QAAQ,CAAC,SAAS,yDAE1B;IAEF,SAAS,CAAC,QAAQ,CAAC,KAAK,6DAAsC;IAE9D,OAAO,CAAC,UAAU,CAA8C;IAEzD,WAAW,IAAI,IAAI;IAI1B,SAAS,CAAC,WAAW,IAAI,IAAI;IAQ7B,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAMlD,SAAS,CAAC,oBAAoB,CAAC,GAAG,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI;IAQjE,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,aAAa;yCAlGV,sBAAsB;2CAAtB,sBAAsB;CAyGlC;AACD,OAAO,EAAE,sBAAsB,IAAI,aAAa,EAAE,CAAC"}