@os-design/core 1.0.229 → 1.0.231
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/dist/cjs/Button/ButtonContent.js +1 -1
- package/dist/cjs/Button/ButtonContent.js.map +1 -1
- package/dist/cjs/Button/index.js +2 -2
- package/dist/cjs/Button/index.js.map +1 -1
- package/dist/cjs/Button/utils/useButtonColors.js +1 -1
- package/dist/cjs/Button/utils/useButtonColors.js.map +1 -1
- package/dist/cjs/ButtonLink/index.js +94 -0
- package/dist/cjs/ButtonLink/index.js.map +1 -0
- package/dist/cjs/Link/index.js +20 -18
- package/dist/cjs/Link/index.js.map +1 -1
- package/dist/cjs/LinkButton/index.js +22 -50
- package/dist/cjs/LinkButton/index.js.map +1 -1
- package/dist/cjs/Select/index.js +2 -2
- package/dist/cjs/Select/index.js.map +1 -1
- package/dist/cjs/index.js +19 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/Button/ButtonContent.js +1 -1
- package/dist/esm/Button/ButtonContent.js.map +1 -1
- package/dist/esm/Button/index.js +2 -2
- package/dist/esm/Button/index.js.map +1 -1
- package/dist/esm/Button/utils/useButtonColors.js +1 -1
- package/dist/esm/Button/utils/useButtonColors.js.map +1 -1
- package/dist/esm/ButtonLink/index.js +78 -0
- package/dist/esm/ButtonLink/index.js.map +1 -0
- package/dist/esm/Link/index.js +36 -23
- package/dist/esm/Link/index.js.map +1 -1
- package/dist/esm/LinkButton/index.js +29 -47
- package/dist/esm/LinkButton/index.js.map +1 -1
- package/dist/esm/Select/index.js +2 -2
- package/dist/esm/Select/index.js.map +1 -1
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/types/ButtonLink/index.d.ts +286 -0
- package/dist/types/ButtonLink/index.d.ts.map +1 -0
- package/dist/types/Link/index.d.ts +7 -0
- package/dist/types/Link/index.d.ts.map +1 -1
- package/dist/types/LinkButton/index.d.ts +7 -283
- package/dist/types/LinkButton/index.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/Button/ButtonContent.tsx +1 -1
- package/src/Button/index.tsx +2 -2
- package/src/Button/utils/useButtonColors.ts +1 -1
- package/src/ButtonLink/index.tsx +102 -0
- package/src/Link/index.tsx +57 -24
- package/src/LinkButton/index.tsx +50 -62
- package/src/Select/index.tsx +2 -2
- package/src/index.ts +2 -0
package/src/Link/index.tsx
CHANGED
|
@@ -22,6 +22,11 @@ export interface LinkProps extends JsxAProps, ReactRouterLinkProps, WithSize {
|
|
|
22
22
|
* @default hover
|
|
23
23
|
*/
|
|
24
24
|
underline?: 'hover' | 'always' | 'never';
|
|
25
|
+
/**
|
|
26
|
+
* Whether the link is disabled.
|
|
27
|
+
* @default false
|
|
28
|
+
*/
|
|
29
|
+
disabled?: boolean;
|
|
25
30
|
/**
|
|
26
31
|
* The custom link component.
|
|
27
32
|
* For example, the Link from react-router-dom.
|
|
@@ -30,9 +35,6 @@ export interface LinkProps extends JsxAProps, ReactRouterLinkProps, WithSize {
|
|
|
30
35
|
as?: React.ElementType;
|
|
31
36
|
}
|
|
32
37
|
|
|
33
|
-
/**
|
|
34
|
-
* Sets base underline styles.
|
|
35
|
-
*/
|
|
36
38
|
const underlineBaseStyles = (p) => css`
|
|
37
39
|
position: relative;
|
|
38
40
|
display: inline-block;
|
|
@@ -48,10 +50,7 @@ const underlineBaseStyles = (p) => css`
|
|
|
48
50
|
}
|
|
49
51
|
`;
|
|
50
52
|
|
|
51
|
-
|
|
52
|
-
* Sets underline styles on hover.
|
|
53
|
-
*/
|
|
54
|
-
const underlineHoverStyles = (p) =>
|
|
53
|
+
export const underlineHoverStyles = (p) =>
|
|
55
54
|
p.underline === 'hover' &&
|
|
56
55
|
css`
|
|
57
56
|
@media (hover: hover) {
|
|
@@ -71,10 +70,7 @@ const underlineHoverStyles = (p) =>
|
|
|
71
70
|
}
|
|
72
71
|
`;
|
|
73
72
|
|
|
74
|
-
|
|
75
|
-
* Sets underline styles always.
|
|
76
|
-
*/
|
|
77
|
-
const underlineAlwaysStyles = (p) =>
|
|
73
|
+
export const underlineAlwaysStyles = (p) =>
|
|
78
74
|
p.underline === 'always' &&
|
|
79
75
|
css`
|
|
80
76
|
${underlineBaseStyles(p)};
|
|
@@ -85,9 +81,26 @@ const underlineAlwaysStyles = (p) =>
|
|
|
85
81
|
}
|
|
86
82
|
`;
|
|
87
83
|
|
|
84
|
+
const disabledStyles = (p) =>
|
|
85
|
+
p.disabled &&
|
|
86
|
+
css`
|
|
87
|
+
pointer-events: none;
|
|
88
|
+
|
|
89
|
+
&,
|
|
90
|
+
&:active,
|
|
91
|
+
&:focus {
|
|
92
|
+
color: ${clr(p.theme.inputColorPlaceholder)};
|
|
93
|
+
}
|
|
94
|
+
`;
|
|
95
|
+
|
|
96
|
+
export const DisabledWrapper = styled.div`
|
|
97
|
+
display: inline-block;
|
|
98
|
+
cursor: not-allowed;
|
|
99
|
+
`;
|
|
100
|
+
|
|
88
101
|
const StyledLink = styled(
|
|
89
102
|
'a',
|
|
90
|
-
omitEmotionProps('size', 'underline', 'as')
|
|
103
|
+
omitEmotionProps('size', 'underline', 'disabled', 'as')
|
|
91
104
|
)<LinkProps>`
|
|
92
105
|
${resetFocusStyles};
|
|
93
106
|
|
|
@@ -103,6 +116,7 @@ const StyledLink = styled(
|
|
|
103
116
|
|
|
104
117
|
${underlineHoverStyles};
|
|
105
118
|
${underlineAlwaysStyles};
|
|
119
|
+
${disabledStyles};
|
|
106
120
|
${sizeStyles};
|
|
107
121
|
`;
|
|
108
122
|
|
|
@@ -110,18 +124,37 @@ const StyledLink = styled(
|
|
|
110
124
|
* The link component to navigate between pages.
|
|
111
125
|
*/
|
|
112
126
|
const Link = forwardRef<HTMLAnchorElement, LinkProps>(
|
|
113
|
-
(
|
|
114
|
-
|
|
115
|
-
underline=
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
127
|
+
(
|
|
128
|
+
{
|
|
129
|
+
underline = 'hover',
|
|
130
|
+
disabled = false,
|
|
131
|
+
as,
|
|
132
|
+
onMouseDown = () => {},
|
|
133
|
+
...rest
|
|
134
|
+
},
|
|
135
|
+
ref
|
|
136
|
+
) => {
|
|
137
|
+
if (disabled) {
|
|
138
|
+
return (
|
|
139
|
+
<DisabledWrapper>
|
|
140
|
+
<StyledLink disabled {...rest} ref={ref} />
|
|
141
|
+
</DisabledWrapper>
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return (
|
|
146
|
+
<StyledLink
|
|
147
|
+
underline={underline}
|
|
148
|
+
as={as}
|
|
149
|
+
onMouseDown={(e) => {
|
|
150
|
+
onMouseDown(e);
|
|
151
|
+
e.preventDefault();
|
|
152
|
+
}}
|
|
153
|
+
{...rest}
|
|
154
|
+
ref={ref}
|
|
155
|
+
/>
|
|
156
|
+
);
|
|
157
|
+
}
|
|
125
158
|
);
|
|
126
159
|
|
|
127
160
|
Link.displayName = 'Link';
|
package/src/LinkButton/index.tsx
CHANGED
|
@@ -1,92 +1,80 @@
|
|
|
1
1
|
import { css } from '@emotion/react';
|
|
2
2
|
import styled from '@emotion/styled';
|
|
3
|
+
import { resetButtonStyles, sizeStyles, WithSize } from '@os-design/styles';
|
|
4
|
+
import { clr } from '@os-design/theming';
|
|
3
5
|
import { omitEmotionProps } from '@os-design/utils';
|
|
4
6
|
import React, { forwardRef } from 'react';
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
import {
|
|
8
|
+
DisabledWrapper,
|
|
9
|
+
underlineAlwaysStyles,
|
|
10
|
+
underlineHoverStyles,
|
|
11
|
+
} from '../Link';
|
|
9
12
|
|
|
10
|
-
type
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
type JsxButtonProps = Omit<JSX.IntrinsicElements['button'], 'ref'>;
|
|
14
|
+
|
|
15
|
+
export interface LinkButtonProps extends JsxButtonProps, WithSize {
|
|
16
|
+
/**
|
|
17
|
+
* Type of the underline styles.
|
|
18
|
+
* @default hover
|
|
19
|
+
*/
|
|
20
|
+
underline?: 'hover' | 'always' | 'never';
|
|
21
|
+
/**
|
|
22
|
+
* Whether the link is disabled.
|
|
23
|
+
* @default false
|
|
24
|
+
*/
|
|
25
|
+
disabled?: boolean;
|
|
26
|
+
}
|
|
15
27
|
|
|
16
28
|
const disabledStyles = (p) =>
|
|
17
29
|
p.disabled &&
|
|
18
30
|
css`
|
|
19
|
-
|
|
31
|
+
cursor: inherit;
|
|
32
|
+
color: ${clr(p.theme.inputColorPlaceholder)};
|
|
20
33
|
`;
|
|
21
34
|
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
omitEmotionProps('
|
|
25
|
-
)
|
|
26
|
-
|
|
27
|
-
|
|
35
|
+
const StyledButton = styled(
|
|
36
|
+
'button',
|
|
37
|
+
omitEmotionProps('size', 'underline')
|
|
38
|
+
)<LinkButtonProps>`
|
|
39
|
+
${resetButtonStyles};
|
|
40
|
+
|
|
41
|
+
cursor: pointer;
|
|
42
|
+
text-align: left;
|
|
43
|
+
line-height: 1.2;
|
|
44
|
+
color: ${(p) => clr(p.theme.linkColor)};
|
|
45
|
+
|
|
46
|
+
${underlineHoverStyles};
|
|
47
|
+
${underlineAlwaysStyles};
|
|
28
48
|
${disabledStyles};
|
|
49
|
+
${sizeStyles};
|
|
29
50
|
`;
|
|
30
51
|
|
|
31
52
|
/**
|
|
32
|
-
* The
|
|
53
|
+
* The link component that is rendered as a button.
|
|
33
54
|
*/
|
|
34
|
-
const LinkButton = forwardRef<
|
|
55
|
+
const LinkButton = forwardRef<HTMLButtonElement, LinkButtonProps>(
|
|
35
56
|
(
|
|
36
|
-
{
|
|
37
|
-
type = 'primary',
|
|
38
|
-
danger = false,
|
|
39
|
-
left,
|
|
40
|
-
right,
|
|
41
|
-
wide = 'default',
|
|
42
|
-
loading = false,
|
|
43
|
-
disabled = false,
|
|
44
|
-
size,
|
|
45
|
-
as,
|
|
46
|
-
onMouseDown = () => {},
|
|
47
|
-
onKeyDown = () => {},
|
|
48
|
-
children,
|
|
49
|
-
...rest
|
|
50
|
-
},
|
|
57
|
+
{ underline = 'hover', disabled = false, onMouseDown = () => {}, ...rest },
|
|
51
58
|
ref
|
|
52
59
|
) => {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
60
|
+
if (disabled) {
|
|
61
|
+
return (
|
|
62
|
+
<DisabledWrapper>
|
|
63
|
+
<StyledButton disabled {...rest} ref={ref} />
|
|
64
|
+
</DisabledWrapper>
|
|
65
|
+
);
|
|
66
|
+
}
|
|
58
67
|
|
|
59
68
|
return (
|
|
60
|
-
<
|
|
61
|
-
|
|
62
|
-
colors={buttonColors}
|
|
63
|
-
wide={wide}
|
|
64
|
-
loading={loading}
|
|
65
|
-
disabled={disabled || loading}
|
|
66
|
-
size={size}
|
|
67
|
-
as={as}
|
|
69
|
+
<StyledButton
|
|
70
|
+
underline={underline}
|
|
68
71
|
onMouseDown={(e) => {
|
|
69
72
|
onMouseDown(e);
|
|
70
73
|
e.preventDefault();
|
|
71
74
|
}}
|
|
72
|
-
onKeyDown={(e) => {
|
|
73
|
-
onKeyDown(e);
|
|
74
|
-
if (disabled || loading) e.preventDefault();
|
|
75
|
-
}}
|
|
76
|
-
aria-disabled={disabled || loading}
|
|
77
|
-
aria-busy={loading}
|
|
78
75
|
{...rest}
|
|
79
76
|
ref={ref}
|
|
80
|
-
|
|
81
|
-
<ButtonContent
|
|
82
|
-
left={left}
|
|
83
|
-
right={right}
|
|
84
|
-
loading={loading}
|
|
85
|
-
loadingColors={loadingColors}
|
|
86
|
-
>
|
|
87
|
-
{children}
|
|
88
|
-
</ButtonContent>
|
|
89
|
-
</StyledLinkButton>
|
|
77
|
+
/>
|
|
90
78
|
);
|
|
91
79
|
}
|
|
92
80
|
);
|
package/src/Select/index.tsx
CHANGED
|
@@ -331,7 +331,7 @@ export const Placeholder = styled.span`
|
|
|
331
331
|
${ellipsisStyles};
|
|
332
332
|
`;
|
|
333
333
|
|
|
334
|
-
const
|
|
334
|
+
const titleUnborderedStyles = (p) =>
|
|
335
335
|
p.unbordered &&
|
|
336
336
|
css`
|
|
337
337
|
font-weight: 500;
|
|
@@ -350,7 +350,7 @@ export const Title = styled(
|
|
|
350
350
|
omitEmotionProps('disabled', 'unbordered')
|
|
351
351
|
)<TitleProps>`
|
|
352
352
|
color: ${(p) => clr(p.theme.colorText)};
|
|
353
|
-
${
|
|
353
|
+
${titleUnborderedStyles};
|
|
354
354
|
${titleDisabledStyles};
|
|
355
355
|
${ellipsisStyles};
|
|
356
356
|
`;
|
package/src/index.ts
CHANGED
|
@@ -4,6 +4,7 @@ export { default as AvatarSkeleton } from './AvatarSkeleton';
|
|
|
4
4
|
export { default as Breadcrumb } from './Breadcrumb';
|
|
5
5
|
export { default as BreadcrumbItem } from './BreadcrumbItem';
|
|
6
6
|
export { default as Button } from './Button';
|
|
7
|
+
export { default as ButtonLink } from './ButtonLink';
|
|
7
8
|
export { default as Checkbox } from './Checkbox';
|
|
8
9
|
export { default as CheckboxSkeleton } from './CheckboxSkeleton';
|
|
9
10
|
export { default as DatePicker } from './DatePicker';
|
|
@@ -68,6 +69,7 @@ export * from './AvatarSkeleton';
|
|
|
68
69
|
export * from './Breadcrumb';
|
|
69
70
|
export * from './BreadcrumbItem';
|
|
70
71
|
export * from './Button';
|
|
72
|
+
export * from './ButtonLink';
|
|
71
73
|
export * from './Checkbox';
|
|
72
74
|
export * from './CheckboxSkeleton';
|
|
73
75
|
export * from './DatePicker';
|