@cleen/ui 0.1.0

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 (416) hide show
  1. package/package.json +54 -0
  2. package/src/charts/chart/Chart.tsx +82 -0
  3. package/src/charts/chart/constant.ts +50 -0
  4. package/src/charts/chart/index.ts +2 -0
  5. package/src/charts/chart/types/apexcharts.ts +9 -0
  6. package/src/charts/chart/variants/BellCurve/BellCurve.tsx +215 -0
  7. package/src/charts/chart/variants/BellCurve/constant.ts +112 -0
  8. package/src/charts/chart/variants/BellCurve/helper.ts +116 -0
  9. package/src/charts/chart/variants/BellCurve/index.ts +2 -0
  10. package/src/charts/chart/variants/BellCurve/types/bellCurve.ts +47 -0
  11. package/src/charts/chart/variants/BellCurve/types/props.ts +21 -0
  12. package/src/charts/chart/variants/RadarChart/RadarChart.tsx +22 -0
  13. package/src/charts/chart/variants/RadarChart/constant.ts +28 -0
  14. package/src/charts/chart/variants/RadarChart/index.ts +1 -0
  15. package/src/charts/chart/variants/ScatterChart/ScatterChart.tsx +23 -0
  16. package/src/charts/chart/variants/ScatterChart/constant.ts +54 -0
  17. package/src/charts/chart/variants/ScatterChart/index.ts +1 -0
  18. package/src/charts/chart/variants/index.ts +3 -0
  19. package/src/charts/index.ts +2 -0
  20. package/src/charts/simpleChart/SimpleChart.tsx +54 -0
  21. package/src/charts/simpleChart/index.ts +1 -0
  22. package/src/components/advancedProgressBar/AdvancedProgressBar.tsx +156 -0
  23. package/src/components/advancedProgressBar/blocks/Bar.tsx +118 -0
  24. package/src/components/advancedProgressBar/blocks/BlockLabel.tsx +49 -0
  25. package/src/components/advancedProgressBar/blocks/Clamp.tsx +85 -0
  26. package/src/components/advancedProgressBar/constants.ts +6 -0
  27. package/src/components/advancedProgressBar/index.ts +2 -0
  28. package/src/components/advancedProgressBar/types/props.ts +69 -0
  29. package/src/components/advancedProgressBar/utils.ts +17 -0
  30. package/src/components/audioPlayback/AudioPlayback.tsx +141 -0
  31. package/src/components/audioPlayback/index.ts +2 -0
  32. package/src/components/audioRecorder/AudioRecorder.tsx +391 -0
  33. package/src/components/audioRecorder/constant/default.ts +19 -0
  34. package/src/components/audioRecorder/constant/labels.ts +9 -0
  35. package/src/components/audioRecorder/index.ts +2 -0
  36. package/src/components/audioRecorder/types/props.ts +56 -0
  37. package/src/components/avatar/Avatar.tsx +132 -0
  38. package/src/components/avatar/index.ts +1 -0
  39. package/src/components/avatar/variants.ts +9 -0
  40. package/src/components/avatarRow/AvatarRow.tsx +127 -0
  41. package/src/components/avatarRow/index.ts +1 -0
  42. package/src/components/breadcrumb/Breadcrumb.tsx +158 -0
  43. package/src/components/breadcrumb/index.ts +1 -0
  44. package/src/components/button/Button.tsx +114 -0
  45. package/src/components/button/index.ts +2 -0
  46. package/src/components/button/variants.ts +41 -0
  47. package/src/components/card/Card.tsx +197 -0
  48. package/src/components/card/index.ts +3 -0
  49. package/src/components/card/variants/CardIcon/CardIcon.tsx +158 -0
  50. package/src/components/card/variants/CardMedia/CardMedia.tsx +127 -0
  51. package/src/components/checkbox/Checkbox.tsx +246 -0
  52. package/src/components/checkbox/index.ts +1 -0
  53. package/src/components/checkbox/variants.ts +13 -0
  54. package/src/components/checkboxGroup/CheckboxGroup.tsx +163 -0
  55. package/src/components/checkboxGroup/index.ts +1 -0
  56. package/src/components/cleenIcon/CleenIcon.tsx +674 -0
  57. package/src/components/cleenIcon/icons/IconAlertCircle.tsx +22 -0
  58. package/src/components/cleenIcon/icons/IconAlertFeatured.tsx +30 -0
  59. package/src/components/cleenIcon/icons/IconAlertOctagon.tsx +21 -0
  60. package/src/components/cleenIcon/icons/IconAlertTriangle.tsx +25 -0
  61. package/src/components/cleenIcon/icons/IconAlignRight.tsx +25 -0
  62. package/src/components/cleenIcon/icons/IconArrowDown.tsx +25 -0
  63. package/src/components/cleenIcon/icons/IconArrowLeft.tsx +25 -0
  64. package/src/components/cleenIcon/icons/IconArrowLeft2.tsx +22 -0
  65. package/src/components/cleenIcon/icons/IconArrowRight.tsx +25 -0
  66. package/src/components/cleenIcon/icons/IconArrowToTop.tsx +20 -0
  67. package/src/components/cleenIcon/icons/IconArrowUp.tsx +22 -0
  68. package/src/components/cleenIcon/icons/IconArrowUpRight.tsx +22 -0
  69. package/src/components/cleenIcon/icons/IconArrowUpRightNarrow.tsx +22 -0
  70. package/src/components/cleenIcon/icons/IconArrowUpRightSquare.tsx +22 -0
  71. package/src/components/cleenIcon/icons/IconAttachment.tsx +22 -0
  72. package/src/components/cleenIcon/icons/IconBarChartSquare.tsx +22 -0
  73. package/src/components/cleenIcon/icons/IconBold.tsx +16 -0
  74. package/src/components/cleenIcon/icons/IconBookmarkCheck.tsx +22 -0
  75. package/src/components/cleenIcon/icons/IconBookmarkCheckFill.tsx +37 -0
  76. package/src/components/cleenIcon/icons/IconBookmarkPlus.tsx +22 -0
  77. package/src/components/cleenIcon/icons/IconBookmarkX.tsx +22 -0
  78. package/src/components/cleenIcon/icons/IconBoxLines.tsx +16 -0
  79. package/src/components/cleenIcon/icons/IconBoxText.tsx +24 -0
  80. package/src/components/cleenIcon/icons/IconBracketsCheck.tsx +25 -0
  81. package/src/components/cleenIcon/icons/IconBracketsEllipses.tsx +22 -0
  82. package/src/components/cleenIcon/icons/IconBuilding.tsx +22 -0
  83. package/src/components/cleenIcon/icons/IconCalendar.tsx +25 -0
  84. package/src/components/cleenIcon/icons/IconCertificateHeart.tsx +25 -0
  85. package/src/components/cleenIcon/icons/IconCheck.tsx +22 -0
  86. package/src/components/cleenIcon/icons/IconCheckCircle.tsx +22 -0
  87. package/src/components/cleenIcon/icons/IconCheckCircleBroken.tsx +25 -0
  88. package/src/components/cleenIcon/icons/IconCheckFill.tsx +45 -0
  89. package/src/components/cleenIcon/icons/IconCheckVerified.tsx +22 -0
  90. package/src/components/cleenIcon/icons/IconChevronDown.tsx +22 -0
  91. package/src/components/cleenIcon/icons/IconChevronLeft.tsx +25 -0
  92. package/src/components/cleenIcon/icons/IconChevronLeftDouble.tsx +22 -0
  93. package/src/components/cleenIcon/icons/IconChevronRight.tsx +25 -0
  94. package/src/components/cleenIcon/icons/IconChevronRightDouble.tsx +22 -0
  95. package/src/components/cleenIcon/icons/IconChevronSelectorVertical.tsx +22 -0
  96. package/src/components/cleenIcon/icons/IconChevronUp.tsx +25 -0
  97. package/src/components/cleenIcon/icons/IconCircleSwap.tsx +22 -0
  98. package/src/components/cleenIcon/icons/IconClockFastForward.tsx +25 -0
  99. package/src/components/cleenIcon/icons/IconClockRewind.tsx +25 -0
  100. package/src/components/cleenIcon/icons/IconClockRewind2.tsx +21 -0
  101. package/src/components/cleenIcon/icons/IconCodeBrowser.tsx +25 -0
  102. package/src/components/cleenIcon/icons/IconCodeCircle.tsx +22 -0
  103. package/src/components/cleenIcon/icons/IconColors.tsx +25 -0
  104. package/src/components/cleenIcon/icons/IconColumnEdit.tsx +19 -0
  105. package/src/components/cleenIcon/icons/IconCopy.tsx +25 -0
  106. package/src/components/cleenIcon/icons/IconCopy2.tsx +22 -0
  107. package/src/components/cleenIcon/icons/IconCopy3.tsx +25 -0
  108. package/src/components/cleenIcon/icons/IconCopy4.tsx +25 -0
  109. package/src/components/cleenIcon/icons/IconCopy5.tsx +25 -0
  110. package/src/components/cleenIcon/icons/IconCopyCheck.tsx +22 -0
  111. package/src/components/cleenIcon/icons/IconCube.tsx +25 -0
  112. package/src/components/cleenIcon/icons/IconCubeOutline.tsx +22 -0
  113. package/src/components/cleenIcon/icons/IconCursorBox.tsx +25 -0
  114. package/src/components/cleenIcon/icons/IconDataflow.tsx +22 -0
  115. package/src/components/cleenIcon/icons/IconDataflow2.tsx +22 -0
  116. package/src/components/cleenIcon/icons/IconDataflow3.tsx +29 -0
  117. package/src/components/cleenIcon/icons/IconDelete.tsx +25 -0
  118. package/src/components/cleenIcon/icons/IconDollarCircle.tsx +25 -0
  119. package/src/components/cleenIcon/icons/IconDotsGrid.tsx +74 -0
  120. package/src/components/cleenIcon/icons/IconDotsHorizontal.tsx +34 -0
  121. package/src/components/cleenIcon/icons/IconDotsVertical.tsx +38 -0
  122. package/src/components/cleenIcon/icons/IconEdit.tsx +25 -0
  123. package/src/components/cleenIcon/icons/IconEditable.tsx +25 -0
  124. package/src/components/cleenIcon/icons/IconExpand.tsx +22 -0
  125. package/src/components/cleenIcon/icons/IconEye.tsx +28 -0
  126. package/src/components/cleenIcon/icons/IconEyeHidden.tsx +25 -0
  127. package/src/components/cleenIcon/icons/IconEyeHidden2.tsx +24 -0
  128. package/src/components/cleenIcon/icons/IconFaceSmile.tsx +24 -0
  129. package/src/components/cleenIcon/icons/IconFilter.tsx +22 -0
  130. package/src/components/cleenIcon/icons/IconFilter2.tsx +22 -0
  131. package/src/components/cleenIcon/icons/IconFlag.tsx +22 -0
  132. package/src/components/cleenIcon/icons/IconFlag2.tsx +25 -0
  133. package/src/components/cleenIcon/icons/IconFlag3.tsx +16 -0
  134. package/src/components/cleenIcon/icons/IconHandShield.tsx +22 -0
  135. package/src/components/cleenIcon/icons/IconHash.tsx +22 -0
  136. package/src/components/cleenIcon/icons/IconHeadsetMic.tsx +21 -0
  137. package/src/components/cleenIcon/icons/IconHeart.tsx +24 -0
  138. package/src/components/cleenIcon/icons/IconHouseLine.tsx +22 -0
  139. package/src/components/cleenIcon/icons/IconImage.tsx +22 -0
  140. package/src/components/cleenIcon/icons/IconImage2.tsx +22 -0
  141. package/src/components/cleenIcon/icons/IconImage3.tsx +17 -0
  142. package/src/components/cleenIcon/icons/IconImage4.tsx +25 -0
  143. package/src/components/cleenIcon/icons/IconImageCheck.tsx +22 -0
  144. package/src/components/cleenIcon/icons/IconInfoCircle.tsx +22 -0
  145. package/src/components/cleenIcon/icons/IconInfoHexagon.tsx +25 -0
  146. package/src/components/cleenIcon/icons/IconItalic.tsx +16 -0
  147. package/src/components/cleenIcon/icons/IconLayersMultiple.tsx +22 -0
  148. package/src/components/cleenIcon/icons/IconLayersSingle.tsx +22 -0
  149. package/src/components/cleenIcon/icons/IconLayout.tsx +22 -0
  150. package/src/components/cleenIcon/icons/IconLayout2.tsx +22 -0
  151. package/src/components/cleenIcon/icons/IconLayoutColumns.tsx +20 -0
  152. package/src/components/cleenIcon/icons/IconLayoutCustom.tsx +16 -0
  153. package/src/components/cleenIcon/icons/IconLayoutSequential.tsx +16 -0
  154. package/src/components/cleenIcon/icons/IconLayoutStuffed.tsx +20 -0
  155. package/src/components/cleenIcon/icons/IconLayoutTile.tsx +16 -0
  156. package/src/components/cleenIcon/icons/IconLifeBuoy.tsx +29 -0
  157. package/src/components/cleenIcon/icons/IconLightbulb.tsx +22 -0
  158. package/src/components/cleenIcon/icons/IconLightning.tsx +22 -0
  159. package/src/components/cleenIcon/icons/IconLightning2.tsx +25 -0
  160. package/src/components/cleenIcon/icons/IconLightningFast.tsx +22 -0
  161. package/src/components/cleenIcon/icons/IconLineChartBar.tsx +22 -0
  162. package/src/components/cleenIcon/icons/IconLineChartBreakoutSquare.tsx +22 -0
  163. package/src/components/cleenIcon/icons/IconLineChartUp.tsx +25 -0
  164. package/src/components/cleenIcon/icons/IconLineChartUp2.tsx +34 -0
  165. package/src/components/cleenIcon/icons/IconLines.tsx +22 -0
  166. package/src/components/cleenIcon/icons/IconLinesCheck.tsx +16 -0
  167. package/src/components/cleenIcon/icons/IconLinesPlay.tsx +23 -0
  168. package/src/components/cleenIcon/icons/IconLink.tsx +25 -0
  169. package/src/components/cleenIcon/icons/IconLink2.tsx +24 -0
  170. package/src/components/cleenIcon/icons/IconLink3.tsx +21 -0
  171. package/src/components/cleenIcon/icons/IconLink4.tsx +17 -0
  172. package/src/components/cleenIcon/icons/IconLink5.tsx +22 -0
  173. package/src/components/cleenIcon/icons/IconListBullet.tsx +18 -0
  174. package/src/components/cleenIcon/icons/IconListOrder.tsx +20 -0
  175. package/src/components/cleenIcon/icons/IconListOrder2.tsx +16 -0
  176. package/src/components/cleenIcon/icons/IconLock.tsx +22 -0
  177. package/src/components/cleenIcon/icons/IconLock2.tsx +22 -0
  178. package/src/components/cleenIcon/icons/IconLogIn.tsx +25 -0
  179. package/src/components/cleenIcon/icons/IconLogOut.tsx +25 -0
  180. package/src/components/cleenIcon/icons/IconLogOut2.tsx +22 -0
  181. package/src/components/cleenIcon/icons/IconMagicWand.tsx +25 -0
  182. package/src/components/cleenIcon/icons/IconMagicWand2.tsx +22 -0
  183. package/src/components/cleenIcon/icons/IconMail.tsx +25 -0
  184. package/src/components/cleenIcon/icons/IconMessageSquare.tsx +25 -0
  185. package/src/components/cleenIcon/icons/IconMessageSquare2.tsx +22 -0
  186. package/src/components/cleenIcon/icons/IconMessageXSquare.tsx +25 -0
  187. package/src/components/cleenIcon/icons/IconMinusCircle.tsx +22 -0
  188. package/src/components/cleenIcon/icons/IconMobile.tsx +25 -0
  189. package/src/components/cleenIcon/icons/IconMonitor.tsx +22 -0
  190. package/src/components/cleenIcon/icons/IconMonitor2.tsx +25 -0
  191. package/src/components/cleenIcon/icons/IconMonitor3.tsx +25 -0
  192. package/src/components/cleenIcon/icons/IconMoonCircle.tsx +28 -0
  193. package/src/components/cleenIcon/icons/IconNavigationPointer.tsx +22 -0
  194. package/src/components/cleenIcon/icons/IconNotificationBox.tsx +22 -0
  195. package/src/components/cleenIcon/icons/IconPCSetup.tsx +22 -0
  196. package/src/components/cleenIcon/icons/IconPalette.tsx +40 -0
  197. package/src/components/cleenIcon/icons/IconPasscodeLock.tsx +25 -0
  198. package/src/components/cleenIcon/icons/IconPencil.tsx +25 -0
  199. package/src/components/cleenIcon/icons/IconPercentageCircle.tsx +29 -0
  200. package/src/components/cleenIcon/icons/IconPerspective.tsx +22 -0
  201. package/src/components/cleenIcon/icons/IconPhoneCall.tsx +25 -0
  202. package/src/components/cleenIcon/icons/IconPin.tsx +22 -0
  203. package/src/components/cleenIcon/icons/IconPlayCircle.tsx +28 -0
  204. package/src/components/cleenIcon/icons/IconPlus.tsx +22 -0
  205. package/src/components/cleenIcon/icons/IconPlusCircle.tsx +25 -0
  206. package/src/components/cleenIcon/icons/IconPulse.tsx +25 -0
  207. package/src/components/cleenIcon/icons/IconQuestionCircle.tsx +24 -0
  208. package/src/components/cleenIcon/icons/IconRadioButton.tsx +27 -0
  209. package/src/components/cleenIcon/icons/IconRadioButtonActive.tsx +39 -0
  210. package/src/components/cleenIcon/icons/IconReceiptCheck.tsx +25 -0
  211. package/src/components/cleenIcon/icons/IconRedo.tsx +16 -0
  212. package/src/components/cleenIcon/icons/IconRefresh.tsx +22 -0
  213. package/src/components/cleenIcon/icons/IconRefresh2.tsx +22 -0
  214. package/src/components/cleenIcon/icons/IconRefresh3.tsx +20 -0
  215. package/src/components/cleenIcon/icons/IconRepeat.tsx +22 -0
  216. package/src/components/cleenIcon/icons/IconRepeat2.tsx +22 -0
  217. package/src/components/cleenIcon/icons/IconRetweet.tsx +33 -0
  218. package/src/components/cleenIcon/icons/IconRoundChart.tsx +25 -0
  219. package/src/components/cleenIcon/icons/IconRoundChart2.tsx +29 -0
  220. package/src/components/cleenIcon/icons/IconRoute.tsx +22 -0
  221. package/src/components/cleenIcon/icons/IconSave.tsx +25 -0
  222. package/src/components/cleenIcon/icons/IconSave2.tsx +22 -0
  223. package/src/components/cleenIcon/icons/IconScanDots.tsx +22 -0
  224. package/src/components/cleenIcon/icons/IconSearch.tsx +22 -0
  225. package/src/components/cleenIcon/icons/IconSend.tsx +25 -0
  226. package/src/components/cleenIcon/icons/IconSettings.tsx +32 -0
  227. package/src/components/cleenIcon/icons/IconSettings2.tsx +25 -0
  228. package/src/components/cleenIcon/icons/IconSettings3.tsx +22 -0
  229. package/src/components/cleenIcon/icons/IconShieldLightning.tsx +22 -0
  230. package/src/components/cleenIcon/icons/IconShieldPlus.tsx +22 -0
  231. package/src/components/cleenIcon/icons/IconShieldRemove.tsx +16 -0
  232. package/src/components/cleenIcon/icons/IconShuffle.tsx +25 -0
  233. package/src/components/cleenIcon/icons/IconSlashCircle.tsx +22 -0
  234. package/src/components/cleenIcon/icons/IconSlashOctagon.tsx +22 -0
  235. package/src/components/cleenIcon/icons/IconSocialGlobe.tsx +23 -0
  236. package/src/components/cleenIcon/icons/IconSocialLinkedin.tsx +21 -0
  237. package/src/components/cleenIcon/icons/IconSocialX.tsx +28 -0
  238. package/src/components/cleenIcon/icons/IconSpeedometer.tsx +22 -0
  239. package/src/components/cleenIcon/icons/IconStairsRound.tsx +21 -0
  240. package/src/components/cleenIcon/icons/IconStar.tsx +22 -0
  241. package/src/components/cleenIcon/icons/IconStarHalf.tsx +39 -0
  242. package/src/components/cleenIcon/icons/IconStars.tsx +28 -0
  243. package/src/components/cleenIcon/icons/IconStars2.tsx +29 -0
  244. package/src/components/cleenIcon/icons/IconStrikethrough.tsx +16 -0
  245. package/src/components/cleenIcon/icons/IconSuccessFeatured.tsx +30 -0
  246. package/src/components/cleenIcon/icons/IconSun.tsx +22 -0
  247. package/src/components/cleenIcon/icons/IconSwitchHorizontal.tsx +22 -0
  248. package/src/components/cleenIcon/icons/IconTag.tsx +22 -0
  249. package/src/components/cleenIcon/icons/IconTarget.tsx +21 -0
  250. package/src/components/cleenIcon/icons/IconTarget2.tsx +34 -0
  251. package/src/components/cleenIcon/icons/IconTextFormat.tsx +17 -0
  252. package/src/components/cleenIcon/icons/IconTextFormat2.tsx +22 -0
  253. package/src/components/cleenIcon/icons/IconTextHighlight.tsx +16 -0
  254. package/src/components/cleenIcon/icons/IconTranslate.tsx +25 -0
  255. package/src/components/cleenIcon/icons/IconTrash.tsx +25 -0
  256. package/src/components/cleenIcon/icons/IconTrending.tsx +22 -0
  257. package/src/components/cleenIcon/icons/IconUnderline.tsx +16 -0
  258. package/src/components/cleenIcon/icons/IconUndo.tsx +22 -0
  259. package/src/components/cleenIcon/icons/IconUndo2.tsx +16 -0
  260. package/src/components/cleenIcon/icons/IconUploadCloud.tsx +22 -0
  261. package/src/components/cleenIcon/icons/IconUser.tsx +22 -0
  262. package/src/components/cleenIcon/icons/IconUserEdit.tsx +25 -0
  263. package/src/components/cleenIcon/icons/IconUserRight.tsx +22 -0
  264. package/src/components/cleenIcon/icons/IconUserSquare.tsx +25 -0
  265. package/src/components/cleenIcon/icons/IconUsers.tsx +25 -0
  266. package/src/components/cleenIcon/icons/IconUsersUp.tsx +25 -0
  267. package/src/components/cleenIcon/icons/IconVolume.tsx +25 -0
  268. package/src/components/cleenIcon/icons/IconWrench.tsx +22 -0
  269. package/src/components/cleenIcon/icons/IconX.tsx +25 -0
  270. package/src/components/cleenIcon/icons/IconXCircle.tsx +22 -0
  271. package/src/components/cleenIcon/icons/IconXCircle2.tsx +42 -0
  272. package/src/components/cleenIcon/icons/IconXClose.tsx +25 -0
  273. package/src/components/cleenIcon/icons/IconXSquare.tsx +22 -0
  274. package/src/components/cleenIcon/icons/index.ts +215 -0
  275. package/src/components/cleenIcon/index.ts +4 -0
  276. package/src/components/cleenIcon/types/icon.ts +226 -0
  277. package/src/components/collapsible/Collapsible.tsx +148 -0
  278. package/src/components/collapsible/index.ts +5 -0
  279. package/src/components/creditCardInput/CreditCardInput.tsx +236 -0
  280. package/src/components/creditCardInput/index.ts +2 -0
  281. package/src/components/creditCardInput/types/card.ts +13 -0
  282. package/src/components/creditCardInput/types/props.ts +44 -0
  283. package/src/components/creditCardInput/util/format.ts +102 -0
  284. package/src/components/datePicker/DatePicker.tsx +235 -0
  285. package/src/components/datePicker/index.ts +2 -0
  286. package/src/components/datePicker/types/props.ts +47 -0
  287. package/src/components/datePicker/utils/date.ts +40 -0
  288. package/src/components/divider/Divider.tsx +43 -0
  289. package/src/components/divider/index.ts +1 -0
  290. package/src/components/drawer/Drawer.tsx +222 -0
  291. package/src/components/drawer/index.ts +1 -0
  292. package/src/components/dropdown/Dropdown.tsx +224 -0
  293. package/src/components/dropdown/index.ts +1 -0
  294. package/src/components/filterDrawer/FilterDrawer.tsx +147 -0
  295. package/src/components/filterDrawer/blocks/FilterDrawerFooter.tsx +119 -0
  296. package/src/components/filterDrawer/blocks/SaveFilterStep.tsx +56 -0
  297. package/src/components/filterDrawer/blocks/SavedFilterRow.tsx +166 -0
  298. package/src/components/filterDrawer/blocks/SavedFiltersDropdown.tsx +142 -0
  299. package/src/components/filterDrawer/constants/filter.ts +4 -0
  300. package/src/components/filterDrawer/constants/labels.ts +52 -0
  301. package/src/components/filterDrawer/constants/tab.ts +7 -0
  302. package/src/components/filterDrawer/context/context.ts +28 -0
  303. package/src/components/filterDrawer/context/provider.tsx +50 -0
  304. package/src/components/filterDrawer/index.ts +7 -0
  305. package/src/components/filterDrawer/types/filters.ts +28 -0
  306. package/src/components/filterDrawer/types/props.ts +107 -0
  307. package/src/components/filterDrawer/types/validation.ts +6 -0
  308. package/src/components/formGroup/FormGroup.tsx +165 -0
  309. package/src/components/formGroup/index.ts +1 -0
  310. package/src/components/groupSelector/GroupSelector.tsx +729 -0
  311. package/src/components/groupSelector/index.ts +6 -0
  312. package/src/components/index.ts +44 -0
  313. package/src/components/infoLabels/InfoLabels.tsx +88 -0
  314. package/src/components/infoLabels/index.ts +1 -0
  315. package/src/components/input/Input.tsx +269 -0
  316. package/src/components/input/index.ts +1 -0
  317. package/src/components/loader/Loader.tsx +91 -0
  318. package/src/components/loader/index.ts +1 -0
  319. package/src/components/lookup/Lookup.tsx +433 -0
  320. package/src/components/lookup/blocks/LookupOptionList.tsx +130 -0
  321. package/src/components/lookup/index.ts +2 -0
  322. package/src/components/lookup/types/lookup.ts +97 -0
  323. package/src/components/menu/Menu.tsx +103 -0
  324. package/src/components/menu/blocks/MenuContent.tsx +105 -0
  325. package/src/components/menu/blocks/MenuItem.tsx +120 -0
  326. package/src/components/menu/index.ts +2 -0
  327. package/src/components/menu/types/menu.ts +30 -0
  328. package/src/components/menu/types/menuItem.ts +48 -0
  329. package/src/components/modal/Modal.tsx +191 -0
  330. package/src/components/modal/index.ts +1 -0
  331. package/src/components/notification/Notification.tsx +79 -0
  332. package/src/components/notification/constant/notification.ts +30 -0
  333. package/src/components/notification/index.ts +2 -0
  334. package/src/components/notification/wrappers/CleenNotificationContainer.tsx +9 -0
  335. package/src/components/pagination/Pagination.tsx +294 -0
  336. package/src/components/pagination/blocks/PaginationGoToPage.tsx +91 -0
  337. package/src/components/pagination/blocks/PaginationPageSize.tsx +145 -0
  338. package/src/components/pagination/constants/labels.ts +15 -0
  339. package/src/components/pagination/index.ts +9 -0
  340. package/src/components/pillBadge/PillBadge.tsx +130 -0
  341. package/src/components/pillBadge/helper.ts +11 -0
  342. package/src/components/pillBadge/index.ts +1 -0
  343. package/src/components/pillBadge/variants.ts +47 -0
  344. package/src/components/popover/Popover.tsx +108 -0
  345. package/src/components/popover/index.ts +2 -0
  346. package/src/components/popover/types/popover.ts +21 -0
  347. package/src/components/progressBar/ProgressBar.tsx +179 -0
  348. package/src/components/progressBar/index.ts +1 -0
  349. package/src/components/progressCircle/ProgressCircle.tsx +142 -0
  350. package/src/components/progressCircle/index.ts +1 -0
  351. package/src/components/radioBoxGroup/RadioBoxGroup.tsx +207 -0
  352. package/src/components/radioBoxGroup/index.ts +1 -0
  353. package/src/components/radioButtonGroup/RadioButtonGroup.tsx +208 -0
  354. package/src/components/radioButtonGroup/blocks/RadioButton.tsx +22 -0
  355. package/src/components/radioButtonGroup/index.ts +4 -0
  356. package/src/components/radioButtonGroup/types/radioButton.ts +10 -0
  357. package/src/components/rangeSlider/RangeSlider.tsx +366 -0
  358. package/src/components/rangeSlider/index.ts +1 -0
  359. package/src/components/select/Select.tsx +349 -0
  360. package/src/components/select/blocks/SelectCustomMenuList.tsx +70 -0
  361. package/src/components/select/blocks/SelectNoOptionsMessage.tsx +22 -0
  362. package/src/components/select/blocks/SelectOption.tsx +19 -0
  363. package/src/components/select/blocks/SelectSingleValue.tsx +28 -0
  364. package/src/components/select/index.ts +1 -0
  365. package/src/components/sidebar/Sidebar.tsx +210 -0
  366. package/src/components/sidebar/SidebarItem.tsx +88 -0
  367. package/src/components/sidebar/drawerContainer/DrawerContainer.tsx +36 -0
  368. package/src/components/sidebar/drawerContainer/DrawerContentTitle.tsx +165 -0
  369. package/src/components/sidebar/drawerContainer/index.ts +2 -0
  370. package/src/components/sidebar/index.ts +13 -0
  371. package/src/components/sidebar/types.ts +157 -0
  372. package/src/components/skeletons/blocks/Skeleton.tsx +72 -0
  373. package/src/components/skeletons/blocks/SkeletonAvatar.tsx +43 -0
  374. package/src/components/skeletons/blocks/SkeletonBadge.tsx +30 -0
  375. package/src/components/skeletons/blocks/SkeletonBanner.tsx +44 -0
  376. package/src/components/skeletons/blocks/SkeletonButton.tsx +31 -0
  377. package/src/components/skeletons/blocks/SkeletonCard.tsx +39 -0
  378. package/src/components/skeletons/blocks/SkeletonCard2.tsx +57 -0
  379. package/src/components/skeletons/blocks/SkeletonCard3.tsx +89 -0
  380. package/src/components/skeletons/blocks/SkeletonCardStack.tsx +22 -0
  381. package/src/components/skeletons/blocks/SkeletonChart.tsx +114 -0
  382. package/src/components/skeletons/blocks/SkeletonContentCard.tsx +75 -0
  383. package/src/components/skeletons/blocks/SkeletonDataGrid.tsx +73 -0
  384. package/src/components/skeletons/blocks/SkeletonForm.tsx +50 -0
  385. package/src/components/skeletons/blocks/SkeletonImage.tsx +45 -0
  386. package/src/components/skeletons/blocks/SkeletonInfoCard.tsx +130 -0
  387. package/src/components/skeletons/blocks/SkeletonInput.tsx +32 -0
  388. package/src/components/skeletons/blocks/SkeletonList.tsx +67 -0
  389. package/src/components/skeletons/blocks/SkeletonParagraph.tsx +52 -0
  390. package/src/components/skeletons/blocks/SkeletonText.tsx +22 -0
  391. package/src/components/skeletons/blocks/SkeletonVideo.tsx +71 -0
  392. package/src/components/skeletons/blocks/SkeletonWidgetCard.tsx +56 -0
  393. package/src/components/skeletons/blocks/SkeletonWrapper.tsx +140 -0
  394. package/src/components/skeletons/index.ts +24 -0
  395. package/src/components/skeletons/styles/skeleton.ts +2 -0
  396. package/src/components/skeletons/types/skeleton.ts +8 -0
  397. package/src/components/slider/Slider.tsx +298 -0
  398. package/src/components/slider/index.ts +1 -0
  399. package/src/components/stepper/Stepper.tsx +185 -0
  400. package/src/components/stepper/index.ts +1 -0
  401. package/src/components/switch/Switch.tsx +152 -0
  402. package/src/components/switch/index.ts +1 -0
  403. package/src/components/tabs/Tabs.tsx +140 -0
  404. package/src/components/tabs/index.ts +2 -0
  405. package/src/components/tabs/types/tab.ts +33 -0
  406. package/src/components/tabs/variants.ts +49 -0
  407. package/src/components/textArea/TextArea.tsx +244 -0
  408. package/src/components/textArea/index.ts +1 -0
  409. package/src/components/tooltip/Tooltip.tsx +200 -0
  410. package/src/components/tooltip/index.ts +1 -0
  411. package/src/icons/IconFromLibrary.tsx +13 -0
  412. package/src/icons/getIconByName.ts +81 -0
  413. package/src/icons/index.ts +16 -0
  414. package/src/index.ts +1 -0
  415. package/tsconfig.json +27 -0
  416. package/tsup.config.ts +23 -0
@@ -0,0 +1,114 @@
1
+ import { getPulseAnimationClass } from '@/components/skeletons/styles/skeleton';
2
+ import type { SkeletonComponentProps } from '@/components/skeletons/types/skeleton';
3
+ import { cn } from '@cleen/ui-core';
4
+ import { forwardRef } from 'react';
5
+
6
+ // Chart scaffold: axes + a row of bars of natural-looking heights
7
+ const barHeights = [
8
+ 'cleen-h-16',
9
+ 'cleen-h-24',
10
+ 'cleen-h-14',
11
+ 'cleen-h-28',
12
+ 'cleen-h-20',
13
+ 'cleen-h-10',
14
+ 'cleen-h-24',
15
+ ];
16
+
17
+ export const SkeletonChart = forwardRef<HTMLDivElement, SkeletonComponentProps>(
18
+ function SkeletonChart({ className, style, variant = 'default' }, ref) {
19
+ const pulseClass = getPulseAnimationClass(variant);
20
+
21
+ return (
22
+ <div ref={ref} className={cn('cleen', className)} style={style}>
23
+ <div className="cleen-flex cleen-flex-col cleen-gap-3 cleen-bg-white cleen-border cleen-border-gray/15 cleen-rounded-xl cleen-px-4 cleen-pt-4 cleen-pb-3 cleen-w-full">
24
+ {/* Chart title + legend line */}
25
+ <div className="cleen-flex cleen-justify-between cleen-items-center">
26
+ <div
27
+ className={cn(
28
+ 'cleen-bg-gray/10 cleen-rounded cleen-w-32 cleen-h-5',
29
+ pulseClass
30
+ )}
31
+ />
32
+ <div className="cleen-flex cleen-items-center cleen-gap-3">
33
+ {[28, 20].map((w, i) => (
34
+ <div
35
+ key={i}
36
+ className="cleen-flex cleen-items-center cleen-gap-1.5"
37
+ >
38
+ <div
39
+ className={cn(
40
+ 'cleen-bg-gray/10 cleen-rounded-full cleen-size-2.5',
41
+ pulseClass
42
+ )}
43
+ />
44
+ <div
45
+ className={cn(
46
+ 'cleen-bg-gray/10 cleen-rounded cleen-h-3',
47
+ pulseClass
48
+ )}
49
+ style={{ width: w }}
50
+ />
51
+ </div>
52
+ ))}
53
+ </div>
54
+ </div>
55
+
56
+ {/* Y-axis labels + bars area */}
57
+ <div className="cleen-flex cleen-gap-3">
58
+ {/* Y-axis ticks */}
59
+ <div
60
+ className="cleen-flex cleen-flex-col cleen-justify-between cleen-items-end cleen-py-1"
61
+ style={{ height: 120 }}
62
+ >
63
+ {[0, 1, 2, 3].map(i => (
64
+ <div
65
+ key={i}
66
+ className={cn(
67
+ 'cleen-bg-gray/10 cleen-rounded cleen-w-6 cleen-h-2',
68
+ pulseClass
69
+ )}
70
+ />
71
+ ))}
72
+ </div>
73
+
74
+ {/* Bars + x-axis labels */}
75
+ <div className="cleen-flex cleen-flex-col cleen-flex-1 cleen-gap-1">
76
+ {/* Bar area */}
77
+ <div
78
+ className="cleen-flex cleen-items-end cleen-justify-around cleen-gap-2"
79
+ style={{ height: 112 }}
80
+ >
81
+ {barHeights.map((h, i) => (
82
+ <div
83
+ key={i}
84
+ className={cn(
85
+ 'cleen-bg-gray/10 cleen-rounded-t cleen-flex-1',
86
+ h,
87
+ pulseClass
88
+ )}
89
+ />
90
+ ))}
91
+ </div>
92
+
93
+ {/* X-axis baseline */}
94
+ <div className="cleen-w-full cleen-h-px cleen-bg-gray/15" />
95
+
96
+ {/* X-axis labels */}
97
+ <div className="cleen-flex cleen-justify-around cleen-gap-2 cleen-pt-1">
98
+ {barHeights.map((_, i) => (
99
+ <div
100
+ key={i}
101
+ className={cn(
102
+ 'cleen-bg-gray/10 cleen-rounded cleen-flex-1 cleen-h-2',
103
+ pulseClass
104
+ )}
105
+ />
106
+ ))}
107
+ </div>
108
+ </div>
109
+ </div>
110
+ </div>
111
+ </div>
112
+ );
113
+ }
114
+ );
@@ -0,0 +1,75 @@
1
+ import { Card } from '@/components/card';
2
+ import { getPulseAnimationClass } from '@/components/skeletons/styles/skeleton';
3
+ import type { SkeletonComponentProps } from '@/components/skeletons/types/skeleton';
4
+ import { cn } from '@cleen/ui-core';
5
+ import { forwardRef } from 'react';
6
+
7
+ export const SkeletonContentCard = forwardRef<
8
+ HTMLDivElement,
9
+ SkeletonComponentProps
10
+ >(({ variant = 'default', itemCount = 3, className, style }, ref) => {
11
+ const pulseClass = getPulseAnimationClass(variant);
12
+
13
+ return (
14
+ <div ref={ref} className={cn('cleen', className)} style={style}>
15
+ <Card className="cleen-max-h-fit">
16
+ <div className="cleen-flex cleen-flex-col cleen-gap-4">
17
+ {/* Step Title */}
18
+ <div className="cleen-flex cleen-flex-col cleen-gap-2">
19
+ <div
20
+ className={cn(
21
+ 'cleen-bg-gray/10 cleen-rounded cleen-w-3/4 cleen-h-6',
22
+ pulseClass
23
+ )}
24
+ />
25
+ <div
26
+ className={cn(
27
+ 'cleen-bg-gray/10 cleen-rounded cleen-w-full cleen-h-4',
28
+ pulseClass
29
+ )}
30
+ />
31
+ </div>
32
+
33
+ {/* Questions */}
34
+ <div className="cleen-space-y-6">
35
+ {Array.from({ length: itemCount }).map((_, index) => (
36
+ <div key={index} className="cleen-space-y-3">
37
+ {/* Question Label */}
38
+ <div
39
+ className={cn(
40
+ 'cleen-bg-gray/10 cleen-rounded cleen-w-2/3 cleen-h-4',
41
+ pulseClass
42
+ )}
43
+ />
44
+
45
+ {/* Input Field */}
46
+ <div
47
+ className={cn(
48
+ 'cleen-bg-gray/10 cleen-rounded cleen-w-full cleen-h-10',
49
+ pulseClass
50
+ )}
51
+ />
52
+ </div>
53
+ ))}
54
+ </div>
55
+
56
+ {/* Pagination */}
57
+ <div className="cleen-flex cleen-justify-between cleen-items-center cleen-pt-4">
58
+ <div
59
+ className={cn(
60
+ 'cleen-bg-gray/10 cleen-rounded cleen-w-24 cleen-h-10',
61
+ pulseClass
62
+ )}
63
+ />
64
+ <div
65
+ className={cn(
66
+ 'cleen-bg-gray/10 cleen-rounded cleen-w-24 cleen-h-10',
67
+ pulseClass
68
+ )}
69
+ />
70
+ </div>
71
+ </div>
72
+ </Card>
73
+ </div>
74
+ );
75
+ });
@@ -0,0 +1,73 @@
1
+ import { getPulseAnimationClass } from '@/components/skeletons/styles/skeleton';
2
+ import type { SkeletonComponentProps } from '@/components/skeletons/types/skeleton';
3
+ import { cn } from '@cleen/ui-core';
4
+ import { forwardRef } from 'react';
5
+
6
+ // Tabular data grid with a header row + itemCount body rows
7
+ export const SkeletonDataGrid = forwardRef<
8
+ HTMLDivElement,
9
+ SkeletonComponentProps
10
+ >(function SkeletonDataGrid(
11
+ { className, style, variant = 'default', itemCount = 5 },
12
+ ref
13
+ ) {
14
+ const pulseClass = getPulseAnimationClass(variant);
15
+
16
+ // Column widths to give the grid some visual personality
17
+ const colWidths = [
18
+ 'cleen-w-1/12',
19
+ 'cleen-w-3/12',
20
+ 'cleen-w-2/12',
21
+ 'cleen-w-3/12',
22
+ 'cleen-w-2/12',
23
+ 'cleen-w-1/12',
24
+ ];
25
+
26
+ return (
27
+ <div ref={ref} className={cn('cleen', className)} style={style}>
28
+ <div className="cleen-flex cleen-flex-col cleen-w-full cleen-border cleen-border-gray/15 cleen-rounded-xl cleen-overflow-hidden">
29
+ {/* Header row */}
30
+ <div className="cleen-flex cleen-items-center cleen-gap-3 cleen-px-4 cleen-py-3 cleen-bg-gray/5 cleen-border-b cleen-border-gray/15">
31
+ {colWidths.map((w, i) => (
32
+ <div
33
+ key={i}
34
+ className={cn(
35
+ 'cleen-bg-gray/15 cleen-rounded cleen-h-4 cleen-flex-shrink-0',
36
+ w,
37
+ pulseClass
38
+ )}
39
+ />
40
+ ))}
41
+ </div>
42
+
43
+ {/* Body rows */}
44
+ {Array.from({ length: itemCount }).map((_, rowIndex) => (
45
+ <div
46
+ key={rowIndex}
47
+ className={cn(
48
+ 'cleen-flex cleen-items-center cleen-gap-3 cleen-px-4 cleen-py-3',
49
+ rowIndex < itemCount - 1
50
+ ? 'cleen-border-b cleen-border-gray/10'
51
+ : ''
52
+ )}
53
+ >
54
+ {colWidths.map((w, colIndex) => (
55
+ <div
56
+ key={colIndex}
57
+ className={cn(
58
+ 'cleen-bg-gray/10 cleen-rounded cleen-h-4 cleen-flex-shrink-0',
59
+ // last column is typically an action - give it a rounder shape
60
+ colIndex === colWidths.length - 1
61
+ ? 'cleen-rounded-full'
62
+ : 'cleen-rounded',
63
+ w,
64
+ pulseClass
65
+ )}
66
+ />
67
+ ))}
68
+ </div>
69
+ ))}
70
+ </div>
71
+ </div>
72
+ );
73
+ });
@@ -0,0 +1,50 @@
1
+ import { getPulseAnimationClass } from '@/components/skeletons/styles/skeleton';
2
+ import type { SkeletonComponentProps } from '@/components/skeletons/types/skeleton';
3
+ import { cn } from '@cleen/ui-core';
4
+ import { forwardRef } from 'react';
5
+
6
+ // Form with label + input pairs + a submit button at the bottom
7
+ export const SkeletonForm = forwardRef<HTMLDivElement, SkeletonComponentProps>(
8
+ function SkeletonForm(
9
+ { className, style, variant = 'default', itemCount = 4 },
10
+ ref
11
+ ) {
12
+ const pulseClass = getPulseAnimationClass(variant);
13
+
14
+ return (
15
+ <div ref={ref} className={cn('cleen', className)} style={style}>
16
+ <div className="cleen-flex cleen-flex-col cleen-gap-5 cleen-w-full cleen-bg-white cleen-border cleen-border-gray/15 cleen-rounded-xl cleen-px-6 cleen-py-6">
17
+ {/* Form fields */}
18
+ {Array.from({ length: itemCount }).map((_, index) => (
19
+ <div key={index} className="cleen-flex cleen-flex-col cleen-gap-2">
20
+ {/* Label */}
21
+ <div
22
+ className={cn(
23
+ 'cleen-bg-gray/10 cleen-rounded cleen-w-1/4 cleen-h-3',
24
+ pulseClass
25
+ )}
26
+ />
27
+ {/* Input */}
28
+ <div
29
+ className={cn(
30
+ 'cleen-bg-gray/10 cleen-rounded-lg cleen-w-full cleen-h-10',
31
+ pulseClass
32
+ )}
33
+ />
34
+ </div>
35
+ ))}
36
+
37
+ {/* Submit button */}
38
+ <div className="cleen-flex cleen-justify-end cleen-pt-1">
39
+ <div
40
+ className={cn(
41
+ 'cleen-bg-gray/10 cleen-rounded-lg cleen-w-28 cleen-h-10',
42
+ pulseClass
43
+ )}
44
+ />
45
+ </div>
46
+ </div>
47
+ </div>
48
+ );
49
+ }
50
+ );
@@ -0,0 +1,45 @@
1
+ import { getPulseAnimationClass } from '@/components/skeletons/styles/skeleton';
2
+ import type { SkeletonComponentProps } from '@/components/skeletons/types/skeleton';
3
+ import { cn } from '@cleen/ui-core';
4
+ import { forwardRef } from 'react';
5
+
6
+ // Plain image placeholder with optional caption; defaults to 16:9 vibe
7
+ export const SkeletonImage = forwardRef<HTMLDivElement, SkeletonComponentProps>(
8
+ function SkeletonImage({ className, style, variant = 'default' }, ref) {
9
+ const pulseClass = getPulseAnimationClass(variant);
10
+
11
+ return (
12
+ <div ref={ref} className={cn('cleen', className)} style={style}>
13
+ <div className="cleen-flex cleen-flex-col cleen-gap-2 cleen-w-full">
14
+ {/* Image box ~16:9 */}
15
+ <div
16
+ className={cn(
17
+ 'cleen-relative cleen-bg-gray/10 cleen-rounded-xl cleen-w-full cleen-aspect-video cleen-overflow-hidden',
18
+ pulseClass
19
+ )}
20
+ >
21
+ {/* Subtle landscape icon hint */}
22
+ <div className="cleen-absolute cleen-inset-0 cleen-flex cleen-items-center cleen-justify-center">
23
+ <div
24
+ className={cn(
25
+ 'cleen-flex cleen-flex-col cleen-items-center cleen-gap-1 cleen-opacity-30'
26
+ )}
27
+ >
28
+ <div className="cleen-bg-gray/30 cleen-rounded-full cleen-size-8" />
29
+ <div className="cleen-bg-gray/30 cleen-rounded cleen-w-16 cleen-h-2" />
30
+ </div>
31
+ </div>
32
+ </div>
33
+
34
+ {/* Caption line */}
35
+ <div
36
+ className={cn(
37
+ 'cleen-bg-gray/10 cleen-rounded cleen-w-1/2 cleen-h-3 cleen-mx-auto',
38
+ pulseClass
39
+ )}
40
+ />
41
+ </div>
42
+ </div>
43
+ );
44
+ }
45
+ );
@@ -0,0 +1,130 @@
1
+ import { Card } from '@/components/card';
2
+ import { getPulseAnimationClass } from '@/components/skeletons/styles/skeleton';
3
+ import type { SkeletonComponentProps } from '@/components/skeletons/types/skeleton';
4
+ import { cn } from '@cleen/ui-core';
5
+ import { forwardRef } from 'react';
6
+
7
+ export const SkeletonInfoCard = forwardRef<
8
+ HTMLDivElement,
9
+ SkeletonComponentProps
10
+ >(function SkeletonInfoCard({ className, style, variant = 'default' }, ref) {
11
+ const pulseClass = getPulseAnimationClass(variant);
12
+
13
+ return (
14
+ <div ref={ref} className={cn('cleen', className)} style={style}>
15
+ <div
16
+ className={cn(
17
+ 'cleen-flex cleen-flex-col cleen-items-start cleen-gap-4 cleen-bg-white cleen-px-4 cleen-py-4 cleen-border cleen-border-gray/15 cleen-rounded-xl cleen-h-fit',
18
+ className
19
+ )}
20
+ style={style}
21
+ >
22
+ {/* Tag Section */}
23
+ <div className="cleen-flex cleen-items-center cleen-gap-2">
24
+ <div
25
+ className={cn(
26
+ 'cleen-flex cleen-justify-center cleen-items-center cleen-bg-gray/10 cleen-p-2 cleen-rounded-full cleen-size-8',
27
+ pulseClass
28
+ )}
29
+ />
30
+ <div
31
+ className={cn(
32
+ 'cleen-bg-gray/10 cleen-rounded cleen-w-24 cleen-h-3',
33
+ pulseClass
34
+ )}
35
+ />
36
+ </div>
37
+
38
+ <div className="cleen-space-y-3 cleen-w-full">
39
+ {/* Guidance Section */}
40
+ <div>
41
+ <div
42
+ className={cn(
43
+ 'cleen-bg-gray/10 cleen-mb-1 cleen-rounded cleen-w-20 cleen-h-3',
44
+ pulseClass
45
+ )}
46
+ />
47
+ <Card
48
+ isGlass
49
+ classNames={{
50
+ container: '!cleen-py-3',
51
+ childrenContainer: '!cleen-px-3',
52
+ }}
53
+ >
54
+ <div className="cleen-space-y-2">
55
+ <div
56
+ className={cn(
57
+ 'cleen-bg-gray/10 cleen-rounded cleen-w-full cleen-h-3',
58
+ pulseClass
59
+ )}
60
+ />
61
+ <div
62
+ className={cn(
63
+ 'cleen-bg-gray/10 cleen-rounded cleen-w-5/6 cleen-h-3',
64
+ pulseClass
65
+ )}
66
+ />
67
+ </div>
68
+ </Card>
69
+ </div>
70
+
71
+ {/* Resources Section */}
72
+ <div>
73
+ <div
74
+ className={cn(
75
+ 'cleen-bg-gray/10 cleen-mb-1 cleen-rounded cleen-w-20 cleen-h-3',
76
+ pulseClass
77
+ )}
78
+ />
79
+ <div className="cleen-space-y-2">
80
+ <div
81
+ className={cn(
82
+ 'cleen-bg-gray/10 cleen-rounded cleen-w-3/4 cleen-h-3',
83
+ pulseClass
84
+ )}
85
+ />
86
+ <div
87
+ className={cn(
88
+ 'cleen-bg-gray/10 cleen-rounded cleen-w-2/3 cleen-h-3',
89
+ pulseClass
90
+ )}
91
+ />
92
+ </div>
93
+ </div>
94
+
95
+ {/* Stuck Section */}
96
+ <div>
97
+ <div
98
+ className={cn(
99
+ 'cleen-bg-gray/10 cleen-mb-1 cleen-rounded cleen-w-20 cleen-h-3',
100
+ pulseClass
101
+ )}
102
+ />
103
+ <Card
104
+ isGlass
105
+ classNames={{
106
+ container: '!cleen-py-3',
107
+ childrenContainer: '!cleen-px-3',
108
+ }}
109
+ >
110
+ <div className="cleen-space-y-2">
111
+ <div
112
+ className={cn(
113
+ 'cleen-bg-gray/10 cleen-rounded cleen-w-full cleen-h-3',
114
+ pulseClass
115
+ )}
116
+ />
117
+ <div
118
+ className={cn(
119
+ 'cleen-bg-gray/10 cleen-rounded cleen-w-4/5 cleen-h-3',
120
+ pulseClass
121
+ )}
122
+ />
123
+ </div>
124
+ </Card>
125
+ </div>
126
+ </div>
127
+ </div>
128
+ </div>
129
+ );
130
+ });
@@ -0,0 +1,32 @@
1
+ import { getPulseAnimationClass } from '@/components/skeletons/styles/skeleton';
2
+ import type { SkeletonComponentProps } from '@/components/skeletons/types/skeleton';
3
+ import { cn } from '@cleen/ui-core';
4
+ import { forwardRef } from 'react';
5
+
6
+ // Text input placeholder with optional label above
7
+ export const SkeletonInput = forwardRef<HTMLDivElement, SkeletonComponentProps>(
8
+ function SkeletonInput({ className, style, variant = 'default' }, ref) {
9
+ const pulseClass = getPulseAnimationClass(variant);
10
+
11
+ return (
12
+ <div ref={ref} className={cn('cleen', className)} style={style}>
13
+ <div className="cleen-flex cleen-flex-col cleen-gap-2 cleen-w-full">
14
+ {/* Label */}
15
+ <div
16
+ className={cn(
17
+ 'cleen-bg-gray/10 cleen-rounded cleen-w-1/4 cleen-h-3',
18
+ pulseClass
19
+ )}
20
+ />
21
+ {/* Input field */}
22
+ <div
23
+ className={cn(
24
+ 'cleen-bg-gray/10 cleen-rounded-lg cleen-w-full cleen-h-10 cleen-border cleen-border-gray/10',
25
+ pulseClass
26
+ )}
27
+ />
28
+ </div>
29
+ </div>
30
+ );
31
+ }
32
+ );
@@ -0,0 +1,67 @@
1
+ import { getPulseAnimationClass } from '@/components/skeletons/styles/skeleton';
2
+ import type { SkeletonComponentProps } from '@/components/skeletons/types/skeleton';
3
+ import { cn } from '@cleen/ui-core';
4
+ import { forwardRef } from 'react';
5
+
6
+ // List of icon + text rows
7
+ export const SkeletonList = forwardRef<HTMLDivElement, SkeletonComponentProps>(
8
+ function SkeletonList(
9
+ { className, style, variant = 'default', itemCount = 5 },
10
+ ref
11
+ ) {
12
+ const pulseClass = getPulseAnimationClass(variant);
13
+
14
+ // Alternate text widths so it doesn't look like a brick wall
15
+ const textWidths = [
16
+ 'cleen-w-3/4',
17
+ 'cleen-w-2/3',
18
+ 'cleen-w-4/5',
19
+ 'cleen-w-1/2',
20
+ 'cleen-w-3/5',
21
+ ];
22
+
23
+ return (
24
+ <div ref={ref} className={cn('cleen', className)} style={style}>
25
+ <div className="cleen-flex cleen-flex-col cleen-divide-y cleen-divide-gray/10">
26
+ {Array.from({ length: itemCount }).map((_, index) => (
27
+ <div
28
+ key={index}
29
+ className="cleen-flex cleen-items-center cleen-gap-3 cleen-py-3"
30
+ >
31
+ {/* Icon circle */}
32
+ <div
33
+ className={cn(
34
+ 'cleen-bg-gray/10 cleen-rounded-full cleen-size-8 cleen-shrink-0 cleen-border cleen-border-gray/15',
35
+ pulseClass
36
+ )}
37
+ />
38
+ {/* Text content */}
39
+ <div className="cleen-flex cleen-flex-col cleen-flex-1 cleen-gap-1.5">
40
+ <div
41
+ className={cn(
42
+ 'cleen-bg-gray/10 cleen-rounded cleen-h-4',
43
+ textWidths[index % textWidths.length],
44
+ pulseClass
45
+ )}
46
+ />
47
+ <div
48
+ className={cn(
49
+ 'cleen-bg-gray/10 cleen-rounded cleen-h-3 cleen-w-2/5',
50
+ pulseClass
51
+ )}
52
+ />
53
+ </div>
54
+ {/* Trailing badge/action */}
55
+ <div
56
+ className={cn(
57
+ 'cleen-bg-gray/10 cleen-rounded-full cleen-w-14 cleen-h-5 cleen-shrink-0',
58
+ pulseClass
59
+ )}
60
+ />
61
+ </div>
62
+ ))}
63
+ </div>
64
+ </div>
65
+ );
66
+ }
67
+ );
@@ -0,0 +1,52 @@
1
+ import { getPulseAnimationClass } from '@/components/skeletons/styles/skeleton';
2
+ import type { SkeletonComponentProps } from '@/components/skeletons/types/skeleton';
3
+ import { cn } from '@cleen/ui-core';
4
+ import { forwardRef } from 'react';
5
+
6
+ // Classic paragraph - staggered lines, last one is shorter because that's life
7
+ const lineWidths = [
8
+ 'cleen-w-full',
9
+ 'cleen-w-full',
10
+ 'cleen-w-11/12',
11
+ 'cleen-w-full',
12
+ 'cleen-w-4/5',
13
+ ];
14
+
15
+ export const SkeletonParagraph = forwardRef<
16
+ HTMLDivElement,
17
+ SkeletonComponentProps
18
+ >(function SkeletonParagraph(
19
+ { className, style, variant = 'default', itemCount },
20
+ ref
21
+ ) {
22
+ const pulseClass = getPulseAnimationClass(variant);
23
+ // itemCount overrides the default 5 lines
24
+ const count = itemCount ?? lineWidths.length;
25
+
26
+ return (
27
+ <div ref={ref} className={cn('cleen', className)} style={style}>
28
+ <div className="cleen-flex cleen-flex-col cleen-gap-2 cleen-w-full">
29
+ {Array.from({ length: count }).map((_, index) => {
30
+ // recycle pattern when itemCount > preset widths, narrow the last line
31
+ const w =
32
+ index < lineWidths.length
33
+ ? lineWidths[index]
34
+ : index === count - 1
35
+ ? 'cleen-w-3/5'
36
+ : 'cleen-w-full';
37
+
38
+ return (
39
+ <div
40
+ key={index}
41
+ className={cn(
42
+ 'cleen-bg-gray/10 cleen-rounded cleen-h-3',
43
+ w,
44
+ pulseClass
45
+ )}
46
+ />
47
+ );
48
+ })}
49
+ </div>
50
+ </div>
51
+ );
52
+ });
@@ -0,0 +1,22 @@
1
+ import { getPulseAnimationClass } from '@/components/skeletons/styles/skeleton';
2
+ import type { SkeletonComponentProps } from '@/components/skeletons/types/skeleton';
3
+ import { cn } from '@cleen/ui-core';
4
+ import { forwardRef } from 'react';
5
+
6
+ // Single text line placeholder - the lego brick of skeleton building
7
+ export const SkeletonText = forwardRef<HTMLDivElement, SkeletonComponentProps>(
8
+ function SkeletonText({ className, style, variant = 'default' }, ref) {
9
+ const pulseClass = getPulseAnimationClass(variant);
10
+
11
+ return (
12
+ <div ref={ref} className={cn('cleen', className)} style={style}>
13
+ <div
14
+ className={cn(
15
+ 'cleen-bg-gray/10 cleen-rounded cleen-w-3/4 cleen-h-4',
16
+ pulseClass
17
+ )}
18
+ />
19
+ </div>
20
+ );
21
+ }
22
+ );