playbook_ui 14.13.0.pre.alpha.PLAY1856doc6166 → 14.13.0.pre.alpha.PLAY1873rails86087
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 +1 -0
- data/app/pb_kits/playbook/pb_avatar_action_button/_avatar_action_button.scss +66 -0
- data/app/pb_kits/playbook/pb_avatar_action_button/_avatar_action_button.tsx +98 -0
- data/app/pb_kits/playbook/pb_avatar_action_button/avatar_action_button.html.erb +28 -0
- data/app/pb_kits/playbook/pb_avatar_action_button/avatar_action_button.rb +42 -0
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_actions.html.erb +19 -0
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_actions.jsx +26 -0
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_default.html.erb +10 -0
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_default.jsx +17 -0
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_on_click.jsx +19 -0
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_onclick.html.erb +16 -0
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_placement.html.erb +35 -0
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_placement.jsx +42 -0
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_tooltip.html.erb +13 -0
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/example.yml +15 -0
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/index.js +4 -0
- data/app/pb_kits/playbook/pb_avatar_action_button/pb_avatar_action_button.test.js +31 -0
- data/app/pb_kits/playbook/pb_bar_graph/docs/example.yml +0 -1
- data/app/pb_kits/playbook/pb_bar_graph/docs/index.js +0 -1
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table.html.erb +2 -2
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table.md +1 -4
- data/app/pb_kits/playbook/pb_draggable/docs/example.yml +0 -2
- data/app/pb_kits/playbook/pb_draggable/docs/index.js +1 -2
- data/app/pb_kits/playbook/pb_draggable/subcomponents/DraggableContainer.tsx +4 -7
- data/app/pb_kits/playbook/pb_draggable/subcomponents/DraggableItem.tsx +3 -6
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.jsx +36 -71
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.jsx +6 -6
- data/app/pb_kits/playbook/pb_drawer/docs/example.yml +0 -1
- data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.html.erb +6 -1
- data/app/pb_kits/playbook/pb_nav/item.html.erb +19 -7
- data/app/pb_kits/playbook/pb_nav/nav.html.erb +8 -3
- data/app/pb_kits/playbook/pb_online_status/online_status.html.erb +6 -1
- data/app/pb_kits/playbook/pb_popover/popover.html.erb +6 -1
- data/app/pb_kits/playbook/pb_progress_pills/_progress_pills.scss +1 -2
- data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.html.erb +0 -1
- data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.jsx +0 -7
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible.jsx +1 -1
- data/app/pb_kits/playbook/pb_table/docs/example.yml +0 -1
- data/app/pb_kits/playbook/pb_table/index.ts +9 -41
- data/app/pb_kits/playbook/pb_table/styles/_collapsible.scss +0 -4
- data/app/pb_kits/playbook/pb_table/subcomponents/_table_body.tsx +2 -29
- data/app/pb_kits/playbook/pb_table/subcomponents/_table_row.tsx +3 -31
- data/app/pb_kits/playbook/pb_table/table_body.html.erb +7 -13
- data/app/pb_kits/playbook/pb_table/table_body.rb +0 -2
- data/app/pb_kits/playbook/pb_table/table_row.html.erb +7 -14
- data/app/pb_kits/playbook/pb_table/table_row.rb +1 -14
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_mask.html.erb +0 -14
- data/app/pb_kits/playbook/pb_text_input/index.js +0 -9
- data/app/pb_kits/playbook/pb_text_input/text_input.rb +2 -5
- data/dist/chunks/{_typeahead-CAIQfP7X.js → _typeahead-DQTwAd_2.js} +4 -4
- data/dist/chunks/_weekday_stacked-ei-exO-N.js +45 -0
- data/dist/chunks/{lib-D3us1bGD.js → lib-WQEeEj3t.js} +1 -1
- data/dist/chunks/{pb_form_validation-BpihMSOQ.js → pb_form_validation-Cq64l4zn.js} +1 -1
- data/dist/chunks/vendor.js +1 -1
- data/dist/menu.yml +7 -0
- data/dist/playbook-doc.js +1 -1
- data/dist/playbook-rails-react-bindings.js +1 -1
- data/dist/playbook-rails.js +1 -1
- data/dist/playbook.css +1 -1
- data/lib/playbook/version.rb +1 -1
- metadata +25 -17
- data/app/pb_kits/playbook/pb_bar_graph/BarGraphStyles.scss +0 -58
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.jsx +0 -64
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.md +0 -1
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table_react.jsx +0 -90
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table_react.md +0 -5
- data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.md +0 -1
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click.html.erb +0 -51
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click_rails.md +0 -2
- data/dist/chunks/_weekday_stacked-Dq02Kbeo.js +0 -45
- /data/app/pb_kits/playbook/pb_table/docs/{_table_with_collapsible_with_custom_click_react.md → _table_with_collapsible_with_custom_click.md} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e08365da5253269e56718df0229fb325a9904ae790a197f4d9498972990d5e20
|
4
|
+
data.tar.gz: 2fd146a0b22bd09f5b4dbe54a16a3b438a7a24bb360f3a476c307645e8b6fc5b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 79d14e319ea738d2959955de82a9eac69637d27eba8efad3549f520b7c9ce95ee4ed704e4e7451f8aca6ffc633cccab31a1306bd03ca8b6127eaceeb3f16a01c
|
7
|
+
data.tar.gz: 734cff649221dc31c3a2eb03c73d9bc27df9aa28642bb0e190f41317ef0896fd8b9decc85e2e6587d7c2f7a660e1cefd2f7a151dd4ec4264652e6eb44f610557
|
@@ -0,0 +1,66 @@
|
|
1
|
+
[class^=pb_avatar_action_button_kit] {
|
2
|
+
|
3
|
+
$icon_size: 0px;
|
4
|
+
$border_size: 0px;
|
5
|
+
|
6
|
+
$action-colors: (
|
7
|
+
"add": $primary,
|
8
|
+
"remove": $error,
|
9
|
+
);
|
10
|
+
|
11
|
+
@each $key, $value in $action-colors {
|
12
|
+
&[class*=_#{$key}] a {
|
13
|
+
color: $value;
|
14
|
+
}
|
15
|
+
}
|
16
|
+
|
17
|
+
@mixin icon-base {
|
18
|
+
&.dark{
|
19
|
+
background-color: $bg_dark
|
20
|
+
}
|
21
|
+
width: $icon_size;
|
22
|
+
height: $icon_size;
|
23
|
+
position: absolute;
|
24
|
+
background-color: $white;
|
25
|
+
border-radius: $icon_size;
|
26
|
+
font-size: ($icon_size - $border_size * 2);
|
27
|
+
display: flex;
|
28
|
+
justify-content: center;
|
29
|
+
align-items: center;
|
30
|
+
z-index: 1;
|
31
|
+
}
|
32
|
+
|
33
|
+
@each $name, $size in $avatar-sizes {
|
34
|
+
|
35
|
+
&[class*=_#{$name}] {
|
36
|
+
|
37
|
+
$avatar_size: map-get($avatar-sizes, $name);
|
38
|
+
$icon_size: $avatar_size / 2;
|
39
|
+
$border_size: $icon_size / 10;
|
40
|
+
|
41
|
+
position: relative;
|
42
|
+
width: $avatar_size * 1.25;
|
43
|
+
height: $avatar_size * 1.1;
|
44
|
+
display: flex;
|
45
|
+
|
46
|
+
[class^=pb_tooltip_kit] {
|
47
|
+
justify-self: center;
|
48
|
+
}
|
49
|
+
|
50
|
+
&[class*=_bottom] .icon {
|
51
|
+
@include icon-base;
|
52
|
+
top: $icon_size * 1.27;
|
53
|
+
}
|
54
|
+
&[class*=_top] .icon {
|
55
|
+
@include icon-base;
|
56
|
+
bottom: $icon_size * 1.27;
|
57
|
+
}
|
58
|
+
&[class*=_right] .icon {
|
59
|
+
left: $icon_size * 1.5;
|
60
|
+
}
|
61
|
+
&[class*=_left] [class^=pb_avatar_kit] {
|
62
|
+
padding-left: $icon_size / 2;
|
63
|
+
}
|
64
|
+
}
|
65
|
+
}
|
66
|
+
}
|
@@ -0,0 +1,98 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
import classnames from 'classnames'
|
3
|
+
|
4
|
+
import {
|
5
|
+
buildAriaProps,
|
6
|
+
buildCss,
|
7
|
+
buildDataProps,
|
8
|
+
buildHtmlProps } from '../utilities/props'
|
9
|
+
import { globalProps } from '../utilities/globalProps'
|
10
|
+
|
11
|
+
import Avatar from '../pb_avatar/_avatar'
|
12
|
+
import Icon from '../pb_icon/_icon'
|
13
|
+
|
14
|
+
type AvatarActionButtonProps = {
|
15
|
+
action?: "add" | "remove",
|
16
|
+
aria?: {[key: string]: string},
|
17
|
+
linkAriaLabel?: string,
|
18
|
+
className?: string,
|
19
|
+
dark?: boolean,
|
20
|
+
data?: {[key: string]: string},
|
21
|
+
htmlOptions?: {[key: string]: string | number | boolean | (() => void)},
|
22
|
+
id?: string,
|
23
|
+
imageAlt?: string,
|
24
|
+
imageUrl?: string,
|
25
|
+
linkUrl?: string,
|
26
|
+
name?: string,
|
27
|
+
onClick?: React.MouseEventHandler<HTMLSpanElement>,
|
28
|
+
placement?: string,
|
29
|
+
size?: "md" | "lg" | "sm" | "xl" | "xs" | "xxs",
|
30
|
+
}
|
31
|
+
|
32
|
+
const AvatarActionButton = (props: AvatarActionButtonProps): React.ReactElement => {
|
33
|
+
const {
|
34
|
+
action = 'add',
|
35
|
+
aria = {},
|
36
|
+
linkAriaLabel,
|
37
|
+
className,
|
38
|
+
dark = false,
|
39
|
+
data = {},
|
40
|
+
htmlOptions = {},
|
41
|
+
id,
|
42
|
+
imageAlt = '',
|
43
|
+
imageUrl,
|
44
|
+
linkUrl,
|
45
|
+
name,
|
46
|
+
onClick,
|
47
|
+
placement = 'bottom left',
|
48
|
+
size = 'md',
|
49
|
+
} = props
|
50
|
+
|
51
|
+
const ariaProps = buildAriaProps(aria)
|
52
|
+
const dataProps = buildDataProps(data)
|
53
|
+
const htmlProps = buildHtmlProps(htmlOptions)
|
54
|
+
|
55
|
+
const classes = classnames(buildCss(
|
56
|
+
'pb_avatar_action_button_kit',
|
57
|
+
action,
|
58
|
+
placement,
|
59
|
+
size),
|
60
|
+
globalProps(props),
|
61
|
+
className)
|
62
|
+
|
63
|
+
const icons = {
|
64
|
+
add: 'plus-circle',
|
65
|
+
remove: 'times-circle',
|
66
|
+
}
|
67
|
+
|
68
|
+
return (
|
69
|
+
<div
|
70
|
+
{...ariaProps}
|
71
|
+
{...dataProps}
|
72
|
+
{...htmlProps}
|
73
|
+
className={classes}
|
74
|
+
id={id}
|
75
|
+
>
|
76
|
+
<a
|
77
|
+
aria-label={linkAriaLabel}
|
78
|
+
href={linkUrl}
|
79
|
+
onClick={onClick}
|
80
|
+
>
|
81
|
+
<Avatar
|
82
|
+
imageAlt={imageAlt}
|
83
|
+
imageUrl={imageUrl}
|
84
|
+
name={name}
|
85
|
+
size={size}
|
86
|
+
/>
|
87
|
+
<div className={`icon ${dark ? 'dark' : ''}`}>
|
88
|
+
<Icon
|
89
|
+
dark={dark}
|
90
|
+
icon={icons[action]}
|
91
|
+
/>
|
92
|
+
</div>
|
93
|
+
</a>
|
94
|
+
</div>
|
95
|
+
)
|
96
|
+
}
|
97
|
+
|
98
|
+
export default AvatarActionButton
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<%= pb_content_tag do %>
|
2
|
+
<% if object.tooltip_text.present? %>
|
3
|
+
<%= pb_rails("tooltip", props: {
|
4
|
+
trigger_element_id: object.tooltip_id,
|
5
|
+
tooltip_id: "tooltip-2",
|
6
|
+
position: 'top'
|
7
|
+
}) do %>
|
8
|
+
<%= object.tooltip_text %>
|
9
|
+
<% end %>
|
10
|
+
<% end %>
|
11
|
+
|
12
|
+
<%= link_to object.link_url, id: object.tooltip_id, 'aria-label': object.link_aria_label do %>
|
13
|
+
<%= pb_rails("avatar", props: {
|
14
|
+
dark: object.dark,
|
15
|
+
name: object.name,
|
16
|
+
size: object.size,
|
17
|
+
image_alt: object.image_alt,
|
18
|
+
image_url: object.image_url,
|
19
|
+
class: "avatar_action"
|
20
|
+
}) %>
|
21
|
+
<div class="icon <%= object.dark ? 'dark' : '' %> ">
|
22
|
+
<%= pb_rails("icon", props: {
|
23
|
+
dark: object.dark,
|
24
|
+
icon: object.action_icons
|
25
|
+
}) %>
|
26
|
+
</div>
|
27
|
+
<% end %>
|
28
|
+
<% end %>
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Playbook
|
4
|
+
module PbAvatarActionButton
|
5
|
+
class AvatarActionButton < Playbook::KitBase
|
6
|
+
prop :action, type: Playbook::Props::String,
|
7
|
+
default: "add"
|
8
|
+
prop :link_aria_label, type: Playbook::Props::String
|
9
|
+
prop :image_alt, type: Playbook::Props::String
|
10
|
+
prop :image_url, type: Playbook::Props::String
|
11
|
+
prop :link_url, type: Playbook::Props::String, default: "#"
|
12
|
+
prop :tooltip_text, type: Playbook::Props::String
|
13
|
+
prop :tooltip_id, type: Playbook::Props::String
|
14
|
+
prop :name, type: Playbook::Props::String,
|
15
|
+
default: ""
|
16
|
+
prop :size, type: Playbook::Props::Enum,
|
17
|
+
values: %w[xs sm md lg xl],
|
18
|
+
default: "md"
|
19
|
+
prop :placement, type: Playbook::Props::Enum,
|
20
|
+
values: %w[bottom_left bottom_right top_left top_right],
|
21
|
+
default: "bottom_left"
|
22
|
+
|
23
|
+
def classname
|
24
|
+
generate_classname("pb_avatar_action_button_kit", action, size, placement)
|
25
|
+
end
|
26
|
+
|
27
|
+
def action_icons
|
28
|
+
icon_hash = {
|
29
|
+
add: "plus-circle",
|
30
|
+
remove: "times-circle",
|
31
|
+
}
|
32
|
+
# if an 'action' prop is passed that isn't
|
33
|
+
# in the icon_hash an empty string is returned
|
34
|
+
# instead of a null value, which would break the page
|
35
|
+
|
36
|
+
# double pipe ruby syntax below is essentially a reduced if-else statement
|
37
|
+
# if icon_hash[action.to_sym] returns a falsey value, return "" instead
|
38
|
+
icon_hash[action.to_sym] ||= ""
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<div class="pb--doc-demo-row">
|
2
|
+
|
3
|
+
<%= pb_rails("avatar_action_button", props: {
|
4
|
+
link_aria_label: "Add Sophia Carden",
|
5
|
+
name: "Sophia Carden",
|
6
|
+
image_alt: "Add Sophia Carden",
|
7
|
+
image_url: "https://randomuser.me/api/portraits/women/8.jpg",
|
8
|
+
action: "add",
|
9
|
+
}) %>
|
10
|
+
|
11
|
+
<%= pb_rails("avatar_action_button", props: {
|
12
|
+
link_aria_label: "Remove Sophia Carden",
|
13
|
+
name: "Sophia Carden",
|
14
|
+
image_alt: "Remove Sophia Carden",
|
15
|
+
image_url: "https://randomuser.me/api/portraits/women/8.jpg",
|
16
|
+
action: "remove",
|
17
|
+
}) %>
|
18
|
+
|
19
|
+
</div>
|
@@ -0,0 +1,26 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
|
3
|
+
import AvatarActionButton from '../_avatar_action_button'
|
4
|
+
|
5
|
+
const AvatarActionButtonActions = (props) => (
|
6
|
+
<div className="pb--doc-demo-row">
|
7
|
+
<AvatarActionButton
|
8
|
+
action="add"
|
9
|
+
imageAlt="Add Sophia Carden"
|
10
|
+
imageUrl="https://randomuser.me/api/portraits/women/8.jpg"
|
11
|
+
linkAriaLabel="Add Sophia Carden"
|
12
|
+
name="Sophia Carden"
|
13
|
+
{...props}
|
14
|
+
/>
|
15
|
+
<AvatarActionButton
|
16
|
+
action="remove"
|
17
|
+
imageAlt="Remove Sophia Carden"
|
18
|
+
imageUrl="https://randomuser.me/api/portraits/women/8.jpg"
|
19
|
+
linkAriaLabel="Remove Sophia Carden"
|
20
|
+
name="Sophia Carden"
|
21
|
+
{...props}
|
22
|
+
/>
|
23
|
+
</div>
|
24
|
+
)
|
25
|
+
|
26
|
+
export default AvatarActionButtonActions
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
|
3
|
+
import AvatarActionButton from '../_avatar_action_button'
|
4
|
+
|
5
|
+
const AvatarActionButtonDefault = (props) => (
|
6
|
+
<div className="pb--doc-demo-row">
|
7
|
+
<AvatarActionButton
|
8
|
+
imageAlt="Sophia Carden"
|
9
|
+
imageUrl="https://randomuser.me/api/portraits/women/8.jpg"
|
10
|
+
linkAriaLabel="Sophia Carden"
|
11
|
+
name="Sophia Carden"
|
12
|
+
{...props}
|
13
|
+
/>
|
14
|
+
</div>
|
15
|
+
)
|
16
|
+
|
17
|
+
export default AvatarActionButtonDefault
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
|
3
|
+
import AvatarActionButton from '../_avatar_action_button'
|
4
|
+
|
5
|
+
const AvatarActionButtonOnClick = (props) => (
|
6
|
+
<div className="pb--doc-demo-row">
|
7
|
+
<AvatarActionButton
|
8
|
+
imageAlt="Sophia Carden"
|
9
|
+
imageUrl="https://randomuser.me/api/portraits/women/8.jpg"
|
10
|
+
linkAriaLabel="Alert Sophia Carden"
|
11
|
+
linkUrl="https://www.google.com"
|
12
|
+
name="Sophia Carden"
|
13
|
+
onClick={() => alert('clicked!')}
|
14
|
+
{...props}
|
15
|
+
/>
|
16
|
+
</div>
|
17
|
+
)
|
18
|
+
|
19
|
+
export default AvatarActionButtonOnClick
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<div class="pb--doc-demo-row">
|
2
|
+
|
3
|
+
<%= pb_rails("avatar_action_button", props: {
|
4
|
+
link_aria_label: "Alert Sophia Carden",
|
5
|
+
name: "Sophia Carden",
|
6
|
+
id: "clickable",
|
7
|
+
link_url: "http://www.google.com",
|
8
|
+
image_alt: "Sophia Carden",
|
9
|
+
image_url: "https://randomuser.me/api/portraits/women/8.jpg",
|
10
|
+
}) %>
|
11
|
+
|
12
|
+
<%= javascript_tag do %>
|
13
|
+
document.querySelector('#clickable').addEventListener('click', () => alert('clickable clicked!'))
|
14
|
+
<% end %>
|
15
|
+
|
16
|
+
</div>
|
data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_placement.html.erb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
<div class="pb--doc-demo-row">
|
2
|
+
|
3
|
+
<%= pb_rails("avatar_action_button", props: {
|
4
|
+
link_aria_label: "Sophia Carden",
|
5
|
+
name: "Sophia Carden",
|
6
|
+
image_alt: "Sophia Carden",
|
7
|
+
image_url: "https://randomuser.me/api/portraits/women/8.jpg",
|
8
|
+
placement: "bottom_left"
|
9
|
+
}) %>
|
10
|
+
|
11
|
+
<%= pb_rails("avatar_action_button", props: {
|
12
|
+
link_aria_label: "Sophia Carden",
|
13
|
+
name: "Sophia Carden",
|
14
|
+
image_alt: "Sophia Carden",
|
15
|
+
image_url: "https://randomuser.me/api/portraits/women/8.jpg",
|
16
|
+
placement: "bottom_right"
|
17
|
+
}) %>
|
18
|
+
|
19
|
+
<%= pb_rails("avatar_action_button", props: {
|
20
|
+
link_aria_label: "Sophia Carden",
|
21
|
+
name: "Sophia Carden",
|
22
|
+
image_alt: "Sophia Carden",
|
23
|
+
image_url: "https://randomuser.me/api/portraits/women/8.jpg",
|
24
|
+
placement: "top_left"
|
25
|
+
}) %>
|
26
|
+
|
27
|
+
<%= pb_rails("avatar_action_button", props: {
|
28
|
+
link_aria_label: "Sophia Carden",
|
29
|
+
name: "Sophia Carden",
|
30
|
+
image_alt: "Sophia Carden",
|
31
|
+
image_url: "https://randomuser.me/api/portraits/women/8.jpg",
|
32
|
+
placement: "top_right"
|
33
|
+
}) %>
|
34
|
+
|
35
|
+
</div>
|
@@ -0,0 +1,42 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
|
3
|
+
import AvatarActionButton from '../_avatar_action_button'
|
4
|
+
|
5
|
+
const AvatarActionButtonPlacement = (props) => (
|
6
|
+
<div className="pb--doc-demo-row">
|
7
|
+
<AvatarActionButton
|
8
|
+
imageAlt="Sophia Carden"
|
9
|
+
imageUrl="https://randomuser.me/api/portraits/women/8.jpg"
|
10
|
+
linkAriaLabel="Sophia Carden"
|
11
|
+
name="Sophia Carden"
|
12
|
+
placement="bottom_left"
|
13
|
+
{...props}
|
14
|
+
/>
|
15
|
+
<AvatarActionButton
|
16
|
+
imageAlt="Sophia Carden"
|
17
|
+
imageUrl="https://randomuser.me/api/portraits/women/8.jpg"
|
18
|
+
linkAriaLabel="Sophia Carden"
|
19
|
+
name="Sophia Carden"
|
20
|
+
placement="bottom_right"
|
21
|
+
{...props}
|
22
|
+
/>
|
23
|
+
<AvatarActionButton
|
24
|
+
imageAlt="Sophia Carden"
|
25
|
+
imageUrl="https://randomuser.me/api/portraits/women/8.jpg"
|
26
|
+
linkAriaLabel="Sophia Carden"
|
27
|
+
name="Sophia Carden"
|
28
|
+
placement="top_left"
|
29
|
+
{...props}
|
30
|
+
/>
|
31
|
+
<AvatarActionButton
|
32
|
+
imageAlt="Sophia Carden"
|
33
|
+
imageUrl="https://randomuser.me/api/portraits/women/8.jpg"
|
34
|
+
linkAriaLabel="Sophia Carden"
|
35
|
+
name="Sophia Carden"
|
36
|
+
placement="top_right"
|
37
|
+
{...props}
|
38
|
+
/>
|
39
|
+
</div>
|
40
|
+
)
|
41
|
+
|
42
|
+
export default AvatarActionButtonPlacement
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<div class="pb--doc-demo-row">
|
2
|
+
|
3
|
+
<%= pb_rails("avatar_action_button", props: {
|
4
|
+
link_aria_label: "Sophia Carden",
|
5
|
+
name: "Sophia Carden",
|
6
|
+
link_url: "http://www.google.com",
|
7
|
+
image_alt: "Sophia Carden",
|
8
|
+
image_url: "https://randomuser.me/api/portraits/women/8.jpg",
|
9
|
+
tooltip_text: "Tooltip Text",
|
10
|
+
tooltip_id: "avatar_1",
|
11
|
+
}) %>
|
12
|
+
|
13
|
+
</div>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
examples:
|
2
|
+
|
3
|
+
rails:
|
4
|
+
- avatar_action_button_default: Default
|
5
|
+
- avatar_action_button_placement: Placement
|
6
|
+
- avatar_action_button_actions: Actions
|
7
|
+
- avatar_action_button_onclick: On Click
|
8
|
+
- avatar_action_button_tooltip: Tooltip
|
9
|
+
|
10
|
+
|
11
|
+
react:
|
12
|
+
- avatar_action_button_default: Default
|
13
|
+
- avatar_action_button_placement: Placement
|
14
|
+
- avatar_action_button_actions: Actions
|
15
|
+
- avatar_action_button_on_click: On Click
|
@@ -0,0 +1,4 @@
|
|
1
|
+
export { default as AvatarActionButtonDefault } from './_avatar_action_button_default.jsx'
|
2
|
+
export { default as AvatarActionButtonPlacement } from './_avatar_action_button_placement.jsx'
|
3
|
+
export { default as AvatarActionButtonActions } from './_avatar_action_button_actions.jsx'
|
4
|
+
export { default as AvatarActionButtonOnClick } from './_avatar_action_button_on_click.jsx'
|
@@ -0,0 +1,31 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
import { render, screen } from '../utilities/test-utils'
|
3
|
+
|
4
|
+
import AvatarActionButton from './_avatar_action_button'
|
5
|
+
|
6
|
+
const imageUrl = 'https://randomuser.me/api/portraits/women/8.jpg',
|
7
|
+
testId = 'scarden',
|
8
|
+
name = 'Sophia Carden',
|
9
|
+
imageAlt = 'Sophia Carden Profile'
|
10
|
+
|
11
|
+
test('loads the given image url and name', () => {
|
12
|
+
render(
|
13
|
+
<AvatarActionButton
|
14
|
+
data={{ testid: testId }}
|
15
|
+
imageAlt={imageAlt}
|
16
|
+
imageUrl={imageUrl}
|
17
|
+
linkAriaLabel={name}
|
18
|
+
name={name}
|
19
|
+
/>
|
20
|
+
)
|
21
|
+
|
22
|
+
const kit = screen.getByTestId(testId)
|
23
|
+
const image = screen.getByAltText(imageAlt)
|
24
|
+
const link = kit.children[0]
|
25
|
+
|
26
|
+
expect(kit).toHaveClass('pb_avatar_action_button_kit_add_bottom_left_md')
|
27
|
+
expect(image).toHaveAttribute('data-src', imageUrl)
|
28
|
+
expect(image).toHaveAttribute('src', imageUrl)
|
29
|
+
expect(image).toHaveAttribute('alt', imageAlt)
|
30
|
+
expect(link).toHaveAttribute('aria-label', name)
|
31
|
+
})
|
@@ -10,4 +10,3 @@ export { default as BarGraphStacked } from './_bar_graph_stacked.jsx'
|
|
10
10
|
export { default as BarGraphNegativeNumbers } from './_bar_graph_negative_numbers.jsx'
|
11
11
|
export { default as BarGraphSecondaryYAxis } from './_bar_graph_secondary_y_axis.jsx'
|
12
12
|
export { default as BarGraphHorizontal } from './_bar_graph_horizontal.jsx'
|
13
|
-
export { default as BarGraphPbStyles } from './_bar_graph_pb_styles.jsx'
|
@@ -43,9 +43,9 @@
|
|
43
43
|
<% end %>
|
44
44
|
<% end %>
|
45
45
|
|
46
|
-
<%= pb_rails("
|
46
|
+
<%= pb_rails("draggable/draggable_container", props: {tag:"tbody"}) do %>
|
47
47
|
<% initial_items.each do |item| %>
|
48
|
-
<%= pb_rails("
|
48
|
+
<%= pb_rails("draggable/draggable_item", props:{drag_id: item[:id], tag:"tr"}) do %>
|
49
49
|
<%= pb_rails("table/table_cell", props: { text: item[:id]}) %>
|
50
50
|
<%= pb_rails("table/table_cell") do %>
|
51
51
|
<%= pb_rails("flex", props:{align:"center"}) do %>
|
@@ -1,4 +1 @@
|
|
1
|
-
The draggable kit can also be used in conjunction with the table kit to create draggable table rows. To do this
|
2
|
-
|
3
|
-
- use the `draggable_container` prop on the table/table_body to designate it as the Draggable Container
|
4
|
-
- use the `draggable_item` prop on the table/table_row to designate it as the Draggable Item. Make sure to also pass id to the `drag_id` prop here.
|
1
|
+
The draggable kit can also be used in conjunction with the table kit to create draggable table rows. To do this, make use of the `tag` prop on the draggable_container to set it to 'tbody' and the same prop on the draggable_item to set that to 'tr'. This will create the functionality seen here.
|
@@ -4,9 +4,7 @@ examples:
|
|
4
4
|
- draggable_with_list: Draggable with List Kit
|
5
5
|
- draggable_with_selectable_list: Draggable with SelectableList Kit
|
6
6
|
- draggable_with_cards: Draggable with Cards
|
7
|
-
- draggable_with_table_react: Draggable with Table
|
8
7
|
- draggable_multiple_containers: Dragging Across Multiple Containers
|
9
|
-
|
10
8
|
rails:
|
11
9
|
- draggable_default_rails: Default
|
12
10
|
- draggable_with_list_rails: Draggable with List Kit
|
@@ -2,5 +2,4 @@ export { default as DraggableDefault } from './_draggable_default.jsx'
|
|
2
2
|
export { default as DraggableWithCards } from './_draggable_with_cards.jsx'
|
3
3
|
export { default as DraggableWithList } from './_draggable_with_list.jsx'
|
4
4
|
export { default as DraggableWithSelectableList } from './_draggable_with_selectable_list.jsx'
|
5
|
-
export { default as DraggableMultipleContainers } from './_draggable_multiple_containers.jsx'
|
6
|
-
export { default as DraggableWithTableReact } from './_draggable_with_table_react.jsx'
|
5
|
+
export { default as DraggableMultipleContainers } from './_draggable_multiple_containers.jsx'
|
@@ -17,11 +17,10 @@ type DraggableContainerProps = {
|
|
17
17
|
data?: { [key: string]: string };
|
18
18
|
htmlOptions?: {[key: string]: string | number | boolean | (() => void)},
|
19
19
|
id?: string;
|
20
|
-
tag?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'span' | 'div' | 'tr' | 'th' | 'td' | 'thead' | 'col' | 'tbody',
|
21
20
|
};
|
22
21
|
|
23
22
|
const DraggableContainer = (props: DraggableContainerProps) => {
|
24
|
-
const { aria = {}, children, className, container, data = {}, htmlOptions = {}, id
|
23
|
+
const { aria = {}, children, className, container, data = {}, htmlOptions = {}, id } = props;
|
25
24
|
|
26
25
|
const { handleDragOver, handleDrop, activeContainer } = DraggableContext();
|
27
26
|
|
@@ -29,8 +28,6 @@ const DraggableContainer = (props: DraggableContainerProps) => {
|
|
29
28
|
const dataProps = buildDataProps(data);
|
30
29
|
const htmlProps = buildHtmlProps(htmlOptions);
|
31
30
|
|
32
|
-
const Tag: React.ReactElement | any = `${tag}`;
|
33
|
-
|
34
31
|
const classes = classnames(
|
35
32
|
buildCss("pb_draggable_container"),
|
36
33
|
`${activeContainer === container ? "active" : ""}`,
|
@@ -39,18 +36,18 @@ const DraggableContainer = (props: DraggableContainerProps) => {
|
|
39
36
|
);
|
40
37
|
|
41
38
|
return (
|
42
|
-
<
|
39
|
+
<div
|
43
40
|
{...ariaProps}
|
44
41
|
{...dataProps}
|
45
42
|
{...htmlProps}
|
46
43
|
className={classes}
|
47
44
|
id={id}
|
48
45
|
key={container}
|
49
|
-
onDragOver={(e
|
46
|
+
onDragOver={(e) => handleDragOver(e, container)}
|
50
47
|
onDrop={() => handleDrop(container)}
|
51
48
|
>
|
52
49
|
{children}
|
53
|
-
</
|
50
|
+
</div>
|
54
51
|
);
|
55
52
|
};
|
56
53
|
|
@@ -18,11 +18,10 @@ type DraggableItemProps = {
|
|
18
18
|
htmlOptions?: {[key: string]: string | number | boolean | (() => void)},
|
19
19
|
id?: string;
|
20
20
|
dragId?: string;
|
21
|
-
tag?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'p' | 'span' | 'div' | 'tr' | 'th' | 'td' | 'thead' | 'col' | 'tbody',
|
22
21
|
};
|
23
22
|
|
24
23
|
const DraggableItem = (props: DraggableItemProps) => {
|
25
|
-
const { aria = {}, children, className, container, data = {}, htmlOptions = {}, id, dragId
|
24
|
+
const { aria = {}, children, className, container, data = {}, htmlOptions = {}, id, dragId } = props;
|
26
25
|
|
27
26
|
const { isDragging, handleDragStart, handleDragEnter, handleDragEnd } =
|
28
27
|
DraggableContext();
|
@@ -31,8 +30,6 @@ const DraggableItem = (props: DraggableItemProps) => {
|
|
31
30
|
const dataProps = buildDataProps(data);
|
32
31
|
const htmlProps = buildHtmlProps(htmlOptions);
|
33
32
|
|
34
|
-
const Tag: React.ReactElement | any = `${tag}`;
|
35
|
-
|
36
33
|
const classes = classnames(
|
37
34
|
buildCss("pb_draggable_item"),
|
38
35
|
`${isDragging === dragId ? "is_dragging" : ""}`,
|
@@ -41,7 +38,7 @@ const DraggableItem = (props: DraggableItemProps) => {
|
|
41
38
|
);
|
42
39
|
|
43
40
|
return (
|
44
|
-
<
|
41
|
+
<div
|
45
42
|
{...ariaProps}
|
46
43
|
{...dataProps}
|
47
44
|
{...htmlProps}
|
@@ -54,7 +51,7 @@ const DraggableItem = (props: DraggableItemProps) => {
|
|
54
51
|
onDragStart={() => handleDragStart(dragId, container)}
|
55
52
|
>
|
56
53
|
{children}
|
57
|
-
</
|
54
|
+
</div>
|
58
55
|
);
|
59
56
|
};
|
60
57
|
|