@kouji-ui/core 0.1.1 → 0.1.2

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 (535) hide show
  1. package/fesm2022/kouji-ui-core.mjs +26789 -0
  2. package/fesm2022/kouji-ui-core.mjs.map +1 -0
  3. package/package.json +5 -6
  4. package/types/kouji-ui-core.d.ts +13545 -0
  5. package/.turbo/turbo-build.log +0 -30
  6. package/CHANGELOG.md +0 -190
  7. package/ng-package.json +0 -11
  8. package/src/a11y/.gitkeep +0 -0
  9. package/src/a11y/aria-describedby.spec.ts +0 -55
  10. package/src/a11y/aria-describedby.ts +0 -37
  11. package/src/a11y/aria-labelledby.spec.ts +0 -55
  12. package/src/a11y/aria-labelledby.ts +0 -38
  13. package/src/a11y/focus-trap.spec.ts +0 -86
  14. package/src/a11y/focus-trap.ts +0 -72
  15. package/src/a11y/index.ts +0 -10
  16. package/src/a11y/live-region.spec.ts +0 -58
  17. package/src/a11y/live-region.ts +0 -50
  18. package/src/a11y/roving-tabindex.spec.ts +0 -201
  19. package/src/a11y/roving-tabindex.ts +0 -153
  20. package/src/a11y/visually-hidden.spec.ts +0 -34
  21. package/src/a11y/visually-hidden.ts +0 -26
  22. package/src/accordion/accordion.context.ts +0 -44
  23. package/src/accordion/accordion.spec.ts +0 -242
  24. package/src/accordion/accordion.ts +0 -401
  25. package/src/accordion/index.ts +0 -8
  26. package/src/alert/alert.context.ts +0 -28
  27. package/src/alert/alert.spec.ts +0 -217
  28. package/src/alert/alert.ts +0 -417
  29. package/src/alert/config.ts +0 -46
  30. package/src/alert/index.ts +0 -19
  31. package/src/avatar/avatar-group.context.ts +0 -45
  32. package/src/avatar/avatar-group.spec.ts +0 -358
  33. package/src/avatar/avatar-group.ts +0 -259
  34. package/src/avatar/avatar.spec.ts +0 -18
  35. package/src/avatar/avatar.ts +0 -39
  36. package/src/avatar/index.ts +0 -11
  37. package/src/badge/badge.spec.ts +0 -28
  38. package/src/badge/badge.ts +0 -35
  39. package/src/badge/index.ts +0 -1
  40. package/src/breadcrumb/breadcrumb-current.ts +0 -38
  41. package/src/breadcrumb/breadcrumb-ellipsis.ts +0 -71
  42. package/src/breadcrumb/breadcrumb-item.ts +0 -41
  43. package/src/breadcrumb/breadcrumb-link.ts +0 -44
  44. package/src/breadcrumb/breadcrumb-list.ts +0 -42
  45. package/src/breadcrumb/breadcrumb-separator.ts +0 -45
  46. package/src/breadcrumb/breadcrumb.context.ts +0 -45
  47. package/src/breadcrumb/breadcrumb.spec.ts +0 -354
  48. package/src/breadcrumb/breadcrumb.ts +0 -239
  49. package/src/breadcrumb/config.ts +0 -84
  50. package/src/breadcrumb/index.ts +0 -18
  51. package/src/button/_examples/button.example.ts +0 -71
  52. package/src/button/_examples/button.finance.example.ts +0 -83
  53. package/src/button/_examples/button.retro.example.ts +0 -91
  54. package/src/button/_examples/button.sizes.example.ts +0 -60
  55. package/src/button/_examples/index.ts +0 -6
  56. package/src/button/button.spec.ts +0 -163
  57. package/src/button/button.ts +0 -142
  58. package/src/button/config.spec.ts +0 -33
  59. package/src/button/config.ts +0 -45
  60. package/src/button/index.ts +0 -2
  61. package/src/button-group/button-group.context.ts +0 -28
  62. package/src/button-group/button-group.spec.ts +0 -99
  63. package/src/button-group/button-group.ts +0 -99
  64. package/src/button-group/index.ts +0 -2
  65. package/src/calendar/calendar-day.ts +0 -102
  66. package/src/calendar/calendar-grid.ts +0 -90
  67. package/src/calendar/calendar-header.ts +0 -65
  68. package/src/calendar/calendar.context.ts +0 -53
  69. package/src/calendar/calendar.spec.ts +0 -225
  70. package/src/calendar/calendar.ts +0 -233
  71. package/src/calendar/date-utils.ts +0 -225
  72. package/src/calendar/index.ts +0 -28
  73. package/src/carousel/carousel.context.ts +0 -81
  74. package/src/carousel/carousel.spec.ts +0 -337
  75. package/src/carousel/carousel.ts +0 -919
  76. package/src/carousel/index.ts +0 -22
  77. package/src/cascade-select/cascade-select-option.ts +0 -205
  78. package/src/cascade-select/cascade-select-panel.ts +0 -106
  79. package/src/cascade-select/cascade-select-root.ts +0 -265
  80. package/src/cascade-select/cascade-select-sub-panel.ts +0 -168
  81. package/src/cascade-select/cascade-select-trigger.ts +0 -44
  82. package/src/cascade-select/cascade-select.context.ts +0 -71
  83. package/src/cascade-select/cascade-select.spec.ts +0 -241
  84. package/src/cascade-select/cascade-select.ts +0 -5
  85. package/src/cascade-select/index.ts +0 -11
  86. package/src/chart/chart.spec.ts +0 -27
  87. package/src/chart/chart.ts +0 -52
  88. package/src/chart/index.ts +0 -1
  89. package/src/chat/chat-avatar.ts +0 -31
  90. package/src/chat/chat-bubble.ts +0 -49
  91. package/src/chat/chat-footer.ts +0 -67
  92. package/src/chat/chat-header.ts +0 -41
  93. package/src/chat/chat-log.ts +0 -43
  94. package/src/chat/chat.context.ts +0 -64
  95. package/src/chat/chat.spec.ts +0 -341
  96. package/src/chat/chat.ts +0 -191
  97. package/src/chat/config.ts +0 -53
  98. package/src/chat/index.ts +0 -21
  99. package/src/checkbox/checkbox.spec.ts +0 -35
  100. package/src/checkbox/checkbox.ts +0 -89
  101. package/src/checkbox/index.ts +0 -1
  102. package/src/color-picker/color-picker.context.ts +0 -74
  103. package/src/color-picker/color-picker.spec.ts +0 -241
  104. package/src/color-picker/color-picker.ts +0 -698
  105. package/src/color-picker/color-picker.utils.ts +0 -140
  106. package/src/color-picker/index.ts +0 -28
  107. package/src/combobox/combobox-input.ts +0 -143
  108. package/src/combobox/combobox-listbox.ts +0 -49
  109. package/src/combobox/combobox-option.ts +0 -43
  110. package/src/combobox/combobox-root.ts +0 -281
  111. package/src/combobox/combobox.spec.ts +0 -75
  112. package/src/combobox/combobox.ts +0 -4
  113. package/src/combobox/index.ts +0 -4
  114. package/src/command-palette/command-empty.ts +0 -36
  115. package/src/command-palette/command-group.ts +0 -21
  116. package/src/command-palette/command-input.ts +0 -70
  117. package/src/command-palette/command-item.ts +0 -60
  118. package/src/command-palette/command-list.ts +0 -25
  119. package/src/command-palette/command-palette-dialog.ts +0 -74
  120. package/src/command-palette/command-palette-trigger.ts +0 -64
  121. package/src/command-palette/command-palette.filters.ts +0 -53
  122. package/src/command-palette/command-palette.spec.ts +0 -349
  123. package/src/command-palette/command-palette.ts +0 -204
  124. package/src/command-palette/command-separator.ts +0 -18
  125. package/src/command-palette/index.ts +0 -15
  126. package/src/confirm-popup/confirm-popup-action.ts +0 -39
  127. package/src/confirm-popup/confirm-popup-cancel.ts +0 -38
  128. package/src/confirm-popup/confirm-popup-content.ts +0 -113
  129. package/src/confirm-popup/confirm-popup-message.ts +0 -36
  130. package/src/confirm-popup/confirm-popup-trigger.ts +0 -31
  131. package/src/confirm-popup/confirm-popup.context.ts +0 -41
  132. package/src/confirm-popup/confirm-popup.spec.ts +0 -337
  133. package/src/confirm-popup/confirm-popup.ts +0 -109
  134. package/src/confirm-popup/index.ts +0 -12
  135. package/src/date-picker/date-picker-calendar.ts +0 -65
  136. package/src/date-picker/date-picker-trigger.ts +0 -215
  137. package/src/date-picker/date-picker.context.ts +0 -50
  138. package/src/date-picker/date-picker.spec.ts +0 -117
  139. package/src/date-picker/date-picker.ts +0 -127
  140. package/src/date-picker/index.ts +0 -7
  141. package/src/dialog/_examples/dialog.confirm.example.ts +0 -145
  142. package/src/dialog/_examples/dialog.example.ts +0 -106
  143. package/src/dialog/_examples/dialog.finance.example.ts +0 -121
  144. package/src/dialog/_examples/dialog.retro.example.ts +0 -126
  145. package/src/dialog/_examples/index.ts +0 -6
  146. package/src/dialog/dialog.ref.ts +0 -42
  147. package/src/dialog/dialog.service.ts +0 -66
  148. package/src/dialog/dialog.spec.ts +0 -37
  149. package/src/dialog/dialog.ts +0 -26
  150. package/src/dialog/index.ts +0 -3
  151. package/src/divider/divider.spec.ts +0 -223
  152. package/src/divider/divider.ts +0 -137
  153. package/src/divider/index.ts +0 -5
  154. package/src/drawer/drawer.ref.ts +0 -63
  155. package/src/drawer/drawer.service.ts +0 -106
  156. package/src/drawer/drawer.spec.ts +0 -117
  157. package/src/drawer/drawer.ts +0 -122
  158. package/src/drawer/index.ts +0 -10
  159. package/src/dropdown-menu/dropdown-menu-content.ts +0 -258
  160. package/src/dropdown-menu/dropdown-menu-group.ts +0 -31
  161. package/src/dropdown-menu/dropdown-menu-item.ts +0 -51
  162. package/src/dropdown-menu/dropdown-menu-label.ts +0 -41
  163. package/src/dropdown-menu/dropdown-menu-separator.ts +0 -27
  164. package/src/dropdown-menu/dropdown-menu-trigger.ts +0 -140
  165. package/src/dropdown-menu/dropdown-menu.spec.ts +0 -265
  166. package/src/dropdown-menu/dropdown-menu.ts +0 -60
  167. package/src/dropdown-menu/index.ts +0 -15
  168. package/src/example-components.ts +0 -42
  169. package/src/field/field-error.ts +0 -49
  170. package/src/field/field-group.ts +0 -39
  171. package/src/field/field-help.ts +0 -47
  172. package/src/field/field-label.ts +0 -30
  173. package/src/field/field.context.ts +0 -28
  174. package/src/field/field.spec.ts +0 -179
  175. package/src/field/field.ts +0 -121
  176. package/src/field/index.ts +0 -6
  177. package/src/file-upload/file-upload.context.ts +0 -89
  178. package/src/file-upload/file-upload.spec.ts +0 -290
  179. package/src/file-upload/file-upload.ts +0 -639
  180. package/src/file-upload/file-upload.types.ts +0 -59
  181. package/src/file-upload/index.ts +0 -23
  182. package/src/form/form-error-summary.ts +0 -87
  183. package/src/form/form-field.context.ts +0 -3
  184. package/src/form/form-field.spec.ts +0 -25
  185. package/src/form/form-field.ts +0 -52
  186. package/src/form/form.context.ts +0 -53
  187. package/src/form/form.spec.ts +0 -162
  188. package/src/form/form.ts +0 -326
  189. package/src/form/index.ts +0 -11
  190. package/src/icon/E2E.md +0 -14
  191. package/src/icon/icon.directive.spec.ts +0 -198
  192. package/src/icon/icon.directive.ts +0 -113
  193. package/src/icon/icon.mode.spec.ts +0 -29
  194. package/src/icon/icon.mode.ts +0 -23
  195. package/src/icon/icon.providers.spec.ts +0 -63
  196. package/src/icon/icon.providers.ts +0 -47
  197. package/src/icon/icon.resolver.spec.ts +0 -96
  198. package/src/icon/icon.resolver.ts +0 -49
  199. package/src/icon/icon.tokens.ts +0 -88
  200. package/src/icon/icon.types.ts +0 -48
  201. package/src/icon/index.ts +0 -21
  202. package/src/input/index.ts +0 -1
  203. package/src/input/input.spec.ts +0 -43
  204. package/src/input/input.ts +0 -89
  205. package/src/input-group/index.ts +0 -3
  206. package/src/input-group/input-group-addon.ts +0 -92
  207. package/src/input-group/input-group.context.ts +0 -27
  208. package/src/input-group/input-group.spec.ts +0 -186
  209. package/src/input-group/input-group.ts +0 -136
  210. package/src/input-mask/index.ts +0 -11
  211. package/src/input-mask/input-mask.compile.ts +0 -69
  212. package/src/input-mask/input-mask.engine.ts +0 -376
  213. package/src/input-mask/input-mask.presets.ts +0 -24
  214. package/src/input-mask/input-mask.spec.ts +0 -304
  215. package/src/input-mask/input-mask.tokens.ts +0 -49
  216. package/src/input-mask/input-mask.ts +0 -280
  217. package/src/input-otp/index.ts +0 -2
  218. package/src/input-otp/input-otp.context.ts +0 -41
  219. package/src/input-otp/input-otp.spec.ts +0 -308
  220. package/src/input-otp/input-otp.ts +0 -470
  221. package/src/kbd/index.ts +0 -1
  222. package/src/kbd/kbd.spec.ts +0 -127
  223. package/src/kbd/kbd.ts +0 -132
  224. package/src/link/config.ts +0 -44
  225. package/src/link/index.ts +0 -2
  226. package/src/link/link.spec.ts +0 -246
  227. package/src/link/link.ts +0 -226
  228. package/src/list/index.ts +0 -11
  229. package/src/list/list.spec.ts +0 -237
  230. package/src/list/list.ts +0 -277
  231. package/src/menubar/index.ts +0 -7
  232. package/src/menubar/menubar-item.ts +0 -204
  233. package/src/menubar/menubar.context.ts +0 -43
  234. package/src/menubar/menubar.spec.ts +0 -433
  235. package/src/menubar/menubar.ts +0 -309
  236. package/src/number-input/index.ts +0 -4
  237. package/src/number-input/number-input-group.ts +0 -64
  238. package/src/number-input/number-input.context.ts +0 -31
  239. package/src/number-input/number-input.format.ts +0 -148
  240. package/src/number-input/number-input.spec.ts +0 -170
  241. package/src/number-input/number-input.ts +0 -457
  242. package/src/number-input/number-stepper.ts +0 -193
  243. package/src/overlay-badge/index.ts +0 -7
  244. package/src/overlay-badge/overlay-badge-content.ts +0 -73
  245. package/src/overlay-badge/overlay-badge.context.ts +0 -37
  246. package/src/overlay-badge/overlay-badge.spec.ts +0 -220
  247. package/src/overlay-badge/overlay-badge.ts +0 -128
  248. package/src/pagination/config.ts +0 -82
  249. package/src/pagination/index.ts +0 -19
  250. package/src/pagination/page-tokens.ts +0 -78
  251. package/src/pagination/pagination-ellipsis.ts +0 -69
  252. package/src/pagination/pagination-first.ts +0 -84
  253. package/src/pagination/pagination-info.ts +0 -70
  254. package/src/pagination/pagination-item.ts +0 -81
  255. package/src/pagination/pagination-last.ts +0 -85
  256. package/src/pagination/pagination-next.ts +0 -86
  257. package/src/pagination/pagination-previous.ts +0 -90
  258. package/src/pagination/pagination.context.ts +0 -52
  259. package/src/pagination/pagination.spec.ts +0 -388
  260. package/src/pagination/pagination.ts +0 -288
  261. package/src/password-input/index.ts +0 -15
  262. package/src/password-input/password-input.context.ts +0 -65
  263. package/src/password-input/password-input.scorer.ts +0 -34
  264. package/src/password-input/password-input.spec.ts +0 -274
  265. package/src/password-input/password-input.ts +0 -488
  266. package/src/popover/_examples/index.ts +0 -5
  267. package/src/popover/_examples/popover.example.ts +0 -92
  268. package/src/popover/_examples/popover.finance.example.ts +0 -106
  269. package/src/popover/_examples/popover.retro.example.ts +0 -103
  270. package/src/popover/index.ts +0 -5
  271. package/src/popover/popover-arrow.ts +0 -30
  272. package/src/popover/popover-close.ts +0 -36
  273. package/src/popover/popover-content.ts +0 -41
  274. package/src/popover/popover-title.ts +0 -39
  275. package/src/popover/popover-trigger.ts +0 -40
  276. package/src/popover/popover.spec.ts +0 -59
  277. package/src/popover/popover.ts +0 -5
  278. package/src/presets/bind-presets.spec.ts +0 -50
  279. package/src/presets/bind-presets.ts +0 -43
  280. package/src/presets/index.ts +0 -3
  281. package/src/presets/size.spec.ts +0 -67
  282. package/src/presets/size.ts +0 -59
  283. package/src/presets/variant.spec.ts +0 -72
  284. package/src/presets/variant.ts +0 -62
  285. package/src/primitives/.gitkeep +0 -0
  286. package/src/primitives/directionality/directionality.spec.ts +0 -112
  287. package/src/primitives/directionality/directionality.ts +0 -89
  288. package/src/primitives/directionality/index.ts +0 -1
  289. package/src/primitives/forms/form-control.spec.ts +0 -67
  290. package/src/primitives/forms/form-control.ts +0 -94
  291. package/src/primitives/forms/index.ts +0 -1
  292. package/src/primitives/index.ts +0 -6
  293. package/src/primitives/interaction/disabled.spec.ts +0 -47
  294. package/src/primitives/interaction/disabled.ts +0 -31
  295. package/src/primitives/interaction/focus-ring.spec.ts +0 -62
  296. package/src/primitives/interaction/focus-ring.ts +0 -59
  297. package/src/primitives/interaction/index.ts +0 -2
  298. package/src/primitives/list/filterable-list.spec.ts +0 -114
  299. package/src/primitives/list/filterable-list.ts +0 -126
  300. package/src/primitives/list/group.spec.ts +0 -99
  301. package/src/primitives/list/group.ts +0 -139
  302. package/src/primitives/list/index.ts +0 -8
  303. package/src/primitives/list/inject-helpers.ts +0 -8
  304. package/src/primitives/list/item.spec.ts +0 -173
  305. package/src/primitives/list/item.ts +0 -222
  306. package/src/primitives/list/navigator.spec.ts +0 -286
  307. package/src/primitives/list/navigator.ts +0 -238
  308. package/src/primitives/list/selection.spec.ts +0 -214
  309. package/src/primitives/list/selection.ts +0 -339
  310. package/src/primitives/list/tokens.ts +0 -106
  311. package/src/primitives/list/type-ahead.spec.ts +0 -58
  312. package/src/primitives/list/type-ahead.ts +0 -46
  313. package/src/primitives/overlay/backdrop.spec.ts +0 -54
  314. package/src/primitives/overlay/backdrop.ts +0 -31
  315. package/src/primitives/overlay/builder.spec.ts +0 -38
  316. package/src/primitives/overlay/builder.ts +0 -151
  317. package/src/primitives/overlay/container.ts +0 -42
  318. package/src/primitives/overlay/context.ts +0 -14
  319. package/src/primitives/overlay/controller.spec.ts +0 -86
  320. package/src/primitives/overlay/controller.ts +0 -190
  321. package/src/primitives/overlay/id.spec.ts +0 -24
  322. package/src/primitives/overlay/id.ts +0 -17
  323. package/src/primitives/overlay/index.ts +0 -18
  324. package/src/primitives/overlay/overlay.css +0 -42
  325. package/src/primitives/overlay/panel.spec.ts +0 -52
  326. package/src/primitives/overlay/panel.ts +0 -102
  327. package/src/primitives/overlay/stack.spec.ts +0 -55
  328. package/src/primitives/overlay/stack.ts +0 -113
  329. package/src/primitives/overlay/strategies/backdrop/blurred.spec.ts +0 -11
  330. package/src/primitives/overlay/strategies/backdrop/blurred.ts +0 -5
  331. package/src/primitives/overlay/strategies/backdrop/none.spec.ts +0 -10
  332. package/src/primitives/overlay/strategies/backdrop/none.ts +0 -9
  333. package/src/primitives/overlay/strategies/backdrop/solid.spec.ts +0 -18
  334. package/src/primitives/overlay/strategies/backdrop/solid.ts +0 -23
  335. package/src/primitives/overlay/strategies/focus-trap/inert-based.spec.ts +0 -28
  336. package/src/primitives/overlay/strategies/focus-trap/inert-based.ts +0 -38
  337. package/src/primitives/overlay/strategies/focus-trap/no-trap.spec.ts +0 -9
  338. package/src/primitives/overlay/strategies/focus-trap/no-trap.ts +0 -8
  339. package/src/primitives/overlay/strategies/focus-trap/tab-cycle.spec.ts +0 -49
  340. package/src/primitives/overlay/strategies/focus-trap/tab-cycle.ts +0 -85
  341. package/src/primitives/overlay/strategies/index.ts +0 -34
  342. package/src/primitives/overlay/strategies/live-announcer/_announce.ts +0 -35
  343. package/src/primitives/overlay/strategies/live-announcer/assertive.spec.ts +0 -21
  344. package/src/primitives/overlay/strategies/live-announcer/assertive.ts +0 -11
  345. package/src/primitives/overlay/strategies/live-announcer/polite.spec.ts +0 -21
  346. package/src/primitives/overlay/strategies/live-announcer/polite.ts +0 -11
  347. package/src/primitives/overlay/strategies/live-announcer/silent.spec.ts +0 -12
  348. package/src/primitives/overlay/strategies/live-announcer/silent.ts +0 -5
  349. package/src/primitives/overlay/strategies/mount/body-portal.spec.ts +0 -40
  350. package/src/primitives/overlay/strategies/mount/body-portal.ts +0 -91
  351. package/src/primitives/overlay/strategies/mount/in-container.spec.ts +0 -43
  352. package/src/primitives/overlay/strategies/mount/in-container.ts +0 -39
  353. package/src/primitives/overlay/strategies/mount/in-place.spec.ts +0 -40
  354. package/src/primitives/overlay/strategies/mount/in-place.ts +0 -20
  355. package/src/primitives/overlay/strategies/position/anchored-to.spec.ts +0 -56
  356. package/src/primitives/overlay/strategies/position/anchored-to.ts +0 -248
  357. package/src/primitives/overlay/strategies/position/corner.spec.ts +0 -36
  358. package/src/primitives/overlay/strategies/position/corner.ts +0 -33
  359. package/src/primitives/overlay/strategies/position/edge-sheet.spec.ts +0 -32
  360. package/src/primitives/overlay/strategies/position/edge-sheet.ts +0 -36
  361. package/src/primitives/overlay/strategies/position/in-place-sibling.spec.ts +0 -25
  362. package/src/primitives/overlay/strategies/position/in-place-sibling.ts +0 -13
  363. package/src/primitives/overlay/strategies/position/point-at.spec.ts +0 -40
  364. package/src/primitives/overlay/strategies/position/point-at.ts +0 -34
  365. package/src/primitives/overlay/strategies/position/viewport-centered.spec.ts +0 -31
  366. package/src/primitives/overlay/strategies/position/viewport-centered.ts +0 -31
  367. package/src/primitives/overlay/strategies/scroll-lock/css-clip.spec.ts +0 -15
  368. package/src/primitives/overlay/strategies/scroll-lock/css-clip.ts +0 -39
  369. package/src/primitives/overlay/strategies/scroll-lock/html-overflow.spec.ts +0 -21
  370. package/src/primitives/overlay/strategies/scroll-lock/html-overflow.ts +0 -44
  371. package/src/primitives/overlay/strategies/scroll-lock/none.spec.ts +0 -9
  372. package/src/primitives/overlay/strategies/scroll-lock/none.ts +0 -5
  373. package/src/primitives/overlay/strategies/trigger-event/on-click.spec.ts +0 -32
  374. package/src/primitives/overlay/strategies/trigger-event/on-click.ts +0 -28
  375. package/src/primitives/overlay/strategies/trigger-event/on-context-menu.spec.ts +0 -45
  376. package/src/primitives/overlay/strategies/trigger-event/on-context-menu.ts +0 -70
  377. package/src/primitives/overlay/strategies/trigger-event/on-focus-or-input.spec.ts +0 -35
  378. package/src/primitives/overlay/strategies/trigger-event/on-focus-or-input.ts +0 -34
  379. package/src/primitives/overlay/strategies/trigger-event/on-focus.spec.ts +0 -64
  380. package/src/primitives/overlay/strategies/trigger-event/on-focus.ts +0 -37
  381. package/src/primitives/overlay/strategies/trigger-event/on-hotkey.spec.ts +0 -37
  382. package/src/primitives/overlay/strategies/trigger-event/on-hotkey.ts +0 -59
  383. package/src/primitives/overlay/strategies/trigger-event/on-hover.spec.ts +0 -34
  384. package/src/primitives/overlay/strategies/trigger-event/on-hover.ts +0 -86
  385. package/src/primitives/overlay/strategies/trigger-event/programmatic.spec.ts +0 -16
  386. package/src/primitives/overlay/strategies/trigger-event/programmatic.ts +0 -12
  387. package/src/primitives/overlay/tokens.ts +0 -54
  388. package/src/primitives/overlay/trigger.spec.ts +0 -103
  389. package/src/primitives/overlay/trigger.ts +0 -75
  390. package/src/primitives/overlay/types.ts +0 -24
  391. package/src/primitives/overlay/wrapper.ts +0 -50
  392. package/src/primitives/signals/deep-signal.ts +0 -109
  393. package/src/primitives/signals/index.ts +0 -1
  394. package/src/progress-bar/config.ts +0 -48
  395. package/src/progress-bar/index.ts +0 -12
  396. package/src/progress-bar/progress-bar-fill.ts +0 -37
  397. package/src/progress-bar/progress-bar.context.ts +0 -34
  398. package/src/progress-bar/progress-bar.spec.ts +0 -423
  399. package/src/progress-bar/progress-bar.ts +0 -217
  400. package/src/public-api.ts +0 -84
  401. package/src/radio/index.ts +0 -2
  402. package/src/radio/radio.context.ts +0 -3
  403. package/src/radio/radio.spec.ts +0 -36
  404. package/src/radio/radio.ts +0 -66
  405. package/src/select/index.ts +0 -4
  406. package/src/select/select-content.ts +0 -69
  407. package/src/select/select-option.ts +0 -35
  408. package/src/select/select-root.ts +0 -129
  409. package/src/select/select-trigger.ts +0 -93
  410. package/src/select/select.spec.ts +0 -138
  411. package/src/select/select.ts +0 -4
  412. package/src/skeleton/index.ts +0 -5
  413. package/src/skeleton/skeleton.spec.ts +0 -115
  414. package/src/skeleton/skeleton.ts +0 -56
  415. package/src/slider/index.ts +0 -10
  416. package/src/slider/slider-range.ts +0 -49
  417. package/src/slider/slider-thumb.ts +0 -335
  418. package/src/slider/slider-track.ts +0 -70
  419. package/src/slider/slider.context.ts +0 -79
  420. package/src/slider/slider.geometry.ts +0 -73
  421. package/src/slider/slider.spec.ts +0 -216
  422. package/src/slider/slider.ts +0 -443
  423. package/src/speed-dial/index.ts +0 -10
  424. package/src/speed-dial/speed-dial-action.ts +0 -40
  425. package/src/speed-dial/speed-dial-actions.ts +0 -31
  426. package/src/speed-dial/speed-dial-trigger.ts +0 -55
  427. package/src/speed-dial/speed-dial.context.ts +0 -36
  428. package/src/speed-dial/speed-dial.spec.ts +0 -143
  429. package/src/speed-dial/speed-dial.ts +0 -127
  430. package/src/spinner/config.ts +0 -48
  431. package/src/spinner/index.ts +0 -8
  432. package/src/spinner/spinner.spec.ts +0 -262
  433. package/src/spinner/spinner.ts +0 -129
  434. package/src/stepper/index.ts +0 -15
  435. package/src/stepper/stepper.context.ts +0 -63
  436. package/src/stepper/stepper.spec.ts +0 -403
  437. package/src/stepper/stepper.ts +0 -544
  438. package/src/styles/docs-themes.css +0 -82
  439. package/src/styles.css +0 -17
  440. package/src/table/column-helpers.spec.ts +0 -74
  441. package/src/table/column-helpers.ts +0 -68
  442. package/src/table/filter-fns.ts +0 -230
  443. package/src/table/filter-models.spec.ts +0 -240
  444. package/src/table/filter-models.ts +0 -124
  445. package/src/table/filter-params.ts +0 -90
  446. package/src/table/grid-api-impl.ts +0 -321
  447. package/src/table/grid-api.spec.ts +0 -178
  448. package/src/table/grid-api.ts +0 -285
  449. package/src/table/index.ts +0 -73
  450. package/src/table/table-cell.spec.ts +0 -43
  451. package/src/table/table-cell.ts +0 -38
  452. package/src/table/table-filter-outlet.ts +0 -120
  453. package/src/table/table-header.spec.ts +0 -54
  454. package/src/table/table-header.ts +0 -63
  455. package/src/table/table-keyboard.spec.ts +0 -68
  456. package/src/table/table-keyboard.ts +0 -107
  457. package/src/table/table-resource.spec.ts +0 -37
  458. package/src/table/table-resource.ts +0 -36
  459. package/src/table/table-row.spec.ts +0 -54
  460. package/src/table/table-row.ts +0 -31
  461. package/src/table/table-storage.spec.ts +0 -67
  462. package/src/table/table-storage.ts +0 -76
  463. package/src/table/table.spec.ts +0 -172
  464. package/src/table/table.ts +0 -281
  465. package/src/table/table.types.ts +0 -83
  466. package/src/tabs/index.ts +0 -7
  467. package/src/tabs/tabs.context.ts +0 -32
  468. package/src/tabs/tabs.spec.ts +0 -352
  469. package/src/tabs/tabs.ts +0 -364
  470. package/src/tag/config.ts +0 -53
  471. package/src/tag/index.ts +0 -7
  472. package/src/tag/tag-list.ts +0 -76
  473. package/src/tag/tag-remove.ts +0 -61
  474. package/src/tag/tag.context.ts +0 -36
  475. package/src/tag/tag.spec.ts +0 -240
  476. package/src/tag/tag.ts +0 -203
  477. package/src/test-setup.ts +0 -5
  478. package/src/textarea/config.ts +0 -42
  479. package/src/textarea/index.ts +0 -8
  480. package/src/textarea/textarea.spec.ts +0 -176
  481. package/src/textarea/textarea.ts +0 -235
  482. package/src/time-picker/index.ts +0 -15
  483. package/src/time-picker/time-picker-meridiem.ts +0 -123
  484. package/src/time-picker/time-picker-segment.ts +0 -318
  485. package/src/time-picker/time-picker.context.ts +0 -38
  486. package/src/time-picker/time-picker.format.ts +0 -181
  487. package/src/time-picker/time-picker.spec.ts +0 -189
  488. package/src/time-picker/time-picker.ts +0 -274
  489. package/src/toast/_examples/index.ts +0 -5
  490. package/src/toast/_examples/toast.example.ts +0 -282
  491. package/src/toast/_examples/toast.finance.example.ts +0 -180
  492. package/src/toast/_examples/toast.retro.example.ts +0 -161
  493. package/src/toast/index.ts +0 -28
  494. package/src/toast/toast.ref.ts +0 -26
  495. package/src/toast/toast.service.ts +0 -339
  496. package/src/toast/toast.spec.ts +0 -247
  497. package/src/toast/toast.strategy.ts +0 -112
  498. package/src/toast/toast.ts +0 -463
  499. package/src/toast/toast.types.ts +0 -5
  500. package/src/toggle/index.ts +0 -1
  501. package/src/toggle/toggle.spec.ts +0 -24
  502. package/src/toggle/toggle.ts +0 -48
  503. package/src/tooltip/_examples/index.ts +0 -6
  504. package/src/tooltip/_examples/tooltip.example.ts +0 -82
  505. package/src/tooltip/_examples/tooltip.finance.example.ts +0 -97
  506. package/src/tooltip/_examples/tooltip.placements.example.ts +0 -83
  507. package/src/tooltip/_examples/tooltip.retro.example.ts +0 -107
  508. package/src/tooltip/index.ts +0 -4
  509. package/src/tooltip/tooltip-arrow.ts +0 -31
  510. package/src/tooltip/tooltip-content.ts +0 -38
  511. package/src/tooltip/tooltip-group.ts +0 -32
  512. package/src/tooltip/tooltip-trigger.ts +0 -47
  513. package/src/tooltip/tooltip.spec.ts +0 -40
  514. package/src/tooltip/tooltip.ts +0 -5
  515. package/src/tree-select/index.ts +0 -12
  516. package/src/tree-select/tree-select-content.ts +0 -199
  517. package/src/tree-select/tree-select-node.ts +0 -132
  518. package/src/tree-select/tree-select-root.ts +0 -272
  519. package/src/tree-select/tree-select-trigger.ts +0 -90
  520. package/src/tree-select/tree-select.context.ts +0 -63
  521. package/src/tree-select/tree-select.spec.ts +0 -433
  522. package/src/tree-select/tree-select.ts +0 -2
  523. package/src/typography/blockquote.ts +0 -57
  524. package/src/typography/code.ts +0 -53
  525. package/src/typography/index.ts +0 -22
  526. package/src/typography/lead.ts +0 -49
  527. package/src/typography/muted.ts +0 -29
  528. package/src/typography/truncate.ts +0 -99
  529. package/src/typography/typography.spec.ts +0 -203
  530. package/tsconfig.lib.json +0 -21
  531. package/tsconfig.lib.prod.json +0 -17
  532. package/tsconfig.spec.json +0 -18
  533. package/vite.config.ts +0 -27
  534. /package/{src/icon → icon}/icon.css +0 -0
  535. /package/{src/typography → typography}/prose.css +0 -0
package/src/tabs/tabs.ts DELETED
@@ -1,364 +0,0 @@
1
- import {
2
- computed,
3
- Directive,
4
- effect,
5
- ElementRef,
6
- inject,
7
- input,
8
- model,
9
- OnDestroy,
10
- OnInit,
11
- output,
12
- signal,
13
- Signal,
14
- untracked,
15
- } from '@angular/core';
16
- import { KjRovingTabindex, KjRovingTabindexItemDirective } from '../a11y/roving-tabindex';
17
- import { KjDisabled } from '../primitives/interaction/disabled';
18
- import { KjFocusRing } from '../primitives/interaction/focus-ring';
19
- import {
20
- KJ_TABS,
21
- KjTabsActivationMode,
22
- KjTabsContext,
23
- KjTabsOrientation,
24
- } from './tabs.context';
25
-
26
- let kjTabsSeedCounter = 0;
27
- function nextSeed(): string {
28
- // Try crypto.randomUUID where available (browser, jsdom 22+, node 19+).
29
- // Fall back to a counter so SSR / older environments still produce a stable string.
30
- const cryptoLike = (globalThis as { crypto?: { randomUUID?: () => string } }).crypto;
31
- if (cryptoLike?.randomUUID) return cryptoLike.randomUUID().slice(0, 8);
32
- return `kj${(++kjTabsSeedCounter).toString(36)}`;
33
- }
34
-
35
- /**
36
- * Root tabs container. Owns the active value, orientation, activation mode,
37
- * and the registration list of child tabs/panels. Provides `KJ_TABS` to its
38
- * descendants for ARIA wiring and selection coordination.
39
- *
40
- * @example
41
- * ```html
42
- * <div kjTabs [(kjValue)]="active" kjOrientation="horizontal" kjActivationMode="automatic">
43
- * <div kjTabList>
44
- * <button kjTab kjTabValue="overview">Overview</button>
45
- * <button kjTab kjTabValue="billing">Billing</button>
46
- * </div>
47
- * <div kjTabPanel kjPanelValue="overview">…</div>
48
- * <div kjTabPanel kjPanelValue="billing">…</div>
49
- * </div>
50
- * ```
51
- * @doc-category Core/Navigation
52
- * @doc
53
- * @doc-name tabs
54
- * @doc-description Unstyled tabs root with active-value, orientation, and activation mode for tab and panel children.
55
- * @doc-is-main
56
- */
57
- @Directive({
58
- selector: '[kjTabs]',
59
- standalone: true,
60
- providers: [{ provide: KJ_TABS, useExisting: KjTabs }],
61
- host: {
62
- '[attr.data-orientation]': 'kjOrientation()',
63
- },
64
- })
65
- export class KjTabs implements KjTabsContext {
66
- /** Two-way bound active tab value. String-keyed; `''` means "no tab active yet". */
67
- readonly kjValue = model<string>('');
68
-
69
- /** Tabs orientation. Drives `aria-orientation` on the tablist and the arrow-key axis. */
70
- readonly kjOrientation = input<KjTabsOrientation>('horizontal');
71
-
72
- /**
73
- * Activation mode per WAI-ARIA APG.
74
- * - `'automatic'` (default): focus moves and the focused tab is activated immediately.
75
- * - `'manual'`: focus moves only; Enter or Space activates the focused tab.
76
- */
77
- readonly kjActivationMode = input<KjTabsActivationMode>('automatic');
78
-
79
- /** Read-only view of the active tab value. */
80
- readonly value: Signal<string> = this.kjValue.asReadonly();
81
-
82
- /** Read-only view of the orientation. */
83
- readonly orientation: Signal<KjTabsOrientation> = this.kjOrientation;
84
-
85
- /** Read-only view of the activation mode. */
86
- readonly activationMode: Signal<KjTabsActivationMode> = this.kjActivationMode;
87
-
88
- private readonly idSeed = nextSeed();
89
-
90
- /** @internal Map of value → registered tab; keeps document order via insertion. */
91
- private readonly _tabs = signal<readonly KjTab[]>([]);
92
-
93
- /** Public read-only registration list, in document order. */
94
- readonly tabs = this._tabs.asReadonly();
95
-
96
- /** Currently resolved active tab (may be undefined when value matches no tab). */
97
- readonly activeTab = computed<KjTab | undefined>(() =>
98
- this._tabs().find((t) => t.kjTabValue() === this.kjValue()),
99
- );
100
-
101
- constructor() {
102
- // Default-value reconciliation: when kjValue is unset (`''`) and at least one
103
- // non-disabled tab is registered, activate the first non-disabled tab.
104
- effect(() => {
105
- const list = this._tabs();
106
- const current = this.kjValue();
107
- if (current === '' && list.length > 0) {
108
- const first = untracked(() => list.find((t) => !t.kjTabDisabled()) ?? list[0]);
109
- if (first) {
110
- // Defer to avoid writing during a parent change-detection pass.
111
- queueMicrotask(() => {
112
- if (this.kjValue() === '') this.kjValue.set(first.kjTabValue());
113
- });
114
- }
115
- }
116
- });
117
- }
118
-
119
- /** @internal Called by `KjTab.ngOnInit` to register itself in document order. */
120
- register(tab: KjTab): void {
121
- this._tabs.update((list) => (list.includes(tab) ? list : [...list, tab]));
122
- }
123
-
124
- /** @internal Called by `KjTab` on destroy. */
125
- unregister(tab: KjTab): void {
126
- this._tabs.update((list) => list.filter((t) => t !== tab));
127
- }
128
-
129
- /** Returns whether the tab/panel pair for `value` is the active one. */
130
- isActive(value: string): boolean {
131
- return this.kjValue() === value;
132
- }
133
-
134
- /** Stable id for the tab element associated with `value`. */
135
- tabId(value: string): string {
136
- return `kj-tab-${value}-${this.idSeed}`;
137
- }
138
-
139
- /** Stable id for the panel element associated with `value`. */
140
- panelId(value: string): string {
141
- return `kj-panel-${value}-${this.idSeed}`;
142
- }
143
-
144
- /** Activates the tab/panel pair for `value`. No-op if the matching tab is disabled. */
145
- select(value: string): void {
146
- const target = this._tabs().find((t) => t.kjTabValue() === value);
147
- if (target?.kjTabDisabled()) return;
148
- if (this.kjValue() !== value) this.kjValue.set(value);
149
- }
150
-
151
- /** Imperative: advance to the next non-disabled tab. Clamps at the end. */
152
- next(): void {
153
- const list = this._tabs();
154
- const idx = list.findIndex((t) => t.kjTabValue() === this.kjValue());
155
- for (let i = idx + 1; i < list.length; i++) {
156
- if (!list[i].kjTabDisabled()) {
157
- this.select(list[i].kjTabValue());
158
- return;
159
- }
160
- }
161
- }
162
-
163
- /** Imperative: advance to the previous non-disabled tab. Clamps at the start. */
164
- previous(): void {
165
- const list = this._tabs();
166
- const idx = list.findIndex((t) => t.kjTabValue() === this.kjValue());
167
- for (let i = idx - 1; i >= 0; i--) {
168
- if (!list[i].kjTabDisabled()) {
169
- this.select(list[i].kjTabValue());
170
- return;
171
- }
172
- }
173
- }
174
- }
175
-
176
- /**
177
- * Tab list container. Hosts `role="tablist"` + `aria-orientation` and composes
178
- * `KjRovingTabindex` to manage the single-tab-stop arrow-key navigation.
179
- *
180
- * Orientation is read from the parent `KJ_TABS` context and forwarded to the
181
- * roving primitive through its `kjRovingOrientation` input via a host binding
182
- * on the exposed input.
183
- *
184
- * @doc-category Core/Navigation
185
- * @doc
186
- * @doc-name tabs
187
- */
188
- @Directive({
189
- selector: '[kjTabList]',
190
- standalone: true,
191
- hostDirectives: [KjRovingTabindex],
192
- host: {
193
- '[attr.role]': '"tablist"',
194
- '[attr.aria-orientation]': 'tabs.orientation()',
195
- '[attr.data-orientation]': 'tabs.orientation()',
196
- },
197
- })
198
- export class KjTabList implements OnInit, OnDestroy {
199
- /** @internal */
200
- readonly tabs = inject(KJ_TABS);
201
- private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);
202
-
203
- private readonly keydownFilter = (event: KeyboardEvent): void => {
204
- const orientation = this.tabs.orientation();
205
- if (orientation === 'horizontal') {
206
- if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {
207
- // Off-axis: prevent the composed KjRovingTabindex from acting.
208
- event.stopImmediatePropagation();
209
- }
210
- } else if (orientation === 'vertical') {
211
- if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {
212
- event.stopImmediatePropagation();
213
- }
214
- }
215
- };
216
-
217
- ngOnInit(): void {
218
- // Capture phase + `addEventListener` directly on the host: this listener
219
- // fires before the composed KjRovingTabindex's `(keydown)` host binding,
220
- // so we can swallow off-axis arrow keys per the parent KjTabs orientation
221
- // (the WAI-ARIA APG contract for tab strips).
222
- this.el.nativeElement.addEventListener('keydown', this.keydownFilter, true);
223
- }
224
-
225
- ngOnDestroy(): void {
226
- this.el.nativeElement.removeEventListener('keydown', this.keydownFilter, true);
227
- }
228
- }
229
-
230
- /**
231
- * Tab trigger. Hosts `role="tab"` + the ARIA wiring (`aria-selected`,
232
- * `aria-controls`, `id`) and composes `KjRovingTabindexItem`, `KjFocusRing`
233
- * and `KjDisabled`. Click activates the tab; Enter/Space activate (always
234
- * honoured, required in manual mode); Delete fires `kjClose` when
235
- * `kjClosable` is true.
236
- *
237
- * @doc-category Core/Navigation
238
- * @doc
239
- * @doc-name tabs
240
- */
241
- @Directive({
242
- selector: '[kjTab]',
243
- standalone: true,
244
- hostDirectives: [KjRovingTabindexItemDirective, KjFocusRing, KjDisabled],
245
- host: {
246
- '[attr.role]': '"tab"',
247
- '[attr.id]': 'tabs.tabId(kjTabValue())',
248
- '[attr.aria-controls]': 'tabs.panelId(kjTabValue())',
249
- '[attr.aria-selected]': 'isActive() ? "true" : "false"',
250
- '[attr.aria-disabled]': 'kjTabDisabled() ? "true" : null',
251
- '[attr.data-state]': 'isActive() ? "active" : "inactive"',
252
- '[attr.data-disabled]': 'kjTabDisabled() ? "" : null',
253
- '(click)': 'onClick()',
254
- '(keydown)': 'onKeydown($event)',
255
- '(focus)': 'onFocus()',
256
- },
257
- })
258
- export class KjTab implements OnInit, OnDestroy {
259
- /** @internal */
260
- readonly tabs = inject(KJ_TABS) as KjTabs;
261
- /** @internal Native host element. */
262
- readonly el = inject<ElementRef<HTMLElement>>(ElementRef);
263
-
264
- /** Required string key wiring this tab to its corresponding panel. */
265
- readonly kjTabValue = input.required<string>();
266
-
267
- /** When true, the tab cannot be activated but remains in the focus ring. */
268
- readonly kjTabDisabled = input<boolean>(false);
269
-
270
- /** When true, Delete on the focused tab fires `kjClose`. */
271
- readonly kjClosable = input<boolean>(false);
272
-
273
- /** Fires when the user closes this tab (Delete key). Emits the tab's value. */
274
- readonly kjClose = output<string>();
275
-
276
- /** Whether this tab is the currently active one. */
277
- readonly isActive = computed(() => this.tabs.isActive(this.kjTabValue()));
278
-
279
- ngOnInit(): void {
280
- this.tabs.register(this);
281
- }
282
-
283
- ngOnDestroy(): void {
284
- this.tabs.unregister(this);
285
- }
286
-
287
- /** @internal Click handler. */
288
- onClick(): void {
289
- if (this.kjTabDisabled()) return;
290
- this.tabs.select(this.kjTabValue());
291
- }
292
-
293
- /** @internal Focus handler — activates immediately in `automatic` mode. */
294
- onFocus(): void {
295
- if (this.kjTabDisabled()) return;
296
- if (this.tabs.activationMode() === 'automatic') {
297
- this.tabs.select(this.kjTabValue());
298
- }
299
- }
300
-
301
- /** @internal Keydown — Enter/Space activate (always honoured); Delete closes when closable. */
302
- onKeydown(event: KeyboardEvent): void {
303
- if (event.key === 'Enter' || event.key === ' ' || event.key === 'Spacebar') {
304
- if (this.kjTabDisabled()) return;
305
- event.preventDefault();
306
- this.tabs.select(this.kjTabValue());
307
- return;
308
- }
309
- if (event.key === 'Delete' && this.kjClosable()) {
310
- event.preventDefault();
311
- this.kjClose.emit(this.kjTabValue());
312
- return;
313
- }
314
- }
315
- }
316
-
317
- /**
318
- * Tab panel. Hosts `role="tabpanel"` + `aria-labelledby` + `id` + `hidden`.
319
- * Tracks first-activation history via `mounted`: it flips `true` on first
320
- * activation and stays `true` thereafter, so consumers can gate the
321
- * projected content with `@if (panel.mounted())` to implement the
322
- * lazy-then-persistent mount posture from the analysis.
323
- *
324
- * @doc-category Core/Navigation
325
- * @doc
326
- * @doc-name tabs
327
- */
328
- @Directive({
329
- selector: '[kjTabPanel]',
330
- standalone: true,
331
- exportAs: 'kjTabPanel',
332
- host: {
333
- '[attr.role]': '"tabpanel"',
334
- '[attr.id]': 'tabs.panelId(kjPanelValue())',
335
- '[attr.aria-labelledby]': 'tabs.tabId(kjPanelValue())',
336
- '[attr.hidden]': 'isActive() ? null : ""',
337
- '[attr.data-state]': 'isActive() ? "active" : "inactive"',
338
- },
339
- })
340
- export class KjTabPanel {
341
- /** @internal */
342
- readonly tabs = inject(KJ_TABS);
343
-
344
- /** Required string key wiring this panel to its corresponding tab. */
345
- readonly kjPanelValue = input.required<string>();
346
-
347
- /** Whether this panel is the active one. */
348
- readonly isActive = computed(() => this.tabs.isActive(this.kjPanelValue()));
349
-
350
- private readonly _mounted = signal(false);
351
-
352
- /**
353
- * `true` after this panel has been activated at least once. Consumers wrap
354
- * the panel's projected content in `@if (panel.mounted())` to mount the
355
- * content lazily on first activation and keep it mounted thereafter.
356
- */
357
- readonly mounted = this._mounted.asReadonly();
358
-
359
- constructor() {
360
- effect(() => {
361
- if (this.isActive() && !this._mounted()) this._mounted.set(true);
362
- });
363
- }
364
- }
package/src/tag/config.ts DELETED
@@ -1,53 +0,0 @@
1
- import { InjectionToken, Provider } from '@angular/core';
2
-
3
- /** Preset configuration consumed by `KjTag` via `bindPresets`. */
4
- export interface KjTagConfig {
5
- variants: string[];
6
- sizes: string[];
7
- defaults: { variant: string; size: string };
8
- }
9
-
10
- /**
11
- * Default Tag presets shipped by kouji-ui. Variant list is intentionally
12
- * kept in lock-step with `KjBadge` (see analysis §"Variant parity with
13
- * Badge") — a non-interactive Tag and a Badge with the same `kjVariant`
14
- * must look identical.
15
- */
16
- export const KJ_TAG_DEFAULTS: KjTagConfig = {
17
- variants: [
18
- 'default',
19
- 'primary',
20
- 'secondary',
21
- 'success',
22
- 'warning',
23
- 'danger',
24
- 'info',
25
- 'outline',
26
- 'ghost',
27
- ],
28
- sizes: ['xs', 'sm', 'md', 'lg'],
29
- defaults: { variant: 'default', size: 'md' },
30
- };
31
-
32
- /**
33
- * DI token for the active Tag presets. Default factory yields
34
- * `KJ_TAG_DEFAULTS`. Override via `provideKjTag(...)` at the application
35
- * scope or at a component scope.
36
- */
37
- export const KJ_TAG_CONFIG = new InjectionToken<KjTagConfig>('kj.tag.config', {
38
- factory: () => KJ_TAG_DEFAULTS,
39
- });
40
-
41
- /**
42
- * Configures the Tag presets for the enclosing injector. Replaces (does
43
- * not merge) `variants` and `sizes`; spread `KJ_TAG_DEFAULTS.variants` to
44
- * extend.
45
- */
46
- export function provideKjTag(config: Partial<KjTagConfig>): Provider[] {
47
- return [
48
- {
49
- provide: KJ_TAG_CONFIG,
50
- useValue: { ...KJ_TAG_DEFAULTS, ...config },
51
- },
52
- ];
53
- }
package/src/tag/index.ts DELETED
@@ -1,7 +0,0 @@
1
- export { KjTag } from './tag';
2
- export { KjTagRemove } from './tag-remove';
3
- export { KjTagList } from './tag-list';
4
- export { KJ_TAG, KJ_TAG_LIST } from './tag.context';
5
- export type { KjTagContext, KjTagListContext, KjTagListRole } from './tag.context';
6
- export { KJ_TAG_CONFIG, KJ_TAG_DEFAULTS, provideKjTag } from './config';
7
- export type { KjTagConfig } from './config';
@@ -1,76 +0,0 @@
1
- import { Directive, Signal, computed, input } from '@angular/core';
2
- import { KjRovingTabindex } from '../a11y/roving-tabindex';
3
- import { KJ_TAG_LIST, KjTagListContext, KjTagListRole } from './tag.context';
4
-
5
- /**
6
- * Optional container that coordinates a group of `KjTag` chips. Provides
7
- * the chip-group keyboard story (roving tabindex via `KjRovingTabindex`)
8
- * and the ARIA wiring for the `listbox` / `grid` / `group` shapes called
9
- * out in the analysis.
10
- *
11
- * Standalone tags work fine without this container — the container is the
12
- * opt-in surface that turns a pile of independent chips into a single
13
- * keyboardable composite.
14
- *
15
- * @example
16
- * ```html
17
- * <div kjTagList kjTagListRole="listbox" [kjTagListMultiple]="true" aria-label="Filters">
18
- * <span kjTag kjTagSelectable>One</span>
19
- * <span kjTag kjTagSelectable>Two</span>
20
- * </div>
21
- * ```
22
- * @doc-category Core/Data display
23
- * @doc
24
- * @doc-name tag
25
- */
26
- @Directive({
27
- selector: '[kjTagList]',
28
- standalone: true,
29
- providers: [{ provide: KJ_TAG_LIST, useExisting: KjTagList }],
30
- hostDirectives: [
31
- { directive: KjRovingTabindex, inputs: ['kjRovingOrientation: kjTagListOrientation'] },
32
- ],
33
- host: {
34
- '[attr.role]': 'kjTagListRole()',
35
- '[attr.aria-orientation]': 'ariaOrientation()',
36
- '[attr.aria-multiselectable]': 'ariaMultiSelectable()',
37
- '[attr.aria-disabled]': 'kjTagListDisabled() ? "true" : null',
38
- '[attr.tabindex]': 'kjTagListRole() !== "group" ? "-1" : null',
39
- },
40
- })
41
- export class KjTagList implements KjTagListContext {
42
- /** Container ARIA role — drives chip role selection (option / row / none). */
43
- readonly kjTagListRole = input<KjTagListRole>('group');
44
-
45
- /** Roving tabindex axis. Forwarded to `KjRovingTabindex`. */
46
- readonly kjTagListOrientation = input<'horizontal' | 'vertical' | 'both'>('horizontal');
47
-
48
- /** Only meaningful in `listbox` mode. Drives `aria-multiselectable`. */
49
- readonly kjTagListMultiple = input(false);
50
-
51
- /** Cascading disabled flag. Each chip's effective disabled OR-merges this. */
52
- readonly kjTagListDisabled = input(false);
53
-
54
- /** Read-only role view used by `KjTag` to compute its own role. */
55
- readonly role: Signal<KjTagListRole> = this.kjTagListRole;
56
-
57
- /** Read-only disabled view used by `KjTag` to merge into its effective disabled. */
58
- readonly disabled: Signal<boolean> = this.kjTagListDisabled;
59
-
60
- /** Read-only multi-selectable view (listbox-only meaning). */
61
- readonly multiple: Signal<boolean> = this.kjTagListMultiple;
62
-
63
- /** Only emit `aria-orientation` when the container has a real role. */
64
- protected readonly ariaOrientation = computed<string | null>(() => {
65
- if (this.kjTagListRole() === 'group') return null;
66
- return this.kjTagListOrientation() === 'both'
67
- ? 'horizontal'
68
- : this.kjTagListOrientation();
69
- });
70
-
71
- /** `aria-multiselectable` only set in listbox mode. */
72
- protected readonly ariaMultiSelectable = computed<string | null>(() => {
73
- if (this.kjTagListRole() !== 'listbox') return null;
74
- return this.kjTagListMultiple() ? 'true' : 'false';
75
- });
76
- }
@@ -1,61 +0,0 @@
1
- import { Directive, computed, inject, input } from '@angular/core';
2
- import { KjButton } from '../button/button';
3
- import { KJ_TAG } from './tag.context';
4
-
5
- /**
6
- * Trailing remove control for a `KjTag`. Composes `KjButton` so the remove
7
- * action inherits native `<button>` semantics, ARIA-disabled handling,
8
- * capture-phase click suppression, and the focus ring — there is no second
9
- * keyboard / a11y story to maintain.
10
- *
11
- * The accessible name is derived automatically from the parent tag's
12
- * projected text content (`"Remove {label}"`) via a `MutationObserver` on
13
- * `KjTag`. Override with `kjTagRemoveLabel` when the auto-derived name is
14
- * insufficient (e.g. icon-only tag, custom phrasing).
15
- *
16
- * @example
17
- * ```html
18
- * <span kjTag>
19
- * Acme
20
- * <button kjTagRemove>×</button>
21
- * </span>
22
- * ```
23
- * @doc-category Core/Data display
24
- * @doc
25
- * @doc-name tag
26
- */
27
- @Directive({
28
- selector: '[kjTagRemove]',
29
- standalone: true,
30
- hostDirectives: [KjButton],
31
- host: {
32
- 'type': 'button',
33
- '[attr.aria-label]': 'effectiveLabel()',
34
- '(click)': 'onClick($event)',
35
- },
36
- })
37
- export class KjTagRemove {
38
- private readonly tag = inject(KJ_TAG);
39
-
40
- /** Override the auto-derived `aria-label` for the remove button. */
41
- readonly kjTagRemoveLabel = input<string | undefined>(undefined);
42
-
43
- /** Computed accessible name: explicit override wins, else `"Remove {label}"`. */
44
- protected readonly effectiveLabel = computed<string>(() => {
45
- const override = this.kjTagRemoveLabel();
46
- if (override) return override;
47
- const label = this.tag.textContent();
48
- return label ? `Remove ${label}` : 'Remove';
49
- });
50
-
51
- /** @internal Click handler — fires the parent tag's `(kjTagRemoved)`. */
52
- onClick(event: Event): void {
53
- if (this.tag.disabled()) {
54
- event.preventDefault();
55
- event.stopImmediatePropagation();
56
- return;
57
- }
58
- event.stopPropagation();
59
- this.tag.remove();
60
- }
61
- }
@@ -1,36 +0,0 @@
1
- import { InjectionToken, Signal } from '@angular/core';
2
-
3
- /**
4
- * Public context exposed by `KjTag` to its descendants (notably
5
- * `KjTagRemove`). Mirrors the minimal surface called out in the analysis:
6
- * three signals + a `remove()` callback.
7
- */
8
- export interface KjTagContext {
9
- /** Live read of the projected text content (label) for the tag. */
10
- readonly textContent: Signal<string>;
11
- /** Whether the tag is currently selected (selectable shape only). */
12
- readonly selected: Signal<boolean>;
13
- /** Whether the tag is disabled (own + inherited from `KjTagList`). */
14
- readonly disabled: Signal<boolean>;
15
- /** Triggers removal: emits the parent's `(kjTagRemoved)` output. */
16
- remove(): void;
17
- }
18
-
19
- /** Role that a `KjTagList` container exposes. Drives chip role selection. */
20
- export type KjTagListRole = 'listbox' | 'grid' | 'group';
21
-
22
- /** Public context exposed by `KjTagList` so nested tags can self-configure. */
23
- export interface KjTagListContext {
24
- /** Active container role; chips read this to compute their own role. */
25
- readonly role: Signal<KjTagListRole>;
26
- /** Whether the entire tag list is disabled (cascades into chips). */
27
- readonly disabled: Signal<boolean>;
28
- /** Whether the listbox container allows multi-selection. */
29
- readonly multiple: Signal<boolean>;
30
- }
31
-
32
- /** Injection token providing the parent `KjTag` to projected children. */
33
- export const KJ_TAG = new InjectionToken<KjTagContext>('KjTag');
34
-
35
- /** Injection token providing the optional `KjTagList` container. */
36
- export const KJ_TAG_LIST = new InjectionToken<KjTagListContext>('KjTagList');