@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,97 @@
1
+ import { ChangeDetectionStrategy, Component, signal } from '@angular/core';
2
+ import { KjDividerComponent } from './divider';
3
+ import type { PlaygroundFile } from '@kouji-ui/components/playground-types';
4
+
5
+ /**
6
+ * Playground state — module-scope signals. Knobs cover orientation, variant,
7
+ * size, structural posture, and an optional label projected into the slot.
8
+ */
9
+ const orientation = signal<'horizontal' | 'vertical'>('horizontal');
10
+ const variant = signal<'solid' | 'dashed' | 'dotted'>('solid');
11
+ const size = signal<'sm' | 'md' | 'lg'>('md');
12
+ const structural = signal(false);
13
+ const label = signal('');
14
+
15
+ @Component({
16
+ selector: 'kj-divider-playground',
17
+ standalone: true,
18
+ imports: [KjDividerComponent],
19
+ styles: [`
20
+ :host { display: block; padding: var(--kj-space-md) 0; }
21
+ .stack { display: flex; flex-direction: column; gap: var(--kj-space-md); min-height: 4rem; }
22
+ .row { display: flex; align-items: center; gap: var(--kj-space-md); height: 4rem; }
23
+ `],
24
+ template: `
25
+ @if (orientation() === 'horizontal') {
26
+ <div class="stack">
27
+ <span>Above</span>
28
+ <kj-divider
29
+ [kjOrientation]="orientation()"
30
+ [kjVariant]="variant()"
31
+ [kjSize]="size()"
32
+ [kjStructural]="structural()"
33
+ >{{ label() }}</kj-divider>
34
+ <span>Below</span>
35
+ </div>
36
+ } @else {
37
+ <div class="row">
38
+ <span>Left</span>
39
+ <kj-divider
40
+ [kjOrientation]="orientation()"
41
+ [kjVariant]="variant()"
42
+ [kjSize]="size()"
43
+ [kjStructural]="structural()"
44
+ />
45
+ <span>Right</span>
46
+ </div>
47
+ }
48
+ `,
49
+ changeDetection: ChangeDetectionStrategy.OnPush,
50
+ })
51
+ export class KjDividerPlaygroundDemo {
52
+ protected readonly orientation = orientation;
53
+ protected readonly variant = variant;
54
+ protected readonly size = size;
55
+ protected readonly structural = structural;
56
+ protected readonly label = label;
57
+ }
58
+
59
+ export const PLAYGROUND: PlaygroundFile = {
60
+ component: KjDividerPlaygroundDemo,
61
+ state: {
62
+ orientation: orientation as unknown as ReturnType<typeof signal>,
63
+ variant: variant as unknown as ReturnType<typeof signal>,
64
+ size: size as unknown as ReturnType<typeof signal>,
65
+ structural: structural as unknown as ReturnType<typeof signal>,
66
+ label: label as unknown as ReturnType<typeof signal>,
67
+ },
68
+ controls: [
69
+ {
70
+ kind: 'chips',
71
+ name: 'orientation',
72
+ label: 'orientation',
73
+ options: ['horizontal', 'vertical'],
74
+ },
75
+ { kind: 'chips', name: 'variant', label: 'variant', options: ['solid', 'dashed', 'dotted'] },
76
+ { kind: 'chips', name: 'size', label: 'size', options: ['sm', 'md', 'lg'] },
77
+ { kind: 'text', name: 'label', label: 'label' },
78
+ { kind: 'toggle', name: 'structural', label: 'structural' },
79
+ ],
80
+ snippet: (values) => {
81
+ const s = values as {
82
+ orientation: string;
83
+ variant: string;
84
+ size: string;
85
+ structural: boolean;
86
+ label: string;
87
+ };
88
+ const attrs: string[] = [
89
+ `kjOrientation="${s.orientation}"`,
90
+ `kjVariant="${s.variant}"`,
91
+ `kjSize="${s.size}"`,
92
+ ];
93
+ if (s.structural) attrs.push('[kjStructural]="true"');
94
+ if (s.label) return `<kj-divider\n ${attrs.join('\n ')}\n>${s.label}</kj-divider>`;
95
+ return `<kj-divider\n ${attrs.join('\n ')}\n/>`;
96
+ },
97
+ };
@@ -0,0 +1,207 @@
1
+ import { Component, ChangeDetectionStrategy } from '@angular/core';
2
+ import { TestBed } from '@angular/core/testing';
3
+ import { describe, expect, test, beforeEach } from 'vitest';
4
+ import { KjDividerComponent } from './divider';
5
+
6
+ /**
7
+ * Flush microtasks + the rAF that backs afterNextRender so the wrapper's
8
+ * one-shot host-content probe (and the underlying KjDivider directive's
9
+ * isHr / withContent signals) settles before assertions.
10
+ */
11
+ async function flushAfterNextRender(): Promise<void> {
12
+ await new Promise<void>((resolve) => setTimeout(resolve, 0));
13
+ await Promise.resolve();
14
+ await Promise.resolve();
15
+ }
16
+
17
+ @Component({
18
+ standalone: true,
19
+ imports: [KjDividerComponent],
20
+ changeDetection: ChangeDetectionStrategy.Eager,
21
+ template: `<kj-divider />`,
22
+ })
23
+ class RuleOnlyHost {}
24
+
25
+ @Component({
26
+ standalone: true,
27
+ imports: [KjDividerComponent],
28
+ changeDetection: ChangeDetectionStrategy.Eager,
29
+ template: `<kj-divider>OR</kj-divider>`,
30
+ })
31
+ class WithTextHost {}
32
+
33
+ @Component({
34
+ standalone: true,
35
+ imports: [KjDividerComponent],
36
+ changeDetection: ChangeDetectionStrategy.Eager,
37
+ template: `<kj-divider><span class="probe">OR</span></kj-divider>`,
38
+ })
39
+ class WithElementHost {}
40
+
41
+ @Component({
42
+ standalone: true,
43
+ imports: [KjDividerComponent],
44
+ changeDetection: ChangeDetectionStrategy.Eager,
45
+ template: `<kj-divider
46
+ [kjOrientation]="orientation"
47
+ [kjStructural]="structural"
48
+ [kjAlign]="align"
49
+ [kjVariant]="variant"
50
+ [kjSize]="size"
51
+ >{{ label }}</kj-divider
52
+ >`,
53
+ })
54
+ class ConfigurableHost {
55
+ orientation: 'horizontal' | 'vertical' = 'horizontal';
56
+ structural = false;
57
+ align: 'start' | 'center' | 'end' = 'center';
58
+ variant: 'solid' | 'dashed' | 'dotted' = 'solid';
59
+ size: 'sm' | 'md' | 'lg' = 'md';
60
+ label = '';
61
+ }
62
+
63
+ @Component({
64
+ standalone: true,
65
+ imports: [KjDividerComponent],
66
+ changeDetection: ChangeDetectionStrategy.Eager,
67
+ template: `<kj-divider [kjStructural]="true" [kjOrientation]="'vertical'" />`,
68
+ })
69
+ class StructuralVerticalHost {}
70
+
71
+ describe('KjDividerComponent', () => {
72
+ beforeEach(() => {
73
+ TestBed.configureTestingModule({});
74
+ });
75
+
76
+ describe('host election', () => {
77
+ test('renders an inner <hr> when no content is projected', async () => {
78
+ const fixture = TestBed.createComponent(RuleOnlyHost);
79
+ fixture.detectChanges();
80
+ await flushAfterNextRender();
81
+ fixture.detectChanges();
82
+ const root = fixture.nativeElement as HTMLElement;
83
+ expect(root.querySelector('kj-divider hr.kj-divider')).not.toBeNull();
84
+ expect(root.querySelector('kj-divider div.kj-divider')).toBeNull();
85
+ });
86
+
87
+ test('renders an inner <div> when text content is projected', async () => {
88
+ const fixture = TestBed.createComponent(WithTextHost);
89
+ fixture.detectChanges();
90
+ await flushAfterNextRender();
91
+ fixture.detectChanges();
92
+ const root = fixture.nativeElement as HTMLElement;
93
+ expect(root.querySelector('kj-divider div.kj-divider')).not.toBeNull();
94
+ expect(root.querySelector('kj-divider hr.kj-divider')).toBeNull();
95
+ });
96
+
97
+ test('renders an inner <div> when element content is projected', async () => {
98
+ const fixture = TestBed.createComponent(WithElementHost);
99
+ fixture.detectChanges();
100
+ await flushAfterNextRender();
101
+ fixture.detectChanges();
102
+ const root = fixture.nativeElement as HTMLElement;
103
+ const divHost = root.querySelector('kj-divider div.kj-divider');
104
+ expect(divHost).not.toBeNull();
105
+ expect(divHost!.querySelector('.kj-divider__content .probe')?.textContent).toBe('OR');
106
+ });
107
+ });
108
+
109
+ describe('aliased input forwarding', () => {
110
+ test('forwards kjOrientation to the directive (data-orientation)', async () => {
111
+ const fixture = TestBed.createComponent(ConfigurableHost);
112
+ fixture.componentInstance.orientation = 'vertical';
113
+ fixture.detectChanges();
114
+ await flushAfterNextRender();
115
+ fixture.detectChanges();
116
+ const host = fixture.nativeElement.querySelector('kj-divider hr.kj-divider')!;
117
+ expect(host.getAttribute('data-orientation')).toBe('vertical');
118
+ });
119
+
120
+ test('forwards kjAlign to the directive (data-align) on the with-content host', async () => {
121
+ const fixture = TestBed.createComponent(ConfigurableHost);
122
+ fixture.componentInstance.label = 'Today';
123
+ fixture.componentInstance.align = 'start';
124
+ fixture.detectChanges();
125
+ await flushAfterNextRender();
126
+ fixture.detectChanges();
127
+ const host = fixture.nativeElement.querySelector('kj-divider div.kj-divider')!;
128
+ expect(host).not.toBeNull();
129
+ expect(host.getAttribute('data-align')).toBe('start');
130
+ });
131
+
132
+ test('resolves kjVariant via the wrapper preset (default solid)', async () => {
133
+ const fixture = TestBed.createComponent(ConfigurableHost);
134
+ fixture.detectChanges();
135
+ await flushAfterNextRender();
136
+ fixture.detectChanges();
137
+ const host = fixture.nativeElement.querySelector('kj-divider hr.kj-divider')!;
138
+ expect(host.getAttribute('data-variant')).toBe('solid');
139
+ });
140
+
141
+ test('forwards kjVariant to the directive (data-variant)', async () => {
142
+ const fixture = TestBed.createComponent(ConfigurableHost);
143
+ fixture.componentInstance.variant = 'dashed';
144
+ fixture.detectChanges();
145
+ await flushAfterNextRender();
146
+ fixture.detectChanges();
147
+ const host = fixture.nativeElement.querySelector('kj-divider hr.kj-divider')!;
148
+ expect(host.getAttribute('data-variant')).toBe('dashed');
149
+ });
150
+
151
+ test('resolves kjSize via the wrapper preset (default md)', async () => {
152
+ const fixture = TestBed.createComponent(ConfigurableHost);
153
+ fixture.detectChanges();
154
+ await flushAfterNextRender();
155
+ fixture.detectChanges();
156
+ const host = fixture.nativeElement.querySelector('kj-divider hr.kj-divider')!;
157
+ expect(host.getAttribute('data-size')).toBe('md');
158
+ });
159
+
160
+ test('forwards kjSize to the directive (data-size)', async () => {
161
+ const fixture = TestBed.createComponent(ConfigurableHost);
162
+ fixture.componentInstance.size = 'lg';
163
+ fixture.detectChanges();
164
+ await flushAfterNextRender();
165
+ fixture.detectChanges();
166
+ const host = fixture.nativeElement.querySelector('kj-divider hr.kj-divider')!;
167
+ expect(host.getAttribute('data-size')).toBe('lg');
168
+ });
169
+ });
170
+
171
+ describe('structural-mode wiring (via KjDivider directive)', () => {
172
+ test('decorative default: aria-hidden="true" on the inner <hr>', async () => {
173
+ const fixture = TestBed.createComponent(RuleOnlyHost);
174
+ fixture.detectChanges();
175
+ await flushAfterNextRender();
176
+ fixture.detectChanges();
177
+ const host = fixture.nativeElement.querySelector('kj-divider hr.kj-divider')!;
178
+ expect(host.getAttribute('aria-hidden')).toBe('true');
179
+ expect(host.hasAttribute('role')).toBe(false);
180
+ });
181
+
182
+ test('structural mode on a with-content <div>: role="separator"', async () => {
183
+ const fixture = TestBed.createComponent(ConfigurableHost);
184
+ fixture.componentInstance.label = 'OR';
185
+ fixture.componentInstance.structural = true;
186
+ fixture.detectChanges();
187
+ await flushAfterNextRender();
188
+ fixture.detectChanges();
189
+ const host = fixture.nativeElement.querySelector('kj-divider div.kj-divider')!;
190
+ expect(host).not.toBeNull();
191
+ expect(host.getAttribute('role')).toBe('separator');
192
+ expect(host.hasAttribute('aria-hidden')).toBe(false);
193
+ });
194
+
195
+ test('structural + vertical: aria-orientation="vertical" via the directive', async () => {
196
+ const fixture = TestBed.createComponent(StructuralVerticalHost);
197
+ fixture.detectChanges();
198
+ await flushAfterNextRender();
199
+ fixture.detectChanges();
200
+ const host = fixture.nativeElement.querySelector('kj-divider hr.kj-divider')!;
201
+ // <hr> has implicit role="separator" — directive must NOT set role explicitly.
202
+ expect(host.hasAttribute('role')).toBe(false);
203
+ expect(host.getAttribute('aria-orientation')).toBe('vertical');
204
+ expect(host.hasAttribute('aria-hidden')).toBe(false);
205
+ });
206
+ });
207
+ });
@@ -0,0 +1,220 @@
1
+ import {
2
+ ChangeDetectionStrategy,
3
+ Component,
4
+ ElementRef,
5
+ ViewEncapsulation,
6
+ afterNextRender,
7
+ contentChildren,
8
+ input,
9
+ signal,
10
+ viewChild,
11
+ } from '@angular/core';
12
+ import {
13
+ KJ_SIZE_PRESET,
14
+ KJ_VARIANT_PRESET,
15
+ KjDivider,
16
+ type KjDividerAlign,
17
+ type KjDividerOrientation,
18
+ } from '@kouji-ui/core';
19
+
20
+ /**
21
+ * Styled wrapper around the headless `KjDivider` directive.
22
+ *
23
+ * Auto-elects the host element: renders `<hr kjDivider/>` when no content is
24
+ * projected (rule-only case — preserves the native `<hr>` semantic and its
25
+ * implicit `role="separator"` when structural), and `<div kjDivider>` when
26
+ * content is projected (the with-content case — `<hr>` is a void element and
27
+ * cannot host children, so we fall back to `<div>` for label projection).
28
+ *
29
+ * The wrapper itself is layout-invisible (`display: contents`) so a vertical
30
+ * divider inside a flex strip does not introduce an extra block-level box that
31
+ * would break the row-flex.
32
+ *
33
+ * **Composition note.** Per the analysis, the directive is composed by
34
+ * applying `kjDivider` to the inner rendered host (`<hr>` or `<div>`) rather
35
+ * than via the wrapper's own `hostDirectives`. The directive must run on the
36
+ * visible rule element so the data attributes (`data-orientation`,
37
+ * `data-with-content`, `data-variant`, `data-size`) and ARIA semantics land
38
+ * where theme CSS expects them, not on the `display: contents` outer
39
+ * `<kj-divider>` custom element.
40
+ *
41
+ * @example
42
+ * ```html
43
+ * <kj-divider />
44
+ * <kj-divider [kjStructural]="true" kjOrientation="vertical" />
45
+ * <kj-divider [kjStructural]="true">OR</kj-divider>
46
+ * ```
47
+ * @doc-example Default
48
+ * A horizontal rule between two short text blocks.
49
+ * @doc-file divider.example.ts
50
+ * @doc-example Usage
51
+ * A walkthrough of the most common divider usages — structural separator,
52
+ * labelled rule, and vertical divider inside a flex row.
53
+ * @doc-file divider.usage.example.ts
54
+ * @doc-example Vertical
55
+ * `kjOrientation="vertical"` for inline separators inside a flex strip.
56
+ * @doc-file divider.vertical.example.ts
57
+ * @doc-example With content
58
+ * A short label nestled into the rule — "OR", "AND THEN", section breaks.
59
+ * @doc-file divider.with-content.example.ts
60
+ * @doc-example Variants
61
+ * Line styles — `solid` / `dashed` / `dotted`.
62
+ * @doc-file divider.variants.example.ts
63
+ * @doc-example Sizes
64
+ * `sm` / `md` / `lg` — drives both thickness and surrounding spacing.
65
+ * @doc-file divider.sizes.example.ts
66
+ * @doc-example Structural
67
+ * `[kjStructural]="true"` exposes `role="separator"` for AT.
68
+ * @doc-file divider.structural.example.ts
69
+ *
70
+ * @doc-aria
71
+ * role="separator" — Reflected on the rule when `[kjStructural]="true"`
72
+ * aria-hidden — Reflected `"true"` when decorative (the default)
73
+ * data-orientation — Mirrors the resolved orientation for theme/scope hooks
74
+ * data-with-content — Mirrors whether a label is projected
75
+ *
76
+ * @doc-css-var
77
+ * --kj-divider-color — Rule color. Defaults to --kj-border-default with a fg-default fallback mix.
78
+ * --kj-divider-thickness — Line thickness. `sm` keeps 1px; `lg` bumps to 2px.
79
+ * --kj-divider-spacing — Margin around the rule along its block axis (or inline for vertical).
80
+ * --kj-divider-gap — Gap between the projected label and the surrounding rule segments.
81
+ *
82
+ * @doc-a11y
83
+ * When `kjStructural` is `true`, the rule announces as a structural break
84
+ * between regions (`role="separator"`); when false (default), it is fully
85
+ * decorative (`aria-hidden="true"`). The wrapper auto-elects `<hr>` for
86
+ * rule-only and `<div>` for with-content (since `<hr>` is void and cannot
87
+ * host a label).
88
+ *
89
+ * @doc-related typography,card,list
90
+ *
91
+ * @doc-category Library/Layout/Divider
92
+ * @doc
93
+ * @doc-name divider
94
+ * @doc-description Themed horizontal or vertical separator line with solid, dashed, or dotted variants and optional label.
95
+ * @doc-is-main
96
+ */
97
+ @Component({
98
+ selector: 'kj-divider',
99
+ standalone: true,
100
+ imports: [KjDivider],
101
+ template: `
102
+ @if (probed() && !hasContent()) {
103
+ <hr
104
+ kjDivider
105
+ class="kj-divider"
106
+ [kjOrientation]="kjOrientation()"
107
+ [kjStructural]="kjStructural()"
108
+ [kjVariant]="kjVariant()"
109
+ [kjSize]="kjSize()"
110
+ />
111
+ } @else {
112
+ <div
113
+ kjDivider
114
+ class="kj-divider"
115
+ [kjOrientation]="kjOrientation()"
116
+ [kjStructural]="kjStructural()"
117
+ [kjAlign]="kjAlign()"
118
+ [kjVariant]="kjVariant()"
119
+ [kjSize]="kjSize()"
120
+ >
121
+ <span #contentProbe class="kj-divider__content"><ng-content /></span>
122
+ </div>
123
+ }
124
+ `,
125
+ styleUrl: './divider.css',
126
+ encapsulation: ViewEncapsulation.None,
127
+ host: { style: 'display: contents;' },
128
+ changeDetection: ChangeDetectionStrategy.OnPush,
129
+ providers: [
130
+ {
131
+ provide: KJ_VARIANT_PRESET,
132
+ useValue: { values: ['solid', 'dashed', 'dotted'], default: 'solid' },
133
+ },
134
+ {
135
+ provide: KJ_SIZE_PRESET,
136
+ useValue: { values: ['sm', 'md', 'lg'], default: 'md' },
137
+ },
138
+ ],
139
+ })
140
+ export class KjDividerComponent {
141
+ /** Visual orientation of the rule. Reflects to `data-orientation` on the rule host. */
142
+ readonly kjOrientation = input<KjDividerOrientation>('horizontal');
143
+
144
+ /**
145
+ * Whether the divider carries semantic weight (separates two regions not
146
+ * already demarcated by surrounding heading or landmark structure).
147
+ * Defaults to `false` (decorative; `aria-hidden="true"`).
148
+ */
149
+ readonly kjStructural = input<boolean>(false);
150
+
151
+ /** Alignment of the projected content within a with-content divider. */
152
+ readonly kjAlign = input<KjDividerAlign>('center');
153
+
154
+ /** Line style preset. Validated against `KJ_VARIANT_PRESET` (`solid` / `dashed` / `dotted`). */
155
+ readonly kjVariant = input<'solid' | 'dashed' | 'dotted'>('solid');
156
+
157
+ /** Size preset. Validated against `KJ_SIZE_PRESET` (`sm` / `md` / `lg`). */
158
+ readonly kjSize = input<'sm' | 'md' | 'lg'>('md');
159
+
160
+ /**
161
+ * Reference to the inner `<span class="kj-divider__content">` that wraps the
162
+ * `<ng-content>` slot when the with-content branch is rendered. Sampled
163
+ * after first render to discover whether the consumer actually projected
164
+ * anything.
165
+ */
166
+ private readonly contentProbe = viewChild<ElementRef<HTMLElement>>('contentProbe');
167
+
168
+ /**
169
+ * Host election lifecycle:
170
+ * 1. Initial render — the wrapper renders the `<div>` with-content branch
171
+ * so the `<ng-content>` slot is live and any projected nodes (text or
172
+ * elements) physically land in the DOM.
173
+ * 2. `afterNextRender` — the wrapper inspects the `<span>` content probe.
174
+ * If it is empty (no consumer-projected content), `probed` flips true
175
+ * with `hasContent=false`, swapping the host to `<hr>` for the
176
+ * rule-only case (preserves the native `<hr>` semantic and its
177
+ * implicit `role="separator"` when structural).
178
+ * 3. Otherwise the wrapper stays on the `<div>` branch.
179
+ *
180
+ * The conditional-content edge case (consumers toggling content at runtime)
181
+ * is documented in the analysis as an open question — `hasContent` only
182
+ * settles once. Consumers wanting runtime-toggleable labels should wrap them
183
+ * in a stable element child (e.g. `<span>`); `projectedChildren` keeps the
184
+ * host on `<div>` whenever an element child is present.
185
+ */
186
+ protected readonly probed = signal(false);
187
+ protected readonly hasContent = signal(true);
188
+
189
+ /**
190
+ * Tracks any projected element children so the host stays on `<div>` if a
191
+ * runtime toggle adds or removes a labelled child after first probe.
192
+ */
193
+ private readonly projectedChildren = contentChildren('*', { descendants: false });
194
+
195
+ constructor() {
196
+ afterNextRender(() => {
197
+ if (this.probed()) return;
198
+ const probe = this.contentProbe()?.nativeElement;
199
+ const initialText = probe ? (probe.textContent ?? '').trim() : '';
200
+ const hasElementChildren = !!probe && this.hasMeaningfulElementChildren(probe);
201
+ const present =
202
+ initialText.length > 0 || hasElementChildren || this.projectedChildren().length > 0;
203
+ this.hasContent.set(present);
204
+ this.probed.set(true);
205
+ });
206
+ }
207
+
208
+ private hasMeaningfulElementChildren(probe: HTMLElement): boolean {
209
+ const nodes = probe.childNodes;
210
+ for (let i = 0; i < nodes.length; i++) {
211
+ const node = nodes[i];
212
+ if (node.nodeType === Node.ELEMENT_NODE) return true;
213
+ if (node.nodeType === Node.TEXT_NODE) {
214
+ const text = node.nodeValue ?? '';
215
+ if (text.trim().length > 0) return true;
216
+ }
217
+ }
218
+ return false;
219
+ }
220
+ }
@@ -0,0 +1 @@
1
+ export * from './divider';
@@ -0,0 +1,30 @@
1
+ import { Component, inject, ChangeDetectionStrategy } from '@angular/core';
2
+ import { KjDrawer, KjDrawerService } from '@kouji-ui/core';
3
+ import { KjButtonComponent } from '../../button/button';
4
+
5
+ // TODO(wrapper-overlay): re-skin via styled wrapper.
6
+ @Component({
7
+ selector: 'kj-drawer-default-body',
8
+ standalone: true,
9
+ imports: [KjDrawer],
10
+ changeDetection: ChangeDetectionStrategy.Eager,
11
+ template: `<kj-drawer
12
+ ><h2>Drawer</h2>
13
+ <p>Body</p></kj-drawer
14
+ >`,
15
+ })
16
+ class DrawerBody {}
17
+
18
+ @Component({
19
+ selector: 'kj-drawer-example',
20
+ standalone: true,
21
+ imports: [KjButtonComponent],
22
+ changeDetection: ChangeDetectionStrategy.Eager,
23
+ template: `<kj-button (click)="open()">Open drawer</kj-button>`,
24
+ })
25
+ export class KjDrawerExample {
26
+ private readonly drawer = inject(KjDrawerService);
27
+ open(): void {
28
+ this.drawer.open(DrawerBody);
29
+ }
30
+ }
@@ -0,0 +1,27 @@
1
+ import { Component, inject, ChangeDetectionStrategy } from '@angular/core';
2
+ import { KjDrawer, KjDrawerService } from '@kouji-ui/core';
3
+ import { KjButtonComponent } from '../../button/button';
4
+
5
+ // TODO(wrapper-overlay): modal toggling needs revisit on overlay primitives.
6
+ @Component({
7
+ selector: 'kj-drawer-modal-body',
8
+ standalone: true,
9
+ imports: [KjDrawer],
10
+ changeDetection: ChangeDetectionStrategy.Eager,
11
+ template: `<kj-drawer><h2>Drawer</h2></kj-drawer>`,
12
+ })
13
+ class Body {}
14
+
15
+ @Component({
16
+ selector: 'kj-drawer-modal-vs-non-modal-example',
17
+ standalone: true,
18
+ imports: [KjButtonComponent],
19
+ changeDetection: ChangeDetectionStrategy.Eager,
20
+ template: `<kj-button (click)="open()">Open</kj-button>`,
21
+ })
22
+ export class KjDrawerModalVsNonModalExample {
23
+ private readonly drawer = inject(KjDrawerService);
24
+ open(): void {
25
+ this.drawer.open(Body);
26
+ }
27
+ }
@@ -0,0 +1,30 @@
1
+ import { Component, inject, ChangeDetectionStrategy } from '@angular/core';
2
+ import { KjDrawer, KjDrawerService } from '@kouji-ui/core';
3
+ import { KjButtonComponent } from '../../button/button';
4
+
5
+ // TODO(wrapper-overlay): re-skin scrollable drawer.
6
+ @Component({
7
+ selector: 'kj-drawer-scrollable-body',
8
+ standalone: true,
9
+ imports: [KjDrawer],
10
+ changeDetection: ChangeDetectionStrategy.Eager,
11
+ template: `<kj-drawer
12
+ ><h2>Long</h2>
13
+ <div style="overflow:auto; max-height:60vh"><p>Lorem ipsum…</p></div></kj-drawer
14
+ >`,
15
+ })
16
+ class Body {}
17
+
18
+ @Component({
19
+ selector: 'kj-drawer-scrollable-example',
20
+ standalone: true,
21
+ imports: [KjButtonComponent],
22
+ changeDetection: ChangeDetectionStrategy.Eager,
23
+ template: `<kj-button (click)="open()">Open</kj-button>`,
24
+ })
25
+ export class KjDrawerScrollableExample {
26
+ private readonly drawer = inject(KjDrawerService);
27
+ open(): void {
28
+ this.drawer.open(Body);
29
+ }
30
+ }
@@ -0,0 +1,32 @@
1
+ import { Component, inject, ChangeDetectionStrategy } from '@angular/core';
2
+ import { KjDrawer, KjDrawerService, type KjDrawerSide } from '@kouji-ui/core';
3
+ import { KjButtonComponent } from '../../button/button';
4
+
5
+ // TODO(wrapper-overlay): re-skin sides demo.
6
+ @Component({
7
+ selector: 'kj-drawer-sides-body',
8
+ standalone: true,
9
+ imports: [KjDrawer],
10
+ changeDetection: ChangeDetectionStrategy.Eager,
11
+ template: `<kj-drawer><h2>Drawer</h2></kj-drawer>`,
12
+ })
13
+ class Body {}
14
+
15
+ @Component({
16
+ selector: 'kj-drawer-sides-example',
17
+ standalone: true,
18
+ imports: [KjButtonComponent],
19
+ changeDetection: ChangeDetectionStrategy.Eager,
20
+ template: `
21
+ <kj-button (click)="open('left')">Left</kj-button>
22
+ <kj-button (click)="open('right')">Right</kj-button>
23
+ <kj-button (click)="open('top')">Top</kj-button>
24
+ <kj-button (click)="open('bottom')">Bottom</kj-button>
25
+ `,
26
+ })
27
+ export class KjDrawerSidesExample {
28
+ private readonly drawer = inject(KjDrawerService);
29
+ open(side: KjDrawerSide): void {
30
+ this.drawer.open(Body, { side });
31
+ }
32
+ }