@kouji-ui/components 0.1.1

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 (730) hide show
  1. package/.turbo/turbo-build.log +29 -0
  2. package/CHANGELOG.md +192 -0
  3. package/ng-package.json +7 -0
  4. package/package.json +43 -0
  5. package/src/accordion/_examples/accordion.default.example.ts +31 -0
  6. package/src/accordion/_examples/accordion.disabled.example.ts +38 -0
  7. package/src/accordion/_examples/accordion.multiple.example.ts +31 -0
  8. package/src/accordion/_examples/accordion.rich-content.example.ts +49 -0
  9. package/src/accordion/_examples/index.ts +6 -0
  10. package/src/accordion/accordion.arrow-nav.example.ts +39 -0
  11. package/src/accordion/accordion.css +68 -0
  12. package/src/accordion/accordion.playground.ts +119 -0
  13. package/src/accordion/accordion.spec.ts +117 -0
  14. package/src/accordion/accordion.ts +153 -0
  15. package/src/accordion/accordion.usage.example.ts +38 -0
  16. package/src/accordion/accordion.value.example.ts +60 -0
  17. package/src/accordion/index.ts +1 -0
  18. package/src/alert/_examples/alert.banner.example.ts +56 -0
  19. package/src/alert/_examples/alert.dismissible.example.ts +53 -0
  20. package/src/alert/_examples/alert.example.ts +40 -0
  21. package/src/alert/_examples/alert.variants.example.ts +66 -0
  22. package/src/alert/_examples/alert.with-actions.example.ts +57 -0
  23. package/src/alert/_examples/index.ts +7 -0
  24. package/src/alert/alert.css +133 -0
  25. package/src/alert/alert.playground.ts +111 -0
  26. package/src/alert/alert.spec.ts +167 -0
  27. package/src/alert/alert.ts +250 -0
  28. package/src/alert/alert.usage.example.ts +58 -0
  29. package/src/alert/index.ts +8 -0
  30. package/src/avatar/_examples/avatar-group.example.ts +31 -0
  31. package/src/avatar/_examples/avatar-group.list.example.ts +45 -0
  32. package/src/avatar/_examples/avatar-group.overflow.example.ts +33 -0
  33. package/src/avatar/_examples/avatar-group.shapes.example.ts +39 -0
  34. package/src/avatar/_examples/avatar-group.sizes.example.ts +44 -0
  35. package/src/avatar/_examples/avatar.default.example.ts +18 -0
  36. package/src/avatar/_examples/avatar.initials.example.ts +20 -0
  37. package/src/avatar/_examples/avatar.shapes.example.ts +22 -0
  38. package/src/avatar/_examples/avatar.sizes.example.ts +26 -0
  39. package/src/avatar/_examples/avatar.with-image.example.ts +20 -0
  40. package/src/avatar/_examples/index.ts +12 -0
  41. package/src/avatar/avatar-group.spec.ts +138 -0
  42. package/src/avatar/avatar-group.ts +127 -0
  43. package/src/avatar/avatar-group.usage.example.ts +30 -0
  44. package/src/avatar/avatar.css +58 -0
  45. package/src/avatar/avatar.playground.ts +95 -0
  46. package/src/avatar/avatar.ts +123 -0
  47. package/src/avatar/index.ts +2 -0
  48. package/src/badge/_examples/badge.default.example.ts +18 -0
  49. package/src/badge/_examples/badge.sizes.example.ts +25 -0
  50. package/src/badge/_examples/badge.variants.example.ts +24 -0
  51. package/src/badge/_examples/badge.with-dot.example.ts +31 -0
  52. package/src/badge/_examples/badge.with-icon.example.ts +23 -0
  53. package/src/badge/_examples/index.ts +7 -0
  54. package/src/badge/badge.css +59 -0
  55. package/src/badge/badge.playground.ts +49 -0
  56. package/src/badge/badge.ts +86 -0
  57. package/src/badge/badge.usage.example.ts +22 -0
  58. package/src/badge/index.ts +1 -0
  59. package/src/breadcrumb/_examples/breadcrumb.custom-separator.example.ts +53 -0
  60. package/src/breadcrumb/_examples/breadcrumb.example.ts +48 -0
  61. package/src/breadcrumb/_examples/breadcrumb.long-path.example.ts +58 -0
  62. package/src/breadcrumb/_examples/breadcrumb.truncated.example.ts +59 -0
  63. package/src/breadcrumb/_examples/breadcrumb.with-icons.example.ts +66 -0
  64. package/src/breadcrumb/_examples/index.ts +7 -0
  65. package/src/breadcrumb/breadcrumb.css +121 -0
  66. package/src/breadcrumb/breadcrumb.playground.ts +93 -0
  67. package/src/breadcrumb/breadcrumb.spec.ts +230 -0
  68. package/src/breadcrumb/breadcrumb.ts +272 -0
  69. package/src/breadcrumb/breadcrumb.usage.example.ts +45 -0
  70. package/src/breadcrumb/index.ts +1 -0
  71. package/src/button/_examples/button.anchor.example.ts +18 -0
  72. package/src/button/_examples/button.configured.example.ts +43 -0
  73. package/src/button/_examples/button.disabled.example.ts +25 -0
  74. package/src/button/_examples/button.example.ts +22 -0
  75. package/src/button/_examples/button.icon.example.ts +27 -0
  76. package/src/button/_examples/button.loading.example.ts +31 -0
  77. package/src/button/_examples/button.pressed.example.ts +24 -0
  78. package/src/button/_examples/button.sizes.example.ts +26 -0
  79. package/src/button/_examples/button.usage.example.ts +66 -0
  80. package/src/button/_examples/button.variants.example.ts +26 -0
  81. package/src/button/_examples/index.ts +12 -0
  82. package/src/button/button.css +263 -0
  83. package/src/button/button.playground.ts +79 -0
  84. package/src/button/button.spec.ts +100 -0
  85. package/src/button/button.ts +150 -0
  86. package/src/button/index.ts +1 -0
  87. package/src/button-group/_examples/button-group.example.ts +30 -0
  88. package/src/button-group/_examples/button-group.icon-only.example.ts +30 -0
  89. package/src/button-group/_examples/button-group.toggle.example.ts +36 -0
  90. package/src/button-group/_examples/button-group.variants.example.ts +40 -0
  91. package/src/button-group/_examples/button-group.vertical.example.ts +29 -0
  92. package/src/button-group/_examples/index.ts +7 -0
  93. package/src/button-group/button-group.css +80 -0
  94. package/src/button-group/button-group.playground.ts +94 -0
  95. package/src/button-group/button-group.spec.ts +119 -0
  96. package/src/button-group/button-group.ts +130 -0
  97. package/src/button-group/button-group.usage.example.ts +35 -0
  98. package/src/button-group/index.ts +1 -0
  99. package/src/calendar/_examples/calendar.example.ts +33 -0
  100. package/src/calendar/_examples/index.ts +3 -0
  101. package/src/calendar/calendar.css +129 -0
  102. package/src/calendar/calendar.playground.ts +84 -0
  103. package/src/calendar/calendar.spec.ts +50 -0
  104. package/src/calendar/calendar.ts +171 -0
  105. package/src/calendar/calendar.usage.example.ts +33 -0
  106. package/src/calendar/index.ts +1 -0
  107. package/src/card/_examples/card.cover.example.ts +53 -0
  108. package/src/card/_examples/card.example.ts +27 -0
  109. package/src/card/_examples/card.full.example.ts +51 -0
  110. package/src/card/_examples/index.ts +5 -0
  111. package/src/card/card.css +120 -0
  112. package/src/card/card.playground.ts +116 -0
  113. package/src/card/card.spec.ts +50 -0
  114. package/src/card/card.ts +194 -0
  115. package/src/card/card.usage.example.ts +46 -0
  116. package/src/card/index.ts +1 -0
  117. package/src/carousel/_examples/carousel.autoplay.example.ts +69 -0
  118. package/src/carousel/_examples/carousel.example.ts +60 -0
  119. package/src/carousel/_examples/carousel.indicators.example.ts +64 -0
  120. package/src/carousel/_examples/carousel.lazy-load.example.ts +85 -0
  121. package/src/carousel/_examples/carousel.tabs-pattern.example.ts +61 -0
  122. package/src/carousel/_examples/index.ts +7 -0
  123. package/src/carousel/carousel.css +181 -0
  124. package/src/carousel/carousel.playground.ts +135 -0
  125. package/src/carousel/carousel.spec.ts +211 -0
  126. package/src/carousel/carousel.ts +399 -0
  127. package/src/carousel/carousel.usage.example.ts +46 -0
  128. package/src/carousel/index.ts +1 -0
  129. package/src/cascade-select/_examples/cascade-select.data-driven.example.ts +119 -0
  130. package/src/cascade-select/_examples/cascade-select.disabled.example.ts +74 -0
  131. package/src/cascade-select/_examples/cascade-select.example.ts +80 -0
  132. package/src/cascade-select/_examples/cascade-select.field.example.ts +73 -0
  133. package/src/cascade-select/_examples/cascade-select.path.example.ts +85 -0
  134. package/src/cascade-select/_examples/index.ts +7 -0
  135. package/src/cascade-select/cascade-select.css +120 -0
  136. package/src/cascade-select/cascade-select.playground.ts +133 -0
  137. package/src/cascade-select/cascade-select.ts +201 -0
  138. package/src/cascade-select/cascade-select.usage.example.ts +44 -0
  139. package/src/cascade-select/index.ts +5 -0
  140. package/src/chat/_examples/chat-bubble.example.ts +71 -0
  141. package/src/chat/_examples/chat-bubble.grouped.example.ts +69 -0
  142. package/src/chat/_examples/chat-bubble.sides.example.ts +41 -0
  143. package/src/chat/_examples/chat-bubble.variants.example.ts +58 -0
  144. package/src/chat/_examples/chat-bubble.with-state.example.ts +57 -0
  145. package/src/chat/_examples/index.ts +7 -0
  146. package/src/chat/chat.css +231 -0
  147. package/src/chat/chat.playground.ts +171 -0
  148. package/src/chat/chat.spec.ts +343 -0
  149. package/src/chat/chat.ts +269 -0
  150. package/src/chat/chat.usage.example.ts +49 -0
  151. package/src/chat/index.ts +13 -0
  152. package/src/checkbox/_examples/checkbox.checked.example.ts +20 -0
  153. package/src/checkbox/_examples/checkbox.default.example.ts +20 -0
  154. package/src/checkbox/_examples/checkbox.disabled.example.ts +26 -0
  155. package/src/checkbox/_examples/checkbox.indeterminate.example.ts +20 -0
  156. package/src/checkbox/_examples/checkbox.usage.example.ts +62 -0
  157. package/src/checkbox/_examples/index.ts +7 -0
  158. package/src/checkbox/checkbox.css +74 -0
  159. package/src/checkbox/checkbox.playground.ts +68 -0
  160. package/src/checkbox/checkbox.ts +122 -0
  161. package/src/checkbox/index.ts +1 -0
  162. package/src/color-picker/_examples/color-picker.alpha.example.ts +36 -0
  163. package/src/color-picker/_examples/color-picker.example.ts +34 -0
  164. package/src/color-picker/_examples/color-picker.hex-input.example.ts +53 -0
  165. package/src/color-picker/_examples/color-picker.in-form.example.ts +60 -0
  166. package/src/color-picker/_examples/color-picker.usage.example.ts +58 -0
  167. package/src/color-picker/_examples/color-picker.with-presets.example.ts +45 -0
  168. package/src/color-picker/_examples/index.ts +8 -0
  169. package/src/color-picker/color-picker.css +183 -0
  170. package/src/color-picker/color-picker.playground.ts +83 -0
  171. package/src/color-picker/color-picker.spec.ts +94 -0
  172. package/src/color-picker/color-picker.ts +234 -0
  173. package/src/color-picker/index.ts +1 -0
  174. package/src/combobox/_examples/combobox.async.example.ts +85 -0
  175. package/src/combobox/_examples/combobox.empty-state.example.ts +36 -0
  176. package/src/combobox/_examples/combobox.example.ts +36 -0
  177. package/src/combobox/_examples/combobox.free-text.example.ts +42 -0
  178. package/src/combobox/_examples/combobox.usage.example.ts +51 -0
  179. package/src/combobox/_examples/combobox.with-icons.example.ts +49 -0
  180. package/src/combobox/_examples/index.ts +8 -0
  181. package/src/combobox/combobox.css +101 -0
  182. package/src/combobox/combobox.playground.ts +90 -0
  183. package/src/combobox/combobox.spec.ts +111 -0
  184. package/src/combobox/combobox.ts +219 -0
  185. package/src/combobox/index.ts +6 -0
  186. package/src/command-palette/_examples/command-palette.async.example.ts +99 -0
  187. package/src/command-palette/_examples/command-palette.dialog.example.ts +90 -0
  188. package/src/command-palette/_examples/command-palette.example.ts +40 -0
  189. package/src/command-palette/_examples/command-palette.fuzzy.example.ts +54 -0
  190. package/src/command-palette/_examples/command-palette.groups.example.ts +55 -0
  191. package/src/command-palette/_examples/command-palette.usage.example.ts +49 -0
  192. package/src/command-palette/_examples/index.ts +8 -0
  193. package/src/command-palette/command-palette.css +234 -0
  194. package/src/command-palette/command-palette.playground.ts +119 -0
  195. package/src/command-palette/command-palette.ts +448 -0
  196. package/src/command-palette/index.ts +10 -0
  197. package/src/confirm-popup/_examples/confirm-popup.destructive.example.ts +72 -0
  198. package/src/confirm-popup/_examples/confirm-popup.example.ts +82 -0
  199. package/src/confirm-popup/_examples/confirm-popup.placement.example.ts +97 -0
  200. package/src/confirm-popup/_examples/confirm-popup.usage.example.ts +94 -0
  201. package/src/confirm-popup/_examples/confirm-popup.with-message.example.ts +76 -0
  202. package/src/confirm-popup/_examples/index.ts +7 -0
  203. package/src/confirm-popup/confirm-popup.css +47 -0
  204. package/src/confirm-popup/confirm-popup.playground.ts +109 -0
  205. package/src/confirm-popup/confirm-popup.spec.ts +209 -0
  206. package/src/confirm-popup/confirm-popup.ts +279 -0
  207. package/src/confirm-popup/index.ts +1 -0
  208. package/src/date-picker/_examples/date-picker.disabled-dates.example.ts +44 -0
  209. package/src/date-picker/_examples/date-picker.example.ts +38 -0
  210. package/src/date-picker/_examples/date-picker.locale.example.ts +50 -0
  211. package/src/date-picker/_examples/date-picker.readonly.example.ts +32 -0
  212. package/src/date-picker/_examples/date-picker.usage.example.ts +60 -0
  213. package/src/date-picker/_examples/date-picker.with-min-max.example.ts +47 -0
  214. package/src/date-picker/_examples/index.ts +8 -0
  215. package/src/date-picker/date-picker.css +61 -0
  216. package/src/date-picker/date-picker.playground.ts +79 -0
  217. package/src/date-picker/date-picker.spec.ts +71 -0
  218. package/src/date-picker/date-picker.ts +185 -0
  219. package/src/date-picker/index.ts +1 -0
  220. package/src/dialog/_examples/dialog.confirmation.example.ts +30 -0
  221. package/src/dialog/_examples/dialog.default.example.ts +30 -0
  222. package/src/dialog/_examples/dialog.nested.example.ts +86 -0
  223. package/src/dialog/_examples/dialog.scrollable.example.ts +30 -0
  224. package/src/dialog/_examples/dialog.usage.example.ts +57 -0
  225. package/src/dialog/_examples/dialog.with-form.example.ts +48 -0
  226. package/src/dialog/_examples/index.ts +8 -0
  227. package/src/dialog/dialog.css +56 -0
  228. package/src/dialog/dialog.playground.ts +136 -0
  229. package/src/dialog/dialog.ts +82 -0
  230. package/src/dialog/index.ts +1 -0
  231. package/src/divider/_examples/divider.example.ts +27 -0
  232. package/src/divider/_examples/divider.sizes.example.ts +33 -0
  233. package/src/divider/_examples/divider.structural.example.ts +55 -0
  234. package/src/divider/_examples/divider.usage.example.ts +48 -0
  235. package/src/divider/_examples/divider.variants.example.ts +33 -0
  236. package/src/divider/_examples/divider.vertical.example.ts +38 -0
  237. package/src/divider/_examples/divider.with-content.example.ts +38 -0
  238. package/src/divider/_examples/index.ts +9 -0
  239. package/src/divider/divider.css +93 -0
  240. package/src/divider/divider.playground.ts +97 -0
  241. package/src/divider/divider.spec.ts +207 -0
  242. package/src/divider/divider.ts +220 -0
  243. package/src/divider/index.ts +1 -0
  244. package/src/drawer/_examples/drawer.example.ts +30 -0
  245. package/src/drawer/_examples/drawer.modal-vs-non-modal.example.ts +27 -0
  246. package/src/drawer/_examples/drawer.scrollable.example.ts +30 -0
  247. package/src/drawer/_examples/drawer.sides.example.ts +32 -0
  248. package/src/drawer/_examples/drawer.usage.example.ts +56 -0
  249. package/src/drawer/_examples/drawer.with-form.example.ts +48 -0
  250. package/src/drawer/_examples/index.ts +8 -0
  251. package/src/drawer/drawer.css +130 -0
  252. package/src/drawer/drawer.playground.ts +107 -0
  253. package/src/drawer/drawer.spec.ts +216 -0
  254. package/src/drawer/drawer.ts +85 -0
  255. package/src/drawer/index.ts +1 -0
  256. package/src/dropdown-menu/_examples/dropdown-menu.disabled.example.ts +19 -0
  257. package/src/dropdown-menu/_examples/dropdown-menu.example.ts +20 -0
  258. package/src/dropdown-menu/_examples/dropdown-menu.shortcuts.example.ts +31 -0
  259. package/src/dropdown-menu/_examples/dropdown-menu.sides.example.ts +18 -0
  260. package/src/dropdown-menu/_examples/dropdown-menu.usage.example.ts +56 -0
  261. package/src/dropdown-menu/_examples/dropdown-menu.with-icons.example.ts +31 -0
  262. package/src/dropdown-menu/_examples/dropdown-menu.with-separator.example.ts +41 -0
  263. package/src/dropdown-menu/_examples/index.ts +9 -0
  264. package/src/dropdown-menu/dropdown-menu.css +108 -0
  265. package/src/dropdown-menu/dropdown-menu.playground.ts +109 -0
  266. package/src/dropdown-menu/dropdown-menu.spec.ts +5 -0
  267. package/src/dropdown-menu/dropdown-menu.ts +128 -0
  268. package/src/dropdown-menu/index.ts +1 -0
  269. package/src/empty-state/_examples/empty-state.error.example.ts +63 -0
  270. package/src/empty-state/_examples/empty-state.example.ts +59 -0
  271. package/src/empty-state/_examples/empty-state.search.example.ts +82 -0
  272. package/src/empty-state/_examples/empty-state.sizes.example.ts +76 -0
  273. package/src/empty-state/_examples/empty-state.usage.example.ts +66 -0
  274. package/src/empty-state/_examples/empty-state.with-actions.example.ts +68 -0
  275. package/src/empty-state/_examples/index.ts +8 -0
  276. package/src/empty-state/empty-state.css +114 -0
  277. package/src/empty-state/empty-state.playground.ts +87 -0
  278. package/src/empty-state/empty-state.spec.ts +211 -0
  279. package/src/empty-state/empty-state.ts +276 -0
  280. package/src/empty-state/index.ts +1 -0
  281. package/src/example-components.ts +396 -0
  282. package/src/field/_examples/field.disabled.example.ts +49 -0
  283. package/src/field/_examples/field.example.ts +51 -0
  284. package/src/field/_examples/field.required.example.ts +46 -0
  285. package/src/field/_examples/field.with-error.example.ts +73 -0
  286. package/src/field/_examples/field.with-prefix-suffix.example.ts +63 -0
  287. package/src/field/_examples/index.ts +7 -0
  288. package/src/field/field.css +138 -0
  289. package/src/field/field.playground.ts +108 -0
  290. package/src/field/field.spec.ts +132 -0
  291. package/src/field/field.ts +232 -0
  292. package/src/field/field.usage.example.ts +63 -0
  293. package/src/field/index.ts +7 -0
  294. package/src/file-upload/_examples/file-upload.dropzone.example.ts +32 -0
  295. package/src/file-upload/_examples/file-upload.example.ts +29 -0
  296. package/src/file-upload/_examples/file-upload.image-preview.example.ts +31 -0
  297. package/src/file-upload/_examples/file-upload.multiple.example.ts +23 -0
  298. package/src/file-upload/_examples/file-upload.with-progress.example.ts +59 -0
  299. package/src/file-upload/_examples/index.ts +7 -0
  300. package/src/file-upload/file-upload.css +207 -0
  301. package/src/file-upload/file-upload.playground.ts +84 -0
  302. package/src/file-upload/file-upload.spec.ts +94 -0
  303. package/src/file-upload/file-upload.ts +301 -0
  304. package/src/file-upload/file-upload.usage.example.ts +45 -0
  305. package/src/file-upload/index.ts +1 -0
  306. package/src/form/_examples/form.async-submit.example.ts +72 -0
  307. package/src/form/_examples/form.compound.example.ts +93 -0
  308. package/src/form/_examples/form.example.ts +70 -0
  309. package/src/form/_examples/form.validation.example.ts +67 -0
  310. package/src/form/_examples/index.ts +6 -0
  311. package/src/form/form.css +63 -0
  312. package/src/form/form.playground.ts +145 -0
  313. package/src/form/form.spec.ts +96 -0
  314. package/src/form/form.ts +216 -0
  315. package/src/form/form.usage.example.ts +63 -0
  316. package/src/form/index.ts +5 -0
  317. package/src/icon/_examples/icon.gallery.example.ts +199 -0
  318. package/src/icon/_examples/icon.usage.example.ts +46 -0
  319. package/src/icon/_examples/index.ts +4 -0
  320. package/src/icon/icon.playground.ts +63 -0
  321. package/src/icon/index.ts +5 -0
  322. package/src/icon/lucide/icon-names.generated.ts +1708 -0
  323. package/src/icon/lucide/icon-names.ts +18 -0
  324. package/src/icon/lucide/index.ts +2 -0
  325. package/src/icon/lucide/provide-lucide-icons.ts +96 -0
  326. package/src/input/_examples/index.ts +4 -0
  327. package/src/input/_examples/input.color.example.ts +33 -0
  328. package/src/input/_examples/input.example.ts +22 -0
  329. package/src/input/index.ts +1 -0
  330. package/src/input/input.css +70 -0
  331. package/src/input/input.playground.ts +79 -0
  332. package/src/input/input.spec.ts +98 -0
  333. package/src/input/input.ts +158 -0
  334. package/src/input/input.usage.example.ts +40 -0
  335. package/src/input-group/_examples/index.ts +7 -0
  336. package/src/input-group/_examples/input-group.button.example.ts +43 -0
  337. package/src/input-group/_examples/input-group.example.ts +39 -0
  338. package/src/input-group/_examples/input-group.icon.example.ts +49 -0
  339. package/src/input-group/_examples/input-group.url.example.ts +36 -0
  340. package/src/input-group/_examples/input-group.variants.example.ts +39 -0
  341. package/src/input-group/index.ts +1 -0
  342. package/src/input-group/input-group.css +125 -0
  343. package/src/input-group/input-group.playground.ts +90 -0
  344. package/src/input-group/input-group.ts +142 -0
  345. package/src/input-group/input-group.usage.example.ts +47 -0
  346. package/src/input-mask/_examples/index.ts +8 -0
  347. package/src/input-mask/_examples/input-mask.credit-card.example.ts +90 -0
  348. package/src/input-mask/_examples/input-mask.custom-tokens.example.ts +87 -0
  349. package/src/input-mask/_examples/input-mask.date.example.ts +61 -0
  350. package/src/input-mask/_examples/input-mask.example.ts +61 -0
  351. package/src/input-mask/_examples/input-mask.usage.example.ts +44 -0
  352. package/src/input-mask/_examples/input-mask.validation.example.ts +80 -0
  353. package/src/input-mask/index.ts +9 -0
  354. package/src/input-mask/input-mask.css +39 -0
  355. package/src/input-mask/input-mask.playground.ts +79 -0
  356. package/src/input-mask/input-mask.ts +130 -0
  357. package/src/input-otp/_examples/index.ts +8 -0
  358. package/src/input-otp/_examples/input-otp.autosubmit.example.ts +71 -0
  359. package/src/input-otp/_examples/input-otp.example.ts +47 -0
  360. package/src/input-otp/_examples/input-otp.lengths.example.ts +67 -0
  361. package/src/input-otp/_examples/input-otp.masked.example.ts +46 -0
  362. package/src/input-otp/_examples/input-otp.reactive.example.ts +58 -0
  363. package/src/input-otp/_examples/input-otp.separator.example.ts +49 -0
  364. package/src/input-otp/index.ts +1 -0
  365. package/src/input-otp/input-otp.css +87 -0
  366. package/src/input-otp/input-otp.playground.ts +107 -0
  367. package/src/input-otp/input-otp.ts +244 -0
  368. package/src/input-otp/input-otp.usage.example.ts +45 -0
  369. package/src/kbd/_examples/index.ts +6 -0
  370. package/src/kbd/_examples/kbd.combo.example.ts +24 -0
  371. package/src/kbd/_examples/kbd.example.ts +22 -0
  372. package/src/kbd/_examples/kbd.in-tooltip.example.ts +43 -0
  373. package/src/kbd/_examples/kbd.sizes.example.ts +31 -0
  374. package/src/kbd/index.ts +1 -0
  375. package/src/kbd/kbd.css +67 -0
  376. package/src/kbd/kbd.playground.ts +51 -0
  377. package/src/kbd/kbd.spec.ts +123 -0
  378. package/src/kbd/kbd.ts +123 -0
  379. package/src/kbd/kbd.usage.example.ts +38 -0
  380. package/src/link/_examples/index.ts +8 -0
  381. package/src/link/_examples/link.disabled.example.ts +23 -0
  382. package/src/link/_examples/link.example.ts +26 -0
  383. package/src/link/_examples/link.external.example.ts +33 -0
  384. package/src/link/_examples/link.in-prose.example.ts +36 -0
  385. package/src/link/_examples/link.sizes.example.ts +28 -0
  386. package/src/link/_examples/link.variants.example.ts +25 -0
  387. package/src/link/index.ts +1 -0
  388. package/src/link/link.css +104 -0
  389. package/src/link/link.playground.ts +98 -0
  390. package/src/link/link.spec.ts +146 -0
  391. package/src/link/link.ts +133 -0
  392. package/src/link/link.usage.example.ts +37 -0
  393. package/src/list/_examples/index.ts +7 -0
  394. package/src/list/_examples/list.divided.example.ts +32 -0
  395. package/src/list/_examples/list.example.ts +31 -0
  396. package/src/list/_examples/list.interactive.example.ts +51 -0
  397. package/src/list/_examples/list.nav.example.ts +44 -0
  398. package/src/list/_examples/list.with-icons.example.ts +97 -0
  399. package/src/list/index.ts +1 -0
  400. package/src/list/list.css +166 -0
  401. package/src/list/list.playground.ts +90 -0
  402. package/src/list/list.spec.ts +121 -0
  403. package/src/list/list.ts +227 -0
  404. package/src/list/list.usage.example.ts +45 -0
  405. package/src/menubar/_examples/index.ts +6 -0
  406. package/src/menubar/_examples/menubar.disabled-item.example.ts +23 -0
  407. package/src/menubar/_examples/menubar.example.ts +22 -0
  408. package/src/menubar/_examples/menubar.with-shortcuts.example.ts +33 -0
  409. package/src/menubar/_examples/menubar.with-submenu.example.ts +76 -0
  410. package/src/menubar/index.ts +1 -0
  411. package/src/menubar/menubar.css +62 -0
  412. package/src/menubar/menubar.playground.ts +96 -0
  413. package/src/menubar/menubar.ts +160 -0
  414. package/src/menubar/menubar.usage.example.ts +33 -0
  415. package/src/number-input/_examples/index.ts +7 -0
  416. package/src/number-input/_examples/number-input.currency.example.ts +35 -0
  417. package/src/number-input/_examples/number-input.decimal.example.ts +34 -0
  418. package/src/number-input/_examples/number-input.example.ts +24 -0
  419. package/src/number-input/_examples/number-input.min-max.example.ts +33 -0
  420. package/src/number-input/_examples/number-input.with-stepper.example.ts +45 -0
  421. package/src/number-input/index.ts +1 -0
  422. package/src/number-input/number-input.css +115 -0
  423. package/src/number-input/number-input.playground.ts +92 -0
  424. package/src/number-input/number-input.spec.ts +102 -0
  425. package/src/number-input/number-input.ts +212 -0
  426. package/src/number-input/number-input.usage.example.ts +73 -0
  427. package/src/overlay/overlay.css +32 -0
  428. package/src/overlay-badge/_examples/index.ts +7 -0
  429. package/src/overlay-badge/_examples/overlay-badge.described.example.ts +36 -0
  430. package/src/overlay-badge/_examples/overlay-badge.dot.example.ts +28 -0
  431. package/src/overlay-badge/_examples/overlay-badge.example.ts +34 -0
  432. package/src/overlay-badge/_examples/overlay-badge.on-avatar.example.ts +38 -0
  433. package/src/overlay-badge/_examples/overlay-badge.positions.example.ts +39 -0
  434. package/src/overlay-badge/index.ts +1 -0
  435. package/src/overlay-badge/overlay-badge.css +118 -0
  436. package/src/overlay-badge/overlay-badge.playground.ts +92 -0
  437. package/src/overlay-badge/overlay-badge.spec.ts +174 -0
  438. package/src/overlay-badge/overlay-badge.ts +232 -0
  439. package/src/overlay-badge/overlay-badge.usage.example.ts +44 -0
  440. package/src/pagination/_examples/index.ts +7 -0
  441. package/src/pagination/_examples/pagination.boundaries.example.ts +56 -0
  442. package/src/pagination/_examples/pagination.compact.example.ts +42 -0
  443. package/src/pagination/_examples/pagination.example.ts +55 -0
  444. package/src/pagination/_examples/pagination.large.example.ts +54 -0
  445. package/src/pagination/_examples/pagination.with-info.example.ts +49 -0
  446. package/src/pagination/index.ts +1 -0
  447. package/src/pagination/pagination.css +146 -0
  448. package/src/pagination/pagination.playground.ts +107 -0
  449. package/src/pagination/pagination.spec.ts +202 -0
  450. package/src/pagination/pagination.ts +432 -0
  451. package/src/pagination/pagination.usage.example.ts +50 -0
  452. package/src/password-input/_examples/index.ts +6 -0
  453. package/src/password-input/_examples/password-input.example.ts +24 -0
  454. package/src/password-input/_examples/password-input.strength.example.ts +45 -0
  455. package/src/password-input/_examples/password-input.toggle.example.ts +43 -0
  456. package/src/password-input/_examples/password-input.with-rules.example.ts +78 -0
  457. package/src/password-input/index.ts +1 -0
  458. package/src/password-input/password-input.css +155 -0
  459. package/src/password-input/password-input.playground.ts +81 -0
  460. package/src/password-input/password-input.spec.ts +129 -0
  461. package/src/password-input/password-input.ts +254 -0
  462. package/src/password-input/password-input.usage.example.ts +55 -0
  463. package/src/playground-types.ts +47 -0
  464. package/src/popover/_examples/index.ts +7 -0
  465. package/src/popover/_examples/popover.cancellable.example.ts +20 -0
  466. package/src/popover/_examples/popover.example.ts +20 -0
  467. package/src/popover/_examples/popover.modal.example.ts +22 -0
  468. package/src/popover/_examples/popover.sides.example.ts +37 -0
  469. package/src/popover/_examples/popover.with-form.example.ts +38 -0
  470. package/src/popover/index.ts +1 -0
  471. package/src/popover/popover.css +71 -0
  472. package/src/popover/popover.playground.ts +86 -0
  473. package/src/popover/popover.spec.ts +5 -0
  474. package/src/popover/popover.ts +94 -0
  475. package/src/popover/popover.usage.example.ts +48 -0
  476. package/src/progress-bar/_examples/index.ts +7 -0
  477. package/src/progress-bar/_examples/progress-bar.example.ts +22 -0
  478. package/src/progress-bar/_examples/progress-bar.indeterminate.example.ts +23 -0
  479. package/src/progress-bar/_examples/progress-bar.sizes.example.ts +29 -0
  480. package/src/progress-bar/_examples/progress-bar.variants.example.ts +30 -0
  481. package/src/progress-bar/_examples/progress-bar.with-label.example.ts +30 -0
  482. package/src/progress-bar/index.ts +1 -0
  483. package/src/progress-bar/progress-bar.css +113 -0
  484. package/src/progress-bar/progress-bar.playground.ts +87 -0
  485. package/src/progress-bar/progress-bar.spec.ts +233 -0
  486. package/src/progress-bar/progress-bar.ts +155 -0
  487. package/src/progress-bar/progress-bar.usage.example.ts +52 -0
  488. package/src/public-api.ts +61 -0
  489. package/src/radio/_examples/index.ts +6 -0
  490. package/src/radio/_examples/radio.default.example.ts +26 -0
  491. package/src/radio/_examples/radio.disabled.example.ts +26 -0
  492. package/src/radio/_examples/radio.group.example.ts +27 -0
  493. package/src/radio/_examples/radio.inline.example.ts +26 -0
  494. package/src/radio/index.ts +1 -0
  495. package/src/radio/radio.css +58 -0
  496. package/src/radio/radio.playground.ts +90 -0
  497. package/src/radio/radio.ts +143 -0
  498. package/src/radio/radio.usage.example.ts +54 -0
  499. package/src/select/_examples/index.ts +6 -0
  500. package/src/select/_examples/select.default.example.ts +26 -0
  501. package/src/select/_examples/select.disabled.example.ts +24 -0
  502. package/src/select/_examples/select.grouped.example.ts +37 -0
  503. package/src/select/_examples/select.placeholder.example.ts +26 -0
  504. package/src/select/index.ts +1 -0
  505. package/src/select/select.css +65 -0
  506. package/src/select/select.playground.ts +81 -0
  507. package/src/select/select.ts +176 -0
  508. package/src/select/select.usage.example.ts +64 -0
  509. package/src/skeleton/_examples/index.ts +6 -0
  510. package/src/skeleton/_examples/skeleton.animations.example.ts +52 -0
  511. package/src/skeleton/_examples/skeleton.card.example.ts +68 -0
  512. package/src/skeleton/_examples/skeleton.example.ts +24 -0
  513. package/src/skeleton/_examples/skeleton.shapes.example.ts +55 -0
  514. package/src/skeleton/index.ts +1 -0
  515. package/src/skeleton/skeleton.css +111 -0
  516. package/src/skeleton/skeleton.playground.ts +80 -0
  517. package/src/skeleton/skeleton.spec.ts +126 -0
  518. package/src/skeleton/skeleton.ts +155 -0
  519. package/src/skeleton/skeleton.usage.example.ts +49 -0
  520. package/src/slider/_examples/index.ts +7 -0
  521. package/src/slider/_examples/slider.example.ts +41 -0
  522. package/src/slider/_examples/slider.formatted.example.ts +53 -0
  523. package/src/slider/_examples/slider.range.example.ts +48 -0
  524. package/src/slider/_examples/slider.vertical.example.ts +48 -0
  525. package/src/slider/_examples/slider.with-marks.example.ts +46 -0
  526. package/src/slider/index.ts +1 -0
  527. package/src/slider/slider.css +172 -0
  528. package/src/slider/slider.playground.ts +88 -0
  529. package/src/slider/slider.spec.ts +139 -0
  530. package/src/slider/slider.ts +246 -0
  531. package/src/slider/slider.usage.example.ts +68 -0
  532. package/src/speed-dial/_examples/index.ts +7 -0
  533. package/src/speed-dial/_examples/speed-dial.directions.example.ts +85 -0
  534. package/src/speed-dial/_examples/speed-dial.disabled.example.ts +71 -0
  535. package/src/speed-dial/_examples/speed-dial.example.ts +48 -0
  536. package/src/speed-dial/_examples/speed-dial.usage.example.ts +59 -0
  537. package/src/speed-dial/_examples/speed-dial.with-tooltips.example.ts +65 -0
  538. package/src/speed-dial/index.ts +1 -0
  539. package/src/speed-dial/speed-dial.css +137 -0
  540. package/src/speed-dial/speed-dial.playground.ts +137 -0
  541. package/src/speed-dial/speed-dial.spec.ts +191 -0
  542. package/src/speed-dial/speed-dial.ts +257 -0
  543. package/src/spinner/_examples/index.ts +8 -0
  544. package/src/spinner/_examples/spinner.animations.example.ts +54 -0
  545. package/src/spinner/_examples/spinner.example.ts +26 -0
  546. package/src/spinner/_examples/spinner.in-button.example.ts +51 -0
  547. package/src/spinner/_examples/spinner.sizes.example.ts +31 -0
  548. package/src/spinner/_examples/spinner.usage.example.ts +45 -0
  549. package/src/spinner/_examples/spinner.variants.example.ts +34 -0
  550. package/src/spinner/index.ts +1 -0
  551. package/src/spinner/spinner.css +161 -0
  552. package/src/spinner/spinner.playground.ts +68 -0
  553. package/src/spinner/spinner.spec.ts +184 -0
  554. package/src/spinner/spinner.ts +185 -0
  555. package/src/stepper/_examples/index.ts +8 -0
  556. package/src/stepper/_examples/stepper.example.ts +62 -0
  557. package/src/stepper/_examples/stepper.non-linear.example.ts +63 -0
  558. package/src/stepper/_examples/stepper.optional-step.example.ts +62 -0
  559. package/src/stepper/_examples/stepper.usage.example.ts +73 -0
  560. package/src/stepper/_examples/stepper.vertical.example.ts +66 -0
  561. package/src/stepper/_examples/stepper.with-error.example.ts +63 -0
  562. package/src/stepper/index.ts +1 -0
  563. package/src/stepper/stepper.css +147 -0
  564. package/src/stepper/stepper.playground.ts +88 -0
  565. package/src/stepper/stepper.spec.ts +200 -0
  566. package/src/stepper/stepper.ts +242 -0
  567. package/src/table/_examples/index.ts +23 -0
  568. package/src/table/_examples/table.column-pinning.example.ts +55 -0
  569. package/src/table/_examples/table.column-resize.example.ts +49 -0
  570. package/src/table/_examples/table.column-visibility.example.ts +52 -0
  571. package/src/table/_examples/table.density.example.ts +71 -0
  572. package/src/table/_examples/table.editable.example.ts +85 -0
  573. package/src/table/_examples/table.empty-and-error.example.ts +112 -0
  574. package/src/table/_examples/table.example.ts +45 -0
  575. package/src/table/_examples/table.export.example.ts +82 -0
  576. package/src/table/_examples/table.filterable.example.ts +67 -0
  577. package/src/table/_examples/table.grouping.example.ts +63 -0
  578. package/src/table/_examples/table.keyboard.example.ts +115 -0
  579. package/src/table/_examples/table.master-detail.example.ts +102 -0
  580. package/src/table/_examples/table.persistence.example.ts +85 -0
  581. package/src/table/_examples/table.playground.ts +154 -0
  582. package/src/table/_examples/table.row-pinning.example.ts +71 -0
  583. package/src/table/_examples/table.selection.example.ts +67 -0
  584. package/src/table/_examples/table.server-mode.example.ts +120 -0
  585. package/src/table/_examples/table.sortable.example.ts +49 -0
  586. package/src/table/_examples/table.theming.example.ts +64 -0
  587. package/src/table/_examples/table.usage.example.ts +90 -0
  588. package/src/table/_examples/table.virtualized.example.ts +122 -0
  589. package/src/table/index.ts +11 -0
  590. package/src/table/table-cell-editor-outlet.ts +111 -0
  591. package/src/table/table-editors/boolean-editor.ts +71 -0
  592. package/src/table/table-editors/date-editor.ts +117 -0
  593. package/src/table/table-editors/editors.spec.ts +147 -0
  594. package/src/table/table-editors/index.ts +41 -0
  595. package/src/table/table-editors/number-editor.ts +89 -0
  596. package/src/table/table-editors/select-editor.ts +107 -0
  597. package/src/table/table-editors/text-editor.ts +82 -0
  598. package/src/table/table-export.spec.ts +33 -0
  599. package/src/table/table-export.ts +53 -0
  600. package/src/table/table-filter-outlet.ts +137 -0
  601. package/src/table/table-filters/date-filter.ts +122 -0
  602. package/src/table/table-filters/filters.css +53 -0
  603. package/src/table/table-filters/filters.spec.ts +277 -0
  604. package/src/table/table-filters/index.ts +11 -0
  605. package/src/table/table-filters/number-filter.ts +232 -0
  606. package/src/table/table-filters/select-filter.ts +129 -0
  607. package/src/table/table-filters/text-filter.ts +110 -0
  608. package/src/table/table-pagination.spec.ts +118 -0
  609. package/src/table/table-pagination.ts +191 -0
  610. package/src/table/table-side-panel.spec.ts +170 -0
  611. package/src/table/table-side-panel.ts +263 -0
  612. package/src/table/table-status-bar.spec.ts +78 -0
  613. package/src/table/table-status-bar.ts +70 -0
  614. package/src/table/table-toolbar.spec.ts +180 -0
  615. package/src/table/table-toolbar.ts +244 -0
  616. package/src/table/table-virtual.spec.ts +103 -0
  617. package/src/table/table-virtual.ts +180 -0
  618. package/src/table/table.css +468 -0
  619. package/src/table/table.spec.ts +175 -0
  620. package/src/table/table.ts +1009 -0
  621. package/src/tabs/_examples/index.ts +8 -0
  622. package/src/tabs/_examples/tabs.controlled.example.ts +59 -0
  623. package/src/tabs/_examples/tabs.disabled.example.ts +34 -0
  624. package/src/tabs/_examples/tabs.example.ts +34 -0
  625. package/src/tabs/_examples/tabs.manual-activation.example.ts +34 -0
  626. package/src/tabs/_examples/tabs.usage.example.ts +43 -0
  627. package/src/tabs/_examples/tabs.vertical.example.ts +33 -0
  628. package/src/tabs/index.ts +1 -0
  629. package/src/tabs/tabs.css +80 -0
  630. package/src/tabs/tabs.playground.ts +88 -0
  631. package/src/tabs/tabs.spec.ts +135 -0
  632. package/src/tabs/tabs.ts +204 -0
  633. package/src/tag/_examples/index.ts +9 -0
  634. package/src/tag/_examples/tag.example.ts +22 -0
  635. package/src/tag/_examples/tag.list.example.ts +38 -0
  636. package/src/tag/_examples/tag.removable.example.ts +39 -0
  637. package/src/tag/_examples/tag.selectable.example.ts +33 -0
  638. package/src/tag/_examples/tag.sizes.example.ts +25 -0
  639. package/src/tag/_examples/tag.usage.example.ts +62 -0
  640. package/src/tag/_examples/tag.variants.example.ts +29 -0
  641. package/src/tag/index.ts +1 -0
  642. package/src/tag/tag.css +167 -0
  643. package/src/tag/tag.playground.ts +63 -0
  644. package/src/tag/tag.spec.ts +153 -0
  645. package/src/tag/tag.ts +186 -0
  646. package/src/test-setup.ts +5 -0
  647. package/src/textarea/_examples/index.ts +8 -0
  648. package/src/textarea/_examples/textarea.autoresize.example.ts +37 -0
  649. package/src/textarea/_examples/textarea.character-count.example.ts +34 -0
  650. package/src/textarea/_examples/textarea.example.ts +22 -0
  651. package/src/textarea/_examples/textarea.no-resize.example.ts +28 -0
  652. package/src/textarea/_examples/textarea.usage.example.ts +50 -0
  653. package/src/textarea/_examples/textarea.with-field.example.ts +66 -0
  654. package/src/textarea/index.ts +1 -0
  655. package/src/textarea/textarea.css +117 -0
  656. package/src/textarea/textarea.playground.ts +70 -0
  657. package/src/textarea/textarea.spec.ts +161 -0
  658. package/src/textarea/textarea.ts +339 -0
  659. package/src/time-picker/_examples/index.ts +8 -0
  660. package/src/time-picker/_examples/time-picker.12-hour.example.ts +24 -0
  661. package/src/time-picker/_examples/time-picker.example.ts +24 -0
  662. package/src/time-picker/_examples/time-picker.formatted.example.ts +32 -0
  663. package/src/time-picker/_examples/time-picker.range.example.ts +54 -0
  664. package/src/time-picker/_examples/time-picker.usage.example.ts +53 -0
  665. package/src/time-picker/_examples/time-picker.with-seconds.example.ts +24 -0
  666. package/src/time-picker/index.ts +1 -0
  667. package/src/time-picker/time-picker.css +126 -0
  668. package/src/time-picker/time-picker.playground.ts +72 -0
  669. package/src/time-picker/time-picker.spec.ts +77 -0
  670. package/src/time-picker/time-picker.ts +207 -0
  671. package/src/toast/_examples/index.ts +7 -0
  672. package/src/toast/_examples/toast.default.example.ts +37 -0
  673. package/src/toast/_examples/toast.dismissible.example.ts +38 -0
  674. package/src/toast/_examples/toast.usage.example.ts +57 -0
  675. package/src/toast/_examples/toast.variants.example.ts +43 -0
  676. package/src/toast/_examples/toast.with-action.example.ts +46 -0
  677. package/src/toast/index.ts +1 -0
  678. package/src/toast/toast.css +115 -0
  679. package/src/toast/toast.playground.ts +61 -0
  680. package/src/toast/toast.ts +168 -0
  681. package/src/toggle/_examples/index.ts +7 -0
  682. package/src/toggle/_examples/toggle.checked.example.ts +20 -0
  683. package/src/toggle/_examples/toggle.default.example.ts +20 -0
  684. package/src/toggle/_examples/toggle.disabled.example.ts +26 -0
  685. package/src/toggle/_examples/toggle.usage.example.ts +51 -0
  686. package/src/toggle/_examples/toggle.with-label.example.ts +30 -0
  687. package/src/toggle/index.ts +1 -0
  688. package/src/toggle/toggle.css +123 -0
  689. package/src/toggle/toggle.playground.ts +65 -0
  690. package/src/toggle/toggle.ts +113 -0
  691. package/src/tooltip/_examples/index.ts +9 -0
  692. package/src/tooltip/_examples/tooltip.delays.example.ts +16 -0
  693. package/src/tooltip/_examples/tooltip.disabled.example.ts +16 -0
  694. package/src/tooltip/_examples/tooltip.example.ts +16 -0
  695. package/src/tooltip/_examples/tooltip.group.example.ts +20 -0
  696. package/src/tooltip/_examples/tooltip.rich.example.ts +19 -0
  697. package/src/tooltip/_examples/tooltip.sides.example.ts +18 -0
  698. package/src/tooltip/_examples/tooltip.usage.example.ts +50 -0
  699. package/src/tooltip/index.ts +1 -0
  700. package/src/tooltip/tooltip.css +61 -0
  701. package/src/tooltip/tooltip.playground.ts +79 -0
  702. package/src/tooltip/tooltip.spec.ts +5 -0
  703. package/src/tooltip/tooltip.ts +102 -0
  704. package/src/tree-select/_examples/index.ts +8 -0
  705. package/src/tree-select/_examples/tree-select.disabled.example.ts +106 -0
  706. package/src/tree-select/_examples/tree-select.example.ts +65 -0
  707. package/src/tree-select/_examples/tree-select.expanded.example.ts +72 -0
  708. package/src/tree-select/_examples/tree-select.field.example.ts +77 -0
  709. package/src/tree-select/_examples/tree-select.multi.example.ts +73 -0
  710. package/src/tree-select/_examples/tree-select.usage.example.ts +85 -0
  711. package/src/tree-select/index.ts +1 -0
  712. package/src/tree-select/tree-select.css +220 -0
  713. package/src/tree-select/tree-select.playground.ts +83 -0
  714. package/src/tree-select/tree-select.ts +348 -0
  715. package/src/typography/_examples/index.ts +9 -0
  716. package/src/typography/_examples/typography.blockquote.example.ts +34 -0
  717. package/src/typography/_examples/typography.code.example.ts +32 -0
  718. package/src/typography/_examples/typography.example.ts +42 -0
  719. package/src/typography/_examples/typography.lead.example.ts +37 -0
  720. package/src/typography/_examples/typography.muted.example.ts +27 -0
  721. package/src/typography/_examples/typography.truncate.example.ts +41 -0
  722. package/src/typography/_examples/typography.usage.example.ts +44 -0
  723. package/src/typography/index.ts +8 -0
  724. package/src/typography/typography.playground.ts +101 -0
  725. package/src/typography/typography.spec.ts +70 -0
  726. package/src/typography/typography.ts +105 -0
  727. package/tsconfig.lib.json +25 -0
  728. package/tsconfig.lib.prod.json +17 -0
  729. package/tsconfig.spec.json +16 -0
  730. package/vite.config.ts +33 -0
@@ -0,0 +1,18 @@
1
+ // Re-generate via:
2
+ // node scripts/generate-lucide-icon-names.mjs
3
+ // (script reads the installed lucide-static/icon-nodes.json keys and writes
4
+ // this file). We embed the list as a static const instead of importing the
5
+ // JSON at runtime so SSR / Vite ESM resolvers don't have to resolve a JSON
6
+ // path inside the lucide-static package at request time.
7
+
8
+ import { LUCIDE_ICON_NAMES_RAW } from './icon-names.generated';
9
+
10
+ /** Kebab-case Lucide icon name. */
11
+ export type LucideIconName = string;
12
+
13
+ /**
14
+ * All Lucide icon kebab-case names, sorted alphabetically. Generated from
15
+ * `lucide-static/icon-nodes.json`. Useful for galleries, autocomplete, or
16
+ * batch eager registration via {@link provideLucideIcons}.
17
+ */
18
+ export const LUCIDE_ICON_NAMES: readonly LucideIconName[] = LUCIDE_ICON_NAMES_RAW;
@@ -0,0 +1,2 @@
1
+ export { provideLucideIcons } from './provide-lucide-icons';
2
+ export { LUCIDE_ICON_NAMES } from './icon-names';
@@ -0,0 +1,96 @@
1
+ import {
2
+ type EnvironmentProviders,
3
+ inject,
4
+ makeEnvironmentProviders,
5
+ provideEnvironmentInitializer,
6
+ } from '@angular/core';
7
+ import { KJ_ICON_REGISTRY } from '@kouji-ui/core';
8
+ import * as lucideIcons from 'lucide-static';
9
+
10
+ /**
11
+ * Encode an SVG string into a `data:` URL fragment safe for use inside a CSS
12
+ * `url(...)` value. Percent-encodes the characters that would otherwise break
13
+ * parsing (`#`, `?`, `<`, `>`, etc.) while leaving the bulk of the SVG
14
+ * human-readable for easier debugging.
15
+ */
16
+ function encodeSvgDataUrl(svg: string): string {
17
+ const encoded = svg
18
+ .replace(/"/g, "'")
19
+ .replace(/>\s+</g, '><')
20
+ .trim()
21
+ .replace(/[\r\n\t]+/g, ' ')
22
+ .replace(/%/g, '%25')
23
+ .replace(/#/g, '%23')
24
+ .replace(/\?/g, '%3F')
25
+ .replace(/</g, '%3C')
26
+ .replace(/>/g, '%3E');
27
+ return `url("data:image/svg+xml;utf8,${encoded}")`;
28
+ }
29
+
30
+ /** Convert PascalCase ("AArrowDown") → kebab-case ("a-arrow-down"). */
31
+ function pascalToKebab(name: string): string {
32
+ return name
33
+ .replace(/([a-z0-9])([A-Z])/g, '$1-$2')
34
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1-$2')
35
+ .toLowerCase();
36
+ }
37
+
38
+ /** Lazily build the kebab-name → encoded-data-url map once per app. */
39
+ let _registryEntries: Record<string, string> | null = null;
40
+ function buildLucideRegistry(): Record<string, string> {
41
+ if (_registryEntries) return _registryEntries;
42
+ const entries: Record<string, string> = {};
43
+ const map = lucideIcons as unknown as Record<string, string>;
44
+ for (const [pascal, svg] of Object.entries(map)) {
45
+ if (typeof svg !== 'string') continue;
46
+ entries[pascalToKebab(pascal)] = encodeSvgDataUrl(svg);
47
+ }
48
+ _registryEntries = entries;
49
+ return entries;
50
+ }
51
+
52
+ /**
53
+ * Wire Lucide icons into the kouji icon registry.
54
+ *
55
+ * The full Lucide icon set is bundled once and registered into
56
+ * `KJ_ICON_REGISTRY` at app start, so any kebab-case Lucide name renders
57
+ * synchronously the first time it appears in the DOM.
58
+ *
59
+ * The transferred bundle cost is ~300 KB gzipped for the whole set, which
60
+ * lets us keep the API surface minimal and works identically in dev and
61
+ * production — Vite/esbuild can't reliably code-split per-icon dynamic
62
+ * imports against `lucide-static`'s package layout, so a single static
63
+ * namespace import is the predictable choice.
64
+ *
65
+ * @example
66
+ * ```ts
67
+ * // app.config.ts
68
+ * provideLucideIcons(),
69
+ * ```
70
+ *
71
+ * @doc-example Gallery
72
+ * @doc-file ../icon.gallery.example.ts
73
+ *
74
+ * @doc-css-var
75
+ * --kj-icon — Resolved icon value (url("...") or "glyph"). Set by the directive — read by the rendered .kj-icon.
76
+ * --kj-icon-font — Font family for `mode="font"` icons. Set on a parent to wire a pre-loaded icon font.
77
+ * --kj-icon-size-xs — Token size for the `xs` icon scale. Override per theme.
78
+ * --kj-icon-size-sm — Token size for the `sm` icon scale.
79
+ * --kj-icon-size-md — Token size for the `md` icon scale.
80
+ * --kj-icon-size-lg — Token size for the `lg` icon scale.
81
+ * --kj-icon-size-xl — Token size for the `xl` icon scale.
82
+ *
83
+ * @doc-category Library/Icon
84
+ * @doc
85
+ * @doc-name icon
86
+ * @doc-is-main
87
+ * @doc-description Wires the full Lucide icon set into the kouji icon registry — any kebab-case Lucide name renders by name.
88
+ */
89
+ export function provideLucideIcons(): EnvironmentProviders {
90
+ return makeEnvironmentProviders([
91
+ provideEnvironmentInitializer(() => {
92
+ const registry = inject(KJ_ICON_REGISTRY);
93
+ registry.update((m) => ({ ...m, ...buildLucideRegistry() }));
94
+ }),
95
+ ]);
96
+ }
@@ -0,0 +1,4 @@
1
+ // AUTO-GENERATED by scripts/migrate-examples.mjs
2
+ // One barrel per component folder — used by the docs app as a lazy chunk.
3
+ export { KjInputColorExample } from './input.color.example';
4
+ export { KjInputExample } from './input.example';
@@ -0,0 +1,33 @@
1
+ import { Component, signal, ChangeDetectionStrategy } from '@angular/core';
2
+ import { KjInputComponent } from '../input';
3
+
4
+ /**
5
+ * Color picker example — uses the native <input type="color"> swatch
6
+ * via the shared kj-input wrapper. Bound to a signal via ngModel-style flow.
7
+ */
8
+ @Component({
9
+ selector: 'kj-input-color-example',
10
+ standalone: true,
11
+ imports: [KjInputComponent],
12
+ styles: [
13
+ `
14
+ :host {
15
+ display: flex;
16
+ gap: var(--kj-space-md);
17
+ align-items: center;
18
+ }
19
+ code {
20
+ font: var(--kj-text-sm)/1 var(--kj-font-mono);
21
+ color: var(--kj-fg-muted);
22
+ }
23
+ `,
24
+ ],
25
+ changeDetection: ChangeDetectionStrategy.Eager,
26
+ template: `
27
+ <kj-input type="color" (input)="hex.set($any($event.target).value)" />
28
+ <code>{{ hex() }}</code>
29
+ `,
30
+ })
31
+ export class KjInputColorExample {
32
+ readonly hex = signal('#b8f500');
33
+ }
@@ -0,0 +1,22 @@
1
+ import { Component, ChangeDetectionStrategy } from '@angular/core';
2
+ import { KjInputComponent } from '../input';
3
+
4
+ /**
5
+ * Default usage example for KjInputComponent.
6
+ * Rendered live in the docs and as code in the example panel.
7
+ */
8
+ @Component({
9
+ selector: 'kj-input-example',
10
+ standalone: true,
11
+ imports: [KjInputComponent],
12
+ styles: [
13
+ `
14
+ :host {
15
+ display: block;
16
+ }
17
+ `,
18
+ ],
19
+ changeDetection: ChangeDetectionStrategy.Eager,
20
+ template: `<kj-input type="text" placeholder="Type something…"></kj-input>`,
21
+ })
22
+ export class KjInputExample {}
@@ -0,0 +1 @@
1
+ export * from './input';
@@ -0,0 +1,70 @@
1
+ /* ─────────────────────────────────────────────────────────────
2
+ .kj-input — component-layer tokens + structural CSS
3
+ Same pattern as button.css: tokens default to shared layer,
4
+ variants/states retarget tokens, structural CSS reads tokens only.
5
+ ──────────────────────────────────────────────────────────── */
6
+
7
+ @layer kj.component {
8
+ .kj-input {
9
+ --kj-input-bg: var(--kj-bg-field);
10
+ --kj-input-fg: var(--kj-fg-default);
11
+ --kj-input-border-color: var(--kj-border-default);
12
+ --kj-input-border-style: solid;
13
+ --kj-input-border-width: var(--kj-border);
14
+ --kj-input-radius: var(--kj-radius-field);
15
+ --kj-input-padding-x: var(--kj-space-md);
16
+ --kj-input-padding-y: var(--kj-space-sm);
17
+ --kj-input-font: var(--kj-font-sans);
18
+ --kj-input-font-size: var(--kj-text-sm);
19
+ --kj-input-placeholder-fg: var(--kj-fg-muted);
20
+ /* Match button md (36px) so inputs and buttons line up in form rows.
21
+ Don't set `align-self` — in column-flex parents (form-field stacks),
22
+ `center` horizontally shifts the host; explicit height alone is what
23
+ prevents row-flex parents from stretching the input vertically. */
24
+ --kj-input-height: 2.25rem;
25
+
26
+ display: inline-flex;
27
+ width: 100%;
28
+ height: var(--kj-input-height);
29
+ background: var(--kj-input-bg);
30
+ color: var(--kj-input-fg);
31
+ border: var(--kj-input-border-width) var(--kj-input-border-style) var(--kj-input-border-color);
32
+ border-radius: var(--kj-input-radius);
33
+ padding: var(--kj-input-padding-y) var(--kj-input-padding-x);
34
+ font: var(--kj-input-font-size) / 1.4 var(--kj-input-font);
35
+ transition: var(--kj-transition);
36
+ }
37
+ /* Per-size heights mirror the button scale. */
38
+ .kj-input[data-size="xs"] { --kj-input-height: 1.75rem; --kj-input-font-size: 0.75rem; --kj-input-padding-x: var(--kj-space-sm); --kj-input-padding-y: 0; }
39
+ .kj-input[data-size="sm"] { --kj-input-height: 2rem; --kj-input-font-size: 0.8125rem; }
40
+ .kj-input[data-size="lg"] { --kj-input-height: 2.75rem; --kj-input-font-size: 1rem; }
41
+
42
+ /* Variant: sunken — inputs sit on `--kj-bg-body` so they read distinctly
43
+ against a card / surface parent. Used on the landing showcase where
44
+ cards already use `--kj-bg-surface`; mirrors the design's pattern of
45
+ "input on page bg, card around it on surface". */
46
+ .kj-input[data-variant="sunken"] {
47
+ --kj-input-bg: var(--kj-bg-body);
48
+ }
49
+ .kj-input::placeholder { color: var(--kj-input-placeholder-fg); }
50
+
51
+ .kj-input:focus-visible {
52
+ outline: 2px solid var(--kj-bg-primary);
53
+ outline-offset: 2px;
54
+ --kj-input-border-color: var(--kj-border-focus, var(--kj-bg-primary));
55
+ }
56
+ .kj-input[aria-invalid="true"] {
57
+ --kj-input-border-color: var(--kj-border-danger, var(--kj-fg-danger));
58
+ }
59
+ .kj-input[aria-disabled="true"], .kj-input:disabled {
60
+ opacity: 0.55;
61
+ cursor: not-allowed;
62
+ }
63
+
64
+ .kj-input[type="color"] {
65
+ inline-size: 44px;
66
+ block-size: 32px;
67
+ padding: 2px;
68
+ cursor: pointer;
69
+ }
70
+ }
@@ -0,0 +1,79 @@
1
+ import { ChangeDetectionStrategy, Component, signal } from '@angular/core';
2
+ import { FormsModule } from '@angular/forms';
3
+ import { KjInputComponent, type KjInputType, type KjInputVariant } from './input';
4
+ import type { PlaygroundFile } from '@kouji-ui/components/playground-types';
5
+
6
+ /**
7
+ * Playground state — module-scope signals. Type, variant, value/placeholder,
8
+ * disabled, and invalid cover every public input the wrapper surfaces.
9
+ */
10
+ const type = signal<KjInputType>('text');
11
+ const variant = signal<KjInputVariant>('default');
12
+ const value = signal('');
13
+ const placeholder = signal('you@example.com');
14
+ const disabled = signal(false);
15
+ const invalid = signal(false);
16
+
17
+ @Component({
18
+ selector: 'kj-input-playground',
19
+ standalone: true,
20
+ imports: [KjInputComponent, FormsModule],
21
+ template: `
22
+ <kj-input
23
+ [type]="type()"
24
+ [variant]="variant()"
25
+ [placeholder]="placeholder()"
26
+ [disabled]="disabled()"
27
+ [invalid]="invalid()"
28
+ [(ngModel)]="value"
29
+ />
30
+ `,
31
+ styles: [`:host { display: block; max-width: 360px; }`],
32
+ changeDetection: ChangeDetectionStrategy.OnPush,
33
+ })
34
+ export class KjInputPlaygroundDemo {
35
+ protected readonly type = type;
36
+ protected readonly variant = variant;
37
+ protected readonly value = value;
38
+ protected readonly placeholder = placeholder;
39
+ protected readonly disabled = disabled;
40
+ protected readonly invalid = invalid;
41
+ }
42
+
43
+ export const PLAYGROUND: PlaygroundFile = {
44
+ component: KjInputPlaygroundDemo,
45
+ state: {
46
+ type: type as unknown as ReturnType<typeof signal>,
47
+ variant: variant as unknown as ReturnType<typeof signal>,
48
+ value: value as unknown as ReturnType<typeof signal>,
49
+ placeholder: placeholder as unknown as ReturnType<typeof signal>,
50
+ disabled: disabled as unknown as ReturnType<typeof signal>,
51
+ invalid: invalid as unknown as ReturnType<typeof signal>,
52
+ },
53
+ controls: [
54
+ {
55
+ kind: 'chips',
56
+ name: 'type',
57
+ label: 'type',
58
+ options: ['text', 'email', 'password', 'number', 'search', 'tel', 'url', 'color'],
59
+ },
60
+ { kind: 'chips', name: 'variant', label: 'variant', options: ['default', 'sunken'] },
61
+ { kind: 'text', name: 'placeholder', label: 'placeholder' },
62
+ { kind: 'toggle', name: 'disabled', label: 'disabled' },
63
+ { kind: 'toggle', name: 'invalid', label: 'invalid' },
64
+ ],
65
+ snippet: (values) => {
66
+ const s = values as {
67
+ type: string;
68
+ variant: string;
69
+ placeholder: string;
70
+ disabled: boolean;
71
+ invalid: boolean;
72
+ };
73
+ const attrs: string[] = [`type="${s.type}"`, `variant="${s.variant}"`];
74
+ if (s.placeholder) attrs.push(`placeholder="${s.placeholder}"`);
75
+ if (s.disabled) attrs.push('[disabled]="true"');
76
+ if (s.invalid) attrs.push('[invalid]="true"');
77
+ return `<kj-input\n ${attrs.join('\n ')}\n/>`;
78
+ },
79
+ };
@@ -0,0 +1,98 @@
1
+ import { Component, ChangeDetectionStrategy } from '@angular/core';
2
+ import { TestBed } from '@angular/core/testing';
3
+ import { describe, expect, test, beforeEach } from 'vitest';
4
+ import { KjInputComponent } from './input';
5
+
6
+ @Component({
7
+ standalone: true,
8
+ imports: [KjInputComponent],
9
+ changeDetection: ChangeDetectionStrategy.Eager,
10
+ template: `<kj-input
11
+ [type]="type"
12
+ [value]="value"
13
+ [placeholder]="placeholder"
14
+ [invalid]="invalid"
15
+ [disabled]="disabled"
16
+ />`,
17
+ })
18
+ class HostComponent {
19
+ type: 'text' | 'email' | 'password' | 'number' | 'search' | 'tel' | 'url' | 'color' = 'text';
20
+ value = '';
21
+ placeholder = '';
22
+ invalid = false;
23
+ disabled = false;
24
+ }
25
+
26
+ describe('KjInputComponent', () => {
27
+ beforeEach(() => {
28
+ TestBed.configureTestingModule({ imports: [HostComponent] });
29
+ });
30
+
31
+ test('renders an inner <input> with the .kj-input class', () => {
32
+ const fixture = TestBed.createComponent(HostComponent);
33
+ fixture.detectChanges();
34
+ expect(fixture.nativeElement.querySelector('kj-input input.kj-input')).not.toBeNull();
35
+ });
36
+
37
+ test('forwards type to the inner element', () => {
38
+ const fixture = TestBed.createComponent(HostComponent);
39
+ fixture.componentInstance.type = 'email';
40
+ fixture.detectChanges();
41
+ expect(fixture.nativeElement.querySelector('kj-input input').getAttribute('type')).toBe(
42
+ 'email',
43
+ );
44
+ });
45
+
46
+ test('renders <input type="color"> when type=color', () => {
47
+ const fixture = TestBed.createComponent(HostComponent);
48
+ fixture.componentInstance.type = 'color';
49
+ fixture.detectChanges();
50
+ expect(fixture.nativeElement.querySelector('kj-input input').getAttribute('type')).toBe(
51
+ 'color',
52
+ );
53
+ });
54
+
55
+ test('mirrors type to data-type attr on host', () => {
56
+ const fixture = TestBed.createComponent(HostComponent);
57
+ fixture.componentInstance.type = 'color';
58
+ fixture.detectChanges();
59
+ expect(fixture.nativeElement.querySelector('kj-input').getAttribute('data-type')).toBe('color');
60
+ });
61
+
62
+ test('forwards value to the inner element (no form control wired)', () => {
63
+ // Use type=text — jsdom's <input type="color"> .value reverts to '#000000'.
64
+ // The binding mechanism is identical for any type.
65
+ const fixture = TestBed.createComponent(HostComponent);
66
+ fixture.componentInstance.value = 'hello';
67
+ fixture.detectChanges();
68
+ expect(fixture.nativeElement.querySelector('kj-input input').value).toBe('hello');
69
+ });
70
+
71
+ test('forwards placeholder', () => {
72
+ const fixture = TestBed.createComponent(HostComponent);
73
+ fixture.componentInstance.placeholder = 'you@example.com';
74
+ fixture.detectChanges();
75
+ expect(fixture.nativeElement.querySelector('kj-input input').getAttribute('placeholder')).toBe(
76
+ 'you@example.com',
77
+ );
78
+ });
79
+
80
+ test('forwards invalid → aria-invalid (after blur)', () => {
81
+ const fixture = TestBed.createComponent(HostComponent);
82
+ fixture.componentInstance.invalid = true;
83
+ fixture.detectChanges();
84
+ const input = fixture.nativeElement.querySelector('kj-input input');
85
+ input.dispatchEvent(new Event('blur'));
86
+ fixture.detectChanges();
87
+ expect(input.getAttribute('aria-invalid')).toBe('true');
88
+ });
89
+
90
+ test('forwards disabled → aria-disabled', () => {
91
+ const fixture = TestBed.createComponent(HostComponent);
92
+ fixture.componentInstance.disabled = true;
93
+ fixture.detectChanges();
94
+ expect(
95
+ fixture.nativeElement.querySelector('kj-input input').getAttribute('aria-disabled'),
96
+ ).toBe('true');
97
+ });
98
+ });
@@ -0,0 +1,158 @@
1
+ import {
2
+ ChangeDetectionStrategy,
3
+ Component,
4
+ ElementRef,
5
+ ViewChild,
6
+ ViewEncapsulation,
7
+ forwardRef,
8
+ input,
9
+ viewChild,
10
+ } from '@angular/core';
11
+ import { NG_VALUE_ACCESSOR, type ControlValueAccessor } from '@angular/forms';
12
+ import { KjInput } from '@kouji-ui/core';
13
+
14
+ export type KjInputType = 'text' | 'email' | 'password' | 'number'
15
+ | 'search' | 'tel' | 'url' | 'color';
16
+
17
+ /** Visual variants — `default` uses the field surface; `sunken` drops to
18
+ * body bg so the input pops against a card/surface parent. */
19
+ export type KjInputVariant = 'default' | 'sunken';
20
+
21
+ /** Size tier — `xs` (28px) for filter rows / inline editors, `sm` (32px)
22
+ * for dense forms, `md` (36px, default) for standard rows, `lg` (44px)
23
+ * for touch-first primary inputs. */
24
+ export type KjInputSize = 'xs' | 'sm' | 'md' | 'lg';
25
+
26
+ /**
27
+ * Styled wrapper around the headless KjInput directive.
28
+ *
29
+ * Supports `[(ngModel)]` and `[formControl]` bindings.
30
+ *
31
+ * @example
32
+ * ```html
33
+ * <kj-input type="email" placeholder="you@example.com" [(ngModel)]="email" />
34
+ * ```
35
+ *
36
+ * @doc-keyboard
37
+ * Tab — Moves focus into and out of the input (native input semantics)
38
+ * Enter — Submits the parent <form> when present (native behavior)
39
+ *
40
+ * @doc-aria
41
+ * aria-invalid — set to "true" only after the control is touched AND [invalid] is true; avoids announcing errors before the user has interacted
42
+ * data-invalid — mirror of aria-invalid for CSS targeting
43
+ * data-type — reflects the `type` input ("text" | "email" | "password" | ...) for type-specific styling
44
+ * data-variant — reflects the visual `variant` input ("default" | "sunken")
45
+ * disabled — native attribute reflected when the bound form control's disabled state is true
46
+ *
47
+ * @doc-css-var
48
+ * --kj-input-bg — Background fill. Variant `sunken` retargets this to body bg.
49
+ * --kj-input-fg — Foreground (text + caret) color.
50
+ * --kj-input-border-color — Border color. Focus and invalid states retarget this.
51
+ * --kj-input-border-style — Border line style. Default solid.
52
+ * --kj-input-border-width — Border thickness. Inherits --kj-border.
53
+ * --kj-input-radius — Corner radius. Inherits --kj-radius-field.
54
+ * --kj-input-padding-x — Horizontal padding inside the input.
55
+ * --kj-input-padding-y — Vertical padding inside the input.
56
+ * --kj-input-font — Font family. Defaults to --kj-font-sans.
57
+ * --kj-input-font-size — Font size. Sizes (sm/md/lg) override.
58
+ * --kj-input-placeholder-fg — Placeholder text color. Muted by default.
59
+ * --kj-input-height — Explicit height. Sizes override; matches button md by default.
60
+ *
61
+ * @doc-touch
62
+ * Default height is 36px (md). Use `data-size="lg"` (2.75rem / 44px) when the input is the primary touch target in a form. The `type="color"` swatch renders at 44×32px — pair it with a textual label for the accessible name.
63
+ *
64
+ * @doc-a11y
65
+ * `<kj-input>` is a thin wrapper around the headless `kjInput` directive that
66
+ * composes `KjFormControl` (CVA), `KjDisabled`, and `KjFocusRing`. Always
67
+ * associate a `<label>` via `for=`/`id=` or wrap the input in the label — the
68
+ * component does not generate its own accessible name. Pair with a sibling
69
+ * error node referenced by `aria-describedby` to surface validation messages
70
+ * to screen readers. Focus visibility comes from `:focus-visible` only (2px
71
+ * primary outline), never on mouse click.
72
+ *
73
+ * @doc-related field,password-input,textarea,input-mask
74
+ *
75
+ * @doc-example Default
76
+ * Plain text input — anchors the chrome and the (ngModel) two-way pattern.
77
+ * @doc-file input.example.ts
78
+ * @doc-example Usage
79
+ * Common input shapes — types, invalid state, disabled, and a (ngModel) bind.
80
+ * @doc-file input.usage.example.ts
81
+ * @doc-example Color
82
+ * `type="color"` renders the native swatch wired through the same wrapper.
83
+ * @doc-file input.color.example.ts
84
+ *
85
+ * @doc
86
+ * @doc-category Library/Data input
87
+ * @doc-name input
88
+ * @doc-description Themed text input with type variants, invalid and disabled state, and Angular forms support.
89
+ * @doc-is-main
90
+ */
91
+ @Component({
92
+ selector: 'kj-input',
93
+ standalone: true,
94
+ imports: [KjInput],
95
+ providers: [
96
+ {
97
+ provide: NG_VALUE_ACCESSOR,
98
+ useExisting: forwardRef(() => KjInputComponent),
99
+ multi: true,
100
+ },
101
+ ],
102
+ template: `
103
+ <input
104
+ #nativeInput
105
+ kjInput
106
+ class="kj-input"
107
+ [type]="type()"
108
+ [value]="value()"
109
+ [placeholder]="placeholder()"
110
+ [attr.data-variant]="variant()"
111
+ [attr.data-size]="kjSize() === 'md' ? null : kjSize()"
112
+ [kjInvalid]="invalid()"
113
+ [kjDisabled]="disabled()"
114
+ />
115
+ `,
116
+ styleUrl: './input.css',
117
+ encapsulation: ViewEncapsulation.None,
118
+ host: {
119
+ 'style': 'display: contents;',
120
+ '[attr.data-type]': 'type()',
121
+ },
122
+ changeDetection: ChangeDetectionStrategy.OnPush,
123
+ })
124
+ export class KjInputComponent implements ControlValueAccessor {
125
+ readonly type = input<KjInputType>('text');
126
+ readonly variant = input<KjInputVariant>('default');
127
+ readonly kjSize = input<KjInputSize>('md');
128
+ readonly value = input<string>('');
129
+ readonly placeholder = input<string>('');
130
+ readonly invalid = input(false);
131
+ readonly disabled = input(false);
132
+
133
+ @ViewChild(KjInput, { static: true })
134
+ protected innerInput?: KjInput;
135
+
136
+ /** Native `<input>` element, queried via template-ref. Used by callers
137
+ * (cell editors, focus-trapping consumers) that need to move keyboard
138
+ * focus into the input without reaching into the DOM. */
139
+ readonly nativeInput = viewChild<ElementRef<HTMLInputElement>>('nativeInput');
140
+
141
+ /** Focus the underlying `<input>`. No-op until the view renders. */
142
+ focus(): void {
143
+ this.nativeInput()?.nativeElement.focus();
144
+ }
145
+
146
+ writeValue(val: unknown): void {
147
+ this.innerInput?.formCtrl.writeValue(val);
148
+ }
149
+ registerOnChange(fn: (value: unknown) => void): void {
150
+ this.innerInput?.formCtrl.registerOnChange(fn);
151
+ }
152
+ registerOnTouched(fn: () => void): void {
153
+ this.innerInput?.formCtrl.registerOnTouched(fn);
154
+ }
155
+ setDisabledState(isDisabled: boolean): void {
156
+ this.innerInput?.formCtrl.setDisabledState(isDisabled);
157
+ }
158
+ }
@@ -0,0 +1,40 @@
1
+ import { ChangeDetectionStrategy, Component, signal } from '@angular/core';
2
+ import { FormsModule } from '@angular/forms';
3
+ import { KjInputComponent } from './input';
4
+
5
+ /**
6
+ * Common input shapes — text/email/password types, invalid state, disabled,
7
+ * and (ngModel) two-way binding. Copy-paste starting point for forms.
8
+ */
9
+ @Component({
10
+ selector: 'kj-input-usage-example',
11
+ standalone: true,
12
+ changeDetection: ChangeDetectionStrategy.OnPush,
13
+ imports: [KjInputComponent, FormsModule],
14
+ styles: [`
15
+ :host { display: flex; flex-direction: column; gap: var(--kj-space-md); max-width: 360px; }
16
+ label { font: 500 var(--kj-text-sm)/1.4 var(--kj-font-sans); color: var(--kj-fg-default); }
17
+ .row { display: flex; flex-direction: column; gap: var(--kj-space-xs); }
18
+ code { font: var(--kj-text-xs)/1 var(--kj-font-mono); color: var(--kj-fg-muted); }
19
+ `],
20
+ template: `
21
+ <div class="row">
22
+ <label for="usage-name">Name</label>
23
+ <kj-input id="usage-name" type="text" [(ngModel)]="name" placeholder="Ada Lovelace" />
24
+ <code>value: {{ name() || '—' }}</code>
25
+ </div>
26
+
27
+ <div class="row">
28
+ <label for="usage-email">Email</label>
29
+ <kj-input id="usage-email" type="email" [invalid]="true" value="not-an-email" />
30
+ </div>
31
+
32
+ <div class="row">
33
+ <label for="usage-pwd">Password</label>
34
+ <kj-input id="usage-pwd" type="password" [disabled]="true" value="••••••••" />
35
+ </div>
36
+ `,
37
+ })
38
+ export class KjInputUsageExample {
39
+ readonly name = signal('');
40
+ }
@@ -0,0 +1,7 @@
1
+ // AUTO-GENERATED by scripts/migrate-examples.mjs
2
+ // One barrel per component folder — used by the docs app as a lazy chunk.
3
+ export { KjInputGroupButtonExample } from './input-group.button.example';
4
+ export { KjInputGroupExample } from './input-group.example';
5
+ export { KjInputGroupIconExample } from './input-group.icon.example';
6
+ export { KjInputGroupUrlExample } from './input-group.url.example';
7
+ export { KjInputGroupVariantsExample } from './input-group.variants.example';