@shipfox/react-ui 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.storybook/preview.tsx +1 -1
- package/.turbo/turbo-build.log +2 -2
- package/.turbo/turbo-check.log +2 -2
- package/.turbo/turbo-type.log +1 -1
- package/CHANGELOG.md +11 -0
- package/dist/components/alert/alert.d.ts +2 -2
- package/dist/components/alert/alert.js +3 -3
- package/dist/components/alert/alert.js.map +1 -1
- package/dist/components/alert/alert.stories.js +2 -2
- package/dist/components/alert/alert.stories.js.map +1 -1
- package/dist/components/avatar/avatar-group.js +3 -3
- package/dist/components/avatar/avatar-group.js.map +1 -1
- package/dist/components/avatar/avatar.d.ts +4 -1
- package/dist/components/avatar/avatar.d.ts.map +1 -1
- package/dist/components/avatar/avatar.js +7 -8
- package/dist/components/avatar/avatar.js.map +1 -1
- package/dist/components/avatar/avatar.stories.js +15 -3
- package/dist/components/avatar/avatar.stories.js.map +1 -1
- package/dist/components/badge/badge.d.ts +48 -0
- package/dist/components/badge/badge.d.ts.map +1 -0
- package/dist/components/badge/badge.js +72 -0
- package/dist/components/badge/badge.js.map +1 -0
- package/dist/components/badge/badge.stories.js +802 -0
- package/dist/components/badge/badge.stories.js.map +1 -0
- package/dist/components/badge/icon-badge.d.ts +9 -0
- package/dist/components/badge/icon-badge.d.ts.map +1 -0
- package/dist/components/badge/icon-badge.js +32 -0
- package/dist/components/badge/icon-badge.js.map +1 -0
- package/dist/components/badge/index.d.ts +5 -0
- package/dist/components/badge/index.d.ts.map +1 -0
- package/dist/components/badge/index.js +6 -0
- package/dist/components/badge/index.js.map +1 -0
- package/dist/components/badge/status-badge.d.ts +9 -0
- package/dist/components/badge/status-badge.d.ts.map +1 -0
- package/dist/components/badge/status-badge.js +29 -0
- package/dist/components/badge/status-badge.js.map +1 -0
- package/dist/components/badge/user-badge.d.ts +8 -0
- package/dist/components/badge/user-badge.d.ts.map +1 -0
- package/dist/components/badge/user-badge.js +24 -0
- package/dist/components/badge/user-badge.js.map +1 -0
- package/dist/components/{button.d.ts → button/button.d.ts} +1 -1
- package/dist/components/button/button.d.ts.map +1 -0
- package/dist/components/{button.js → button/button.js} +2 -2
- package/dist/components/button/button.js.map +1 -0
- package/dist/components/{button.stories.js → button/button.stories.js} +1 -1
- package/dist/components/button/button.stories.js.map +1 -0
- package/dist/components/button/index.d.ts +2 -0
- package/dist/components/button/index.d.ts.map +1 -0
- package/dist/components/button/index.js +3 -0
- package/dist/components/button/index.js.map +1 -0
- package/dist/components/checkbox/checkbox-label.d.ts +14 -0
- package/dist/components/checkbox/checkbox-label.d.ts.map +1 -0
- package/dist/components/checkbox/checkbox-label.js +82 -0
- package/dist/components/checkbox/checkbox-label.js.map +1 -0
- package/dist/components/checkbox/checkbox-links.d.ts +18 -0
- package/dist/components/checkbox/checkbox-links.d.ts.map +1 -0
- package/dist/components/checkbox/checkbox-links.js +58 -0
- package/dist/components/checkbox/checkbox-links.js.map +1 -0
- package/dist/components/checkbox/checkbox.d.ts +9 -0
- package/dist/components/checkbox/checkbox.d.ts.map +1 -0
- package/dist/components/checkbox/checkbox.js +49 -0
- package/dist/components/checkbox/checkbox.js.map +1 -0
- package/dist/components/checkbox/checkbox.stories.js +566 -0
- package/dist/components/checkbox/checkbox.stories.js.map +1 -0
- package/dist/components/checkbox/index.d.ts +4 -0
- package/dist/components/checkbox/index.d.ts.map +1 -0
- package/dist/components/checkbox/index.js +5 -0
- package/dist/components/checkbox/index.js.map +1 -0
- package/dist/components/code-block/code-block-footer.d.ts +26 -0
- package/dist/components/code-block/code-block-footer.d.ts.map +1 -0
- package/dist/components/code-block/code-block-footer.js +86 -0
- package/dist/components/code-block/code-block-footer.js.map +1 -0
- package/dist/components/code-block/code-block.d.ts +50 -0
- package/dist/components/code-block/code-block.d.ts.map +1 -0
- package/dist/components/code-block/code-block.js +142 -0
- package/dist/components/code-block/code-block.js.map +1 -0
- package/dist/components/code-block/code-block.stories.js +341 -0
- package/dist/components/code-block/code-block.stories.js.map +1 -0
- package/dist/components/code-block/code-content.d.ts +11 -0
- package/dist/components/code-block/code-content.d.ts.map +1 -0
- package/dist/components/code-block/code-content.js +29 -0
- package/dist/components/code-block/code-content.js.map +1 -0
- package/dist/components/code-block/code-copy-button.d.ts +11 -0
- package/dist/components/code-block/code-copy-button.d.ts.map +1 -0
- package/dist/components/code-block/code-copy-button.js +49 -0
- package/dist/components/code-block/code-copy-button.js.map +1 -0
- package/dist/components/code-block/code-tabs.d.ts +16 -0
- package/dist/components/code-block/code-tabs.d.ts.map +1 -0
- package/dist/components/code-block/code-tabs.js +98 -0
- package/dist/components/code-block/code-tabs.js.map +1 -0
- package/dist/components/code-block/index.d.ts +4 -0
- package/dist/components/code-block/index.d.ts.map +1 -0
- package/dist/components/code-block/index.js +5 -0
- package/dist/components/code-block/index.js.map +1 -0
- package/dist/components/dynamic-item/dynamic-item.d.ts +13 -0
- package/dist/components/dynamic-item/dynamic-item.d.ts.map +1 -0
- package/dist/components/dynamic-item/dynamic-item.js +43 -0
- package/dist/components/dynamic-item/dynamic-item.js.map +1 -0
- package/dist/components/dynamic-item/dynamic-item.stories.js +375 -0
- package/dist/components/dynamic-item/dynamic-item.stories.js.map +1 -0
- package/dist/components/dynamic-item/index.d.ts +2 -0
- package/dist/components/dynamic-item/index.d.ts.map +1 -0
- package/dist/components/dynamic-item/index.js +3 -0
- package/dist/components/dynamic-item/index.js.map +1 -0
- package/dist/components/icon/custom/index.d.ts +2 -0
- package/dist/components/icon/custom/index.d.ts.map +1 -1
- package/dist/components/icon/custom/index.js +2 -0
- package/dist/components/icon/custom/index.js.map +1 -1
- package/dist/components/icon/custom/slack-logo.d.ts +6 -0
- package/dist/components/icon/custom/slack-logo.d.ts.map +1 -0
- package/dist/components/icon/custom/slack-logo.js +34 -0
- package/dist/components/icon/custom/slack-logo.js.map +1 -0
- package/dist/components/icon/custom/stripe-logo.d.ts +8 -0
- package/dist/components/icon/custom/stripe-logo.d.ts.map +1 -0
- package/dist/components/icon/custom/stripe-logo.js +24 -0
- package/dist/components/icon/custom/stripe-logo.js.map +1 -0
- package/dist/components/icon/icon.d.ts +11 -2
- package/dist/components/icon/icon.d.ts.map +1 -1
- package/dist/components/icon/icon.js +12 -3
- package/dist/components/icon/icon.js.map +1 -1
- package/dist/components/icon/icon.stories.js +6 -3
- package/dist/components/icon/icon.stories.js.map +1 -1
- package/dist/components/index.d.ts +9 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +10 -2
- package/dist/components/index.js.map +1 -1
- package/dist/components/inline-tips/inline-tips.d.ts +1 -1
- package/dist/components/inline-tips/inline-tips.d.ts.map +1 -1
- package/dist/components/inline-tips/inline-tips.js +1 -1
- package/dist/components/inline-tips/inline-tips.js.map +1 -1
- package/dist/components/inline-tips/inline-tips.stories.js +5 -5
- package/dist/components/inline-tips/inline-tips.stories.js.map +1 -1
- package/dist/components/input/index.d.ts +2 -0
- package/dist/components/input/index.d.ts.map +1 -0
- package/dist/components/input/index.js +3 -0
- package/dist/components/input/index.js.map +1 -0
- package/dist/components/input/input.d.ts.map +1 -0
- package/dist/components/{input.js → input/input.js} +2 -2
- package/dist/components/input/input.js.map +1 -0
- package/dist/components/{input.stories.js → input/input.stories.js} +1 -1
- package/dist/components/input/input.stories.js.map +1 -0
- package/dist/components/item/index.d.ts +2 -0
- package/dist/components/item/index.d.ts.map +1 -0
- package/dist/components/item/index.js +3 -0
- package/dist/components/item/index.js.map +1 -0
- package/dist/components/item/item.d.ts +32 -0
- package/dist/components/item/item.d.ts.map +1 -0
- package/dist/components/item/item.js +120 -0
- package/dist/components/item/item.js.map +1 -0
- package/dist/components/item/item.stories.js +232 -0
- package/dist/components/item/item.stories.js.map +1 -0
- package/dist/components/label/index.d.ts +2 -0
- package/dist/components/label/index.d.ts.map +1 -0
- package/dist/components/label/index.js +3 -0
- package/dist/components/label/index.js.map +1 -0
- package/dist/components/label/label.d.ts +7 -0
- package/dist/components/label/label.d.ts.map +1 -0
- package/dist/components/label/label.js +13 -0
- package/dist/components/label/label.js.map +1 -0
- package/dist/components/label/label.stories.js +105 -0
- package/dist/components/label/label.stories.js.map +1 -0
- package/dist/components/moving-border/moving-border.d.ts +9 -0
- package/dist/components/moving-border/moving-border.d.ts.map +1 -0
- package/dist/components/moving-border/moving-border.js +54 -0
- package/dist/components/moving-border/moving-border.js.map +1 -0
- package/dist/components/textarea/textarea.js +1 -1
- package/dist/components/textarea/textarea.js.map +1 -1
- package/dist/components/theme/index.d.ts +2 -0
- package/dist/components/theme/index.d.ts.map +1 -0
- package/dist/components/theme/index.js +3 -0
- package/dist/components/theme/index.js.map +1 -0
- package/dist/components/{theme-provider.d.ts → theme/theme-provider.d.ts} +1 -1
- package/dist/components/theme/theme-provider.d.ts.map +1 -0
- package/dist/components/{theme-provider.js → theme/theme-provider.js} +1 -1
- package/dist/components/theme/theme-provider.js.map +1 -0
- package/dist/components/toast/index.d.ts +3 -0
- package/dist/components/toast/index.d.ts.map +1 -0
- package/dist/components/toast/index.js +4 -0
- package/dist/components/toast/index.js.map +1 -0
- package/dist/components/toast/toast-custom.d.ts +19 -0
- package/dist/components/toast/toast-custom.d.ts.map +1 -0
- package/dist/components/toast/toast-custom.js +134 -0
- package/dist/components/toast/toast-custom.js.map +1 -0
- package/dist/components/toast/toast.d.ts +5 -0
- package/dist/components/toast/toast.d.ts.map +1 -0
- package/dist/components/toast/toast.js +40 -0
- package/dist/components/toast/toast.js.map +1 -0
- package/dist/components/toast/toast.stories.js +326 -0
- package/dist/components/toast/toast.stories.js.map +1 -0
- package/dist/components/tooltip/index.d.ts +2 -0
- package/dist/components/tooltip/index.d.ts.map +1 -0
- package/dist/components/tooltip/index.js +3 -0
- package/dist/components/tooltip/index.js.map +1 -0
- package/dist/components/tooltip/tooltip.d.ts +18 -5
- package/dist/components/tooltip/tooltip.d.ts.map +1 -1
- package/dist/components/tooltip/tooltip.js +63 -3
- package/dist/components/tooltip/tooltip.js.map +1 -1
- package/dist/components/tooltip/tooltip.stories.js +560 -0
- package/dist/components/tooltip/tooltip.stories.js.map +1 -0
- package/dist/hooks/index.d.ts +3 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +3 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useResolvedTheme.d.ts +2 -0
- package/dist/hooks/useResolvedTheme.d.ts.map +1 -0
- package/dist/hooks/useResolvedTheme.js +24 -0
- package/dist/hooks/useResolvedTheme.js.map +1 -0
- package/dist/hooks/useShikiHighlight.d.ts +28 -0
- package/dist/hooks/useShikiHighlight.d.ts.map +1 -0
- package/dist/hooks/useShikiHighlight.js +106 -0
- package/dist/hooks/useShikiHighlight.js.map +1 -0
- package/dist/hooks/useShikiStyleInjection.d.ts +2 -0
- package/dist/hooks/useShikiStyleInjection.d.ts.map +1 -0
- package/dist/hooks/useShikiStyleInjection.js +34 -0
- package/dist/hooks/useShikiStyleInjection.js.map +1 -0
- package/index.css +101 -9
- package/package.json +6 -3
- package/src/assets/illustration-1.svg +92 -0
- package/src/assets/illustration-2.svg +14 -0
- package/src/assets/illustration-gradient.svg +7049 -0
- package/src/components/alert/alert.stories.tsx +2 -2
- package/src/components/alert/alert.tsx +3 -3
- package/src/components/avatar/avatar-group.tsx +3 -3
- package/src/components/avatar/avatar.stories.tsx +9 -2
- package/src/components/avatar/avatar.tsx +10 -6
- package/src/components/badge/badge.stories.tsx +468 -0
- package/src/components/badge/badge.tsx +147 -0
- package/src/components/badge/icon-badge.tsx +43 -0
- package/src/components/badge/index.ts +4 -0
- package/src/components/badge/status-badge.tsx +43 -0
- package/src/components/badge/user-badge.tsx +34 -0
- package/src/components/{button.tsx → button/button.tsx} +1 -1
- package/src/components/button/index.ts +1 -0
- package/src/components/checkbox/checkbox-label.tsx +125 -0
- package/src/components/checkbox/checkbox-links.tsx +90 -0
- package/src/components/checkbox/checkbox.stories.tsx +375 -0
- package/src/components/checkbox/checkbox.tsx +71 -0
- package/src/components/checkbox/index.ts +3 -0
- package/src/components/code-block/code-block-footer.tsx +173 -0
- package/src/components/code-block/code-block.stories.tsx +323 -0
- package/src/components/code-block/code-block.tsx +283 -0
- package/src/components/code-block/code-content.tsx +60 -0
- package/src/components/code-block/code-copy-button.tsx +73 -0
- package/src/components/code-block/code-tabs.tsx +170 -0
- package/src/components/code-block/index.ts +3 -0
- package/src/components/dynamic-item/dynamic-item.stories.tsx +261 -0
- package/src/components/dynamic-item/dynamic-item.tsx +68 -0
- package/src/components/dynamic-item/index.ts +1 -0
- package/src/components/icon/custom/index.ts +2 -0
- package/src/components/icon/custom/slack-logo.tsx +35 -0
- package/src/components/icon/custom/stripe-logo.tsx +27 -0
- package/src/components/icon/icon.stories.tsx +3 -1
- package/src/components/icon/icon.tsx +19 -1
- package/src/components/index.ts +9 -1
- package/src/components/inline-tips/inline-tips.stories.tsx +3 -3
- package/src/components/inline-tips/inline-tips.tsx +2 -2
- package/src/components/input/index.ts +1 -0
- package/src/components/{input.tsx → input/input.tsx} +1 -1
- package/src/components/item/index.ts +1 -0
- package/src/components/item/item.stories.tsx +150 -0
- package/src/components/item/item.tsx +182 -0
- package/src/components/label/index.ts +1 -0
- package/src/components/label/label.stories.tsx +67 -0
- package/src/components/label/label.tsx +15 -0
- package/src/components/moving-border/moving-border.tsx +67 -0
- package/src/components/textarea/textarea.tsx +1 -1
- package/src/components/theme/index.ts +1 -0
- package/src/components/toast/index.ts +2 -0
- package/src/components/toast/toast-custom.tsx +154 -0
- package/src/components/toast/toast.stories.tsx +369 -0
- package/src/components/toast/toast.tsx +41 -0
- package/src/components/tooltip/index.ts +1 -0
- package/src/components/tooltip/tooltip.stories.tsx +284 -0
- package/src/components/tooltip/tooltip.tsx +79 -10
- package/src/hooks/index.ts +3 -0
- package/src/hooks/useResolvedTheme.ts +34 -0
- package/src/hooks/useShikiHighlight.ts +140 -0
- package/src/hooks/useShikiStyleInjection.ts +34 -0
- package/dist/components/button.d.ts.map +0 -1
- package/dist/components/button.js.map +0 -1
- package/dist/components/button.stories.js.map +0 -1
- package/dist/components/input.d.ts.map +0 -1
- package/dist/components/input.js.map +0 -1
- package/dist/components/input.stories.js.map +0 -1
- package/dist/components/theme-provider.d.ts.map +0 -1
- package/dist/components/theme-provider.js.map +0 -1
- /package/dist/components/{input.d.ts → input/input.d.ts} +0 -0
- /package/src/components/{button.stories.tsx → button/button.stories.tsx} +0 -0
- /package/src/components/{input.stories.tsx → input/input.stories.tsx} +0 -0
- /package/src/components/{theme-provider.tsx → theme/theme-provider.tsx} +0 -0
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
type RemixiconComponentType,
|
|
3
|
+
RiCheckLine,
|
|
3
4
|
RiCloseLine,
|
|
5
|
+
RiFileCopyLine,
|
|
6
|
+
RiGithubFill,
|
|
4
7
|
RiGoogleFill,
|
|
8
|
+
RiHomeSmileFill,
|
|
5
9
|
RiImageAddFill,
|
|
10
|
+
RiInformationFill,
|
|
6
11
|
RiMicrosoftFill,
|
|
12
|
+
RiMoneyDollarCircleLine,
|
|
13
|
+
RiSubtractLine,
|
|
7
14
|
} from '@remixicon/react';
|
|
8
15
|
import type {ComponentProps} from 'react';
|
|
9
16
|
import {
|
|
@@ -16,7 +23,9 @@ import {
|
|
|
16
23
|
InfoTooltipFillIcon,
|
|
17
24
|
ResizeIcon,
|
|
18
25
|
ShipfoxLogo,
|
|
26
|
+
SlackLogo,
|
|
19
27
|
SpinnerIcon,
|
|
28
|
+
StripeLogo,
|
|
20
29
|
ThunderIcon,
|
|
21
30
|
XCircleSolidIcon,
|
|
22
31
|
} from './custom';
|
|
@@ -37,7 +46,16 @@ const iconsMap = {
|
|
|
37
46
|
componentLine: ComponentLineIcon,
|
|
38
47
|
imageAdd: RiImageAddFill,
|
|
39
48
|
close: RiCloseLine,
|
|
40
|
-
|
|
49
|
+
shipfox: ShipfoxLogo,
|
|
50
|
+
slack: SlackLogo,
|
|
51
|
+
stripe: StripeLogo,
|
|
52
|
+
github: RiGithubFill,
|
|
53
|
+
check: RiCheckLine,
|
|
54
|
+
subtractLine: RiSubtractLine,
|
|
55
|
+
info: RiInformationFill,
|
|
56
|
+
money: RiMoneyDollarCircleLine,
|
|
57
|
+
homeSmile: RiHomeSmileFill,
|
|
58
|
+
copy: RiFileCopyLine,
|
|
41
59
|
} as const satisfies Record<string, RemixiconComponentType>;
|
|
42
60
|
|
|
43
61
|
export type IconName = keyof typeof iconsMap;
|
package/src/components/index.ts
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
export * from './alert';
|
|
2
2
|
export * from './avatar';
|
|
3
|
+
export * from './badge';
|
|
3
4
|
export * from './button';
|
|
5
|
+
export * from './checkbox';
|
|
6
|
+
export * from './code-block';
|
|
7
|
+
export * from './dynamic-item';
|
|
4
8
|
export * from './icon';
|
|
5
9
|
export * from './inline-tips';
|
|
10
|
+
export * from './input';
|
|
11
|
+
export * from './item';
|
|
12
|
+
export * from './label';
|
|
6
13
|
export * from './textarea';
|
|
7
|
-
export * from './theme
|
|
14
|
+
export * from './theme';
|
|
15
|
+
export * from './toast';
|
|
8
16
|
export * from './typography';
|
|
@@ -16,7 +16,7 @@ const meta = {
|
|
|
16
16
|
argTypes: {
|
|
17
17
|
type: {
|
|
18
18
|
control: 'select',
|
|
19
|
-
options: ['default', 'info', 'success', '
|
|
19
|
+
options: ['default', 'info', 'success', 'error'],
|
|
20
20
|
},
|
|
21
21
|
variant: {
|
|
22
22
|
control: 'select',
|
|
@@ -33,7 +33,7 @@ export default meta;
|
|
|
33
33
|
|
|
34
34
|
type Story = StoryObj<typeof meta>;
|
|
35
35
|
|
|
36
|
-
const types = ['default', 'info', 'success', '
|
|
36
|
+
const types = ['default', 'info', 'success', 'error'] as const;
|
|
37
37
|
const variants = ['primary', 'secondary'] as const;
|
|
38
38
|
|
|
39
39
|
export const Default: Story = {
|
|
@@ -80,7 +80,7 @@ export const DesignMock: Story = {
|
|
|
80
80
|
default: {title: 'Title', description: 'Description'},
|
|
81
81
|
info: {title: 'Title', description: 'Description'},
|
|
82
82
|
success: {title: 'Title', description: 'Description'},
|
|
83
|
-
|
|
83
|
+
error: {title: 'Title', description: 'Description'},
|
|
84
84
|
};
|
|
85
85
|
|
|
86
86
|
return (
|
|
@@ -21,7 +21,7 @@ const inlineTipsLineVariants = cva('w-4 self-stretch my-4 rounded-full', {
|
|
|
21
21
|
default: 'bg-tag-neutral-icon',
|
|
22
22
|
info: 'bg-tag-warning-icon',
|
|
23
23
|
success: 'bg-tag-success-icon',
|
|
24
|
-
|
|
24
|
+
error: 'bg-tag-error-icon',
|
|
25
25
|
},
|
|
26
26
|
},
|
|
27
27
|
defaultVariants: {
|
|
@@ -31,7 +31,7 @@ const inlineTipsLineVariants = cva('w-4 self-stretch my-4 rounded-full', {
|
|
|
31
31
|
|
|
32
32
|
type InlineTipsProps = ComponentProps<'div'> &
|
|
33
33
|
VariantProps<typeof inlineTipsBaseVariants> & {
|
|
34
|
-
type?: 'default' | 'info' | 'success' | '
|
|
34
|
+
type?: 'default' | 'info' | 'success' | 'error';
|
|
35
35
|
};
|
|
36
36
|
|
|
37
37
|
function InlineTips({className, variant, type = 'default', children, ...props}: InlineTipsProps) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './input';
|
|
@@ -27,7 +27,7 @@ export function Input({className, type, variant, size, ...props}: InputProps) {
|
|
|
27
27
|
type={type}
|
|
28
28
|
data-slot="input"
|
|
29
29
|
className={cn(
|
|
30
|
-
'placeholder:text-foreground-neutral-muted w-full min-w-0 rounded-6 px-8 text-sm leading-20 text-foreground-neutral-base shadow-
|
|
30
|
+
'placeholder:text-foreground-neutral-muted w-full min-w-0 rounded-6 px-8 text-sm leading-20 text-foreground-neutral-base shadow-button-neutral transition-[color,box-shadow] outline-none',
|
|
31
31
|
'hover:bg-background-field-hover',
|
|
32
32
|
'selection:bg-background-accent-neutral-soft selection:text-foreground-neutral-on-inverted',
|
|
33
33
|
'file:text-foreground-neutral-base file:inline-flex file:font-medium',
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './item';
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import type {Meta, StoryObj} from '@storybook/react';
|
|
2
|
+
import {Button} from 'components/button/button';
|
|
3
|
+
import {Icon} from 'components/icon/icon';
|
|
4
|
+
import {Input} from 'components/input/input';
|
|
5
|
+
import {Label} from 'components/label/label';
|
|
6
|
+
import {
|
|
7
|
+
Item,
|
|
8
|
+
ItemActions,
|
|
9
|
+
ItemContent,
|
|
10
|
+
ItemDescription,
|
|
11
|
+
ItemFooter,
|
|
12
|
+
ItemGroup,
|
|
13
|
+
ItemHeader,
|
|
14
|
+
ItemSeparator,
|
|
15
|
+
ItemTitle,
|
|
16
|
+
} from './item';
|
|
17
|
+
|
|
18
|
+
const meta = {
|
|
19
|
+
title: 'Components/Item',
|
|
20
|
+
component: Item,
|
|
21
|
+
tags: ['autodocs'],
|
|
22
|
+
argTypes: {
|
|
23
|
+
variant: {
|
|
24
|
+
control: 'select',
|
|
25
|
+
options: ['default', 'neutral'],
|
|
26
|
+
},
|
|
27
|
+
size: {
|
|
28
|
+
control: 'select',
|
|
29
|
+
options: ['default', 'sm'],
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
args: {
|
|
33
|
+
variant: 'default',
|
|
34
|
+
size: 'default',
|
|
35
|
+
},
|
|
36
|
+
} satisfies Meta<typeof Item>;
|
|
37
|
+
|
|
38
|
+
export default meta;
|
|
39
|
+
type Story = StoryObj<typeof meta>;
|
|
40
|
+
|
|
41
|
+
export const Default: Story = {
|
|
42
|
+
args: {
|
|
43
|
+
variant: 'default',
|
|
44
|
+
},
|
|
45
|
+
render: (args) => (
|
|
46
|
+
<Item {...args} className="px-12 py-12">
|
|
47
|
+
<ItemContent>
|
|
48
|
+
<ItemTitle>Basic Item</ItemTitle>
|
|
49
|
+
<ItemDescription>A simple item with title and description.</ItemDescription>
|
|
50
|
+
</ItemContent>
|
|
51
|
+
<ItemActions className="pt-8">
|
|
52
|
+
<Button variant="secondary" size="sm">
|
|
53
|
+
Action
|
|
54
|
+
</Button>
|
|
55
|
+
</ItemActions>
|
|
56
|
+
</Item>
|
|
57
|
+
),
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export const Variants: Story = {
|
|
61
|
+
args: {},
|
|
62
|
+
render: () => (
|
|
63
|
+
<ItemGroup className="flex w-full max-w-md flex-col gap-12">
|
|
64
|
+
<Item variant="default" className="px-12 py-12">
|
|
65
|
+
<ItemContent>
|
|
66
|
+
<ItemTitle>Default Variant</ItemTitle>
|
|
67
|
+
<ItemDescription>Standard styling with subtle background and borders.</ItemDescription>
|
|
68
|
+
</ItemContent>
|
|
69
|
+
<ItemActions className="pt-8">
|
|
70
|
+
<Button variant="secondary" size="sm">
|
|
71
|
+
Action
|
|
72
|
+
</Button>
|
|
73
|
+
</ItemActions>
|
|
74
|
+
</Item>
|
|
75
|
+
<Item variant="neutral" className="px-12 py-12">
|
|
76
|
+
<ItemContent>
|
|
77
|
+
<ItemTitle>Neutral Variant</ItemTitle>
|
|
78
|
+
<ItemDescription>Neutral style with subtle background and borders.</ItemDescription>
|
|
79
|
+
</ItemContent>
|
|
80
|
+
<ItemActions className="pt-8">
|
|
81
|
+
<Button variant="primary" size="sm">
|
|
82
|
+
Action
|
|
83
|
+
</Button>
|
|
84
|
+
</ItemActions>
|
|
85
|
+
</Item>
|
|
86
|
+
</ItemGroup>
|
|
87
|
+
),
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
export const ImportPastJobsModal: Story = {
|
|
91
|
+
args: {},
|
|
92
|
+
render: () => (
|
|
93
|
+
<div className="flex w-full max-w-lg flex-col">
|
|
94
|
+
<Item variant="neutral">
|
|
95
|
+
<ItemHeader className="justify-between px-24 py-16">
|
|
96
|
+
<ItemTitle className="text-lg font-medium text-foreground-neutral-base">
|
|
97
|
+
Import past jobs from Github
|
|
98
|
+
</ItemTitle>
|
|
99
|
+
<div className="flex items-center gap-8">
|
|
100
|
+
<kbd className="flex items-center justify-center rounded-8 border border-border-neutral-base shadow-button-neutral bg-background-field-base text-xs text-foreground-neutral-subtle px-4">
|
|
101
|
+
esc
|
|
102
|
+
</kbd>
|
|
103
|
+
<Button
|
|
104
|
+
variant="transparent"
|
|
105
|
+
size="xs"
|
|
106
|
+
className="rounded-4 p-2 cursor-pointer bg-transparent border-none text-foreground-neutral-muted hover:text-foreground-neutral-base hover:bg-background-components-hover transition-colors duration-150 outline-none focus-visible:ring-2 focus-visible:ring-background-accent-blue-base focus-visible:ring-offset-2 w-24 h-24"
|
|
107
|
+
>
|
|
108
|
+
<Icon name="close" />
|
|
109
|
+
</Button>
|
|
110
|
+
</div>
|
|
111
|
+
</ItemHeader>
|
|
112
|
+
<ItemSeparator />
|
|
113
|
+
<ItemContent className="px-24 py-16">
|
|
114
|
+
<ItemDescription className="mb-16 text-sm text-foreground-neutral-subtle">
|
|
115
|
+
Backfill your CI history by importing past runs from your Github repo. We'll handle the
|
|
116
|
+
rest by creating a background task to import the data for you.
|
|
117
|
+
</ItemDescription>
|
|
118
|
+
<div className="flex flex-col gap-20">
|
|
119
|
+
<div className="flex flex-col gap-8">
|
|
120
|
+
<Label htmlFor="repo-owner">Repository owner</Label>
|
|
121
|
+
<Input id="repo-owner" type="text" defaultValue="apache" />
|
|
122
|
+
</div>
|
|
123
|
+
<div className="flex flex-col gap-8">
|
|
124
|
+
<Label htmlFor="repo-name">Repository name</Label>
|
|
125
|
+
<Input id="repo-name" type="text" defaultValue="kafka" />
|
|
126
|
+
</div>
|
|
127
|
+
<div className="flex flex-col gap-8">
|
|
128
|
+
<Label htmlFor="start-date">Start date</Label>
|
|
129
|
+
<Input
|
|
130
|
+
id="start-date"
|
|
131
|
+
type="datetime-local"
|
|
132
|
+
defaultValue="September 5th, 2025"
|
|
133
|
+
className="pl-32"
|
|
134
|
+
/>
|
|
135
|
+
</div>
|
|
136
|
+
</div>
|
|
137
|
+
</ItemContent>
|
|
138
|
+
<ItemSeparator />
|
|
139
|
+
<ItemFooter className="justify-end gap-8 px-24 py-16">
|
|
140
|
+
<Button variant="transparent" size="sm">
|
|
141
|
+
Cancel
|
|
142
|
+
</Button>
|
|
143
|
+
<Button variant="primary" size="sm">
|
|
144
|
+
Import
|
|
145
|
+
</Button>
|
|
146
|
+
</ItemFooter>
|
|
147
|
+
</Item>
|
|
148
|
+
</div>
|
|
149
|
+
),
|
|
150
|
+
};
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import {Slot} from '@radix-ui/react-slot';
|
|
2
|
+
import {cva, type VariantProps} from 'class-variance-authority';
|
|
3
|
+
import type {ComponentProps} from 'react';
|
|
4
|
+
import {cn} from 'utils/cn';
|
|
5
|
+
|
|
6
|
+
export const itemVariants = cva('transition-all duration-150 rounded-8', {
|
|
7
|
+
variants: {
|
|
8
|
+
variant: {
|
|
9
|
+
default:
|
|
10
|
+
'bg-background-components-base text-foreground-neutral-base border border-border-neutral-base shadow-button-neutral',
|
|
11
|
+
neutral:
|
|
12
|
+
'bg-background-neutral-base text-foreground-neutral-base border border-border-neutral-base shadow-button-neutral',
|
|
13
|
+
},
|
|
14
|
+
size: {
|
|
15
|
+
default: '',
|
|
16
|
+
sm: '',
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
defaultVariants: {
|
|
20
|
+
variant: 'default',
|
|
21
|
+
size: 'default',
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
export type ItemProps = ComponentProps<'div'> &
|
|
26
|
+
VariantProps<typeof itemVariants> & {
|
|
27
|
+
asChild?: boolean;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export function Item({className, variant, size, asChild = false, children, ...props}: ItemProps) {
|
|
31
|
+
const Comp = asChild ? Slot : 'div';
|
|
32
|
+
|
|
33
|
+
return (
|
|
34
|
+
<Comp data-slot="item" className={cn(itemVariants({variant, size}), className)} {...props}>
|
|
35
|
+
{children}
|
|
36
|
+
</Comp>
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// ItemGroup
|
|
41
|
+
export type ItemGroupProps = ComponentProps<'div'>;
|
|
42
|
+
|
|
43
|
+
export function ItemGroup({className, children, ...props}: ItemGroupProps) {
|
|
44
|
+
return (
|
|
45
|
+
<div data-slot="item-group" className={cn('flex flex-col', className)} {...props}>
|
|
46
|
+
{children}
|
|
47
|
+
</div>
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// ItemActions
|
|
52
|
+
export type ItemActionsProps = ComponentProps<'div'>;
|
|
53
|
+
|
|
54
|
+
export function ItemActions({className, children, ...props}: ItemActionsProps) {
|
|
55
|
+
return (
|
|
56
|
+
<div
|
|
57
|
+
data-slot="item-actions"
|
|
58
|
+
className={cn('flex shrink-0 items-center gap-8', className)}
|
|
59
|
+
{...props}
|
|
60
|
+
>
|
|
61
|
+
{children}
|
|
62
|
+
</div>
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// ItemContent
|
|
67
|
+
export type ItemContentProps = ComponentProps<'div'>;
|
|
68
|
+
|
|
69
|
+
export function ItemContent({className, children, ...props}: ItemContentProps) {
|
|
70
|
+
return (
|
|
71
|
+
<div
|
|
72
|
+
data-slot="item-content"
|
|
73
|
+
className={cn('flex min-w-0 flex-1 flex-col gap-4', className)}
|
|
74
|
+
{...props}
|
|
75
|
+
>
|
|
76
|
+
{children}
|
|
77
|
+
</div>
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// ItemDescription
|
|
82
|
+
export type ItemDescriptionProps = ComponentProps<'p'>;
|
|
83
|
+
|
|
84
|
+
export function ItemDescription({className, children, ...props}: ItemDescriptionProps) {
|
|
85
|
+
return (
|
|
86
|
+
<p
|
|
87
|
+
data-slot="item-description"
|
|
88
|
+
className={cn(
|
|
89
|
+
'text-xs leading-20 text-foreground-neutral-subtle max-w-250 sm:max-w-fit line-clamp-3',
|
|
90
|
+
className,
|
|
91
|
+
)}
|
|
92
|
+
{...props}
|
|
93
|
+
>
|
|
94
|
+
{children}
|
|
95
|
+
</p>
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// ItemFooter
|
|
100
|
+
export type ItemFooterProps = ComponentProps<'div'>;
|
|
101
|
+
|
|
102
|
+
export function ItemFooter({className, children, ...props}: ItemFooterProps) {
|
|
103
|
+
return (
|
|
104
|
+
<div
|
|
105
|
+
data-slot="item-footer"
|
|
106
|
+
className={cn('flex shrink-0 items-center gap-8 px-12 py-8', className)}
|
|
107
|
+
{...props}
|
|
108
|
+
>
|
|
109
|
+
{children}
|
|
110
|
+
</div>
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// ItemHeader
|
|
115
|
+
export type ItemHeaderProps = ComponentProps<'div'>;
|
|
116
|
+
|
|
117
|
+
export function ItemHeader({className, children, ...props}: ItemHeaderProps) {
|
|
118
|
+
return (
|
|
119
|
+
<div
|
|
120
|
+
data-slot="item-header"
|
|
121
|
+
className={cn('flex shrink-0 items-center gap-8 px-12 py-8', className)}
|
|
122
|
+
{...props}
|
|
123
|
+
>
|
|
124
|
+
{children}
|
|
125
|
+
</div>
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// ItemMedia
|
|
130
|
+
export const itemMediaVariants = cva('flex shrink-0 items-center justify-center', {
|
|
131
|
+
variants: {
|
|
132
|
+
variant: {
|
|
133
|
+
default: '',
|
|
134
|
+
icon: 'text-foreground-neutral-base',
|
|
135
|
+
image: '',
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
defaultVariants: {
|
|
139
|
+
variant: 'default',
|
|
140
|
+
},
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
export type ItemMediaProps = ComponentProps<'div'> & VariantProps<typeof itemMediaVariants>;
|
|
144
|
+
|
|
145
|
+
export function ItemMedia({className, variant, children, ...props}: ItemMediaProps) {
|
|
146
|
+
return (
|
|
147
|
+
<div data-slot="item-media" className={cn(itemMediaVariants({variant}), className)} {...props}>
|
|
148
|
+
{children}
|
|
149
|
+
</div>
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// ItemTitle
|
|
154
|
+
export type ItemTitleProps = ComponentProps<'h3'>;
|
|
155
|
+
|
|
156
|
+
export function ItemTitle({className, children, ...props}: ItemTitleProps) {
|
|
157
|
+
return (
|
|
158
|
+
<h3
|
|
159
|
+
data-slot="item-title"
|
|
160
|
+
className={cn(
|
|
161
|
+
'text-sm font-medium leading-20 text-foreground-neutral-base truncate',
|
|
162
|
+
className,
|
|
163
|
+
)}
|
|
164
|
+
{...props}
|
|
165
|
+
>
|
|
166
|
+
{children}
|
|
167
|
+
</h3>
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// ItemSeparator
|
|
172
|
+
export type ItemSeparatorProps = ComponentProps<'div'>;
|
|
173
|
+
|
|
174
|
+
export function ItemSeparator({className, ...props}: ItemSeparatorProps) {
|
|
175
|
+
return (
|
|
176
|
+
<div
|
|
177
|
+
data-slot="item-separator"
|
|
178
|
+
className={cn('h-px bg-border-neutral-base', className)}
|
|
179
|
+
{...props}
|
|
180
|
+
/>
|
|
181
|
+
);
|
|
182
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './label';
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type {Meta, StoryObj} from '@storybook/react';
|
|
2
|
+
import {Checkbox} from 'components/checkbox';
|
|
3
|
+
import {Input} from 'components/input/input';
|
|
4
|
+
import {Textarea} from 'components/textarea';
|
|
5
|
+
import {Label} from './label';
|
|
6
|
+
|
|
7
|
+
const meta = {
|
|
8
|
+
title: 'Components/Label',
|
|
9
|
+
component: Label,
|
|
10
|
+
tags: ['autodocs'],
|
|
11
|
+
argTypes: {
|
|
12
|
+
htmlFor: {control: 'text'},
|
|
13
|
+
},
|
|
14
|
+
} satisfies Meta<typeof Label>;
|
|
15
|
+
|
|
16
|
+
export default meta;
|
|
17
|
+
|
|
18
|
+
type Story = StoryObj<typeof meta>;
|
|
19
|
+
|
|
20
|
+
export const Default: Story = {
|
|
21
|
+
render: () => (
|
|
22
|
+
<div className="flex flex-col gap-8">
|
|
23
|
+
<Label htmlFor="email">Email</Label>
|
|
24
|
+
<Input id="email" type="email" placeholder="Enter your email" />
|
|
25
|
+
</div>
|
|
26
|
+
),
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const WithCheckbox: Story = {
|
|
30
|
+
render: () => (
|
|
31
|
+
<div className="flex items-center gap-8">
|
|
32
|
+
<Checkbox id="terms" />
|
|
33
|
+
<Label htmlFor="terms">Accept terms and conditions</Label>
|
|
34
|
+
</div>
|
|
35
|
+
),
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export const WithTextarea: Story = {
|
|
39
|
+
render: () => (
|
|
40
|
+
<div className="flex flex-col gap-8">
|
|
41
|
+
<Label htmlFor="message">Message</Label>
|
|
42
|
+
<Textarea id="message" placeholder="Enter your message" />
|
|
43
|
+
</div>
|
|
44
|
+
),
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export const Required: Story = {
|
|
48
|
+
render: () => (
|
|
49
|
+
<div className="flex flex-col gap-8">
|
|
50
|
+
<Label htmlFor="required-field">
|
|
51
|
+
Required Field <span className="text-foreground-highlight-error">*</span>
|
|
52
|
+
</Label>
|
|
53
|
+
<Input id="required-field" type="text" placeholder="This field is required" />
|
|
54
|
+
</div>
|
|
55
|
+
),
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
export const Disabled: Story = {
|
|
59
|
+
render: () => (
|
|
60
|
+
<div className="flex flex-col gap-8">
|
|
61
|
+
<Label htmlFor="disabled-field" className="opacity-50">
|
|
62
|
+
Disabled Field
|
|
63
|
+
</Label>
|
|
64
|
+
<Input id="disabled-field" type="text" placeholder="Disabled input" disabled />
|
|
65
|
+
</div>
|
|
66
|
+
),
|
|
67
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as LabelPrimitive from '@radix-ui/react-label';
|
|
2
|
+
import {cva, type VariantProps} from 'class-variance-authority';
|
|
3
|
+
import type {ComponentProps} from 'react';
|
|
4
|
+
import {cn} from 'utils/cn';
|
|
5
|
+
|
|
6
|
+
export const labelVariants = cva(
|
|
7
|
+
'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70',
|
|
8
|
+
);
|
|
9
|
+
|
|
10
|
+
export type LabelProps = ComponentProps<typeof LabelPrimitive.Root> &
|
|
11
|
+
VariantProps<typeof labelVariants>;
|
|
12
|
+
|
|
13
|
+
export function Label({className, ...props}: LabelProps) {
|
|
14
|
+
return <LabelPrimitive.Root className={cn(labelVariants(), className)} {...props} />;
|
|
15
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import {
|
|
2
|
+
motion,
|
|
3
|
+
useAnimationFrame,
|
|
4
|
+
useMotionTemplate,
|
|
5
|
+
useMotionValue,
|
|
6
|
+
useTransform,
|
|
7
|
+
} from 'framer-motion';
|
|
8
|
+
import type {ComponentProps} from 'react';
|
|
9
|
+
import {useRef} from 'react';
|
|
10
|
+
|
|
11
|
+
export type MovingBorderProps = {
|
|
12
|
+
children: React.ReactNode;
|
|
13
|
+
duration?: number;
|
|
14
|
+
rx?: string;
|
|
15
|
+
ry?: string;
|
|
16
|
+
} & ComponentProps<'svg'>;
|
|
17
|
+
|
|
18
|
+
export function MovingBorder({
|
|
19
|
+
children,
|
|
20
|
+
duration = 3000,
|
|
21
|
+
rx,
|
|
22
|
+
ry,
|
|
23
|
+
...otherProps
|
|
24
|
+
}: MovingBorderProps) {
|
|
25
|
+
const pathRef = useRef<SVGRectElement | null>(null);
|
|
26
|
+
const progress = useMotionValue<number>(0);
|
|
27
|
+
|
|
28
|
+
useAnimationFrame((time: number) => {
|
|
29
|
+
const length = pathRef.current?.getTotalLength();
|
|
30
|
+
if (length) {
|
|
31
|
+
const pxPerMillisecond = length / duration;
|
|
32
|
+
progress.set((time * pxPerMillisecond) % length);
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
const x = useTransform(progress, (val: number) => pathRef.current?.getPointAtLength(val)?.x ?? 0);
|
|
37
|
+
const y = useTransform(progress, (val: number) => pathRef.current?.getPointAtLength(val)?.y ?? 0);
|
|
38
|
+
|
|
39
|
+
const transform = useMotionTemplate`translateX(${x}px) translateY(${y}px) translateX(-50%) translateY(-50%)`;
|
|
40
|
+
|
|
41
|
+
return (
|
|
42
|
+
<>
|
|
43
|
+
<svg
|
|
44
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
45
|
+
preserveAspectRatio="none"
|
|
46
|
+
className="absolute h-full w-full"
|
|
47
|
+
width="100%"
|
|
48
|
+
height="100%"
|
|
49
|
+
{...otherProps}
|
|
50
|
+
>
|
|
51
|
+
<title>Moving Border</title>
|
|
52
|
+
<rect fill="none" width="100%" height="100%" rx={rx} ry={ry} ref={pathRef} />
|
|
53
|
+
</svg>
|
|
54
|
+
<motion.div
|
|
55
|
+
style={{
|
|
56
|
+
position: 'absolute',
|
|
57
|
+
top: 0,
|
|
58
|
+
left: 0,
|
|
59
|
+
display: 'inline-block',
|
|
60
|
+
transform,
|
|
61
|
+
}}
|
|
62
|
+
>
|
|
63
|
+
{children}
|
|
64
|
+
</motion.div>
|
|
65
|
+
</>
|
|
66
|
+
);
|
|
67
|
+
}
|
|
@@ -27,7 +27,7 @@ export function Textarea({className, variant, size, ...props}: TextareaProps) {
|
|
|
27
27
|
<textarea
|
|
28
28
|
data-slot="textarea"
|
|
29
29
|
className={cn(
|
|
30
|
-
'textarea-resize-custom placeholder:text-foreground-neutral-muted w-full min-w-0 rounded-6 px-8 pr-24 text-sm leading-20 text-foreground-neutral-base shadow-
|
|
30
|
+
'textarea-resize-custom placeholder:text-foreground-neutral-muted w-full min-w-0 rounded-6 px-8 pr-24 text-sm leading-20 text-foreground-neutral-base shadow-button-neutral transition-[color,box-shadow] outline-none',
|
|
31
31
|
'hover:bg-background-field-hover',
|
|
32
32
|
'selection:bg-background-accent-neutral-soft selection:text-foreground-neutral-on-inverted',
|
|
33
33
|
'disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-background-neutral-disabled disabled:shadow-none disabled:text-foreground-neutral-disabled',
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './theme-provider';
|