playbook_ui 14.13.0.pre.alpha.PLAY1856doc6166 → 14.13.0.pre.alpha.PLAY1873rails86087

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +1 -0
  3. data/app/pb_kits/playbook/pb_avatar_action_button/_avatar_action_button.scss +66 -0
  4. data/app/pb_kits/playbook/pb_avatar_action_button/_avatar_action_button.tsx +98 -0
  5. data/app/pb_kits/playbook/pb_avatar_action_button/avatar_action_button.html.erb +28 -0
  6. data/app/pb_kits/playbook/pb_avatar_action_button/avatar_action_button.rb +42 -0
  7. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_actions.html.erb +19 -0
  8. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_actions.jsx +26 -0
  9. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_default.html.erb +10 -0
  10. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_default.jsx +17 -0
  11. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_on_click.jsx +19 -0
  12. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_onclick.html.erb +16 -0
  13. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_placement.html.erb +35 -0
  14. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_placement.jsx +42 -0
  15. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_tooltip.html.erb +13 -0
  16. data/app/pb_kits/playbook/pb_avatar_action_button/docs/example.yml +15 -0
  17. data/app/pb_kits/playbook/pb_avatar_action_button/docs/index.js +4 -0
  18. data/app/pb_kits/playbook/pb_avatar_action_button/pb_avatar_action_button.test.js +31 -0
  19. data/app/pb_kits/playbook/pb_bar_graph/docs/example.yml +0 -1
  20. data/app/pb_kits/playbook/pb_bar_graph/docs/index.js +0 -1
  21. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table.html.erb +2 -2
  22. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table.md +1 -4
  23. data/app/pb_kits/playbook/pb_draggable/docs/example.yml +0 -2
  24. data/app/pb_kits/playbook/pb_draggable/docs/index.js +1 -2
  25. data/app/pb_kits/playbook/pb_draggable/subcomponents/DraggableContainer.tsx +4 -7
  26. data/app/pb_kits/playbook/pb_draggable/subcomponents/DraggableItem.tsx +3 -6
  27. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.jsx +36 -71
  28. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.jsx +6 -6
  29. data/app/pb_kits/playbook/pb_drawer/docs/example.yml +0 -1
  30. data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.html.erb +6 -1
  31. data/app/pb_kits/playbook/pb_nav/item.html.erb +19 -7
  32. data/app/pb_kits/playbook/pb_nav/nav.html.erb +8 -3
  33. data/app/pb_kits/playbook/pb_online_status/online_status.html.erb +6 -1
  34. data/app/pb_kits/playbook/pb_popover/popover.html.erb +6 -1
  35. data/app/pb_kits/playbook/pb_progress_pills/_progress_pills.scss +1 -2
  36. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.html.erb +0 -1
  37. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.jsx +0 -7
  38. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible.jsx +1 -1
  39. data/app/pb_kits/playbook/pb_table/docs/example.yml +0 -1
  40. data/app/pb_kits/playbook/pb_table/index.ts +9 -41
  41. data/app/pb_kits/playbook/pb_table/styles/_collapsible.scss +0 -4
  42. data/app/pb_kits/playbook/pb_table/subcomponents/_table_body.tsx +2 -29
  43. data/app/pb_kits/playbook/pb_table/subcomponents/_table_row.tsx +3 -31
  44. data/app/pb_kits/playbook/pb_table/table_body.html.erb +7 -13
  45. data/app/pb_kits/playbook/pb_table/table_body.rb +0 -2
  46. data/app/pb_kits/playbook/pb_table/table_row.html.erb +7 -14
  47. data/app/pb_kits/playbook/pb_table/table_row.rb +1 -14
  48. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_mask.html.erb +0 -14
  49. data/app/pb_kits/playbook/pb_text_input/index.js +0 -9
  50. data/app/pb_kits/playbook/pb_text_input/text_input.rb +2 -5
  51. data/dist/chunks/{_typeahead-CAIQfP7X.js → _typeahead-DQTwAd_2.js} +4 -4
  52. data/dist/chunks/_weekday_stacked-ei-exO-N.js +45 -0
  53. data/dist/chunks/{lib-D3us1bGD.js → lib-WQEeEj3t.js} +1 -1
  54. data/dist/chunks/{pb_form_validation-BpihMSOQ.js → pb_form_validation-Cq64l4zn.js} +1 -1
  55. data/dist/chunks/vendor.js +1 -1
  56. data/dist/menu.yml +7 -0
  57. data/dist/playbook-doc.js +1 -1
  58. data/dist/playbook-rails-react-bindings.js +1 -1
  59. data/dist/playbook-rails.js +1 -1
  60. data/dist/playbook.css +1 -1
  61. data/lib/playbook/version.rb +1 -1
  62. metadata +25 -17
  63. data/app/pb_kits/playbook/pb_bar_graph/BarGraphStyles.scss +0 -58
  64. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.jsx +0 -64
  65. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.md +0 -1
  66. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table_react.jsx +0 -90
  67. data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_table_react.md +0 -5
  68. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.md +0 -1
  69. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click.html.erb +0 -51
  70. data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click_rails.md +0 -2
  71. data/dist/chunks/_weekday_stacked-Dq02Kbeo.js +0 -45
  72. /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: 0c8c78420782988bab01929b844343a9351bb6d664032a4c69e7e8af20da169a
4
- data.tar.gz: 428d83bf48e70f2dcc354bc2a8d96e6f6a0906117717cb8963982b572f2395e6
3
+ metadata.gz: e08365da5253269e56718df0229fb325a9904ae790a197f4d9498972990d5e20
4
+ data.tar.gz: 2fd146a0b22bd09f5b4dbe54a16a3b438a7a24bb360f3a476c307645e8b6fc5b
5
5
  SHA512:
6
- metadata.gz: 2b0d24de756436a380a8c7a55ded51eb922834b4356ce2d7f45211201b72e46e68f064af4fc583f10f8c3366e32eb0dcf1fde143a6602e308aa908f52f8a10a3
7
- data.tar.gz: '0996317c488d86f20a67376e79913b403f0f9f767074c86745d721cc20a4ee0bfcf1322a6afab2ecb5662ab4b3d538209f1acabb3c47a2efe08756e563bf4e44'
6
+ metadata.gz: 79d14e319ea738d2959955de82a9eac69637d27eba8efad3549f520b7c9ce95ee4ed704e4e7451f8aca6ffc633cccab31a1306bd03ca8b6127eaceeb3f16a01c
7
+ data.tar.gz: 734cff649221dc31c3a2eb03c73d9bc27df9aa28642bb0e190f41317ef0896fd8b9decc85e2e6587d7c2f7a660e1cefd2f7a151dd4ec4264652e6eb44f610557
@@ -1,6 +1,7 @@
1
1
 
2
2
  @import 'pb_advanced_table/advanced_table';
3
3
  @import 'pb_avatar/avatar';
4
+ @import 'pb_avatar_action_button/avatar_action_button';
4
5
  @import 'pb_background/background';
5
6
  @import 'pb_badge/badge';
6
7
  @import 'pb_bar_graph/bar_graph';
@@ -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,10 @@
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
+ }) %>
9
+
10
+ </div>
@@ -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>
@@ -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
+ })
@@ -17,7 +17,6 @@ examples:
17
17
 
18
18
  react:
19
19
  - bar_graph_default: Default
20
- - bar_graph_pb_styles: Playbook Styles
21
20
  - bar_graph_legend: Legend
22
21
  - bar_graph_legend_position: Legend Position
23
22
  - bar_graph_legend_non_clickable: Legend Non Clickable
@@ -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("table/table_body", props: {draggable_container: true}) do %>
46
+ <%= pb_rails("draggable/draggable_container", props: {tag:"tbody"}) do %>
47
47
  <% initial_items.each do |item| %>
48
- <%= pb_rails("table/table_row", props:{drag_id: item[:id], draggable_item: true}) do %>
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, tag="div" } = props;
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
- <Tag
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: Event) => handleDragOver(e, container)}
46
+ onDragOver={(e) => handleDragOver(e, container)}
50
47
  onDrop={() => handleDrop(container)}
51
48
  >
52
49
  {children}
53
- </Tag>
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, tag="div" } = props;
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
- <Tag
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
- </Tag>
54
+ </div>
58
55
  );
59
56
  };
60
57