@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,29 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { getIconMode } from './icon.mode';
3
-
4
- describe('getIconMode', () => {
5
- it('returns "font" when name starts with "@font."', () => {
6
- expect(getIconMode('@font.fa-cog')).toBe('font');
7
- });
8
-
9
- it('returns "svg" for plain names', () => {
10
- expect(getIconMode('settings')).toBe('svg');
11
- });
12
-
13
- it('returns "svg" for hyphenated names', () => {
14
- expect(getIconMode('alert-triangle')).toBe('svg');
15
- });
16
-
17
- it('returns "svg" for namespaced names that are not @font', () => {
18
- expect(getIconMode('lucide:settings')).toBe('svg');
19
- });
20
-
21
- it('returns "svg" for empty string', () => {
22
- expect(getIconMode('')).toBe('svg');
23
- });
24
-
25
- it('returns "svg" for "@font" with no trailing dot', () => {
26
- // Strict: must be exactly "@font." prefix; "@fontawesome" stays svg.
27
- expect(getIconMode('@fontawesome')).toBe('svg');
28
- });
29
- });
@@ -1,23 +0,0 @@
1
- // packages/core/src/icon/icon.mode.ts
2
-
3
- /**
4
- * Render mode inferred from an icon name.
5
- * @doc
6
- * @doc-name icon
7
- * @doc-order 14
8
- */
9
- export type IconMode = 'svg' | 'font';
10
-
11
- const FONT_PREFIX = '@font.';
12
-
13
- /**
14
- * Infer render mode from icon name. Names starting with `@font.` use the
15
- * font code path (CSS `content`); everything else uses the svg/css-mask
16
- * code path.
17
- * @doc
18
- * @doc-name icon
19
- * @doc-order 5
20
- */
21
- export function getIconMode(name: string): IconMode {
22
- return name.startsWith(FONT_PREFIX) ? 'font' : 'svg';
23
- }
@@ -1,63 +0,0 @@
1
- import { TestBed } from '@angular/core/testing';
2
- import { describe, expect, it } from 'vitest';
3
- import {
4
- provideIconLoader,
5
- provideIconResolver,
6
- provideIcons,
7
- } from './icon.providers';
8
- import {
9
- KJ_ICON_LOADER,
10
- KJ_ICON_REGISTRY,
11
- KJ_ICON_RESOLVER,
12
- } from './icon.tokens';
13
-
14
- describe('provideIcons', () => {
15
- it('seeds the registry with the given map', () => {
16
- TestBed.configureTestingModule({
17
- providers: [provideIcons({ settings: 'url("a")', save: 'url("b")' })],
18
- });
19
- const reg = TestBed.inject(KJ_ICON_REGISTRY);
20
- expect(reg()).toEqual({ settings: 'url("a")', save: 'url("b")' });
21
- });
22
-
23
- it('merges multiple provideIcons calls (last wins on collision)', () => {
24
- TestBed.configureTestingModule({
25
- providers: [
26
- provideIcons({ settings: 'url("first")', save: 'url("b")' }),
27
- provideIcons({ settings: 'url("second")', trash: 'url("c")' }),
28
- ],
29
- });
30
- const reg = TestBed.inject(KJ_ICON_REGISTRY);
31
- expect(reg()).toEqual({
32
- settings: 'url("second")',
33
- save: 'url("b")',
34
- trash: 'url("c")',
35
- });
36
- });
37
-
38
- it('default registry is empty when no provideIcons is called', () => {
39
- TestBed.configureTestingModule({ providers: [] });
40
- const reg = TestBed.inject(KJ_ICON_REGISTRY);
41
- expect(reg()).toEqual({});
42
- });
43
- });
44
-
45
- describe('provideIconResolver', () => {
46
- it('overrides the default resolver', () => {
47
- TestBed.configureTestingModule({
48
- providers: [provideIconResolver((n) => `url("/icons/${n}.svg")`)],
49
- });
50
- const fn = TestBed.inject(KJ_ICON_RESOLVER);
51
- expect(fn('settings')).toBe('url("/icons/settings.svg")');
52
- });
53
- });
54
-
55
- describe('provideIconLoader', () => {
56
- it('registers an async loader', async () => {
57
- const loader = async (n: string) => `url("loaded:${n}")`;
58
- TestBed.configureTestingModule({ providers: [provideIconLoader(loader)] });
59
- const fn = TestBed.inject(KJ_ICON_LOADER);
60
- expect(fn).not.toBeNull();
61
- await expect(fn!('x')).resolves.toBe('url("loaded:x")');
62
- });
63
- });
@@ -1,47 +0,0 @@
1
- import {
2
- type EnvironmentProviders,
3
- makeEnvironmentProviders,
4
- } from '@angular/core';
5
- import type { IconLoader, IconResolver } from './icon.types';
6
- import {
7
- KJ_ICON_ENTRIES,
8
- KJ_ICON_LOADER,
9
- KJ_ICON_RESOLVER,
10
- } from './icon.tokens';
11
-
12
- /**
13
- * Register a map of icon names to CSS-ready values. Call multiple times to
14
- * compose icon sets; later calls win on key collision.
15
- * @doc
16
- * @doc-name icon
17
- * @doc-order 1
18
- */
19
- export function provideIcons(
20
- map: Record<string, string>,
21
- ): EnvironmentProviders {
22
- return makeEnvironmentProviders([
23
- { provide: KJ_ICON_ENTRIES, useValue: map, multi: true },
24
- ]);
25
- }
26
-
27
- /**
28
- * Override the synchronous fallback resolver used when a name is not in the
29
- * registry and no async loader is configured.
30
- * @doc
31
- * @doc-name icon
32
- * @doc-order 2
33
- */
34
- export function provideIconResolver(fn: IconResolver): EnvironmentProviders {
35
- return makeEnvironmentProviders([{ provide: KJ_ICON_RESOLVER, useValue: fn }]);
36
- }
37
-
38
- /**
39
- * Register an async loader. When present, missing icons are loaded via this
40
- * function and cached into the registry.
41
- * @doc
42
- * @doc-name icon
43
- * @doc-order 3
44
- */
45
- export function provideIconLoader(fn: IconLoader): EnvironmentProviders {
46
- return makeEnvironmentProviders([{ provide: KJ_ICON_LOADER, useValue: fn }]);
47
- }
@@ -1,96 +0,0 @@
1
- import { Injector, runInInjectionContext } from '@angular/core';
2
- import { TestBed } from '@angular/core/testing';
3
- import { beforeEach, describe, expect, it, vi } from 'vitest';
4
- import type { Provider, EnvironmentProviders } from '@angular/core';
5
- import { provideIcons, provideIconLoader, provideIconResolver } from './icon.providers';
6
- import { injectKjIconResolver } from './icon.resolver';
7
-
8
- function makeResolver(providers: (Provider | EnvironmentProviders)[]) {
9
- TestBed.configureTestingModule({ providers });
10
- const injector = TestBed.inject(Injector);
11
- return runInInjectionContext(injector, () => injectKjIconResolver());
12
- }
13
-
14
- describe('injectKjIconResolver', () => {
15
- beforeEach(() => TestBed.resetTestingModule());
16
-
17
- describe('registry path', () => {
18
- it('returns the registry value when name is registered', () => {
19
- const resolve = makeResolver([
20
- provideIcons({ settings: 'url("a")' }),
21
- ]);
22
- expect(resolve('settings')).toBe('url("a")');
23
- });
24
- });
25
-
26
- describe('fallback resolver path (no loader)', () => {
27
- it('falls back to KJ_ICON_RESOLVER when name is missing', () => {
28
- const resolve = makeResolver([
29
- provideIconResolver((n) => `url("/icons/${n}.svg")`),
30
- ]);
31
- expect(resolve('missing')).toBe('url("/icons/missing.svg")');
32
- });
33
-
34
- it('default resolver returns name unchanged', () => {
35
- const resolve = makeResolver([]);
36
- expect(resolve('missing')).toBe('missing');
37
- });
38
- });
39
-
40
- describe('loader path', () => {
41
- it('returns null while load is pending, then fills registry on success', async () => {
42
- let resolveLoad: (v: string) => void;
43
- const loader = vi.fn(
44
- (_n: string) =>
45
- new Promise<string>((res) => {
46
- resolveLoad = (v) => res(v);
47
- }),
48
- );
49
- const resolve = makeResolver([provideIconLoader(loader)]);
50
-
51
- expect(resolve('settings')).toBeNull();
52
- expect(loader).toHaveBeenCalledTimes(1);
53
-
54
- // Concurrent call must NOT trigger a second load (dedupe).
55
- expect(resolve('settings')).toBeNull();
56
- expect(loader).toHaveBeenCalledTimes(1);
57
-
58
- resolveLoad!('url("loaded")');
59
- await Promise.resolve();
60
- await Promise.resolve();
61
-
62
- expect(resolve('settings')).toBe('url("loaded")');
63
- });
64
-
65
- it('on loader rejection, removes pending so a subsequent call retries', async () => {
66
- let calls = 0;
67
- const loader = vi.fn(async (_n: string) => {
68
- calls++;
69
- if (calls === 1) throw new Error('boom');
70
- return 'url("ok")';
71
- });
72
- const resolve = makeResolver([provideIconLoader(loader)]);
73
-
74
- expect(resolve('x')).toBeNull();
75
- await Promise.resolve();
76
- await Promise.resolve();
77
- expect(resolve('x')).toBeNull();
78
- expect(loader).toHaveBeenCalledTimes(2);
79
- await Promise.resolve();
80
- await Promise.resolve();
81
- expect(resolve('x')).toBe('url("ok")');
82
- });
83
-
84
- it('loader path takes precedence over fallback resolver', async () => {
85
- const loader = async () => 'url("from-loader")';
86
- const resolve = makeResolver([
87
- provideIconLoader(loader),
88
- provideIconResolver(() => 'url("from-fallback")'),
89
- ]);
90
- expect(resolve('x')).toBeNull();
91
- await Promise.resolve();
92
- await Promise.resolve();
93
- expect(resolve('x')).toBe('url("from-loader")');
94
- });
95
- });
96
- });
@@ -1,49 +0,0 @@
1
- import { inject } from '@angular/core';
2
- import {
3
- KJ_ICON_LOADER,
4
- KJ_ICON_REGISTRY,
5
- KJ_ICON_RESOLVER,
6
- } from './icon.tokens';
7
-
8
- /**
9
- * Returns a function that resolves an icon name to a CSS-ready value, or
10
- * `null` while an async load is pending.
11
- *
12
- * Lookup order:
13
- * 1. `KJ_ICON_REGISTRY` (eager)
14
- * 2. `KJ_ICON_LOADER` (async; fills registry on success, returns `null` while pending)
15
- * 3. `KJ_ICON_RESOLVER` (sync default, e.g. URL synthesis)
16
- *
17
- * Must be called in an injection context.
18
- * @doc
19
- * @doc-name icon
20
- * @doc-order 4
21
- */
22
- export function injectKjIconResolver(): (name: string) => string | null {
23
- const registry = inject(KJ_ICON_REGISTRY);
24
- const loader = inject(KJ_ICON_LOADER);
25
- const fallback = inject(KJ_ICON_RESOLVER);
26
- const pending = new Set<string>();
27
-
28
- return (name: string): string | null => {
29
- const map = registry();
30
- if (Object.prototype.hasOwnProperty.call(map, name)) return map[name];
31
-
32
- if (loader) {
33
- if (!pending.has(name)) {
34
- pending.add(name);
35
- Promise.resolve(loader(name))
36
- .then((value) => {
37
- registry.update((m) => ({ ...m, [name]: value }));
38
- pending.delete(name);
39
- })
40
- .catch(() => {
41
- pending.delete(name);
42
- });
43
- }
44
- return null;
45
- }
46
-
47
- return fallback(name);
48
- };
49
- }
@@ -1,88 +0,0 @@
1
- import { InjectionToken, type WritableSignal, inject, signal } from '@angular/core';
2
- import type { IconLoader, IconResolver } from './icon.types';
3
-
4
- /**
5
- * Multi-provider entries contributed by `provideIcons(...)`. Each entry is a
6
- * `Record<name, cssReadyValue>`. The registry factory merges all entries at
7
- * injection time.
8
- *
9
- * Internal — consumers use `provideIcons(...)`.
10
- * @internal
11
- */
12
- export const KJ_ICON_ENTRIES = new InjectionToken<Record<string, string>>(
13
- 'KJ_ICON_ENTRIES',
14
- );
15
-
16
- /**
17
- * Runtime icon registry. A writable signal so the async loader can fill in
18
- * resolved icons and any consuming directive's computed re-evaluates.
19
- *
20
- * Stored values are CSS-ready: `url("...")` for svg mode, quoted glyphs for
21
- * font mode. Adapter authors are responsible for the wrapping.
22
- * @doc
23
- * @doc-name icon
24
- * @doc-order 6
25
- */
26
- export const KJ_ICON_REGISTRY = new InjectionToken<
27
- WritableSignal<Record<string, string>>
28
- >('KJ_ICON_REGISTRY', {
29
- providedIn: 'root',
30
- factory: () => {
31
- const entries = inject(KJ_ICON_ENTRIES, { optional: true }) as
32
- | Record<string, string>[]
33
- | Record<string, string>
34
- | null;
35
- const list: Record<string, string>[] = Array.isArray(entries)
36
- ? entries
37
- : entries
38
- ? [entries]
39
- : [];
40
- const merged = list.reduce<Record<string, string>>(
41
- (acc, m) => ({ ...acc, ...m }),
42
- {},
43
- );
44
- return signal<Record<string, string>>(merged);
45
- },
46
- });
47
-
48
- /**
49
- * Synchronous fallback resolver. Called when a name is not in the registry
50
- * and no async loader is configured. Returns a CSS-ready string.
51
- *
52
- * Default: returns the name unchanged.
53
- * @doc
54
- * @doc-name icon
55
- * @doc-order 7
56
- */
57
- export const KJ_ICON_RESOLVER = new InjectionToken<IconResolver>(
58
- 'KJ_ICON_RESOLVER',
59
- { providedIn: 'root', factory: () => (name: string) => name },
60
- );
61
-
62
- /**
63
- * Optional async loader. When set, missing icons are loaded via this fn and
64
- * the result is written into `KJ_ICON_REGISTRY`. While loading, the
65
- * directive renders nothing for that name. If unset, the resolver fallback
66
- * is used instead.
67
- * @doc
68
- * @doc-name icon
69
- * @doc-order 8
70
- */
71
- export const KJ_ICON_LOADER = new InjectionToken<IconLoader | null>(
72
- 'KJ_ICON_LOADER',
73
- { providedIn: 'root', factory: () => null },
74
- );
75
-
76
- /**
77
- * Resolvable path to the kouji icon stylesheet.
78
- *
79
- * ```ts
80
- * import { KJ_ICON_CSS_PATH } from '@kouji-ui/core';
81
- * // or import the file directly:
82
- * import '@kouji-ui/core/icon/icon.css';
83
- * ```
84
- * @doc
85
- * @doc-name icon
86
- * @doc-order 9
87
- */
88
- export const KJ_ICON_CSS_PATH = '@kouji-ui/core/icon/icon.css' as const;
@@ -1,48 +0,0 @@
1
- // packages/core/src/icon/icon.types.ts
2
-
3
- /**
4
- * Resolves an icon name to a CSS-ready value (e.g. `url("data:...")` for svg
5
- * mode, or a quoted glyph like `"\\f013"` for font mode). Synchronous.
6
- *
7
- * Used as a fallback when an icon is not in the registry and no async loader
8
- * is configured.
9
- * @doc
10
- * @doc-name icon
11
- * @doc-order 10
12
- */
13
- export type IconResolver = (name: string) => string;
14
-
15
- /**
16
- * Asynchronously resolves an icon name to a CSS-ready value. Result is
17
- * memoized into the registry so subsequent reads are synchronous.
18
- * @doc
19
- * @doc-name icon
20
- * @doc-order 11
21
- */
22
- export type IconLoader = (name: string) => Promise<string>;
23
-
24
- /**
25
- * Semantic color tokens for `[kjIconColor]`. Maps to
26
- * `var(--kj-color-icon-{token})`. `'inherit'` is the default and means
27
- * "use whatever the surrounding text color is" (CSS `currentColor`).
28
- * @doc
29
- * @doc-name icon
30
- * @doc-order 12
31
- */
32
- export type KjIconColor =
33
- | 'inherit'
34
- | 'muted'
35
- | 'primary'
36
- | 'success'
37
- | 'warning'
38
- | 'danger'
39
- | 'info';
40
-
41
- /**
42
- * Size tokens for `[kjIconSize]`. Maps to `var(--kj-icon-size-{token})`.
43
- * Sizes are em-relative so an icon scales with surrounding text by default.
44
- * @doc
45
- * @doc-name icon
46
- * @doc-order 13
47
- */
48
- export type KjIconSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
package/src/icon/index.ts DELETED
@@ -1,21 +0,0 @@
1
- export { getIconMode, type IconMode } from './icon.mode';
2
- export type {
3
- IconResolver,
4
- IconLoader,
5
- KjIconColor,
6
- KjIconSize,
7
- } from './icon.types';
8
- export {
9
- KJ_ICON_ENTRIES,
10
- KJ_ICON_REGISTRY,
11
- KJ_ICON_RESOLVER,
12
- KJ_ICON_LOADER,
13
- KJ_ICON_CSS_PATH,
14
- } from './icon.tokens';
15
- export {
16
- provideIcons,
17
- provideIconResolver,
18
- provideIconLoader,
19
- } from './icon.providers';
20
- export { injectKjIconResolver } from './icon.resolver';
21
- export { KjIconDirective } from './icon.directive';
@@ -1 +0,0 @@
1
- export { KjInput } from './input';
@@ -1,43 +0,0 @@
1
- import { render } from '@testing-library/angular';
2
- import { FormControl, ReactiveFormsModule } from '@angular/forms';
3
- import { axe, toHaveNoViolations } from 'jest-axe';
4
- import { KjInput } from './input';
5
-
6
- expect.extend(toHaveNoViolations);
7
-
8
- describe('KjInput', () => {
9
- it('renders without error', async () => {
10
- const { container } = await render(`<input kjInput type="text" />`, { imports: [KjInput] });
11
- expect(container.querySelector('input')).toBeInTheDocument();
12
- });
13
-
14
- it('sets aria-invalid and data-invalid when touched + invalid', async () => {
15
- const ctrl = new FormControl('', { updateOn: 'blur' });
16
- const { container } = await render(
17
- `<input kjInput [formControl]="ctrl" [kjInvalid]="ctrl.invalid" />`,
18
- { imports: [KjInput, ReactiveFormsModule], componentProperties: { ctrl } },
19
- );
20
- const input = container.querySelector('input')!;
21
- input.dispatchEvent(new Event('blur'));
22
- await new Promise(r => setTimeout(r, 0));
23
- // touched is set, but ctrl is not invalid by default with no validators
24
- expect(input).toBeInTheDocument();
25
- });
26
-
27
- it('works with formControl binding', async () => {
28
- const ctrl = new FormControl('hello');
29
- const { container } = await render(
30
- `<input kjInput [formControl]="ctrl" />`,
31
- { imports: [KjInput, ReactiveFormsModule], componentProperties: { ctrl } },
32
- );
33
- expect((container.querySelector('input') as HTMLInputElement).value).toBe('hello');
34
- });
35
-
36
- it('passes axe audit', async () => {
37
- const { container } = await render(
38
- `<label for="n">Name</label><input id="n" kjInput type="text" />`,
39
- { imports: [KjInput] },
40
- );
41
- expect(await axe(container)).toHaveNoViolations();
42
- });
43
- });
@@ -1,89 +0,0 @@
1
- import { Directive, ElementRef, effect, inject, input } from '@angular/core';
2
- import { KjDisabled, KjFocusRing, KjFormControl } from '../primitives';
3
-
4
- /**
5
- * Enhances a native `<input>` with Angular forms integration, disabled/invalid state, and focus-ring.
6
- * Supports `formControl`, `formControlName`, and `ngModel` bindings.
7
- *
8
- * @example
9
- * ```html
10
- * <input kjInput type="email" [formControl]="emailCtrl" [kjInvalid]="emailCtrl.invalid" />
11
- * ```
12
- * @doc
13
- * @doc-file input.example.ts
14
- * ```typescript
15
- * import { Component } from '@angular/core';
16
- * import { FormControl, ReactiveFormsModule, Validators } from '@angular/forms';
17
- * import { KjInput } from '@kouji-ui/core';
18
- *
19
- * @Component({
20
- * standalone: true,
21
- * imports: [KjInput, ReactiveFormsModule],
22
- * styles: [`
23
- * .form { padding: 2rem; background: #0c0c0c; display: flex; flex-direction: column; gap: 1rem; max-width: 400px; }
24
- * [kjInput] { padding: 0.625rem 0.875rem; background: #111; border: 1px solid #222; color: #f0ede6; font-family: 'JetBrains Mono', monospace; font-size: 0.875rem; width: 100%; }
25
- * [kjInput]:focus { outline: none; border-color: #b8f500; }
26
- * [aria-invalid="true"] { border-color: #ef4444; }
27
- * .error { color: #ef4444; font-size: 0.75rem; font-family: 'JetBrains Mono', monospace; }
28
- * label { color: #888; font-size: 0.75rem; font-family: 'JetBrains Mono', monospace; }
29
- * `],
30
- * template: `
31
- * <div class="form">
32
- * <label for="email">Email</label>
33
- * <input id="email" kjInput type="email" [formControl]="emailCtrl"
34
- * [kjInvalid]="emailCtrl.invalid && emailCtrl.touched"
35
- * placeholder="you@example.com" />
36
- * @if (emailCtrl.invalid && emailCtrl.touched) {
37
- * <span class="error">Please enter a valid email.</span>
38
- * }
39
- * <label for="disabled">Disabled input</label>
40
- * <input id="disabled" kjInput type="text" [kjDisabled]="true" value="Not editable" />
41
- * </div>
42
- * `,
43
- * })
44
- * export class InputExampleComponent {
45
- * emailCtrl = new FormControl('', [Validators.email, Validators.required]);
46
- * }
47
- * ```
48
- * @doc-category Core/Inputs
49
- * @doc-name input
50
- * @doc-description Adds Angular forms integration, invalid and disabled state, and a focus ring to a native input.
51
- * @doc-is-main
52
- */
53
- @Directive({
54
- selector: '[kjInput]',
55
- standalone: true,
56
- hostDirectives: [
57
- { directive: KjDisabled, inputs: ['kjDisabled'] },
58
- KjFocusRing,
59
- KjFormControl,
60
- ],
61
- host: {
62
- '[attr.aria-invalid]': 'formCtrl.touched() && kjInvalid() ? "true" : null',
63
- '[attr.data-invalid]': 'formCtrl.touched() && kjInvalid() ? "" : null',
64
- '[attr.disabled]': 'formCtrl.disabled() ? "" : null',
65
- '(input)': 'formCtrl.notifyChange($any($event.target).value)',
66
- '(blur)': 'formCtrl.notifyTouched()',
67
- },
68
- })
69
- export class KjInput {
70
- readonly formCtrl = inject(KjFormControl);
71
- private readonly el = inject<ElementRef<HTMLInputElement>>(ElementRef);
72
-
73
- /** Whether the input is in an invalid state. Combined with `touched` for ARIA. */
74
- kjInvalid = input<boolean>(false);
75
-
76
- constructor() {
77
- // Reflect the CVA value signal back to the native input element.
78
- // Skip when the form control's value is null/undefined so external [value]
79
- // bindings (template attribute, parent component) are preserved when no
80
- // ngModel/formControl is wired. When a form is wired, callers clear via
81
- // setValue('') rather than setValue(null), preserving the clear-on-empty
82
- // behavior.
83
- effect(() => {
84
- const val = this.formCtrl.value();
85
- if (val == null) return;
86
- this.el.nativeElement.value = String(val);
87
- });
88
- }
89
- }
@@ -1,3 +0,0 @@
1
- export * from './input-group';
2
- export * from './input-group-addon';
3
- export * from './input-group.context';