playbook_ui 14.6.1 → 14.6.2.pre.alpha.PBNTR633dropdownavailablepropstable4303
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.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/_playbook.scss +2 -1
- data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +4 -4
- data/app/pb_kits/playbook/pb_dropdown/_dropdown.tsx +11 -11
- data/app/pb_kits/playbook/pb_dropdown/dropdown.rb +2 -2
- data/app/pb_kits/playbook/pb_dropdown/dropdown.test.jsx +1 -1
- data/app/pb_kits/playbook/pb_link/_link.scss +66 -0
- data/app/pb_kits/playbook/pb_link/_link.tsx +107 -0
- data/app/pb_kits/playbook/pb_link/docs/_link_color.html.erb +30 -0
- data/app/pb_kits/playbook/pb_link/docs/_link_color.jsx +40 -0
- data/app/pb_kits/playbook/pb_link/docs/_link_disabled.html.erb +5 -0
- data/app/pb_kits/playbook/pb_link/docs/_link_disabled.jsx +15 -0
- data/app/pb_kits/playbook/pb_link/docs/_link_icon.html.erb +15 -0
- data/app/pb_kits/playbook/pb_link/docs/_link_icon.jsx +25 -0
- data/app/pb_kits/playbook/pb_link/docs/_link_tag.html.erb +35 -0
- data/app/pb_kits/playbook/pb_link/docs/_link_tag.jsx +45 -0
- data/app/pb_kits/playbook/pb_link/docs/_link_underline.html.erb +5 -0
- data/app/pb_kits/playbook/pb_link/docs/_link_underline.jsx +15 -0
- data/app/pb_kits/playbook/pb_link/docs/example.yml +16 -0
- data/app/pb_kits/playbook/pb_link/docs/index.js +5 -0
- data/app/pb_kits/playbook/pb_link/link.html.erb +21 -0
- data/app/pb_kits/playbook/pb_link/link.rb +44 -0
- data/app/pb_kits/playbook/pb_link/link.test.jsx +92 -0
- data/app/pb_kits/playbook/tokens/_typography.scss +35 -0
- data/dist/chunks/_weekday_stacked-BeZ0h2P0.js +45 -0
- data/dist/chunks/vendor.js +1 -1
- data/dist/menu.yml +3 -0
- data/dist/playbook-doc.js +1 -1
- data/dist/playbook.css +1 -1
- data/lib/playbook/version.rb +2 -2
- metadata +23 -6
- data/dist/chunks/_weekday_stacked-BR99DW9T.js +0 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0e0a61942ce72178bc4995507346515c1ca4a4347152d168cc9e84061d66231f
|
4
|
+
data.tar.gz: b40339fc9adb7796cdb029c5450f3f3d9065ca3122f3659692bbfd42a94c3c67
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0dba16c359445b2daebcfcd0f56b4cfd50a678fdf09959ed37cbda194900cabaa6da73d557fe064f1e9f9c89eda514341bf72e7db65df606cd2d96039518c3af
|
7
|
+
data.tar.gz: 2bd784894bceafb2c1fdf90aa9aea4f69d19020e2017c900e03a5f87846b7c04b32cf8c4f1fa5113db4853d4db266978c5836556f9b87af16e529cc0bbaa2dcd
|
@@ -30,6 +30,7 @@
|
|
30
30
|
@import 'pb_dialog/dialog';
|
31
31
|
@import 'pb_distribution_bar/distribution_bar';
|
32
32
|
@import 'pb_draggable/draggable';
|
33
|
+
@import 'pb_drawer/drawer';
|
33
34
|
@import 'pb_dropdown/dropdown';
|
34
35
|
@import 'pb_file_upload/file_upload';
|
35
36
|
@import 'pb_filter/filter';
|
@@ -54,6 +55,7 @@
|
|
54
55
|
@import 'pb_legend/legend';
|
55
56
|
@import 'pb_lightbox/lightbox';
|
56
57
|
@import 'pb_line_graph/line_graph';
|
58
|
+
@import 'pb_link/link';
|
57
59
|
@import 'pb_list/list';
|
58
60
|
@import 'pb_loading_inline/loading_inline';
|
59
61
|
@import 'pb_map/map';
|
@@ -106,7 +108,6 @@
|
|
106
108
|
@import 'pb_user_badge/user_badge';
|
107
109
|
@import 'pb_walkthrough/walkthrough';
|
108
110
|
@import 'pb_weekday_stacked/weekday_stacked';
|
109
|
-
@import 'pb_drawer/drawer';
|
110
111
|
@import 'utilities/mixins';
|
111
112
|
@import 'utilities/spacing';
|
112
113
|
@import 'utilities/cursor';
|
@@ -9,7 +9,7 @@
|
|
9
9
|
|
10
10
|
@import "./scss_partials/dropdown_animation";
|
11
11
|
|
12
|
-
|
12
|
+
[class*="pb_dropdown"] {
|
13
13
|
.dropdown_wrapper {
|
14
14
|
[class*="dropdown_trigger_wrapper"] {
|
15
15
|
@include pb_body;
|
@@ -131,7 +131,7 @@
|
|
131
131
|
}
|
132
132
|
}
|
133
133
|
|
134
|
-
|
134
|
+
&[class*="separators_hidden"] {
|
135
135
|
.dropdown_wrapper {
|
136
136
|
.pb_dropdown_container {
|
137
137
|
|
@@ -142,7 +142,7 @@
|
|
142
142
|
}
|
143
143
|
}
|
144
144
|
|
145
|
-
|
145
|
+
&[class*="subtle"] {
|
146
146
|
.dropdown_wrapper {
|
147
147
|
.pb_dropdown_container {
|
148
148
|
|
@@ -178,7 +178,7 @@
|
|
178
178
|
}
|
179
179
|
}
|
180
180
|
|
181
|
-
|
181
|
+
&[class*="separators_hidden"] {
|
182
182
|
.dropdown_wrapper {
|
183
183
|
.pb_dropdown_container {
|
184
184
|
[class*="pb_dropdown_option"]:first-child {
|
@@ -47,7 +47,7 @@ interface DropdownComponent
|
|
47
47
|
Container: typeof DropdownContainer;
|
48
48
|
}
|
49
49
|
|
50
|
-
const Dropdown =
|
50
|
+
const Dropdown: React.ForwardRefRenderFunction<unknown, DropdownProps> = (props, ref) => {
|
51
51
|
const {
|
52
52
|
aria = {},
|
53
53
|
autocomplete = false,
|
@@ -74,10 +74,8 @@ const Dropdown = forwardRef((props: DropdownProps, ref: any) => {
|
|
74
74
|
const htmlProps = buildHtmlProps(htmlOptions);
|
75
75
|
const separatorsClass = separators ? '' : 'separators_hidden'
|
76
76
|
const classes = classnames(
|
77
|
-
buildCss("pb_dropdown"),
|
77
|
+
buildCss("pb_dropdown", variant, separatorsClass),
|
78
78
|
globalProps(props),
|
79
|
-
variant,
|
80
|
-
separatorsClass,
|
81
79
|
className
|
82
80
|
);
|
83
81
|
|
@@ -262,7 +260,8 @@ const Dropdown = forwardRef((props: DropdownProps, ref: any) => {
|
|
262
260
|
<DropdownContainer>
|
263
261
|
{optionsWithBlankSelection &&
|
264
262
|
optionsWithBlankSelection?.map((option: GenericObject) => (
|
265
|
-
|
263
|
+
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
264
|
+
<ForwardedDropdown.Option key={option.id}
|
266
265
|
option={option}
|
267
266
|
/>
|
268
267
|
))}
|
@@ -280,11 +279,12 @@ const Dropdown = forwardRef((props: DropdownProps, ref: any) => {
|
|
280
279
|
</DropdownContext.Provider>
|
281
280
|
</div>
|
282
281
|
)
|
283
|
-
}
|
282
|
+
}
|
284
283
|
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
284
|
+
const ForwardedDropdown = forwardRef(Dropdown) as DropdownComponent;
|
285
|
+
ForwardedDropdown.displayName = "Dropdown";
|
286
|
+
ForwardedDropdown.Option = DropdownOption;
|
287
|
+
ForwardedDropdown.Trigger = DropdownTrigger;
|
288
|
+
ForwardedDropdown.Container = DropdownContainer;
|
289
289
|
|
290
|
-
export default
|
290
|
+
export default ForwardedDropdown;
|
@@ -24,7 +24,7 @@ module Playbook
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def classname
|
27
|
-
generate_classname("pb_dropdown", variant, separators_class
|
27
|
+
generate_classname("pb_dropdown", variant, separators_class)
|
28
28
|
end
|
29
29
|
|
30
30
|
private
|
@@ -38,7 +38,7 @@ module Playbook
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def separators_class
|
41
|
-
separators ?
|
41
|
+
separators ? nil : "separators_hidden"
|
42
42
|
end
|
43
43
|
|
44
44
|
def options_with_blank
|
@@ -50,7 +50,7 @@ test('generated default kit and classname', () => {
|
|
50
50
|
|
51
51
|
const kit = screen.getByTestId(testId)
|
52
52
|
expect(kit).toBeInTheDocument()
|
53
|
-
expect(kit).toHaveClass('
|
53
|
+
expect(kit).toHaveClass('pb_dropdown_default')
|
54
54
|
})
|
55
55
|
|
56
56
|
test('generated default Trigger and Container when none passed in', () => {
|
@@ -0,0 +1,66 @@
|
|
1
|
+
@import "../tokens/colors";
|
2
|
+
@import "../tokens/line_height";
|
3
|
+
@import "../tokens/typography";
|
4
|
+
@import "../tokens/border_radius";
|
5
|
+
|
6
|
+
[class^=pb_link_kit]{
|
7
|
+
@include pb_link($primary);
|
8
|
+
&:hover {
|
9
|
+
color: $text_lt_default;
|
10
|
+
}
|
11
|
+
&:focus {
|
12
|
+
outline: none;
|
13
|
+
}
|
14
|
+
&:focus-visible {
|
15
|
+
border-radius: $border_rad_light;
|
16
|
+
outline: 1px solid $primary;
|
17
|
+
outline-offset: 2px;
|
18
|
+
}
|
19
|
+
&:visited {
|
20
|
+
color: $data_3;
|
21
|
+
}
|
22
|
+
&.dark {
|
23
|
+
@include pb_link($active_dark);
|
24
|
+
&:hover {
|
25
|
+
color: $text_dk_default;
|
26
|
+
}
|
27
|
+
}
|
28
|
+
@each $color_name, $color_value in $pb_link_colors {
|
29
|
+
&[class*=_#{"" + $color_name}] {
|
30
|
+
@include pb_link($color_value);
|
31
|
+
|
32
|
+
&:hover {
|
33
|
+
color: map-get($pb_link_hover_colors, $color_name);
|
34
|
+
}
|
35
|
+
|
36
|
+
&:visited {
|
37
|
+
color: $data_3;
|
38
|
+
}
|
39
|
+
}
|
40
|
+
}
|
41
|
+
|
42
|
+
@each $dark_color_name, $dark_color_value in $pb_dark_link_colors{
|
43
|
+
&[class*=_#{$dark_color_name}][class*=dark]{
|
44
|
+
@include pb_link($dark_color_value);
|
45
|
+
|
46
|
+
&:hover {
|
47
|
+
color: map-get($pb_dark_link_hover_colors, $dark_color_name);
|
48
|
+
}
|
49
|
+
|
50
|
+
&:visited {
|
51
|
+
color: $data_3;
|
52
|
+
}
|
53
|
+
}
|
54
|
+
}
|
55
|
+
|
56
|
+
&[class*=_underline] {
|
57
|
+
text-decoration: underline;
|
58
|
+
}
|
59
|
+
|
60
|
+
&[class*=_disabled] {
|
61
|
+
pointer-events: none;
|
62
|
+
cursor: default;
|
63
|
+
color: $text_lt_lighter;
|
64
|
+
}
|
65
|
+
|
66
|
+
}
|
@@ -0,0 +1,107 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
import classnames from 'classnames'
|
3
|
+
|
4
|
+
import { buildAriaProps, buildCss, buildDataProps, buildHtmlProps } from '../utilities/props'
|
5
|
+
import { globalProps, GlobalProps } from '../utilities/globalProps'
|
6
|
+
|
7
|
+
import Icon from '../pb_icon/_icon'
|
8
|
+
|
9
|
+
type LinkProps = {
|
10
|
+
aria?: {[key: string]: string},
|
11
|
+
className?: string,
|
12
|
+
children?: React.ReactChild[] | React.ReactChild,
|
13
|
+
color?: 'default' | 'body' | 'muted' | 'destructive',
|
14
|
+
dark?: boolean,
|
15
|
+
data?: {[key: string]: string},
|
16
|
+
disabled?: boolean,
|
17
|
+
href?: string,
|
18
|
+
htmlOptions?: {[key: string]: string | number | boolean | (() => void) | ((arg?: Event) => void)},
|
19
|
+
icon?: string,
|
20
|
+
iconRight?: string,
|
21
|
+
id?: string,
|
22
|
+
tag?: 'a' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'span' | 'div',
|
23
|
+
text?: string,
|
24
|
+
underline?: boolean,
|
25
|
+
} & GlobalProps
|
26
|
+
|
27
|
+
const Link = (props: LinkProps): React.ReactElement => {
|
28
|
+
const {
|
29
|
+
aria = {},
|
30
|
+
children,
|
31
|
+
className,
|
32
|
+
color = '',
|
33
|
+
data = {},
|
34
|
+
disabled = false,
|
35
|
+
href= '',
|
36
|
+
htmlOptions = {},
|
37
|
+
icon = '',
|
38
|
+
iconRight = '',
|
39
|
+
id = '',
|
40
|
+
tag = 'a',
|
41
|
+
text = '',
|
42
|
+
underline = false,
|
43
|
+
} = props
|
44
|
+
|
45
|
+
const ariaProps: {[key: string]: string} = buildAriaProps(aria)
|
46
|
+
const dataProps: {[key: string]: string} = buildDataProps(data)
|
47
|
+
const htmlProps = buildHtmlProps(htmlOptions);
|
48
|
+
const classes = classnames(
|
49
|
+
buildCss('pb_link_kit', color, underline ? 'underline' : '', disabled ? 'disabled' : ''),
|
50
|
+
globalProps(props),
|
51
|
+
className
|
52
|
+
)
|
53
|
+
const Tag = tag as keyof JSX.IntrinsicElements
|
54
|
+
|
55
|
+
const renderContent = () => (
|
56
|
+
<>
|
57
|
+
{icon && (
|
58
|
+
<Icon
|
59
|
+
fixedWidth
|
60
|
+
icon={icon}
|
61
|
+
marginRight="xxs"
|
62
|
+
size="xs"
|
63
|
+
/>
|
64
|
+
)}
|
65
|
+
{text || children}
|
66
|
+
{iconRight && (
|
67
|
+
<Icon
|
68
|
+
fixedWidth
|
69
|
+
icon={iconRight}
|
70
|
+
marginLeft="xxs"
|
71
|
+
size="xs"
|
72
|
+
/>
|
73
|
+
)}
|
74
|
+
</>
|
75
|
+
)
|
76
|
+
|
77
|
+
const commonProps = {
|
78
|
+
...ariaProps,
|
79
|
+
...dataProps,
|
80
|
+
...htmlProps,
|
81
|
+
className: classes,
|
82
|
+
id,
|
83
|
+
}
|
84
|
+
|
85
|
+
if (tag === 'a') {
|
86
|
+
return (
|
87
|
+
<a
|
88
|
+
{...commonProps}
|
89
|
+
href={href}
|
90
|
+
>
|
91
|
+
{renderContent()}
|
92
|
+
</a>
|
93
|
+
)
|
94
|
+
} else {
|
95
|
+
return (
|
96
|
+
<a
|
97
|
+
{...commonProps}
|
98
|
+
href={href}
|
99
|
+
>
|
100
|
+
<Tag>{renderContent()}</Tag>
|
101
|
+
</a>
|
102
|
+
)
|
103
|
+
}
|
104
|
+
|
105
|
+
}
|
106
|
+
|
107
|
+
export default Link
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<div>
|
2
|
+
<%= pb_rails("link", props: {
|
3
|
+
text: "link example",
|
4
|
+
href: "https://www.google.com/search?q=playbook+design+system",
|
5
|
+
}) %>
|
6
|
+
</div>
|
7
|
+
|
8
|
+
<div>
|
9
|
+
<%= pb_rails("link", props: {
|
10
|
+
text: "link example",
|
11
|
+
href: "https://www.youtube.com/@PowerHRG",
|
12
|
+
color: "body",
|
13
|
+
}) %>
|
14
|
+
</div>
|
15
|
+
|
16
|
+
<div>
|
17
|
+
<%= pb_rails("link", props: {
|
18
|
+
text: "link example",
|
19
|
+
href: "https://github.com/powerhome/.github/blob/main/profile/README.md",
|
20
|
+
color: "muted",
|
21
|
+
}) %>
|
22
|
+
</div>
|
23
|
+
|
24
|
+
<div>
|
25
|
+
<%= pb_rails("link", props: {
|
26
|
+
text: "link example",
|
27
|
+
href: "https://rubygems.org/gems/playbook_ui/",
|
28
|
+
color: "destructive",
|
29
|
+
}) %>
|
30
|
+
</div>
|
@@ -0,0 +1,40 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
import { Link } from 'playbook-ui'
|
3
|
+
|
4
|
+
const LinkColor = (props) => (
|
5
|
+
<div>
|
6
|
+
<div>
|
7
|
+
<Link
|
8
|
+
href="https://www.google.com/search?q=playbook+design+system"
|
9
|
+
text="link example"
|
10
|
+
{...props}
|
11
|
+
/>
|
12
|
+
</div>
|
13
|
+
<div>
|
14
|
+
<Link
|
15
|
+
color="body"
|
16
|
+
href="https://www.youtube.com/@PowerHRG"
|
17
|
+
text="link example"
|
18
|
+
{...props}
|
19
|
+
/>
|
20
|
+
</div>
|
21
|
+
<div>
|
22
|
+
<Link
|
23
|
+
color="muted"
|
24
|
+
href="https://github.com/powerhome/.github/blob/main/profile/README.md"
|
25
|
+
text="link example"
|
26
|
+
{...props}
|
27
|
+
/>
|
28
|
+
</div>
|
29
|
+
<div>
|
30
|
+
<Link
|
31
|
+
color="destructive"
|
32
|
+
href="https://rubygems.org/gems/playbook_ui/"
|
33
|
+
text="link example"
|
34
|
+
{...props}
|
35
|
+
/>
|
36
|
+
</div>
|
37
|
+
</div>
|
38
|
+
)
|
39
|
+
|
40
|
+
export default LinkColor
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<div>
|
2
|
+
<%= pb_rails("link", props: {
|
3
|
+
text: "link example",
|
4
|
+
href: "#icon",
|
5
|
+
icon: "arrow-up-right-from-square",
|
6
|
+
}) %>
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<div>
|
10
|
+
<%= pb_rails("link", props: {
|
11
|
+
text: "link example",
|
12
|
+
href: "#icon2",
|
13
|
+
icon_right: "chevron-right",
|
14
|
+
}) %>
|
15
|
+
</div>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
import { Link } from 'playbook-ui'
|
3
|
+
|
4
|
+
const LinkIcon = (props) => (
|
5
|
+
<div>
|
6
|
+
<div>
|
7
|
+
<Link
|
8
|
+
href="#icon"
|
9
|
+
icon="arrow-up-right-from-square"
|
10
|
+
text="link example"
|
11
|
+
{...props}
|
12
|
+
/>
|
13
|
+
</div>
|
14
|
+
<div>
|
15
|
+
<Link
|
16
|
+
href="#icon2"
|
17
|
+
iconRight="chevron-right"
|
18
|
+
text="link example"
|
19
|
+
{...props}
|
20
|
+
/>
|
21
|
+
</div>
|
22
|
+
</div>
|
23
|
+
)
|
24
|
+
|
25
|
+
export default LinkIcon
|
@@ -0,0 +1,35 @@
|
|
1
|
+
<%= pb_rails("link", props: {
|
2
|
+
text: "h1 link example",
|
3
|
+
href: "#tag",
|
4
|
+
icon: "arrow-up-right-from-square",
|
5
|
+
tag: "h1",
|
6
|
+
}) %>
|
7
|
+
|
8
|
+
<%= pb_rails("link", props: {
|
9
|
+
text: "h3 link example",
|
10
|
+
href: "#tag2",
|
11
|
+
tag: "h3",
|
12
|
+
underline: true,
|
13
|
+
}) %>
|
14
|
+
|
15
|
+
<%= pb_rails("link", props: {
|
16
|
+
color: "destructive",
|
17
|
+
text: "h6 link example",
|
18
|
+
href: "#tag3",
|
19
|
+
tag: "h6",
|
20
|
+
}) %>
|
21
|
+
|
22
|
+
<%= pb_rails("link", props: {
|
23
|
+
text: "p link example",
|
24
|
+
href: "#tag4",
|
25
|
+
icon_right: "chevron-right",
|
26
|
+
tag: "p",
|
27
|
+
}) %>
|
28
|
+
|
29
|
+
<div>
|
30
|
+
This is a <%= pb_rails("link", props: {
|
31
|
+
text: "span link example",
|
32
|
+
href: "#tag5",
|
33
|
+
tag: "span",
|
34
|
+
}) %>
|
35
|
+
</div>
|
@@ -0,0 +1,45 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
import { Link } from 'playbook-ui'
|
3
|
+
|
4
|
+
const LinkTag = (props) => (
|
5
|
+
<div>
|
6
|
+
<Link
|
7
|
+
href="#tag"
|
8
|
+
icon="arrow-up-right-from-square"
|
9
|
+
tag="h1"
|
10
|
+
text="h1 link example"
|
11
|
+
{...props}
|
12
|
+
/>
|
13
|
+
<Link
|
14
|
+
href="#tag2"
|
15
|
+
tag="h3"
|
16
|
+
text="h3 link example"
|
17
|
+
underline
|
18
|
+
{...props}
|
19
|
+
/>
|
20
|
+
<Link
|
21
|
+
color="destructive"
|
22
|
+
href="#tag3"
|
23
|
+
tag="h6"
|
24
|
+
text="h6 link example"
|
25
|
+
{...props}
|
26
|
+
/>
|
27
|
+
<Link
|
28
|
+
href="#tag4"
|
29
|
+
iconRight="chevron-right"
|
30
|
+
tag="p"
|
31
|
+
text="p link example"
|
32
|
+
{...props}
|
33
|
+
/>
|
34
|
+
<div>
|
35
|
+
This is a <Link
|
36
|
+
href="#tag5"
|
37
|
+
tag="span"
|
38
|
+
text="span link example"
|
39
|
+
{...props}
|
40
|
+
/>
|
41
|
+
</div>
|
42
|
+
</div>
|
43
|
+
)
|
44
|
+
|
45
|
+
export default LinkTag
|
@@ -0,0 +1,16 @@
|
|
1
|
+
examples:
|
2
|
+
|
3
|
+
rails:
|
4
|
+
- link_color: Color
|
5
|
+
- link_underline: Underline
|
6
|
+
- link_icon: Icon
|
7
|
+
- link_disabled: Disabled
|
8
|
+
- link_tag: Tag
|
9
|
+
|
10
|
+
|
11
|
+
react:
|
12
|
+
- link_color: Color
|
13
|
+
- link_underline: Underline
|
14
|
+
- link_icon: Icon
|
15
|
+
- link_disabled: Disabled
|
16
|
+
- link_tag: Tag
|
@@ -0,0 +1,5 @@
|
|
1
|
+
export { default as LinkColor } from './_link_color.jsx'
|
2
|
+
export { default as LinkUnderline } from './_link_underline.jsx'
|
3
|
+
export { default as LinkIcon } from './_link_icon.jsx'
|
4
|
+
export { default as LinkDisabled } from './_link_disabled.jsx'
|
5
|
+
export { default as LinkTag } from './_link_tag.jsx'
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<% link_content = proc do %>
|
2
|
+
<% if object.icon.present? %>
|
3
|
+
<%= pb_rails("icon", props: { icon: object.icon, fixed_width: true, size: "xs", margin_right: "xxs" }) %>
|
4
|
+
<% end %>
|
5
|
+
<%= object.content %>
|
6
|
+
<% if object.icon_right.present? %>
|
7
|
+
<%= pb_rails("icon", props: { icon: object.icon_right, fixed_width: true, size: "xs", margin_left: "xxs" }) %>
|
8
|
+
<% end %>
|
9
|
+
<% end %>
|
10
|
+
|
11
|
+
<% if object.tag == "a" %>
|
12
|
+
<%= pb_content_tag(object.tag, { href: object.href }) do %>
|
13
|
+
<%= link_content.call %>
|
14
|
+
<% end %>
|
15
|
+
<% else %>
|
16
|
+
<%= pb_content_tag(:a, { href: object.href }) do %>
|
17
|
+
<%= content_tag(object.tag) do %>
|
18
|
+
<%= link_content.call %>
|
19
|
+
<% end %>
|
20
|
+
<% end %>
|
21
|
+
<% end %>
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Playbook
|
4
|
+
module PbLink
|
5
|
+
class Link < ::Playbook::KitBase
|
6
|
+
prop :color, type: Playbook::Props::Enum,
|
7
|
+
values: %w[default body muted destructive],
|
8
|
+
default: "default"
|
9
|
+
prop :disabled, type: Playbook::Props::Boolean,
|
10
|
+
default: false
|
11
|
+
prop :href
|
12
|
+
prop :icon
|
13
|
+
prop :icon_right
|
14
|
+
prop :tag, type: Playbook::Props::Enum,
|
15
|
+
values: %w[a h1 h2 h3 h4 h5 h6 p span div],
|
16
|
+
default: "a"
|
17
|
+
prop :text
|
18
|
+
prop :underline, type: Playbook::Props::Boolean,
|
19
|
+
default: false
|
20
|
+
|
21
|
+
def classname
|
22
|
+
generate_classname("pb_link_kit", color_class, underline_class, disabled_class)
|
23
|
+
end
|
24
|
+
|
25
|
+
def content
|
26
|
+
text
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def color_class
|
32
|
+
color == "default" ? nil : color
|
33
|
+
end
|
34
|
+
|
35
|
+
def disabled_class
|
36
|
+
disabled ? "disabled" : nil
|
37
|
+
end
|
38
|
+
|
39
|
+
def underline_class
|
40
|
+
underline ? "underline" : nil
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|