@saas-ui/react 3.0.0-alpha.1 → 3.0.0-alpha.2
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +12 -0
- package/dist/components/app-shell/index.d.cts +1 -1
- package/dist/components/app-shell/index.d.ts +1 -1
- package/dist/components/navbar/index.d.cts +3 -3
- package/dist/components/navbar/index.d.ts +3 -3
- package/dist/components/persona/index.d.cts +1 -1
- package/dist/components/persona/index.d.ts +1 -1
- package/dist/components/sidebar/index.d.cts +12 -12
- package/dist/components/sidebar/index.d.ts +12 -12
- package/dist/index.cjs +2 -12
- package/dist/index.js +2 -12
- package/package.json +4 -6
- package/src/components/app-shell/app-shell.recipe.ts +0 -52
- package/src/components/app-shell/app-shell.stories.tsx +0 -51
- package/src/components/app-shell/app-shell.tsx +0 -94
- package/src/components/app-shell/index.ts +0 -3
- package/src/components/breadcrumbs/breadcrumb.stories.tsx +0 -17
- package/src/components/breadcrumbs/breadcrumb.tsx +0 -36
- package/src/components/breadcrumbs/index.ts +0 -1
- package/src/components/breadcrumbs/namespace.ts +0 -8
- package/src/components/button/button.recipe.ts +0 -182
- package/src/components/button/button.stories.tsx +0 -99
- package/src/components/button/button.tsx +0 -55
- package/src/components/button/index.ts +0 -2
- package/src/components/checkbox/checkbox.tsx +0 -26
- package/src/components/checkbox/index.ts +0 -2
- package/src/components/close-button/close-button.stories.tsx +0 -12
- package/src/components/close-button/close-button.tsx +0 -18
- package/src/components/close-button/index.ts +0 -2
- package/src/components/command/command.recipe.ts +0 -17
- package/src/components/command/command.stories.tsx +0 -47
- package/src/components/command/command.tsx +0 -50
- package/src/components/command/index.ts +0 -1
- package/src/components/dialog/dialog.tsx +0 -67
- package/src/components/dialog/index.ts +0 -1
- package/src/components/dialog/namespace.ts +0 -18
- package/src/components/drawer/drawer.tsx +0 -57
- package/src/components/drawer/index.ts +0 -3
- package/src/components/drawer/namespace.ts +0 -19
- package/src/components/grid-list/grid-list.recipe.ts +0 -113
- package/src/components/icon-badge/icon-badge.recipe.ts +0 -57
- package/src/components/icon-badge/icon-badge.stories.tsx +0 -38
- package/src/components/icon-badge/icon-badge.tsx +0 -59
- package/src/components/icon-badge/index.ts +0 -2
- package/src/components/icons/create-icon.tsx +0 -41
- package/src/components/icons/icons.tsx +0 -119
- package/src/components/icons/index.ts +0 -1
- package/src/components/input-group/index.ts +0 -1
- package/src/components/input-group/input-group.tsx +0 -46
- package/src/components/link/index.ts +0 -2
- package/src/components/link/link.stories.tsx +0 -17
- package/src/components/link/link.test.tsx +0 -33
- package/src/components/link/link.tsx +0 -27
- package/src/components/loading-overlay/index.ts +0 -1
- package/src/components/loading-overlay/loading-overlay.recipe.ts +0 -61
- package/src/components/loading-overlay/loading-overlay.stories.tsx +0 -68
- package/src/components/loading-overlay/loading-overlay.tsx +0 -54
- package/src/components/loading-overlay/namespace.ts +0 -7
- package/src/components/navbar/index.ts +0 -1
- package/src/components/navbar/namespace.ts +0 -9
- package/src/components/navbar/navbar.recipe.ts +0 -109
- package/src/components/navbar/navbar.stories.tsx +0 -435
- package/src/components/navbar/navbar.test.tsx +0 -49
- package/src/components/navbar/navbar.tsx +0 -39
- package/src/components/number-input/index.ts +0 -2
- package/src/components/number-input/number-input.tsx +0 -41
- package/src/components/password-input/index.ts +0 -2
- package/src/components/password-input/password-input.tsx +0 -93
- package/src/components/persona/index.ts +0 -2
- package/src/components/persona/namespace.ts +0 -18
- package/src/components/persona/persona-primitive.tsx +0 -220
- package/src/components/persona/persona.recipe.ts +0 -94
- package/src/components/persona/persona.stories.tsx +0 -101
- package/src/components/persona/persona.tsx +0 -142
- package/src/components/pin-input/index.ts +0 -2
- package/src/components/pin-input/pin-input.tsx +0 -36
- package/src/components/radio/index.ts +0 -2
- package/src/components/radio/radio.tsx +0 -27
- package/src/components/search-input/index.ts +0 -2
- package/src/components/search-input/search-input.stories.tsx +0 -63
- package/src/components/search-input/search-input.tsx +0 -134
- package/src/components/select/index.ts +0 -1
- package/src/components/select/namespace.ts +0 -18
- package/src/components/select/select.tsx +0 -135
- package/src/components/sidebar/index.ts +0 -7
- package/src/components/sidebar/namespace.ts +0 -27
- package/src/components/sidebar/sidebar-item.recipe.ts +0 -65
- package/src/components/sidebar/sidebar.recipe.ts +0 -237
- package/src/components/sidebar/sidebar.stories.tsx +0 -903
- package/src/components/sidebar/sidebar.tsx +0 -208
- package/src/components/spinner/index.ts +0 -2
- package/src/components/spinner/spinner.stories.tsx +0 -19
- package/src/components/spinner/spinner.tsx +0 -21
- package/src/components/steps/index.ts +0 -1
- package/src/components/steps/namespace.ts +0 -16
- package/src/components/steps/steps.tsx +0 -82
- package/src/components/switch/index.ts +0 -3
- package/src/components/switch/switch.tsx +0 -39
- package/src/compositions/accordion.tsx +0 -47
- package/src/compositions/action-bar.tsx +0 -40
- package/src/compositions/alert.tsx +0 -51
- package/src/compositions/avatar.tsx +0 -74
- package/src/compositions/blockquote.tsx +0 -31
- package/src/compositions/checkbox-card.tsx +0 -57
- package/src/compositions/checkbox.tsx +0 -25
- package/src/compositions/clipboard.tsx +0 -107
- package/src/compositions/color-mode.tsx +0 -65
- package/src/compositions/data-list.tsx +0 -37
- package/src/compositions/empty-state.tsx +0 -34
- package/src/compositions/field.tsx +0 -33
- package/src/compositions/file-button.tsx +0 -166
- package/src/compositions/hover-card.tsx +0 -35
- package/src/compositions/link-button.tsx +0 -12
- package/src/compositions/menu.tsx +0 -108
- package/src/compositions/native-select.tsx +0 -57
- package/src/compositions/pagination.tsx +0 -207
- package/src/compositions/popover.tsx +0 -58
- package/src/compositions/progress-circle.tsx +0 -37
- package/src/compositions/progress.tsx +0 -40
- package/src/compositions/prose.tsx +0 -264
- package/src/compositions/provider.tsx +0 -12
- package/src/compositions/radio-card.tsx +0 -57
- package/src/compositions/radio.tsx +0 -24
- package/src/compositions/rating.tsx +0 -27
- package/src/compositions/segmented-control.tsx +0 -47
- package/src/compositions/skeleton.tsx +0 -44
- package/src/compositions/slider.tsx +0 -53
- package/src/compositions/stat.tsx +0 -75
- package/src/compositions/status.tsx +0 -29
- package/src/compositions/stepper-input.tsx +0 -49
- package/src/compositions/tag.tsx +0 -39
- package/src/compositions/timeline.tsx +0 -17
- package/src/compositions/toaster.tsx +0 -43
- package/src/compositions/toggle-tip.tsx +0 -62
- package/src/compositions/tooltip.tsx +0 -46
- package/src/index.ts +0 -7
- package/src/preset.ts +0 -9
- package/src/provider/index.ts +0 -4
- package/src/provider/sui-provider.tsx +0 -34
- package/src/provider/use-link.test.tsx +0 -60
- package/src/provider/use-link.tsx +0 -13
- package/src/styled-system/create-recipe-context.tsx +0 -91
- package/src/styled-system/create-slot-recipe-context.tsx +0 -188
- package/src/styled-system/empty.ts +0 -7
- package/src/styled-system/factory.types.ts +0 -11
- package/src/theme/animation-styles.ts +0 -53
- package/src/theme/breakpoints.ts +0 -11
- package/src/theme/conditions.ts +0 -26
- package/src/theme/fluid-font-sizes.ts +0 -65
- package/src/theme/global-css.ts +0 -94
- package/src/theme/index.ts +0 -72
- package/src/theme/layer-styles.ts +0 -116
- package/src/theme/recipes/chakra/accordion.ts +0 -145
- package/src/theme/recipes/chakra/action-bar.ts +0 -62
- package/src/theme/recipes/chakra/alert.ts +0 -157
- package/src/theme/recipes/chakra/avatar.ts +0 -141
- package/src/theme/recipes/chakra/badge.ts +0 -67
- package/src/theme/recipes/chakra/blockquote.ts +0 -83
- package/src/theme/recipes/chakra/breadcrumb.ts +0 -94
- package/src/theme/recipes/chakra/card.ts +0 -99
- package/src/theme/recipes/chakra/checkbox-card.ts +0 -212
- package/src/theme/recipes/chakra/checkbox.ts +0 -70
- package/src/theme/recipes/chakra/checkmark.ts +0 -83
- package/src/theme/recipes/chakra/code.ts +0 -17
- package/src/theme/recipes/chakra/collapsible.ts +0 -20
- package/src/theme/recipes/chakra/container.ts +0 -26
- package/src/theme/recipes/chakra/data-list.ts +0 -80
- package/src/theme/recipes/chakra/dialog.ts +0 -225
- package/src/theme/recipes/chakra/drawer.ts +0 -201
- package/src/theme/recipes/chakra/editable.ts +0 -88
- package/src/theme/recipes/chakra/empty-state.ts +0 -88
- package/src/theme/recipes/chakra/field.ts +0 -68
- package/src/theme/recipes/chakra/fieldset.ts +0 -62
- package/src/theme/recipes/chakra/file-upload.ts +0 -96
- package/src/theme/recipes/chakra/heading.ts +0 -27
- package/src/theme/recipes/chakra/hover-card.ts +0 -68
- package/src/theme/recipes/chakra/icon.ts +0 -30
- package/src/theme/recipes/chakra/input-addon.ts +0 -40
- package/src/theme/recipes/chakra/input.ts +0 -96
- package/src/theme/recipes/chakra/kbd.ts +0 -60
- package/src/theme/recipes/chakra/link.ts +0 -37
- package/src/theme/recipes/chakra/list.ts +0 -67
- package/src/theme/recipes/chakra/mark.ts +0 -27
- package/src/theme/recipes/chakra/menu.ts +0 -124
- package/src/theme/recipes/chakra/native-select.ts +0 -140
- package/src/theme/recipes/chakra/number-input.ts +0 -115
- package/src/theme/recipes/chakra/pin-input.ts +0 -27
- package/src/theme/recipes/chakra/popover.ts +0 -86
- package/src/theme/recipes/chakra/progress-circle.ts +0 -94
- package/src/theme/recipes/chakra/progress.ts +0 -127
- package/src/theme/recipes/chakra/radio-card.ts +0 -220
- package/src/theme/recipes/chakra/radio-group.ts +0 -72
- package/src/theme/recipes/chakra/radiomark.ts +0 -107
- package/src/theme/recipes/chakra/rating-group.ts +0 -94
- package/src/theme/recipes/chakra/segment-group.ts +0 -117
- package/src/theme/recipes/chakra/select.ts +0 -282
- package/src/theme/recipes/chakra/separator.ts +0 -51
- package/src/theme/recipes/chakra/skeleton.ts +0 -53
- package/src/theme/recipes/chakra/skip-nav-link.ts +0 -34
- package/src/theme/recipes/chakra/slider.ts +0 -178
- package/src/theme/recipes/chakra/spinner.ts +0 -32
- package/src/theme/recipes/chakra/stat.ts +0 -79
- package/src/theme/recipes/chakra/status.ts +0 -48
- package/src/theme/recipes/chakra/steps.ts +0 -218
- package/src/theme/recipes/chakra/switch.ts +0 -167
- package/src/theme/recipes/chakra/table.ts +0 -172
- package/src/theme/recipes/chakra/tabs.ts +0 -280
- package/src/theme/recipes/chakra/tag.ts +0 -131
- package/src/theme/recipes/chakra/textarea.ts +0 -88
- package/src/theme/recipes/chakra/timeline.ts +0 -138
- package/src/theme/recipes/chakra/toast.ts +0 -96
- package/src/theme/recipes/chakra/tooltip.ts +0 -40
- package/src/theme/recipes.ts +0 -46
- package/src/theme/semantic-tokens/colors.ts +0 -403
- package/src/theme/semantic-tokens/radii.ts +0 -7
- package/src/theme/semantic-tokens/shadows.ts +0 -52
- package/src/theme/slot-recipes.ts +0 -104
- package/src/theme/text-styles.ts +0 -39
- package/src/theme/tokens/animations.ts +0 -8
- package/src/theme/tokens/aspect-ratios.ts +0 -10
- package/src/theme/tokens/blurs.ts +0 -12
- package/src/theme/tokens/borders.ts +0 -9
- package/src/theme/tokens/colors.ts +0 -177
- package/src/theme/tokens/cursor.ts +0 -12
- package/src/theme/tokens/durations.ts +0 -11
- package/src/theme/tokens/easings.ts +0 -10
- package/src/theme/tokens/font-sizes.ts +0 -20
- package/src/theme/tokens/font-weights.ts +0 -13
- package/src/theme/tokens/fonts.ts +0 -15
- package/src/theme/tokens/keyframes.ts +0 -173
- package/src/theme/tokens/letter-spacing.ts +0 -9
- package/src/theme/tokens/line-heights.ts +0 -19
- package/src/theme/tokens/radius.ts +0 -18
- package/src/theme/tokens/sizes.ts +0 -71
- package/src/theme/tokens/spacing.ts +0 -38
- package/src/theme/tokens/z-indices.ts +0 -34
- 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,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
|
-
})
|
package/src/theme/breakpoints.ts
DELETED
package/src/theme/conditions.ts
DELETED
@@ -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
|
-
// },
|
package/src/theme/global-css.ts
DELETED
@@ -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
|
-
})
|