@slotted/angular 0.1.0-beta.1 → 0.1.0-beta.11

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 (598) hide show
  1. package/README.md +4 -0
  2. package/docs/AGENTS.snippet.md +12 -0
  3. package/docs/action-bar.json +4 -4
  4. package/docs/action-bar.md +3 -3
  5. package/docs/alert.json +7 -1
  6. package/docs/alert.md +3 -3
  7. package/docs/app-shell.examples.md +1 -1
  8. package/docs/app-shell.json +5 -5
  9. package/docs/app-shell.md +2 -2
  10. package/docs/avatar.json +22 -1
  11. package/docs/avatar.md +5 -3
  12. package/docs/badge.json +7 -1
  13. package/docs/badge.md +3 -3
  14. package/docs/button-group.json +2 -0
  15. package/docs/button-group.md +1 -1
  16. package/docs/button.json +51 -11
  17. package/docs/button.md +10 -6
  18. package/docs/calendar.json +8 -1
  19. package/docs/calendar.md +3 -2
  20. package/docs/cascader.json +1 -0
  21. package/docs/cascader.md +1 -1
  22. package/docs/chart.examples.md +1 -1
  23. package/docs/chart.json +10 -1
  24. package/docs/chart.md +3 -2
  25. package/docs/checkbox.json +7 -0
  26. package/docs/checkbox.md +1 -0
  27. package/docs/code-block.json +92 -92
  28. package/docs/code-block.md +69 -69
  29. package/docs/combobox.json +1 -0
  30. package/docs/combobox.md +1 -1
  31. package/docs/command-palette.json +1 -0
  32. package/docs/command-palette.md +1 -1
  33. package/docs/currency-field.json +40 -1
  34. package/docs/currency-field.md +5 -1
  35. package/docs/data-grid.examples.md +2 -2
  36. package/docs/data-grid.json +45 -7
  37. package/docs/data-grid.md +3 -1
  38. package/docs/data-grid.props.md +7 -4
  39. package/docs/data-list.json +2 -1
  40. package/docs/data-list.md +1 -1
  41. package/docs/date-field.json +9 -1
  42. package/docs/date-field.md +3 -2
  43. package/docs/date-picker.examples.md +36 -0
  44. package/docs/date-picker.json +20 -5
  45. package/docs/date-picker.md +5 -4
  46. package/docs/datetime-field.json +1 -0
  47. package/docs/datetime-field.md +1 -1
  48. package/docs/detail-panel.json +4 -2
  49. package/docs/detail-panel.md +8 -3
  50. package/docs/dialog.examples.md +158 -136
  51. package/docs/dialog.json +36 -11
  52. package/docs/dialog.md +4 -2
  53. package/docs/dialog.props.md +1 -1
  54. package/docs/drawer.json +11 -4
  55. package/docs/drawer.md +4 -3
  56. package/docs/entity-picker.json +19 -4
  57. package/docs/entity-picker.md +8 -6
  58. package/docs/event-calendar.json +7 -0
  59. package/docs/event-calendar.md +3 -2
  60. package/docs/filter-bar.json +118 -118
  61. package/docs/filter-bar.md +79 -79
  62. package/docs/form.json +2 -1
  63. package/docs/form.md +1 -1
  64. package/docs/guidelines/README.md +27 -0
  65. package/docs/guidelines/async-feedback.md +129 -0
  66. package/docs/guidelines/browsing.md +74 -0
  67. package/docs/guidelines/builders.md +97 -0
  68. package/docs/guidelines/composition.md +143 -0
  69. package/docs/guidelines/conversations.md +59 -0
  70. package/docs/guidelines/errors-and-conflicts.md +71 -0
  71. package/docs/guidelines/forms.md +202 -0
  72. package/docs/guidelines/index.md +130 -0
  73. package/docs/guidelines/layout-alignment.md +105 -0
  74. package/docs/guidelines/ledgers.md +45 -0
  75. package/docs/guidelines/list-pages.md +206 -0
  76. package/docs/guidelines/overviews.md +76 -0
  77. package/docs/guidelines/own-elements.md +115 -0
  78. package/docs/guidelines/reading-permissions.md +55 -0
  79. package/docs/guidelines/record-pages.md +178 -0
  80. package/docs/guidelines/reports.md +123 -0
  81. package/docs/guidelines/shell-composition.md +94 -0
  82. package/docs/guidelines/workspaces.md +46 -0
  83. package/docs/icon.json +3 -1
  84. package/docs/icon.md +3 -3
  85. package/docs/index.md +12 -0
  86. package/docs/inline-message.json +14 -2
  87. package/docs/inline-message.md +4 -3
  88. package/docs/list-item.json +9 -1
  89. package/docs/list-item.md +3 -3
  90. package/docs/list.json +19 -1
  91. package/docs/list.md +3 -1
  92. package/docs/markdown.json +79 -79
  93. package/docs/markdown.md +65 -65
  94. package/docs/menu.json +12 -0
  95. package/docs/menu.md +2 -0
  96. package/docs/message.json +7 -1
  97. package/docs/message.md +3 -3
  98. package/docs/multi-select.json +1 -0
  99. package/docs/multi-select.md +1 -1
  100. package/docs/notification-center.json +4 -0
  101. package/docs/notification-center.md +2 -2
  102. package/docs/number-field.json +1 -0
  103. package/docs/number-field.md +1 -1
  104. package/docs/otp-input.json +1 -0
  105. package/docs/otp-input.md +1 -1
  106. package/docs/page-header.json +22 -5
  107. package/docs/page-header.md +6 -4
  108. package/docs/page.json +2 -0
  109. package/docs/page.md +2 -1
  110. package/docs/popover.json +1 -1
  111. package/docs/progress-indicator.json +4 -3
  112. package/docs/progress-indicator.md +4 -4
  113. package/docs/prompt-composer.json +41 -1
  114. package/docs/prompt-composer.md +5 -1
  115. package/docs/rating.json +5 -3
  116. package/docs/rating.md +6 -6
  117. package/docs/section.json +28 -16
  118. package/docs/section.md +12 -10
  119. package/docs/segmented-control.json +36 -12
  120. package/docs/segmented-control.md +17 -1
  121. package/docs/select.json +1 -0
  122. package/docs/select.md +1 -1
  123. package/docs/side-navigation.json +1 -0
  124. package/docs/side-navigation.md +1 -1
  125. package/docs/skills/build-own-element/SKILL.md +90 -0
  126. package/docs/skills/compose-screen/SKILL.md +103 -0
  127. package/docs/skills/index.md +9 -0
  128. package/docs/skills/review-screen/SKILL.md +79 -0
  129. package/docs/skills/theme-app/SKILL.md +98 -0
  130. package/docs/skills/waiting-states/SKILL.md +143 -0
  131. package/docs/sparkline.json +5 -2
  132. package/docs/sparkline.md +4 -4
  133. package/docs/split-button.json +4 -1
  134. package/docs/split-button.md +3 -3
  135. package/docs/stat-card.json +5 -1
  136. package/docs/stat-card.md +3 -3
  137. package/docs/table.examples.md +3 -3
  138. package/docs/table.json +85 -3
  139. package/docs/table.md +12 -1
  140. package/docs/tabs.json +17 -7
  141. package/docs/tabs.md +3 -2
  142. package/docs/tag.json +14 -4
  143. package/docs/tag.md +6 -6
  144. package/docs/tags-input.json +29 -2
  145. package/docs/tags-input.md +4 -1
  146. package/docs/text-field.json +2 -1
  147. package/docs/text-field.md +2 -2
  148. package/docs/textarea.json +1 -0
  149. package/docs/textarea.md +1 -1
  150. package/docs/time-field.json +1 -0
  151. package/docs/time-field.md +1 -1
  152. package/docs/timeline.json +138 -132
  153. package/docs/timeline.md +125 -125
  154. package/docs/toast.json +8 -1
  155. package/docs/toast.md +3 -3
  156. package/docs/toggle-group.json +14 -3
  157. package/docs/toggle-group.md +3 -3
  158. package/docs/toggle.json +12 -3
  159. package/docs/toggle.md +3 -3
  160. package/docs/tokens.md +467 -0
  161. package/docs/toolbar.json +1 -1
  162. package/docs/toolbar.md +1 -1
  163. package/docs/tour.json +1 -1
  164. package/docs/typography.json +4 -2
  165. package/docs/typography.md +5 -5
  166. package/fesm2022/slotted-angular-accordion.mjs +4 -2
  167. package/fesm2022/slotted-angular-accordion.mjs.map +1 -1
  168. package/fesm2022/slotted-angular-action-bar.mjs +27 -12
  169. package/fesm2022/slotted-angular-action-bar.mjs.map +1 -1
  170. package/fesm2022/slotted-angular-action-sheet.mjs +48 -29
  171. package/fesm2022/slotted-angular-action-sheet.mjs.map +1 -1
  172. package/fesm2022/slotted-angular-alert.mjs +18 -11
  173. package/fesm2022/slotted-angular-alert.mjs.map +1 -1
  174. package/fesm2022/slotted-angular-app-shell.mjs +111 -61
  175. package/fesm2022/slotted-angular-app-shell.mjs.map +1 -1
  176. package/fesm2022/slotted-angular-aspect-ratio.mjs +4 -2
  177. package/fesm2022/slotted-angular-aspect-ratio.mjs.map +1 -1
  178. package/fesm2022/slotted-angular-attachment.mjs +31 -20
  179. package/fesm2022/slotted-angular-attachment.mjs.map +1 -1
  180. package/fesm2022/slotted-angular-avatar-group.mjs +9 -6
  181. package/fesm2022/slotted-angular-avatar-group.mjs.map +1 -1
  182. package/fesm2022/slotted-angular-avatar.mjs +14 -7
  183. package/fesm2022/slotted-angular-avatar.mjs.map +1 -1
  184. package/fesm2022/slotted-angular-badge.mjs +14 -10
  185. package/fesm2022/slotted-angular-badge.mjs.map +1 -1
  186. package/fesm2022/slotted-angular-breadcrumb.mjs +26 -18
  187. package/fesm2022/slotted-angular-breadcrumb.mjs.map +1 -1
  188. package/fesm2022/slotted-angular-button-group.mjs +7 -4
  189. package/fesm2022/slotted-angular-button-group.mjs.map +1 -1
  190. package/fesm2022/slotted-angular-button.mjs +120 -29
  191. package/fesm2022/slotted-angular-button.mjs.map +1 -1
  192. package/fesm2022/slotted-angular-calendar.mjs +235 -58
  193. package/fesm2022/slotted-angular-calendar.mjs.map +1 -1
  194. package/fesm2022/slotted-angular-card.mjs +18 -16
  195. package/fesm2022/slotted-angular-card.mjs.map +1 -1
  196. package/fesm2022/slotted-angular-carousel.mjs +22 -11
  197. package/fesm2022/slotted-angular-carousel.mjs.map +1 -1
  198. package/fesm2022/slotted-angular-cascader.mjs +180 -66
  199. package/fesm2022/slotted-angular-cascader.mjs.map +1 -1
  200. package/fesm2022/slotted-angular-chart.mjs +53 -20
  201. package/fesm2022/slotted-angular-chart.mjs.map +1 -1
  202. package/fesm2022/slotted-angular-checkbox-group.mjs +5 -3
  203. package/fesm2022/slotted-angular-checkbox-group.mjs.map +1 -1
  204. package/fesm2022/slotted-angular-checkbox.mjs +23 -9
  205. package/fesm2022/slotted-angular-checkbox.mjs.map +1 -1
  206. package/fesm2022/slotted-angular-code-block.mjs +29 -15
  207. package/fesm2022/slotted-angular-code-block.mjs.map +1 -1
  208. package/fesm2022/slotted-angular-collapsible.mjs +20 -15
  209. package/fesm2022/slotted-angular-collapsible.mjs.map +1 -1
  210. package/fesm2022/slotted-angular-color-picker.mjs +77 -22
  211. package/fesm2022/slotted-angular-color-picker.mjs.map +1 -1
  212. package/fesm2022/slotted-angular-column-manager.mjs +68 -31
  213. package/fesm2022/slotted-angular-column-manager.mjs.map +1 -1
  214. package/fesm2022/slotted-angular-combobox.mjs +118 -39
  215. package/fesm2022/slotted-angular-combobox.mjs.map +1 -1
  216. package/fesm2022/slotted-angular-command-palette.mjs +162 -54
  217. package/fesm2022/slotted-angular-command-palette.mjs.map +1 -1
  218. package/fesm2022/slotted-angular-container.mjs +6 -4
  219. package/fesm2022/slotted-angular-container.mjs.map +1 -1
  220. package/fesm2022/slotted-angular-context-menu.mjs +5 -4
  221. package/fesm2022/slotted-angular-context-menu.mjs.map +1 -1
  222. package/fesm2022/slotted-angular-currency-field.mjs +149 -32
  223. package/fesm2022/slotted-angular-currency-field.mjs.map +1 -1
  224. package/fesm2022/slotted-angular-dashboard-grid.mjs +142 -63
  225. package/fesm2022/slotted-angular-dashboard-grid.mjs.map +1 -1
  226. package/fesm2022/slotted-angular-data-grid.mjs +480 -129
  227. package/fesm2022/slotted-angular-data-grid.mjs.map +1 -1
  228. package/fesm2022/slotted-angular-data-list.mjs +83 -50
  229. package/fesm2022/slotted-angular-data-list.mjs.map +1 -1
  230. package/fesm2022/slotted-angular-date-field.mjs +74 -25
  231. package/fesm2022/slotted-angular-date-field.mjs.map +1 -1
  232. package/fesm2022/slotted-angular-date-picker.mjs +112 -40
  233. package/fesm2022/slotted-angular-date-picker.mjs.map +1 -1
  234. package/fesm2022/slotted-angular-date-range-picker.mjs +45 -22
  235. package/fesm2022/slotted-angular-date-range-picker.mjs.map +1 -1
  236. package/fesm2022/slotted-angular-datetime-field.mjs +48 -16
  237. package/fesm2022/slotted-angular-datetime-field.mjs.map +1 -1
  238. package/fesm2022/slotted-angular-datetime-picker.mjs +41 -29
  239. package/fesm2022/slotted-angular-datetime-picker.mjs.map +1 -1
  240. package/fesm2022/slotted-angular-datetime-range-picker.mjs +115 -48
  241. package/fesm2022/slotted-angular-datetime-range-picker.mjs.map +1 -1
  242. package/fesm2022/slotted-angular-description-list.mjs +33 -19
  243. package/fesm2022/slotted-angular-description-list.mjs.map +1 -1
  244. package/fesm2022/slotted-angular-detail-panel.mjs +48 -30
  245. package/fesm2022/slotted-angular-detail-panel.mjs.map +1 -1
  246. package/fesm2022/slotted-angular-dialog.mjs +72 -30
  247. package/fesm2022/slotted-angular-dialog.mjs.map +1 -1
  248. package/fesm2022/slotted-angular-divider.mjs +7 -5
  249. package/fesm2022/slotted-angular-divider.mjs.map +1 -1
  250. package/fesm2022/slotted-angular-drawer.mjs +91 -37
  251. package/fesm2022/slotted-angular-drawer.mjs.map +1 -1
  252. package/fesm2022/slotted-angular-entity-picker.mjs +474 -75
  253. package/fesm2022/slotted-angular-entity-picker.mjs.map +1 -1
  254. package/fesm2022/slotted-angular-event-calendar.mjs +275 -108
  255. package/fesm2022/slotted-angular-event-calendar.mjs.map +1 -1
  256. package/fesm2022/slotted-angular-field-group.mjs +14 -7
  257. package/fesm2022/slotted-angular-field-group.mjs.map +1 -1
  258. package/fesm2022/slotted-angular-field.mjs +35 -15
  259. package/fesm2022/slotted-angular-field.mjs.map +1 -1
  260. package/fesm2022/slotted-angular-filter-bar.mjs +118 -51
  261. package/fesm2022/slotted-angular-filter-bar.mjs.map +1 -1
  262. package/fesm2022/slotted-angular-form.mjs +18 -10
  263. package/fesm2022/slotted-angular-form.mjs.map +1 -1
  264. package/fesm2022/slotted-angular-fullscreen.mjs +14 -8
  265. package/fesm2022/slotted-angular-fullscreen.mjs.map +1 -1
  266. package/fesm2022/slotted-angular-grid.mjs +4 -2
  267. package/fesm2022/slotted-angular-grid.mjs.map +1 -1
  268. package/fesm2022/slotted-angular-highlight.mjs +5 -3
  269. package/fesm2022/slotted-angular-highlight.mjs.map +1 -1
  270. package/fesm2022/slotted-angular-hover-card.mjs +5 -4
  271. package/fesm2022/slotted-angular-hover-card.mjs.map +1 -1
  272. package/fesm2022/slotted-angular-icon.mjs +6 -3
  273. package/fesm2022/slotted-angular-icon.mjs.map +1 -1
  274. package/fesm2022/slotted-angular-image.mjs +13 -10
  275. package/fesm2022/slotted-angular-image.mjs.map +1 -1
  276. package/fesm2022/slotted-angular-import-export-center.mjs +175 -99
  277. package/fesm2022/slotted-angular-import-export-center.mjs.map +1 -1
  278. package/fesm2022/slotted-angular-inline-message.mjs +88 -13
  279. package/fesm2022/slotted-angular-inline-message.mjs.map +1 -1
  280. package/fesm2022/slotted-angular-inline.mjs +4 -2
  281. package/fesm2022/slotted-angular-inline.mjs.map +1 -1
  282. package/fesm2022/slotted-angular-kbd.mjs +11 -7
  283. package/fesm2022/slotted-angular-kbd.mjs.map +1 -1
  284. package/fesm2022/slotted-angular-link.mjs +5 -3
  285. package/fesm2022/slotted-angular-link.mjs.map +1 -1
  286. package/fesm2022/slotted-angular-list-item.mjs +21 -18
  287. package/fesm2022/slotted-angular-list-item.mjs.map +1 -1
  288. package/fesm2022/slotted-angular-list.mjs +37 -22
  289. package/fesm2022/slotted-angular-list.mjs.map +1 -1
  290. package/fesm2022/slotted-angular-listbox.mjs +39 -21
  291. package/fesm2022/slotted-angular-listbox.mjs.map +1 -1
  292. package/fesm2022/slotted-angular-loading-overlay.mjs +59 -22
  293. package/fesm2022/slotted-angular-loading-overlay.mjs.map +1 -1
  294. package/fesm2022/slotted-angular-markdown.mjs +31 -19
  295. package/fesm2022/slotted-angular-markdown.mjs.map +1 -1
  296. package/fesm2022/slotted-angular-menu.mjs +51 -29
  297. package/fesm2022/slotted-angular-menu.mjs.map +1 -1
  298. package/fesm2022/slotted-angular-menubar.mjs +4 -2
  299. package/fesm2022/slotted-angular-menubar.mjs.map +1 -1
  300. package/fesm2022/slotted-angular-message-scroller.mjs +34 -15
  301. package/fesm2022/slotted-angular-message-scroller.mjs.map +1 -1
  302. package/fesm2022/slotted-angular-message.mjs +119 -51
  303. package/fesm2022/slotted-angular-message.mjs.map +1 -1
  304. package/fesm2022/slotted-angular-multi-select.mjs +195 -87
  305. package/fesm2022/slotted-angular-multi-select.mjs.map +1 -1
  306. package/fesm2022/slotted-angular-navigation-menu.mjs +34 -26
  307. package/fesm2022/slotted-angular-navigation-menu.mjs.map +1 -1
  308. package/fesm2022/slotted-angular-notification-center.mjs +108 -65
  309. package/fesm2022/slotted-angular-notification-center.mjs.map +1 -1
  310. package/fesm2022/slotted-angular-number-field.mjs +23 -11
  311. package/fesm2022/slotted-angular-number-field.mjs.map +1 -1
  312. package/fesm2022/slotted-angular-otp-input.mjs +13 -8
  313. package/fesm2022/slotted-angular-otp-input.mjs.map +1 -1
  314. package/fesm2022/slotted-angular-page-header.mjs +90 -48
  315. package/fesm2022/slotted-angular-page-header.mjs.map +1 -1
  316. package/fesm2022/slotted-angular-page.mjs +38 -10
  317. package/fesm2022/slotted-angular-page.mjs.map +1 -1
  318. package/fesm2022/slotted-angular-pagination.mjs +35 -22
  319. package/fesm2022/slotted-angular-pagination.mjs.map +1 -1
  320. package/fesm2022/slotted-angular-popover.mjs +32 -19
  321. package/fesm2022/slotted-angular-popover.mjs.map +1 -1
  322. package/fesm2022/slotted-angular-progress-indicator.mjs +236 -52
  323. package/fesm2022/slotted-angular-progress-indicator.mjs.map +1 -1
  324. package/fesm2022/slotted-angular-prompt-composer.mjs +57 -20
  325. package/fesm2022/slotted-angular-prompt-composer.mjs.map +1 -1
  326. package/fesm2022/slotted-angular-prose.mjs +14 -11
  327. package/fesm2022/slotted-angular-prose.mjs.map +1 -1
  328. package/fesm2022/slotted-angular-radio-group.mjs +15 -9
  329. package/fesm2022/slotted-angular-radio-group.mjs.map +1 -1
  330. package/fesm2022/slotted-angular-rating.mjs +138 -82
  331. package/fesm2022/slotted-angular-rating.mjs.map +1 -1
  332. package/fesm2022/slotted-angular-result-state.mjs +16 -12
  333. package/fesm2022/slotted-angular-result-state.mjs.map +1 -1
  334. package/fesm2022/slotted-angular-saved-views.mjs +43 -16
  335. package/fesm2022/slotted-angular-saved-views.mjs.map +1 -1
  336. package/fesm2022/slotted-angular-scroll-area.mjs +13 -5
  337. package/fesm2022/slotted-angular-scroll-area.mjs.map +1 -1
  338. package/fesm2022/slotted-angular-section.mjs +53 -18
  339. package/fesm2022/slotted-angular-section.mjs.map +1 -1
  340. package/fesm2022/slotted-angular-segmented-control.mjs +37 -11
  341. package/fesm2022/slotted-angular-segmented-control.mjs.map +1 -1
  342. package/fesm2022/slotted-angular-select.mjs +190 -94
  343. package/fesm2022/slotted-angular-select.mjs.map +1 -1
  344. package/fesm2022/slotted-angular-side-navigation.mjs +46 -35
  345. package/fesm2022/slotted-angular-side-navigation.mjs.map +1 -1
  346. package/fesm2022/slotted-angular-skeleton.mjs +32 -16
  347. package/fesm2022/slotted-angular-skeleton.mjs.map +1 -1
  348. package/fesm2022/slotted-angular-slider.mjs +31 -11
  349. package/fesm2022/slotted-angular-slider.mjs.map +1 -1
  350. package/fesm2022/slotted-angular-sparkline.mjs +41 -14
  351. package/fesm2022/slotted-angular-sparkline.mjs.map +1 -1
  352. package/fesm2022/slotted-angular-split-button.mjs +37 -11
  353. package/fesm2022/slotted-angular-split-button.mjs.map +1 -1
  354. package/fesm2022/slotted-angular-splitter.mjs +11 -9
  355. package/fesm2022/slotted-angular-splitter.mjs.map +1 -1
  356. package/fesm2022/slotted-angular-stack.mjs +4 -2
  357. package/fesm2022/slotted-angular-stack.mjs.map +1 -1
  358. package/fesm2022/slotted-angular-stat-card.mjs +35 -28
  359. package/fesm2022/slotted-angular-stat-card.mjs.map +1 -1
  360. package/fesm2022/slotted-angular-status-indicator.mjs +22 -8
  361. package/fesm2022/slotted-angular-status-indicator.mjs.map +1 -1
  362. package/fesm2022/slotted-angular-stepper.mjs +40 -15
  363. package/fesm2022/slotted-angular-stepper.mjs.map +1 -1
  364. package/fesm2022/slotted-angular-switch.mjs +15 -10
  365. package/fesm2022/slotted-angular-switch.mjs.map +1 -1
  366. package/fesm2022/slotted-angular-table-of-contents.mjs +29 -21
  367. package/fesm2022/slotted-angular-table-of-contents.mjs.map +1 -1
  368. package/fesm2022/slotted-angular-table.mjs +243 -73
  369. package/fesm2022/slotted-angular-table.mjs.map +1 -1
  370. package/fesm2022/slotted-angular-tabs.mjs +42 -18
  371. package/fesm2022/slotted-angular-tabs.mjs.map +1 -1
  372. package/fesm2022/slotted-angular-tag.mjs +19 -12
  373. package/fesm2022/slotted-angular-tag.mjs.map +1 -1
  374. package/fesm2022/slotted-angular-tags-input.mjs +253 -28
  375. package/fesm2022/slotted-angular-tags-input.mjs.map +1 -1
  376. package/fesm2022/slotted-angular-text-field.mjs +55 -15
  377. package/fesm2022/slotted-angular-text-field.mjs.map +1 -1
  378. package/fesm2022/slotted-angular-textarea.mjs +5 -3
  379. package/fesm2022/slotted-angular-textarea.mjs.map +1 -1
  380. package/fesm2022/slotted-angular-time-field.mjs +48 -14
  381. package/fesm2022/slotted-angular-time-field.mjs.map +1 -1
  382. package/fesm2022/slotted-angular-time-picker.mjs +32 -20
  383. package/fesm2022/slotted-angular-time-picker.mjs.map +1 -1
  384. package/fesm2022/slotted-angular-time-range-picker.mjs +113 -46
  385. package/fesm2022/slotted-angular-time-range-picker.mjs.map +1 -1
  386. package/fesm2022/slotted-angular-timeline.mjs +147 -64
  387. package/fesm2022/slotted-angular-timeline.mjs.map +1 -1
  388. package/fesm2022/slotted-angular-toast.mjs +43 -31
  389. package/fesm2022/slotted-angular-toast.mjs.map +1 -1
  390. package/fesm2022/slotted-angular-toggle-group.mjs +25 -8
  391. package/fesm2022/slotted-angular-toggle-group.mjs.map +1 -1
  392. package/fesm2022/slotted-angular-toggle.mjs +9 -4
  393. package/fesm2022/slotted-angular-toggle.mjs.map +1 -1
  394. package/fesm2022/slotted-angular-toolbar.mjs +27 -12
  395. package/fesm2022/slotted-angular-toolbar.mjs.map +1 -1
  396. package/fesm2022/slotted-angular-tooltip.mjs +15 -6
  397. package/fesm2022/slotted-angular-tooltip.mjs.map +1 -1
  398. package/fesm2022/slotted-angular-top-navigation.mjs +64 -44
  399. package/fesm2022/slotted-angular-top-navigation.mjs.map +1 -1
  400. package/fesm2022/slotted-angular-tour.mjs +47 -22
  401. package/fesm2022/slotted-angular-tour.mjs.map +1 -1
  402. package/fesm2022/slotted-angular-transfer.mjs +69 -30
  403. package/fesm2022/slotted-angular-transfer.mjs.map +1 -1
  404. package/fesm2022/slotted-angular-tree.mjs +80 -26
  405. package/fesm2022/slotted-angular-tree.mjs.map +1 -1
  406. package/fesm2022/slotted-angular-typography.mjs +8 -4
  407. package/fesm2022/slotted-angular-typography.mjs.map +1 -1
  408. package/fesm2022/slotted-angular-upload.mjs +125 -57
  409. package/fesm2022/slotted-angular-upload.mjs.map +1 -1
  410. package/fesm2022/slotted-angular-visually-hidden.mjs +4 -2
  411. package/fesm2022/slotted-angular-visually-hidden.mjs.map +1 -1
  412. package/fesm2022/slotted-angular-wizard.mjs +163 -65
  413. package/fesm2022/slotted-angular-wizard.mjs.map +1 -1
  414. package/package.json +3 -3
  415. package/types/slotted-angular-accordion.d.ts.map +1 -1
  416. package/types/slotted-angular-action-bar.d.ts +2 -0
  417. package/types/slotted-angular-action-bar.d.ts.map +1 -1
  418. package/types/slotted-angular-action-sheet.d.ts.map +1 -1
  419. package/types/slotted-angular-alert.d.ts +2 -2
  420. package/types/slotted-angular-alert.d.ts.map +1 -1
  421. package/types/slotted-angular-app-shell.d.ts +11 -3
  422. package/types/slotted-angular-app-shell.d.ts.map +1 -1
  423. package/types/slotted-angular-aspect-ratio.d.ts.map +1 -1
  424. package/types/slotted-angular-attachment.d.ts +1 -1
  425. package/types/slotted-angular-attachment.d.ts.map +1 -1
  426. package/types/slotted-angular-avatar-group.d.ts.map +1 -1
  427. package/types/slotted-angular-avatar.d.ts +11 -3
  428. package/types/slotted-angular-avatar.d.ts.map +1 -1
  429. package/types/slotted-angular-badge.d.ts +1 -1
  430. package/types/slotted-angular-badge.d.ts.map +1 -1
  431. package/types/slotted-angular-breadcrumb.d.ts.map +1 -1
  432. package/types/slotted-angular-button-group.d.ts +1 -1
  433. package/types/slotted-angular-button-group.d.ts.map +1 -1
  434. package/types/slotted-angular-button.d.ts +33 -13
  435. package/types/slotted-angular-button.d.ts.map +1 -1
  436. package/types/slotted-angular-calendar.d.ts +30 -2
  437. package/types/slotted-angular-calendar.d.ts.map +1 -1
  438. package/types/slotted-angular-card.d.ts.map +1 -1
  439. package/types/slotted-angular-carousel.d.ts.map +1 -1
  440. package/types/slotted-angular-cascader.d.ts.map +1 -1
  441. package/types/slotted-angular-chart.d.ts +10 -0
  442. package/types/slotted-angular-chart.d.ts.map +1 -1
  443. package/types/slotted-angular-checkbox-group.d.ts.map +1 -1
  444. package/types/slotted-angular-checkbox.d.ts +7 -1
  445. package/types/slotted-angular-checkbox.d.ts.map +1 -1
  446. package/types/slotted-angular-code-block.d.ts +1 -1
  447. package/types/slotted-angular-code-block.d.ts.map +1 -1
  448. package/types/slotted-angular-collapsible.d.ts +1 -1
  449. package/types/slotted-angular-collapsible.d.ts.map +1 -1
  450. package/types/slotted-angular-color-picker.d.ts.map +1 -1
  451. package/types/slotted-angular-column-manager.d.ts.map +1 -1
  452. package/types/slotted-angular-combobox.d.ts +5 -1
  453. package/types/slotted-angular-combobox.d.ts.map +1 -1
  454. package/types/slotted-angular-command-palette.d.ts +10 -1
  455. package/types/slotted-angular-command-palette.d.ts.map +1 -1
  456. package/types/slotted-angular-container.d.ts.map +1 -1
  457. package/types/slotted-angular-context-menu.d.ts.map +1 -1
  458. package/types/slotted-angular-currency-field.d.ts +63 -15
  459. package/types/slotted-angular-currency-field.d.ts.map +1 -1
  460. package/types/slotted-angular-dashboard-grid.d.ts.map +1 -1
  461. package/types/slotted-angular-data-grid.d.ts +72 -4
  462. package/types/slotted-angular-data-grid.d.ts.map +1 -1
  463. package/types/slotted-angular-data-list.d.ts.map +1 -1
  464. package/types/slotted-angular-date-field.d.ts +11 -1
  465. package/types/slotted-angular-date-field.d.ts.map +1 -1
  466. package/types/slotted-angular-date-picker.d.ts +38 -12
  467. package/types/slotted-angular-date-picker.d.ts.map +1 -1
  468. package/types/slotted-angular-date-range-picker.d.ts +0 -1
  469. package/types/slotted-angular-date-range-picker.d.ts.map +1 -1
  470. package/types/slotted-angular-datetime-field.d.ts.map +1 -1
  471. package/types/slotted-angular-datetime-picker.d.ts +0 -1
  472. package/types/slotted-angular-datetime-picker.d.ts.map +1 -1
  473. package/types/slotted-angular-datetime-range-picker.d.ts +0 -1
  474. package/types/slotted-angular-datetime-range-picker.d.ts.map +1 -1
  475. package/types/slotted-angular-description-list.d.ts.map +1 -1
  476. package/types/slotted-angular-detail-panel.d.ts.map +1 -1
  477. package/types/slotted-angular-dialog.d.ts +10 -3
  478. package/types/slotted-angular-dialog.d.ts.map +1 -1
  479. package/types/slotted-angular-divider.d.ts.map +1 -1
  480. package/types/slotted-angular-drawer.d.ts +12 -1
  481. package/types/slotted-angular-drawer.d.ts.map +1 -1
  482. package/types/slotted-angular-entity-picker.d.ts +63 -15
  483. package/types/slotted-angular-entity-picker.d.ts.map +1 -1
  484. package/types/slotted-angular-event-calendar.d.ts +9 -2
  485. package/types/slotted-angular-event-calendar.d.ts.map +1 -1
  486. package/types/slotted-angular-field-group.d.ts.map +1 -1
  487. package/types/slotted-angular-field.d.ts.map +1 -1
  488. package/types/slotted-angular-filter-bar.d.ts.map +1 -1
  489. package/types/slotted-angular-form.d.ts.map +1 -1
  490. package/types/slotted-angular-fullscreen.d.ts.map +1 -1
  491. package/types/slotted-angular-grid.d.ts.map +1 -1
  492. package/types/slotted-angular-highlight.d.ts.map +1 -1
  493. package/types/slotted-angular-hover-card.d.ts.map +1 -1
  494. package/types/slotted-angular-icon.d.ts +2 -2
  495. package/types/slotted-angular-icon.d.ts.map +1 -1
  496. package/types/slotted-angular-image.d.ts.map +1 -1
  497. package/types/slotted-angular-import-export-center.d.ts.map +1 -1
  498. package/types/slotted-angular-inline-message.d.ts +25 -25
  499. package/types/slotted-angular-inline-message.d.ts.map +1 -1
  500. package/types/slotted-angular-inline.d.ts.map +1 -1
  501. package/types/slotted-angular-kbd.d.ts.map +1 -1
  502. package/types/slotted-angular-link.d.ts.map +1 -1
  503. package/types/slotted-angular-list-item.d.ts +1 -1
  504. package/types/slotted-angular-list-item.d.ts.map +1 -1
  505. package/types/slotted-angular-list.d.ts +42 -27
  506. package/types/slotted-angular-list.d.ts.map +1 -1
  507. package/types/slotted-angular-listbox.d.ts.map +1 -1
  508. package/types/slotted-angular-loading-overlay.d.ts.map +1 -1
  509. package/types/slotted-angular-markdown.d.ts.map +1 -1
  510. package/types/slotted-angular-menu.d.ts +11 -2
  511. package/types/slotted-angular-menu.d.ts.map +1 -1
  512. package/types/slotted-angular-menubar.d.ts.map +1 -1
  513. package/types/slotted-angular-message-scroller.d.ts.map +1 -1
  514. package/types/slotted-angular-message.d.ts +1 -1
  515. package/types/slotted-angular-message.d.ts.map +1 -1
  516. package/types/slotted-angular-multi-select.d.ts +15 -1
  517. package/types/slotted-angular-multi-select.d.ts.map +1 -1
  518. package/types/slotted-angular-navigation-menu.d.ts.map +1 -1
  519. package/types/slotted-angular-notification-center.d.ts +1 -1
  520. package/types/slotted-angular-notification-center.d.ts.map +1 -1
  521. package/types/slotted-angular-number-field.d.ts.map +1 -1
  522. package/types/slotted-angular-otp-input.d.ts.map +1 -1
  523. package/types/slotted-angular-page-header.d.ts +15 -6
  524. package/types/slotted-angular-page-header.d.ts.map +1 -1
  525. package/types/slotted-angular-page.d.ts.map +1 -1
  526. package/types/slotted-angular-pagination.d.ts.map +1 -1
  527. package/types/slotted-angular-popover.d.ts.map +1 -1
  528. package/types/slotted-angular-progress-indicator.d.ts +8 -1
  529. package/types/slotted-angular-progress-indicator.d.ts.map +1 -1
  530. package/types/slotted-angular-prompt-composer.d.ts +11 -2
  531. package/types/slotted-angular-prompt-composer.d.ts.map +1 -1
  532. package/types/slotted-angular-prose.d.ts.map +1 -1
  533. package/types/slotted-angular-radio-group.d.ts.map +1 -1
  534. package/types/slotted-angular-rating.d.ts +1 -1
  535. package/types/slotted-angular-rating.d.ts.map +1 -1
  536. package/types/slotted-angular-result-state.d.ts.map +1 -1
  537. package/types/slotted-angular-saved-views.d.ts.map +1 -1
  538. package/types/slotted-angular-scroll-area.d.ts.map +1 -1
  539. package/types/slotted-angular-section.d.ts +11 -3
  540. package/types/slotted-angular-section.d.ts.map +1 -1
  541. package/types/slotted-angular-segmented-control.d.ts +15 -2
  542. package/types/slotted-angular-segmented-control.d.ts.map +1 -1
  543. package/types/slotted-angular-select.d.ts +12 -2
  544. package/types/slotted-angular-select.d.ts.map +1 -1
  545. package/types/slotted-angular-side-navigation.d.ts.map +1 -1
  546. package/types/slotted-angular-skeleton.d.ts.map +1 -1
  547. package/types/slotted-angular-slider.d.ts.map +1 -1
  548. package/types/slotted-angular-sparkline.d.ts +7 -1
  549. package/types/slotted-angular-sparkline.d.ts.map +1 -1
  550. package/types/slotted-angular-split-button.d.ts +2 -2
  551. package/types/slotted-angular-split-button.d.ts.map +1 -1
  552. package/types/slotted-angular-splitter.d.ts.map +1 -1
  553. package/types/slotted-angular-stack.d.ts.map +1 -1
  554. package/types/slotted-angular-stat-card.d.ts +1 -1
  555. package/types/slotted-angular-stat-card.d.ts.map +1 -1
  556. package/types/slotted-angular-status-indicator.d.ts +1 -1
  557. package/types/slotted-angular-status-indicator.d.ts.map +1 -1
  558. package/types/slotted-angular-stepper.d.ts +1 -1
  559. package/types/slotted-angular-stepper.d.ts.map +1 -1
  560. package/types/slotted-angular-switch.d.ts.map +1 -1
  561. package/types/slotted-angular-table-of-contents.d.ts.map +1 -1
  562. package/types/slotted-angular-table.d.ts +63 -6
  563. package/types/slotted-angular-table.d.ts.map +1 -1
  564. package/types/slotted-angular-tabs.d.ts +3 -4
  565. package/types/slotted-angular-tabs.d.ts.map +1 -1
  566. package/types/slotted-angular-tag.d.ts +1 -1
  567. package/types/slotted-angular-tag.d.ts.map +1 -1
  568. package/types/slotted-angular-tags-input.d.ts +33 -1
  569. package/types/slotted-angular-tags-input.d.ts.map +1 -1
  570. package/types/slotted-angular-text-field.d.ts.map +1 -1
  571. package/types/slotted-angular-textarea.d.ts.map +1 -1
  572. package/types/slotted-angular-theme.d.ts +1 -1
  573. package/types/slotted-angular-time-field.d.ts.map +1 -1
  574. package/types/slotted-angular-time-picker.d.ts +0 -1
  575. package/types/slotted-angular-time-picker.d.ts.map +1 -1
  576. package/types/slotted-angular-time-range-picker.d.ts +0 -1
  577. package/types/slotted-angular-time-range-picker.d.ts.map +1 -1
  578. package/types/slotted-angular-timeline.d.ts +1 -1
  579. package/types/slotted-angular-timeline.d.ts.map +1 -1
  580. package/types/slotted-angular-toast.d.ts +3 -3
  581. package/types/slotted-angular-toast.d.ts.map +1 -1
  582. package/types/slotted-angular-toggle-group.d.ts +8 -2
  583. package/types/slotted-angular-toggle-group.d.ts.map +1 -1
  584. package/types/slotted-angular-toggle.d.ts +1 -1
  585. package/types/slotted-angular-toggle.d.ts.map +1 -1
  586. package/types/slotted-angular-toolbar.d.ts +2 -0
  587. package/types/slotted-angular-toolbar.d.ts.map +1 -1
  588. package/types/slotted-angular-tooltip.d.ts.map +1 -1
  589. package/types/slotted-angular-top-navigation.d.ts.map +1 -1
  590. package/types/slotted-angular-tour.d.ts.map +1 -1
  591. package/types/slotted-angular-transfer.d.ts.map +1 -1
  592. package/types/slotted-angular-tree.d.ts.map +1 -1
  593. package/types/slotted-angular-typography.d.ts +1 -1
  594. package/types/slotted-angular-typography.d.ts.map +1 -1
  595. package/types/slotted-angular-upload.d.ts +2 -2
  596. package/types/slotted-angular-upload.d.ts.map +1 -1
  597. package/types/slotted-angular-visually-hidden.d.ts.map +1 -1
  598. package/types/slotted-angular-wizard.d.ts.map +1 -1
@@ -155,19 +155,21 @@ class SlKbd {
155
155
  }, /* @ts-ignore */
156
156
  ...(ngDevMode ? [{ debugName: "key" }] : /* istanbul ignore next */ []));
157
157
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlKbd, deps: [], target: i0.ɵɵFactoryTarget.Component });
158
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlKbd, isStandalone: true, selector: "kbd[slKbd]", inputs: { keyName: { classPropertyName: "keyName", publicName: "keyName", isSignal: true, isRequired: false, transformFunction: null }, platform: { classPropertyName: "platform", publicName: "platform", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-ui": "kbd", "data-part": "root" }, properties: { "attr.data-size": "resolvedSize()", "attr.data-variant": "resolvedVariant()", "attr.data-key": "key()?.token ?? null", "attr.data-platform": "keyName() ? resolvedPlatform() : null", "attr.data-disabled": "resolvedDisabled() ? \"\" : null" } }, exportAs: ["slKbd"], ngImport: i0, template: `<span data-part="legend" [attr.aria-hidden]="key() ? true : null" [attr.data-legend]="key()?.symbolic ? 'symbol' : null">@if (key(); as resolved) {{{ resolved.legend }}} @else {<ng-content></ng-content>}</span>@if (key()?.name; as name) {<span data-part="name">{{ name }}</span>}`, isInline: true, styles: ["@layer slotted.components{[data-ui=kbd]{--_size: var(--slotted-space-8, 1.5rem);--_font-size: var(--slotted-control-font-size-md, 13px);--_inset-inline: var(--slotted-space-3, .375rem);--_radius: var(--slotted-kbd-radius, var(--slotted-radius-md, 6px));--_gap: var(--slotted-space-2, .25rem);--_edge-width: var(--slotted-kbd-border-width, var(--slotted-border-width-thin, 1px));--_base-width: var(--_edge-width);--_block-size: var(--slotted-control-inner-size, var(--_size));--_background: var(--slotted-surface-raised, Canvas);--_face: none;--_border: var(--slotted-control-border-color, ButtonBorder);--_base: var(--slotted-border-strong, ButtonBorder);--_color: var(--slotted-text, CanvasText)}[data-ui=kbd][data-part=root]{background-color:var(--_background);background-image:var(--_face);block-size:var(--_block-size);border:var(--_edge-width) solid var(--_border);border-block-end:var(--_base-width) solid var(--_base);border-radius:var(--_radius);box-sizing:border-box;color:var(--_color);display:inline-grid;font-family:var(--slotted-kbd-font-family, var(--slotted-control-font-family, sans-serif));font-size:var(--_font-size);font-variant-numeric:tabular-nums;font-weight:var(--slotted-kbd-font-weight, var(--slotted-font-weight-medium, 500));line-height:1;min-inline-size:var(--_block-size);place-items:center;padding-block:0;padding-inline:var(--_inset-inline);white-space:nowrap;vertical-align:middle;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing)}@supports (text-box: trim-both cap alphabetic){[data-ui=kbd] [data-part=legend]{text-box:trim-both cap alphabetic}[data-ui=kbd] [data-part=legend][data-legend=symbol]{text-box:normal}}[data-ui=kbd] [data-part=legend][data-legend=symbol]{font-family:var(--slotted-kbd-symbol-font-family, var(--slotted-font-family-sans, sans-serif));font-size:1.1em}[data-ui=kbd] [data-part=name]{block-size:1px;border:0;clip-path:inset(50%);inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap}[data-ui=kbd][data-part=shortcut]{align-items:center;direction:ltr;display:inline-flex;flex-wrap:wrap;gap:var(--_gap);max-inline-size:100%;vertical-align:middle}[data-ui=kbd][data-part=shortcut][data-platform=mac]{--_gap: var(--slotted-space-1, .125rem)}[data-ui=kbd][data-part=shortcut][data-platform=mac][data-size=inherit]{--_gap: .125em}[data-ui=kbd] [data-part=separator]{color:var(--slotted-text-muted, GrayText);flex:none;font-family:var(--slotted-kbd-font-family, var(--slotted-control-font-family, sans-serif));font-size:var(--_font-size);line-height:1}[data-ui=kbd] [data-part=separator][data-separator=then]{font-family:var(--slotted-control-font-family, sans-serif);padding-inline:var(--slotted-space-2, .25rem)}[data-ui=kbd][data-size=xs]{--_size: var(--slotted-space-6, 1rem);--_font-size: .6875rem;--_inset-inline: var(--slotted-space-2, .25rem);--_radius: var(--slotted-kbd-radius, var(--slotted-radius-sm, 4px));--_gap: var(--slotted-space-1, .125rem)}[data-ui=kbd][data-size=sm]{--_size: var(--slotted-space-7, 1.25rem);--_font-size: var(--slotted-control-font-size-sm, 12px);--_inset-inline: var(--slotted-space-2, .25rem)}[data-ui=kbd][data-size=lg]{--_size: calc(var(--slotted-space-8, 1.5rem) + var(--slotted-space-2, .25rem));--_font-size: var(--slotted-control-font-size-lg, 14px);--_inset-inline: var(--slotted-space-4, .5rem);--_radius: var(--slotted-kbd-radius, var(--slotted-radius-lg, 8px))}[data-ui=kbd][data-size=inherit]{--_size: 1.5em;--_font-size: .8em;--_inset-inline: .4em;--_radius: var(--slotted-kbd-radius, .375em);--_gap: .25em}@supports (inline-size: round(nearest,1.5em,1px)){[data-ui=kbd][data-size=inherit]{--_size: round(nearest, 1.5em, 1px)}}[data-ui=kbd][data-variant=raised]{--_base-width: var(--slotted-kbd-base-width, var(--slotted-border-width-thick, 2px));--_face: linear-gradient( to bottom, var(--_background) 40%, color-mix(in oklab, var(--_background), var(--_base) 10%) )}[data-ui=kbd][data-variant=outline]{--_background: transparent;--_border: var(--slotted-border-strong, ButtonBorder);--_color: inherit}[data-ui=kbd][data-variant=soft]{--_background: var(--slotted-tone-secondary-surface);--_border: var(--slotted-tone-secondary-border);--_base: var(--slotted-tone-secondary-border);--_color: var(--slotted-tone-secondary-text)}[data-ui=kbd][data-variant=plain]{--_background: transparent;--_border: transparent;--_base: transparent;--_color: inherit}[data-ui=kbd][data-part=root][data-variant=plain]{min-inline-size:0;padding-inline:0}[data-ui=kbd][data-disabled]{--_background: var(--slotted-disabled-background, Canvas);--_face: none;--_border: var(--slotted-disabled-border, GrayText);--_base: var(--slotted-disabled-border, GrayText);--_color: var(--slotted-disabled-foreground, GrayText)}[data-ui=kbd][data-disabled] [data-part=separator]{color:var(--slotted-disabled-foreground, GrayText)}[data-ui=kbd][data-variant=outline][data-disabled],[data-ui=kbd][data-variant=plain][data-disabled]{--_background: transparent}[data-ui=kbd][data-variant=plain][data-disabled]{--_border: transparent;--_base: transparent}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
158
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlKbd, isStandalone: true, selector: "kbd[slKbd]", inputs: { keyName: { classPropertyName: "keyName", publicName: "keyName", isSignal: true, isRequired: false, transformFunction: null }, platform: { classPropertyName: "platform", publicName: "platform", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-ui": "kbd", "data-ui-kbd": "", "data-part": "root", "data-part-root": "" }, properties: { "attr.data-size": "resolvedSize()", "attr.data-variant": "resolvedVariant()", "attr.data-key": "key()?.token ?? null", "attr.data-platform": "keyName() ? resolvedPlatform() : null", "attr.data-disabled": "resolvedDisabled() ? \"\" : null" } }, exportAs: ["slKbd"], ngImport: i0, template: `<span data-part="legend" data-part-legend="" [attr.aria-hidden]="key() ? true : null" [attr.data-legend]="key()?.symbolic ? 'symbol' : null">@if (key(); as resolved) {{{ resolved.legend }}} @else {<ng-content></ng-content>}</span>@if (key()?.name; as name) {<span data-part="name" data-part-name="">{{ name }}</span>}`, isInline: true, styles: ["@layer slotted.components{[data-ui-kbd]{--_size: var(--slotted-space-8, 1.5rem);--_font-size: var(--slotted-control-font-size-md, 13px);--_inset-inline: var(--slotted-space-3, .375rem);--_radius: var(--slotted-kbd-radius, var(--slotted-radius-md, 6px));--_gap: var(--slotted-space-2, .25rem);--_edge-width: var(--slotted-kbd-border-width, var(--slotted-border-width-thin, 1px));--_base-width: var(--_edge-width);--_block-size: var(--slotted-control-inner-size, var(--_size));--_background: var(--slotted-surface-raised, Canvas);--_face: none;--_border: var(--slotted-control-border-color, ButtonBorder);--_base: var(--slotted-border-strong, ButtonBorder);--_color: var(--slotted-text, CanvasText)}[data-ui-kbd][data-part-root]{background-color:var(--_background);background-image:var(--_face);block-size:var(--_block-size);border:var(--_edge-width) solid var(--_border);border-block-end:var(--_base-width) solid var(--_base);border-radius:var(--_radius);box-sizing:border-box;color:var(--_color);display:inline-grid;font-family:var(--slotted-kbd-font-family, var(--slotted-control-font-family, sans-serif));font-size:var(--_font-size);font-variant-numeric:tabular-nums;font-weight:var(--slotted-kbd-font-weight, var(--slotted-font-weight-medium, 500));line-height:1;min-inline-size:var(--_block-size);place-items:center;padding-block:0;padding-inline:var(--_inset-inline);white-space:nowrap;vertical-align:middle;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing)}@supports (text-box: trim-both cap alphabetic){[data-ui-kbd] [data-part-legend]{text-box:trim-both cap alphabetic}[data-ui-kbd] [data-part-legend][data-legend=symbol]{text-box:normal}}[data-ui-kbd] [data-part-legend][data-legend=symbol]{font-family:var(--slotted-kbd-symbol-font-family, var(--slotted-font-family-sans, sans-serif));font-size:1.1em}[data-ui-kbd] [data-part-name]{block-size:1px;border:0;clip-path:inset(50%);inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap}[data-ui-kbd][data-part-shortcut]{align-items:center;direction:ltr;display:inline-flex;font-family:var(--slotted-kbd-font-family, var(--slotted-control-font-family, sans-serif));line-height:1;flex-wrap:wrap;gap:var(--_gap);max-inline-size:100%;vertical-align:middle}[data-ui-kbd][data-part-shortcut][data-platform=mac]{--_gap: var(--slotted-space-1, .125rem)}[data-ui-kbd][data-part-shortcut][data-platform=mac][data-size=inherit]{--_gap: .125em}[data-ui-kbd] [data-part-separator]{color:var(--slotted-text-muted, GrayText);flex:none;font-family:var(--slotted-kbd-font-family, var(--slotted-control-font-family, sans-serif));font-size:var(--_font-size);line-height:1}[data-ui-kbd] [data-part-separator][data-separator=then]{font-family:var(--slotted-control-font-family, sans-serif);padding-inline:var(--slotted-space-2, .25rem)}[data-ui-kbd][data-size=xs]{--_size: var(--slotted-space-6, 1rem);--_font-size: .6875rem;--_inset-inline: var(--slotted-space-2, .25rem);--_radius: var(--slotted-kbd-radius, var(--slotted-radius-sm, 4px));--_gap: var(--slotted-space-1, .125rem)}[data-ui-kbd][data-size=sm]{--_size: var(--slotted-space-7, 1.25rem);--_font-size: var(--slotted-control-font-size-sm, 12px);--_inset-inline: var(--slotted-space-2, .25rem)}[data-ui-kbd][data-size=lg]{--_size: calc(var(--slotted-space-8, 1.5rem) + var(--slotted-space-2, .25rem));--_font-size: var(--slotted-control-font-size-lg, 14px);--_inset-inline: var(--slotted-space-4, .5rem);--_radius: var(--slotted-kbd-radius, var(--slotted-radius-lg, 8px))}[data-ui-kbd][data-size=inherit]{--_size: 1.5em;--_font-size: .8em;--_inset-inline: .4em;--_radius: var(--slotted-kbd-radius, .375em);--_gap: .25em}@supports (inline-size: round(nearest,1.5em,1px)){[data-ui-kbd][data-size=inherit]{--_size: round(nearest, 1.5em, 1px)}}[data-ui-kbd][data-variant=raised]{--_base-width: var(--slotted-kbd-base-width, var(--slotted-border-width-thick, 2px));--_face: linear-gradient( to bottom, var(--_background) 40%, color-mix(in oklab, var(--_background), var(--_base) 10%) )}[data-ui-kbd][data-variant=outline]{--_background: transparent;--_border: var(--slotted-border-strong, ButtonBorder);--_color: inherit}[data-ui-kbd][data-variant=soft]{--_background: var(--slotted-tone-secondary-surface);--_border: var(--slotted-tone-secondary-border);--_base: var(--slotted-tone-secondary-border);--_color: var(--slotted-tone-secondary-text)}[data-ui-kbd][data-variant=plain]{--_background: transparent;--_border: transparent;--_base: transparent;--_color: inherit}[data-ui-kbd][data-part-root][data-variant=plain]{min-inline-size:0;padding-inline:0}[data-ui-kbd][data-disabled]{--_background: var(--slotted-disabled-background, Canvas);--_face: none;--_border: var(--slotted-disabled-border, GrayText);--_base: var(--slotted-disabled-border, GrayText);--_color: var(--slotted-disabled-foreground, GrayText)}[data-ui-kbd][data-disabled] [data-part-separator]{color:var(--slotted-disabled-foreground, GrayText)}[data-ui-kbd][data-variant=outline][data-disabled],[data-ui-kbd][data-variant=plain][data-disabled]{--_background: transparent}[data-ui-kbd][data-variant=plain][data-disabled]{--_border: transparent;--_base: transparent}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
159
159
  }
160
160
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlKbd, decorators: [{
161
161
  type: Component,
162
- args: [{ selector: 'kbd[slKbd]', standalone: true, exportAs: 'slKbd', template: `<span data-part="legend" [attr.aria-hidden]="key() ? true : null" [attr.data-legend]="key()?.symbolic ? 'symbol' : null">@if (key(); as resolved) {{{ resolved.legend }}} @else {<ng-content></ng-content>}</span>@if (key()?.name; as name) {<span data-part="name">{{ name }}</span>}`, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
162
+ args: [{ selector: 'kbd[slKbd]', standalone: true, exportAs: 'slKbd', template: `<span data-part="legend" data-part-legend="" [attr.aria-hidden]="key() ? true : null" [attr.data-legend]="key()?.symbolic ? 'symbol' : null">@if (key(); as resolved) {{{ resolved.legend }}} @else {<ng-content></ng-content>}</span>@if (key()?.name; as name) {<span data-part="name" data-part-name="">{{ name }}</span>}`, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
163
163
  'data-ui': 'kbd',
164
+ 'data-ui-kbd': '',
164
165
  'data-part': 'root',
166
+ 'data-part-root': '',
165
167
  '[attr.data-size]': 'resolvedSize()',
166
168
  '[attr.data-variant]': 'resolvedVariant()',
167
169
  '[attr.data-key]': 'key()?.token ?? null',
168
170
  '[attr.data-platform]': 'keyName() ? resolvedPlatform() : null',
169
171
  '[attr.data-disabled]': 'resolvedDisabled() ? "" : null',
170
- }, styles: ["@layer slotted.components{[data-ui=kbd]{--_size: var(--slotted-space-8, 1.5rem);--_font-size: var(--slotted-control-font-size-md, 13px);--_inset-inline: var(--slotted-space-3, .375rem);--_radius: var(--slotted-kbd-radius, var(--slotted-radius-md, 6px));--_gap: var(--slotted-space-2, .25rem);--_edge-width: var(--slotted-kbd-border-width, var(--slotted-border-width-thin, 1px));--_base-width: var(--_edge-width);--_block-size: var(--slotted-control-inner-size, var(--_size));--_background: var(--slotted-surface-raised, Canvas);--_face: none;--_border: var(--slotted-control-border-color, ButtonBorder);--_base: var(--slotted-border-strong, ButtonBorder);--_color: var(--slotted-text, CanvasText)}[data-ui=kbd][data-part=root]{background-color:var(--_background);background-image:var(--_face);block-size:var(--_block-size);border:var(--_edge-width) solid var(--_border);border-block-end:var(--_base-width) solid var(--_base);border-radius:var(--_radius);box-sizing:border-box;color:var(--_color);display:inline-grid;font-family:var(--slotted-kbd-font-family, var(--slotted-control-font-family, sans-serif));font-size:var(--_font-size);font-variant-numeric:tabular-nums;font-weight:var(--slotted-kbd-font-weight, var(--slotted-font-weight-medium, 500));line-height:1;min-inline-size:var(--_block-size);place-items:center;padding-block:0;padding-inline:var(--_inset-inline);white-space:nowrap;vertical-align:middle;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing)}@supports (text-box: trim-both cap alphabetic){[data-ui=kbd] [data-part=legend]{text-box:trim-both cap alphabetic}[data-ui=kbd] [data-part=legend][data-legend=symbol]{text-box:normal}}[data-ui=kbd] [data-part=legend][data-legend=symbol]{font-family:var(--slotted-kbd-symbol-font-family, var(--slotted-font-family-sans, sans-serif));font-size:1.1em}[data-ui=kbd] [data-part=name]{block-size:1px;border:0;clip-path:inset(50%);inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap}[data-ui=kbd][data-part=shortcut]{align-items:center;direction:ltr;display:inline-flex;flex-wrap:wrap;gap:var(--_gap);max-inline-size:100%;vertical-align:middle}[data-ui=kbd][data-part=shortcut][data-platform=mac]{--_gap: var(--slotted-space-1, .125rem)}[data-ui=kbd][data-part=shortcut][data-platform=mac][data-size=inherit]{--_gap: .125em}[data-ui=kbd] [data-part=separator]{color:var(--slotted-text-muted, GrayText);flex:none;font-family:var(--slotted-kbd-font-family, var(--slotted-control-font-family, sans-serif));font-size:var(--_font-size);line-height:1}[data-ui=kbd] [data-part=separator][data-separator=then]{font-family:var(--slotted-control-font-family, sans-serif);padding-inline:var(--slotted-space-2, .25rem)}[data-ui=kbd][data-size=xs]{--_size: var(--slotted-space-6, 1rem);--_font-size: .6875rem;--_inset-inline: var(--slotted-space-2, .25rem);--_radius: var(--slotted-kbd-radius, var(--slotted-radius-sm, 4px));--_gap: var(--slotted-space-1, .125rem)}[data-ui=kbd][data-size=sm]{--_size: var(--slotted-space-7, 1.25rem);--_font-size: var(--slotted-control-font-size-sm, 12px);--_inset-inline: var(--slotted-space-2, .25rem)}[data-ui=kbd][data-size=lg]{--_size: calc(var(--slotted-space-8, 1.5rem) + var(--slotted-space-2, .25rem));--_font-size: var(--slotted-control-font-size-lg, 14px);--_inset-inline: var(--slotted-space-4, .5rem);--_radius: var(--slotted-kbd-radius, var(--slotted-radius-lg, 8px))}[data-ui=kbd][data-size=inherit]{--_size: 1.5em;--_font-size: .8em;--_inset-inline: .4em;--_radius: var(--slotted-kbd-radius, .375em);--_gap: .25em}@supports (inline-size: round(nearest,1.5em,1px)){[data-ui=kbd][data-size=inherit]{--_size: round(nearest, 1.5em, 1px)}}[data-ui=kbd][data-variant=raised]{--_base-width: var(--slotted-kbd-base-width, var(--slotted-border-width-thick, 2px));--_face: linear-gradient( to bottom, var(--_background) 40%, color-mix(in oklab, var(--_background), var(--_base) 10%) )}[data-ui=kbd][data-variant=outline]{--_background: transparent;--_border: var(--slotted-border-strong, ButtonBorder);--_color: inherit}[data-ui=kbd][data-variant=soft]{--_background: var(--slotted-tone-secondary-surface);--_border: var(--slotted-tone-secondary-border);--_base: var(--slotted-tone-secondary-border);--_color: var(--slotted-tone-secondary-text)}[data-ui=kbd][data-variant=plain]{--_background: transparent;--_border: transparent;--_base: transparent;--_color: inherit}[data-ui=kbd][data-part=root][data-variant=plain]{min-inline-size:0;padding-inline:0}[data-ui=kbd][data-disabled]{--_background: var(--slotted-disabled-background, Canvas);--_face: none;--_border: var(--slotted-disabled-border, GrayText);--_base: var(--slotted-disabled-border, GrayText);--_color: var(--slotted-disabled-foreground, GrayText)}[data-ui=kbd][data-disabled] [data-part=separator]{color:var(--slotted-disabled-foreground, GrayText)}[data-ui=kbd][data-variant=outline][data-disabled],[data-ui=kbd][data-variant=plain][data-disabled]{--_background: transparent}[data-ui=kbd][data-variant=plain][data-disabled]{--_border: transparent;--_base: transparent}}\n"] }]
172
+ }, styles: ["@layer slotted.components{[data-ui-kbd]{--_size: var(--slotted-space-8, 1.5rem);--_font-size: var(--slotted-control-font-size-md, 13px);--_inset-inline: var(--slotted-space-3, .375rem);--_radius: var(--slotted-kbd-radius, var(--slotted-radius-md, 6px));--_gap: var(--slotted-space-2, .25rem);--_edge-width: var(--slotted-kbd-border-width, var(--slotted-border-width-thin, 1px));--_base-width: var(--_edge-width);--_block-size: var(--slotted-control-inner-size, var(--_size));--_background: var(--slotted-surface-raised, Canvas);--_face: none;--_border: var(--slotted-control-border-color, ButtonBorder);--_base: var(--slotted-border-strong, ButtonBorder);--_color: var(--slotted-text, CanvasText)}[data-ui-kbd][data-part-root]{background-color:var(--_background);background-image:var(--_face);block-size:var(--_block-size);border:var(--_edge-width) solid var(--_border);border-block-end:var(--_base-width) solid var(--_base);border-radius:var(--_radius);box-sizing:border-box;color:var(--_color);display:inline-grid;font-family:var(--slotted-kbd-font-family, var(--slotted-control-font-family, sans-serif));font-size:var(--_font-size);font-variant-numeric:tabular-nums;font-weight:var(--slotted-kbd-font-weight, var(--slotted-font-weight-medium, 500));line-height:1;min-inline-size:var(--_block-size);place-items:center;padding-block:0;padding-inline:var(--_inset-inline);white-space:nowrap;vertical-align:middle;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing)}@supports (text-box: trim-both cap alphabetic){[data-ui-kbd] [data-part-legend]{text-box:trim-both cap alphabetic}[data-ui-kbd] [data-part-legend][data-legend=symbol]{text-box:normal}}[data-ui-kbd] [data-part-legend][data-legend=symbol]{font-family:var(--slotted-kbd-symbol-font-family, var(--slotted-font-family-sans, sans-serif));font-size:1.1em}[data-ui-kbd] [data-part-name]{block-size:1px;border:0;clip-path:inset(50%);inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap}[data-ui-kbd][data-part-shortcut]{align-items:center;direction:ltr;display:inline-flex;font-family:var(--slotted-kbd-font-family, var(--slotted-control-font-family, sans-serif));line-height:1;flex-wrap:wrap;gap:var(--_gap);max-inline-size:100%;vertical-align:middle}[data-ui-kbd][data-part-shortcut][data-platform=mac]{--_gap: var(--slotted-space-1, .125rem)}[data-ui-kbd][data-part-shortcut][data-platform=mac][data-size=inherit]{--_gap: .125em}[data-ui-kbd] [data-part-separator]{color:var(--slotted-text-muted, GrayText);flex:none;font-family:var(--slotted-kbd-font-family, var(--slotted-control-font-family, sans-serif));font-size:var(--_font-size);line-height:1}[data-ui-kbd] [data-part-separator][data-separator=then]{font-family:var(--slotted-control-font-family, sans-serif);padding-inline:var(--slotted-space-2, .25rem)}[data-ui-kbd][data-size=xs]{--_size: var(--slotted-space-6, 1rem);--_font-size: .6875rem;--_inset-inline: var(--slotted-space-2, .25rem);--_radius: var(--slotted-kbd-radius, var(--slotted-radius-sm, 4px));--_gap: var(--slotted-space-1, .125rem)}[data-ui-kbd][data-size=sm]{--_size: var(--slotted-space-7, 1.25rem);--_font-size: var(--slotted-control-font-size-sm, 12px);--_inset-inline: var(--slotted-space-2, .25rem)}[data-ui-kbd][data-size=lg]{--_size: calc(var(--slotted-space-8, 1.5rem) + var(--slotted-space-2, .25rem));--_font-size: var(--slotted-control-font-size-lg, 14px);--_inset-inline: var(--slotted-space-4, .5rem);--_radius: var(--slotted-kbd-radius, var(--slotted-radius-lg, 8px))}[data-ui-kbd][data-size=inherit]{--_size: 1.5em;--_font-size: .8em;--_inset-inline: .4em;--_radius: var(--slotted-kbd-radius, .375em);--_gap: .25em}@supports (inline-size: round(nearest,1.5em,1px)){[data-ui-kbd][data-size=inherit]{--_size: round(nearest, 1.5em, 1px)}}[data-ui-kbd][data-variant=raised]{--_base-width: var(--slotted-kbd-base-width, var(--slotted-border-width-thick, 2px));--_face: linear-gradient( to bottom, var(--_background) 40%, color-mix(in oklab, var(--_background), var(--_base) 10%) )}[data-ui-kbd][data-variant=outline]{--_background: transparent;--_border: var(--slotted-border-strong, ButtonBorder);--_color: inherit}[data-ui-kbd][data-variant=soft]{--_background: var(--slotted-tone-secondary-surface);--_border: var(--slotted-tone-secondary-border);--_base: var(--slotted-tone-secondary-border);--_color: var(--slotted-tone-secondary-text)}[data-ui-kbd][data-variant=plain]{--_background: transparent;--_border: transparent;--_base: transparent;--_color: inherit}[data-ui-kbd][data-part-root][data-variant=plain]{min-inline-size:0;padding-inline:0}[data-ui-kbd][data-disabled]{--_background: var(--slotted-disabled-background, Canvas);--_face: none;--_border: var(--slotted-disabled-border, GrayText);--_base: var(--slotted-disabled-border, GrayText);--_color: var(--slotted-disabled-foreground, GrayText)}[data-ui-kbd][data-disabled] [data-part-separator]{color:var(--slotted-disabled-foreground, GrayText)}[data-ui-kbd][data-variant=outline][data-disabled],[data-ui-kbd][data-variant=plain][data-disabled]{--_background: transparent}[data-ui-kbd][data-variant=plain][data-disabled]{--_border: transparent;--_base: transparent}}\n"] }]
171
173
  }], propDecorators: { keyName: [{ type: i0.Input, args: [{ isSignal: true, alias: "keyName", required: false }] }], platform: [{ type: i0.Input, args: [{ isSignal: true, alias: "platform", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], messages: [{ type: i0.Input, args: [{ isSignal: true, alias: "messages", required: false }] }] } });
172
174
 
173
175
  /**
@@ -241,17 +243,17 @@ class SlShortcut {
241
243
  empty = computed(() => this.resolved()?.steps.length === 0, /* @ts-ignore */
242
244
  ...(ngDevMode ? [{ debugName: "empty" }] : /* istanbul ignore next */ []));
243
245
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlShortcut, deps: [], target: i0.ɵɵFactoryTarget.Component });
244
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlShortcut, isStandalone: true, selector: "kbd[slShortcut]", inputs: { keys: { classPropertyName: "keys", publicName: "keys", isSignal: true, isRequired: false, transformFunction: null }, platform: { classPropertyName: "platform", publicName: "platform", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, separator: { classPropertyName: "separator", publicName: "separator", isSignal: true, isRequired: false, transformFunction: null }, messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null }, legends: { classPropertyName: "legends", publicName: "legends", isSignal: true, isRequired: false, transformFunction: null }, names: { classPropertyName: "names", publicName: "names", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-ui": "kbd", "data-part": "shortcut" }, properties: { "attr.data-platform": "resolvedPlatform()", "attr.data-size": "resolvedSize()", "attr.data-variant": "resolvedVariant()", "attr.data-disabled": "disabled() ? \"\" : null", "style.display": "empty() ? \"none\" : null" } }, providers: [
246
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlShortcut, isStandalone: true, selector: "kbd[slShortcut]", inputs: { keys: { classPropertyName: "keys", publicName: "keys", isSignal: true, isRequired: false, transformFunction: null }, platform: { classPropertyName: "platform", publicName: "platform", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, separator: { classPropertyName: "separator", publicName: "separator", isSignal: true, isRequired: false, transformFunction: null }, messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null }, legends: { classPropertyName: "legends", publicName: "legends", isSignal: true, isRequired: false, transformFunction: null }, names: { classPropertyName: "names", publicName: "names", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-ui": "kbd", "data-ui-kbd": "", "data-part": "shortcut", "data-part-shortcut": "" }, properties: { "attr.data-platform": "resolvedPlatform()", "attr.data-size": "resolvedSize()", "attr.data-variant": "resolvedVariant()", "attr.data-disabled": "disabled() ? \"\" : null", "style.display": "empty() ? \"none\" : null" } }, providers: [
245
247
  {
246
248
  provide: SlShortcutAxes.token,
247
249
  /* The decorator runs before the class binding exists. */
248
250
  useExisting: forwardRef(() => SlShortcut),
249
251
  },
250
- ], exportAs: ["slShortcut"], ngImport: i0, template: `@if (resolved(); as shortcut) {@for (step of shortcut.steps; track $index) {@if (!$first) {<span data-part="separator" data-separator="then">{{ shortcut.thenLabel }}</span>}@for (key of step; track $index) {@if (!$first && shortcut.separator) {<span aria-hidden="true" data-part="separator" data-separator="plus">{{ shortcut.separator }}</span>}<kbd data-ui="kbd" data-part="root" [attr.data-key]="key.token" [attr.data-platform]="shortcut.platform" [attr.data-size]="resolvedSize()" [attr.data-variant]="resolvedVariant()" [attr.data-disabled]="disabled() ? '' : null"><span data-part="legend" aria-hidden="true" [attr.data-legend]="key.symbolic ? 'symbol' : null">{{ key.legend }}</span>@if (key.name; as name) {<span data-part="name">{{ name }}</span>}</kbd>}}} @else {<ng-content></ng-content>}`, isInline: true, styles: ["@layer slotted.components{[data-ui=kbd]{--_size: var(--slotted-space-8, 1.5rem);--_font-size: var(--slotted-control-font-size-md, 13px);--_inset-inline: var(--slotted-space-3, .375rem);--_radius: var(--slotted-kbd-radius, var(--slotted-radius-md, 6px));--_gap: var(--slotted-space-2, .25rem);--_edge-width: var(--slotted-kbd-border-width, var(--slotted-border-width-thin, 1px));--_base-width: var(--_edge-width);--_block-size: var(--slotted-control-inner-size, var(--_size));--_background: var(--slotted-surface-raised, Canvas);--_face: none;--_border: var(--slotted-control-border-color, ButtonBorder);--_base: var(--slotted-border-strong, ButtonBorder);--_color: var(--slotted-text, CanvasText)}[data-ui=kbd][data-part=root]{background-color:var(--_background);background-image:var(--_face);block-size:var(--_block-size);border:var(--_edge-width) solid var(--_border);border-block-end:var(--_base-width) solid var(--_base);border-radius:var(--_radius);box-sizing:border-box;color:var(--_color);display:inline-grid;font-family:var(--slotted-kbd-font-family, var(--slotted-control-font-family, sans-serif));font-size:var(--_font-size);font-variant-numeric:tabular-nums;font-weight:var(--slotted-kbd-font-weight, var(--slotted-font-weight-medium, 500));line-height:1;min-inline-size:var(--_block-size);place-items:center;padding-block:0;padding-inline:var(--_inset-inline);white-space:nowrap;vertical-align:middle;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing)}@supports (text-box: trim-both cap alphabetic){[data-ui=kbd] [data-part=legend]{text-box:trim-both cap alphabetic}[data-ui=kbd] [data-part=legend][data-legend=symbol]{text-box:normal}}[data-ui=kbd] [data-part=legend][data-legend=symbol]{font-family:var(--slotted-kbd-symbol-font-family, var(--slotted-font-family-sans, sans-serif));font-size:1.1em}[data-ui=kbd] [data-part=name]{block-size:1px;border:0;clip-path:inset(50%);inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap}[data-ui=kbd][data-part=shortcut]{align-items:center;direction:ltr;display:inline-flex;flex-wrap:wrap;gap:var(--_gap);max-inline-size:100%;vertical-align:middle}[data-ui=kbd][data-part=shortcut][data-platform=mac]{--_gap: var(--slotted-space-1, .125rem)}[data-ui=kbd][data-part=shortcut][data-platform=mac][data-size=inherit]{--_gap: .125em}[data-ui=kbd] [data-part=separator]{color:var(--slotted-text-muted, GrayText);flex:none;font-family:var(--slotted-kbd-font-family, var(--slotted-control-font-family, sans-serif));font-size:var(--_font-size);line-height:1}[data-ui=kbd] [data-part=separator][data-separator=then]{font-family:var(--slotted-control-font-family, sans-serif);padding-inline:var(--slotted-space-2, .25rem)}[data-ui=kbd][data-size=xs]{--_size: var(--slotted-space-6, 1rem);--_font-size: .6875rem;--_inset-inline: var(--slotted-space-2, .25rem);--_radius: var(--slotted-kbd-radius, var(--slotted-radius-sm, 4px));--_gap: var(--slotted-space-1, .125rem)}[data-ui=kbd][data-size=sm]{--_size: var(--slotted-space-7, 1.25rem);--_font-size: var(--slotted-control-font-size-sm, 12px);--_inset-inline: var(--slotted-space-2, .25rem)}[data-ui=kbd][data-size=lg]{--_size: calc(var(--slotted-space-8, 1.5rem) + var(--slotted-space-2, .25rem));--_font-size: var(--slotted-control-font-size-lg, 14px);--_inset-inline: var(--slotted-space-4, .5rem);--_radius: var(--slotted-kbd-radius, var(--slotted-radius-lg, 8px))}[data-ui=kbd][data-size=inherit]{--_size: 1.5em;--_font-size: .8em;--_inset-inline: .4em;--_radius: var(--slotted-kbd-radius, .375em);--_gap: .25em}@supports (inline-size: round(nearest,1.5em,1px)){[data-ui=kbd][data-size=inherit]{--_size: round(nearest, 1.5em, 1px)}}[data-ui=kbd][data-variant=raised]{--_base-width: var(--slotted-kbd-base-width, var(--slotted-border-width-thick, 2px));--_face: linear-gradient( to bottom, var(--_background) 40%, color-mix(in oklab, var(--_background), var(--_base) 10%) )}[data-ui=kbd][data-variant=outline]{--_background: transparent;--_border: var(--slotted-border-strong, ButtonBorder);--_color: inherit}[data-ui=kbd][data-variant=soft]{--_background: var(--slotted-tone-secondary-surface);--_border: var(--slotted-tone-secondary-border);--_base: var(--slotted-tone-secondary-border);--_color: var(--slotted-tone-secondary-text)}[data-ui=kbd][data-variant=plain]{--_background: transparent;--_border: transparent;--_base: transparent;--_color: inherit}[data-ui=kbd][data-part=root][data-variant=plain]{min-inline-size:0;padding-inline:0}[data-ui=kbd][data-disabled]{--_background: var(--slotted-disabled-background, Canvas);--_face: none;--_border: var(--slotted-disabled-border, GrayText);--_base: var(--slotted-disabled-border, GrayText);--_color: var(--slotted-disabled-foreground, GrayText)}[data-ui=kbd][data-disabled] [data-part=separator]{color:var(--slotted-disabled-foreground, GrayText)}[data-ui=kbd][data-variant=outline][data-disabled],[data-ui=kbd][data-variant=plain][data-disabled]{--_background: transparent}[data-ui=kbd][data-variant=plain][data-disabled]{--_border: transparent;--_base: transparent}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
252
+ ], exportAs: ["slShortcut"], ngImport: i0, template: `@if (resolved(); as shortcut) {@for (step of shortcut.steps; track $index) {@if (!$first) {<span data-part="separator" data-part-separator="" data-separator="then">{{ shortcut.thenLabel }}</span>}@for (key of step; track $index) {@if (!$first && shortcut.separator) {<span aria-hidden="true" data-part="separator" data-part-separator="" data-separator="plus">{{ shortcut.separator }}</span>}<kbd data-ui="kbd" data-ui-kbd="" data-part="root" data-part-root="" [attr.data-key]="key.token" [attr.data-platform]="shortcut.platform" [attr.data-size]="resolvedSize()" [attr.data-variant]="resolvedVariant()" [attr.data-disabled]="disabled() ? '' : null"><span data-part="legend" data-part-legend="" aria-hidden="true" [attr.data-legend]="key.symbolic ? 'symbol' : null">{{ key.legend }}</span>@if (key.name; as name) {<span data-part="name" data-part-name="">{{ name }}</span>}</kbd>}}} @else {<ng-content></ng-content>}`, isInline: true, styles: ["@layer slotted.components{[data-ui-kbd]{--_size: var(--slotted-space-8, 1.5rem);--_font-size: var(--slotted-control-font-size-md, 13px);--_inset-inline: var(--slotted-space-3, .375rem);--_radius: var(--slotted-kbd-radius, var(--slotted-radius-md, 6px));--_gap: var(--slotted-space-2, .25rem);--_edge-width: var(--slotted-kbd-border-width, var(--slotted-border-width-thin, 1px));--_base-width: var(--_edge-width);--_block-size: var(--slotted-control-inner-size, var(--_size));--_background: var(--slotted-surface-raised, Canvas);--_face: none;--_border: var(--slotted-control-border-color, ButtonBorder);--_base: var(--slotted-border-strong, ButtonBorder);--_color: var(--slotted-text, CanvasText)}[data-ui-kbd][data-part-root]{background-color:var(--_background);background-image:var(--_face);block-size:var(--_block-size);border:var(--_edge-width) solid var(--_border);border-block-end:var(--_base-width) solid var(--_base);border-radius:var(--_radius);box-sizing:border-box;color:var(--_color);display:inline-grid;font-family:var(--slotted-kbd-font-family, var(--slotted-control-font-family, sans-serif));font-size:var(--_font-size);font-variant-numeric:tabular-nums;font-weight:var(--slotted-kbd-font-weight, var(--slotted-font-weight-medium, 500));line-height:1;min-inline-size:var(--_block-size);place-items:center;padding-block:0;padding-inline:var(--_inset-inline);white-space:nowrap;vertical-align:middle;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing)}@supports (text-box: trim-both cap alphabetic){[data-ui-kbd] [data-part-legend]{text-box:trim-both cap alphabetic}[data-ui-kbd] [data-part-legend][data-legend=symbol]{text-box:normal}}[data-ui-kbd] [data-part-legend][data-legend=symbol]{font-family:var(--slotted-kbd-symbol-font-family, var(--slotted-font-family-sans, sans-serif));font-size:1.1em}[data-ui-kbd] [data-part-name]{block-size:1px;border:0;clip-path:inset(50%);inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap}[data-ui-kbd][data-part-shortcut]{align-items:center;direction:ltr;display:inline-flex;font-family:var(--slotted-kbd-font-family, var(--slotted-control-font-family, sans-serif));line-height:1;flex-wrap:wrap;gap:var(--_gap);max-inline-size:100%;vertical-align:middle}[data-ui-kbd][data-part-shortcut][data-platform=mac]{--_gap: var(--slotted-space-1, .125rem)}[data-ui-kbd][data-part-shortcut][data-platform=mac][data-size=inherit]{--_gap: .125em}[data-ui-kbd] [data-part-separator]{color:var(--slotted-text-muted, GrayText);flex:none;font-family:var(--slotted-kbd-font-family, var(--slotted-control-font-family, sans-serif));font-size:var(--_font-size);line-height:1}[data-ui-kbd] [data-part-separator][data-separator=then]{font-family:var(--slotted-control-font-family, sans-serif);padding-inline:var(--slotted-space-2, .25rem)}[data-ui-kbd][data-size=xs]{--_size: var(--slotted-space-6, 1rem);--_font-size: .6875rem;--_inset-inline: var(--slotted-space-2, .25rem);--_radius: var(--slotted-kbd-radius, var(--slotted-radius-sm, 4px));--_gap: var(--slotted-space-1, .125rem)}[data-ui-kbd][data-size=sm]{--_size: var(--slotted-space-7, 1.25rem);--_font-size: var(--slotted-control-font-size-sm, 12px);--_inset-inline: var(--slotted-space-2, .25rem)}[data-ui-kbd][data-size=lg]{--_size: calc(var(--slotted-space-8, 1.5rem) + var(--slotted-space-2, .25rem));--_font-size: var(--slotted-control-font-size-lg, 14px);--_inset-inline: var(--slotted-space-4, .5rem);--_radius: var(--slotted-kbd-radius, var(--slotted-radius-lg, 8px))}[data-ui-kbd][data-size=inherit]{--_size: 1.5em;--_font-size: .8em;--_inset-inline: .4em;--_radius: var(--slotted-kbd-radius, .375em);--_gap: .25em}@supports (inline-size: round(nearest,1.5em,1px)){[data-ui-kbd][data-size=inherit]{--_size: round(nearest, 1.5em, 1px)}}[data-ui-kbd][data-variant=raised]{--_base-width: var(--slotted-kbd-base-width, var(--slotted-border-width-thick, 2px));--_face: linear-gradient( to bottom, var(--_background) 40%, color-mix(in oklab, var(--_background), var(--_base) 10%) )}[data-ui-kbd][data-variant=outline]{--_background: transparent;--_border: var(--slotted-border-strong, ButtonBorder);--_color: inherit}[data-ui-kbd][data-variant=soft]{--_background: var(--slotted-tone-secondary-surface);--_border: var(--slotted-tone-secondary-border);--_base: var(--slotted-tone-secondary-border);--_color: var(--slotted-tone-secondary-text)}[data-ui-kbd][data-variant=plain]{--_background: transparent;--_border: transparent;--_base: transparent;--_color: inherit}[data-ui-kbd][data-part-root][data-variant=plain]{min-inline-size:0;padding-inline:0}[data-ui-kbd][data-disabled]{--_background: var(--slotted-disabled-background, Canvas);--_face: none;--_border: var(--slotted-disabled-border, GrayText);--_base: var(--slotted-disabled-border, GrayText);--_color: var(--slotted-disabled-foreground, GrayText)}[data-ui-kbd][data-disabled] [data-part-separator]{color:var(--slotted-disabled-foreground, GrayText)}[data-ui-kbd][data-variant=outline][data-disabled],[data-ui-kbd][data-variant=plain][data-disabled]{--_background: transparent}[data-ui-kbd][data-variant=plain][data-disabled]{--_border: transparent;--_base: transparent}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
251
253
  }
252
254
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlShortcut, decorators: [{
253
255
  type: Component,
254
- args: [{ selector: 'kbd[slShortcut]', standalone: true, exportAs: 'slShortcut', template: `@if (resolved(); as shortcut) {@for (step of shortcut.steps; track $index) {@if (!$first) {<span data-part="separator" data-separator="then">{{ shortcut.thenLabel }}</span>}@for (key of step; track $index) {@if (!$first && shortcut.separator) {<span aria-hidden="true" data-part="separator" data-separator="plus">{{ shortcut.separator }}</span>}<kbd data-ui="kbd" data-part="root" [attr.data-key]="key.token" [attr.data-platform]="shortcut.platform" [attr.data-size]="resolvedSize()" [attr.data-variant]="resolvedVariant()" [attr.data-disabled]="disabled() ? '' : null"><span data-part="legend" aria-hidden="true" [attr.data-legend]="key.symbolic ? 'symbol' : null">{{ key.legend }}</span>@if (key.name; as name) {<span data-part="name">{{ name }}</span>}</kbd>}}} @else {<ng-content></ng-content>}`, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
256
+ args: [{ selector: 'kbd[slShortcut]', standalone: true, exportAs: 'slShortcut', template: `@if (resolved(); as shortcut) {@for (step of shortcut.steps; track $index) {@if (!$first) {<span data-part="separator" data-part-separator="" data-separator="then">{{ shortcut.thenLabel }}</span>}@for (key of step; track $index) {@if (!$first && shortcut.separator) {<span aria-hidden="true" data-part="separator" data-part-separator="" data-separator="plus">{{ shortcut.separator }}</span>}<kbd data-ui="kbd" data-ui-kbd="" data-part="root" data-part-root="" [attr.data-key]="key.token" [attr.data-platform]="shortcut.platform" [attr.data-size]="resolvedSize()" [attr.data-variant]="resolvedVariant()" [attr.data-disabled]="disabled() ? '' : null"><span data-part="legend" data-part-legend="" aria-hidden="true" [attr.data-legend]="key.symbolic ? 'symbol' : null">{{ key.legend }}</span>@if (key.name; as name) {<span data-part="name" data-part-name="">{{ name }}</span>}</kbd>}}} @else {<ng-content></ng-content>}`, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
255
257
  {
256
258
  provide: SlShortcutAxes.token,
257
259
  /* The decorator runs before the class binding exists. */
@@ -259,7 +261,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
259
261
  },
260
262
  ], host: {
261
263
  'data-ui': 'kbd',
264
+ 'data-ui-kbd': '',
262
265
  'data-part': 'shortcut',
266
+ 'data-part-shortcut': '',
263
267
  '[attr.data-platform]': 'resolvedPlatform()',
264
268
  '[attr.data-size]': 'resolvedSize()',
265
269
  '[attr.data-variant]': 'resolvedVariant()',
@@ -273,7 +277,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
273
277
  * `display: inline-flex`, which the `hidden` attribute would lose to.
274
278
  */
275
279
  '[style.display]': 'empty() ? "none" : null',
276
- }, styles: ["@layer slotted.components{[data-ui=kbd]{--_size: var(--slotted-space-8, 1.5rem);--_font-size: var(--slotted-control-font-size-md, 13px);--_inset-inline: var(--slotted-space-3, .375rem);--_radius: var(--slotted-kbd-radius, var(--slotted-radius-md, 6px));--_gap: var(--slotted-space-2, .25rem);--_edge-width: var(--slotted-kbd-border-width, var(--slotted-border-width-thin, 1px));--_base-width: var(--_edge-width);--_block-size: var(--slotted-control-inner-size, var(--_size));--_background: var(--slotted-surface-raised, Canvas);--_face: none;--_border: var(--slotted-control-border-color, ButtonBorder);--_base: var(--slotted-border-strong, ButtonBorder);--_color: var(--slotted-text, CanvasText)}[data-ui=kbd][data-part=root]{background-color:var(--_background);background-image:var(--_face);block-size:var(--_block-size);border:var(--_edge-width) solid var(--_border);border-block-end:var(--_base-width) solid var(--_base);border-radius:var(--_radius);box-sizing:border-box;color:var(--_color);display:inline-grid;font-family:var(--slotted-kbd-font-family, var(--slotted-control-font-family, sans-serif));font-size:var(--_font-size);font-variant-numeric:tabular-nums;font-weight:var(--slotted-kbd-font-weight, var(--slotted-font-weight-medium, 500));line-height:1;min-inline-size:var(--_block-size);place-items:center;padding-block:0;padding-inline:var(--_inset-inline);white-space:nowrap;vertical-align:middle;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing)}@supports (text-box: trim-both cap alphabetic){[data-ui=kbd] [data-part=legend]{text-box:trim-both cap alphabetic}[data-ui=kbd] [data-part=legend][data-legend=symbol]{text-box:normal}}[data-ui=kbd] [data-part=legend][data-legend=symbol]{font-family:var(--slotted-kbd-symbol-font-family, var(--slotted-font-family-sans, sans-serif));font-size:1.1em}[data-ui=kbd] [data-part=name]{block-size:1px;border:0;clip-path:inset(50%);inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap}[data-ui=kbd][data-part=shortcut]{align-items:center;direction:ltr;display:inline-flex;flex-wrap:wrap;gap:var(--_gap);max-inline-size:100%;vertical-align:middle}[data-ui=kbd][data-part=shortcut][data-platform=mac]{--_gap: var(--slotted-space-1, .125rem)}[data-ui=kbd][data-part=shortcut][data-platform=mac][data-size=inherit]{--_gap: .125em}[data-ui=kbd] [data-part=separator]{color:var(--slotted-text-muted, GrayText);flex:none;font-family:var(--slotted-kbd-font-family, var(--slotted-control-font-family, sans-serif));font-size:var(--_font-size);line-height:1}[data-ui=kbd] [data-part=separator][data-separator=then]{font-family:var(--slotted-control-font-family, sans-serif);padding-inline:var(--slotted-space-2, .25rem)}[data-ui=kbd][data-size=xs]{--_size: var(--slotted-space-6, 1rem);--_font-size: .6875rem;--_inset-inline: var(--slotted-space-2, .25rem);--_radius: var(--slotted-kbd-radius, var(--slotted-radius-sm, 4px));--_gap: var(--slotted-space-1, .125rem)}[data-ui=kbd][data-size=sm]{--_size: var(--slotted-space-7, 1.25rem);--_font-size: var(--slotted-control-font-size-sm, 12px);--_inset-inline: var(--slotted-space-2, .25rem)}[data-ui=kbd][data-size=lg]{--_size: calc(var(--slotted-space-8, 1.5rem) + var(--slotted-space-2, .25rem));--_font-size: var(--slotted-control-font-size-lg, 14px);--_inset-inline: var(--slotted-space-4, .5rem);--_radius: var(--slotted-kbd-radius, var(--slotted-radius-lg, 8px))}[data-ui=kbd][data-size=inherit]{--_size: 1.5em;--_font-size: .8em;--_inset-inline: .4em;--_radius: var(--slotted-kbd-radius, .375em);--_gap: .25em}@supports (inline-size: round(nearest,1.5em,1px)){[data-ui=kbd][data-size=inherit]{--_size: round(nearest, 1.5em, 1px)}}[data-ui=kbd][data-variant=raised]{--_base-width: var(--slotted-kbd-base-width, var(--slotted-border-width-thick, 2px));--_face: linear-gradient( to bottom, var(--_background) 40%, color-mix(in oklab, var(--_background), var(--_base) 10%) )}[data-ui=kbd][data-variant=outline]{--_background: transparent;--_border: var(--slotted-border-strong, ButtonBorder);--_color: inherit}[data-ui=kbd][data-variant=soft]{--_background: var(--slotted-tone-secondary-surface);--_border: var(--slotted-tone-secondary-border);--_base: var(--slotted-tone-secondary-border);--_color: var(--slotted-tone-secondary-text)}[data-ui=kbd][data-variant=plain]{--_background: transparent;--_border: transparent;--_base: transparent;--_color: inherit}[data-ui=kbd][data-part=root][data-variant=plain]{min-inline-size:0;padding-inline:0}[data-ui=kbd][data-disabled]{--_background: var(--slotted-disabled-background, Canvas);--_face: none;--_border: var(--slotted-disabled-border, GrayText);--_base: var(--slotted-disabled-border, GrayText);--_color: var(--slotted-disabled-foreground, GrayText)}[data-ui=kbd][data-disabled] [data-part=separator]{color:var(--slotted-disabled-foreground, GrayText)}[data-ui=kbd][data-variant=outline][data-disabled],[data-ui=kbd][data-variant=plain][data-disabled]{--_background: transparent}[data-ui=kbd][data-variant=plain][data-disabled]{--_border: transparent;--_base: transparent}}\n"] }]
280
+ }, styles: ["@layer slotted.components{[data-ui-kbd]{--_size: var(--slotted-space-8, 1.5rem);--_font-size: var(--slotted-control-font-size-md, 13px);--_inset-inline: var(--slotted-space-3, .375rem);--_radius: var(--slotted-kbd-radius, var(--slotted-radius-md, 6px));--_gap: var(--slotted-space-2, .25rem);--_edge-width: var(--slotted-kbd-border-width, var(--slotted-border-width-thin, 1px));--_base-width: var(--_edge-width);--_block-size: var(--slotted-control-inner-size, var(--_size));--_background: var(--slotted-surface-raised, Canvas);--_face: none;--_border: var(--slotted-control-border-color, ButtonBorder);--_base: var(--slotted-border-strong, ButtonBorder);--_color: var(--slotted-text, CanvasText)}[data-ui-kbd][data-part-root]{background-color:var(--_background);background-image:var(--_face);block-size:var(--_block-size);border:var(--_edge-width) solid var(--_border);border-block-end:var(--_base-width) solid var(--_base);border-radius:var(--_radius);box-sizing:border-box;color:var(--_color);display:inline-grid;font-family:var(--slotted-kbd-font-family, var(--slotted-control-font-family, sans-serif));font-size:var(--_font-size);font-variant-numeric:tabular-nums;font-weight:var(--slotted-kbd-font-weight, var(--slotted-font-weight-medium, 500));line-height:1;min-inline-size:var(--_block-size);place-items:center;padding-block:0;padding-inline:var(--_inset-inline);white-space:nowrap;vertical-align:middle;transition:background-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),border-color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing),color var(--slotted-control-transition-duration) var(--slotted-control-transition-easing)}@supports (text-box: trim-both cap alphabetic){[data-ui-kbd] [data-part-legend]{text-box:trim-both cap alphabetic}[data-ui-kbd] [data-part-legend][data-legend=symbol]{text-box:normal}}[data-ui-kbd] [data-part-legend][data-legend=symbol]{font-family:var(--slotted-kbd-symbol-font-family, var(--slotted-font-family-sans, sans-serif));font-size:1.1em}[data-ui-kbd] [data-part-name]{block-size:1px;border:0;clip-path:inset(50%);inline-size:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap}[data-ui-kbd][data-part-shortcut]{align-items:center;direction:ltr;display:inline-flex;font-family:var(--slotted-kbd-font-family, var(--slotted-control-font-family, sans-serif));line-height:1;flex-wrap:wrap;gap:var(--_gap);max-inline-size:100%;vertical-align:middle}[data-ui-kbd][data-part-shortcut][data-platform=mac]{--_gap: var(--slotted-space-1, .125rem)}[data-ui-kbd][data-part-shortcut][data-platform=mac][data-size=inherit]{--_gap: .125em}[data-ui-kbd] [data-part-separator]{color:var(--slotted-text-muted, GrayText);flex:none;font-family:var(--slotted-kbd-font-family, var(--slotted-control-font-family, sans-serif));font-size:var(--_font-size);line-height:1}[data-ui-kbd] [data-part-separator][data-separator=then]{font-family:var(--slotted-control-font-family, sans-serif);padding-inline:var(--slotted-space-2, .25rem)}[data-ui-kbd][data-size=xs]{--_size: var(--slotted-space-6, 1rem);--_font-size: .6875rem;--_inset-inline: var(--slotted-space-2, .25rem);--_radius: var(--slotted-kbd-radius, var(--slotted-radius-sm, 4px));--_gap: var(--slotted-space-1, .125rem)}[data-ui-kbd][data-size=sm]{--_size: var(--slotted-space-7, 1.25rem);--_font-size: var(--slotted-control-font-size-sm, 12px);--_inset-inline: var(--slotted-space-2, .25rem)}[data-ui-kbd][data-size=lg]{--_size: calc(var(--slotted-space-8, 1.5rem) + var(--slotted-space-2, .25rem));--_font-size: var(--slotted-control-font-size-lg, 14px);--_inset-inline: var(--slotted-space-4, .5rem);--_radius: var(--slotted-kbd-radius, var(--slotted-radius-lg, 8px))}[data-ui-kbd][data-size=inherit]{--_size: 1.5em;--_font-size: .8em;--_inset-inline: .4em;--_radius: var(--slotted-kbd-radius, .375em);--_gap: .25em}@supports (inline-size: round(nearest,1.5em,1px)){[data-ui-kbd][data-size=inherit]{--_size: round(nearest, 1.5em, 1px)}}[data-ui-kbd][data-variant=raised]{--_base-width: var(--slotted-kbd-base-width, var(--slotted-border-width-thick, 2px));--_face: linear-gradient( to bottom, var(--_background) 40%, color-mix(in oklab, var(--_background), var(--_base) 10%) )}[data-ui-kbd][data-variant=outline]{--_background: transparent;--_border: var(--slotted-border-strong, ButtonBorder);--_color: inherit}[data-ui-kbd][data-variant=soft]{--_background: var(--slotted-tone-secondary-surface);--_border: var(--slotted-tone-secondary-border);--_base: var(--slotted-tone-secondary-border);--_color: var(--slotted-tone-secondary-text)}[data-ui-kbd][data-variant=plain]{--_background: transparent;--_border: transparent;--_base: transparent;--_color: inherit}[data-ui-kbd][data-part-root][data-variant=plain]{min-inline-size:0;padding-inline:0}[data-ui-kbd][data-disabled]{--_background: var(--slotted-disabled-background, Canvas);--_face: none;--_border: var(--slotted-disabled-border, GrayText);--_base: var(--slotted-disabled-border, GrayText);--_color: var(--slotted-disabled-foreground, GrayText)}[data-ui-kbd][data-disabled] [data-part-separator]{color:var(--slotted-disabled-foreground, GrayText)}[data-ui-kbd][data-variant=outline][data-disabled],[data-ui-kbd][data-variant=plain][data-disabled]{--_background: transparent}[data-ui-kbd][data-variant=plain][data-disabled]{--_border: transparent;--_base: transparent}}\n"] }]
277
281
  }], propDecorators: { keys: [{ type: i0.Input, args: [{ isSignal: true, alias: "keys", required: false }] }], platform: [{ type: i0.Input, args: [{ isSignal: true, alias: "platform", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], separator: [{ type: i0.Input, args: [{ isSignal: true, alias: "separator", required: false }] }], messages: [{ type: i0.Input, args: [{ isSignal: true, alias: "messages", required: false }] }], legends: [{ type: i0.Input, args: [{ isSignal: true, alias: "legends", required: false }] }], names: [{ type: i0.Input, args: [{ isSignal: true, alias: "names", required: false }] }] } });
278
282
 
279
283
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"slotted-angular-kbd.mjs","sources":["../../kbd/src/kbd-defaults.ts","../../kbd/src/kbd-axes.ts","../../kbd/src/kbd.ts","../../kbd/src/shortcut.ts","../../kbd/src/slotted-angular-kbd.ts"],"sourcesContent":["import { inject, InjectionToken, isDevMode, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\nimport type { KbdPlatform, KbdPlatformInput } from '@slotted/core/keys';\nimport { resolvePlatform } from '@slotted/core/keys';\n\nexport type { KbdPlatform, KbdPlatformInput } from '@slotted/core/keys';\n\n/**\n * Four absolute heights — 16, 20, 24 and 28 pixels — and one that reads the text\n * around it. `inherit` is the step prose wants: an absolute cap inside a heading\n * is a stamp, and one in fine print is a slab.\n */\nexport type KbdSize = 'xs' | 'sm' | 'md' | 'lg' | 'inherit';\n\n/**\n * `raised` is the only value that looks like a key. `outline` owns no ground,\n * so it carries over any surface. `soft` is the tinted chip. `plain` is the\n * menu-row form, and it takes the colour of the text it sits in.\n */\nexport type KbdVariant = 'raised' | 'outline' | 'soft' | 'plain';\n\nexport interface KbdDefaults {\n /**\n * `auto` asks the runtime. State it instead where the page is rendered on a\n * server: nothing is detected then, and the first paint is already right.\n */\n platform: KbdPlatformInput;\n size: KbdSize;\n variant: KbdVariant;\n /** Between two simultaneous keys. A Mac joins with nothing whatever this says. */\n separator: string;\n /** Replaces what the eye sees, per key token: `{ ctrl: 'Strg' }`. */\n legends: Readonly<Record<string, string>> | undefined;\n /** Replaces what a reader hears, per key token: `{ ctrl: 'Steuerung' }`. */\n names: Readonly<Record<string, string>> | undefined;\n}\n\nconst FALLBACK: KbdDefaults = {\n platform: 'auto',\n size: 'md',\n variant: 'raised',\n separator: '+',\n legends: undefined,\n names: undefined,\n};\n\nexport const KBD_DEFAULTS = new InjectionToken<KbdDefaults>('slotted kbd defaults', {\n providedIn: 'root',\n factory: () => FALLBACK,\n});\n\n/**\n * An application decides once which platform its shortcuts are written for, how\n * its keys are painted, and which legends and names it writes in place of the\n * catalog's for particular keys. A key that states any of them itself still\n * wins: an explicit input is never overridden by the token. The words come from\n * the `keys` catalog of the language in force (`provideSlotted`).\n */\nexport function provideKbdDefaults(defaults: Partial<KbdDefaults>) {\n return {\n provide: KBD_DEFAULTS,\n useFactory: (): KbdDefaults => ({\n platform: defaults.platform ?? FALLBACK.platform,\n size: defaults.size ?? FALLBACK.size,\n variant: defaults.variant ?? FALLBACK.variant,\n separator: defaults.separator ?? FALLBACK.separator,\n legends: defaults.legends ?? FALLBACK.legends,\n names: defaults.names ?? FALLBACK.names,\n }),\n };\n}\n\n/** What a key renders as here, before it states anything of its own. */\nexport function injectKbdDefaults(): KbdDefaults {\n return inject(KBD_DEFAULTS);\n}\n\n/**\n * The reader's platform, resolved synchronously in the browser and never on the\n * server.\n *\n * The asymmetry with the React binding is deliberate and is the one worth\n * recording. React has `useSyncExternalStore`, which distinguishes a hydrating\n * render from a plain client one, so it can be right on the first paint of a\n * client-rendered page *and* free of hydration mismatches on a server-rendered\n * one. Angular exposes no equivalent, so the choice is between a flash on every\n * page and a mismatch on hydrated ones. This binding takes neither: it resolves\n * at once in the browser, which is right for the client-rendered application,\n * and an application that server-renders states `platform` through\n * `provideKbdDefaults` — at which point nothing is detected at all.\n *\n * A development-mode warning is what stops that requirement from being\n * discovered by a reader seeing `Ctrl` on their Mac.\n */\nexport function injectKbdPlatform(): (stated?: KbdPlatformInput) => KbdPlatform {\n const defaults = injectKbdDefaults();\n const browser = isPlatformBrowser(inject(PLATFORM_ID));\n\n if (!browser && defaults.platform === 'auto' && isDevMode()) {\n console.warn(\n '[slotted/kbd] The platform cannot be detected on the server, so every shortcut is ' +\n 'rendered for `other`. Call provideKbdDefaults({ platform }) to state it.',\n );\n }\n\n return (stated?: KbdPlatformInput) => {\n const requested = stated ?? defaults.platform;\n if (requested !== 'auto') return requested;\n return browser ? resolvePlatform('auto') : 'other';\n };\n}\n","import { inject, InjectionToken } from '@angular/core';\nimport type { Signal } from '@angular/core';\n\nimport type { KbdPlatformInput, KbdSize, KbdVariant } from './kbd-defaults';\n\n/**\n * What a combination hands to the keys inside it.\n *\n * Only what the combination was told is handed on: a key that states its own\n * size still wins, and a combination that states nothing hands on nothing, so\n * the provider's default is still what answers. Without this a page writing its\n * own keys inside a `Shortcut` would have to repeat four inputs on each of\n * them, and a key that forgot one would be painted differently from the\n * combination holding it.\n */\nexport interface SlShortcutAxesValue {\n platform: Signal<KbdPlatformInput | undefined>;\n size: Signal<KbdSize | undefined>;\n variant: Signal<KbdVariant | undefined>;\n disabled: Signal<boolean | undefined>;\n}\n\nconst SHORTCUT_AXES = new InjectionToken<SlShortcutAxesValue>('slotted kbd shortcut axes');\n\n/**\n * A namespace rather than a class, because there is nothing to instantiate: the\n * combination provides its own signals and a key reads them if it has a\n * combination to read.\n */\nexport const SlShortcutAxes = {\n token: SHORTCUT_AXES,\n injectOptional: (): SlShortcutAxesValue | null =>\n inject(SHORTCUT_AXES, { optional: true, skipSelf: false }),\n} as const;\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { injectMessages } from '@slotted/angular/i18n';\nimport { keysMessages, type KeysMessages, type PartialMessages } from '@slotted/core/i18n';\nimport { resolveKey } from '@slotted/core/keys';\n\nimport { injectKbdDefaults, injectKbdPlatform } from './kbd-defaults';\nimport type { KbdPlatformInput, KbdSize, KbdVariant } from './kbd-defaults';\nimport { SlShortcutAxes } from './kbd-axes';\n\n/**\n * One key of a keyboard, drawn so a reader can find it on theirs.\n *\n * The directive is written on the consumer's own `<kbd>`, which is the element\n * the HTML Standard defines for exactly this and the reason this binding needs\n * no `render` prop: substituting the element is Angular's default.\n *\n * It is not a control: nothing here is focusable, nothing answers hover, and\n * nothing binds a shortcut. Registering one is the application's, because WCAG\n * 2.2 2.1.4 Character Key Shortcuts can only be answered by whoever knows\n * whether the shortcut can be turned off.\n */\n@Component({\n selector: 'kbd[slKbd]',\n standalone: true,\n exportAs: 'slKbd',\n /**\n * A named key wins over projected content, because it is the more specific of\n * two explicit instructions — and because content cannot be asked whether it\n * exists, so any rule that depended on the answer would be one only the React\n * binding could keep.\n *\n * Every space in this template is load-bearing: Angular collapses a newline\n * between two nodes into a space, and a space inside the legend would be a\n * space inside the key's word.\n */\n // prettier-ignore\n template: `<span data-part=\"legend\" [attr.aria-hidden]=\"key() ? true : null\" [attr.data-legend]=\"key()?.symbolic ? 'symbol' : null\">@if (key(); as resolved) {{{ resolved.legend }}} @else {<ng-content></ng-content>}</span>@if (key()?.name; as name) {<span data-part=\"name\">{{ name }}</span>}`,\n styleUrl: '../../../styles/src/kbd/kbd.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-ui': 'kbd',\n 'data-part': 'root',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-variant]': 'resolvedVariant()',\n '[attr.data-key]': 'key()?.token ?? null',\n '[attr.data-platform]': 'keyName() ? resolvedPlatform() : null',\n '[attr.data-disabled]': 'resolvedDisabled() ? \"\" : null',\n },\n})\nexport class SlKbd {\n /**\n * A token from the vocabulary — `mod`, `meta`, `shift`, `escape`, `up` — or\n * any of its aliases. It resolves to the legend the reader's platform draws\n * and the word a screen reader hears in place of it.\n */\n readonly keyName = input<string | undefined>(undefined);\n /** Defaults to the combination, then to the provider, then to `auto`. */\n readonly platform = input<KbdPlatformInput | undefined>(undefined);\n /** Defaults to the combination, then to the provider, then to `md`. */\n readonly size = input<KbdSize | undefined>(undefined);\n /** Defaults to the combination, then to the provider, then to `raised`. */\n readonly variant = input<KbdVariant | undefined>(undefined);\n /**\n * Dims the key without claiming the item's semantics. `kbd` may carry only\n * the global ARIA attributes, and `aria-disabled` is not one of them, so the\n * row this key belongs to is what says it is unavailable.\n */\n readonly disabled = input(undefined, { transform: booleanAttribute });\n /**\n * Words laid over the `keys` catalog of the language in force, key by key:\n * `legends.*` for what a cap shows, `names.*` for what a reader hears.\n */\n readonly messages = input<PartialMessages<KeysMessages> | undefined>(undefined);\n\n private readonly defaults = injectKbdDefaults();\n private readonly platformOf = injectKbdPlatform();\n private readonly t = injectMessages(keysMessages, this.messages);\n /**\n * The combination this key sits in, when it sits in one. It is optional, so a\n * key written on its own works, and a key written by hand inside a `Shortcut`\n * is painted like the combination around it without repeating four inputs.\n */\n private readonly group = SlShortcutAxes.injectOptional();\n\n protected readonly resolvedPlatform = computed(() =>\n this.platformOf(this.platform() ?? this.group?.platform()),\n );\n protected readonly resolvedSize = computed(\n () => this.size() ?? this.group?.size() ?? this.defaults.size,\n );\n protected readonly resolvedVariant = computed(\n () => this.variant() ?? this.group?.variant() ?? this.defaults.variant,\n );\n protected readonly resolvedDisabled = computed(\n () => this.disabled() ?? this.group?.disabled() ?? false,\n );\n\n protected readonly key = computed(() => {\n const token = this.keyName();\n if (token === undefined || token === '') return undefined;\n return resolveKey(token, {\n platform: this.resolvedPlatform(),\n t: this.t,\n legends: this.defaults.legends,\n names: this.defaults.names,\n });\n });\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { injectMessages } from '@slotted/angular/i18n';\nimport { keysMessages, type KeysMessages, type PartialMessages } from '@slotted/core/i18n';\nimport { resolveShortcut } from '@slotted/core/keys';\n\nimport { SlShortcutAxes } from './kbd-axes';\nimport { injectKbdDefaults, injectKbdPlatform } from './kbd-defaults';\nimport type { KbdPlatformInput, KbdSize, KbdVariant } from './kbd-defaults';\n\n/**\n * A whole key combination, and the element the HTML Standard says it is:\n * “nesting a `kbd` element within another `kbd` element represents an actual key\n * or other unit of input as a portion of a larger input”. shadcn's `KbdGroup` is\n * a `div`, and Chakra and Radix put the whole combination inside one `kbd` as\n * text; this is the markup the specification describes.\n *\n * `keys` is written once and rendered for the reader's platform. The modifiers\n * are reordered into that platform's own convention — the Apple Style Guide\n * writes Fn, Control, Option, Shift, Command, and Microsoft writes the Windows\n * key ahead of Ctrl, Alt and Shift — so one authored string is right on both.\n * The escape hatch is composition rather than a fifth input: keys projected into\n * this element are rendered exactly as written.\n */\n@Component({\n selector: 'kbd[slShortcut]',\n standalone: true,\n exportAs: 'slShortcut',\n /**\n * The key markup is written here as well as in `SlKbd`, because a rendered key\n * has no token to hand back to that component — the combination resolved it\n * already, under its own `legends` and `names`. The two are held identical by\n * `kbd.spec.ts`, which renders the same key both ways and compares the DOM,\n * rather than by a shared helper that could only serve one of them.\n *\n * Every space is load-bearing: Angular collapses a newline between two nodes\n * into a space, and a space between two caps is a space the gap already owns.\n */\n // prettier-ignore\n template: `@if (resolved(); as shortcut) {@for (step of shortcut.steps; track $index) {@if (!$first) {<span data-part=\"separator\" data-separator=\"then\">{{ shortcut.thenLabel }}</span>}@for (key of step; track $index) {@if (!$first && shortcut.separator) {<span aria-hidden=\"true\" data-part=\"separator\" data-separator=\"plus\">{{ shortcut.separator }}</span>}<kbd data-ui=\"kbd\" data-part=\"root\" [attr.data-key]=\"key.token\" [attr.data-platform]=\"shortcut.platform\" [attr.data-size]=\"resolvedSize()\" [attr.data-variant]=\"resolvedVariant()\" [attr.data-disabled]=\"disabled() ? '' : null\"><span data-part=\"legend\" aria-hidden=\"true\" [attr.data-legend]=\"key.symbolic ? 'symbol' : null\">{{ key.legend }}</span>@if (key.name; as name) {<span data-part=\"name\">{{ name }}</span>}</kbd>}}} @else {<ng-content></ng-content>}`,\n styleUrl: '../../../styles/src/kbd/kbd.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: SlShortcutAxes.token,\n /* The decorator runs before the class binding exists. */\n useExisting: forwardRef(() => SlShortcut),\n },\n ],\n host: {\n 'data-ui': 'kbd',\n 'data-part': 'shortcut',\n '[attr.data-platform]': 'resolvedPlatform()',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-variant]': 'resolvedVariant()',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n /**\n * A combination with nothing in it is nothing, not an empty cap at the end\n * of a row announcing that a shortcut exists. The React binding returns\n * nothing; this directive is written on an element the consumer owns, so it\n * cannot un-write it, and `display: none` is the same outcome the platform\n * can give from here. The inline style is what beats the family's own\n * `display: inline-flex`, which the `hidden` attribute would lose to.\n */\n '[style.display]': 'empty() ? \"none\" : null',\n },\n})\nexport class SlShortcut {\n /**\n * The shortcut, written once: `+` joins keys pressed together and whitespace\n * joins the steps of a sequence.\n */\n readonly keys = input<string | undefined>(undefined);\n /** Defaults to the provider, then to `auto`. */\n readonly platform = input<KbdPlatformInput | undefined>(undefined);\n /** Defaults to the provider, then to `md`. */\n readonly size = input<KbdSize | undefined>(undefined);\n /** Defaults to the provider, then to `raised`. */\n readonly variant = input<KbdVariant | undefined>(undefined);\n readonly disabled = input(undefined, { transform: booleanAttribute });\n /** Between two simultaneous keys. Defaults to the provider, then to `+`. */\n readonly separator = input<string | undefined>(undefined);\n /**\n * Words laid over the `keys` catalog of the language in force, key by key:\n * `legends.*`, `names.*`, and `then` between two steps of a sequence.\n */\n readonly messages = input<PartialMessages<KeysMessages> | undefined>(undefined);\n /** Replaces what the eye sees, per key token. Defaults to the provider. */\n readonly legends = input<Readonly<Record<string, string>> | undefined>(undefined);\n /** Replaces what a reader hears, per key token. Defaults to the provider. */\n readonly names = input<Readonly<Record<string, string>> | undefined>(undefined);\n\n private readonly defaults = injectKbdDefaults();\n private readonly platformOf = injectKbdPlatform();\n private readonly t = injectMessages(keysMessages, this.messages);\n\n protected readonly resolvedPlatform = computed(() => this.platformOf(this.platform()));\n protected readonly resolvedSize = computed(() => this.size() ?? this.defaults.size);\n protected readonly resolvedVariant = computed(() => this.variant() ?? this.defaults.variant);\n\n protected readonly resolved = computed(() => {\n const keys = this.keys();\n if (keys === undefined) return undefined;\n return resolveShortcut(keys, {\n platform: this.resolvedPlatform(),\n t: this.t,\n legends: this.legends() ?? this.defaults.legends,\n names: this.names() ?? this.defaults.names,\n separator: this.separator() ?? this.defaults.separator,\n });\n });\n\n protected readonly empty = computed(() => this.resolved()?.steps.length === 0);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slotted-angular-kbd.mjs","sources":["../../kbd/src/kbd-defaults.ts","../../kbd/src/kbd-axes.ts","../../kbd/src/kbd.ts","../../kbd/src/shortcut.ts","../../kbd/src/slotted-angular-kbd.ts"],"sourcesContent":["import { inject, InjectionToken, isDevMode, PLATFORM_ID } from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\n\nimport type { KbdPlatform, KbdPlatformInput } from '@slotted/core/keys';\nimport { resolvePlatform } from '@slotted/core/keys';\n\nexport type { KbdPlatform, KbdPlatformInput } from '@slotted/core/keys';\n\n/**\n * Four absolute heights — 16, 20, 24 and 28 pixels — and one that reads the text\n * around it. `inherit` is the step prose wants: an absolute cap inside a heading\n * is a stamp, and one in fine print is a slab.\n */\nexport type KbdSize = 'xs' | 'sm' | 'md' | 'lg' | 'inherit';\n\n/**\n * `raised` is the only value that looks like a key. `outline` owns no ground,\n * so it carries over any surface. `soft` is the tinted chip. `plain` is the\n * menu-row form, and it takes the colour of the text it sits in.\n */\nexport type KbdVariant = 'raised' | 'outline' | 'soft' | 'plain';\n\nexport interface KbdDefaults {\n /**\n * `auto` asks the runtime. State it instead where the page is rendered on a\n * server: nothing is detected then, and the first paint is already right.\n */\n platform: KbdPlatformInput;\n size: KbdSize;\n variant: KbdVariant;\n /** Between two simultaneous keys. A Mac joins with nothing whatever this says. */\n separator: string;\n /** Replaces what the eye sees, per key token: `{ ctrl: 'Strg' }`. */\n legends: Readonly<Record<string, string>> | undefined;\n /** Replaces what a reader hears, per key token: `{ ctrl: 'Steuerung' }`. */\n names: Readonly<Record<string, string>> | undefined;\n}\n\nconst FALLBACK: KbdDefaults = {\n platform: 'auto',\n size: 'md',\n variant: 'raised',\n separator: '+',\n legends: undefined,\n names: undefined,\n};\n\nexport const KBD_DEFAULTS = new InjectionToken<KbdDefaults>('slotted kbd defaults', {\n providedIn: 'root',\n factory: () => FALLBACK,\n});\n\n/**\n * An application decides once which platform its shortcuts are written for, how\n * its keys are painted, and which legends and names it writes in place of the\n * catalog's for particular keys. A key that states any of them itself still\n * wins: an explicit input is never overridden by the token. The words come from\n * the `keys` catalog of the language in force (`provideSlotted`).\n */\nexport function provideKbdDefaults(defaults: Partial<KbdDefaults>) {\n return {\n provide: KBD_DEFAULTS,\n useFactory: (): KbdDefaults => ({\n platform: defaults.platform ?? FALLBACK.platform,\n size: defaults.size ?? FALLBACK.size,\n variant: defaults.variant ?? FALLBACK.variant,\n separator: defaults.separator ?? FALLBACK.separator,\n legends: defaults.legends ?? FALLBACK.legends,\n names: defaults.names ?? FALLBACK.names,\n }),\n };\n}\n\n/** What a key renders as here, before it states anything of its own. */\nexport function injectKbdDefaults(): KbdDefaults {\n return inject(KBD_DEFAULTS);\n}\n\n/**\n * The reader's platform, resolved synchronously in the browser and never on the\n * server.\n *\n * The asymmetry with the React binding is deliberate and is the one worth\n * recording. React has `useSyncExternalStore`, which distinguishes a hydrating\n * render from a plain client one, so it can be right on the first paint of a\n * client-rendered page *and* free of hydration mismatches on a server-rendered\n * one. Angular exposes no equivalent, so the choice is between a flash on every\n * page and a mismatch on hydrated ones. This binding takes neither: it resolves\n * at once in the browser, which is right for the client-rendered application,\n * and an application that server-renders states `platform` through\n * `provideKbdDefaults` — at which point nothing is detected at all.\n *\n * A development-mode warning is what stops that requirement from being\n * discovered by a reader seeing `Ctrl` on their Mac.\n */\nexport function injectKbdPlatform(): (stated?: KbdPlatformInput) => KbdPlatform {\n const defaults = injectKbdDefaults();\n const browser = isPlatformBrowser(inject(PLATFORM_ID));\n\n if (!browser && defaults.platform === 'auto' && isDevMode()) {\n console.warn(\n '[slotted/kbd] The platform cannot be detected on the server, so every shortcut is ' +\n 'rendered for `other`. Call provideKbdDefaults({ platform }) to state it.',\n );\n }\n\n return (stated?: KbdPlatformInput) => {\n const requested = stated ?? defaults.platform;\n if (requested !== 'auto') return requested;\n return browser ? resolvePlatform('auto') : 'other';\n };\n}\n","import { inject, InjectionToken } from '@angular/core';\nimport type { Signal } from '@angular/core';\n\nimport type { KbdPlatformInput, KbdSize, KbdVariant } from './kbd-defaults';\n\n/**\n * What a combination hands to the keys inside it.\n *\n * Only what the combination was told is handed on: a key that states its own\n * size still wins, and a combination that states nothing hands on nothing, so\n * the provider's default is still what answers. Without this a page writing its\n * own keys inside a `Shortcut` would have to repeat four inputs on each of\n * them, and a key that forgot one would be painted differently from the\n * combination holding it.\n */\nexport interface SlShortcutAxesValue {\n platform: Signal<KbdPlatformInput | undefined>;\n size: Signal<KbdSize | undefined>;\n variant: Signal<KbdVariant | undefined>;\n disabled: Signal<boolean | undefined>;\n}\n\nconst SHORTCUT_AXES = new InjectionToken<SlShortcutAxesValue>('slotted kbd shortcut axes');\n\n/**\n * A namespace rather than a class, because there is nothing to instantiate: the\n * combination provides its own signals and a key reads them if it has a\n * combination to read.\n */\nexport const SlShortcutAxes = {\n token: SHORTCUT_AXES,\n injectOptional: (): SlShortcutAxesValue | null =>\n inject(SHORTCUT_AXES, { optional: true, skipSelf: false }),\n} as const;\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n input,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { injectMessages } from '@slotted/angular/i18n';\nimport { keysMessages, type KeysMessages, type PartialMessages } from '@slotted/core/i18n';\nimport { resolveKey } from '@slotted/core/keys';\n\nimport { injectKbdDefaults, injectKbdPlatform } from './kbd-defaults';\nimport type { KbdPlatformInput, KbdSize, KbdVariant } from './kbd-defaults';\nimport { SlShortcutAxes } from './kbd-axes';\n\n/**\n * One key of a keyboard, drawn so a reader can find it on theirs.\n *\n * The directive is written on the consumer's own `<kbd>`, which is the element\n * the HTML Standard defines for exactly this and the reason this binding needs\n * no `render` prop: substituting the element is Angular's default.\n *\n * It is not a control: nothing here is focusable, nothing answers hover, and\n * nothing binds a shortcut. Registering one is the application's, because WCAG\n * 2.2 2.1.4 Character Key Shortcuts can only be answered by whoever knows\n * whether the shortcut can be turned off.\n */\n@Component({\n selector: 'kbd[slKbd]',\n standalone: true,\n exportAs: 'slKbd',\n /**\n * A named key wins over projected content, because it is the more specific of\n * two explicit instructions — and because content cannot be asked whether it\n * exists, so any rule that depended on the answer would be one only the React\n * binding could keep.\n *\n * Every space in this template is load-bearing: Angular collapses a newline\n * between two nodes into a space, and a space inside the legend would be a\n * space inside the key's word.\n */\n // prettier-ignore\n template: `<span data-part=\"legend\" data-part-legend=\"\" [attr.aria-hidden]=\"key() ? true : null\" [attr.data-legend]=\"key()?.symbolic ? 'symbol' : null\">@if (key(); as resolved) {{{ resolved.legend }}} @else {<ng-content></ng-content>}</span>@if (key()?.name; as name) {<span data-part=\"name\" data-part-name=\"\">{{ name }}</span>}`,\n styleUrl: '../../../styles/src/kbd/kbd.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'data-ui': 'kbd',\n 'data-ui-kbd': '',\n 'data-part': 'root',\n 'data-part-root': '',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-variant]': 'resolvedVariant()',\n '[attr.data-key]': 'key()?.token ?? null',\n '[attr.data-platform]': 'keyName() ? resolvedPlatform() : null',\n '[attr.data-disabled]': 'resolvedDisabled() ? \"\" : null',\n },\n})\nexport class SlKbd {\n /**\n * A token from the vocabulary — `mod`, `meta`, `shift`, `escape`, `up` — or\n * any of its aliases. It resolves to the legend the reader's platform draws\n * and the word a screen reader hears in place of it.\n */\n readonly keyName = input<string | undefined>(undefined);\n /** Defaults to the combination, then to the provider, then to `auto`. */\n readonly platform = input<KbdPlatformInput | undefined>(undefined);\n /** Defaults to the combination, then to the provider, then to `md`. */\n readonly size = input<KbdSize | undefined>(undefined);\n /** Defaults to the combination, then to the provider, then to `raised`. */\n readonly variant = input<KbdVariant | undefined>(undefined);\n /**\n * Dims the key without claiming the item's semantics. `kbd` may carry only\n * the global ARIA attributes, and `aria-disabled` is not one of them, so the\n * row this key belongs to is what says it is unavailable.\n */\n readonly disabled = input(undefined, { transform: booleanAttribute });\n /**\n * Words laid over the `keys` catalog of the language in force, key by key:\n * `legends.*` for what a cap shows, `names.*` for what a reader hears.\n */\n readonly messages = input<PartialMessages<KeysMessages> | undefined>(undefined);\n\n private readonly defaults = injectKbdDefaults();\n private readonly platformOf = injectKbdPlatform();\n private readonly t = injectMessages(keysMessages, this.messages);\n /**\n * The combination this key sits in, when it sits in one. It is optional, so a\n * key written on its own works, and a key written by hand inside a `Shortcut`\n * is painted like the combination around it without repeating four inputs.\n */\n private readonly group = SlShortcutAxes.injectOptional();\n\n protected readonly resolvedPlatform = computed(() =>\n this.platformOf(this.platform() ?? this.group?.platform()),\n );\n protected readonly resolvedSize = computed(\n () => this.size() ?? this.group?.size() ?? this.defaults.size,\n );\n protected readonly resolvedVariant = computed(\n () => this.variant() ?? this.group?.variant() ?? this.defaults.variant,\n );\n protected readonly resolvedDisabled = computed(\n () => this.disabled() ?? this.group?.disabled() ?? false,\n );\n\n protected readonly key = computed(() => {\n const token = this.keyName();\n if (token === undefined || token === '') return undefined;\n return resolveKey(token, {\n platform: this.resolvedPlatform(),\n t: this.t,\n legends: this.defaults.legends,\n names: this.defaults.names,\n });\n });\n}\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n forwardRef,\n input,\n ViewEncapsulation,\n} from '@angular/core';\n\nimport { injectMessages } from '@slotted/angular/i18n';\nimport { keysMessages, type KeysMessages, type PartialMessages } from '@slotted/core/i18n';\nimport { resolveShortcut } from '@slotted/core/keys';\n\nimport { SlShortcutAxes } from './kbd-axes';\nimport { injectKbdDefaults, injectKbdPlatform } from './kbd-defaults';\nimport type { KbdPlatformInput, KbdSize, KbdVariant } from './kbd-defaults';\n\n/**\n * A whole key combination, and the element the HTML Standard says it is:\n * “nesting a `kbd` element within another `kbd` element represents an actual key\n * or other unit of input as a portion of a larger input”. shadcn's `KbdGroup` is\n * a `div`, and Chakra and Radix put the whole combination inside one `kbd` as\n * text; this is the markup the specification describes.\n *\n * `keys` is written once and rendered for the reader's platform. The modifiers\n * are reordered into that platform's own convention — the Apple Style Guide\n * writes Fn, Control, Option, Shift, Command, and Microsoft writes the Windows\n * key ahead of Ctrl, Alt and Shift — so one authored string is right on both.\n * The escape hatch is composition rather than a fifth input: keys projected into\n * this element are rendered exactly as written.\n */\n@Component({\n selector: 'kbd[slShortcut]',\n standalone: true,\n exportAs: 'slShortcut',\n /**\n * The key markup is written here as well as in `SlKbd`, because a rendered key\n * has no token to hand back to that component — the combination resolved it\n * already, under its own `legends` and `names`. The two are held identical by\n * `kbd.spec.ts`, which renders the same key both ways and compares the DOM,\n * rather than by a shared helper that could only serve one of them.\n *\n * Every space is load-bearing: Angular collapses a newline between two nodes\n * into a space, and a space between two caps is a space the gap already owns.\n */\n // prettier-ignore\n template: `@if (resolved(); as shortcut) {@for (step of shortcut.steps; track $index) {@if (!$first) {<span data-part=\"separator\" data-part-separator=\"\" data-separator=\"then\">{{ shortcut.thenLabel }}</span>}@for (key of step; track $index) {@if (!$first && shortcut.separator) {<span aria-hidden=\"true\" data-part=\"separator\" data-part-separator=\"\" data-separator=\"plus\">{{ shortcut.separator }}</span>}<kbd data-ui=\"kbd\" data-ui-kbd=\"\" data-part=\"root\" data-part-root=\"\" [attr.data-key]=\"key.token\" [attr.data-platform]=\"shortcut.platform\" [attr.data-size]=\"resolvedSize()\" [attr.data-variant]=\"resolvedVariant()\" [attr.data-disabled]=\"disabled() ? '' : null\"><span data-part=\"legend\" data-part-legend=\"\" aria-hidden=\"true\" [attr.data-legend]=\"key.symbolic ? 'symbol' : null\">{{ key.legend }}</span>@if (key.name; as name) {<span data-part=\"name\" data-part-name=\"\">{{ name }}</span>}</kbd>}}} @else {<ng-content></ng-content>}`,\n styleUrl: '../../../styles/src/kbd/kbd.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [\n {\n provide: SlShortcutAxes.token,\n /* The decorator runs before the class binding exists. */\n useExisting: forwardRef(() => SlShortcut),\n },\n ],\n host: {\n 'data-ui': 'kbd',\n 'data-ui-kbd': '',\n 'data-part': 'shortcut',\n 'data-part-shortcut': '',\n '[attr.data-platform]': 'resolvedPlatform()',\n '[attr.data-size]': 'resolvedSize()',\n '[attr.data-variant]': 'resolvedVariant()',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n /**\n * A combination with nothing in it is nothing, not an empty cap at the end\n * of a row announcing that a shortcut exists. The React binding returns\n * nothing; this directive is written on an element the consumer owns, so it\n * cannot un-write it, and `display: none` is the same outcome the platform\n * can give from here. The inline style is what beats the family's own\n * `display: inline-flex`, which the `hidden` attribute would lose to.\n */\n '[style.display]': 'empty() ? \"none\" : null',\n },\n})\nexport class SlShortcut {\n /**\n * The shortcut, written once: `+` joins keys pressed together and whitespace\n * joins the steps of a sequence.\n */\n readonly keys = input<string | undefined>(undefined);\n /** Defaults to the provider, then to `auto`. */\n readonly platform = input<KbdPlatformInput | undefined>(undefined);\n /** Defaults to the provider, then to `md`. */\n readonly size = input<KbdSize | undefined>(undefined);\n /** Defaults to the provider, then to `raised`. */\n readonly variant = input<KbdVariant | undefined>(undefined);\n readonly disabled = input(undefined, { transform: booleanAttribute });\n /** Between two simultaneous keys. Defaults to the provider, then to `+`. */\n readonly separator = input<string | undefined>(undefined);\n /**\n * Words laid over the `keys` catalog of the language in force, key by key:\n * `legends.*`, `names.*`, and `then` between two steps of a sequence.\n */\n readonly messages = input<PartialMessages<KeysMessages> | undefined>(undefined);\n /** Replaces what the eye sees, per key token. Defaults to the provider. */\n readonly legends = input<Readonly<Record<string, string>> | undefined>(undefined);\n /** Replaces what a reader hears, per key token. Defaults to the provider. */\n readonly names = input<Readonly<Record<string, string>> | undefined>(undefined);\n\n private readonly defaults = injectKbdDefaults();\n private readonly platformOf = injectKbdPlatform();\n private readonly t = injectMessages(keysMessages, this.messages);\n\n protected readonly resolvedPlatform = computed(() => this.platformOf(this.platform()));\n protected readonly resolvedSize = computed(() => this.size() ?? this.defaults.size);\n protected readonly resolvedVariant = computed(() => this.variant() ?? this.defaults.variant);\n\n protected readonly resolved = computed(() => {\n const keys = this.keys();\n if (keys === undefined) return undefined;\n return resolveShortcut(keys, {\n platform: this.resolvedPlatform(),\n t: this.t,\n legends: this.legends() ?? this.defaults.legends,\n names: this.names() ?? this.defaults.names,\n separator: this.separator() ?? this.defaults.separator,\n });\n });\n\n protected readonly empty = computed(() => this.resolved()?.steps.length === 0);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -149,13 +149,15 @@ class SlLink {
149
149
  event.stopPropagation();
150
150
  }
151
151
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlLink, deps: [], target: i0.ɵɵFactoryTarget.Component });
152
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlLink, isStandalone: true, selector: "a[slLink]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, external: { classPropertyName: "external", publicName: "external", isSignal: true, isRequired: false, transformFunction: null }, messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null }, underline: { classPropertyName: "underline", publicName: "underline", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, visited: { classPropertyName: "visited", publicName: "visited", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-ui": "link", "data-part": "root" }, properties: { "attr.data-underline": "underlineValue()", "attr.data-variant": "variantValue()", "attr.data-visited": "visitedValue() ? \"\" : null", "attr.data-disabled": "disabled() ? \"\" : null", "attr.aria-disabled": "disabled() ? \"true\" : null", "attr.role": "disabled() ? \"link\" : null", "attr.tabindex": "tabIndex()" } }, exportAs: ["slLink"], ngImport: i0, template: `<ng-content></ng-content>@if (newTab()) {&#8288;<span aria-hidden="true" data-part="external-icon"><span slIcon directional><svg slGlyph name="external"></svg></span></span><span data-part="external-hint" data-ui="visually-hidden">{{ hint() }}</span>&#8288;}`, isInline: true, styles: ["@layer slotted.components{[data-ui=link]{--_strong: var(--slotted-text, CanvasText);--_rest: var(--slotted-link-color, var(--slotted-tone-accent-text, LinkText));--_hover: var( --slotted-link-color-hover, color-mix(in oklab, var(--_rest) 65%, var(--_strong)) );--_active: var( --slotted-link-color-active, color-mix(in oklab, var(--_rest) 35%, var(--_strong)) );--_visited: var( --slotted-link-color-visited, color-mix(in oklab, var(--_rest) 40%, var(--slotted-text-muted, GrayText)) );--_underline: var( --slotted-link-underline-color, color-mix(in oklab, currentColor 55%, transparent) );border-radius:var(--slotted-link-radius, var(--slotted-control-radius, 4px));color:var(--_rest);inline-size:fit-content;overflow-wrap:anywhere;text-decoration-color:var(--_underline);text-decoration-line:underline;text-decoration-thickness:var(--slotted-link-underline-thickness, from-font);text-underline-offset:var(--slotted-link-underline-offset, .15em);transition:color var(--slotted-duration-short) var(--slotted-easing-standard),text-decoration-color var(--slotted-duration-short) var(--slotted-easing-standard)}[data-ui=link][data-variant=neutral]{--_rest: var(--slotted-link-color, currentColor);--_hover: var(--slotted-link-color-hover, var(--slotted-tone-accent-text, LinkText));--_active: var( --slotted-link-color-active, color-mix(in oklab, var(--slotted-tone-accent-text, LinkText) 65%, var(--_strong)) )}[data-ui=link][data-variant=inverse]{--_strong: var(--slotted-text-inverse, Canvas);--_rest: var(--slotted-link-color, var(--slotted-text-inverse, Canvas))}[data-ui=link][data-underline=hover],[data-ui=link][data-underline=none]{text-decoration-line:none}[data-ui=link][data-underline=hover]:not([data-disabled]):hover{text-decoration-line:underline}[data-ui=link][data-underline=hover]:focus-visible{text-decoration-line:underline}[data-ui=link][data-visited]:visited{color:var(--_visited)}[data-ui=link]:not([data-disabled]):hover{--_underline: currentColor;color:var(--_hover)}[data-ui=link]:not([data-disabled]):active{--_underline: currentColor;color:var(--_active)}[data-ui=link]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-link-focus-ring-offset, 1px)}[data-ui=link][data-disabled]{color:var(--slotted-link-color-disabled, var(--slotted-disabled-foreground, GrayText));cursor:not-allowed}[data-ui=link] [data-part=external-icon]{--slotted-icon-size: var(--slotted-link-external-icon-size, 1em);margin-inline-start:var(--slotted-link-external-icon-gap, .15em)}[data-ui=link][aria-current]:not([aria-current=false]){--_rest: var(--slotted-link-color-current, var(--slotted-text, CanvasText))}@media(forced-colors:active){[data-ui=link]{text-decoration-line:underline}}}\n", "@layer slotted.components{[data-ui=visually-hidden]:not([data-focusable]:focus-within){block-size:1px;border:0;clip-path:inset(50%);inline-size:1px;inset-block-start:0;inset-inline-start:0;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap}}\n"], dependencies: [{ kind: "component", type: SlGlyph, selector: "svg[slGlyph]", inputs: ["name", "solid"] }, { kind: "component", type: SlIcon, selector: "[slIcon]", inputs: ["directional", "label", "size", "tone"], exportAs: ["slIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
152
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.7", type: SlLink, isStandalone: true, selector: "a[slLink]", inputs: { disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, external: { classPropertyName: "external", publicName: "external", isSignal: true, isRequired: false, transformFunction: null }, messages: { classPropertyName: "messages", publicName: "messages", isSignal: true, isRequired: false, transformFunction: null }, underline: { classPropertyName: "underline", publicName: "underline", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, visited: { classPropertyName: "visited", publicName: "visited", isSignal: true, isRequired: false, transformFunction: null } }, host: { attributes: { "data-ui": "link", "data-ui-link": "", "data-part": "root", "data-part-root": "" }, properties: { "attr.data-underline": "underlineValue()", "attr.data-variant": "variantValue()", "attr.data-visited": "visitedValue() ? \"\" : null", "attr.data-disabled": "disabled() ? \"\" : null", "attr.aria-disabled": "disabled() ? \"true\" : null", "attr.role": "disabled() ? \"link\" : null", "attr.tabindex": "tabIndex()" } }, exportAs: ["slLink"], ngImport: i0, template: `<ng-content></ng-content>@if (newTab()) {&#8288;<span aria-hidden="true" data-part="external-icon" data-part-external-icon=""><span slIcon directional><svg slGlyph name="external"></svg></span></span><span data-part="external-hint" data-part-external-hint="" data-ui="visually-hidden" data-ui-visually-hidden="">{{ hint() }}</span>&#8288;}`, isInline: true, styles: ["@layer slotted.components{[data-ui-link]{--_strong: var(--slotted-text, CanvasText);--_rest: var(--slotted-link-color, var(--slotted-tone-accent-text, LinkText));--_hover: var( --slotted-link-color-hover, color-mix(in oklab, var(--_rest) 65%, var(--_strong)) );--_active: var( --slotted-link-color-active, color-mix(in oklab, var(--_rest) 35%, var(--_strong)) );--_visited: var( --slotted-link-color-visited, color-mix(in oklab, var(--_rest) 40%, var(--slotted-text-muted, GrayText)) );--_underline: var( --slotted-link-underline-color, color-mix(in oklab, currentColor 55%, transparent) );border-radius:var(--slotted-link-radius, var(--slotted-control-radius, 4px));color:var(--_rest);inline-size:fit-content;overflow-wrap:anywhere;text-decoration-color:var(--_underline);text-decoration-line:underline;text-decoration-thickness:var(--slotted-link-underline-thickness, from-font);text-underline-offset:var(--slotted-link-underline-offset, .15em);transition:color var(--slotted-duration-short) var(--slotted-easing-standard),text-decoration-color var(--slotted-duration-short) var(--slotted-easing-standard)}[data-ui-link][data-variant=neutral]{--_rest: var(--slotted-link-color, currentColor);--_hover: var(--slotted-link-color-hover, var(--slotted-tone-accent-text, LinkText));--_active: var( --slotted-link-color-active, color-mix(in oklab, var(--slotted-tone-accent-text, LinkText) 65%, var(--_strong)) )}[data-ui-link][data-variant=inverse]{--_strong: var(--slotted-text-inverse, Canvas);--_rest: var(--slotted-link-color, var(--slotted-text-inverse, Canvas))}[data-ui-link][data-underline=hover],[data-ui-link][data-underline=none]{text-decoration-line:none}[data-ui-link][data-underline=hover]:not([data-disabled]):hover{text-decoration-line:underline}[data-ui-link][data-underline=hover]:focus-visible{text-decoration-line:underline}[data-ui-link][data-visited]:visited{color:var(--_visited)}[data-ui-link]:not([data-disabled]):hover{--_underline: currentColor;color:var(--_hover)}[data-ui-link]:not([data-disabled]):active{--_underline: currentColor;color:var(--_active)}[data-ui-link]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-link-focus-ring-offset, 1px)}[data-ui-link][data-disabled]{color:var(--slotted-link-color-disabled, var(--slotted-disabled-foreground, GrayText));cursor:not-allowed}[data-ui-link] [data-part-external-icon]{--slotted-icon-size: var(--slotted-link-external-icon-size, 1em);margin-inline-start:var(--slotted-link-external-icon-gap, .15em)}[data-ui-link][aria-current]:not([aria-current=false]){--_rest: var(--slotted-link-color-current, var(--slotted-text, CanvasText))}@media(forced-colors:active){[data-ui-link]{text-decoration-line:underline}}}\n", "@layer slotted.components{[data-ui-visually-hidden]:not([data-focusable]:focus-within){block-size:1px;border:0;clip-path:inset(50%);inline-size:1px;inset-block-start:0;inset-inline-start:0;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap}}\n"], dependencies: [{ kind: "component", type: SlGlyph, selector: "svg[slGlyph]", inputs: ["name", "solid"] }, { kind: "component", type: SlIcon, selector: "[slIcon]", inputs: ["directional", "label", "size", "tone"], exportAs: ["slIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
153
153
  }
154
154
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImport: i0, type: SlLink, decorators: [{
155
155
  type: Component,
156
- args: [{ selector: 'a[slLink]', standalone: true, imports: [SlGlyph, SlIcon], template: `<ng-content></ng-content>@if (newTab()) {&#8288;<span aria-hidden="true" data-part="external-icon"><span slIcon directional><svg slGlyph name="external"></svg></span></span><span data-part="external-hint" data-ui="visually-hidden">{{ hint() }}</span>&#8288;}`, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, exportAs: 'slLink', host: {
156
+ args: [{ selector: 'a[slLink]', standalone: true, imports: [SlGlyph, SlIcon], template: `<ng-content></ng-content>@if (newTab()) {&#8288;<span aria-hidden="true" data-part="external-icon" data-part-external-icon=""><span slIcon directional><svg slGlyph name="external"></svg></span></span><span data-part="external-hint" data-part-external-hint="" data-ui="visually-hidden" data-ui-visually-hidden="">{{ hint() }}</span>&#8288;}`, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, exportAs: 'slLink', host: {
157
157
  'data-ui': 'link',
158
+ 'data-ui-link': '',
158
159
  'data-part': 'root',
160
+ 'data-part-root': '',
159
161
  '[attr.data-underline]': 'underlineValue()',
160
162
  '[attr.data-variant]': 'variantValue()',
161
163
  '[attr.data-visited]': 'visitedValue() ? "" : null',
@@ -163,7 +165,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.7", ngImpor
163
165
  '[attr.aria-disabled]': 'disabled() ? "true" : null',
164
166
  '[attr.role]': 'disabled() ? "link" : null',
165
167
  '[attr.tabindex]': 'tabIndex()',
166
- }, styles: ["@layer slotted.components{[data-ui=link]{--_strong: var(--slotted-text, CanvasText);--_rest: var(--slotted-link-color, var(--slotted-tone-accent-text, LinkText));--_hover: var( --slotted-link-color-hover, color-mix(in oklab, var(--_rest) 65%, var(--_strong)) );--_active: var( --slotted-link-color-active, color-mix(in oklab, var(--_rest) 35%, var(--_strong)) );--_visited: var( --slotted-link-color-visited, color-mix(in oklab, var(--_rest) 40%, var(--slotted-text-muted, GrayText)) );--_underline: var( --slotted-link-underline-color, color-mix(in oklab, currentColor 55%, transparent) );border-radius:var(--slotted-link-radius, var(--slotted-control-radius, 4px));color:var(--_rest);inline-size:fit-content;overflow-wrap:anywhere;text-decoration-color:var(--_underline);text-decoration-line:underline;text-decoration-thickness:var(--slotted-link-underline-thickness, from-font);text-underline-offset:var(--slotted-link-underline-offset, .15em);transition:color var(--slotted-duration-short) var(--slotted-easing-standard),text-decoration-color var(--slotted-duration-short) var(--slotted-easing-standard)}[data-ui=link][data-variant=neutral]{--_rest: var(--slotted-link-color, currentColor);--_hover: var(--slotted-link-color-hover, var(--slotted-tone-accent-text, LinkText));--_active: var( --slotted-link-color-active, color-mix(in oklab, var(--slotted-tone-accent-text, LinkText) 65%, var(--_strong)) )}[data-ui=link][data-variant=inverse]{--_strong: var(--slotted-text-inverse, Canvas);--_rest: var(--slotted-link-color, var(--slotted-text-inverse, Canvas))}[data-ui=link][data-underline=hover],[data-ui=link][data-underline=none]{text-decoration-line:none}[data-ui=link][data-underline=hover]:not([data-disabled]):hover{text-decoration-line:underline}[data-ui=link][data-underline=hover]:focus-visible{text-decoration-line:underline}[data-ui=link][data-visited]:visited{color:var(--_visited)}[data-ui=link]:not([data-disabled]):hover{--_underline: currentColor;color:var(--_hover)}[data-ui=link]:not([data-disabled]):active{--_underline: currentColor;color:var(--_active)}[data-ui=link]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-link-focus-ring-offset, 1px)}[data-ui=link][data-disabled]{color:var(--slotted-link-color-disabled, var(--slotted-disabled-foreground, GrayText));cursor:not-allowed}[data-ui=link] [data-part=external-icon]{--slotted-icon-size: var(--slotted-link-external-icon-size, 1em);margin-inline-start:var(--slotted-link-external-icon-gap, .15em)}[data-ui=link][aria-current]:not([aria-current=false]){--_rest: var(--slotted-link-color-current, var(--slotted-text, CanvasText))}@media(forced-colors:active){[data-ui=link]{text-decoration-line:underline}}}\n", "@layer slotted.components{[data-ui=visually-hidden]:not([data-focusable]:focus-within){block-size:1px;border:0;clip-path:inset(50%);inline-size:1px;inset-block-start:0;inset-inline-start:0;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap}}\n"] }]
168
+ }, styles: ["@layer slotted.components{[data-ui-link]{--_strong: var(--slotted-text, CanvasText);--_rest: var(--slotted-link-color, var(--slotted-tone-accent-text, LinkText));--_hover: var( --slotted-link-color-hover, color-mix(in oklab, var(--_rest) 65%, var(--_strong)) );--_active: var( --slotted-link-color-active, color-mix(in oklab, var(--_rest) 35%, var(--_strong)) );--_visited: var( --slotted-link-color-visited, color-mix(in oklab, var(--_rest) 40%, var(--slotted-text-muted, GrayText)) );--_underline: var( --slotted-link-underline-color, color-mix(in oklab, currentColor 55%, transparent) );border-radius:var(--slotted-link-radius, var(--slotted-control-radius, 4px));color:var(--_rest);inline-size:fit-content;overflow-wrap:anywhere;text-decoration-color:var(--_underline);text-decoration-line:underline;text-decoration-thickness:var(--slotted-link-underline-thickness, from-font);text-underline-offset:var(--slotted-link-underline-offset, .15em);transition:color var(--slotted-duration-short) var(--slotted-easing-standard),text-decoration-color var(--slotted-duration-short) var(--slotted-easing-standard)}[data-ui-link][data-variant=neutral]{--_rest: var(--slotted-link-color, currentColor);--_hover: var(--slotted-link-color-hover, var(--slotted-tone-accent-text, LinkText));--_active: var( --slotted-link-color-active, color-mix(in oklab, var(--slotted-tone-accent-text, LinkText) 65%, var(--_strong)) )}[data-ui-link][data-variant=inverse]{--_strong: var(--slotted-text-inverse, Canvas);--_rest: var(--slotted-link-color, var(--slotted-text-inverse, Canvas))}[data-ui-link][data-underline=hover],[data-ui-link][data-underline=none]{text-decoration-line:none}[data-ui-link][data-underline=hover]:not([data-disabled]):hover{text-decoration-line:underline}[data-ui-link][data-underline=hover]:focus-visible{text-decoration-line:underline}[data-ui-link][data-visited]:visited{color:var(--_visited)}[data-ui-link]:not([data-disabled]):hover{--_underline: currentColor;color:var(--_hover)}[data-ui-link]:not([data-disabled]):active{--_underline: currentColor;color:var(--_active)}[data-ui-link]:focus-visible{outline:var(--slotted-focus-ring-width, 2px) solid var(--slotted-focus-ring-color, Highlight);outline-offset:var(--slotted-link-focus-ring-offset, 1px)}[data-ui-link][data-disabled]{color:var(--slotted-link-color-disabled, var(--slotted-disabled-foreground, GrayText));cursor:not-allowed}[data-ui-link] [data-part-external-icon]{--slotted-icon-size: var(--slotted-link-external-icon-size, 1em);margin-inline-start:var(--slotted-link-external-icon-gap, .15em)}[data-ui-link][aria-current]:not([aria-current=false]){--_rest: var(--slotted-link-color-current, var(--slotted-text, CanvasText))}@media(forced-colors:active){[data-ui-link]{text-decoration-line:underline}}}\n", "@layer slotted.components{[data-ui-visually-hidden]:not([data-focusable]:focus-within){block-size:1px;border:0;clip-path:inset(50%);inline-size:1px;inset-block-start:0;inset-inline-start:0;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap}}\n"] }]
167
169
  }], ctorParameters: () => [], propDecorators: { disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], external: [{ type: i0.Input, args: [{ isSignal: true, alias: "external", required: false }] }], messages: [{ type: i0.Input, args: [{ isSignal: true, alias: "messages", required: false }] }], underline: [{ type: i0.Input, args: [{ isSignal: true, alias: "underline", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], visited: [{ type: i0.Input, args: [{ isSignal: true, alias: "visited", required: false }] }] } });
168
170
  /**
169
171
  * Absence has to survive the transform. `booleanAttribute` maps an unset input
@@ -1 +1 @@
1
- {"version":3,"file":"slotted-angular-link.mjs","sources":["../../link/src/link-defaults.ts","../../link/src/link.constants.ts","../../link/src/link.ts","../../link/src/slotted-angular-link.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\n\nimport type { LinkUnderline, LinkVariant } from './link.constants';\n\n/** What every link on the page looks like before it states anything of its own. */\nexport interface LinkDefaults {\n underline?: LinkUnderline;\n variant?: LinkVariant;\n visited?: boolean;\n}\n\nexport const LINK_DEFAULTS_TOKEN = new InjectionToken<LinkDefaults>('slotted link defaults', {\n providedIn: 'root',\n factory: (): LinkDefaults => ({}),\n});\n\n/**\n * An application decides once whether its links are underlined, how they are\n * painted, and whether a followed destination is marked. A link that states\n * any of those itself still wins: an explicit input is never overridden by the\n * token. Its words come from the language in force (`provideSlotted`).\n */\nexport function provideLinkDefaults(defaults: LinkDefaults) {\n return { provide: LINK_DEFAULTS_TOKEN, useValue: defaults };\n}\n\nexport function injectLinkDefaults(): LinkDefaults {\n return inject(LINK_DEFAULTS_TOKEN);\n}\n","export type LinkUnderline = 'always' | 'hover' | 'none';\nexport type LinkVariant = 'accent' | 'neutral' | 'inverse';\n\n/**\n * The zero-width character whose only job is to forbid a line break. It keeps\n * the marker with the last word of the link, and unlike a no-break space it\n * carries no width of its own — the distance between word and glyph is the\n * stylesheet's decision, not this string's.\n */\nexport const WORD_JOINER = '\\u2060';\n\nexport const LINK_DEFAULT_UNDERLINE: LinkUnderline = 'always';\nexport const LINK_DEFAULT_VARIANT: LinkVariant = 'accent';\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n HostAttributeToken,\n inject,\n input,\n Renderer2,\n ViewEncapsulation,\n} from '@angular/core';\nimport { injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { linkMessages, type LinkMessages, type PartialMessages } from '@slotted/core/i18n';\n\nimport { injectLinkDefaults } from './link-defaults';\nimport {\n LINK_DEFAULT_UNDERLINE,\n LINK_DEFAULT_VARIANT,\n type LinkUnderline,\n type LinkVariant,\n} from './link.constants';\n\n/**\n * Text that goes somewhere. The directive sits on the consumer's own anchor,\n * so the role, `Enter`, the context menu, the middle click and every modified\n * click are the platform's — and `routerLink` composes on the same element,\n * because the element was never the family's to begin with. `button` owns the\n * action that has no URL, and `ButtonLink` the navigation that wants the\n * action surface.\n *\n * `rel` and `target` are written imperatively rather than through host\n * bindings, and only when the anchor carries neither. A host binding writes on\n * every change detection pass, and the value that means \"leave it alone\" is\n * `null`, which removes the attribute — so an anchor whose consumer binds\n * `[attr.target]` itself would lose it to this component. Adding what is\n * missing and touching nothing else is the only shape that keeps the\n * consumer's explicit value winning.\n */\n@Component({\n selector: 'a[slLink]',\n standalone: true,\n imports: [SlGlyph, SlIcon],\n /**\n * The joiner is a text node of its own, before the marker and outside it:\n * what it forbids is the line break between the last word of the link and\n * the inline box that follows it. Every space in this template is therefore\n * load-bearing — Angular collapses a newline between two nodes into one\n * space, and a space before the joiner puts back exactly the break the\n * joiner exists to forbid. The formatter is told to leave it alone, and\n * `link.spec.ts` asserts the rendered text in case it stops listening. The\n * arrow mirrors in a right-to-left document, which is what `directional` is.\n */\n // prettier-ignore\n template: `<ng-content></ng-content>@if (newTab()) {&#8288;<span aria-hidden=\"true\" data-part=\"external-icon\"><span slIcon directional><svg slGlyph name=\"external\"></svg></span></span><span data-part=\"external-hint\" data-ui=\"visually-hidden\">{{ hint() }}</span>&#8288;}`,\n styleUrls: [\n '../../../styles/src/link/link.css',\n '../../../styles/src/visually-hidden/visually-hidden.css',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'slLink',\n host: {\n 'data-ui': 'link',\n 'data-part': 'root',\n '[attr.data-underline]': 'underlineValue()',\n '[attr.data-variant]': 'variantValue()',\n '[attr.data-visited]': 'visitedValue() ? \"\" : null',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[attr.role]': 'disabled() ? \"link\" : null',\n '[attr.tabindex]': 'tabIndex()',\n },\n})\nexport class SlLink {\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly external = input(false, { transform: booleanAttribute });\n /**\n * Words laid over the catalog of the language in force: the warning a link\n * to a new tab announces (`externalHint`).\n */\n readonly messages = input<PartialMessages<LinkMessages> | undefined>(undefined);\n readonly underline = input<LinkUnderline | undefined>(undefined);\n readonly variant = input<LinkVariant | undefined>(undefined);\n readonly visited = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n\n private readonly defaults = injectLinkDefaults();\n /** The family's words in the language in force, with this link's `messages` laid over them. */\n readonly t = injectMessages(linkMessages, this.messages);\n private readonly element = inject(ElementRef<HTMLAnchorElement>).nativeElement;\n private readonly renderer = inject(Renderer2);\n\n /**\n * What the consumer wrote on their own anchor, read once through the token\n * that exists for exactly this: a static attribute has to survive the\n * component that was placed on top of it.\n */\n private readonly ownRel = inject(new HostAttributeToken('rel'), { optional: true });\n private readonly ownTarget = inject(new HostAttributeToken('target'), { optional: true });\n private readonly ownTabIndex = inject(new HostAttributeToken('tabindex'), { optional: true });\n\n /** The destination the anchor had before it was made unavailable. */\n private withheldHref: string | null = null;\n\n readonly underlineValue = computed(\n () => this.underline() ?? this.defaults.underline ?? LINK_DEFAULT_UNDERLINE,\n );\n readonly variantValue = computed(\n () => this.variant() ?? this.defaults.variant ?? LINK_DEFAULT_VARIANT,\n );\n readonly visitedValue = computed(() => this.visited() ?? this.defaults.visited ?? false);\n\n /**\n * The fact, not the prop. `external` is the way to state it, and an anchor\n * the consumer already pointed at a new tab has stated the same thing.\n */\n readonly newTab = computed(() => this.external() || this.ownTarget === '_blank');\n readonly hint = computed(() => ` ${this.t('externalHint')}`);\n\n /**\n * A disabled link keeps its place in the tab sequence: without an `href` the\n * anchor would drop out of it, so the zero is stated rather than inherited.\n */\n readonly tabIndex = computed(() =>\n this.disabled() ? (this.ownTabIndex ?? '0') : this.ownTabIndex,\n );\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n const listen = (type: 'click' | 'auxclick' | 'keydown', listener: EventListener) => {\n this.element.addEventListener(type, listener, { capture: true });\n destroyRef.onDestroy(() =>\n this.element.removeEventListener(type, listener, { capture: true }),\n );\n };\n\n listen('click', (event) => this.refuse(event));\n listen('auxclick', (event) => this.refuse(event));\n listen('keydown', (event) => {\n if ((event as KeyboardEvent).key === 'Enter') this.refuse(event);\n });\n\n effect(() => {\n const newTab = this.newTab();\n this.write('target', newTab && this.ownTarget === null ? '_blank' : null);\n this.write('rel', newTab && this.ownRel === null ? 'noopener noreferrer' : null);\n });\n\n /**\n * An anchor that keeps its destination and only refuses `click` still\n * navigates on a middle click, on a modified click and from the context\n * menu. Taking the destination away is what actually disables it, and it\n * is given back the moment the link becomes available again.\n */\n effect(() => {\n if (this.disabled()) {\n this.withheldHref ??= this.element.getAttribute('href');\n this.renderer.removeAttribute(this.element, 'href');\n return;\n }\n if (this.withheldHref === null) return;\n this.renderer.setAttribute(this.element, 'href', this.withheldHref);\n this.withheldHref = null;\n });\n }\n\n /** Adds what the anchor is missing, and removes only what it added. */\n private write(attribute: 'rel' | 'target', value: string | null) {\n if (value !== null) {\n this.renderer.setAttribute(this.element, attribute, value);\n return;\n }\n const own = attribute === 'rel' ? this.ownRel : this.ownTarget;\n if (own === null) this.renderer.removeAttribute(this.element, attribute);\n }\n\n private refuse(event: Event) {\n if (!this.disabled()) return;\n event.preventDefault();\n event.stopImmediatePropagation();\n event.stopPropagation();\n }\n}\n\n/**\n * Absence has to survive the transform. `booleanAttribute` maps an unset input\n * to `false`, and `false` is a value: it would stop the application's own\n * decision about visited links from ever reaching a link that says nothing.\n */\nfunction optionalBoolean(value: boolean | string | undefined) {\n return value === undefined ? undefined : booleanAttribute(value);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slotted-angular-link.mjs","sources":["../../link/src/link-defaults.ts","../../link/src/link.constants.ts","../../link/src/link.ts","../../link/src/slotted-angular-link.ts"],"sourcesContent":["import { inject, InjectionToken } from '@angular/core';\n\nimport type { LinkUnderline, LinkVariant } from './link.constants';\n\n/** What every link on the page looks like before it states anything of its own. */\nexport interface LinkDefaults {\n underline?: LinkUnderline;\n variant?: LinkVariant;\n visited?: boolean;\n}\n\nexport const LINK_DEFAULTS_TOKEN = new InjectionToken<LinkDefaults>('slotted link defaults', {\n providedIn: 'root',\n factory: (): LinkDefaults => ({}),\n});\n\n/**\n * An application decides once whether its links are underlined, how they are\n * painted, and whether a followed destination is marked. A link that states\n * any of those itself still wins: an explicit input is never overridden by the\n * token. Its words come from the language in force (`provideSlotted`).\n */\nexport function provideLinkDefaults(defaults: LinkDefaults) {\n return { provide: LINK_DEFAULTS_TOKEN, useValue: defaults };\n}\n\nexport function injectLinkDefaults(): LinkDefaults {\n return inject(LINK_DEFAULTS_TOKEN);\n}\n","export type LinkUnderline = 'always' | 'hover' | 'none';\nexport type LinkVariant = 'accent' | 'neutral' | 'inverse';\n\n/**\n * The zero-width character whose only job is to forbid a line break. It keeps\n * the marker with the last word of the link, and unlike a no-break space it\n * carries no width of its own — the distance between word and glyph is the\n * stylesheet's decision, not this string's.\n */\nexport const WORD_JOINER = '\\u2060';\n\nexport const LINK_DEFAULT_UNDERLINE: LinkUnderline = 'always';\nexport const LINK_DEFAULT_VARIANT: LinkVariant = 'accent';\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n HostAttributeToken,\n inject,\n input,\n Renderer2,\n ViewEncapsulation,\n} from '@angular/core';\nimport { injectMessages } from '@slotted/angular/i18n';\nimport { SlGlyph, SlIcon } from '@slotted/angular/icon';\nimport { linkMessages, type LinkMessages, type PartialMessages } from '@slotted/core/i18n';\n\nimport { injectLinkDefaults } from './link-defaults';\nimport {\n LINK_DEFAULT_UNDERLINE,\n LINK_DEFAULT_VARIANT,\n type LinkUnderline,\n type LinkVariant,\n} from './link.constants';\n\n/**\n * Text that goes somewhere. The directive sits on the consumer's own anchor,\n * so the role, `Enter`, the context menu, the middle click and every modified\n * click are the platform's — and `routerLink` composes on the same element,\n * because the element was never the family's to begin with. `button` owns the\n * action that has no URL, and `ButtonLink` the navigation that wants the\n * action surface.\n *\n * `rel` and `target` are written imperatively rather than through host\n * bindings, and only when the anchor carries neither. A host binding writes on\n * every change detection pass, and the value that means \"leave it alone\" is\n * `null`, which removes the attribute — so an anchor whose consumer binds\n * `[attr.target]` itself would lose it to this component. Adding what is\n * missing and touching nothing else is the only shape that keeps the\n * consumer's explicit value winning.\n */\n@Component({\n selector: 'a[slLink]',\n standalone: true,\n imports: [SlGlyph, SlIcon],\n /**\n * The joiner is a text node of its own, before the marker and outside it:\n * what it forbids is the line break between the last word of the link and\n * the inline box that follows it. Every space in this template is therefore\n * load-bearing — Angular collapses a newline between two nodes into one\n * space, and a space before the joiner puts back exactly the break the\n * joiner exists to forbid. The formatter is told to leave it alone, and\n * `link.spec.ts` asserts the rendered text in case it stops listening. The\n * arrow mirrors in a right-to-left document, which is what `directional` is.\n */\n // prettier-ignore\n template: `<ng-content></ng-content>@if (newTab()) {&#8288;<span aria-hidden=\"true\" data-part=\"external-icon\" data-part-external-icon=\"\"><span slIcon directional><svg slGlyph name=\"external\"></svg></span></span><span data-part=\"external-hint\" data-part-external-hint=\"\" data-ui=\"visually-hidden\" data-ui-visually-hidden=\"\">{{ hint() }}</span>&#8288;}`,\n styleUrls: [\n '../../../styles/src/link/link.css',\n '../../../styles/src/visually-hidden/visually-hidden.css',\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n exportAs: 'slLink',\n host: {\n 'data-ui': 'link',\n 'data-ui-link': '',\n 'data-part': 'root',\n 'data-part-root': '',\n '[attr.data-underline]': 'underlineValue()',\n '[attr.data-variant]': 'variantValue()',\n '[attr.data-visited]': 'visitedValue() ? \"\" : null',\n '[attr.data-disabled]': 'disabled() ? \"\" : null',\n '[attr.aria-disabled]': 'disabled() ? \"true\" : null',\n '[attr.role]': 'disabled() ? \"link\" : null',\n '[attr.tabindex]': 'tabIndex()',\n },\n})\nexport class SlLink {\n readonly disabled = input(false, { transform: booleanAttribute });\n readonly external = input(false, { transform: booleanAttribute });\n /**\n * Words laid over the catalog of the language in force: the warning a link\n * to a new tab announces (`externalHint`).\n */\n readonly messages = input<PartialMessages<LinkMessages> | undefined>(undefined);\n readonly underline = input<LinkUnderline | undefined>(undefined);\n readonly variant = input<LinkVariant | undefined>(undefined);\n readonly visited = input<boolean | undefined, boolean | string | undefined>(undefined, {\n transform: optionalBoolean,\n });\n\n private readonly defaults = injectLinkDefaults();\n /** The family's words in the language in force, with this link's `messages` laid over them. */\n readonly t = injectMessages(linkMessages, this.messages);\n private readonly element = inject(ElementRef<HTMLAnchorElement>).nativeElement;\n private readonly renderer = inject(Renderer2);\n\n /**\n * What the consumer wrote on their own anchor, read once through the token\n * that exists for exactly this: a static attribute has to survive the\n * component that was placed on top of it.\n */\n private readonly ownRel = inject(new HostAttributeToken('rel'), { optional: true });\n private readonly ownTarget = inject(new HostAttributeToken('target'), { optional: true });\n private readonly ownTabIndex = inject(new HostAttributeToken('tabindex'), { optional: true });\n\n /** The destination the anchor had before it was made unavailable. */\n private withheldHref: string | null = null;\n\n readonly underlineValue = computed(\n () => this.underline() ?? this.defaults.underline ?? LINK_DEFAULT_UNDERLINE,\n );\n readonly variantValue = computed(\n () => this.variant() ?? this.defaults.variant ?? LINK_DEFAULT_VARIANT,\n );\n readonly visitedValue = computed(() => this.visited() ?? this.defaults.visited ?? false);\n\n /**\n * The fact, not the prop. `external` is the way to state it, and an anchor\n * the consumer already pointed at a new tab has stated the same thing.\n */\n readonly newTab = computed(() => this.external() || this.ownTarget === '_blank');\n readonly hint = computed(() => ` ${this.t('externalHint')}`);\n\n /**\n * A disabled link keeps its place in the tab sequence: without an `href` the\n * anchor would drop out of it, so the zero is stated rather than inherited.\n */\n readonly tabIndex = computed(() =>\n this.disabled() ? (this.ownTabIndex ?? '0') : this.ownTabIndex,\n );\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n const listen = (type: 'click' | 'auxclick' | 'keydown', listener: EventListener) => {\n this.element.addEventListener(type, listener, { capture: true });\n destroyRef.onDestroy(() =>\n this.element.removeEventListener(type, listener, { capture: true }),\n );\n };\n\n listen('click', (event) => this.refuse(event));\n listen('auxclick', (event) => this.refuse(event));\n listen('keydown', (event) => {\n if ((event as KeyboardEvent).key === 'Enter') this.refuse(event);\n });\n\n effect(() => {\n const newTab = this.newTab();\n this.write('target', newTab && this.ownTarget === null ? '_blank' : null);\n this.write('rel', newTab && this.ownRel === null ? 'noopener noreferrer' : null);\n });\n\n /**\n * An anchor that keeps its destination and only refuses `click` still\n * navigates on a middle click, on a modified click and from the context\n * menu. Taking the destination away is what actually disables it, and it\n * is given back the moment the link becomes available again.\n */\n effect(() => {\n if (this.disabled()) {\n this.withheldHref ??= this.element.getAttribute('href');\n this.renderer.removeAttribute(this.element, 'href');\n return;\n }\n if (this.withheldHref === null) return;\n this.renderer.setAttribute(this.element, 'href', this.withheldHref);\n this.withheldHref = null;\n });\n }\n\n /** Adds what the anchor is missing, and removes only what it added. */\n private write(attribute: 'rel' | 'target', value: string | null) {\n if (value !== null) {\n this.renderer.setAttribute(this.element, attribute, value);\n return;\n }\n const own = attribute === 'rel' ? this.ownRel : this.ownTarget;\n if (own === null) this.renderer.removeAttribute(this.element, attribute);\n }\n\n private refuse(event: Event) {\n if (!this.disabled()) return;\n event.preventDefault();\n event.stopImmediatePropagation();\n event.stopPropagation();\n }\n}\n\n/**\n * Absence has to survive the transform. `booleanAttribute` maps an unset input\n * to `false`, and `false` is a value: it would stop the application's own\n * decision about visited links from ever reaching a link that says nothing.\n */\nfunction optionalBoolean(value: boolean | string | undefined) {\n return value === undefined ? undefined : booleanAttribute(value);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}