@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
@@ -1,30 +0,0 @@
1
-
2
- > @kouji-ui/core@0.1.1 build /home/runner/work/kouji-ui/kouji-ui/packages/core
3
- > ng-packagr -p ng-package.json -c tsconfig.lib.prod.json
4
-
5
- Building Angular Package
6
-
7
- ------------------------------------------------------------------------------
8
- Building entry point '@kouji-ui/core'
9
- ------------------------------------------------------------------------------
10
- - Compiling with Angular sources in partial compilation mode.
11
- ✔ Compiling with Angular sources in partial compilation mode.
12
- ✔ Generating FESM and DTS bundles
13
- - Copying assets
14
- ✔ Copying assets
15
- - Writing package manifest
16
- WARNING: Found a conflicting export condition for "./package.json". The "default" condition would be overridden by ng-packagr. Please unset it.
17
- WARNING: Found a conflicting export condition for ".". The "types" condition would be overridden by ng-packagr. Please unset it.
18
- WARNING: Found a conflicting export condition for ".". The "default" condition would be overridden by ng-packagr. Please unset it.
19
- ℹ Removing scripts section in package.json as it's considered a potential security vulnerability.
20
- ✔ Writing package manifest
21
- ✔ Built @kouji-ui/core
22
-
23
- ------------------------------------------------------------------------------
24
- Built Angular Package
25
- - from: /home/runner/work/kouji-ui/kouji-ui/packages/core
26
- - to: /home/runner/work/kouji-ui/kouji-ui/dist/kj-core
27
- ------------------------------------------------------------------------------
28
-
29
- Build at: 2026-07-03T12:29:59.171Z - Time: 14974ms
30
-
package/CHANGELOG.md DELETED
@@ -1,190 +0,0 @@
1
- # @kouji-ui/core
2
-
3
- ## 0.1.1
4
-
5
- ### Major Changes
6
-
7
- - ec17a49: Upgrade to Angular 22. Peer dependency ranges for `@angular/core`, `@angular/common`, and `@angular/cdk` now require `^22.0.0` (was `^21.0.0`) — consumers must upgrade to Angular 22 to use this version.
8
-
9
- Internal changes as part of the upgrade:
10
- - `KjSpeedDial`, `KjPagination`, and `KjCombobox`'s two-way-bindable inputs (`kjOpen`, `kjPage`, `kjQuery`) now use `input()` + `linkedSignal()` instead of `model()`, to avoid colliding with their paired convenience outputs under Angular 22's stricter duplicate-output check. Public API is unchanged.
11
- - `packages/core`'s build now passes `-c tsconfig.lib.prod.json` explicitly to `ng-packagr`, fixing a silent fallback to an internal `es2018` lib default that broke `Intl`/`Array.prototype.at` typings.
12
-
13
- Known issue: a subset of overlay-based components (confirm-popup, drawer, popover, date-picker, and others using the shared overlay `attachComponent()` primitive) hit `NG0950` (required input not available) under Angular 22's stricter dynamic-component input timing. Tracked as follow-up work, not fixed in this release.
14
-
15
- ### Minor Changes
16
-
17
- - 658554d: Add leading dot indicator to badge (superset, additive).
18
- - core: `[kjBadge]` gains `kjBadgeDot` input reflecting a `data-dot` attribute; defaults off, existing consumers unaffected.
19
- - components: `<kj-badge>` gains `dot` input rendering a `::before` indicator, themeable via `--kj-badge-dot-size` and `--kj-badge-dot-color` (defaults to `currentColor`).
20
-
21
- - be6386d: Data-table polish: server-mode pagination, virtualization fix, inline-edit overlay, xs pagination tier.
22
- - `KjTable` (core): dedupe identity-only slice patches; expose
23
- `setRowCount` / `manualPagination` so resource-backed tables report the
24
- full remote total instead of just the visible page.
25
- - `KjSelect` / `KjSelectTrigger` (core): trigger registers its element
26
- with the parent at construction time. `KjSelect.focus()` delegates to
27
- the registered trigger — no view-query timing dance for consumers.
28
- - `KjTableComponent`: virtualization reads pre-pagination rows (10k rows
29
- scroll correctly); inline editors mount as `position: absolute` overlays
30
- with a hidden ghost preserving column width; column meta (`selectOptions`)
31
- forwarded to dynamically-mounted editors via the cell-editor outlet.
32
- - `KjTablePaginationComponent`: three-column footer (page size · summary ·
33
- nav), `space-between` nav cluster, full `xs | sm | md | lg` size tier
34
- forwarded to the boundary buttons.
35
- - `KjPagination`: `xs` registered in `KJ_PAGINATION_DEFAULTS.sizes` + CSS.
36
- - `KjSelectComponent` / `KjInputComponent` / `KjNumberInputComponent`:
37
- public `focus()` methods, no DOM querying.
38
- - Renamed `KjCellEditorOutlet` output `cancel` → `editCancel` to avoid
39
- the DOM-event collision flagged by angular-eslint.
40
- - `kjTableVirtual` directive selector + exportAs lowercased for the `kj`
41
- prefix rule.
42
-
43
- ### Patch Changes
44
-
45
- - d2150ee: fix(signals): widen `nonRecords` constructor type to accept native builtins (WeakSet/WeakMap/Promise/Error/RegExp/DataView/Function) — pure type-level change, no runtime behavior change.
46
-
47
- ## 0.0.6
48
-
49
- ### Patch Changes
50
-
51
- - 625e81a: Add three new themes: `retro`, `cyberpunk`, `corporate`.
52
- - **retro** — warm cream surfaces with terracotta + sand accents, soft rounding (vintage paper feel).
53
- - **cyberpunk** — hot yellow base with magenta/cyan accents, hard edges and mono type.
54
- - **corporate** — clean white surfaces, blue primary, subtle rounding (calm, business-ready).
55
-
56
- Each theme defines every required shared-layer token, verified by the contract test in `themes.spec.ts`. Activate via `data-theme="retro"` (or `cyberpunk` / `corporate`) on the `<html>` element.
57
-
58
- - 9acdb07: Add Wave 2 Batch 8 components plus cross-cutting fixes and version bump to 0.0.5.
59
-
60
- ## New components in `@kouji-ui/core` + `@kouji-ui/components`
61
-
62
- **Data input**
63
- - `<kj-input-group>` + `<kj-input-group-addon>` — flex addon wrapper joining inputs with prefix/suffix addons into a single visually-unified field with `aria-labelledby` composition
64
- - `<kj-input-mask>` — fixed-format input (phone, card, date, custom token alphabet) with built-in `NG_VALIDATORS` mask error
65
- - `<kj-input-otp>` — N-cell one-time-code input with auto-advance, paste distribution, and `KjLiveRegion` completion announcement
66
- - `<kj-cascade-select>` + `<kj-cascade-option>` + `<kj-cascade-sub-panel>` — hierarchical flyout-chain picker composing `KjSelect`
67
- - `<kj-tree-select>` + `<kj-tree-select-node>` — flat-rendered hierarchical dropdown with single and multi-select modes
68
-
69
- **Actions**
70
- - `<kj-command-palette>` + `<kj-command-item>` + `<kj-command-group>` + `<kj-command-input>` + `<kj-command-separator>` + `<kj-command-empty>` — full combobox-with-listbox command palette with substring and fuzzy filters and `[kjCommandPaletteHotkey]` global Cmd-K listener.
71
- Modal-by-default API: `[(kjOpen)]` 2-way binding, `[kjHotkey]` opt-in keyboard chord, `[kjItems]` + `<ng-template kjCommandPaletteItemTemplate let-item>` for templated item lists (with `<kj-command-item>` projection still supported as a fallback). Built-in backdrop, centered dialog, fade/slide animations, ESC + backdrop-click to close, auto-focus input on open, default keyboard-hint footer with `[kjCommandPaletteFooter]` slot for override.
72
-
73
- ## Fixes
74
- - **`<kj-input>` CVA** — `KjInputComponent` now implements `ControlValueAccessor` so `[(ngModel)]` and `[formControl]` work directly on `<kj-input>`
75
- - **Input group visual parity** — addon background, line-height, and border-width now match `<kj-input>`; removed wrapper `overflow: hidden` that was clipping the input's focus outline
76
- - **Command palette CSS** — replaced hardcoded light-mode colors with theme tokens (`--kj-color-base-100/300`, `--kj-color-neutral`, `--kj-color-primary`, `--kj-font-mono`) and added modal-shell, backdrop, and animation styles
77
- - **Cascade select / Input group CSS** — fixed `var(--kj-border)` → `1px` so borders render in all themes
78
- - **Docs search** — refactored to use `<kj-command-palette>` with `[kjItems]` + `kjCommandPaletteItemTemplate` instead of bespoke palette markup; backdrop, animations, and Cmd-K wiring now come from the wrapper
79
- - **Page TOC** — `overflow-x: hidden` on `.toc-col`, removed `min-width` on `.toc-nav`, dropped `max-height` so the column can grow to full page height
80
- - **Input group examples** — updated to use `<kj-input>` component instead of bare `[kjInput]` directive, consistent with components-layer convention
81
- - **E2E coverage** — new Playwright specs verifying input-group visual parity and command-palette modal flow + Ctrl/Cmd+K hotkey
82
-
83
- - 58b3b98: Fix command palette ArrowUp/Down: stop resetting highlight when async results update the list; resolve item values dynamically for stable activation.
84
- - f93e535: Expand `@kouji-ui/components` from 5 wrappers to 16, with code+preview docs and daisyUI-style sidebar grouping.
85
-
86
- **New components** (each ships multiple `@doc-example` panels):
87
- - **Actions** — `<kj-button>` (variants/sizes/disabled examples), `<kj-dialog>` with `<kj-dialog-overlay>`/`<kj-dialog-header>`/`<kj-dialog-title>`/`<kj-dialog-body>`/`<kj-dialog-footer>` slots
88
- - **Data input** — `<kj-checkbox>`, `<kj-radio-group>` + `<kj-radio>`, `<kj-select>` + `<kj-option>`, `<kj-toggle>` (each projects label content; `disabled` dims the entire control)
89
- - **Data display** — `<kj-accordion>` + `<kj-accordion-item>` (label-input shorthand) + `<kj-accordion-trigger>` + `<kj-accordion-content>`, `<kj-avatar>` (with `src`/`alt`/`content` inputs), `<kj-badge>`, plus `<kj-card>` upgraded to ant-design / PrimeNG-style sub-components (`<kj-card-cover>` with `size`/`fit` inputs, `<kj-card-header>`, `<kj-card-title>`, `<kj-card-subtitle>`, `<kj-card-content>`, `<kj-card-footer>`)
90
- - **Navigation** — `<kj-menu>` + `<kj-menu-trigger>`/`<kj-menu-content>`/`<kj-menu-item>`, `<kj-tabs>` + `<kj-tab>` (flat config-element API with `id`, `label`, `disabled` inputs)
91
- - **Feedback** — `<kj-toast-viewport>` + `<kj-toast>` + `<kj-toast-close>` (templated render, driven by `KjToastService`)
92
-
93
- **Public API additions on existing wrappers**:
94
- - `<kj-button>` gains `type` (button/submit/reset) and `ariaLabel` inputs.
95
- - `<kj-radio>` and `<kj-checkbox>` project content as their own label and wire `aria-labelledby` for the role-bearing element (fixes axe-core `aria-toggle-field-name` violations).
96
- - `<kj-avatar>` mirrors `alt` to a host `title` attribute for native hover tooltip.
97
-
98
- **Theming**:
99
- - Each shipped theme now declares `--kj-color-primary-hover` and `--kj-color-destructive-hover` so filled-button hover uses a brand-correct shade. `light`/`dark`/`corporate`/`retro`/`cyberpunk` define values; `kouji` keeps its existing component-layer brightening override. The button stylesheet falls back to a base-content color-mix when the token isn't defined, so consumer themes don't break.
100
- - `base.css` gains `blue-700`, `red-400`, and `red-600` shades that the new hover tokens reference.
101
-
102
- **Categorization**:
103
- - The docs extractor adds the daisyUI-style category union (`actions` / `data-input` / `data-display` / `navigation` / `feedback`) for the components track. The core track keeps its existing categories.
104
- - Manifest dev-watcher now invalidates on `packages/components/src` changes too.
105
-
106
- - 51422f1: Use `forwardRef` for the self-referential `KJ_ROVING_TABINDEX` provider on `KjRovingTabindex`. Behavior is unchanged in normal Angular builds (the compiler already handles the self-reference); this prevents a temporal-dead-zone error when the file is loaded by tooling that runs the raw decorator metadata (e.g. Playwright's TS loader sweeping spec files).
107
- - 2484383: Add `@kouji-ui/core/icon` — provider-agnostic icon layer:
108
- - `KjIconDirective` (`[span,i][kjIcon]`) renders icons via CSS custom
109
- properties (`--kj-icon` + `mask-image` for svg, `content` for font).
110
- - `provideIcons` / `provideIconResolver` / `provideIconLoader` for
111
- registering icon sets, sync URL synthesis, or async loaders.
112
- - `injectKjIconResolver()` exposes the unified resolver in injection
113
- contexts.
114
- - `KJ_ICON_REGISTRY` / `KJ_ICON_RESOLVER` / `KJ_ICON_LOADER` /
115
- `KJ_ICON_CSS_PATH` tokens published.
116
- - Stylesheet shipped at `@kouji-ui/core/icon/icon.css` with mask-image
117
- rendering for monochrome SVG and `content` for font glyphs.
118
-
119
- - 4b7487f: Restore nullable input types on component wrappers (kjValue, kjMin, kjMax, kjReferenceDate, etc.) to match the headless directives' contracts. Sentinel-default approach was producing broken 2-way binding chains and incorrect runtime behaviour on null. Time-picker core now caches a stable per-instance reference Date so `serialise()` doesn't churn new Date() on every commit.
120
- - 8406d0f: Finalize the listbox-primitives migration for cascade-select, tree-select, menubar, and combobox.
121
-
122
- **`@kouji-ui/core`**
123
- - `KjSelectionModel` now receives its source signals via a `bind()` call from the consumer root (replacing the older inject-the-config pattern). The model auto-derives a tree shape from each `KjListItem`'s parent DI pointer when the consumer doesn't supply one explicitly — DOM-nested clusters (cascade-select, sub-menus) are tree-aware out of the box. `'single'` mode now respects the shape and blocks branch commits at the model layer.
124
- - `KjListItem` exposes a `parent` reference (nearest ancestor `KjListItem` via `skipSelf` element-injector lookup) and gates activation through `KjSelectionModel.canActivate(value)` — branch options serve purely as disclosure controls without leaking values.
125
- - `KjCascadeSelectOption` migrates to mode `'single'` (was `'leaf'`) for a clean string value rather than an array; aliases `KjListItem` inputs as `kjValue`/`kjLabel`/`kjDisabled` (was `kjOptionValue`/`kjOptionLabel`/`kjDisabled`) to match `KjTreeSelectNode`'s convention. Branch detection switched from imperative `_registerSubPanel()` to a `contentChildren(KjCascadeSelectSubPanel)` query.
126
- - `KjCascadeSelect` removes the required `kjTreeShape` input — the consumer-supplied shape is optional now (defaults to the auto-derived one). Path derivation moves to `KjSelectionModel.pathTo()`.
127
- - `KjMenubarItem` gains a `kjActivate` output (bridged from `KjListItem.activate`) and now early-returns from its open/close toggle when `kjDropdownMenuTriggerFor` is unset, so a sibling `[kjDropdownMenuTrigger]` on the same element can own the overlay state without the item's toggle handler closing the dropdown that just opened (the two directives share a single per-element `KjOverlayController`).
128
-
129
- **`@kouji-ui/components`**
130
- - `KjCascadeOptionComponent` now extends `KjCascadeSelectOption` directly and registers itself under the directive's token via `useExisting` so projected sub-panels resolve their parent option through normal element-injector DI. This works around Angular 21's NG2017 rule (chained hostDirective alias forwarding is forbidden) while keeping the markup-driven recursive API.
131
- - Cascade-option public inputs renamed to `kjValue`/`kjLabel`/`kjDisabled` to match tree-select-node and the new core aliases.
132
- - `kj-menubar-item` wrapper forwards the new `(kjActivate)` output.
133
- - Menubar examples rewritten (the previous files were placeholders): `default`, `disabled-item`, `with-shortcuts` (composes `<kj-kbd>`), `with-submenu` (uses the standard `kjDropdownMenuTrigger` + `<kj-dropdown-menu-content [kjFor]>` idiom).
134
- - Dropdown-menu playground gains a "Last selected" readout wired through `(kjSelect)` on each item; menubar playground gets the same readout wired through the new `(kjActivate)`.
135
- - `kj-option` (select) selected-state styling now uses a tinted primary token (`color-mix(in oklab, var(--kj-bg-primary) 12%, transparent)` + `var(--kj-fg-primary)` + `font-weight: 600`), mirroring `kj-tree-select-node` so the listbox family stays visually consistent across themes.
136
- - New `packages/components/src/overlay/` aggregator stylesheet so consumers register a single overlay CSS entry rather than per-component overlays in `angular.json`.
137
-
138
- - 2484383: Overlay primitive refactor and select-family alignment.
139
-
140
- **`@kouji-ui/core`**
141
- - New overlay primitives layer: `KjOverlayController`, `KjOverlayPanel`, `KjOverlayTrigger`, `KjOverlayBuilder`, `KjOverlayHandle`, `KjOverlayWrapper`, `KjOverlayContainer`, `KjOverlayStack`. Strategies (`mount`, `position`, `backdrop`, `focus-trap`, `scroll-lock`, `trigger-event`) compose into per-overlay configs (`inPlace()` for service-launched, `bodyPortal()` for declarative).
142
- - `select`, `tree-select`, `combobox`, and `cascade-select` all follow the same root-controller pattern: a single `[kjXxx]` root directive provides `KjOverlayController` and owns selection state; trigger no longer self-provides; consumer-action methods call `controller.close()` directly (no signal indirection).
143
- - Cascade-select adds dedicated branch sub-panels with `position: fixed` so they escape the root panel's `overflow: auto`. Branch detection uses `contentChildren` (declaration tree) — no DOM querying.
144
- - Tree-select splits into root + per-node directives.
145
- - Re-entrancy guards on `open()` / `close()` / `toggle()`. Outside-click flicker fixed by hiding the panel synchronously in the rAF before strategy cleanup.
146
-
147
- **`@kouji-ui/components`**
148
- - Cascade-select wrapper composes the new root via `hostDirectives` (`kjValue`, `kjCascadePath`).
149
- - Confirm-popup, dialog, drawer, popover, tooltip, dropdown-menu, and toast JSDoc `@category` regrouped under `Library/Overlay` and `Core/Overlay` for the docs sidebar.
150
-
151
- - a485472: - `<kj-select>` now exposes `[multiple]`, forwarding to the underlying
152
- `KjSelectTrigger`'s `kjMultiple` input. The wrapper's display label
153
- joins array values into a comma-separated list when multi mode is
154
- on (placeholder shown when empty). Fills the gap that previously
155
- required dropping to the headless directives for multi-select.
156
- - `KjTimePickerSegment` reflect-effect now guards the `document`
157
- reference so server-side rendering no longer throws
158
- `ReferenceError: document is not defined` while pre-rendering the
159
- time-picker.
160
- - 884c5a1: Prerender/SSR: avoid `document` ReferenceError in time-picker segment and calendar day (browser guard + `inject(DOCUMENT)` for `activeElement`).
161
- - a015b14: Theme generator (docs app): accessibility tooling and configurator-related updates in components/core — `@docCategory` on directives, tag `xs` size, tooltip `[hidden]` guard, calendar SSR guard, overlay/command-palette/browser DOM safety.
162
- - 7f95f75: `kj-input` now supports `type="color"` and a new `value` input that forwards to the underlying native input via property binding. Includes a `data-type` host attribute (mirrors `type`) and a small built-in style normalization for color swatches (44×32px). Existing `type` values and form-control bindings continue to work unchanged.
163
-
164
- Core fix in `kjInput`: the directive's CVA-to-DOM reflection now skips writing when the form control's value is null/undefined, so external `[value]` bindings work for non-form usage. Form-bound usage is unchanged (callers clear via `setValue('')`).
165
-
166
- These changes power the new in-app theme generator at `/theme-generator` in the docs site — fork built-in themes, edit colors with the native picker, tweak shape/font/motion controls, save multiple drafts to localStorage, export as CSS or JSON, import JSON back.
167
-
168
- - 1968274: Workspace resolution metadata: `@kouji-ui/core`'s `package.json` now declares `module`, `typings`, `exports`, and `type: "module"` so other workspace packages (`@kouji-ui/components`, future packages) can resolve `@kouji-ui/core` via Node module resolution after `ng build kj-core` runs. Workspace-only paths point at `../../dist/kj-core/...`; a `publishConfig` override rewrites them to in-package paths (`./fesm2022/...`, `./types/...`) for the published npm artifact, so consumers see the same shape as before.
169
-
170
- No public API change. Pure infrastructure for the upcoming `@kouji-ui/components` package (Wave 0 of the themes & components architecture).
171
-
172
- ## 0.0.4
173
-
174
- ### Patch Changes
175
-
176
- - 202d9de: CI fix: husky pre-push hook now skips in CI environments (`$CI` or `$GITHUB_ACTIONS` set). Prevents the Changesets action's automated push from being blocked by the changeset-status gate. No runtime effect on the published package.
177
- - dc0fe0f: Test-only fix: rewrite `KjToastService` test suite to use `TestBed.inject()` so `inject(KJ_TOAST_STRATEGY)` resolves through Angular DI (was crashing with `new KjToastService()` outside an injection context). No runtime change.
178
- - d6b40e1: Internal lint cleanup — replace `any` casts in select option storage with typed `HTMLElement & { __kjOptionValue?: unknown }` and convert ternary statement to if/else in overlay toggle. No public API or behavior change.
179
-
180
- ## 0.0.3
181
-
182
- ### Patch Changes
183
-
184
- - c177d1e: Rewrite README with real install/usage docs, primitive index, and design principles. Replaces the Angular CLI scaffold placeholder.
185
-
186
- ## 0.0.2
187
-
188
- ### Patch Changes
189
-
190
- - 1813d21: Initial publish — headless Angular 21 UI primitives over CDK with WCAG 2.1 AAA semantics and zero CSS.
package/ng-package.json DELETED
@@ -1,11 +0,0 @@
1
- {
2
- "$schema": "../../node_modules/ng-packagr/ng-package.schema.json",
3
- "dest": "../../dist/kj-core",
4
- "lib": {
5
- "entryFile": "src/public-api.ts"
6
- },
7
- "assets": [
8
- { "input": "src/typography", "glob": "prose.css", "output": "typography" },
9
- { "input": "src/icon", "glob": "icon.css", "output": "icon" }
10
- ]
11
- }
package/src/a11y/.gitkeep DELETED
File without changes
@@ -1,55 +0,0 @@
1
- import { render } from '@testing-library/angular';
2
- import { axe, toHaveNoViolations } from 'jest-axe';
3
- import { KjAriaDescribedBy } from './aria-describedby';
4
-
5
- expect.extend(toHaveNoViolations);
6
-
7
- describe('KjAriaDescribedBy', () => {
8
- it('sets aria-describedby from a single id string', async () => {
9
- const { container } = await render(
10
- `<input kjAriaDescribedBy [kjDescribedBy]="'hint-1'" />
11
- <span id="hint-1">This is a hint</span>`,
12
- { imports: [KjAriaDescribedBy] },
13
- );
14
- expect(container.querySelector('input')).toHaveAttribute('aria-describedby', 'hint-1');
15
- });
16
-
17
- it('sets aria-describedby from multiple ids', async () => {
18
- const { container } = await render(
19
- `<input kjAriaDescribedBy [kjDescribedBy]="['hint-1', 'error-1']" />
20
- <span id="hint-1">Hint</span>
21
- <span id="error-1">Error</span>`,
22
- { imports: [KjAriaDescribedBy] },
23
- );
24
- expect(container.querySelector('input')).toHaveAttribute(
25
- 'aria-describedby',
26
- 'hint-1 error-1',
27
- );
28
- });
29
-
30
- it('removes aria-describedby when given empty array', async () => {
31
- const { container } = await render(
32
- `<input kjAriaDescribedBy [kjDescribedBy]="[]" />`,
33
- { imports: [KjAriaDescribedBy] },
34
- );
35
- expect(container.querySelector('input')).not.toHaveAttribute('aria-describedby');
36
- });
37
-
38
- it('removes aria-describedby when given empty string', async () => {
39
- const { container } = await render(
40
- `<input kjAriaDescribedBy [kjDescribedBy]="''" />`,
41
- { imports: [KjAriaDescribedBy] },
42
- );
43
- expect(container.querySelector('input')).not.toHaveAttribute('aria-describedby');
44
- });
45
-
46
- it('passes axe accessibility audit', async () => {
47
- const { container } = await render(
48
- `<label for="f">Name</label>
49
- <input id="f" kjAriaDescribedBy [kjDescribedBy]="'hint'" />
50
- <span id="hint">Enter your full name</span>`,
51
- { imports: [KjAriaDescribedBy] },
52
- );
53
- expect(await axe(container)).toHaveNoViolations();
54
- });
55
- });
@@ -1,37 +0,0 @@
1
- import { Directive, computed, input } from '@angular/core';
2
-
3
- /**
4
- * Wires `aria-describedby` to one or more element IDs.
5
- * Accepts a single ID string or an array of ID strings.
6
- * Removes the attribute automatically when the value is empty.
7
- *
8
- * @example
9
- * ```html
10
- * <input kjAriaDescribedBy [kjDescribedBy]="['hint-id', errorId()]" />
11
- * <span id="hint-id">Format: DD/MM/YYYY</span>
12
- * ```
13
- * @doc-category Core/Accessibility
14
- * @doc
15
- * @doc-name a11y
16
- * @doc-description Wires `aria-describedby` from a single id or an array of ids onto any element.
17
- * @doc-is-main
18
- */
19
- @Directive({
20
- selector: '[kjAriaDescribedBy]',
21
- standalone: true,
22
- host: {
23
- '[attr.aria-describedby]': 'ariaDescribedBy()',
24
- },
25
- })
26
- export class KjAriaDescribedBy {
27
- /** One or more element IDs to reference via `aria-describedby`. */
28
- kjDescribedBy = input<string | readonly string[]>('');
29
-
30
- /** @internal */
31
- readonly ariaDescribedBy = computed(() => {
32
- const val = this.kjDescribedBy();
33
- const ids = Array.isArray(val) ? val : [val];
34
- const filtered = ids.filter(Boolean);
35
- return filtered.length ? filtered.join(' ') : null;
36
- });
37
- }
@@ -1,55 +0,0 @@
1
- import { render } from '@testing-library/angular';
2
- import { axe, toHaveNoViolations } from 'jest-axe';
3
- import { KjAriaLabelledBy } from './aria-labelledby';
4
-
5
- expect.extend(toHaveNoViolations);
6
-
7
- describe('KjAriaLabelledBy', () => {
8
- it('sets aria-labelledby from a single id string', async () => {
9
- const { container } = await render(
10
- `<section kjAriaLabelledBy [kjLabelledBy]="'h-1'">
11
- <h2 id="h-1">Features</h2>
12
- </section>`,
13
- { imports: [KjAriaLabelledBy] },
14
- );
15
- expect(container.querySelector('section')).toHaveAttribute('aria-labelledby', 'h-1');
16
- });
17
-
18
- it('sets aria-labelledby from multiple ids', async () => {
19
- const { container } = await render(
20
- `<section kjAriaLabelledBy [kjLabelledBy]="['h-1', 'h-2']">
21
- <h2 id="h-1">A</h2>
22
- <h2 id="h-2">B</h2>
23
- </section>`,
24
- { imports: [KjAriaLabelledBy] },
25
- );
26
- expect(container.querySelector('section')).toHaveAttribute('aria-labelledby', 'h-1 h-2');
27
- });
28
-
29
- it('removes aria-labelledby when given empty array', async () => {
30
- const { container } = await render(
31
- `<section kjAriaLabelledBy [kjLabelledBy]="[]"></section>`,
32
- { imports: [KjAriaLabelledBy] },
33
- );
34
- expect(container.querySelector('section')).not.toHaveAttribute('aria-labelledby');
35
- });
36
-
37
- it('removes aria-labelledby when given empty string', async () => {
38
- const { container } = await render(
39
- `<section kjAriaLabelledBy [kjLabelledBy]="''"></section>`,
40
- { imports: [KjAriaLabelledBy] },
41
- );
42
- expect(container.querySelector('section')).not.toHaveAttribute('aria-labelledby');
43
- });
44
-
45
- it('passes axe accessibility audit', async () => {
46
- const { container } = await render(
47
- `<section kjAriaLabelledBy [kjLabelledBy]="'h-1'">
48
- <h2 id="h-1">Features</h2>
49
- <p>Stuff</p>
50
- </section>`,
51
- { imports: [KjAriaLabelledBy] },
52
- );
53
- expect(await axe(container)).toHaveNoViolations();
54
- });
55
- });
@@ -1,38 +0,0 @@
1
- import { Directive, computed, input } from '@angular/core';
2
-
3
- /**
4
- * Wires `aria-labelledby` to one or more element IDs.
5
- * Accepts a single ID string or an array of ID strings.
6
- * Removes the attribute automatically when the value is empty.
7
- *
8
- * @example
9
- * ```html
10
- * <section kjAriaLabelledBy [kjLabelledBy]="'features-heading'">
11
- * <h2 id="features-heading">Features</h2>
12
- * …
13
- * </section>
14
- * ```
15
- * @doc-category Core/Accessibility
16
- * @doc
17
- * @doc-name a11y
18
- * @doc-description Wires `aria-labelledby` from a single id or an array of ids onto any element.
19
- */
20
- @Directive({
21
- selector: '[kjAriaLabelledBy]',
22
- standalone: true,
23
- host: {
24
- '[attr.aria-labelledby]': 'ariaLabelledBy()',
25
- },
26
- })
27
- export class KjAriaLabelledBy {
28
- /** One or more element IDs to reference via `aria-labelledby`. */
29
- kjLabelledBy = input<string | readonly string[]>('');
30
-
31
- /** @internal */
32
- readonly ariaLabelledBy = computed(() => {
33
- const val = this.kjLabelledBy();
34
- const ids = Array.isArray(val) ? val : [val];
35
- const filtered = ids.filter(Boolean);
36
- return filtered.length ? filtered.join(' ') : null;
37
- });
38
- }
@@ -1,86 +0,0 @@
1
- import { render, fireEvent } from '@testing-library/angular';
2
- import { axe, toHaveNoViolations } from 'jest-axe';
3
- import { KjFocusTrap } from './focus-trap';
4
-
5
- expect.extend(toHaveNoViolations);
6
-
7
- describe('KjFocusTrap', () => {
8
- it('renders without error when enabled', async () => {
9
- const { container } = await render(
10
- `<div kjFocusTrap [kjFocusTrapEnabled]="true">
11
- <button>First</button>
12
- <button>Last</button>
13
- </div>`,
14
- { imports: [KjFocusTrap] },
15
- );
16
- expect(container.querySelector('[kjFocusTrap]')).toBeInTheDocument();
17
- });
18
-
19
- it('renders without error when disabled', async () => {
20
- const { container } = await render(
21
- `<div kjFocusTrap [kjFocusTrapEnabled]="false">
22
- <button>First</button>
23
- </div>`,
24
- { imports: [KjFocusTrap] },
25
- );
26
- expect(container.querySelector('[kjFocusTrap]')).toBeInTheDocument();
27
- });
28
-
29
- it('wraps focus from last to first on Tab when enabled', async () => {
30
- const { container } = await render(
31
- `<div kjFocusTrap [kjFocusTrapEnabled]="true">
32
- <button>First</button>
33
- <button>Last</button>
34
- </div>`,
35
- { imports: [KjFocusTrap] },
36
- );
37
- const buttons = container.querySelectorAll('button');
38
- const last = buttons[buttons.length - 1] as HTMLElement;
39
- last.focus();
40
- fireEvent.keyDown(document, { key: 'Tab', shiftKey: false });
41
- expect(document.activeElement).toBe(buttons[0]);
42
- });
43
-
44
- it('wraps focus from first to last on Shift+Tab when enabled', async () => {
45
- const { container } = await render(
46
- `<div kjFocusTrap [kjFocusTrapEnabled]="true">
47
- <button>First</button>
48
- <button>Last</button>
49
- </div>`,
50
- { imports: [KjFocusTrap] },
51
- );
52
- const buttons = container.querySelectorAll('button');
53
- const first = buttons[0] as HTMLElement;
54
- first.focus();
55
- fireEvent.keyDown(document, { key: 'Tab', shiftKey: true });
56
- expect(document.activeElement).toBe(buttons[buttons.length - 1]);
57
- });
58
-
59
- it('does not trap focus when disabled', async () => {
60
- const { container } = await render(
61
- `<div kjFocusTrap [kjFocusTrapEnabled]="false">
62
- <button>First</button>
63
- <button>Last</button>
64
- </div>`,
65
- { imports: [KjFocusTrap] },
66
- );
67
- const buttons = container.querySelectorAll('button');
68
- const last = buttons[buttons.length - 1] as HTMLElement;
69
- last.focus();
70
- // Tab should not redirect focus — no focus change from the handler.
71
- const activeBeforeTab = document.activeElement;
72
- fireEvent.keyDown(document, { key: 'Tab', shiftKey: false });
73
- // When disabled, the handler does nothing, so focus stays on last.
74
- expect(document.activeElement).toBe(activeBeforeTab);
75
- });
76
-
77
- it('passes axe accessibility audit', async () => {
78
- const { container } = await render(
79
- `<div role="dialog" aria-label="Test dialog" kjFocusTrap [kjFocusTrapEnabled]="true">
80
- <button>Action</button>
81
- </div>`,
82
- { imports: [KjFocusTrap] },
83
- );
84
- expect(await axe(container)).toHaveNoViolations();
85
- });
86
- });
@@ -1,72 +0,0 @@
1
- import { Directive, DestroyRef, ElementRef, afterNextRender, inject, input } from '@angular/core';
2
- import { PLATFORM_ID } from '@angular/core';
3
- import { isPlatformBrowser } from '@angular/common';
4
-
5
- const FOCUSABLE = [
6
- 'a[href]', 'button:not([disabled])', 'input:not([disabled])',
7
- 'select:not([disabled])', 'textarea:not([disabled])',
8
- '[tabindex]:not([tabindex="-1"])', '[contenteditable="true"]',
9
- ].join(',');
10
-
11
- /**
12
- * Traps keyboard focus within the host element using a native Tab-key interceptor.
13
- * Designed for modal dialogs, drawers, and other overlay patterns.
14
- *
15
- * @example
16
- * ```html
17
- * <div role="dialog" kjFocusTrap [kjFocusTrapEnabled]="isOpen()">
18
- * <button>Action</button>
19
- * </div>
20
- * ```
21
- * @doc-category Core/Accessibility
22
- * @doc
23
- * @doc-name a11y
24
- */
25
- @Directive({
26
- selector: '[kjFocusTrap]',
27
- standalone: true,
28
- })
29
- export class KjFocusTrap {
30
- private readonly el = inject(ElementRef<HTMLElement>);
31
- private readonly destroyRef = inject(DestroyRef);
32
- private readonly platformId = inject(PLATFORM_ID);
33
-
34
- /** Whether the focus trap is active. Set to true when the overlay is open. */
35
- kjFocusTrapEnabled = input<boolean>(false);
36
-
37
- constructor() {
38
- afterNextRender(() => {
39
- if (!isPlatformBrowser(this.platformId)) return;
40
-
41
- const handleKeydown = (e: KeyboardEvent) => {
42
- if (!this.kjFocusTrapEnabled() || e.key !== 'Tab') return;
43
- const focusable = (Array.from(
44
- this.el.nativeElement.querySelectorAll(FOCUSABLE)
45
- ) as HTMLElement[]).filter(el => !el.closest('[hidden]') && getComputedStyle(el).display !== 'none');
46
-
47
- if (!focusable.length) { e.preventDefault(); return; }
48
- const first = focusable[0];
49
- const last = focusable[focusable.length - 1];
50
-
51
- if (e.shiftKey) {
52
- if (document.activeElement === first || !this.el.nativeElement.contains(document.activeElement)) {
53
- e.preventDefault(); last.focus();
54
- }
55
- } else {
56
- if (document.activeElement === last || !this.el.nativeElement.contains(document.activeElement)) {
57
- e.preventDefault(); first.focus();
58
- }
59
- }
60
- };
61
-
62
- document.addEventListener('keydown', handleKeydown);
63
- this.destroyRef.onDestroy(() => document.removeEventListener('keydown', handleKeydown));
64
- });
65
- }
66
-
67
- /** Focuses the first tabbable element inside the trap. */
68
- focusFirst(): void {
69
- const el = this.el.nativeElement.querySelector(FOCUSABLE) as HTMLElement | null;
70
- el?.focus();
71
- }
72
- }
package/src/a11y/index.ts DELETED
@@ -1,10 +0,0 @@
1
- export { KjAriaDescribedBy } from './aria-describedby';
2
- export { KjAriaLabelledBy } from './aria-labelledby';
3
- export { KjFocusTrap } from './focus-trap';
4
- export { KjLiveRegion, type KjLivePoliteness } from './live-region';
5
- export {
6
- KjRovingTabindex,
7
- KjRovingTabindexItemDirective,
8
- KJ_ROVING_TABINDEX,
9
- } from './roving-tabindex';
10
- export { KjVisuallyHidden } from './visually-hidden';