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

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 (237) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/components/app-shell/index.d.cts +1 -1
  3. package/dist/components/app-shell/index.d.ts +1 -1
  4. package/dist/components/navbar/index.d.cts +3 -3
  5. package/dist/components/navbar/index.d.ts +3 -3
  6. package/dist/components/persona/index.d.cts +1 -1
  7. package/dist/components/persona/index.d.ts +1 -1
  8. package/dist/components/sidebar/index.d.cts +12 -12
  9. package/dist/components/sidebar/index.d.ts +12 -12
  10. package/dist/index.cjs +2 -12
  11. package/dist/index.js +2 -12
  12. package/package.json +4 -6
  13. package/src/components/app-shell/app-shell.recipe.ts +0 -52
  14. package/src/components/app-shell/app-shell.stories.tsx +0 -51
  15. package/src/components/app-shell/app-shell.tsx +0 -94
  16. package/src/components/app-shell/index.ts +0 -3
  17. package/src/components/breadcrumbs/breadcrumb.stories.tsx +0 -17
  18. package/src/components/breadcrumbs/breadcrumb.tsx +0 -36
  19. package/src/components/breadcrumbs/index.ts +0 -1
  20. package/src/components/breadcrumbs/namespace.ts +0 -8
  21. package/src/components/button/button.recipe.ts +0 -182
  22. package/src/components/button/button.stories.tsx +0 -99
  23. package/src/components/button/button.tsx +0 -55
  24. package/src/components/button/index.ts +0 -2
  25. package/src/components/checkbox/checkbox.tsx +0 -26
  26. package/src/components/checkbox/index.ts +0 -2
  27. package/src/components/close-button/close-button.stories.tsx +0 -12
  28. package/src/components/close-button/close-button.tsx +0 -18
  29. package/src/components/close-button/index.ts +0 -2
  30. package/src/components/command/command.recipe.ts +0 -17
  31. package/src/components/command/command.stories.tsx +0 -47
  32. package/src/components/command/command.tsx +0 -50
  33. package/src/components/command/index.ts +0 -1
  34. package/src/components/dialog/dialog.tsx +0 -67
  35. package/src/components/dialog/index.ts +0 -1
  36. package/src/components/dialog/namespace.ts +0 -18
  37. package/src/components/drawer/drawer.tsx +0 -57
  38. package/src/components/drawer/index.ts +0 -3
  39. package/src/components/drawer/namespace.ts +0 -19
  40. package/src/components/grid-list/grid-list.recipe.ts +0 -113
  41. package/src/components/icon-badge/icon-badge.recipe.ts +0 -57
  42. package/src/components/icon-badge/icon-badge.stories.tsx +0 -38
  43. package/src/components/icon-badge/icon-badge.tsx +0 -59
  44. package/src/components/icon-badge/index.ts +0 -2
  45. package/src/components/icons/create-icon.tsx +0 -41
  46. package/src/components/icons/icons.tsx +0 -119
  47. package/src/components/icons/index.ts +0 -1
  48. package/src/components/input-group/index.ts +0 -1
  49. package/src/components/input-group/input-group.tsx +0 -46
  50. package/src/components/link/index.ts +0 -2
  51. package/src/components/link/link.stories.tsx +0 -17
  52. package/src/components/link/link.test.tsx +0 -33
  53. package/src/components/link/link.tsx +0 -27
  54. package/src/components/loading-overlay/index.ts +0 -1
  55. package/src/components/loading-overlay/loading-overlay.recipe.ts +0 -61
  56. package/src/components/loading-overlay/loading-overlay.stories.tsx +0 -68
  57. package/src/components/loading-overlay/loading-overlay.tsx +0 -54
  58. package/src/components/loading-overlay/namespace.ts +0 -7
  59. package/src/components/navbar/index.ts +0 -1
  60. package/src/components/navbar/namespace.ts +0 -9
  61. package/src/components/navbar/navbar.recipe.ts +0 -109
  62. package/src/components/navbar/navbar.stories.tsx +0 -435
  63. package/src/components/navbar/navbar.test.tsx +0 -49
  64. package/src/components/navbar/navbar.tsx +0 -39
  65. package/src/components/number-input/index.ts +0 -2
  66. package/src/components/number-input/number-input.tsx +0 -41
  67. package/src/components/password-input/index.ts +0 -2
  68. package/src/components/password-input/password-input.tsx +0 -93
  69. package/src/components/persona/index.ts +0 -2
  70. package/src/components/persona/namespace.ts +0 -18
  71. package/src/components/persona/persona-primitive.tsx +0 -220
  72. package/src/components/persona/persona.recipe.ts +0 -94
  73. package/src/components/persona/persona.stories.tsx +0 -101
  74. package/src/components/persona/persona.tsx +0 -142
  75. package/src/components/pin-input/index.ts +0 -2
  76. package/src/components/pin-input/pin-input.tsx +0 -36
  77. package/src/components/radio/index.ts +0 -2
  78. package/src/components/radio/radio.tsx +0 -27
  79. package/src/components/search-input/index.ts +0 -2
  80. package/src/components/search-input/search-input.stories.tsx +0 -63
  81. package/src/components/search-input/search-input.tsx +0 -134
  82. package/src/components/select/index.ts +0 -1
  83. package/src/components/select/namespace.ts +0 -18
  84. package/src/components/select/select.tsx +0 -135
  85. package/src/components/sidebar/index.ts +0 -7
  86. package/src/components/sidebar/namespace.ts +0 -27
  87. package/src/components/sidebar/sidebar-item.recipe.ts +0 -65
  88. package/src/components/sidebar/sidebar.recipe.ts +0 -237
  89. package/src/components/sidebar/sidebar.stories.tsx +0 -903
  90. package/src/components/sidebar/sidebar.tsx +0 -208
  91. package/src/components/spinner/index.ts +0 -2
  92. package/src/components/spinner/spinner.stories.tsx +0 -19
  93. package/src/components/spinner/spinner.tsx +0 -21
  94. package/src/components/steps/index.ts +0 -1
  95. package/src/components/steps/namespace.ts +0 -16
  96. package/src/components/steps/steps.tsx +0 -82
  97. package/src/components/switch/index.ts +0 -3
  98. package/src/components/switch/switch.tsx +0 -39
  99. package/src/compositions/accordion.tsx +0 -47
  100. package/src/compositions/action-bar.tsx +0 -40
  101. package/src/compositions/alert.tsx +0 -51
  102. package/src/compositions/avatar.tsx +0 -74
  103. package/src/compositions/blockquote.tsx +0 -31
  104. package/src/compositions/checkbox-card.tsx +0 -57
  105. package/src/compositions/checkbox.tsx +0 -25
  106. package/src/compositions/clipboard.tsx +0 -107
  107. package/src/compositions/color-mode.tsx +0 -65
  108. package/src/compositions/data-list.tsx +0 -37
  109. package/src/compositions/empty-state.tsx +0 -34
  110. package/src/compositions/field.tsx +0 -33
  111. package/src/compositions/file-button.tsx +0 -166
  112. package/src/compositions/hover-card.tsx +0 -35
  113. package/src/compositions/link-button.tsx +0 -12
  114. package/src/compositions/menu.tsx +0 -108
  115. package/src/compositions/native-select.tsx +0 -57
  116. package/src/compositions/pagination.tsx +0 -207
  117. package/src/compositions/popover.tsx +0 -58
  118. package/src/compositions/progress-circle.tsx +0 -37
  119. package/src/compositions/progress.tsx +0 -40
  120. package/src/compositions/prose.tsx +0 -264
  121. package/src/compositions/provider.tsx +0 -12
  122. package/src/compositions/radio-card.tsx +0 -57
  123. package/src/compositions/radio.tsx +0 -24
  124. package/src/compositions/rating.tsx +0 -27
  125. package/src/compositions/segmented-control.tsx +0 -47
  126. package/src/compositions/skeleton.tsx +0 -44
  127. package/src/compositions/slider.tsx +0 -53
  128. package/src/compositions/stat.tsx +0 -75
  129. package/src/compositions/status.tsx +0 -29
  130. package/src/compositions/stepper-input.tsx +0 -49
  131. package/src/compositions/tag.tsx +0 -39
  132. package/src/compositions/timeline.tsx +0 -17
  133. package/src/compositions/toaster.tsx +0 -43
  134. package/src/compositions/toggle-tip.tsx +0 -62
  135. package/src/compositions/tooltip.tsx +0 -46
  136. package/src/index.ts +0 -7
  137. package/src/preset.ts +0 -9
  138. package/src/provider/index.ts +0 -4
  139. package/src/provider/sui-provider.tsx +0 -34
  140. package/src/provider/use-link.test.tsx +0 -60
  141. package/src/provider/use-link.tsx +0 -13
  142. package/src/styled-system/create-recipe-context.tsx +0 -91
  143. package/src/styled-system/create-slot-recipe-context.tsx +0 -188
  144. package/src/styled-system/empty.ts +0 -7
  145. package/src/styled-system/factory.types.ts +0 -11
  146. package/src/theme/animation-styles.ts +0 -53
  147. package/src/theme/breakpoints.ts +0 -11
  148. package/src/theme/conditions.ts +0 -26
  149. package/src/theme/fluid-font-sizes.ts +0 -65
  150. package/src/theme/global-css.ts +0 -94
  151. package/src/theme/index.ts +0 -72
  152. package/src/theme/layer-styles.ts +0 -116
  153. package/src/theme/recipes/chakra/accordion.ts +0 -145
  154. package/src/theme/recipes/chakra/action-bar.ts +0 -62
  155. package/src/theme/recipes/chakra/alert.ts +0 -157
  156. package/src/theme/recipes/chakra/avatar.ts +0 -141
  157. package/src/theme/recipes/chakra/badge.ts +0 -67
  158. package/src/theme/recipes/chakra/blockquote.ts +0 -83
  159. package/src/theme/recipes/chakra/breadcrumb.ts +0 -94
  160. package/src/theme/recipes/chakra/card.ts +0 -99
  161. package/src/theme/recipes/chakra/checkbox-card.ts +0 -212
  162. package/src/theme/recipes/chakra/checkbox.ts +0 -70
  163. package/src/theme/recipes/chakra/checkmark.ts +0 -83
  164. package/src/theme/recipes/chakra/code.ts +0 -17
  165. package/src/theme/recipes/chakra/collapsible.ts +0 -20
  166. package/src/theme/recipes/chakra/container.ts +0 -26
  167. package/src/theme/recipes/chakra/data-list.ts +0 -80
  168. package/src/theme/recipes/chakra/dialog.ts +0 -225
  169. package/src/theme/recipes/chakra/drawer.ts +0 -201
  170. package/src/theme/recipes/chakra/editable.ts +0 -88
  171. package/src/theme/recipes/chakra/empty-state.ts +0 -88
  172. package/src/theme/recipes/chakra/field.ts +0 -68
  173. package/src/theme/recipes/chakra/fieldset.ts +0 -62
  174. package/src/theme/recipes/chakra/file-upload.ts +0 -96
  175. package/src/theme/recipes/chakra/heading.ts +0 -27
  176. package/src/theme/recipes/chakra/hover-card.ts +0 -68
  177. package/src/theme/recipes/chakra/icon.ts +0 -30
  178. package/src/theme/recipes/chakra/input-addon.ts +0 -40
  179. package/src/theme/recipes/chakra/input.ts +0 -96
  180. package/src/theme/recipes/chakra/kbd.ts +0 -60
  181. package/src/theme/recipes/chakra/link.ts +0 -37
  182. package/src/theme/recipes/chakra/list.ts +0 -67
  183. package/src/theme/recipes/chakra/mark.ts +0 -27
  184. package/src/theme/recipes/chakra/menu.ts +0 -124
  185. package/src/theme/recipes/chakra/native-select.ts +0 -140
  186. package/src/theme/recipes/chakra/number-input.ts +0 -115
  187. package/src/theme/recipes/chakra/pin-input.ts +0 -27
  188. package/src/theme/recipes/chakra/popover.ts +0 -86
  189. package/src/theme/recipes/chakra/progress-circle.ts +0 -94
  190. package/src/theme/recipes/chakra/progress.ts +0 -127
  191. package/src/theme/recipes/chakra/radio-card.ts +0 -220
  192. package/src/theme/recipes/chakra/radio-group.ts +0 -72
  193. package/src/theme/recipes/chakra/radiomark.ts +0 -107
  194. package/src/theme/recipes/chakra/rating-group.ts +0 -94
  195. package/src/theme/recipes/chakra/segment-group.ts +0 -117
  196. package/src/theme/recipes/chakra/select.ts +0 -282
  197. package/src/theme/recipes/chakra/separator.ts +0 -51
  198. package/src/theme/recipes/chakra/skeleton.ts +0 -53
  199. package/src/theme/recipes/chakra/skip-nav-link.ts +0 -34
  200. package/src/theme/recipes/chakra/slider.ts +0 -178
  201. package/src/theme/recipes/chakra/spinner.ts +0 -32
  202. package/src/theme/recipes/chakra/stat.ts +0 -79
  203. package/src/theme/recipes/chakra/status.ts +0 -48
  204. package/src/theme/recipes/chakra/steps.ts +0 -218
  205. package/src/theme/recipes/chakra/switch.ts +0 -167
  206. package/src/theme/recipes/chakra/table.ts +0 -172
  207. package/src/theme/recipes/chakra/tabs.ts +0 -280
  208. package/src/theme/recipes/chakra/tag.ts +0 -131
  209. package/src/theme/recipes/chakra/textarea.ts +0 -88
  210. package/src/theme/recipes/chakra/timeline.ts +0 -138
  211. package/src/theme/recipes/chakra/toast.ts +0 -96
  212. package/src/theme/recipes/chakra/tooltip.ts +0 -40
  213. package/src/theme/recipes.ts +0 -46
  214. package/src/theme/semantic-tokens/colors.ts +0 -403
  215. package/src/theme/semantic-tokens/radii.ts +0 -7
  216. package/src/theme/semantic-tokens/shadows.ts +0 -52
  217. package/src/theme/slot-recipes.ts +0 -104
  218. package/src/theme/text-styles.ts +0 -39
  219. package/src/theme/tokens/animations.ts +0 -8
  220. package/src/theme/tokens/aspect-ratios.ts +0 -10
  221. package/src/theme/tokens/blurs.ts +0 -12
  222. package/src/theme/tokens/borders.ts +0 -9
  223. package/src/theme/tokens/colors.ts +0 -177
  224. package/src/theme/tokens/cursor.ts +0 -12
  225. package/src/theme/tokens/durations.ts +0 -11
  226. package/src/theme/tokens/easings.ts +0 -10
  227. package/src/theme/tokens/font-sizes.ts +0 -20
  228. package/src/theme/tokens/font-weights.ts +0 -13
  229. package/src/theme/tokens/fonts.ts +0 -15
  230. package/src/theme/tokens/keyframes.ts +0 -173
  231. package/src/theme/tokens/letter-spacing.ts +0 -9
  232. package/src/theme/tokens/line-heights.ts +0 -19
  233. package/src/theme/tokens/radius.ts +0 -18
  234. package/src/theme/tokens/sizes.ts +0 -71
  235. package/src/theme/tokens/spacing.ts +0 -38
  236. package/src/theme/tokens/z-indices.ts +0 -34
  237. package/src/theme/utils.ts +0 -46
@@ -1,60 +0,0 @@
1
- import * as React from 'react'
2
- import { hooks, render } from '@saas-ui/test-utils'
3
-
4
- import { SaasProvider, useLink } from './index'
5
-
6
- const DummyComponent = ({ href = '' }) => {
7
- const LinkWrapper = useLink()
8
-
9
- if (LinkWrapper) {
10
- return (
11
- <LinkWrapper href={href}>
12
- <a>Link</a>
13
- </LinkWrapper>
14
- )
15
- }
16
- return <a>Link</a>
17
- }
18
-
19
- const Link = ({
20
- href = '',
21
- children,
22
- }: {
23
- href: string
24
- children: React.ReactNode
25
- }) => {
26
- return (
27
- <>
28
- {React.Children.map(children, (child) => {
29
- if (React.isValidElement(child)) {
30
- return React.cloneElement<any>(child, {
31
- href,
32
- })
33
- }
34
- return child
35
- })}
36
- </>
37
- )
38
- }
39
-
40
- const renderLink = (ui: React.ReactNode) => {
41
- return render(<SaasProvider linkComponent={Link}>{ui}</SaasProvider>, {
42
- withSaasProvider: false,
43
- })
44
- }
45
-
46
- test('it should not throw without context', () => {
47
- const { result } = hooks.render(() => useLink())
48
- })
49
-
50
- test('it should render', () => {
51
- const { getByText } = renderLink(<DummyComponent />)
52
-
53
- expect(getByText('Link')).toBeInTheDocument()
54
- })
55
-
56
- test('it should render with href', () => {
57
- const { getByText } = renderLink(<DummyComponent href="/test" />)
58
-
59
- expect(getByText('Link')).toHaveAttribute('href', '/test')
60
- })
@@ -1,13 +0,0 @@
1
- import React from 'react'
2
-
3
- import { chakra } from '@chakra-ui/react'
4
-
5
- import { useSui } from './sui-provider'
6
-
7
- export function useLink(): React.ElementType {
8
- const context = useSui()
9
- if (context?.linkComponent) {
10
- return context.linkComponent
11
- }
12
- return chakra.a
13
- }
@@ -1,91 +0,0 @@
1
- 'use client'
2
-
3
- import { forwardRef } from 'react'
4
-
5
- import {
6
- type RecipeKey,
7
- type UseRecipeOptions,
8
- chakra,
9
- createContext,
10
- mergeProps,
11
- useRecipe,
12
- } from '@chakra-ui/react'
13
- import { cx } from '@saas-ui/core/utils'
14
-
15
- import { EMPTY_STYLES } from './empty.ts'
16
- import type { JsxFactoryOptions } from './factory.types.ts'
17
-
18
- const upperFirst = (str: string) => str.charAt(0).toUpperCase() + str.slice(1)
19
-
20
- export function createRecipeContext<K extends RecipeKey>(
21
- options: UseRecipeOptions<K>,
22
- ) {
23
- const { key: recipeKey, recipe: recipeConfig } = options
24
-
25
- const contextName = upperFirst(
26
- recipeKey || (recipeConfig as any).className || 'Component',
27
- )
28
-
29
- const [PropsProvider, usePropsContext] = createContext<Record<string, any>>({
30
- strict: false,
31
- name: `${contextName}PropsContext`,
32
- providerName: `${contextName}PropsContext`,
33
- })
34
-
35
- function useRecipeResult(props: any) {
36
- const { unstyled, ...restProps } = props
37
-
38
- const recipe = useRecipe({
39
- key: recipeKey,
40
- recipe: restProps.recipe || recipeConfig,
41
- })
42
-
43
- // @ts-ignore
44
- const [variantProps, otherProps] = recipe.splitVariantProps(restProps)
45
- const styles = unstyled ? EMPTY_STYLES : recipe(variantProps)
46
-
47
- return {
48
- styles,
49
- className: recipe.className,
50
- props: otherProps,
51
- }
52
- }
53
-
54
- const withContext = <T, P>(
55
- Component: React.ElementType<any>,
56
- options?: JsxFactoryOptions<P>,
57
- ): React.ForwardRefExoticComponent<
58
- React.PropsWithoutRef<P> & React.RefAttributes<T>
59
- > => {
60
- const SuperComponent = chakra(Component, {}, options as any)
61
- const StyledComponent = forwardRef<any, any>((inProps, ref) => {
62
- const props = mergeProps(usePropsContext(), inProps)
63
- const { styles, className, props: localProps } = useRecipeResult(props)
64
-
65
- return (
66
- <SuperComponent
67
- {...localProps}
68
- ref={ref}
69
- css={[styles, props.css]}
70
- className={cx(className, props.className)}
71
- />
72
- )
73
- })
74
-
75
- // @ts-expect-error
76
- StyledComponent.displayName = Component.displayName || Component.name
77
- return StyledComponent as any
78
- }
79
-
80
- function withPropsProvider<P>(): React.Provider<Partial<P>> {
81
- return PropsProvider as any
82
- }
83
-
84
- return {
85
- withContext,
86
- PropsProvider,
87
- withPropsProvider,
88
- usePropsContext,
89
- useRecipeResult,
90
- }
91
- }
@@ -1,188 +0,0 @@
1
- 'use client'
2
-
3
- import { forwardRef } from 'react'
4
-
5
- import {
6
- type SlotRecipeKey,
7
- type UseSlotRecipeOptions,
8
- chakra,
9
- createContext,
10
- mergeProps,
11
- useSlotRecipe,
12
- } from '@chakra-ui/react'
13
- import type { SystemStyleObject } from '@chakra-ui/react'
14
- import { cx } from '@saas-ui/core/utils'
15
-
16
- import { EMPTY_SLOT_STYLES } from './empty.ts'
17
- import type { JsxFactoryOptions } from './factory.types.ts'
18
-
19
- type ConfigRecipeSlots = any
20
-
21
- interface WrapElementProps<P> {
22
- wrapElement?(element: React.ReactElement, props: P): React.ReactElement
23
- }
24
-
25
- interface WithRootProviderOptions<P> extends WrapElementProps<P> {
26
- defaultProps?: Partial<P>
27
- }
28
-
29
- interface WithProviderOptions<P>
30
- extends JsxFactoryOptions<P>,
31
- WrapElementProps<P> {}
32
-
33
- interface WithContextOptions<P> extends JsxFactoryOptions<P> {}
34
-
35
- const upperFirst = (str: string) => str.charAt(0).toUpperCase() + str.slice(1)
36
-
37
- export const createSlotRecipeContext = <R extends SlotRecipeKey>(
38
- options: UseSlotRecipeOptions<R>,
39
- ) => {
40
- const { key: recipeKey, recipe: recipeConfig } = options
41
-
42
- const contextName = upperFirst(
43
- recipeKey || (recipeConfig as any).className || 'Component',
44
- )
45
-
46
- const [StylesProvider, useStyles] = createContext<
47
- Record<string, SystemStyleObject>
48
- >({
49
- name: `${contextName}StylesContext`,
50
- errorMessage: `use${contextName}Styles returned is 'undefined'. Seems you forgot to wrap the components in "<${contextName}.Root />" `,
51
- })
52
-
53
- const [ClassNamesProvider, useClassNames] = createContext<
54
- Record<string, string>
55
- >({
56
- name: `${contextName}ClassNameContext`,
57
- errorMessage: `use${contextName}ClassNames returned is 'undefined'. Seems you forgot to wrap the components in "<${contextName}.Root />" `,
58
- strict: false,
59
- })
60
-
61
- const [PropsProvider, usePropsContext] = createContext<Record<string, any>>({
62
- strict: false,
63
- name: `${contextName}PropsContext`,
64
- providerName: `${contextName}PropsContext`,
65
- defaultValue: {},
66
- })
67
-
68
- function useRecipeResult(props: any) {
69
- const { unstyled, ...restProps } = props
70
-
71
- const slotRecipe = useSlotRecipe({
72
- key: recipeKey,
73
- recipe: restProps.recipe || recipeConfig,
74
- })
75
-
76
- // @ts-ignore
77
- const [variantProps, otherProps] = slotRecipe.splitVariantProps(restProps)
78
- const styles = unstyled ? EMPTY_SLOT_STYLES : slotRecipe(variantProps)
79
-
80
- return {
81
- styles: styles as Record<string, SystemStyleObject>,
82
- classNames: slotRecipe.classNameMap as Record<string, string>,
83
- props: otherProps,
84
- }
85
- }
86
-
87
- function withRootProvider<P>(
88
- Component: React.ElementType<any>,
89
- options: WithRootProviderOptions<P> = {},
90
- ): React.FC<React.PropsWithoutRef<P>> {
91
- const { defaultProps } = options
92
-
93
- const StyledComponent = (inProps: any) => {
94
- const props = mergeProps(defaultProps, usePropsContext(), inProps)
95
- const { styles, classNames, props: rootProps } = useRecipeResult(props)
96
-
97
- return (
98
- <StylesProvider value={styles}>
99
- <ClassNamesProvider value={classNames}>
100
- <Component {...rootProps} />
101
- </ClassNamesProvider>
102
- </StylesProvider>
103
- )
104
- }
105
-
106
- // @ts-expect-error
107
- StyledComponent.displayName = Component.displayName || Component.name
108
- return StyledComponent as any
109
- }
110
-
111
- const withProvider = <T, P>(
112
- Component: React.ElementType<any>,
113
- slot: R extends keyof ConfigRecipeSlots ? ConfigRecipeSlots[R] : string,
114
- options?: WithProviderOptions<P>,
115
- ): React.ForwardRefExoticComponent<
116
- React.PropsWithoutRef<P> & React.RefAttributes<T>
117
- > => {
118
- const { defaultProps, ...restOptions } = options ?? {}
119
- const SuperComponent = chakra(Component, {}, restOptions as any)
120
-
121
- const StyledComponent = forwardRef<any, any>((inProps, ref) => {
122
- const props = mergeProps(defaultProps ?? {}, usePropsContext(), inProps)
123
- const { styles, props: rootProps, classNames } = useRecipeResult(props)
124
- const className = classNames[slot as keyof typeof classNames]
125
-
126
- const element = (
127
- <StylesProvider value={styles}>
128
- <ClassNamesProvider value={classNames}>
129
- <SuperComponent
130
- ref={ref}
131
- {...rootProps}
132
- css={[styles[slot], props.css]}
133
- className={cx(props.className, className)}
134
- />
135
- </ClassNamesProvider>
136
- </StylesProvider>
137
- )
138
-
139
- return options?.wrapElement?.(element, props) ?? element
140
- })
141
-
142
- // @ts-expect-error
143
- StyledComponent.displayName = Component.displayName || Component.name
144
-
145
- return StyledComponent as any
146
- }
147
-
148
- const withContext = <T, P>(
149
- Component: React.ElementType<any>,
150
- slot?: R extends keyof ConfigRecipeSlots ? ConfigRecipeSlots[R] : string,
151
- options?: WithContextOptions<P>,
152
- ): React.ForwardRefExoticComponent<
153
- React.PropsWithoutRef<P> & React.RefAttributes<T>
154
- > => {
155
- const SuperComponent = chakra(Component, {}, options as any)
156
- const StyledComponent = forwardRef<any, any>((props, ref) => {
157
- const styles = useStyles()
158
- const classNames = useClassNames()
159
- const className = classNames?.[slot as keyof typeof classNames]
160
-
161
- return (
162
- <SuperComponent
163
- {...props}
164
- css={[slot ? styles[slot] : undefined, props.css]}
165
- ref={ref}
166
- className={cx(props.className, className)}
167
- />
168
- )
169
- })
170
-
171
- // @ts-expect-error
172
- StyledComponent.displayName = Component.displayName || Component.name
173
- return StyledComponent as any
174
- }
175
-
176
- return {
177
- StylesProvider,
178
- ClassNamesProvider,
179
- PropsProvider,
180
- usePropsContext,
181
- useRecipeResult,
182
- withProvider,
183
- withContext,
184
- withRootProvider,
185
- useStyles,
186
- useClassNames,
187
- }
188
- }
@@ -1,7 +0,0 @@
1
- import type { SystemStyleObject } from '@chakra-ui/react'
2
-
3
- export const EMPTY_STYLES = Object.freeze({} as SystemStyleObject)
4
-
5
- export const EMPTY_SLOT_STYLES = Object.freeze(
6
- {} as Record<string, SystemStyleObject>,
7
- )
@@ -1,11 +0,0 @@
1
- export type DataAttr = Record<
2
- `data-${string}`,
3
- string | number | undefined | null | boolean
4
- >
5
-
6
- export interface JsxFactoryOptions<TProps> {
7
- forwardProps?: string[]
8
- defaultProps?: Partial<TProps> & DataAttr
9
- forwardAsChild?: boolean
10
- shouldForwardProp?(prop: string, variantKeys: string[]): boolean
11
- }
@@ -1,53 +0,0 @@
1
- import { defineAnimationStyles } from '@chakra-ui/react'
2
-
3
- export const animationStyles: any = defineAnimationStyles({
4
- 'slide-fade-in': {
5
- value: {
6
- transformOrigin: 'var(--transform-origin)',
7
- '&[data-placement^=top]': {
8
- animationName: 'slide-from-bottom, fade-in',
9
- },
10
- '&[data-placement^=bottom]': {
11
- animationName: 'slide-from-top, fade-in',
12
- },
13
- '&[data-placement^=left]': {
14
- animationName: 'slide-from-right, fade-in',
15
- },
16
- '&[data-placement^=right]': {
17
- animationName: 'slide-from-left, fade-in',
18
- },
19
- },
20
- },
21
-
22
- 'slide-fade-out': {
23
- value: {
24
- transformOrigin: 'var(--transform-origin)',
25
- '&[data-placement^=top]': {
26
- animationName: 'slide-to-bottom, fade-out',
27
- },
28
- '&[data-placement^=bottom]': {
29
- animationName: 'slide-to-top, fade-out',
30
- },
31
- '&[data-placement^=left]': {
32
- animationName: 'slide-to-right, fade-out',
33
- },
34
- '&[data-placement^=right]': {
35
- animationName: 'slide-to-left, fade-out',
36
- },
37
- },
38
- },
39
-
40
- 'scale-fade-in': {
41
- value: {
42
- transformOrigin: 'var(--transform-origin)',
43
- animationName: 'scale-in, fade-in',
44
- },
45
- },
46
-
47
- 'scale-fade-out': {
48
- value: {
49
- transformOrigin: 'var(--transform-origin)',
50
- animationName: 'scale-out, fade-out',
51
- },
52
- },
53
- })
@@ -1,11 +0,0 @@
1
- export const breakpointValues = {
2
- sm: '480px',
3
- md: '768px',
4
- lg: '1024px',
5
- xl: '1280px',
6
- '2xl': '1536px',
7
- }
8
-
9
- export const breakpoints = Object.fromEntries(
10
- Object.entries(breakpointValues).map(([key, value]) => [key, `${value}px`]),
11
- )
@@ -1,26 +0,0 @@
1
- import { defineConditions } from '@chakra-ui/react'
2
-
3
- export const conditions = defineConditions({
4
- collapsible: '&:is([data-scope=collapsible])',
5
- groupCollapsible:
6
- '.group:is([data-scope=collapsible]) &, [role=group]:is([data-scope=collapsible]) &',
7
- groupOpen:
8
- '.group:is([data-state=open]) &, [role=group]:is([data-state=open]) &',
9
- groupFocus:
10
- '.group:is(:focus, [data-focus]) &, [role=group]:is(:focus, [data-focus]) &',
11
- groupHover:
12
- '.group:is(:hover, [data-hover]):not(:disabled, [data-disabled]) &, [role=group]:is(:hover, [data-hover]):not(:disabled, [data-disabled]) &',
13
- groupActive:
14
- '.group:is(:active, [data-active]):not(:disabled, [data-disabled]) &, [role=group]:is(:active, [data-active]):not(:disabled, [data-disabled]) &',
15
- groupFocusWithin: '.group:focus-within &, [role=group]:focus-within &',
16
- groupFocusVisible:
17
- '.group:is(:focus-visible, [data-focus-visible]) &, [role=group]:is(:focus-visible, [data-focus-visible]) &',
18
- groupDisabled:
19
- '.group:is(:disabled, [disabled], [data-disabled]) &, [role=group]:is(:disabled, [disabled], [data-disabled]) &',
20
- groupChecked:
21
- '.group:is(:checked, [data-checked], [aria-checked=true], [data-state=checked]) &, [role=group]:is(:checked, [data-checked], [aria-checked=true], [data-state=checked]) &',
22
- groupExpanded:
23
- '.group:is([aria-expanded=true], [data-expanded], [data-state=expanded]) &, [role=group]:is([aria-expanded=true], [data-expanded], [data-state=expanded]) &',
24
- groupInvalid: '.group:invalid &, [role=group]:invalid &',
25
- parentHover: 'button:hover > &, a:hover > &',
26
- })
@@ -1,65 +0,0 @@
1
- // const fluidFontSizes = {
2
- // 'min-max': fluid({
3
- // property: 'fluid-text-size',
4
- // from: breakpointValues.sm,
5
- // to: breakpointValues['2xl'],
6
- // divider: 1,
7
- // }),
8
- // }
9
-
10
- // 'fluid-text-size': {
11
- // 'min-max': fluid({ property: 'fluid-text-size', from: BP_SM, to: BP_2XL, divider: 1 }),
12
- // 'sm-md': fluid({ property: 'fluid-text-size', from: BP_SM, to: BP_MD, divider: 1 }),
13
- // 'sm-lg': fluid({ property: 'fluid-text-size', from: BP_SM, to: BP_LG, divider: 1 }),
14
- // 'sm-xl': fluid({ property: 'fluid-text-size', from: BP_SM, to: BP_XL, divider: 1 }),
15
- // 'md-lg': fluid({ property: 'fluid-text-size', from: BP_MD, to: BP_LG, divider: 1 }),
16
- // 'md-xl': fluid({ property: 'fluid-text-size', from: BP_MD, to: BP_XL, divider: 1 }),
17
- // 'md-2xl': fluid({ property: 'fluid-text-size', from: BP_MD, to: BP_2XL, divider: 1 }),
18
- // 'lg-xl': fluid({ property: 'fluid-text-size', from: BP_LG, to: BP_XL, divider: 1 }),
19
- // 'lg-2xl': fluid({ property: 'fluid-text-size', from: BP_LG, to: BP_2XL, divider: 1 }),
20
- // },
21
-
22
- // {
23
- // utilities: {
24
- // fluidFontSize: {
25
- // shorthand: ['fluidFontSize'],
26
- // transform(value, args) {
27
- // console.log(value, args)
28
- // const val = 'min-max(sm, lg)'
29
-
30
- // const match = val.match(/(\w+-\w+)\((\w+),\s*(\w+)\)/)
31
-
32
- // if (!match) {
33
- // return {}
34
- // }
35
-
36
- // const [, breakpoints, min, max] = match
37
- // console.log(match)
38
- // const minSize = args.token.raw(`fontSizes.${min}`)?.value
39
- // const maxSize = args.token.raw(`fontSizes.${max}`)?.value
40
- // console.log(minSize, maxSize)
41
- // return {
42
- // fontSize: `var(--fluid-text-size-${breakpoints})`,
43
- // '--fluid-text-size-min': minSize,
44
- // '--fluid-text-size-max': maxSize,
45
- // }
46
- // },
47
- // },
48
- // fluidFontSizeMin: {
49
- // shorthand: ['fluidFontSizeMin'],
50
- // transform(value, args) {
51
- // return {
52
- // '--fluid-text-size-min': value,
53
- // }
54
- // },
55
- // },
56
- // fluidFontSizeMax: {
57
- // shorthand: ['fluidFontSizeMax'],
58
- // transform(value, args) {
59
- // return {
60
- // '--fluid-text-size-max': value,
61
- // }
62
- // },
63
- // },
64
- // },
65
- // },
@@ -1,94 +0,0 @@
1
- import { defineGlobalStyles } from '@chakra-ui/react'
2
-
3
- const empty = 'var(--chakra-empty,/*!*/ /*!*/)'
4
-
5
- export const globalCss = defineGlobalStyles({
6
- '*': {
7
- fontFeatureSettings: '"cv11"',
8
- '--ring-inset': empty,
9
- '--ring-offset-width': '0px',
10
- '--ring-offset-color': '#fff',
11
- '--ring-color': 'rgba(66, 153, 225, 0.6)',
12
- '--ring-offset-shadow': '0 0 #0000',
13
- '--ring-shadow': '0 0 #0000',
14
- ...Object.fromEntries(
15
- [
16
- 'brightness',
17
- 'contrast',
18
- 'grayscale',
19
- 'hue-rotate',
20
- 'invert',
21
- 'saturate',
22
- 'sepia',
23
- 'drop-shadow',
24
- ].map((prop) => [`--${prop}`, empty]),
25
- ),
26
- ...Object.fromEntries(
27
- [
28
- 'blur',
29
- 'brightness',
30
- 'contrast',
31
- 'grayscale',
32
- 'hue-rotate',
33
- 'invert',
34
- 'opacity',
35
- 'saturate',
36
- 'sepia',
37
- ].map((prop) => [`--backdrop-${prop}`, empty]),
38
- ),
39
- '--global-font-mono': 'fonts.mono',
40
- '--global-font-body': 'fonts.body',
41
- '--global-color-border': 'colors.border',
42
- '--cursor-button': 'default',
43
- '--radius-factor': '1',
44
- '--radius-full': '9999px',
45
- '--scale-factor': '1',
46
- },
47
- body: {
48
- color: 'fg',
49
- bg: 'bg',
50
- lineHeight: '1.5',
51
- colorPalette: 'accent',
52
- },
53
- '*::placeholder': {
54
- color: 'fg.subtle',
55
- },
56
- '*::selection': {
57
- bg: 'colorPalette.muted/80',
58
- },
59
- '[data-radius="none"]': {
60
- '--radius-factor': '0',
61
- '--radius-full': '0',
62
- },
63
- '[data-radius="sm"]': {
64
- '--radius-factor': '0.9',
65
- '--radius-full': '0',
66
- },
67
- '[data-radius="md"]': {
68
- '--radius-factor': '1',
69
- '--radius-full': '0',
70
- },
71
- '[data-radius="lg"]': {
72
- '--radius-factor': '1.5',
73
- '--radius-full': '0',
74
- },
75
- '[data-radius="full"]': {
76
- '--radius-factor': '1.5',
77
- '--radius-full': '9999px',
78
- },
79
- '[data-scale="xs"]': {
80
- '--scale-factor': '0.9',
81
- },
82
- '[data-scale="sm"]': {
83
- '--scale-factor': '0.95',
84
- },
85
- '[data-scale="md"]': {
86
- '--scale-factor': '1',
87
- },
88
- '[data-scale="lg"]': {
89
- '--scale-factor': '1.05',
90
- },
91
- '[data-scale="xl"]': {
92
- '--scale-factor': '1.1',
93
- },
94
- })