@kouji-ui/components 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 (733) hide show
  1. package/fesm2022/kouji-ui-components.mjs +17668 -0
  2. package/fesm2022/kouji-ui-components.mjs.map +1 -0
  3. package/package.json +17 -10
  4. package/types/kouji-ui-components.d.ts +8032 -0
  5. package/.turbo/turbo-build.log +0 -29
  6. package/CHANGELOG.md +0 -192
  7. package/ng-package.json +0 -7
  8. package/src/accordion/_examples/accordion.default.example.ts +0 -31
  9. package/src/accordion/_examples/accordion.disabled.example.ts +0 -38
  10. package/src/accordion/_examples/accordion.multiple.example.ts +0 -31
  11. package/src/accordion/_examples/accordion.rich-content.example.ts +0 -49
  12. package/src/accordion/_examples/index.ts +0 -6
  13. package/src/accordion/accordion.arrow-nav.example.ts +0 -39
  14. package/src/accordion/accordion.css +0 -68
  15. package/src/accordion/accordion.playground.ts +0 -119
  16. package/src/accordion/accordion.spec.ts +0 -117
  17. package/src/accordion/accordion.ts +0 -153
  18. package/src/accordion/accordion.usage.example.ts +0 -38
  19. package/src/accordion/accordion.value.example.ts +0 -60
  20. package/src/accordion/index.ts +0 -1
  21. package/src/alert/_examples/alert.banner.example.ts +0 -56
  22. package/src/alert/_examples/alert.dismissible.example.ts +0 -53
  23. package/src/alert/_examples/alert.example.ts +0 -40
  24. package/src/alert/_examples/alert.variants.example.ts +0 -66
  25. package/src/alert/_examples/alert.with-actions.example.ts +0 -57
  26. package/src/alert/_examples/index.ts +0 -7
  27. package/src/alert/alert.css +0 -133
  28. package/src/alert/alert.playground.ts +0 -111
  29. package/src/alert/alert.spec.ts +0 -167
  30. package/src/alert/alert.ts +0 -250
  31. package/src/alert/alert.usage.example.ts +0 -58
  32. package/src/alert/index.ts +0 -8
  33. package/src/avatar/_examples/avatar-group.example.ts +0 -31
  34. package/src/avatar/_examples/avatar-group.list.example.ts +0 -45
  35. package/src/avatar/_examples/avatar-group.overflow.example.ts +0 -33
  36. package/src/avatar/_examples/avatar-group.shapes.example.ts +0 -39
  37. package/src/avatar/_examples/avatar-group.sizes.example.ts +0 -44
  38. package/src/avatar/_examples/avatar.default.example.ts +0 -18
  39. package/src/avatar/_examples/avatar.initials.example.ts +0 -20
  40. package/src/avatar/_examples/avatar.shapes.example.ts +0 -22
  41. package/src/avatar/_examples/avatar.sizes.example.ts +0 -26
  42. package/src/avatar/_examples/avatar.with-image.example.ts +0 -20
  43. package/src/avatar/_examples/index.ts +0 -12
  44. package/src/avatar/avatar-group.spec.ts +0 -138
  45. package/src/avatar/avatar-group.ts +0 -127
  46. package/src/avatar/avatar-group.usage.example.ts +0 -30
  47. package/src/avatar/avatar.css +0 -58
  48. package/src/avatar/avatar.playground.ts +0 -95
  49. package/src/avatar/avatar.ts +0 -123
  50. package/src/avatar/index.ts +0 -2
  51. package/src/badge/_examples/badge.default.example.ts +0 -18
  52. package/src/badge/_examples/badge.sizes.example.ts +0 -25
  53. package/src/badge/_examples/badge.variants.example.ts +0 -24
  54. package/src/badge/_examples/badge.with-dot.example.ts +0 -31
  55. package/src/badge/_examples/badge.with-icon.example.ts +0 -23
  56. package/src/badge/_examples/index.ts +0 -7
  57. package/src/badge/badge.css +0 -59
  58. package/src/badge/badge.playground.ts +0 -49
  59. package/src/badge/badge.ts +0 -86
  60. package/src/badge/badge.usage.example.ts +0 -22
  61. package/src/badge/index.ts +0 -1
  62. package/src/breadcrumb/_examples/breadcrumb.custom-separator.example.ts +0 -53
  63. package/src/breadcrumb/_examples/breadcrumb.example.ts +0 -48
  64. package/src/breadcrumb/_examples/breadcrumb.long-path.example.ts +0 -58
  65. package/src/breadcrumb/_examples/breadcrumb.truncated.example.ts +0 -59
  66. package/src/breadcrumb/_examples/breadcrumb.with-icons.example.ts +0 -66
  67. package/src/breadcrumb/_examples/index.ts +0 -7
  68. package/src/breadcrumb/breadcrumb.css +0 -121
  69. package/src/breadcrumb/breadcrumb.playground.ts +0 -93
  70. package/src/breadcrumb/breadcrumb.spec.ts +0 -230
  71. package/src/breadcrumb/breadcrumb.ts +0 -272
  72. package/src/breadcrumb/breadcrumb.usage.example.ts +0 -45
  73. package/src/breadcrumb/index.ts +0 -1
  74. package/src/button/_examples/button.anchor.example.ts +0 -18
  75. package/src/button/_examples/button.configured.example.ts +0 -43
  76. package/src/button/_examples/button.disabled.example.ts +0 -25
  77. package/src/button/_examples/button.example.ts +0 -22
  78. package/src/button/_examples/button.icon.example.ts +0 -27
  79. package/src/button/_examples/button.loading.example.ts +0 -31
  80. package/src/button/_examples/button.pressed.example.ts +0 -24
  81. package/src/button/_examples/button.sizes.example.ts +0 -26
  82. package/src/button/_examples/button.usage.example.ts +0 -66
  83. package/src/button/_examples/button.variants.example.ts +0 -26
  84. package/src/button/_examples/index.ts +0 -12
  85. package/src/button/button.css +0 -263
  86. package/src/button/button.playground.ts +0 -79
  87. package/src/button/button.spec.ts +0 -100
  88. package/src/button/button.ts +0 -150
  89. package/src/button/index.ts +0 -1
  90. package/src/button-group/_examples/button-group.example.ts +0 -30
  91. package/src/button-group/_examples/button-group.icon-only.example.ts +0 -30
  92. package/src/button-group/_examples/button-group.toggle.example.ts +0 -36
  93. package/src/button-group/_examples/button-group.variants.example.ts +0 -40
  94. package/src/button-group/_examples/button-group.vertical.example.ts +0 -29
  95. package/src/button-group/_examples/index.ts +0 -7
  96. package/src/button-group/button-group.css +0 -80
  97. package/src/button-group/button-group.playground.ts +0 -94
  98. package/src/button-group/button-group.spec.ts +0 -119
  99. package/src/button-group/button-group.ts +0 -130
  100. package/src/button-group/button-group.usage.example.ts +0 -35
  101. package/src/button-group/index.ts +0 -1
  102. package/src/calendar/_examples/calendar.example.ts +0 -33
  103. package/src/calendar/_examples/index.ts +0 -3
  104. package/src/calendar/calendar.css +0 -129
  105. package/src/calendar/calendar.playground.ts +0 -84
  106. package/src/calendar/calendar.spec.ts +0 -50
  107. package/src/calendar/calendar.ts +0 -171
  108. package/src/calendar/calendar.usage.example.ts +0 -33
  109. package/src/calendar/index.ts +0 -1
  110. package/src/card/_examples/card.cover.example.ts +0 -53
  111. package/src/card/_examples/card.example.ts +0 -27
  112. package/src/card/_examples/card.full.example.ts +0 -51
  113. package/src/card/_examples/index.ts +0 -5
  114. package/src/card/card.css +0 -120
  115. package/src/card/card.playground.ts +0 -116
  116. package/src/card/card.spec.ts +0 -50
  117. package/src/card/card.ts +0 -194
  118. package/src/card/card.usage.example.ts +0 -46
  119. package/src/card/index.ts +0 -1
  120. package/src/carousel/_examples/carousel.autoplay.example.ts +0 -69
  121. package/src/carousel/_examples/carousel.example.ts +0 -60
  122. package/src/carousel/_examples/carousel.indicators.example.ts +0 -64
  123. package/src/carousel/_examples/carousel.lazy-load.example.ts +0 -85
  124. package/src/carousel/_examples/carousel.tabs-pattern.example.ts +0 -61
  125. package/src/carousel/_examples/index.ts +0 -7
  126. package/src/carousel/carousel.css +0 -181
  127. package/src/carousel/carousel.playground.ts +0 -135
  128. package/src/carousel/carousel.spec.ts +0 -211
  129. package/src/carousel/carousel.ts +0 -399
  130. package/src/carousel/carousel.usage.example.ts +0 -46
  131. package/src/carousel/index.ts +0 -1
  132. package/src/cascade-select/_examples/cascade-select.data-driven.example.ts +0 -119
  133. package/src/cascade-select/_examples/cascade-select.disabled.example.ts +0 -74
  134. package/src/cascade-select/_examples/cascade-select.example.ts +0 -80
  135. package/src/cascade-select/_examples/cascade-select.field.example.ts +0 -73
  136. package/src/cascade-select/_examples/cascade-select.path.example.ts +0 -85
  137. package/src/cascade-select/_examples/index.ts +0 -7
  138. package/src/cascade-select/cascade-select.css +0 -120
  139. package/src/cascade-select/cascade-select.playground.ts +0 -133
  140. package/src/cascade-select/cascade-select.ts +0 -201
  141. package/src/cascade-select/cascade-select.usage.example.ts +0 -44
  142. package/src/cascade-select/index.ts +0 -5
  143. package/src/chat/_examples/chat-bubble.example.ts +0 -71
  144. package/src/chat/_examples/chat-bubble.grouped.example.ts +0 -69
  145. package/src/chat/_examples/chat-bubble.sides.example.ts +0 -41
  146. package/src/chat/_examples/chat-bubble.variants.example.ts +0 -58
  147. package/src/chat/_examples/chat-bubble.with-state.example.ts +0 -57
  148. package/src/chat/_examples/index.ts +0 -7
  149. package/src/chat/chat.css +0 -231
  150. package/src/chat/chat.playground.ts +0 -171
  151. package/src/chat/chat.spec.ts +0 -343
  152. package/src/chat/chat.ts +0 -269
  153. package/src/chat/chat.usage.example.ts +0 -49
  154. package/src/chat/index.ts +0 -13
  155. package/src/checkbox/_examples/checkbox.checked.example.ts +0 -20
  156. package/src/checkbox/_examples/checkbox.default.example.ts +0 -20
  157. package/src/checkbox/_examples/checkbox.disabled.example.ts +0 -26
  158. package/src/checkbox/_examples/checkbox.indeterminate.example.ts +0 -20
  159. package/src/checkbox/_examples/checkbox.usage.example.ts +0 -62
  160. package/src/checkbox/_examples/index.ts +0 -7
  161. package/src/checkbox/checkbox.css +0 -74
  162. package/src/checkbox/checkbox.playground.ts +0 -68
  163. package/src/checkbox/checkbox.ts +0 -122
  164. package/src/checkbox/index.ts +0 -1
  165. package/src/color-picker/_examples/color-picker.alpha.example.ts +0 -36
  166. package/src/color-picker/_examples/color-picker.example.ts +0 -34
  167. package/src/color-picker/_examples/color-picker.hex-input.example.ts +0 -53
  168. package/src/color-picker/_examples/color-picker.in-form.example.ts +0 -60
  169. package/src/color-picker/_examples/color-picker.usage.example.ts +0 -58
  170. package/src/color-picker/_examples/color-picker.with-presets.example.ts +0 -45
  171. package/src/color-picker/_examples/index.ts +0 -8
  172. package/src/color-picker/color-picker.css +0 -183
  173. package/src/color-picker/color-picker.playground.ts +0 -83
  174. package/src/color-picker/color-picker.spec.ts +0 -94
  175. package/src/color-picker/color-picker.ts +0 -234
  176. package/src/color-picker/index.ts +0 -1
  177. package/src/combobox/_examples/combobox.async.example.ts +0 -85
  178. package/src/combobox/_examples/combobox.empty-state.example.ts +0 -36
  179. package/src/combobox/_examples/combobox.example.ts +0 -36
  180. package/src/combobox/_examples/combobox.free-text.example.ts +0 -42
  181. package/src/combobox/_examples/combobox.usage.example.ts +0 -51
  182. package/src/combobox/_examples/combobox.with-icons.example.ts +0 -49
  183. package/src/combobox/_examples/index.ts +0 -8
  184. package/src/combobox/combobox.css +0 -101
  185. package/src/combobox/combobox.playground.ts +0 -90
  186. package/src/combobox/combobox.spec.ts +0 -111
  187. package/src/combobox/combobox.ts +0 -219
  188. package/src/combobox/index.ts +0 -6
  189. package/src/command-palette/_examples/command-palette.async.example.ts +0 -99
  190. package/src/command-palette/_examples/command-palette.dialog.example.ts +0 -90
  191. package/src/command-palette/_examples/command-palette.example.ts +0 -40
  192. package/src/command-palette/_examples/command-palette.fuzzy.example.ts +0 -54
  193. package/src/command-palette/_examples/command-palette.groups.example.ts +0 -55
  194. package/src/command-palette/_examples/command-palette.usage.example.ts +0 -49
  195. package/src/command-palette/_examples/index.ts +0 -8
  196. package/src/command-palette/command-palette.css +0 -234
  197. package/src/command-palette/command-palette.playground.ts +0 -119
  198. package/src/command-palette/command-palette.ts +0 -448
  199. package/src/command-palette/index.ts +0 -10
  200. package/src/confirm-popup/_examples/confirm-popup.destructive.example.ts +0 -72
  201. package/src/confirm-popup/_examples/confirm-popup.example.ts +0 -82
  202. package/src/confirm-popup/_examples/confirm-popup.placement.example.ts +0 -97
  203. package/src/confirm-popup/_examples/confirm-popup.usage.example.ts +0 -94
  204. package/src/confirm-popup/_examples/confirm-popup.with-message.example.ts +0 -76
  205. package/src/confirm-popup/_examples/index.ts +0 -7
  206. package/src/confirm-popup/confirm-popup.css +0 -47
  207. package/src/confirm-popup/confirm-popup.playground.ts +0 -109
  208. package/src/confirm-popup/confirm-popup.spec.ts +0 -209
  209. package/src/confirm-popup/confirm-popup.ts +0 -279
  210. package/src/confirm-popup/index.ts +0 -1
  211. package/src/date-picker/_examples/date-picker.disabled-dates.example.ts +0 -44
  212. package/src/date-picker/_examples/date-picker.example.ts +0 -38
  213. package/src/date-picker/_examples/date-picker.locale.example.ts +0 -50
  214. package/src/date-picker/_examples/date-picker.readonly.example.ts +0 -32
  215. package/src/date-picker/_examples/date-picker.usage.example.ts +0 -60
  216. package/src/date-picker/_examples/date-picker.with-min-max.example.ts +0 -47
  217. package/src/date-picker/_examples/index.ts +0 -8
  218. package/src/date-picker/date-picker.css +0 -61
  219. package/src/date-picker/date-picker.playground.ts +0 -79
  220. package/src/date-picker/date-picker.spec.ts +0 -71
  221. package/src/date-picker/date-picker.ts +0 -185
  222. package/src/date-picker/index.ts +0 -1
  223. package/src/dialog/_examples/dialog.confirmation.example.ts +0 -30
  224. package/src/dialog/_examples/dialog.default.example.ts +0 -30
  225. package/src/dialog/_examples/dialog.nested.example.ts +0 -86
  226. package/src/dialog/_examples/dialog.scrollable.example.ts +0 -30
  227. package/src/dialog/_examples/dialog.usage.example.ts +0 -57
  228. package/src/dialog/_examples/dialog.with-form.example.ts +0 -48
  229. package/src/dialog/_examples/index.ts +0 -8
  230. package/src/dialog/dialog.css +0 -56
  231. package/src/dialog/dialog.playground.ts +0 -136
  232. package/src/dialog/dialog.ts +0 -82
  233. package/src/dialog/index.ts +0 -1
  234. package/src/divider/_examples/divider.example.ts +0 -27
  235. package/src/divider/_examples/divider.sizes.example.ts +0 -33
  236. package/src/divider/_examples/divider.structural.example.ts +0 -55
  237. package/src/divider/_examples/divider.usage.example.ts +0 -48
  238. package/src/divider/_examples/divider.variants.example.ts +0 -33
  239. package/src/divider/_examples/divider.vertical.example.ts +0 -38
  240. package/src/divider/_examples/divider.with-content.example.ts +0 -38
  241. package/src/divider/_examples/index.ts +0 -9
  242. package/src/divider/divider.css +0 -93
  243. package/src/divider/divider.playground.ts +0 -97
  244. package/src/divider/divider.spec.ts +0 -207
  245. package/src/divider/divider.ts +0 -220
  246. package/src/divider/index.ts +0 -1
  247. package/src/drawer/_examples/drawer.example.ts +0 -30
  248. package/src/drawer/_examples/drawer.modal-vs-non-modal.example.ts +0 -27
  249. package/src/drawer/_examples/drawer.scrollable.example.ts +0 -30
  250. package/src/drawer/_examples/drawer.sides.example.ts +0 -32
  251. package/src/drawer/_examples/drawer.usage.example.ts +0 -56
  252. package/src/drawer/_examples/drawer.with-form.example.ts +0 -48
  253. package/src/drawer/_examples/index.ts +0 -8
  254. package/src/drawer/drawer.css +0 -130
  255. package/src/drawer/drawer.playground.ts +0 -107
  256. package/src/drawer/drawer.spec.ts +0 -216
  257. package/src/drawer/drawer.ts +0 -85
  258. package/src/drawer/index.ts +0 -1
  259. package/src/dropdown-menu/_examples/dropdown-menu.disabled.example.ts +0 -19
  260. package/src/dropdown-menu/_examples/dropdown-menu.example.ts +0 -20
  261. package/src/dropdown-menu/_examples/dropdown-menu.shortcuts.example.ts +0 -31
  262. package/src/dropdown-menu/_examples/dropdown-menu.sides.example.ts +0 -18
  263. package/src/dropdown-menu/_examples/dropdown-menu.usage.example.ts +0 -56
  264. package/src/dropdown-menu/_examples/dropdown-menu.with-icons.example.ts +0 -31
  265. package/src/dropdown-menu/_examples/dropdown-menu.with-separator.example.ts +0 -41
  266. package/src/dropdown-menu/_examples/index.ts +0 -9
  267. package/src/dropdown-menu/dropdown-menu.css +0 -108
  268. package/src/dropdown-menu/dropdown-menu.playground.ts +0 -109
  269. package/src/dropdown-menu/dropdown-menu.spec.ts +0 -5
  270. package/src/dropdown-menu/dropdown-menu.ts +0 -128
  271. package/src/dropdown-menu/index.ts +0 -1
  272. package/src/empty-state/_examples/empty-state.error.example.ts +0 -63
  273. package/src/empty-state/_examples/empty-state.example.ts +0 -59
  274. package/src/empty-state/_examples/empty-state.search.example.ts +0 -82
  275. package/src/empty-state/_examples/empty-state.sizes.example.ts +0 -76
  276. package/src/empty-state/_examples/empty-state.usage.example.ts +0 -66
  277. package/src/empty-state/_examples/empty-state.with-actions.example.ts +0 -68
  278. package/src/empty-state/_examples/index.ts +0 -8
  279. package/src/empty-state/empty-state.css +0 -114
  280. package/src/empty-state/empty-state.playground.ts +0 -87
  281. package/src/empty-state/empty-state.spec.ts +0 -211
  282. package/src/empty-state/empty-state.ts +0 -276
  283. package/src/empty-state/index.ts +0 -1
  284. package/src/example-components.ts +0 -396
  285. package/src/field/_examples/field.disabled.example.ts +0 -49
  286. package/src/field/_examples/field.example.ts +0 -51
  287. package/src/field/_examples/field.required.example.ts +0 -46
  288. package/src/field/_examples/field.with-error.example.ts +0 -73
  289. package/src/field/_examples/field.with-prefix-suffix.example.ts +0 -63
  290. package/src/field/_examples/index.ts +0 -7
  291. package/src/field/field.css +0 -138
  292. package/src/field/field.playground.ts +0 -108
  293. package/src/field/field.spec.ts +0 -132
  294. package/src/field/field.ts +0 -232
  295. package/src/field/field.usage.example.ts +0 -63
  296. package/src/field/index.ts +0 -7
  297. package/src/file-upload/_examples/file-upload.dropzone.example.ts +0 -32
  298. package/src/file-upload/_examples/file-upload.example.ts +0 -29
  299. package/src/file-upload/_examples/file-upload.image-preview.example.ts +0 -31
  300. package/src/file-upload/_examples/file-upload.multiple.example.ts +0 -23
  301. package/src/file-upload/_examples/file-upload.with-progress.example.ts +0 -59
  302. package/src/file-upload/_examples/index.ts +0 -7
  303. package/src/file-upload/file-upload.css +0 -207
  304. package/src/file-upload/file-upload.playground.ts +0 -84
  305. package/src/file-upload/file-upload.spec.ts +0 -94
  306. package/src/file-upload/file-upload.ts +0 -301
  307. package/src/file-upload/file-upload.usage.example.ts +0 -45
  308. package/src/file-upload/index.ts +0 -1
  309. package/src/form/_examples/form.async-submit.example.ts +0 -72
  310. package/src/form/_examples/form.compound.example.ts +0 -93
  311. package/src/form/_examples/form.example.ts +0 -70
  312. package/src/form/_examples/form.validation.example.ts +0 -67
  313. package/src/form/_examples/index.ts +0 -6
  314. package/src/form/form.css +0 -63
  315. package/src/form/form.playground.ts +0 -145
  316. package/src/form/form.spec.ts +0 -96
  317. package/src/form/form.ts +0 -216
  318. package/src/form/form.usage.example.ts +0 -63
  319. package/src/form/index.ts +0 -5
  320. package/src/icon/_examples/icon.gallery.example.ts +0 -199
  321. package/src/icon/_examples/icon.usage.example.ts +0 -46
  322. package/src/icon/_examples/index.ts +0 -4
  323. package/src/icon/icon.playground.ts +0 -63
  324. package/src/icon/index.ts +0 -5
  325. package/src/icon/lucide/icon-names.generated.ts +0 -1708
  326. package/src/icon/lucide/icon-names.ts +0 -18
  327. package/src/icon/lucide/index.ts +0 -2
  328. package/src/icon/lucide/provide-lucide-icons.ts +0 -96
  329. package/src/input/_examples/index.ts +0 -4
  330. package/src/input/_examples/input.color.example.ts +0 -33
  331. package/src/input/_examples/input.example.ts +0 -22
  332. package/src/input/index.ts +0 -1
  333. package/src/input/input.css +0 -70
  334. package/src/input/input.playground.ts +0 -79
  335. package/src/input/input.spec.ts +0 -98
  336. package/src/input/input.ts +0 -158
  337. package/src/input/input.usage.example.ts +0 -40
  338. package/src/input-group/_examples/index.ts +0 -7
  339. package/src/input-group/_examples/input-group.button.example.ts +0 -43
  340. package/src/input-group/_examples/input-group.example.ts +0 -39
  341. package/src/input-group/_examples/input-group.icon.example.ts +0 -49
  342. package/src/input-group/_examples/input-group.url.example.ts +0 -36
  343. package/src/input-group/_examples/input-group.variants.example.ts +0 -39
  344. package/src/input-group/index.ts +0 -1
  345. package/src/input-group/input-group.css +0 -125
  346. package/src/input-group/input-group.playground.ts +0 -90
  347. package/src/input-group/input-group.ts +0 -142
  348. package/src/input-group/input-group.usage.example.ts +0 -47
  349. package/src/input-mask/_examples/index.ts +0 -8
  350. package/src/input-mask/_examples/input-mask.credit-card.example.ts +0 -90
  351. package/src/input-mask/_examples/input-mask.custom-tokens.example.ts +0 -87
  352. package/src/input-mask/_examples/input-mask.date.example.ts +0 -61
  353. package/src/input-mask/_examples/input-mask.example.ts +0 -61
  354. package/src/input-mask/_examples/input-mask.usage.example.ts +0 -44
  355. package/src/input-mask/_examples/input-mask.validation.example.ts +0 -80
  356. package/src/input-mask/index.ts +0 -9
  357. package/src/input-mask/input-mask.css +0 -39
  358. package/src/input-mask/input-mask.playground.ts +0 -79
  359. package/src/input-mask/input-mask.ts +0 -130
  360. package/src/input-otp/_examples/index.ts +0 -8
  361. package/src/input-otp/_examples/input-otp.autosubmit.example.ts +0 -71
  362. package/src/input-otp/_examples/input-otp.example.ts +0 -47
  363. package/src/input-otp/_examples/input-otp.lengths.example.ts +0 -67
  364. package/src/input-otp/_examples/input-otp.masked.example.ts +0 -46
  365. package/src/input-otp/_examples/input-otp.reactive.example.ts +0 -58
  366. package/src/input-otp/_examples/input-otp.separator.example.ts +0 -49
  367. package/src/input-otp/index.ts +0 -1
  368. package/src/input-otp/input-otp.css +0 -87
  369. package/src/input-otp/input-otp.playground.ts +0 -107
  370. package/src/input-otp/input-otp.ts +0 -244
  371. package/src/input-otp/input-otp.usage.example.ts +0 -45
  372. package/src/kbd/_examples/index.ts +0 -6
  373. package/src/kbd/_examples/kbd.combo.example.ts +0 -24
  374. package/src/kbd/_examples/kbd.example.ts +0 -22
  375. package/src/kbd/_examples/kbd.in-tooltip.example.ts +0 -43
  376. package/src/kbd/_examples/kbd.sizes.example.ts +0 -31
  377. package/src/kbd/index.ts +0 -1
  378. package/src/kbd/kbd.css +0 -67
  379. package/src/kbd/kbd.playground.ts +0 -51
  380. package/src/kbd/kbd.spec.ts +0 -123
  381. package/src/kbd/kbd.ts +0 -123
  382. package/src/kbd/kbd.usage.example.ts +0 -38
  383. package/src/link/_examples/index.ts +0 -8
  384. package/src/link/_examples/link.disabled.example.ts +0 -23
  385. package/src/link/_examples/link.example.ts +0 -26
  386. package/src/link/_examples/link.external.example.ts +0 -33
  387. package/src/link/_examples/link.in-prose.example.ts +0 -36
  388. package/src/link/_examples/link.sizes.example.ts +0 -28
  389. package/src/link/_examples/link.variants.example.ts +0 -25
  390. package/src/link/index.ts +0 -1
  391. package/src/link/link.css +0 -104
  392. package/src/link/link.playground.ts +0 -98
  393. package/src/link/link.spec.ts +0 -146
  394. package/src/link/link.ts +0 -133
  395. package/src/link/link.usage.example.ts +0 -37
  396. package/src/list/_examples/index.ts +0 -7
  397. package/src/list/_examples/list.divided.example.ts +0 -32
  398. package/src/list/_examples/list.example.ts +0 -31
  399. package/src/list/_examples/list.interactive.example.ts +0 -51
  400. package/src/list/_examples/list.nav.example.ts +0 -44
  401. package/src/list/_examples/list.with-icons.example.ts +0 -97
  402. package/src/list/index.ts +0 -1
  403. package/src/list/list.css +0 -166
  404. package/src/list/list.playground.ts +0 -90
  405. package/src/list/list.spec.ts +0 -121
  406. package/src/list/list.ts +0 -227
  407. package/src/list/list.usage.example.ts +0 -45
  408. package/src/menubar/_examples/index.ts +0 -6
  409. package/src/menubar/_examples/menubar.disabled-item.example.ts +0 -23
  410. package/src/menubar/_examples/menubar.example.ts +0 -22
  411. package/src/menubar/_examples/menubar.with-shortcuts.example.ts +0 -33
  412. package/src/menubar/_examples/menubar.with-submenu.example.ts +0 -76
  413. package/src/menubar/index.ts +0 -1
  414. package/src/menubar/menubar.css +0 -62
  415. package/src/menubar/menubar.playground.ts +0 -96
  416. package/src/menubar/menubar.ts +0 -160
  417. package/src/menubar/menubar.usage.example.ts +0 -33
  418. package/src/number-input/_examples/index.ts +0 -7
  419. package/src/number-input/_examples/number-input.currency.example.ts +0 -35
  420. package/src/number-input/_examples/number-input.decimal.example.ts +0 -34
  421. package/src/number-input/_examples/number-input.example.ts +0 -24
  422. package/src/number-input/_examples/number-input.min-max.example.ts +0 -33
  423. package/src/number-input/_examples/number-input.with-stepper.example.ts +0 -45
  424. package/src/number-input/index.ts +0 -1
  425. package/src/number-input/number-input.css +0 -115
  426. package/src/number-input/number-input.playground.ts +0 -92
  427. package/src/number-input/number-input.spec.ts +0 -102
  428. package/src/number-input/number-input.ts +0 -212
  429. package/src/number-input/number-input.usage.example.ts +0 -73
  430. package/src/overlay/overlay.css +0 -32
  431. package/src/overlay-badge/_examples/index.ts +0 -7
  432. package/src/overlay-badge/_examples/overlay-badge.described.example.ts +0 -36
  433. package/src/overlay-badge/_examples/overlay-badge.dot.example.ts +0 -28
  434. package/src/overlay-badge/_examples/overlay-badge.example.ts +0 -34
  435. package/src/overlay-badge/_examples/overlay-badge.on-avatar.example.ts +0 -38
  436. package/src/overlay-badge/_examples/overlay-badge.positions.example.ts +0 -39
  437. package/src/overlay-badge/index.ts +0 -1
  438. package/src/overlay-badge/overlay-badge.css +0 -118
  439. package/src/overlay-badge/overlay-badge.playground.ts +0 -92
  440. package/src/overlay-badge/overlay-badge.spec.ts +0 -174
  441. package/src/overlay-badge/overlay-badge.ts +0 -232
  442. package/src/overlay-badge/overlay-badge.usage.example.ts +0 -44
  443. package/src/pagination/_examples/index.ts +0 -7
  444. package/src/pagination/_examples/pagination.boundaries.example.ts +0 -56
  445. package/src/pagination/_examples/pagination.compact.example.ts +0 -42
  446. package/src/pagination/_examples/pagination.example.ts +0 -55
  447. package/src/pagination/_examples/pagination.large.example.ts +0 -54
  448. package/src/pagination/_examples/pagination.with-info.example.ts +0 -49
  449. package/src/pagination/index.ts +0 -1
  450. package/src/pagination/pagination.css +0 -146
  451. package/src/pagination/pagination.playground.ts +0 -107
  452. package/src/pagination/pagination.spec.ts +0 -202
  453. package/src/pagination/pagination.ts +0 -432
  454. package/src/pagination/pagination.usage.example.ts +0 -50
  455. package/src/password-input/_examples/index.ts +0 -6
  456. package/src/password-input/_examples/password-input.example.ts +0 -24
  457. package/src/password-input/_examples/password-input.strength.example.ts +0 -45
  458. package/src/password-input/_examples/password-input.toggle.example.ts +0 -43
  459. package/src/password-input/_examples/password-input.with-rules.example.ts +0 -78
  460. package/src/password-input/index.ts +0 -1
  461. package/src/password-input/password-input.css +0 -155
  462. package/src/password-input/password-input.playground.ts +0 -81
  463. package/src/password-input/password-input.spec.ts +0 -129
  464. package/src/password-input/password-input.ts +0 -254
  465. package/src/password-input/password-input.usage.example.ts +0 -55
  466. package/src/playground-types.ts +0 -47
  467. package/src/popover/_examples/index.ts +0 -7
  468. package/src/popover/_examples/popover.cancellable.example.ts +0 -20
  469. package/src/popover/_examples/popover.example.ts +0 -20
  470. package/src/popover/_examples/popover.modal.example.ts +0 -22
  471. package/src/popover/_examples/popover.sides.example.ts +0 -37
  472. package/src/popover/_examples/popover.with-form.example.ts +0 -38
  473. package/src/popover/index.ts +0 -1
  474. package/src/popover/popover.css +0 -71
  475. package/src/popover/popover.playground.ts +0 -86
  476. package/src/popover/popover.spec.ts +0 -5
  477. package/src/popover/popover.ts +0 -94
  478. package/src/popover/popover.usage.example.ts +0 -48
  479. package/src/progress-bar/_examples/index.ts +0 -7
  480. package/src/progress-bar/_examples/progress-bar.example.ts +0 -22
  481. package/src/progress-bar/_examples/progress-bar.indeterminate.example.ts +0 -23
  482. package/src/progress-bar/_examples/progress-bar.sizes.example.ts +0 -29
  483. package/src/progress-bar/_examples/progress-bar.variants.example.ts +0 -30
  484. package/src/progress-bar/_examples/progress-bar.with-label.example.ts +0 -30
  485. package/src/progress-bar/index.ts +0 -1
  486. package/src/progress-bar/progress-bar.css +0 -113
  487. package/src/progress-bar/progress-bar.playground.ts +0 -87
  488. package/src/progress-bar/progress-bar.spec.ts +0 -233
  489. package/src/progress-bar/progress-bar.ts +0 -155
  490. package/src/progress-bar/progress-bar.usage.example.ts +0 -52
  491. package/src/public-api.ts +0 -61
  492. package/src/radio/_examples/index.ts +0 -6
  493. package/src/radio/_examples/radio.default.example.ts +0 -26
  494. package/src/radio/_examples/radio.disabled.example.ts +0 -26
  495. package/src/radio/_examples/radio.group.example.ts +0 -27
  496. package/src/radio/_examples/radio.inline.example.ts +0 -26
  497. package/src/radio/index.ts +0 -1
  498. package/src/radio/radio.css +0 -58
  499. package/src/radio/radio.playground.ts +0 -90
  500. package/src/radio/radio.ts +0 -143
  501. package/src/radio/radio.usage.example.ts +0 -54
  502. package/src/select/_examples/index.ts +0 -6
  503. package/src/select/_examples/select.default.example.ts +0 -26
  504. package/src/select/_examples/select.disabled.example.ts +0 -24
  505. package/src/select/_examples/select.grouped.example.ts +0 -37
  506. package/src/select/_examples/select.placeholder.example.ts +0 -26
  507. package/src/select/index.ts +0 -1
  508. package/src/select/select.css +0 -65
  509. package/src/select/select.playground.ts +0 -81
  510. package/src/select/select.ts +0 -176
  511. package/src/select/select.usage.example.ts +0 -64
  512. package/src/skeleton/_examples/index.ts +0 -6
  513. package/src/skeleton/_examples/skeleton.animations.example.ts +0 -52
  514. package/src/skeleton/_examples/skeleton.card.example.ts +0 -68
  515. package/src/skeleton/_examples/skeleton.example.ts +0 -24
  516. package/src/skeleton/_examples/skeleton.shapes.example.ts +0 -55
  517. package/src/skeleton/index.ts +0 -1
  518. package/src/skeleton/skeleton.css +0 -111
  519. package/src/skeleton/skeleton.playground.ts +0 -80
  520. package/src/skeleton/skeleton.spec.ts +0 -126
  521. package/src/skeleton/skeleton.ts +0 -155
  522. package/src/skeleton/skeleton.usage.example.ts +0 -49
  523. package/src/slider/_examples/index.ts +0 -7
  524. package/src/slider/_examples/slider.example.ts +0 -41
  525. package/src/slider/_examples/slider.formatted.example.ts +0 -53
  526. package/src/slider/_examples/slider.range.example.ts +0 -48
  527. package/src/slider/_examples/slider.vertical.example.ts +0 -48
  528. package/src/slider/_examples/slider.with-marks.example.ts +0 -46
  529. package/src/slider/index.ts +0 -1
  530. package/src/slider/slider.css +0 -172
  531. package/src/slider/slider.playground.ts +0 -88
  532. package/src/slider/slider.spec.ts +0 -139
  533. package/src/slider/slider.ts +0 -246
  534. package/src/slider/slider.usage.example.ts +0 -68
  535. package/src/speed-dial/_examples/index.ts +0 -7
  536. package/src/speed-dial/_examples/speed-dial.directions.example.ts +0 -85
  537. package/src/speed-dial/_examples/speed-dial.disabled.example.ts +0 -71
  538. package/src/speed-dial/_examples/speed-dial.example.ts +0 -48
  539. package/src/speed-dial/_examples/speed-dial.usage.example.ts +0 -59
  540. package/src/speed-dial/_examples/speed-dial.with-tooltips.example.ts +0 -65
  541. package/src/speed-dial/index.ts +0 -1
  542. package/src/speed-dial/speed-dial.css +0 -137
  543. package/src/speed-dial/speed-dial.playground.ts +0 -137
  544. package/src/speed-dial/speed-dial.spec.ts +0 -191
  545. package/src/speed-dial/speed-dial.ts +0 -257
  546. package/src/spinner/_examples/index.ts +0 -8
  547. package/src/spinner/_examples/spinner.animations.example.ts +0 -54
  548. package/src/spinner/_examples/spinner.example.ts +0 -26
  549. package/src/spinner/_examples/spinner.in-button.example.ts +0 -51
  550. package/src/spinner/_examples/spinner.sizes.example.ts +0 -31
  551. package/src/spinner/_examples/spinner.usage.example.ts +0 -45
  552. package/src/spinner/_examples/spinner.variants.example.ts +0 -34
  553. package/src/spinner/index.ts +0 -1
  554. package/src/spinner/spinner.css +0 -161
  555. package/src/spinner/spinner.playground.ts +0 -68
  556. package/src/spinner/spinner.spec.ts +0 -184
  557. package/src/spinner/spinner.ts +0 -185
  558. package/src/stepper/_examples/index.ts +0 -8
  559. package/src/stepper/_examples/stepper.example.ts +0 -62
  560. package/src/stepper/_examples/stepper.non-linear.example.ts +0 -63
  561. package/src/stepper/_examples/stepper.optional-step.example.ts +0 -62
  562. package/src/stepper/_examples/stepper.usage.example.ts +0 -73
  563. package/src/stepper/_examples/stepper.vertical.example.ts +0 -66
  564. package/src/stepper/_examples/stepper.with-error.example.ts +0 -63
  565. package/src/stepper/index.ts +0 -1
  566. package/src/stepper/stepper.css +0 -147
  567. package/src/stepper/stepper.playground.ts +0 -88
  568. package/src/stepper/stepper.spec.ts +0 -200
  569. package/src/stepper/stepper.ts +0 -242
  570. package/src/table/_examples/index.ts +0 -23
  571. package/src/table/_examples/table.column-pinning.example.ts +0 -55
  572. package/src/table/_examples/table.column-resize.example.ts +0 -49
  573. package/src/table/_examples/table.column-visibility.example.ts +0 -52
  574. package/src/table/_examples/table.density.example.ts +0 -71
  575. package/src/table/_examples/table.editable.example.ts +0 -85
  576. package/src/table/_examples/table.empty-and-error.example.ts +0 -112
  577. package/src/table/_examples/table.example.ts +0 -45
  578. package/src/table/_examples/table.export.example.ts +0 -82
  579. package/src/table/_examples/table.filterable.example.ts +0 -67
  580. package/src/table/_examples/table.grouping.example.ts +0 -63
  581. package/src/table/_examples/table.keyboard.example.ts +0 -115
  582. package/src/table/_examples/table.master-detail.example.ts +0 -102
  583. package/src/table/_examples/table.persistence.example.ts +0 -85
  584. package/src/table/_examples/table.playground.ts +0 -154
  585. package/src/table/_examples/table.row-pinning.example.ts +0 -71
  586. package/src/table/_examples/table.selection.example.ts +0 -67
  587. package/src/table/_examples/table.server-mode.example.ts +0 -120
  588. package/src/table/_examples/table.sortable.example.ts +0 -49
  589. package/src/table/_examples/table.theming.example.ts +0 -64
  590. package/src/table/_examples/table.usage.example.ts +0 -90
  591. package/src/table/_examples/table.virtualized.example.ts +0 -122
  592. package/src/table/index.ts +0 -11
  593. package/src/table/table-cell-editor-outlet.ts +0 -111
  594. package/src/table/table-editors/boolean-editor.ts +0 -71
  595. package/src/table/table-editors/date-editor.ts +0 -117
  596. package/src/table/table-editors/editors.spec.ts +0 -147
  597. package/src/table/table-editors/index.ts +0 -41
  598. package/src/table/table-editors/number-editor.ts +0 -89
  599. package/src/table/table-editors/select-editor.ts +0 -107
  600. package/src/table/table-editors/text-editor.ts +0 -82
  601. package/src/table/table-export.spec.ts +0 -33
  602. package/src/table/table-export.ts +0 -53
  603. package/src/table/table-filter-outlet.ts +0 -137
  604. package/src/table/table-filters/date-filter.ts +0 -122
  605. package/src/table/table-filters/filters.css +0 -53
  606. package/src/table/table-filters/filters.spec.ts +0 -277
  607. package/src/table/table-filters/index.ts +0 -11
  608. package/src/table/table-filters/number-filter.ts +0 -232
  609. package/src/table/table-filters/select-filter.ts +0 -129
  610. package/src/table/table-filters/text-filter.ts +0 -110
  611. package/src/table/table-pagination.spec.ts +0 -118
  612. package/src/table/table-pagination.ts +0 -191
  613. package/src/table/table-side-panel.spec.ts +0 -170
  614. package/src/table/table-side-panel.ts +0 -263
  615. package/src/table/table-status-bar.spec.ts +0 -78
  616. package/src/table/table-status-bar.ts +0 -70
  617. package/src/table/table-toolbar.spec.ts +0 -180
  618. package/src/table/table-toolbar.ts +0 -244
  619. package/src/table/table-virtual.spec.ts +0 -103
  620. package/src/table/table-virtual.ts +0 -180
  621. package/src/table/table.css +0 -468
  622. package/src/table/table.spec.ts +0 -175
  623. package/src/table/table.ts +0 -1009
  624. package/src/tabs/_examples/index.ts +0 -8
  625. package/src/tabs/_examples/tabs.controlled.example.ts +0 -59
  626. package/src/tabs/_examples/tabs.disabled.example.ts +0 -34
  627. package/src/tabs/_examples/tabs.example.ts +0 -34
  628. package/src/tabs/_examples/tabs.manual-activation.example.ts +0 -34
  629. package/src/tabs/_examples/tabs.usage.example.ts +0 -43
  630. package/src/tabs/_examples/tabs.vertical.example.ts +0 -33
  631. package/src/tabs/index.ts +0 -1
  632. package/src/tabs/tabs.css +0 -80
  633. package/src/tabs/tabs.playground.ts +0 -88
  634. package/src/tabs/tabs.spec.ts +0 -135
  635. package/src/tabs/tabs.ts +0 -204
  636. package/src/tag/_examples/index.ts +0 -9
  637. package/src/tag/_examples/tag.example.ts +0 -22
  638. package/src/tag/_examples/tag.list.example.ts +0 -38
  639. package/src/tag/_examples/tag.removable.example.ts +0 -39
  640. package/src/tag/_examples/tag.selectable.example.ts +0 -33
  641. package/src/tag/_examples/tag.sizes.example.ts +0 -25
  642. package/src/tag/_examples/tag.usage.example.ts +0 -62
  643. package/src/tag/_examples/tag.variants.example.ts +0 -29
  644. package/src/tag/index.ts +0 -1
  645. package/src/tag/tag.css +0 -167
  646. package/src/tag/tag.playground.ts +0 -63
  647. package/src/tag/tag.spec.ts +0 -153
  648. package/src/tag/tag.ts +0 -186
  649. package/src/test-setup.ts +0 -5
  650. package/src/textarea/_examples/index.ts +0 -8
  651. package/src/textarea/_examples/textarea.autoresize.example.ts +0 -37
  652. package/src/textarea/_examples/textarea.character-count.example.ts +0 -34
  653. package/src/textarea/_examples/textarea.example.ts +0 -22
  654. package/src/textarea/_examples/textarea.no-resize.example.ts +0 -28
  655. package/src/textarea/_examples/textarea.usage.example.ts +0 -50
  656. package/src/textarea/_examples/textarea.with-field.example.ts +0 -66
  657. package/src/textarea/index.ts +0 -1
  658. package/src/textarea/textarea.css +0 -117
  659. package/src/textarea/textarea.playground.ts +0 -70
  660. package/src/textarea/textarea.spec.ts +0 -161
  661. package/src/textarea/textarea.ts +0 -339
  662. package/src/time-picker/_examples/index.ts +0 -8
  663. package/src/time-picker/_examples/time-picker.12-hour.example.ts +0 -24
  664. package/src/time-picker/_examples/time-picker.example.ts +0 -24
  665. package/src/time-picker/_examples/time-picker.formatted.example.ts +0 -32
  666. package/src/time-picker/_examples/time-picker.range.example.ts +0 -54
  667. package/src/time-picker/_examples/time-picker.usage.example.ts +0 -53
  668. package/src/time-picker/_examples/time-picker.with-seconds.example.ts +0 -24
  669. package/src/time-picker/index.ts +0 -1
  670. package/src/time-picker/time-picker.css +0 -126
  671. package/src/time-picker/time-picker.playground.ts +0 -72
  672. package/src/time-picker/time-picker.spec.ts +0 -77
  673. package/src/time-picker/time-picker.ts +0 -207
  674. package/src/toast/_examples/index.ts +0 -7
  675. package/src/toast/_examples/toast.default.example.ts +0 -37
  676. package/src/toast/_examples/toast.dismissible.example.ts +0 -38
  677. package/src/toast/_examples/toast.usage.example.ts +0 -57
  678. package/src/toast/_examples/toast.variants.example.ts +0 -43
  679. package/src/toast/_examples/toast.with-action.example.ts +0 -46
  680. package/src/toast/index.ts +0 -1
  681. package/src/toast/toast.css +0 -115
  682. package/src/toast/toast.playground.ts +0 -61
  683. package/src/toast/toast.ts +0 -168
  684. package/src/toggle/_examples/index.ts +0 -7
  685. package/src/toggle/_examples/toggle.checked.example.ts +0 -20
  686. package/src/toggle/_examples/toggle.default.example.ts +0 -20
  687. package/src/toggle/_examples/toggle.disabled.example.ts +0 -26
  688. package/src/toggle/_examples/toggle.usage.example.ts +0 -51
  689. package/src/toggle/_examples/toggle.with-label.example.ts +0 -30
  690. package/src/toggle/index.ts +0 -1
  691. package/src/toggle/toggle.css +0 -123
  692. package/src/toggle/toggle.playground.ts +0 -65
  693. package/src/toggle/toggle.ts +0 -113
  694. package/src/tooltip/_examples/index.ts +0 -9
  695. package/src/tooltip/_examples/tooltip.delays.example.ts +0 -16
  696. package/src/tooltip/_examples/tooltip.disabled.example.ts +0 -16
  697. package/src/tooltip/_examples/tooltip.example.ts +0 -16
  698. package/src/tooltip/_examples/tooltip.group.example.ts +0 -20
  699. package/src/tooltip/_examples/tooltip.rich.example.ts +0 -19
  700. package/src/tooltip/_examples/tooltip.sides.example.ts +0 -18
  701. package/src/tooltip/_examples/tooltip.usage.example.ts +0 -50
  702. package/src/tooltip/index.ts +0 -1
  703. package/src/tooltip/tooltip.css +0 -61
  704. package/src/tooltip/tooltip.playground.ts +0 -79
  705. package/src/tooltip/tooltip.spec.ts +0 -5
  706. package/src/tooltip/tooltip.ts +0 -102
  707. package/src/tree-select/_examples/index.ts +0 -8
  708. package/src/tree-select/_examples/tree-select.disabled.example.ts +0 -106
  709. package/src/tree-select/_examples/tree-select.example.ts +0 -65
  710. package/src/tree-select/_examples/tree-select.expanded.example.ts +0 -72
  711. package/src/tree-select/_examples/tree-select.field.example.ts +0 -77
  712. package/src/tree-select/_examples/tree-select.multi.example.ts +0 -73
  713. package/src/tree-select/_examples/tree-select.usage.example.ts +0 -85
  714. package/src/tree-select/index.ts +0 -1
  715. package/src/tree-select/tree-select.css +0 -220
  716. package/src/tree-select/tree-select.playground.ts +0 -83
  717. package/src/tree-select/tree-select.ts +0 -348
  718. package/src/typography/_examples/index.ts +0 -9
  719. package/src/typography/_examples/typography.blockquote.example.ts +0 -34
  720. package/src/typography/_examples/typography.code.example.ts +0 -32
  721. package/src/typography/_examples/typography.example.ts +0 -42
  722. package/src/typography/_examples/typography.lead.example.ts +0 -37
  723. package/src/typography/_examples/typography.muted.example.ts +0 -27
  724. package/src/typography/_examples/typography.truncate.example.ts +0 -41
  725. package/src/typography/_examples/typography.usage.example.ts +0 -44
  726. package/src/typography/index.ts +0 -8
  727. package/src/typography/typography.playground.ts +0 -101
  728. package/src/typography/typography.spec.ts +0 -70
  729. package/src/typography/typography.ts +0 -105
  730. package/tsconfig.lib.json +0 -25
  731. package/tsconfig.lib.prod.json +0 -17
  732. package/tsconfig.spec.json +0 -16
  733. package/vite.config.ts +0 -33
@@ -1,117 +0,0 @@
1
- /* ─────────────────────────────────────────────────────────────
2
- .kj-textarea — component-layer tokens + structural CSS
3
- Same pattern as button.css / input.css: tokens default to
4
- shared-layer values, variants/sizes/states retarget tokens,
5
- structural CSS reads tokens only.
6
- ──────────────────────────────────────────────────────────── */
7
-
8
- @layer kj.component {
9
- .kj-textarea {
10
- /* component knobs — themes/users can override any of these */
11
- --kj-textarea-bg: var(--kj-bg-field);
12
- --kj-textarea-fg: var(--kj-fg-default);
13
- --kj-textarea-border-color: var(--kj-border-default);
14
- --kj-textarea-border-style: solid;
15
- --kj-textarea-border-width: var(--kj-border);
16
- --kj-textarea-radius: var(--kj-radius-field);
17
- --kj-textarea-padding-x: var(--kj-space-md);
18
- --kj-textarea-padding-y: var(--kj-space-sm);
19
- --kj-textarea-font: var(--kj-font-sans);
20
- --kj-textarea-font-size: var(--kj-text-sm);
21
- --kj-textarea-line-height: 1.5;
22
- --kj-textarea-placeholder-fg: var(--kj-fg-muted);
23
- --kj-textarea-min-height: 2.75rem; /* WCAG 2.5.5 touch target floor */
24
-
25
- display: block;
26
- width: 100%;
27
- min-height: var(--kj-textarea-min-height);
28
- background: var(--kj-textarea-bg);
29
- color: var(--kj-textarea-fg);
30
- border: var(--kj-textarea-border-width) var(--kj-textarea-border-style) var(--kj-textarea-border-color);
31
- border-radius: var(--kj-textarea-radius);
32
- padding: var(--kj-textarea-padding-y) var(--kj-textarea-padding-x);
33
- font: var(--kj-textarea-font-size) / var(--kj-textarea-line-height) var(--kj-textarea-font);
34
- transition: var(--kj-transition);
35
- /* `resize` is set inline by KjTextarea (`[style.resize]`) and overrides
36
- this fallback when present. */
37
- resize: vertical;
38
- }
39
-
40
- .kj-textarea::placeholder {
41
- color: var(--kj-textarea-placeholder-fg);
42
- }
43
-
44
- .kj-textarea:focus-visible {
45
- outline: 2px solid var(--kj-bg-primary);
46
- outline-offset: 2px;
47
- --kj-textarea-border-color: var(--kj-bg-primary);
48
- }
49
-
50
- .kj-textarea[aria-invalid='true'] {
51
- --kj-textarea-border-color: var(--kj-bg-danger);
52
- }
53
-
54
- .kj-textarea[aria-disabled='true'],
55
- .kj-textarea:disabled {
56
- opacity: 0.55;
57
- cursor: not-allowed;
58
- }
59
-
60
- /* ── Variants ─────────────────────────────────────────────── */
61
- .kj-textarea[data-variant='filled'] {
62
- --kj-textarea-bg: var(--kj-bg-surface);
63
- --kj-textarea-border-color: transparent;
64
- }
65
- .kj-textarea[data-variant='filled']:focus-visible {
66
- --kj-textarea-border-color: var(--kj-bg-primary);
67
- }
68
-
69
- /* ── Sizes ────────────────────────────────────────────────── */
70
- .kj-textarea[data-size='sm'] {
71
- --kj-textarea-padding-x: var(--kj-space-sm);
72
- --kj-textarea-padding-y: 0.25rem;
73
- --kj-textarea-font-size: 0.8125rem;
74
- }
75
- .kj-textarea[data-size='lg'] {
76
- --kj-textarea-padding-x: var(--kj-space-lg);
77
- --kj-textarea-padding-y: 0.625rem;
78
- --kj-textarea-font-size: 1rem;
79
- }
80
-
81
- /* ── Auto-resize: hide the user drag handle ──────────────── */
82
- .kj-textarea[data-autoresize] {
83
- /* `[style.resize]` from the directive already sets resize:none, but
84
- keeping the rule here for older browsers / SSR before the directive
85
- initialises. */
86
- resize: none;
87
- overflow-y: hidden;
88
- }
89
-
90
- /* ── Counter ─────────────────────────────────────────────── */
91
- .kj-textarea__counter {
92
- margin-top: var(--kj-space-xs, 0.25rem);
93
- font: var(--kj-text-xs, 0.75rem) / 1.2 var(--kj-font-mono, var(--kj-font-sans));
94
- color: var(--kj-fg-muted);
95
- text-align: end;
96
- }
97
- .kj-textarea__counter[data-state='warn'] {
98
- color: var(--kj-fg-warning, var(--kj-fg-muted));
99
- }
100
- .kj-textarea__counter[data-state='limit'] {
101
- color: var(--kj-fg-danger);
102
- }
103
-
104
- /* Live region: visually hidden but readable to AT. Mirrors the
105
- `.sr-only` pattern. */
106
- .kj-textarea__live {
107
- position: absolute;
108
- width: 1px;
109
- height: 1px;
110
- padding: 0;
111
- margin: -1px;
112
- overflow: hidden;
113
- clip: rect(0, 0, 0, 0);
114
- white-space: nowrap;
115
- border: 0;
116
- }
117
- }
@@ -1,70 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, signal } from '@angular/core';
2
- import { KjTextareaComponent } from './textarea';
3
- import type { PlaygroundFile } from '@kouji-ui/components/playground-types';
4
-
5
- /**
6
- * Playground state — module-scope signals.
7
- */
8
- const size = signal<'sm' | 'md' | 'lg'>('md');
9
- const rows = signal<2 | 3 | 4 | 6>(4);
10
- const placeholder = signal('Tell us about yourself…');
11
- const disabled = signal(false);
12
- const invalid = signal(false);
13
-
14
- @Component({
15
- selector: 'kj-textarea-playground',
16
- standalone: true,
17
- imports: [KjTextareaComponent],
18
- template: `
19
- <kj-textarea
20
- [kjSize]="size()"
21
- [kjRows]="rows()"
22
- [kjPlaceholder]="placeholder()"
23
- [kjDisabled]="disabled()"
24
- [kjInvalid]="invalid()"
25
- />
26
- `,
27
- changeDetection: ChangeDetectionStrategy.OnPush,
28
- })
29
- export class KjTextareaPlaygroundDemo {
30
- protected readonly size = size;
31
- protected readonly rows = rows;
32
- protected readonly placeholder = placeholder;
33
- protected readonly disabled = disabled;
34
- protected readonly invalid = invalid;
35
- }
36
-
37
- export const PLAYGROUND: PlaygroundFile = {
38
- component: KjTextareaPlaygroundDemo,
39
- state: {
40
- size: size as unknown as ReturnType<typeof signal>,
41
- rows: rows as unknown as ReturnType<typeof signal>,
42
- placeholder: placeholder as unknown as ReturnType<typeof signal>,
43
- disabled: disabled as unknown as ReturnType<typeof signal>,
44
- invalid: invalid as unknown as ReturnType<typeof signal>,
45
- },
46
- controls: [
47
- { kind: 'chips', name: 'size', label: 'size', options: ['sm', 'md', 'lg'] },
48
- { kind: 'chips', name: 'rows', label: 'rows', options: [2, 3, 4, 6] },
49
- { kind: 'text', name: 'placeholder', label: 'placeholder' },
50
- { kind: 'toggle', name: 'disabled', label: 'disabled' },
51
- { kind: 'toggle', name: 'invalid', label: 'invalid' },
52
- ],
53
- snippet: (values) => {
54
- const s = values as {
55
- size: string;
56
- rows: number;
57
- placeholder: string;
58
- disabled: boolean;
59
- invalid: boolean;
60
- };
61
- const attrs: string[] = [
62
- `kjSize="${s.size}"`,
63
- `[kjRows]="${s.rows}"`,
64
- `kjPlaceholder="${s.placeholder}"`,
65
- ];
66
- if (s.disabled) attrs.push('[kjDisabled]="true"');
67
- if (s.invalid) attrs.push('[kjInvalid]="true"');
68
- return `<kj-textarea\n ${attrs.join('\n ')}\n/>`;
69
- },
70
- };
@@ -1,161 +0,0 @@
1
- import { Component, ChangeDetectionStrategy } from '@angular/core';
2
- import { TestBed } from '@angular/core/testing';
3
- import { FormControl, ReactiveFormsModule } from '@angular/forms';
4
- import { describe, expect, test, beforeEach } from 'vitest';
5
- import { KjTextareaComponent } from './textarea';
6
-
7
- @Component({
8
- standalone: true,
9
- imports: [KjTextareaComponent, ReactiveFormsModule],
10
- changeDetection: ChangeDetectionStrategy.Eager,
11
- template: `
12
- <kj-textarea
13
- [kjRows]="rows"
14
- [kjPlaceholder]="placeholder"
15
- [kjVariant]="variant"
16
- [kjSize]="size"
17
- [kjInvalid]="invalid"
18
- [kjDisabled]="disabled"
19
- [kjResize]="resize"
20
- [kjAutoresize]="autoresize"
21
- [kjMinRows]="minRows"
22
- [kjMaxRows]="maxRows"
23
- [kjMaxLength]="maxLength"
24
- [kjShowCounter]="showCounter"
25
- [formControl]="ctrl"
26
- ></kj-textarea>
27
- `,
28
- })
29
- class HostComponent {
30
- ctrl = new FormControl('');
31
- rows = 3;
32
- placeholder = '';
33
- variant: string = 'outlined';
34
- size: string = 'md';
35
- invalid = false;
36
- disabled = false;
37
- resize: 'none' | 'vertical' | 'both' = 'vertical';
38
- autoresize: 'off' | 'auto' = 'off';
39
- minRows: number | undefined = undefined;
40
- maxRows: number | undefined = undefined;
41
- maxLength: number | undefined = undefined;
42
- showCounter = false;
43
- }
44
-
45
- describe('KjTextareaComponent', () => {
46
- beforeEach(() => {
47
- TestBed.configureTestingModule({ imports: [HostComponent] });
48
- });
49
-
50
- test('renders an inner <textarea> with the .kj-textarea class', () => {
51
- const fixture = TestBed.createComponent(HostComponent);
52
- fixture.detectChanges();
53
- expect(fixture.nativeElement.querySelector('kj-textarea textarea.kj-textarea')).not.toBeNull();
54
- });
55
-
56
- test('forwards rows and placeholder to the inner textarea', () => {
57
- const fixture = TestBed.createComponent(HostComponent);
58
- fixture.componentInstance.rows = 5;
59
- fixture.componentInstance.placeholder = 'Type here…';
60
- fixture.detectChanges();
61
- const ta: HTMLTextAreaElement = fixture.nativeElement.querySelector('kj-textarea textarea');
62
- expect(ta.getAttribute('rows')).toBe('5');
63
- expect(ta.getAttribute('placeholder')).toBe('Type here…');
64
- });
65
-
66
- test('forwards variant and size as data-* attributes', () => {
67
- const fixture = TestBed.createComponent(HostComponent);
68
- fixture.componentInstance.variant = 'filled';
69
- fixture.componentInstance.size = 'sm';
70
- fixture.detectChanges();
71
- const ta: HTMLTextAreaElement = fixture.nativeElement.querySelector('kj-textarea textarea');
72
- expect(ta.getAttribute('data-variant')).toBe('filled');
73
- expect(ta.getAttribute('data-size')).toBe('sm');
74
- });
75
-
76
- test('binds maxlength when kjMaxLength is set', () => {
77
- const fixture = TestBed.createComponent(HostComponent);
78
- fixture.componentInstance.maxLength = 50;
79
- fixture.detectChanges();
80
- expect(
81
- fixture.nativeElement.querySelector('kj-textarea textarea').getAttribute('maxlength'),
82
- ).toBe('50');
83
- });
84
-
85
- test('renders the counter when kjShowCounter and kjMaxLength are set', () => {
86
- const fixture = TestBed.createComponent(HostComponent);
87
- fixture.componentInstance.maxLength = 50;
88
- fixture.componentInstance.showCounter = true;
89
- fixture.detectChanges();
90
- const counter = fixture.nativeElement.querySelector('.kj-textarea__counter');
91
- expect(counter).not.toBeNull();
92
- expect(counter.textContent.trim()).toContain('/ 50');
93
- });
94
-
95
- test('does not render the counter without kjMaxLength', () => {
96
- const fixture = TestBed.createComponent(HostComponent);
97
- fixture.componentInstance.showCounter = true;
98
- fixture.detectChanges();
99
- expect(fixture.nativeElement.querySelector('.kj-textarea__counter')).toBeNull();
100
- });
101
-
102
- test('counter element id is wired into the textareas aria-describedby', () => {
103
- const fixture = TestBed.createComponent(HostComponent);
104
- fixture.componentInstance.maxLength = 50;
105
- fixture.componentInstance.showCounter = true;
106
- fixture.detectChanges();
107
- const counter = fixture.nativeElement.querySelector('.kj-textarea__counter');
108
- const ta: HTMLTextAreaElement = fixture.nativeElement.querySelector('kj-textarea textarea');
109
- const describedBy = ta.getAttribute('aria-describedby');
110
- expect(describedBy).not.toBeNull();
111
- expect(describedBy).toBe(counter.id);
112
- });
113
-
114
- test('counter updates with the form-control value', () => {
115
- const fixture = TestBed.createComponent(HostComponent);
116
- fixture.componentInstance.maxLength = 50;
117
- fixture.componentInstance.showCounter = true;
118
- fixture.detectChanges();
119
- fixture.componentInstance.ctrl.setValue('hello');
120
- fixture.detectChanges();
121
- const counter = fixture.nativeElement.querySelector('.kj-textarea__counter');
122
- expect(counter.textContent.trim()).toBe('5 / 50');
123
- });
124
-
125
- test('forwards kjResize to inline style on the inner textarea', () => {
126
- const fixture = TestBed.createComponent(HostComponent);
127
- fixture.componentInstance.resize = 'both';
128
- fixture.detectChanges();
129
- const ta: HTMLTextAreaElement = fixture.nativeElement.querySelector('kj-textarea textarea');
130
- expect(ta.style.resize).toBe('both');
131
- });
132
-
133
- test('autoresize=auto forces resize:none and sets data-autoresize', () => {
134
- const fixture = TestBed.createComponent(HostComponent);
135
- fixture.componentInstance.autoresize = 'auto';
136
- fixture.componentInstance.resize = 'both';
137
- fixture.detectChanges();
138
- const ta: HTMLTextAreaElement = fixture.nativeElement.querySelector('kj-textarea textarea');
139
- expect(ta.style.resize).toBe('none');
140
- expect(ta.getAttribute('data-autoresize')).toBe('');
141
- });
142
-
143
- test('forwards disabled (aria-disabled on inner textarea)', () => {
144
- const fixture = TestBed.createComponent(HostComponent);
145
- fixture.componentInstance.disabled = true;
146
- fixture.detectChanges();
147
- expect(
148
- fixture.nativeElement.querySelector('kj-textarea textarea').getAttribute('aria-disabled'),
149
- ).toBe('true');
150
- });
151
-
152
- test('forwards invalid → aria-invalid (after blur)', () => {
153
- const fixture = TestBed.createComponent(HostComponent);
154
- fixture.componentInstance.invalid = true;
155
- fixture.detectChanges();
156
- const ta: HTMLTextAreaElement = fixture.nativeElement.querySelector('kj-textarea textarea');
157
- ta.dispatchEvent(new Event('blur'));
158
- fixture.detectChanges();
159
- expect(ta.getAttribute('aria-invalid')).toBe('true');
160
- });
161
- });
@@ -1,339 +0,0 @@
1
- import {
2
- ChangeDetectionStrategy,
3
- Component,
4
- ViewEncapsulation,
5
- booleanAttribute,
6
- computed,
7
- effect,
8
- forwardRef,
9
- input,
10
- signal,
11
- } from '@angular/core';
12
- import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';
13
- import {
14
- KjLiveRegion,
15
- KjTextarea,
16
- type KjTextareaAutoresize,
17
- type KjTextareaResize,
18
- } from '@kouji-ui/core';
19
-
20
- let nextId = 0;
21
-
22
- /**
23
- * Number transform that preserves `undefined` (instead of NaN-ing on absent
24
- * numbers like Angular's built-in `numberAttribute`).
25
- *
26
- * @internal
27
- */
28
- function optionalNumber(v: number | string | undefined): number | undefined {
29
- if (v == null || v === '') return undefined;
30
- const n = typeof v === 'number' ? v : Number(v);
31
- return Number.isFinite(n) ? n : undefined;
32
- }
33
-
34
- /**
35
- * Required-number transform: same shape, but returns the default when the
36
- * input is missing/invalid (used for `kjRows`).
37
- *
38
- * @internal
39
- */
40
- function numberWithDefault(def: number) {
41
- return (v: number | string | undefined): number => {
42
- const n = optionalNumber(v);
43
- return n ?? def;
44
- };
45
- }
46
-
47
- /**
48
- * Styled wrapper around the headless `KjTextarea` directive.
49
- *
50
- * Element-wrapper pattern: `<kj-textarea>` is a structural shell
51
- * (`display: contents;`); the inner `<textarea>` carries native textarea
52
- * semantics (focus, form integration, validation, native maxlength).
53
- *
54
- * Adds, on top of `KjTextarea`:
55
- * - A theme-token CSS shell (`.kj-textarea`).
56
- * - An optional visible character counter (`{ length } / { kjMaxLength }`)
57
- * wired to a polite live region for screen-reader announcements at
58
- * threshold crossings (≤ 20, ≤ 10, 0 remaining).
59
- * - `aria-describedby` plumbing from the textarea to the counter element.
60
- *
61
- * @example
62
- * ```html
63
- * <kj-textarea kjRows="4" [(ngModel)]="bio" kjPlaceholder="Tell us about yourself" />
64
- *
65
- * <kj-textarea kjAutoresize="auto" [kjMinRows]="2" [kjMaxRows]="8"
66
- * [(ngModel)]="bio" />
67
- *
68
- * <kj-textarea [kjMaxLength]="200" kjShowCounter [(ngModel)]="bio" />
69
- * ```
70
- *
71
- * @doc-example Default
72
- * The default playground — a 4-row textarea with placeholder.
73
- * @doc-file textarea.example.ts
74
- * @doc-example Usage
75
- * A walkthrough of the most common textarea usages — `[(ngModel)]`,
76
- * placeholder, character counter, and an invalid state with a helper note.
77
- * @doc-file textarea.usage.example.ts
78
- * @doc-example Auto-resize
79
- * `kjAutoresize="auto"` grows the textarea to fit content between
80
- * `kjMinRows` and `kjMaxRows`.
81
- * @doc-file textarea.autoresize.example.ts
82
- * @doc-example Character counter
83
- * `[kjMaxLength]` + `kjShowCounter` renders a live `n / max` counter wired
84
- * to a polite live region.
85
- * @doc-file textarea.character-count.example.ts
86
- * @doc-example No resize handle
87
- * `kjResize="none"` hides the native drag-to-resize affordance.
88
- * @doc-file textarea.no-resize.example.ts
89
- * @doc-example With Field wrapper
90
- * Compose under `<kj-field>` for label / error / hint association.
91
- * @doc-file textarea.with-field.example.ts
92
- *
93
- * @doc-keyboard
94
- * Tab — Moves focus into the textarea
95
- * Shift+Tab — Moves focus to the previous focusable element
96
- * Enter — Inserts a newline (native textarea behaviour)
97
- * Cmd/Ctrl+A — Selects all (native)
98
- *
99
- * @doc-aria
100
- * aria-disabled — Reflected when `[kjDisabled]="true"`
101
- * aria-invalid — Reflected when `[kjInvalid]="true"`
102
- * aria-describedby — Wired to the counter id when the counter is visible
103
- * role="status" — Internal live region announces threshold crossings
104
- * data-variant — Mirrors the resolved variant for theme hooks
105
- * data-size — Mirrors the resolved size for theme hooks
106
- *
107
- * @doc-touch
108
- * Default `--kj-textarea-min-height` is the WCAG 2.5.5 touch-target floor
109
- * (≥ 44×44). `sm` density retains the floor — only padding shrinks.
110
- *
111
- * @doc-a11y
112
- * Renders a real `<textarea>` so native focus, form integration, validation,
113
- * and `maxlength` all work without ceremony. The character counter is wired
114
- * via `aria-describedby` plus a polite live region that announces at 20 / 10
115
- * / 0 remaining, never interrupting the typist.
116
- *
117
- * @doc-related input,field,form
118
- *
119
- * @doc-css-var
120
- * --kj-textarea-bg — Background fill. Filled variant retargets to --kj-bg-surface.
121
- * --kj-textarea-fg — Foreground (text) color.
122
- * --kj-textarea-border-color — Border color. Focus and invalid states retarget this.
123
- * --kj-textarea-border-style — Border style. Default solid.
124
- * --kj-textarea-border-width — Border thickness. Inherits the theme's --kj-border.
125
- * --kj-textarea-radius — Corner radius. Inherits --kj-radius-field.
126
- * --kj-textarea-padding-x — Horizontal padding. Sizes override.
127
- * --kj-textarea-padding-y — Vertical padding. Sizes override.
128
- * --kj-textarea-font — Font family. Defaults to --kj-font-sans.
129
- * --kj-textarea-font-size — Font size. Sizes (sm/md/lg) override.
130
- * --kj-textarea-line-height — Line height for the text content.
131
- * --kj-textarea-placeholder-fg — Foreground color of the placeholder text.
132
- * --kj-textarea-min-height — Minimum height. Defaults to the WCAG 2.5.5 touch-target floor.
133
- *
134
- * @doc-category Library/Data input
135
- * @doc
136
- * @doc-name textarea
137
- * @doc-description Themed multi-line text input with optional auto-resize and live character counter.
138
- * @doc-is-main
139
- */
140
- @Component({
141
- selector: 'kj-textarea',
142
- standalone: true,
143
- imports: [KjTextarea, KjLiveRegion],
144
- providers: [
145
- {
146
- provide: NG_VALUE_ACCESSOR,
147
- useExisting: forwardRef(() => KjTextareaComponent),
148
- multi: true,
149
- },
150
- ],
151
- template: `
152
- <textarea
153
- kjTextarea
154
- class="kj-textarea"
155
- [rows]="kjRows()"
156
- [value]="currentValue()"
157
- [placeholder]="kjPlaceholder()"
158
- [kjVariant]="kjVariant()"
159
- [kjSize]="kjSize()"
160
- [kjInvalid]="kjInvalid()"
161
- [kjDisabled]="kjDisabled() || cvaDisabled()"
162
- [kjResize]="kjResize()"
163
- [kjAutoresize]="kjAutoresize()"
164
- [kjMinRows]="kjMinRows()"
165
- [kjMaxRows]="kjMaxRows()"
166
- [kjMaxLength]="kjMaxLength()"
167
- [attr.aria-describedby]="ariaDescribedBy()"
168
- (input)="onInnerInput($any($event.target).value)"
169
- (blur)="onInnerBlur()"
170
- ></textarea>
171
- @if (showCounter()) {
172
- <div
173
- class="kj-textarea__counter"
174
- [id]="counterId"
175
- [attr.data-state]="counterState()"
176
- >{{ valueLength() }} / {{ kjMaxLength() }}</div>
177
- <div
178
- class="kj-textarea__live"
179
- kjLiveRegion
180
- kjPoliteness="polite"
181
- >{{ liveMessage() }}</div>
182
- }
183
- `,
184
- styleUrl: './textarea.css',
185
- encapsulation: ViewEncapsulation.None,
186
- host: {
187
- style: 'display: contents;',
188
- },
189
- changeDetection: ChangeDetectionStrategy.OnPush,
190
- })
191
- export class KjTextareaComponent implements ControlValueAccessor {
192
- /** Uncontrolled fallback value. Templated forms use `[(ngModel)]` / `[formControl]`. */
193
- readonly kjValue = input<string>('');
194
-
195
- /** Native `placeholder` attribute. */
196
- readonly kjPlaceholder = input<string>('');
197
-
198
- /** Native `rows` attribute. Default `3`. */
199
- readonly kjRows = input<number, number | string | undefined>(3, {
200
- transform: numberWithDefault(3),
201
- });
202
-
203
- /** CSS `resize` override. Forced to `none` when `kjAutoresize === 'auto'`. */
204
- readonly kjResize = input<KjTextareaResize>('vertical');
205
-
206
- /** Auto-resize mode. `'auto'` measures `scrollHeight` on each input. */
207
- readonly kjAutoresize = input<KjTextareaAutoresize>('off');
208
-
209
- /** Minimum rows when auto-resize is on. */
210
- readonly kjMinRows = input<number, number | string | undefined>(0, {
211
- transform: numberWithDefault(0),
212
- });
213
-
214
- /** Maximum rows when auto-resize is on. */
215
- readonly kjMaxRows = input<number, number | string | undefined>(Number.POSITIVE_INFINITY, {
216
- transform: numberWithDefault(Number.POSITIVE_INFINITY),
217
- });
218
-
219
- /** Native `maxlength`. Required to enable the visible counter. */
220
- readonly kjMaxLength = input<number, number | string | undefined>(Number.POSITIVE_INFINITY, {
221
- transform: numberWithDefault(Number.POSITIVE_INFINITY),
222
- });
223
-
224
- /** Renders a visible `{ length } / { kjMaxLength }` counter. Requires `kjMaxLength`. */
225
- readonly kjShowCounter = input(false, { transform: booleanAttribute });
226
-
227
- /** Whether the textarea is invalid. Combined with `touched` for ARIA. */
228
- readonly kjInvalid = input(false, { transform: booleanAttribute });
229
-
230
- /** Disables the textarea. Reflects `aria-disabled` and native `disabled`. */
231
- readonly kjDisabled = input(false, { transform: booleanAttribute });
232
-
233
- /** Theme variant. Configurable via `provideKjTextarea(...)`. */
234
- readonly kjVariant = input('outlined');
235
-
236
- /** Theme size. Configurable via `provideKjTextarea(...)`. */
237
- readonly kjSize = input('md');
238
-
239
- /** @internal stable id for the counter / aria-describedby wiring. */
240
- protected readonly counterId = `kj-textarea-counter-${++nextId}`;
241
-
242
- // ── CVA plumbing ───────────────────────────────────────────────────────
243
- // The wrapper itself acts as the form-control bound to `<kj-textarea>` so
244
- // consumers can write `[(ngModel)]="bio"` / `[formControl]="bio"` on the
245
- // wrapper element. The inner `[kjTextarea]` directive's own KjFormControl is
246
- // a local signal channel that powers value reflection + the counter; both
247
- // are kept in sync via the (input) handler.
248
- private readonly cvaValue = signal<string>('');
249
- protected readonly cvaDisabled = signal<boolean>(false);
250
-
251
- /** @internal Effective textarea value: CVA-bound value with kjValue fallback. */
252
- protected readonly currentValue = computed(() => {
253
- const v = this.cvaValue();
254
- return v !== '' && v != null ? v : this.kjValue();
255
- });
256
-
257
- private _onChange?: (value: string) => void;
258
- private _onTouched?: () => void;
259
-
260
- /** @internal Whether the visible counter element should render. */
261
- protected readonly showCounter = computed(
262
- () => this.kjShowCounter() && Number.isFinite(this.kjMaxLength()),
263
- );
264
-
265
- /** @internal — value length, prioritised from the CVA-bound signal so the
266
- * counter updates the same tick the form control writes. */
267
- protected readonly valueLength = computed(() => {
268
- const cva = this.cvaValue();
269
- if (cva) return cva.length;
270
- return (this.kjValue() ?? '').length;
271
- });
272
-
273
- /** @internal — counter state for theming (`ok` / `warn` / `limit`). */
274
- protected readonly counterState = computed(() => {
275
- const max = this.kjMaxLength();
276
- if (!Number.isFinite(max)) return 'ok';
277
- const remaining = max - this.valueLength();
278
- if (remaining <= 0) return 'limit';
279
- if (remaining <= 20) return 'warn';
280
- return 'ok';
281
- });
282
-
283
- /** @internal — composed aria-describedby (counter id when visible). */
284
- protected readonly ariaDescribedBy = computed(() =>
285
- this.showCounter() ? this.counterId : null,
286
- );
287
-
288
- /** @internal — threshold-based announcement string (mirrors the directive's
289
- * own logic so the wrapper doesn't need a viewChild handle to read it). */
290
- protected readonly liveMessage = computed<string>(() => {
291
- const max = this.kjMaxLength();
292
- if (!Number.isFinite(max)) return '';
293
- const r = max - this.valueLength();
294
- if (r === 0) return 'Character limit reached';
295
- if (r === 10) return '10 characters remaining';
296
- if (r === 20) return '20 characters remaining';
297
- return '';
298
- });
299
-
300
- constructor() {
301
- // Dev-mode guidance: counter requested without max length is a no-op.
302
- effect(() => {
303
- if (this.kjShowCounter() && !Number.isFinite(this.kjMaxLength()) && typeof console !== 'undefined') {
304
- console.warn(
305
- '[kj-textarea] kjShowCounter is set without kjMaxLength — counter will not render.',
306
- );
307
- }
308
- });
309
- }
310
-
311
- /** @internal — host (input) wired into the wrapper's CVA. */
312
- onInnerInput(value: string): void {
313
- this.cvaValue.set(value);
314
- this._onChange?.(value);
315
- }
316
-
317
- /** @internal — host (blur) marks CVA touched. */
318
- onInnerBlur(): void {
319
- this._onTouched?.();
320
- }
321
-
322
- // ── ControlValueAccessor implementation ────────────────────────────────
323
- writeValue(val: unknown): void {
324
- const next = val == null ? '' : String(val);
325
- this.cvaValue.set(next);
326
- }
327
-
328
- registerOnChange(fn: (value: string) => void): void {
329
- this._onChange = fn;
330
- }
331
-
332
- registerOnTouched(fn: () => void): void {
333
- this._onTouched = fn;
334
- }
335
-
336
- setDisabledState(isDisabled: boolean): void {
337
- this.cvaDisabled.set(isDisabled);
338
- }
339
- }