@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,443 +0,0 @@
1
- import {
2
- Directive,
3
- ElementRef,
4
- afterNextRender,
5
- booleanAttribute,
6
- computed,
7
- effect,
8
- inject,
9
- input,
10
- model,
11
- numberAttribute,
12
- output,
13
- signal,
14
- untracked,
15
- } from '@angular/core';
16
- import { KjDirectionality } from '../primitives/directionality/directionality';
17
- import { KjDisabled } from '../primitives/interaction/disabled';
18
- import { clamp, snapToStep } from '../number-input/number-input.format';
19
- import {
20
- KJ_SLIDER,
21
- KjSliderContext,
22
- KjSliderSource,
23
- KjSliderThumbHandle,
24
- } from './slider.context';
25
- import { valueFromClientPosition } from './slider.geometry';
26
-
27
- /**
28
- * Headless root of the `KjSlider` directive family. Owns bounds (`kjMin` /
29
- * `kjMax` / `kjStep` / `kjPageStep` / `kjStepBase`), orientation, RTL,
30
- * inverted axis, range-mode coordination (min-distance, swap policy), tick
31
- * definition, and a per-mode value sugar (`kjValue` for single-thumb,
32
- * `kjRange` for two-thumb). Publishes `KJ_SLIDER` to descendants.
33
- *
34
- * Composition shape (mirrors Radix):
35
- *
36
- * ```html
37
- * <div kjSlider [(kjValue)]="volume" [kjMin]="0" [kjMax]="100" [kjStep]="1">
38
- * <div kjSliderTrack>
39
- * <div kjSliderRange></div>
40
- * <button kjSliderThumb kjAriaLabel="Volume" type="button"></button>
41
- * </div>
42
- * </div>
43
- * ```
44
- *
45
- * In single mode, `[(kjValue)]` mirrors the lone `[kjSliderThumb]` value.
46
- * In range mode, bind `[(kjRange)]` (a `[number, number]` tuple) at the root,
47
- * or two independent `[(kjValue)]`s on the two thumbs (with `KjFormControl`
48
- * carrying each one through Angular Forms — natural validators).
49
- *
50
- * Per-thumb `KjFormControl` lives on the thumb directive, not here. The root
51
- * coordinates: it enforces `kjMinDistance` and `kjAllowThumbCross`, narrows
52
- * each thumb's `aria-valuemin/max` to the partner-thumb position, and
53
- * exposes the dragging / active-thumb state for the wrapper visuals.
54
- *
55
- * @doc-css-var
56
- * --kj-slider-track-thickness — Track width on vertical / height on horizontal.
57
- * --kj-slider-track-bg — Track (unfilled portion) background.
58
- * --kj-slider-fill-bg — Filled-range background between thumbs (or start → thumb).
59
- * --kj-slider-thumb-size — Visual diameter of the thumb circle.
60
- * --kj-slider-thumb-hit — Invisible hit area / touch target around the thumb. 2.75rem for WCAG 2.5.5.
61
- * --kj-slider-thumb-bg — Thumb background fill.
62
- * --kj-slider-thumb-fg — Thumb foreground (icon/text inside) color.
63
- * --kj-slider-thumb-border — Thumb border shorthand. Halos the thumb against the track.
64
- * --kj-slider-tick-size — Diameter of optional tick marks.
65
- * --kj-slider-tick-bg — Tick mark color.
66
- * --kj-slider-radius — Track and fill corner radius. Defaults to a pill.
67
- * --kj-slider-vertical-length — Default rail length when orientation is vertical.
68
- *
69
- * @doc-category Library/Data input
70
- * @doc
71
- * @doc-name slider
72
- * @doc-description Unstyled slider root for single or range value selection with bounds, orientation, RTL, and ticks.
73
- * @doc-is-main
74
- */
75
- @Directive({
76
- selector: '[kjSlider]',
77
- standalone: true,
78
- hostDirectives: [{ directive: KjDisabled, inputs: ['kjDisabled'] }],
79
- providers: [{ provide: KJ_SLIDER, useExisting: KjSlider }],
80
- exportAs: 'kjSlider',
81
- host: {
82
- '[attr.role]': 'role()',
83
- '[attr.data-orientation]': 'kjOrientation()',
84
- '[attr.data-direction]': 'direction()',
85
- '[attr.data-disabled]': 'kjDisabled() ? "" : null',
86
- '[attr.data-readonly]': 'kjReadonly() ? "" : null',
87
- '[attr.data-dragging]': 'dragging() ? "" : null',
88
- },
89
- })
90
- export class KjSlider implements KjSliderContext {
91
- private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);
92
- private readonly directionality = inject(KjDirectionality);
93
-
94
- // ── Bounds ────────────────────────────────────────────────────────────────
95
-
96
- /** Lower bound. Reflected as `aria-valuemin` on each thumb. */
97
- readonly kjMin = input<number, unknown>(0, { transform: numberAttribute });
98
-
99
- /** Upper bound. Reflected as `aria-valuemax` on each thumb. */
100
- readonly kjMax = input<number, unknown>(100, { transform: numberAttribute });
101
-
102
- /** Increment unit. `0` (or non-positive) means continuous (no snap). */
103
- readonly kjStep = input<number, unknown>(1, { transform: numberAttribute });
104
-
105
- /** PageUp / PageDown step. Defaults to `max(kjStep * 10, range / 10)`. */
106
- readonly kjPageStep = input<number | undefined, unknown>(undefined, { transform: optionalNumber });
107
-
108
- /** Lattice base for snap-to-step. Defaults to `kjMin`. */
109
- readonly kjStepBase = input<number | undefined, unknown>(undefined, { transform: optionalNumber });
110
-
111
- // ── Layout ────────────────────────────────────────────────────────────────
112
-
113
- /** Visual orientation. Reflected as `aria-orientation` on each thumb. */
114
- readonly kjOrientation = input<'horizontal' | 'vertical'>('horizontal');
115
-
116
- /** RTL handling. `'auto'` reads from the injected `KjDirectionality`. */
117
- readonly kjDirection = input<'ltr' | 'rtl' | 'auto'>('auto');
118
-
119
- /** Visually flips the axis without changing the keyboard contract. */
120
- readonly kjInverted = input<boolean, unknown>(false, { transform: booleanAttribute });
121
-
122
- // ── Range coordination ───────────────────────────────────────────────────
123
-
124
- /** Minimum delta in *value* units between low and high in range mode. */
125
- readonly kjMinDistance = input<number, unknown>(0, { transform: numberAttribute });
126
-
127
- /** When `true`, low/high silently swap when crossed. Off by default. */
128
- readonly kjAllowThumbCross = input<boolean, unknown>(false, { transform: booleanAttribute });
129
-
130
- // ── Tick + display ───────────────────────────────────────────────────────
131
-
132
- /** Tick definition. `false` (default) renders no ticks; `'auto'` per-step; explicit array for irregular ticks. */
133
- readonly kjTicks = input<readonly number[] | 'auto' | false>(false);
134
-
135
- /** Formatter for `aria-valuetext` / value bubble. Receives the thumb index. */
136
- readonly kjDisplayWith = input<((value: number, thumbIndex: number) => string) | undefined>(undefined);
137
-
138
- // ── State ────────────────────────────────────────────────────────────────
139
-
140
- /** Read-only state. Drag and key both ignored; thumbs remain focusable. */
141
- readonly kjReadonly = input<boolean, unknown>(false, { transform: booleanAttribute });
142
-
143
- /** Effective-disabled. Composed via `KjDisabled`. */
144
- readonly kjDisabled = input<boolean, unknown>(false, { transform: booleanAttribute });
145
-
146
- // ── Sugar models ─────────────────────────────────────────────────────────
147
-
148
- /** Single-mode sugar. Mirrors the single child thumb's value. */
149
- readonly kjValue = model<number | undefined>(undefined);
150
-
151
- /** Range-mode sugar. Mirrors `[low, high]` in stable order. */
152
- readonly kjRange = model<readonly [number, number] | undefined>(undefined);
153
-
154
- // ── Outputs ──────────────────────────────────────────────────────────────
155
-
156
- /** Fires per-tick during drag and per-keypress; high frequency. */
157
- readonly kjInput = output<{
158
- value: number | readonly [number, number];
159
- thumbIndex: number;
160
- source: KjSliderSource;
161
- }>();
162
-
163
- /** Fires once per committed change (pointerup, keypress, programmatic). */
164
- readonly kjCommit = output<number | readonly [number, number]>();
165
-
166
- /** Pointerdown on a thumb (after threshold). */
167
- readonly kjDragStart = output<{ thumbIndex: number }>();
168
-
169
- /** Pointerup / Esc-during-drag. */
170
- readonly kjDragEnd = output<{ thumbIndex: number; cancelled: boolean }>();
171
-
172
- // ── Internal state ───────────────────────────────────────────────────────
173
-
174
- private readonly _thumbs = signal<readonly KjSliderThumbHandle[]>([]);
175
- private readonly _trackEl = signal<HTMLElement | null>(null);
176
- private readonly _dragging = signal(false);
177
- private readonly _activeThumbIndex = signal<number | null>(null);
178
-
179
- // ── Public computed signals (KjSliderContext) ────────────────────────────
180
-
181
- readonly min = computed(() => this.kjMin());
182
- readonly max = computed(() => this.kjMax());
183
- readonly step = computed(() => this.kjStep());
184
- readonly pageStep = computed(() => {
185
- const explicit = this.kjPageStep();
186
- if (explicit !== undefined && explicit > 0) return explicit;
187
- const range = this.max() - this.min();
188
- const stepTen = this.step() * 10;
189
- return Math.max(stepTen > 0 ? stepTen : 1, range / 10);
190
- });
191
- readonly stepBase = computed(() => this.kjStepBase() ?? this.min());
192
-
193
- readonly orientation = computed(() => this.kjOrientation());
194
- readonly direction = computed<'ltr' | 'rtl'>(() => {
195
- const d = this.kjDirection();
196
- if (d === 'rtl') return 'rtl';
197
- if (d === 'ltr') return 'ltr';
198
- return this.directionality.current();
199
- });
200
- readonly inverted = computed(() => this.kjInverted());
201
-
202
- readonly minDistance = computed(() => this.kjMinDistance());
203
- readonly allowThumbCross = computed(() => this.kjAllowThumbCross());
204
-
205
- readonly disabled = computed(() => this.kjDisabled());
206
- readonly readonly = computed(() => this.kjReadonly());
207
- readonly dragging = this._dragging.asReadonly();
208
- readonly activeThumbIndex = this._activeThumbIndex.asReadonly();
209
-
210
- readonly thumbs = this._thumbs.asReadonly();
211
- readonly trackElement = this._trackEl.asReadonly();
212
-
213
- readonly ticks = computed<readonly number[]>(() => {
214
- const t = this.kjTicks();
215
- if (t === false) return [];
216
- if (Array.isArray(t)) return t;
217
- // 'auto' — generate per-step ticks, capped at 100.
218
- const step = this.step();
219
- const min = this.min();
220
- const max = this.max();
221
- if (step <= 0 || max <= min) return [];
222
- const count = Math.floor((max - min) / step) + 1;
223
- if (count > 100) return [];
224
- const out: number[] = [];
225
- for (let i = 0; i < count; i++) out.push(min + i * step);
226
- return out;
227
- });
228
-
229
- readonly displayWith = computed(() => this.kjDisplayWith());
230
-
231
- /** `'group'` for range, `'slider'` is on the thumb instead — root has no role in single mode. */
232
- protected readonly role = computed(() => (this._thumbs().length > 1 ? 'group' : null));
233
-
234
- constructor() {
235
- // After every render pass, if the thumb registry has new entries
236
- // since last sort, re-sort by DOM order. This handles the case where
237
- // child directives register before their host elements are connected
238
- // (e.g. inside an @if/@for block) and `compareDocumentPosition`
239
- // would return DISCONNECTED at registration time.
240
- afterNextRender(() => {
241
- if (this.pendingReindex) {
242
- this.pendingReindex = false;
243
- this.reindexThumbs();
244
- }
245
- });
246
-
247
- // Sugar `[(kjValue)]` ↔ single thumb sync. Read thumb values via
248
- // `untracked` so this effect runs only when the consumer mutates
249
- // `kjValue` or the thumb registry changes — not when the thumb's
250
- // own `kjValue` updates (which would create a feedback loop).
251
- effect(() => {
252
- const v = this.kjValue();
253
- const thumbs = this._thumbs();
254
- if (v == null) return;
255
- if (thumbs.length === 1) {
256
- const handle = thumbs[0];
257
- if (untracked(() => handle.value()) !== v) handle.setValue(v, 'programmatic');
258
- }
259
- });
260
-
261
- // Sugar `[(kjRange)]` ↔ two-thumb sync. Stable-ordered.
262
- effect(() => {
263
- const r = this.kjRange();
264
- const thumbs = this._thumbs();
265
- if (!r) return;
266
- if (thumbs.length !== 2) return;
267
- const [a, b] = r;
268
- const lo = Math.min(a, b);
269
- const hi = Math.max(a, b);
270
- const cur0 = untracked(() => thumbs[0].value());
271
- const cur1 = untracked(() => thumbs[1].value());
272
- if (cur0 !== lo) thumbs[0].setValue(lo, 'programmatic');
273
- if (cur1 !== hi) thumbs[1].setValue(hi, 'programmatic');
274
- });
275
- }
276
-
277
- // ── KjSliderContext.registerThumb / unregisterThumb ──────────────────────
278
-
279
- registerThumb(handle: KjSliderThumbHandle): void {
280
- this._thumbs.update((existing) => {
281
- if (existing.includes(handle)) return existing;
282
- const next = [...existing, handle];
283
- next.forEach((h, i) => ((h as { index: number }).index = i));
284
- return next;
285
- });
286
- // DOM-order sort is deferred until the elements are in the document
287
- // (compareDocumentPosition on disconnected nodes is unreliable). The
288
- // root's afterNextRender pass re-sorts once everything is rendered.
289
- this.pendingReindex = true;
290
- }
291
-
292
- /** Re-sort the thumb registry by current DOM order and re-assign indices. */
293
- private reindexThumbs(): void {
294
- this._thumbs.update((existing) => {
295
- if (existing.length <= 1) return existing;
296
- const next = [...existing];
297
- next.sort((a, b) => orderIndex(a.element, b.element));
298
- const changed = next.some((h, i) => h !== existing[i]);
299
- next.forEach((h, i) => ((h as { index: number }).index = i));
300
- return changed ? next : existing;
301
- });
302
- }
303
-
304
- private pendingReindex = false;
305
-
306
- unregisterThumb(handle: KjSliderThumbHandle): void {
307
- this._thumbs.update((existing) => {
308
- const next = existing.filter((h) => h !== handle);
309
- next.forEach((h, i) => ((h as { index: number }).index = i));
310
- return next;
311
- });
312
- }
313
-
314
- setTrackElement(el: HTMLElement | null): void {
315
- this._trackEl.set(el);
316
- }
317
-
318
- // ── KjSliderContext.setThumbValue (the coordination policy) ──────────────
319
-
320
- setThumbValue(thumbIndex: number, value: number, source: KjSliderSource): void {
321
- if (this.disabled() || this.readonly()) return;
322
- const thumbs = this._thumbs();
323
- const handle = thumbs[thumbIndex];
324
- if (!handle) return;
325
-
326
- // Clamp + snap first.
327
- let next = clamp(value, this.min(), this.max());
328
- next = snapToStep(next, this.step(), this.stepBase());
329
-
330
- // Apply cross-thumb policy in range mode.
331
- if (thumbs.length === 2) {
332
- const minDist = this.minDistance();
333
- if (this.allowThumbCross()) {
334
- // Allowed: assign as-is, but re-sort if the user crossed.
335
- handle.setValue(next, source);
336
- const [low, high] = thumbs;
337
- if (low.value() > high.value()) {
338
- // Swap their values.
339
- const lo = high.value();
340
- const hi = low.value();
341
- low.setValue(lo, source);
342
- high.setValue(hi, source);
343
- }
344
- } else {
345
- // Block: cannot pass partner ± minDist.
346
- if (thumbIndex === 0) {
347
- const ceiling = thumbs[1].value() - minDist;
348
- if (next > ceiling) next = ceiling;
349
- } else {
350
- const floor = thumbs[0].value() + minDist;
351
- if (next < floor) next = floor;
352
- }
353
- handle.setValue(next, source);
354
- }
355
- } else {
356
- handle.setValue(next, source);
357
- }
358
-
359
- // Mirror to sugar models.
360
- if (thumbs.length === 1) {
361
- const v = thumbs[0].value();
362
- if (this.kjValue() !== v) this.kjValue.set(v);
363
- this.kjInput.emit({ value: v, thumbIndex, source });
364
- if (source !== 'pointer' || !this._dragging()) {
365
- this.kjCommit.emit(v);
366
- }
367
- } else if (thumbs.length === 2) {
368
- const tuple: [number, number] = [thumbs[0].value(), thumbs[1].value()];
369
- const cur = this.kjRange();
370
- if (!cur || cur[0] !== tuple[0] || cur[1] !== tuple[1]) this.kjRange.set(tuple);
371
- this.kjInput.emit({ value: tuple, thumbIndex, source });
372
- if (source !== 'pointer' || !this._dragging()) {
373
- this.kjCommit.emit(tuple);
374
- }
375
- }
376
- }
377
-
378
- beginDrag(thumbIndex: number): void {
379
- this._dragging.set(true);
380
- this._activeThumbIndex.set(thumbIndex);
381
- this.kjDragStart.emit({ thumbIndex });
382
- }
383
-
384
- endDrag(cancelled = false): void {
385
- if (!this._dragging()) return;
386
- const idx = this._activeThumbIndex() ?? 0;
387
- this._dragging.set(false);
388
- this.kjDragEnd.emit({ thumbIndex: idx, cancelled });
389
- // Fire commit at drag-end so consumers get a single event per drag.
390
- const thumbs = this._thumbs();
391
- if (thumbs.length === 1) {
392
- this.kjCommit.emit(thumbs[0].value());
393
- } else if (thumbs.length === 2) {
394
- this.kjCommit.emit([thumbs[0].value(), thumbs[1].value()]);
395
- }
396
- }
397
-
398
- /** Find the thumb closest to `value`. Ties resolved by previously-active. */
399
- nearestThumbIndex(value: number): number {
400
- const thumbs = this._thumbs();
401
- if (thumbs.length <= 1) return 0;
402
- const distLo = Math.abs(thumbs[0].value() - value);
403
- const distHi = Math.abs(thumbs[1].value() - value);
404
- if (distLo < distHi) return 0;
405
- if (distHi < distLo) return 1;
406
- // Tie: prefer the previously-active, else high (so click-to-jump tends to widen).
407
- const active = this._activeThumbIndex();
408
- return active ?? 1;
409
- }
410
-
411
- valueFromClientPosition(clientX: number, clientY: number): number {
412
- const track = this._trackEl();
413
- if (!track) return this.min();
414
- return valueFromClientPosition(clientX, clientY, {
415
- min: this.min(),
416
- max: this.max(),
417
- orientation: this.orientation(),
418
- direction: this.direction(),
419
- inverted: this.inverted(),
420
- trackRect: track.getBoundingClientRect(),
421
- });
422
- }
423
-
424
- /** @internal — host element for diagnostics. */
425
- get hostElement(): HTMLElement {
426
- return this.el.nativeElement;
427
- }
428
- }
429
-
430
- function optionalNumber(v: unknown): number | undefined {
431
- if (v === undefined || v === null || v === '') return undefined;
432
- const n = typeof v === 'number' ? v : Number(v);
433
- return Number.isFinite(n) ? n : undefined;
434
- }
435
-
436
- /** DOM-order comparator: `< 0` if `a` precedes `b`. */
437
- function orderIndex(a: HTMLElement, b: HTMLElement): number {
438
- if (a === b) return 0;
439
- const pos = a.compareDocumentPosition(b);
440
- if (pos & Node.DOCUMENT_POSITION_FOLLOWING) return -1;
441
- if (pos & Node.DOCUMENT_POSITION_PRECEDING) return 1;
442
- return 0;
443
- }
@@ -1,10 +0,0 @@
1
- export { KjSpeedDial } from './speed-dial';
2
- export { KjSpeedDialTrigger } from './speed-dial-trigger';
3
- export { KjSpeedDialActions } from './speed-dial-actions';
4
- export { KjSpeedDialAction } from './speed-dial-action';
5
-
6
- export {
7
- KJ_SPEED_DIAL,
8
- type KjSpeedDialContext,
9
- type KjSpeedDialDirection,
10
- } from './speed-dial.context';
@@ -1,40 +0,0 @@
1
- import { Directive, booleanAttribute, inject, input } from '@angular/core';
2
- import { KJ_SPEED_DIAL, type KjSpeedDialContext } from './speed-dial.context';
3
-
4
- /**
5
- * One action button in a Speed Dial cluster.
6
- *
7
- * Apply alongside `kjButton` on a native `<button>` to inherit the button
8
- * presets. This directive contributes `role="menuitem"` and closes the parent
9
- * dial after the consumer's click handler runs (controllable via
10
- * `kjCloseOnActivate`).
11
- *
12
- * @example
13
- * ```html
14
- * <button kjButton kjSpeedDialAction aria-label="Edit" (click)="edit()">E</button>
15
- * ```
16
- *
17
- * @doc-category Core/Actions
18
- * @doc
19
- * @doc-name speed-dial
20
- */
21
- @Directive({
22
- selector: '[kjSpeedDialAction]',
23
- standalone: true,
24
- exportAs: 'kjSpeedDialAction',
25
- host: {
26
- role: 'menuitem',
27
- '(click)': 'onClick()',
28
- },
29
- })
30
- export class KjSpeedDialAction {
31
- private readonly ctx = inject<KjSpeedDialContext>(KJ_SPEED_DIAL);
32
-
33
- /** Whether activating this action should close the dial. Default `true`. */
34
- readonly kjCloseOnActivate = input(true, { transform: booleanAttribute });
35
-
36
- protected onClick(): void {
37
- if (!this.kjCloseOnActivate()) return;
38
- this.ctx.close();
39
- }
40
- }
@@ -1,31 +0,0 @@
1
- import { Directive, inject } from '@angular/core';
2
- import { KJ_SPEED_DIAL, type KjSpeedDialContext } from './speed-dial.context';
3
-
4
- /**
5
- * Action cluster container for a Speed Dial.
6
- *
7
- * Holds `role="menu"` and is hidden from the AT tree (and from layout via the
8
- * styled wrapper's CSS) when the dial is collapsed. Reflects `id`,
9
- * `data-direction`, `data-expanded` and `aria-hidden` for the wrapper to key
10
- * its layout / animation off of.
11
- *
12
- * @doc-category Core/Actions
13
- * @doc
14
- * @doc-name speed-dial
15
- */
16
- @Directive({
17
- selector: '[kjSpeedDialActions]',
18
- standalone: true,
19
- exportAs: 'kjSpeedDialActions',
20
- host: {
21
- role: 'menu',
22
- '[id]': 'ctx.contentId',
23
- '[attr.data-direction]': 'ctx.direction()',
24
- '[attr.data-expanded]': 'ctx.expanded() ? "" : null',
25
- '[attr.aria-hidden]': 'ctx.expanded() ? null : "true"',
26
- },
27
- })
28
- export class KjSpeedDialActions {
29
- /** @internal */
30
- readonly ctx = inject<KjSpeedDialContext>(KJ_SPEED_DIAL);
31
- }
@@ -1,55 +0,0 @@
1
- import { Directive, inject } from '@angular/core';
2
- import { KJ_SPEED_DIAL, type KjSpeedDialContext } from './speed-dial.context';
3
-
4
- /**
5
- * The floating action button that toggles the Speed Dial open/closed.
6
- *
7
- * Apply alongside `kjButton` on a native `<button>` so the trigger inherits
8
- * the button presets (variant, size, focus ring, capture-phase disabled
9
- * suppression). The trigger itself contributes the menu-button ARIA wiring
10
- * (`aria-haspopup="menu"`, `aria-expanded`, `aria-controls`) and the click
11
- * toggle semantics that drive the parent `[kjSpeedDial]`.
12
- *
13
- * @example
14
- * ```html
15
- * <div kjSpeedDial>
16
- * <button kjButton kjSpeedDialTrigger aria-label="Open actions">+</button>
17
- * …
18
- * </div>
19
- * ```
20
- *
21
- * @doc-category Core/Actions
22
- * @doc
23
- * @doc-name speed-dial
24
- */
25
- @Directive({
26
- selector: '[kjSpeedDialTrigger]',
27
- standalone: true,
28
- exportAs: 'kjSpeedDialTrigger',
29
- host: {
30
- type: 'button',
31
- '[attr.aria-haspopup]': '"menu"',
32
- '[attr.aria-expanded]': 'ctx.expanded() ? "true" : "false"',
33
- '[attr.aria-controls]': 'ctx.contentId',
34
- '[attr.data-state]': 'ctx.expanded() ? "open" : "closed"',
35
- '(click)': 'onClick($event)',
36
- '(keydown.escape)': 'onEscape($event)',
37
- },
38
- })
39
- export class KjSpeedDialTrigger {
40
- /** @internal */
41
- readonly ctx = inject<KjSpeedDialContext>(KJ_SPEED_DIAL);
42
-
43
- protected onClick(event: MouseEvent): void {
44
- if (this.ctx.disabled()) return;
45
- event.stopPropagation();
46
- this.ctx.toggle();
47
- }
48
-
49
- protected onEscape(event: Event): void {
50
- if (!this.ctx.expanded()) return;
51
- event.preventDefault();
52
- event.stopPropagation();
53
- this.ctx.close();
54
- }
55
- }
@@ -1,36 +0,0 @@
1
- import { InjectionToken, type Signal } from '@angular/core';
2
-
3
- /** Direction the action cluster fans out from the trigger. */
4
- export type KjSpeedDialDirection = 'up' | 'down' | 'left' | 'right';
5
-
6
- /**
7
- * Shared state surface exposed by `[kjSpeedDial]` to its trigger, container
8
- * and action descendants. Injected via {@link KJ_SPEED_DIAL}.
9
- */
10
- export interface KjSpeedDialContext {
11
- /** Whether the action cluster is currently expanded. */
12
- readonly expanded: Signal<boolean>;
13
- /** Disabled state — when true, opening is suppressed. */
14
- readonly disabled: Signal<boolean>;
15
- /** Direction the cluster fans out from the trigger. */
16
- readonly direction: Signal<KjSpeedDialDirection>;
17
- /** Auto-generated id for the action container, used by `aria-controls`. */
18
- readonly contentId: string;
19
- /** Open the cluster. */
20
- open(): void;
21
- /** Close the cluster. */
22
- close(): void;
23
- /** Toggle the cluster. */
24
- toggle(): void;
25
- }
26
-
27
- /** DI token for the shared speed-dial state. */
28
- export const KJ_SPEED_DIAL = new InjectionToken<KjSpeedDialContext>('KJ_SPEED_DIAL');
29
-
30
- let nextSpeedDialId = 0;
31
-
32
- /** @internal Generates a unique id for each speed-dial instance. */
33
- export function nextKjSpeedDialId(): string {
34
- nextSpeedDialId += 1;
35
- return `kj-speed-dial-${nextSpeedDialId}`;
36
- }