@saas-ui/react 3.0.0-alpha.1 → 3.0.0-alpha.10

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 (344) hide show
  1. package/CHANGELOG.md +73 -0
  2. package/dist/chunk-2EUACKRH.js +26 -0
  3. package/dist/chunk-3MO37LYW.js +326 -0
  4. package/dist/chunk-4TR3AOMG.js +33 -0
  5. package/dist/chunk-6LOMIKR5.js +69 -0
  6. package/dist/chunk-6ZNR6N2K.js +45 -0
  7. package/dist/chunk-7VSTNV2B.js +53 -0
  8. package/dist/chunk-BCNPBZZK.js +45 -0
  9. package/dist/chunk-CB52LBJK.js +71 -0
  10. package/dist/chunk-CD2JUFI2.js +231 -0
  11. package/dist/chunk-FJFNGSPL.js +23 -0
  12. package/dist/chunk-GGAKUS66.js +141 -0
  13. package/dist/chunk-H6TFEHY4.js +63 -0
  14. package/dist/chunk-HELHPHIQ.js +35 -0
  15. package/dist/chunk-I2RXEKTB.js +38 -0
  16. package/dist/chunk-JGHXJ3PI.js +102 -0
  17. package/dist/chunk-L356FPLY.js +20 -0
  18. package/dist/chunk-LIYUBUOP.js +119 -0
  19. package/dist/chunk-M7FOBCOV.js +184 -0
  20. package/dist/chunk-NSD5HRIP.js +46 -0
  21. package/dist/chunk-Q6SNJJO2.js +63 -0
  22. package/dist/chunk-QSNSWCTM.js +32 -0
  23. package/dist/chunk-S3CQW7GD.js +100 -0
  24. package/dist/chunk-SA3OGTOO.js +23 -0
  25. package/dist/chunk-SKXSBAOS.js +35 -0
  26. package/dist/{components/breadcrumbs/index.js → chunk-TT4C5VXB.js} +6 -7
  27. package/dist/chunk-TZBAM4AD.js +20 -0
  28. package/dist/chunk-UCQ3LZIE.js +43 -0
  29. package/dist/chunk-ULAJ3JEO.js +32 -0
  30. package/dist/chunk-WYLMBMAH.js +22 -0
  31. package/dist/components/app-shell/index.cjs +1 -1
  32. package/dist/components/app-shell/index.d.cts +1 -1
  33. package/dist/components/app-shell/index.d.ts +1 -1
  34. package/dist/components/app-shell/index.js +3 -40
  35. package/dist/components/avatar/index.cjs +69 -0
  36. package/dist/components/avatar/index.d.cts +18 -0
  37. package/dist/components/avatar/index.d.ts +18 -0
  38. package/dist/components/avatar/index.js +10 -0
  39. package/dist/components/{breadcrumbs → breadcrumb}/index.cjs +8 -10
  40. package/dist/components/{breadcrumbs → breadcrumb}/index.d.cts +3 -4
  41. package/dist/components/{breadcrumbs → breadcrumb}/index.d.ts +3 -4
  42. package/dist/components/breadcrumb/index.js +8 -0
  43. package/dist/components/button/index.js +3 -40
  44. package/dist/components/checkbox/index.js +3 -15
  45. package/dist/components/command/index.cjs +1 -1
  46. package/dist/components/command/index.js +3 -28
  47. package/dist/components/dialog/index.cjs +19 -58
  48. package/dist/components/dialog/index.js +4 -67
  49. package/dist/components/drawer/index.cjs +23 -64
  50. package/dist/components/drawer/index.d.cts +2 -2
  51. package/dist/components/drawer/index.d.ts +2 -2
  52. package/dist/components/drawer/index.js +4 -59
  53. package/dist/components/empty-state/index.cjs +48 -0
  54. package/dist/components/empty-state/index.d.cts +11 -0
  55. package/dist/components/empty-state/index.d.ts +11 -0
  56. package/dist/components/empty-state/index.js +8 -0
  57. package/dist/components/grid-list/index.cjs +68 -0
  58. package/dist/components/grid-list/index.d.cts +22 -0
  59. package/dist/components/grid-list/index.d.ts +22 -0
  60. package/dist/components/grid-list/index.js +8 -0
  61. package/dist/components/icon-badge/index.cjs +1 -1
  62. package/dist/components/icon-badge/index.d.cts +1 -1
  63. package/dist/components/icon-badge/index.d.ts +1 -1
  64. package/dist/components/icon-badge/index.js +3 -33
  65. package/dist/components/link/index.js +3 -14
  66. package/dist/components/loading-overlay/index.cjs +42 -1879
  67. package/dist/components/loading-overlay/index.d.cts +19 -6
  68. package/dist/components/loading-overlay/index.d.ts +19 -6
  69. package/dist/components/loading-overlay/index.js +7 -1874
  70. package/dist/components/menu/index.cjs +249 -0
  71. package/dist/components/menu/index.d.cts +39 -0
  72. package/dist/components/menu/index.d.ts +39 -0
  73. package/dist/components/menu/index.js +11 -0
  74. package/dist/components/navbar/index.cjs +61 -15
  75. package/dist/components/navbar/index.d.cts +12 -9
  76. package/dist/components/navbar/index.d.ts +12 -9
  77. package/dist/components/navbar/index.js +5 -38
  78. package/dist/components/number-input/index.js +3 -26
  79. package/dist/components/password-input/index.js +3 -225
  80. package/dist/components/persona/index.cjs +52 -15
  81. package/dist/components/persona/index.d.cts +22 -2
  82. package/dist/components/persona/index.d.ts +22 -2
  83. package/dist/components/persona/index.js +7 -144
  84. package/dist/components/pin-input/index.js +3 -21
  85. package/dist/components/radio/index.js +4 -16
  86. package/dist/components/search-input/index.js +4 -114
  87. package/dist/components/segmented-control/index.cjs +60 -0
  88. package/dist/components/segmented-control/index.d.cts +14 -0
  89. package/dist/components/segmented-control/index.d.ts +14 -0
  90. package/dist/components/segmented-control/index.js +8 -0
  91. package/dist/components/select/index.js +4 -94
  92. package/dist/components/sidebar/index.cjs +64 -32
  93. package/dist/components/sidebar/index.d.cts +24 -23
  94. package/dist/components/sidebar/index.d.ts +24 -23
  95. package/dist/components/sidebar/index.js +7 -101
  96. package/dist/components/steps/index.cjs +7 -9
  97. package/dist/components/steps/index.d.cts +2 -2
  98. package/dist/components/steps/index.d.ts +2 -2
  99. package/dist/components/steps/index.js +6 -67
  100. package/dist/components/switch/index.js +3 -18
  101. package/dist/components/toaster/index.cjs +54 -0
  102. package/dist/components/toaster/index.d.cts +10 -0
  103. package/dist/components/toaster/index.d.ts +10 -0
  104. package/dist/components/toaster/index.js +10 -0
  105. package/dist/components/tooltip/index.cjs +57 -0
  106. package/dist/components/tooltip/index.d.cts +14 -0
  107. package/dist/components/tooltip/index.d.ts +14 -0
  108. package/dist/components/tooltip/index.js +8 -0
  109. package/dist/index.cjs +2357 -220
  110. package/dist/index.d.cts +38 -2
  111. package/dist/index.d.ts +38 -2
  112. package/dist/index.js +515 -276
  113. package/dist/theme/tokens/colors.cjs +349 -0
  114. package/dist/theme/tokens/colors.d.cts +856 -0
  115. package/dist/theme/tokens/colors.d.ts +856 -0
  116. package/dist/theme/tokens/colors.js +8 -0
  117. package/package.json +12 -7
  118. package/dist/chunk-VBIVLREP.js +0 -45
  119. package/src/components/app-shell/app-shell.recipe.ts +0 -52
  120. package/src/components/app-shell/app-shell.stories.tsx +0 -51
  121. package/src/components/app-shell/app-shell.tsx +0 -94
  122. package/src/components/app-shell/index.ts +0 -3
  123. package/src/components/breadcrumbs/breadcrumb.stories.tsx +0 -17
  124. package/src/components/breadcrumbs/breadcrumb.tsx +0 -36
  125. package/src/components/breadcrumbs/index.ts +0 -1
  126. package/src/components/breadcrumbs/namespace.ts +0 -8
  127. package/src/components/button/button.recipe.ts +0 -182
  128. package/src/components/button/button.stories.tsx +0 -99
  129. package/src/components/button/button.tsx +0 -55
  130. package/src/components/button/index.ts +0 -2
  131. package/src/components/checkbox/checkbox.tsx +0 -26
  132. package/src/components/checkbox/index.ts +0 -2
  133. package/src/components/close-button/close-button.stories.tsx +0 -12
  134. package/src/components/close-button/close-button.tsx +0 -18
  135. package/src/components/close-button/index.ts +0 -2
  136. package/src/components/command/command.recipe.ts +0 -17
  137. package/src/components/command/command.stories.tsx +0 -47
  138. package/src/components/command/command.tsx +0 -50
  139. package/src/components/command/index.ts +0 -1
  140. package/src/components/dialog/dialog.tsx +0 -67
  141. package/src/components/dialog/index.ts +0 -1
  142. package/src/components/dialog/namespace.ts +0 -18
  143. package/src/components/drawer/drawer.tsx +0 -57
  144. package/src/components/drawer/index.ts +0 -3
  145. package/src/components/drawer/namespace.ts +0 -19
  146. package/src/components/grid-list/grid-list.recipe.ts +0 -113
  147. package/src/components/icon-badge/icon-badge.recipe.ts +0 -57
  148. package/src/components/icon-badge/icon-badge.stories.tsx +0 -38
  149. package/src/components/icon-badge/icon-badge.tsx +0 -59
  150. package/src/components/icon-badge/index.ts +0 -2
  151. package/src/components/icons/create-icon.tsx +0 -41
  152. package/src/components/icons/icons.tsx +0 -119
  153. package/src/components/icons/index.ts +0 -1
  154. package/src/components/input-group/index.ts +0 -1
  155. package/src/components/input-group/input-group.tsx +0 -46
  156. package/src/components/link/index.ts +0 -2
  157. package/src/components/link/link.stories.tsx +0 -17
  158. package/src/components/link/link.test.tsx +0 -33
  159. package/src/components/link/link.tsx +0 -27
  160. package/src/components/loading-overlay/index.ts +0 -1
  161. package/src/components/loading-overlay/loading-overlay.recipe.ts +0 -61
  162. package/src/components/loading-overlay/loading-overlay.stories.tsx +0 -68
  163. package/src/components/loading-overlay/loading-overlay.tsx +0 -54
  164. package/src/components/loading-overlay/namespace.ts +0 -7
  165. package/src/components/navbar/index.ts +0 -1
  166. package/src/components/navbar/namespace.ts +0 -9
  167. package/src/components/navbar/navbar.recipe.ts +0 -109
  168. package/src/components/navbar/navbar.stories.tsx +0 -435
  169. package/src/components/navbar/navbar.test.tsx +0 -49
  170. package/src/components/navbar/navbar.tsx +0 -39
  171. package/src/components/number-input/index.ts +0 -2
  172. package/src/components/number-input/number-input.tsx +0 -41
  173. package/src/components/password-input/index.ts +0 -2
  174. package/src/components/password-input/password-input.tsx +0 -93
  175. package/src/components/persona/index.ts +0 -2
  176. package/src/components/persona/namespace.ts +0 -18
  177. package/src/components/persona/persona-primitive.tsx +0 -220
  178. package/src/components/persona/persona.recipe.ts +0 -94
  179. package/src/components/persona/persona.stories.tsx +0 -101
  180. package/src/components/persona/persona.tsx +0 -142
  181. package/src/components/pin-input/index.ts +0 -2
  182. package/src/components/pin-input/pin-input.tsx +0 -36
  183. package/src/components/radio/index.ts +0 -2
  184. package/src/components/radio/radio.tsx +0 -27
  185. package/src/components/search-input/index.ts +0 -2
  186. package/src/components/search-input/search-input.stories.tsx +0 -63
  187. package/src/components/search-input/search-input.tsx +0 -134
  188. package/src/components/select/index.ts +0 -1
  189. package/src/components/select/namespace.ts +0 -18
  190. package/src/components/select/select.tsx +0 -135
  191. package/src/components/sidebar/index.ts +0 -7
  192. package/src/components/sidebar/namespace.ts +0 -27
  193. package/src/components/sidebar/sidebar-item.recipe.ts +0 -65
  194. package/src/components/sidebar/sidebar.recipe.ts +0 -237
  195. package/src/components/sidebar/sidebar.stories.tsx +0 -903
  196. package/src/components/sidebar/sidebar.tsx +0 -208
  197. package/src/components/spinner/index.ts +0 -2
  198. package/src/components/spinner/spinner.stories.tsx +0 -19
  199. package/src/components/spinner/spinner.tsx +0 -21
  200. package/src/components/steps/index.ts +0 -1
  201. package/src/components/steps/namespace.ts +0 -16
  202. package/src/components/steps/steps.tsx +0 -82
  203. package/src/components/switch/index.ts +0 -3
  204. package/src/components/switch/switch.tsx +0 -39
  205. package/src/compositions/accordion.tsx +0 -47
  206. package/src/compositions/action-bar.tsx +0 -40
  207. package/src/compositions/alert.tsx +0 -51
  208. package/src/compositions/avatar.tsx +0 -74
  209. package/src/compositions/blockquote.tsx +0 -31
  210. package/src/compositions/checkbox-card.tsx +0 -57
  211. package/src/compositions/checkbox.tsx +0 -25
  212. package/src/compositions/clipboard.tsx +0 -107
  213. package/src/compositions/color-mode.tsx +0 -65
  214. package/src/compositions/data-list.tsx +0 -37
  215. package/src/compositions/empty-state.tsx +0 -34
  216. package/src/compositions/field.tsx +0 -33
  217. package/src/compositions/file-button.tsx +0 -166
  218. package/src/compositions/hover-card.tsx +0 -35
  219. package/src/compositions/link-button.tsx +0 -12
  220. package/src/compositions/menu.tsx +0 -108
  221. package/src/compositions/native-select.tsx +0 -57
  222. package/src/compositions/pagination.tsx +0 -207
  223. package/src/compositions/popover.tsx +0 -58
  224. package/src/compositions/progress-circle.tsx +0 -37
  225. package/src/compositions/progress.tsx +0 -40
  226. package/src/compositions/prose.tsx +0 -264
  227. package/src/compositions/provider.tsx +0 -12
  228. package/src/compositions/radio-card.tsx +0 -57
  229. package/src/compositions/radio.tsx +0 -24
  230. package/src/compositions/rating.tsx +0 -27
  231. package/src/compositions/segmented-control.tsx +0 -47
  232. package/src/compositions/skeleton.tsx +0 -44
  233. package/src/compositions/slider.tsx +0 -53
  234. package/src/compositions/stat.tsx +0 -75
  235. package/src/compositions/status.tsx +0 -29
  236. package/src/compositions/stepper-input.tsx +0 -49
  237. package/src/compositions/tag.tsx +0 -39
  238. package/src/compositions/timeline.tsx +0 -17
  239. package/src/compositions/toaster.tsx +0 -43
  240. package/src/compositions/toggle-tip.tsx +0 -62
  241. package/src/compositions/tooltip.tsx +0 -46
  242. package/src/index.ts +0 -7
  243. package/src/preset.ts +0 -9
  244. package/src/provider/index.ts +0 -4
  245. package/src/provider/sui-provider.tsx +0 -34
  246. package/src/provider/use-link.test.tsx +0 -60
  247. package/src/provider/use-link.tsx +0 -13
  248. package/src/styled-system/create-recipe-context.tsx +0 -91
  249. package/src/styled-system/create-slot-recipe-context.tsx +0 -188
  250. package/src/styled-system/empty.ts +0 -7
  251. package/src/styled-system/factory.types.ts +0 -11
  252. package/src/theme/animation-styles.ts +0 -53
  253. package/src/theme/breakpoints.ts +0 -11
  254. package/src/theme/conditions.ts +0 -26
  255. package/src/theme/fluid-font-sizes.ts +0 -65
  256. package/src/theme/global-css.ts +0 -94
  257. package/src/theme/index.ts +0 -72
  258. package/src/theme/layer-styles.ts +0 -116
  259. package/src/theme/recipes/chakra/accordion.ts +0 -145
  260. package/src/theme/recipes/chakra/action-bar.ts +0 -62
  261. package/src/theme/recipes/chakra/alert.ts +0 -157
  262. package/src/theme/recipes/chakra/avatar.ts +0 -141
  263. package/src/theme/recipes/chakra/badge.ts +0 -67
  264. package/src/theme/recipes/chakra/blockquote.ts +0 -83
  265. package/src/theme/recipes/chakra/breadcrumb.ts +0 -94
  266. package/src/theme/recipes/chakra/card.ts +0 -99
  267. package/src/theme/recipes/chakra/checkbox-card.ts +0 -212
  268. package/src/theme/recipes/chakra/checkbox.ts +0 -70
  269. package/src/theme/recipes/chakra/checkmark.ts +0 -83
  270. package/src/theme/recipes/chakra/code.ts +0 -17
  271. package/src/theme/recipes/chakra/collapsible.ts +0 -20
  272. package/src/theme/recipes/chakra/container.ts +0 -26
  273. package/src/theme/recipes/chakra/data-list.ts +0 -80
  274. package/src/theme/recipes/chakra/dialog.ts +0 -225
  275. package/src/theme/recipes/chakra/drawer.ts +0 -201
  276. package/src/theme/recipes/chakra/editable.ts +0 -88
  277. package/src/theme/recipes/chakra/empty-state.ts +0 -88
  278. package/src/theme/recipes/chakra/field.ts +0 -68
  279. package/src/theme/recipes/chakra/fieldset.ts +0 -62
  280. package/src/theme/recipes/chakra/file-upload.ts +0 -96
  281. package/src/theme/recipes/chakra/heading.ts +0 -27
  282. package/src/theme/recipes/chakra/hover-card.ts +0 -68
  283. package/src/theme/recipes/chakra/icon.ts +0 -30
  284. package/src/theme/recipes/chakra/input-addon.ts +0 -40
  285. package/src/theme/recipes/chakra/input.ts +0 -96
  286. package/src/theme/recipes/chakra/kbd.ts +0 -60
  287. package/src/theme/recipes/chakra/link.ts +0 -37
  288. package/src/theme/recipes/chakra/list.ts +0 -67
  289. package/src/theme/recipes/chakra/mark.ts +0 -27
  290. package/src/theme/recipes/chakra/menu.ts +0 -124
  291. package/src/theme/recipes/chakra/native-select.ts +0 -140
  292. package/src/theme/recipes/chakra/number-input.ts +0 -115
  293. package/src/theme/recipes/chakra/pin-input.ts +0 -27
  294. package/src/theme/recipes/chakra/popover.ts +0 -86
  295. package/src/theme/recipes/chakra/progress-circle.ts +0 -94
  296. package/src/theme/recipes/chakra/progress.ts +0 -127
  297. package/src/theme/recipes/chakra/radio-card.ts +0 -220
  298. package/src/theme/recipes/chakra/radio-group.ts +0 -72
  299. package/src/theme/recipes/chakra/radiomark.ts +0 -107
  300. package/src/theme/recipes/chakra/rating-group.ts +0 -94
  301. package/src/theme/recipes/chakra/segment-group.ts +0 -117
  302. package/src/theme/recipes/chakra/select.ts +0 -282
  303. package/src/theme/recipes/chakra/separator.ts +0 -51
  304. package/src/theme/recipes/chakra/skeleton.ts +0 -53
  305. package/src/theme/recipes/chakra/skip-nav-link.ts +0 -34
  306. package/src/theme/recipes/chakra/slider.ts +0 -178
  307. package/src/theme/recipes/chakra/spinner.ts +0 -32
  308. package/src/theme/recipes/chakra/stat.ts +0 -79
  309. package/src/theme/recipes/chakra/status.ts +0 -48
  310. package/src/theme/recipes/chakra/steps.ts +0 -218
  311. package/src/theme/recipes/chakra/switch.ts +0 -167
  312. package/src/theme/recipes/chakra/table.ts +0 -172
  313. package/src/theme/recipes/chakra/tabs.ts +0 -280
  314. package/src/theme/recipes/chakra/tag.ts +0 -131
  315. package/src/theme/recipes/chakra/textarea.ts +0 -88
  316. package/src/theme/recipes/chakra/timeline.ts +0 -138
  317. package/src/theme/recipes/chakra/toast.ts +0 -96
  318. package/src/theme/recipes/chakra/tooltip.ts +0 -40
  319. package/src/theme/recipes.ts +0 -46
  320. package/src/theme/semantic-tokens/colors.ts +0 -403
  321. package/src/theme/semantic-tokens/radii.ts +0 -7
  322. package/src/theme/semantic-tokens/shadows.ts +0 -52
  323. package/src/theme/slot-recipes.ts +0 -104
  324. package/src/theme/text-styles.ts +0 -39
  325. package/src/theme/tokens/animations.ts +0 -8
  326. package/src/theme/tokens/aspect-ratios.ts +0 -10
  327. package/src/theme/tokens/blurs.ts +0 -12
  328. package/src/theme/tokens/borders.ts +0 -9
  329. package/src/theme/tokens/colors.ts +0 -177
  330. package/src/theme/tokens/cursor.ts +0 -12
  331. package/src/theme/tokens/durations.ts +0 -11
  332. package/src/theme/tokens/easings.ts +0 -10
  333. package/src/theme/tokens/font-sizes.ts +0 -20
  334. package/src/theme/tokens/font-weights.ts +0 -13
  335. package/src/theme/tokens/fonts.ts +0 -15
  336. package/src/theme/tokens/keyframes.ts +0 -173
  337. package/src/theme/tokens/letter-spacing.ts +0 -9
  338. package/src/theme/tokens/line-heights.ts +0 -19
  339. package/src/theme/tokens/radius.ts +0 -18
  340. package/src/theme/tokens/sizes.ts +0 -71
  341. package/src/theme/tokens/spacing.ts +0 -38
  342. package/src/theme/tokens/z-indices.ts +0 -34
  343. package/src/theme/utils.ts +0 -46
  344. /package/dist/{chunk-KHRLZUV4.js → chunk-O2WVT2BP.js} +0 -0
@@ -1,220 +0,0 @@
1
- import React, { forwardRef } from 'react'
2
-
3
- import {
4
- Avatar,
5
- type AvatarRootProps,
6
- HTMLChakraProps,
7
- type ImageProps,
8
- SlotRecipeProps,
9
- chakra,
10
- createSlotRecipeContext,
11
- } from '@chakra-ui/react'
12
- import { dataAttr } from '@saas-ui/core/utils'
13
-
14
- const {
15
- useStyles: usePersonaStyles,
16
- withProvider,
17
- withContext,
18
- } = createSlotRecipeContext({
19
- key: 'persona',
20
- })
21
-
22
- export { usePersonaStyles }
23
-
24
- export type Presence = 'online' | 'offline' | 'busy' | 'dnd' | 'away'
25
-
26
- interface PresenceConfig {
27
- label: string
28
- color: string
29
- }
30
-
31
- export type PresenceOptions<P extends string = Presence> = Record<
32
- P,
33
- PresenceConfig
34
- >
35
-
36
- /**
37
- * The presence configuration object.
38
- *
39
- * Default presence values: online, offline, busy, dnd, away
40
- *
41
- * You can overwrite colors in the theme semantic tokens.
42
- * theme.semanticTokens.colors['presence.online'] = 'cyan.500'
43
- *
44
- * Or add a custom presence value
45
- * theme.semanticTokens.colors['presence.vacay'] = 'blue.500'
46
- *
47
- * @see Docs https://saas-ui.dev/docs/components/data-display/persona
48
- */
49
- export const defaultPresenceOptions: PresenceOptions = {
50
- online: {
51
- label: 'Online',
52
- color: 'presence.online',
53
- },
54
- offline: {
55
- label: 'Offline',
56
- color: 'presence.offline',
57
- },
58
- busy: {
59
- label: 'Busy',
60
- color: 'presence.busy',
61
- },
62
- dnd: {
63
- label: 'Do-not-disturb',
64
- color: 'presence.dnd',
65
- },
66
- away: {
67
- label: 'Away',
68
- color: 'presence.away',
69
- },
70
- }
71
-
72
- export interface PersonaRootProps
73
- extends HTMLChakraProps<'div'>,
74
- SlotRecipeProps<'persona'> {
75
- /**
76
- * Indicates that a person is out of office. Changes the presence badge style.
77
- */
78
- outOfOffice?: boolean
79
- /**
80
- * The presence status of the person
81
- */
82
- presence?: Presence
83
- }
84
-
85
- /**
86
- * The root component that provides context and styles.
87
- *
88
- * @see Docs https://saas-ui.dev/docs/components/data-display/persona
89
- */
90
- export const PersonaRoot = withProvider<HTMLDivElement, PersonaRootProps>(
91
- forwardRef((props, ref) => {
92
- const { outOfOffice, presence, ...rest } = props
93
-
94
- return (
95
- <chakra.div
96
- ref={ref}
97
- {...rest}
98
- data-out-of-office={dataAttr(outOfOffice)}
99
- data-presence={presence}
100
- css={[
101
- presence
102
- ? {
103
- '--persona-presence': `colors.presence.${presence}`,
104
- }
105
- : undefined,
106
- rest.css,
107
- ]}
108
- />
109
- )
110
- }),
111
- 'root',
112
- )
113
-
114
- interface PersonaAvatarOptions {
115
- /**
116
- * The name of the person in the avatar.
117
- *
118
- * - if `src` has loaded, the name will be used as the `alt` attribute of the `img`
119
- * - If `src` is not loaded, the name will be used to create the initials
120
- */
121
- name?: string
122
- }
123
-
124
- export interface PersonaAvatarProps
125
- extends PersonaAvatarOptions,
126
- AvatarRootProps {
127
- src?: string
128
- srcSet?: string
129
- loading?: ImageProps['loading']
130
- icon?: React.ReactElement
131
- fallback?: React.ReactNode
132
- getInitials?: (name?: string | null) => string | null
133
- }
134
-
135
- /**
136
- * An avatar with optional status badge.
137
- *
138
- * @see Docs https://saas-ui.dev/docs/components/data-display/persona
139
- */
140
- export const PersonaAvatar = forwardRef<HTMLDivElement, PersonaAvatarProps>(
141
- (props, ref) => {
142
- const {
143
- name,
144
- getInitials = (name?: string | null) => name?.[0],
145
- icon,
146
- loading,
147
- onError,
148
- src,
149
- srcSet,
150
- children,
151
- ...rest
152
- } = props
153
-
154
- return (
155
- <Avatar.Root ref={ref} {...rest}>
156
- <Avatar.Fallback>{getInitials(name)}</Avatar.Fallback>
157
- <Avatar.Image
158
- src={src}
159
- srcSet={srcSet}
160
- loading={loading}
161
- onError={onError}
162
- />
163
- {children}
164
- </Avatar.Root>
165
- )
166
- },
167
- )
168
-
169
- export interface PersonaPresenceBadgeProps extends HTMLChakraProps<'span'> {}
170
-
171
- export const PersonaPresenceBadge = withContext<
172
- HTMLSpanElement,
173
- PersonaPresenceBadgeProps
174
- >('span', 'presence')
175
-
176
- export interface PersonaDetailsProps extends HTMLChakraProps<'div'> {}
177
-
178
- /**
179
- * Wrapper component for the labels.
180
- *
181
- * @see Docs https://saas-ui.dev/docs/components/data-display/persona
182
- */
183
- export const PersonaDetails = withContext<HTMLDivElement, PersonaDetailsProps>(
184
- 'div',
185
- 'details',
186
- )
187
-
188
- export interface PersonaLabelProps extends HTMLChakraProps<'span'> {}
189
-
190
- /**
191
- * The main label, usually a name.
192
- *
193
- * @see Docs https://saas-ui.dev/docs/components/data-display/persona
194
- */
195
- export const PersonaLabel = withContext<HTMLSpanElement, PersonaLabelProps>(
196
- 'span',
197
- 'label',
198
- )
199
-
200
- PersonaLabel.displayName = 'PersonaLabel'
201
-
202
- /**
203
- * The secondary label, usually the role of a person.
204
- *
205
- * @see Docs https://saas-ui.dev/docs/components/data-display/persona
206
- */
207
- export const PersonaSecondaryLabel = withContext<
208
- HTMLSpanElement,
209
- PersonaLabelProps
210
- >('span', 'secondaryLabel')
211
-
212
- /**
213
- * The tertiary label, typically a status message.
214
- *
215
- * @see Docs https://saas-ui.dev/docs/components/data-display/persona
216
- */
217
- export const PersonaTertiaryLabel = withContext<
218
- HTMLSpanElement,
219
- PersonaLabelProps
220
- >('span', 'tertiaryLabel')
@@ -1,94 +0,0 @@
1
- import { defineSlotRecipe, defineStyle } from '@chakra-ui/react'
2
-
3
- const baseStyleLabel = defineStyle({
4
- overflow: 'hidden',
5
- whiteSpace: 'nowrap',
6
- textOverflow: 'ellipsis',
7
- minW: 0,
8
- })
9
-
10
- export const personaSlotRecipe = defineSlotRecipe({
11
- className: 'sui-persona',
12
- slots: [
13
- 'root',
14
- 'avatar',
15
- 'presence',
16
- 'details',
17
- 'label',
18
- 'secondaryLabel',
19
- 'tertiaryLabel',
20
- ],
21
- base: {
22
- root: {
23
- display: 'flex',
24
- flexDirection: 'row',
25
- alignItems: 'center',
26
- },
27
- presence: {
28
- display: 'flex',
29
- alignItems: 'center',
30
- justifyContent: 'center',
31
- position: 'absolute',
32
- bottom: 0,
33
- right: 0,
34
- boxSize: '1em',
35
- transform: 'translate(15%, 15%)',
36
- borderWidth: '0.15em',
37
- borderRadius: '50%',
38
- borderColor: 'bg.panel',
39
- bg: 'var(--persona-presence)',
40
- },
41
- details: {
42
- display: 'flex',
43
- flexDirection: 'column',
44
- minW: 0,
45
- lineHeight: 'short',
46
- },
47
- label: baseStyleLabel,
48
- secondaryLabel: {
49
- ...baseStyleLabel,
50
- color: 'fg.muted',
51
- },
52
- tertiaryLabel: {
53
- ...baseStyleLabel,
54
- color: 'fg.muted',
55
- },
56
- },
57
- variants: {
58
- size: {
59
- xs: {
60
- details: { ms: 2 },
61
- label: { fontSize: 'xs' },
62
- secondaryLabel: { display: 'none' },
63
- tertiaryLabel: { display: 'none' },
64
- },
65
- sm: {
66
- details: { ms: 2 },
67
- label: { fontSize: 'sm' },
68
- secondaryLabel: { fontSize: 'xs' },
69
- tertiaryLabel: { display: 'none' },
70
- },
71
- md: {
72
- details: { ms: 2 },
73
- label: { fontSize: 'sm' },
74
- secondaryLabel: { fontSize: 'xs' },
75
- tertiaryLabel: { display: 'none' },
76
- },
77
- lg: {
78
- details: { ms: 3 },
79
- label: { fontSize: 'md' },
80
- secondaryLabel: { fontSize: 'sm' },
81
- tertiaryLabel: { fontSize: 'sm' },
82
- },
83
- xl: {
84
- details: { ms: 4 },
85
- label: { fontSize: 'lg' },
86
- secondaryLabel: { fontSize: 'md' },
87
- tertiaryLabel: { fontSize: 'md' },
88
- },
89
- },
90
- },
91
- defaultVariants: {
92
- size: 'md',
93
- },
94
- })
@@ -1,101 +0,0 @@
1
- import * as React from 'react'
2
-
3
- import { Container, VStack } from '@chakra-ui/react'
4
- import { FiMinus, FiPhone } from 'react-icons/fi'
5
-
6
- import { Persona } from './persona.tsx'
7
-
8
- export default {
9
- title: 'Components/Persona',
10
- decorators: [
11
- (Story: any) => (
12
- <Container mt="40px">
13
- <Story />
14
- </Container>
15
- ),
16
- ],
17
- }
18
-
19
- const persona = {
20
- name: 'Elliot Alderson',
21
- presence: 'online',
22
- secondaryLabel: 'Mr Robot',
23
- tertiaryLabel: 'Away for lunch',
24
- }
25
-
26
- export const Basic = () => (
27
- <>
28
- <VStack gap="8">
29
- <Persona {...persona} presence="online" size="xs" />
30
-
31
- <Persona {...persona} presence="online" size="sm" />
32
-
33
- <Persona {...persona} presence="online" size="md" />
34
-
35
- <Persona {...persona} presence="online" size="lg" />
36
-
37
- <Persona {...persona} presence="online" size="xl" />
38
- </VStack>
39
- </>
40
- )
41
-
42
- export const HideDetails = () => (
43
- <>
44
- <VStack gap="8">
45
- <Persona {...persona} hideDetails presence="offline" />
46
- </VStack>
47
- </>
48
- )
49
-
50
- export const BadgeIcon = () => (
51
- <>
52
- <VStack gap="8">
53
- <Persona
54
- {...persona}
55
- presenceIcon={<FiMinus size="0.4em" />}
56
- size="xl"
57
- presence="busy"
58
- />
59
- </VStack>
60
- </>
61
- )
62
-
63
- export const LabelWithIcon = () => (
64
- <>
65
- <VStack gap="8">
66
- <Persona
67
- {...persona}
68
- presence="busy"
69
- secondaryLabel={
70
- <>
71
- <FiPhone /> On a call
72
- </>
73
- }
74
- />
75
- </VStack>
76
- </>
77
- )
78
-
79
- export const OutOfOffice = () => (
80
- <>
81
- <VStack gap="8">
82
- <Persona {...persona} presence="offline" size="xs" isOutOfOffice />
83
- <Persona {...persona} presence="online" isOutOfOffice />
84
- <Persona {...persona} presence="away" size="xl" isOutOfOffice />
85
- </VStack>
86
- </>
87
- )
88
-
89
- export const Overflow = () => (
90
- <>
91
- <VStack gap="8">
92
- <Persona
93
- {...persona}
94
- secondaryLabel="This is a very long text and should overflow."
95
- presence="offline"
96
- isOutOfOffice
97
- maxW="200px"
98
- />
99
- </VStack>
100
- </>
101
- )
@@ -1,142 +0,0 @@
1
- import * as React from 'react'
2
-
3
- import * as PersonaPrimitive from './namespace.ts'
4
-
5
- interface PersonaOptions {
6
- /**
7
- * The name of the person in the avatar.
8
- *
9
- * - if `src` has loaded, the name will be used as the `alt` attribute of the `img`
10
- * - If `src` is not loaded, the name will be used to create the initials
11
- */
12
- name?: string
13
- /**
14
- * The presence status of the person
15
- *
16
- * If set will add an AvatarBadge with color configured in `Presence`
17
- * Default presence options:
18
- * - online
19
- * - offline
20
- * - busy
21
- * - dnd
22
- * - away
23
- */
24
- presence?: PersonaPrimitive.Presence
25
- /**
26
- * The icon shown in the AvatarBadge
27
- */
28
- presenceIcon?: React.ReactNode
29
- /**
30
- * Indicates that a person is out of office. Changes the presence badge style.
31
- */
32
- isOutOfOffice?: boolean
33
- /**
34
- * Primary label of the persona, defaults to the name
35
- */
36
- label?: React.ReactNode
37
- /**
38
- * Secondary label, usually the role of the person
39
- * Only visible from md size and up.
40
- */
41
- secondaryLabel?: React.ReactNode
42
- /**
43
- * Tertiary label, usually the status of the person.
44
- * Only visible from lg size and up.
45
- */
46
- tertiaryLabel?: React.ReactNode
47
- /**
48
- * Hide the persona details next to the avatar.
49
- */
50
- hideDetails?: boolean
51
- }
52
-
53
- export interface PersonaProps
54
- extends PersonaOptions,
55
- PersonaPrimitive.AvatarProps,
56
- PersonaPrimitive.RootProps {}
57
-
58
- /**
59
- * The wrapper component that handles default composition.
60
- *
61
- * @see Docs https://saas-ui.dev/docs/components/data-display/persona
62
- */
63
- export const Persona = React.forwardRef<HTMLDivElement, PersonaProps>(
64
- (props, ref) => {
65
- const {
66
- name,
67
- presence,
68
- presenceIcon,
69
- isOutOfOffice,
70
- label,
71
- secondaryLabel,
72
- tertiaryLabel,
73
- size,
74
- hideDetails,
75
- children,
76
- /** Avatar props */
77
- getInitials,
78
- icon,
79
- loading,
80
- onError,
81
- src,
82
- srcSet,
83
- ...rest
84
- } = props
85
-
86
- return (
87
- <PersonaPrimitive.Root
88
- ref={ref}
89
- outOfOffice={isOutOfOffice}
90
- presence={presence}
91
- {...rest}
92
- >
93
- <PersonaPrimitive.Avatar
94
- name={name}
95
- size={size}
96
- getInitials={getInitials}
97
- icon={icon}
98
- loading={loading}
99
- onError={onError}
100
- src={src}
101
- srcSet={srcSet}
102
- >
103
- <PersonaPrimitive.PresenceBadge>
104
- {presenceIcon}
105
- </PersonaPrimitive.PresenceBadge>
106
- </PersonaPrimitive.Avatar>
107
-
108
- {!hideDetails && (
109
- <PersonaPrimitive.Details>
110
- <PersonaPrimitive.Label>{label || name}</PersonaPrimitive.Label>
111
- {secondaryLabel && (
112
- <PersonaPrimitive.SecondaryLabel>
113
- {secondaryLabel}
114
- </PersonaPrimitive.SecondaryLabel>
115
- )}
116
- {tertiaryLabel && (
117
- <PersonaPrimitive.TertiaryLabel>
118
- {tertiaryLabel}
119
- </PersonaPrimitive.TertiaryLabel>
120
- )}
121
- {children}
122
- </PersonaPrimitive.Details>
123
- )}
124
- </PersonaPrimitive.Root>
125
- )
126
- },
127
- )
128
-
129
- Persona.displayName = 'Persona'
130
-
131
- export interface PersonaAvatarProps
132
- extends Omit<
133
- PersonaProps,
134
- 'hideDetails' | 'label' | 'secondaryLabel' | 'tertiaryLabel' | 'children'
135
- > {}
136
-
137
- export const PersonaAvatar = React.forwardRef<
138
- HTMLDivElement,
139
- PersonaAvatarProps
140
- >(function PersonaAvatar(props, ref) {
141
- return <Persona ref={ref} {...props} hideDetails />
142
- })
@@ -1,2 +0,0 @@
1
- export { PinInput } from './pin-input.tsx'
2
- export type { PinInputProps } from './pin-input.tsx'
@@ -1,36 +0,0 @@
1
- import { forwardRef } from 'react'
2
-
3
- import { PinInput as ChakraPinInput, Group } from '@chakra-ui/react'
4
-
5
- export interface PinInputProps extends ChakraPinInput.RootProps {
6
- rootRef?: React.Ref<HTMLDivElement>
7
- pinLength?: number
8
- inputProps?: React.InputHTMLAttributes<HTMLInputElement>
9
- attached?: boolean
10
- }
11
-
12
- export const PinInput = forwardRef<HTMLInputElement, PinInputProps>(
13
- function PinInput(props, ref) {
14
- const {
15
- pinLength = 4,
16
- inputProps,
17
- rootRef,
18
- attached,
19
- gap = attached ? 0 : 2,
20
- ...rest
21
- } = props
22
-
23
- return (
24
- <ChakraPinInput.Root ref={rootRef} {...rest}>
25
- <ChakraPinInput.HiddenInput ref={ref} {...inputProps} />
26
- <ChakraPinInput.Control>
27
- <Group attached={attached} gap={gap}>
28
- {Array.from({ length: pinLength }).map((_, index) => (
29
- <ChakraPinInput.Input key={index} index={index} />
30
- ))}
31
- </Group>
32
- </ChakraPinInput.Control>
33
- </ChakraPinInput.Root>
34
- )
35
- },
36
- )
@@ -1,2 +0,0 @@
1
- export { Radio, RadioGroup } from './radio'
2
- export type { RadioProps, RadioGroupProps } from './radio'
@@ -1,27 +0,0 @@
1
- import { forwardRef } from 'react'
2
-
3
- import { RadioGroup as ChakraRadioGroup } from '@chakra-ui/react'
4
-
5
- export interface RadioProps extends ChakraRadioGroup.ItemProps {
6
- rootRef?: React.Ref<HTMLDivElement>
7
- inputProps?: React.InputHTMLAttributes<HTMLInputElement>
8
- }
9
-
10
- export const Radio = forwardRef<HTMLInputElement, RadioProps>(
11
- function Radio(props, ref) {
12
- const { children, inputProps, rootRef, ...rest } = props
13
- return (
14
- <ChakraRadioGroup.Item ref={rootRef} {...rest}>
15
- <ChakraRadioGroup.ItemHiddenInput ref={ref} {...inputProps} />
16
- <ChakraRadioGroup.ItemIndicator />
17
- {children && (
18
- <ChakraRadioGroup.ItemText>{children}</ChakraRadioGroup.ItemText>
19
- )}
20
- </ChakraRadioGroup.Item>
21
- )
22
- },
23
- )
24
-
25
- export type RadioGroupProps = ChakraRadioGroup.RootProps
26
-
27
- export const RadioGroup = ChakraRadioGroup.Root
@@ -1,2 +0,0 @@
1
- export { SearchInput } from './search-input.tsx'
2
- export type { SearchInputProps } from './search-input.tsx'
@@ -1,63 +0,0 @@
1
- import React, { useState } from 'react'
2
-
3
- import { Container, Stack } from '@chakra-ui/react'
4
- import { StoryObj } from '@storybook/react'
5
- import { RiCloseLine, RiSearch2Line } from 'react-icons/ri'
6
-
7
- import { SearchInput, SearchInputProps } from './search-input'
8
-
9
- export default {
10
- title: 'Components/SearchInput',
11
- component: SearchInput,
12
- decorators: [
13
- (Story: any) => (
14
- <Container mt="40px">
15
- <Story />
16
- </Container>
17
- ),
18
- ],
19
- }
20
-
21
- type Story = StoryObj<SearchInputProps>
22
-
23
- export const Basic: Story = {}
24
-
25
- export const Sizes: Story = {
26
- render: () => {
27
- return (
28
- <Stack>
29
- <SearchInput size="lg" />
30
- <SearchInput size="md" />
31
- <SearchInput size="sm" />
32
- <SearchInput size="xs" />
33
- </Stack>
34
- )
35
- },
36
- }
37
-
38
- export const Disabled: Story = {
39
- args: {
40
- disabled: true,
41
- },
42
- }
43
-
44
- export const CustomIcons: Story = {
45
- args: {
46
- icon: <RiSearch2Line />,
47
- resetIcon: <RiCloseLine />,
48
- },
49
- }
50
-
51
- export const Controlled: Story = {
52
- render: (props: any) => {
53
- const [value, setValue] = useState('')
54
- return (
55
- <SearchInput
56
- value={value}
57
- onChange={({ target }) => setValue(target.value)}
58
- onReset={() => setValue('')}
59
- {...props}
60
- />
61
- )
62
- },
63
- }