@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,65 @@
1
+ @layer kj.component {
2
+ .kj-select { position: relative; display: inline-block; min-width: 12rem; }
3
+
4
+ .kj-select-trigger {
5
+ /* Explicit height contract (matches input.css / button.css) so the
6
+ select trigger lines up with sibling inputs in a form row. */
7
+ --kj-select-trigger-height: 2.25rem;
8
+ width: 100%;
9
+ display: inline-flex;
10
+ align-items: center;
11
+ justify-content: space-between;
12
+ gap: var(--kj-space-sm);
13
+ background: var(--kj-bg-field);
14
+ color: var(--kj-fg-default);
15
+ border: var(--kj-border) solid var(--kj-border-default);
16
+ border-radius: var(--kj-radius-field);
17
+ padding: 0 var(--kj-space-md);
18
+ height: var(--kj-select-trigger-height);
19
+ font: 0.875rem var(--kj-font-sans);
20
+ cursor: pointer;
21
+ }
22
+ .kj-select[data-size="xs"] .kj-select-trigger { --kj-select-trigger-height: 1.75rem; font-size: 0.75rem; padding-inline: var(--kj-space-sm); gap: var(--kj-space-xs); }
23
+ .kj-select[data-size="sm"] .kj-select-trigger { --kj-select-trigger-height: 2rem; font-size: 0.8125rem; }
24
+ .kj-select[data-size="lg"] .kj-select-trigger { --kj-select-trigger-height: 2.75rem; font-size: 1rem; }
25
+ .kj-select[data-size="xs"] { min-width: 0; }
26
+ .kj-select-trigger:focus-visible { outline: 2px solid var(--kj-fg-primary); outline-offset: 2px; }
27
+ .kj-select[data-disabled] .kj-select-trigger { opacity: 0.45; cursor: not-allowed; pointer-events: none; }
28
+
29
+ .kj-select-content {
30
+ box-sizing: border-box;
31
+ min-width: 12rem;
32
+ width: max-content;
33
+ background: var(--kj-bg-elevated);
34
+ border: var(--kj-border) solid var(--kj-border-default);
35
+ border-radius: var(--kj-radius-field);
36
+ box-shadow: var(--kj-shadow-md, 0 8px 24px rgb(0 0 0 / 0.12));
37
+ padding: 4px;
38
+ max-height: 16rem;
39
+ overflow: auto;
40
+ z-index: 100;
41
+ }
42
+ .kj-select-content[hidden] { display: none; }
43
+
44
+ .kj-option {
45
+ padding: var(--kj-space-sm) var(--kj-space-md);
46
+ border-radius: var(--kj-radius-selector);
47
+ cursor: pointer;
48
+ color: var(--kj-fg-default);
49
+ font: 0.875rem var(--kj-font-sans);
50
+ }
51
+ /* Hover uses bg-field (sunken slot), not bg-surface. In themes where
52
+ elevated == surface (light/corporate, both white) a bg-surface hover would
53
+ be invisible on the bg-elevated panel. */
54
+ .kj-option:hover { background: var(--kj-bg-field); }
55
+ /* Selected option — tinted primary mirrors tree-select / cascade-select so
56
+ the listbox family looks consistent across themes. */
57
+ .kj-option[aria-selected="true"] {
58
+ background: color-mix(in oklab, var(--kj-bg-primary) 12%, transparent);
59
+ color: var(--kj-fg-primary);
60
+ font-weight: 600;
61
+ }
62
+ .kj-option[aria-selected="true"]:hover {
63
+ background: color-mix(in oklab, var(--kj-bg-primary) 18%, transparent);
64
+ }
65
+ }
@@ -0,0 +1,81 @@
1
+ import { ChangeDetectionStrategy, Component, computed, signal } from '@angular/core';
2
+ import { KjSelectComponent, KjOptionComponent } from './select';
3
+ import type { PlaygroundFile } from '@kouji-ui/components/playground-types';
4
+
5
+ const selected = signal<string | undefined>(undefined);
6
+ const placeholder = signal<string>('Choose a fruit');
7
+ const optionCount = signal<2 | 3 | 4 | 5 | 6>(4);
8
+ const disabled = signal(false);
9
+ const multiple = signal(false);
10
+
11
+ const ITEMS: ReadonlyArray<{ value: string; label: string }> = [
12
+ { value: 'apple', label: 'Apple' },
13
+ { value: 'banana', label: 'Banana' },
14
+ { value: 'cherry', label: 'Cherry' },
15
+ { value: 'date', label: 'Date' },
16
+ { value: 'elderberry', label: 'Elderberry' },
17
+ { value: 'fig', label: 'Fig' },
18
+ ];
19
+
20
+ @Component({
21
+ selector: 'kj-select-playground',
22
+ standalone: true,
23
+ imports: [KjSelectComponent, KjOptionComponent],
24
+ template: `
25
+ <kj-select
26
+ [(value)]="selected"
27
+ [placeholder]="placeholder()"
28
+ [disabled]="disabled()"
29
+ [multiple]="multiple()"
30
+ >
31
+ @for (item of visibleItems(); track item.value) {
32
+ <kj-option [value]="item.value">{{ item.label }}</kj-option>
33
+ }
34
+ </kj-select>
35
+ `,
36
+ changeDetection: ChangeDetectionStrategy.OnPush,
37
+ })
38
+ export class KjSelectPlaygroundDemo {
39
+ protected readonly selected = selected;
40
+ protected readonly placeholder = placeholder;
41
+ protected readonly optionCount = optionCount;
42
+ protected readonly disabled = disabled;
43
+ protected readonly multiple = multiple;
44
+
45
+ protected readonly visibleItems = computed(() => ITEMS.slice(0, optionCount()));
46
+ }
47
+
48
+ export const PLAYGROUND: PlaygroundFile = {
49
+ component: KjSelectPlaygroundDemo,
50
+ state: {
51
+ selected: selected as unknown as ReturnType<typeof signal>,
52
+ placeholder: placeholder as unknown as ReturnType<typeof signal>,
53
+ optionCount: optionCount as unknown as ReturnType<typeof signal>,
54
+ disabled: disabled as unknown as ReturnType<typeof signal>,
55
+ multiple: multiple as unknown as ReturnType<typeof signal>,
56
+ },
57
+ controls: [
58
+ { kind: 'text', name: 'placeholder', label: 'placeholder' },
59
+ { kind: 'chips', name: 'optionCount', label: 'options', options: [2, 3, 4, 5, 6] },
60
+ { kind: 'toggle', name: 'multiple', label: 'multiple' },
61
+ { kind: 'toggle', name: 'disabled', label: 'disabled' },
62
+ ],
63
+ snippet: (values) => {
64
+ const s = values as {
65
+ placeholder: string;
66
+ optionCount: number;
67
+ disabled: boolean;
68
+ multiple: boolean;
69
+ };
70
+ const attrs: string[] = [
71
+ `[(value)]="selected"`,
72
+ `placeholder="${s.placeholder}"`,
73
+ ];
74
+ if (s.multiple) attrs.push('[multiple]="true"');
75
+ if (s.disabled) attrs.push('[disabled]="true"');
76
+ const options = ITEMS.slice(0, s.optionCount)
77
+ .map((item) => ` <kj-option [value]="'${item.value}'">${item.label}</kj-option>`)
78
+ .join('\n');
79
+ return `<kj-select\n ${attrs.join('\n ')}\n>\n${options}\n</kj-select>`;
80
+ },
81
+ };
@@ -0,0 +1,176 @@
1
+ import { Component, ChangeDetectionStrategy, ViewEncapsulation, contentChildren, forwardRef, input, inject, computed } from '@angular/core';
2
+ import { KjSelect, KjSelectTrigger, KjSelectContent, KjOption } from '@kouji-ui/core';
3
+
4
+ /**
5
+ * Select root. Two-way bind via `[(value)]`.
6
+ *
7
+ * Users only need `<kj-select>` and `<kj-option>`. The trigger button and
8
+ * listbox panel are rendered internally so the consumer markup stays minimal,
9
+ * with theme tokens, placeholder text, and keyboard navigation already wired.
10
+ *
11
+ * @doc-keyboard
12
+ * Enter|Space — Opens the listbox from the trigger; activates the focused option when open
13
+ * ArrowDown — Moves focus to the next option (clamps at the end)
14
+ * ArrowUp — Moves focus to the previous option (clamps at the start)
15
+ * Home — Moves focus to the first option
16
+ * End — Moves focus to the last option
17
+ * A-Z (type-ahead) — Focuses the first option whose visible text starts with the typed character
18
+ * Escape — Closes the listbox and returns focus to the trigger
19
+ * Tab — Closes the listbox and moves focus to the next focusable element
20
+ *
21
+ * @doc-aria
22
+ * aria-haspopup — set to "listbox" on the trigger button
23
+ * aria-expanded — set on the trigger; reflects the open/closed state of the listbox
24
+ * aria-controls — links the trigger to the panel id
25
+ * aria-activedescendant — set on the panel; points to the id of the currently focused option
26
+ * aria-multiselectable — set on the panel to "true" when [multiple] is true
27
+ * role="listbox" — on the content panel (provided via KJ_OVERLAY_PANEL_ROLE)
28
+ * role="option" — on each kj-option child
29
+ * aria-selected — set on each option to "true" or "false"
30
+ * aria-disabled — set on options when [kjDisabled] is true
31
+ * data-disabled / data-multiple — mirrors of the disabled / multiple state for CSS
32
+ *
33
+ * @doc-css-var
34
+ * --kj-select-trigger-height — Height of the trigger button. Sizes (sm/md/lg) override.
35
+ *
36
+ * @doc-touch
37
+ * Default trigger height is 36px. Apply `data-size="lg"` on `<kj-select>` to bump the trigger to 2.75rem (44px) and meet WCAG 2.5.5 for touch-first layouts. Options have padding-only sizing and rely on their text affordance.
38
+ *
39
+ * @doc-a11y
40
+ * The listbox follows the WAI-ARIA combobox/listbox pattern. The panel is
41
+ * portalled to `document.body` so it escapes clipping ancestors while still
42
+ * being announced as the trigger's popup via `aria-controls`. Selection
43
+ * tracking uses `Object.is` so primitive and reference values both work.
44
+ * In single-select mode the panel closes on activation; in multi mode
45
+ * ([multiple]="true") the panel stays open and `aria-multiselectable="true"`
46
+ * is exposed for assistive tech.
47
+ *
48
+ * @doc-related combobox,cascade-select,radio-group
49
+ *
50
+ * @doc-example Default
51
+ * A single-value fruit picker — the bare-minimum recipe.
52
+ * @doc-file select.default.example.ts
53
+ * @doc-example Usage
54
+ * A walkthrough of the most common usages — placeholder, pre-selected,
55
+ * and disabled. Use this as the copy-paste starting point.
56
+ * @doc-file select.usage.example.ts
57
+ * @doc-example With placeholder
58
+ * `placeholder="…"` is shown until a value is bound.
59
+ * @doc-file select.placeholder.example.ts
60
+ * @doc-example Disabled
61
+ * `[disabled]="true"` removes the trigger from the tab order.
62
+ * @doc-file select.disabled.example.ts
63
+ * @doc-example Grouped options
64
+ * Cluster options under headings for richer listbox menus.
65
+ * @doc-file select.grouped.example.ts
66
+ * @doc-category Library/Data input
67
+ * @doc
68
+ * @doc-name select
69
+ * @doc-description Themed dropdown select with a trigger button, listbox panel, and keyboard navigation.
70
+ * @doc-is-main
71
+ */
72
+ @Component({
73
+ selector: 'kj-select',
74
+ standalone: true,
75
+ hostDirectives: [
76
+ { directive: KjSelect, inputs: ['kjSelectValue: value'], outputs: ['kjSelectValueChange: valueChange'] },
77
+ ],
78
+ imports: [KjSelectTrigger, KjSelectContent],
79
+ template: `
80
+ <button type="button" kjSelectTrigger #trig="kjSelectTrigger" class="kj-select-trigger" aria-haspopup="listbox" [disabled]="disabled() || null" [kjMultiple]="multiple()">
81
+ <span class="kj-select-trigger-label">{{ displayLabel() }}</span>
82
+ <span class="kj-select-trigger-caret" aria-hidden="true">▾</span>
83
+ </button>
84
+ <kj-select-content [kjFor]="trig" class="kj-select-content">
85
+ <ng-content />
86
+ </kj-select-content>
87
+ `,
88
+ styleUrl: './select.css',
89
+ encapsulation: ViewEncapsulation.None,
90
+ host: {
91
+ 'class': 'kj-select',
92
+ '[attr.data-disabled]': "disabled() ? '' : null",
93
+ '[attr.data-multiple]': "multiple() ? '' : null",
94
+ '[attr.data-size]': "kjSize() === 'md' ? null : kjSize()",
95
+ },
96
+ changeDetection: ChangeDetectionStrategy.OnPush,
97
+ })
98
+ export class KjSelectComponent {
99
+ readonly placeholder = input<string>('Select…');
100
+ readonly disabled = input(false);
101
+ readonly multiple = input(false);
102
+ readonly kjSize = input<'xs' | 'sm' | 'md' | 'lg'>('md');
103
+
104
+ private readonly select = inject(KjSelect);
105
+
106
+ /**
107
+ * Trigger element signal — sourced from the headless `KjSelect` root,
108
+ * which is set the moment the inner `KjSelectTrigger` directive
109
+ * constructs. No view-query lifecycle wait, so callers reading this
110
+ * inside an `effect()` see it resolve as soon as the select is mounted.
111
+ */
112
+ readonly triggerEl = this.select.triggerEl;
113
+
114
+ /** Focus the trigger button. Delegates to the headless root. */
115
+ focus(): void {
116
+ this.select.focus();
117
+ }
118
+
119
+ /** Direct projection-child query — every `<kj-option>` placed inside this
120
+ * `<kj-select>` registers here. `forwardRef` is required because
121
+ * `KjOptionComponent` is declared later in the same file. We resolve the
122
+ * trigger label by matching the active value against each option's
123
+ * `value` input, not by reading `KjListItem.label()` from the select's
124
+ * deeper content (which doesn't reliably descend into a projected
125
+ * component's view). */
126
+ private readonly options = contentChildren<KjOptionComponent>(
127
+ forwardRef(() => KjOptionComponent) as unknown as typeof KjOptionComponent,
128
+ );
129
+
130
+ /** Resolve a value to its matching option's label. Falls back to
131
+ * `String(v)` only when no option has registered for that value yet. */
132
+ private labelFor(v: unknown): string {
133
+ for (const opt of this.options()) {
134
+ if (Object.is(opt.value(), v)) {
135
+ const explicit = opt.kjLabel();
136
+ return explicit || String(v);
137
+ }
138
+ }
139
+ return String(v);
140
+ }
141
+
142
+ readonly displayLabel = computed(() => {
143
+ const v = this.select.value();
144
+ if (v === undefined || v === null || v === '') return this.placeholder();
145
+ if (Array.isArray(v)) {
146
+ return v.length === 0
147
+ ? this.placeholder()
148
+ : v.map((entry) => this.labelFor(entry)).join(', ');
149
+ }
150
+ return this.labelFor(v);
151
+ });
152
+ }
153
+
154
+ /**
155
+ * Single option row.
156
+ * @doc
157
+ * @doc-name select
158
+ */
159
+ @Component({
160
+ selector: 'kj-option',
161
+ standalone: true,
162
+ imports: [KjOption],
163
+ template: `<div kjOption [kjOptionValue]="value()" [kjOptionLabel]="kjLabel()" class="kj-option"><ng-content /></div>`,
164
+ encapsulation: ViewEncapsulation.None,
165
+ host: { style: 'display: contents;' },
166
+ changeDetection: ChangeDetectionStrategy.OnPush,
167
+ })
168
+ export class KjOptionComponent {
169
+ readonly value = input.required<unknown>();
170
+
171
+ /** Explicit label for the trigger's displayed text. The select wrapper
172
+ * reads this via its own `contentChildren(KjOptionComponent)` query for
173
+ * reliable label resolution that doesn't depend on KjListItem's
174
+ * textContent-after-content-init lifecycle. */
175
+ readonly kjLabel = input<string>('');
176
+ }
@@ -0,0 +1,64 @@
1
+ import { Component, signal, ChangeDetectionStrategy } from '@angular/core';
2
+ import { KjSelectComponent, KjOptionComponent } from './select';
3
+
4
+ /**
5
+ * A walkthrough of the most common select usages — a single-value picker
6
+ * with a placeholder, a pre-selected value, and a disabled control. Use this
7
+ * as the copy-paste starting point for forms.
8
+ */
9
+ @Component({
10
+ selector: 'kj-select-usage-example',
11
+ standalone: true,
12
+ imports: [KjSelectComponent, KjOptionComponent],
13
+ styles: [
14
+ `
15
+ :host {
16
+ display: flex;
17
+ flex-direction: column;
18
+ gap: var(--kj-space-lg);
19
+ max-width: 18rem;
20
+ }
21
+ label {
22
+ display: grid;
23
+ gap: var(--kj-space-xs);
24
+ font-size: 0.875rem;
25
+ color: var(--kj-fg-default);
26
+ }
27
+ `,
28
+ ],
29
+ changeDetection: ChangeDetectionStrategy.Eager,
30
+ template: `
31
+ <!-- eslint-disable-next-line @angular-eslint/template/label-has-associated-control -->
32
+ <label>
33
+ Fruit (placeholder)
34
+ <kj-select [(value)]="fruit" placeholder="Choose a fruit">
35
+ <kj-option [value]="'apple'">Apple</kj-option>
36
+ <kj-option [value]="'banana'">Banana</kj-option>
37
+ <kj-option [value]="'cherry'">Cherry</kj-option>
38
+ </kj-select>
39
+ </label>
40
+
41
+ <!-- eslint-disable-next-line @angular-eslint/template/label-has-associated-control -->
42
+ <label>
43
+ Country (pre-selected)
44
+ <kj-select [(value)]="country">
45
+ <kj-option [value]="'us'">United States</kj-option>
46
+ <kj-option [value]="'jp'">Japan</kj-option>
47
+ <kj-option [value]="'fr'">France</kj-option>
48
+ </kj-select>
49
+ </label>
50
+
51
+ <!-- eslint-disable-next-line @angular-eslint/template/label-has-associated-control -->
52
+ <label>
53
+ Locked
54
+ <kj-select [(value)]="locked" [disabled]="true" placeholder="Read-only">
55
+ <kj-option [value]="'a'">Option A</kj-option>
56
+ </kj-select>
57
+ </label>
58
+ `,
59
+ })
60
+ export class KjSelectUsageExample {
61
+ readonly fruit = signal<string | undefined>(undefined);
62
+ readonly country = signal<string>('jp');
63
+ readonly locked = signal<string | undefined>(undefined);
64
+ }
@@ -0,0 +1,6 @@
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 { KjSkeletonAnimationsExample } from './skeleton.animations.example';
4
+ export { KjSkeletonCardExample } from './skeleton.card.example';
5
+ export { KjSkeletonExample } from './skeleton.example';
6
+ export { KjSkeletonShapesExample } from './skeleton.shapes.example';
@@ -0,0 +1,52 @@
1
+ import { Component, ChangeDetectionStrategy } from '@angular/core';
2
+ import { KjSkeletonComponent } from '../skeleton';
3
+
4
+ /**
5
+ * Animation presets — `shimmer` (the default sweep), `pulse` (opacity
6
+ * oscillation), and `none` (static). The `none` value is the consumer-
7
+ * side `prefers-reduced-motion` escape hatch; theme CSS additionally
8
+ * suppresses every animation when the OS reports the preference.
9
+ */
10
+ @Component({
11
+ selector: 'kj-skeleton-animations-example',
12
+ standalone: true,
13
+ imports: [KjSkeletonComponent],
14
+ styles: [
15
+ `
16
+ :host {
17
+ display: flex;
18
+ flex-direction: column;
19
+ gap: var(--kj-space-lg);
20
+ }
21
+ .row {
22
+ display: flex;
23
+ align-items: center;
24
+ gap: var(--kj-space-md);
25
+ }
26
+ .label {
27
+ min-width: 5rem;
28
+ font-size: 0.75rem;
29
+ color: var(--kj-fg-default);
30
+ opacity: 0.7;
31
+ text-transform: uppercase;
32
+ letter-spacing: 0.04em;
33
+ }
34
+ `,
35
+ ],
36
+ changeDetection: ChangeDetectionStrategy.Eager,
37
+ template: `
38
+ <div class="row">
39
+ <span class="label">shimmer</span>
40
+ <kj-skeleton kjSkeletonAnimation="shimmer" kjWidth="18rem" kjHeight="1.25rem" />
41
+ </div>
42
+ <div class="row">
43
+ <span class="label">pulse</span>
44
+ <kj-skeleton kjSkeletonAnimation="pulse" kjWidth="18rem" kjHeight="1.25rem" />
45
+ </div>
46
+ <div class="row">
47
+ <span class="label">none</span>
48
+ <kj-skeleton kjSkeletonAnimation="none" kjWidth="18rem" kjHeight="1.25rem" />
49
+ </div>
50
+ `,
51
+ })
52
+ export class KjSkeletonAnimationsExample {}
@@ -0,0 +1,68 @@
1
+ import { Component, ChangeDetectionStrategy } from '@angular/core';
2
+ import { KjSkeletonComponent } from '../skeleton';
3
+
4
+ /**
5
+ * Canonical card-skeleton recipe — an avatar-shaped circle, a title line
6
+ * (60% width), and two body lines via the `text-block` shape, all inside
7
+ * a region that carries the loading semantics the skeleton itself
8
+ * intentionally does not.
9
+ *
10
+ * Note `aria-busy="true"` on the parent region: per `skeleton.md`, the
11
+ * skeleton element is `aria-hidden` and silent; the *region* announces
12
+ * the busy state to AT. A polite `role="status"` live region complements
13
+ * this in a real app via `KjLiveRegion.announce('Loading…')`; here we
14
+ * keep the demo declarative so the structure is self-evident.
15
+ */
16
+ @Component({
17
+ selector: 'kj-skeleton-card-example',
18
+ standalone: true,
19
+ imports: [KjSkeletonComponent],
20
+ styles: [
21
+ `
22
+ :host {
23
+ display: block;
24
+ }
25
+ .card {
26
+ display: flex;
27
+ flex-direction: column;
28
+ gap: var(--kj-space-md);
29
+ padding: var(--kj-space-lg);
30
+ border: 1px solid var(--kj-border-default);
31
+ border-radius: var(--kj-radius-box, 0.75rem);
32
+ max-width: 24rem;
33
+ }
34
+ .header {
35
+ display: flex;
36
+ align-items: center;
37
+ gap: var(--kj-space-md);
38
+ }
39
+ .title-stack {
40
+ display: flex;
41
+ flex-direction: column;
42
+ gap: var(--kj-space-xs, 0.25rem);
43
+ flex: 1 1 0;
44
+ }
45
+ .body {
46
+ display: flex;
47
+ flex-direction: column;
48
+ gap: var(--kj-space-sm);
49
+ }
50
+ `,
51
+ ],
52
+ changeDetection: ChangeDetectionStrategy.Eager,
53
+ template: `
54
+ <section class="card" aria-busy="true" aria-label="Loading card content">
55
+ <div class="header">
56
+ <kj-skeleton kjSkeletonShape="circle" kjWidth="2.5rem" kjHeight="2.5rem" />
57
+ <div class="title-stack">
58
+ <kj-skeleton kjSkeletonShape="text" kjWidth="60%" kjHeight="1rem" />
59
+ <kj-skeleton kjSkeletonShape="text" kjWidth="40%" kjHeight="0.75rem" />
60
+ </div>
61
+ </div>
62
+ <div class="body">
63
+ <kj-skeleton kjSkeletonShape="text-block" [kjLines]="3" />
64
+ </div>
65
+ </section>
66
+ `,
67
+ })
68
+ export class KjSkeletonCardExample {}
@@ -0,0 +1,24 @@
1
+ import { Component, ChangeDetectionStrategy } from '@angular/core';
2
+ import { KjSkeletonComponent } from '../skeleton';
3
+
4
+ /**
5
+ * Default usage example for `KjSkeletonComponent` — a single rectangle
6
+ * skeleton sized to stand in for a generic content block. Demonstrates
7
+ * the bare-minimum recipe: pick a width / height, drop the wrapper in,
8
+ * let the directive set `aria-hidden` and the shimmer paint.
9
+ */
10
+ @Component({
11
+ selector: 'kj-skeleton-example',
12
+ standalone: true,
13
+ imports: [KjSkeletonComponent],
14
+ styles: [
15
+ `
16
+ :host {
17
+ display: block;
18
+ }
19
+ `,
20
+ ],
21
+ changeDetection: ChangeDetectionStrategy.Eager,
22
+ template: `<kj-skeleton kjWidth="16rem" kjHeight="1.5rem" />`,
23
+ })
24
+ export class KjSkeletonExample {}
@@ -0,0 +1,55 @@
1
+ import { Component, ChangeDetectionStrategy } from '@angular/core';
2
+ import { KjSkeletonComponent } from '../skeleton';
3
+
4
+ /**
5
+ * Shape presets — `rectangle`, `circle`, `text`, `text-block` — laid out
6
+ * side-by-side so the `data-shape` reflection and theme-side chrome are
7
+ * visible against each other. The `text-block` wrapper expands into N
8
+ * stacked text-shaped lines (the last at 60% width).
9
+ */
10
+ @Component({
11
+ selector: 'kj-skeleton-shapes-example',
12
+ standalone: true,
13
+ imports: [KjSkeletonComponent],
14
+ styles: [
15
+ `
16
+ :host {
17
+ display: grid;
18
+ grid-template-columns: repeat(2, minmax(0, 1fr));
19
+ gap: var(--kj-space-xl);
20
+ }
21
+ .cell {
22
+ display: flex;
23
+ flex-direction: column;
24
+ gap: var(--kj-space-sm);
25
+ }
26
+ .label {
27
+ font-size: 0.75rem;
28
+ color: var(--kj-fg-default);
29
+ opacity: 0.7;
30
+ text-transform: uppercase;
31
+ letter-spacing: 0.04em;
32
+ }
33
+ `,
34
+ ],
35
+ changeDetection: ChangeDetectionStrategy.Eager,
36
+ template: `
37
+ <div class="cell">
38
+ <span class="label">rectangle</span>
39
+ <kj-skeleton kjSkeletonShape="rectangle" kjWidth="100%" kjHeight="3rem" />
40
+ </div>
41
+ <div class="cell">
42
+ <span class="label">circle</span>
43
+ <kj-skeleton kjSkeletonShape="circle" kjWidth="3rem" kjHeight="3rem" />
44
+ </div>
45
+ <div class="cell">
46
+ <span class="label">text</span>
47
+ <kj-skeleton kjSkeletonShape="text" kjWidth="14rem" />
48
+ </div>
49
+ <div class="cell">
50
+ <span class="label">text-block</span>
51
+ <kj-skeleton kjSkeletonShape="text-block" [kjLines]="3" />
52
+ </div>
53
+ `,
54
+ })
55
+ export class KjSkeletonShapesExample {}
@@ -0,0 +1 @@
1
+ export * from './skeleton';