playbook_ui 14.13.0.pre.alpha.advsncedtablefix6185 → 14.13.0.pre.alpha.pbntr799collapsiblerowswithcustomclick6117

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +1 -0
  3. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +5 -6
  4. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +0 -1
  5. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +1 -2
  6. data/app/pb_kits/playbook/pb_avatar_action_button/_avatar_action_button.scss +66 -0
  7. data/app/pb_kits/playbook/pb_avatar_action_button/_avatar_action_button.tsx +98 -0
  8. data/app/pb_kits/playbook/pb_avatar_action_button/avatar_action_button.html.erb +28 -0
  9. data/app/pb_kits/playbook/pb_avatar_action_button/avatar_action_button.rb +42 -0
  10. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_actions.html.erb +19 -0
  11. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_actions.jsx +26 -0
  12. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_default.html.erb +10 -0
  13. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_default.jsx +17 -0
  14. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_on_click.jsx +19 -0
  15. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_onclick.html.erb +16 -0
  16. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_placement.html.erb +35 -0
  17. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_placement.jsx +42 -0
  18. data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_tooltip.html.erb +13 -0
  19. data/app/pb_kits/playbook/pb_avatar_action_button/docs/example.yml +15 -0
  20. data/app/pb_kits/playbook/pb_avatar_action_button/docs/index.js +4 -0
  21. data/app/pb_kits/playbook/pb_avatar_action_button/pb_avatar_action_button.test.js +31 -0
  22. data/app/pb_kits/playbook/pb_bar_graph/docs/example.yml +0 -1
  23. data/app/pb_kits/playbook/pb_bar_graph/docs/index.js +0 -1
  24. data/app/pb_kits/playbook/pb_progress_pills/_progress_pills.scss +1 -6
  25. data/app/pb_kits/playbook/pb_progress_pills/_progress_pills.tsx +5 -7
  26. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.html.erb +0 -1
  27. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.jsx +0 -7
  28. data/app/pb_kits/playbook/pb_progress_pills/docs/example.yml +0 -2
  29. data/app/pb_kits/playbook/pb_progress_pills/docs/index.js +0 -1
  30. data/app/pb_kits/playbook/pb_progress_pills/progress_pills.html.erb +1 -1
  31. data/app/pb_kits/playbook/pb_progress_pills/progress_pills.rb +0 -6
  32. data/app/pb_kits/playbook/pb_progress_pills/progress_pills.test.js +1 -26
  33. data/dist/chunks/{_typeahead-CAIQfP7X.js → _typeahead-B9UYfqxU.js} +1 -1
  34. data/dist/chunks/_weekday_stacked-BoCeTceb.js +45 -0
  35. data/dist/chunks/vendor.js +1 -1
  36. data/dist/menu.yml +7 -0
  37. data/dist/playbook-doc.js +1 -1
  38. data/dist/playbook-rails-react-bindings.js +1 -1
  39. data/dist/playbook-rails.js +1 -1
  40. data/dist/playbook.css +1 -1
  41. data/lib/playbook/version.rb +1 -1
  42. metadata +20 -13
  43. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_headers_custom_cell.jsx +0 -75
  44. data/app/pb_kits/playbook/pb_bar_graph/BarGraphStyles.scss +0 -58
  45. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.jsx +0 -64
  46. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.md +0 -1
  47. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.md +0 -1
  48. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_full_width.html.erb +0 -1
  49. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_full_width.jsx +0 -18
  50. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_full_width_rails.md +0 -1
  51. data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_full_width_react.md +0 -1
  52. data/dist/chunks/_weekday_stacked-CsxncF8U.js +0 -45
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7a7a2e5ca60a324ed94a9eeafc8a8b0a458a045aafb3ed2d93e284590941f65e
4
- data.tar.gz: dc4b1f1f0d8afc9774805ae6bd1c0e2df6f6077c7086019bb8247c1dcabf1aa6
3
+ metadata.gz: 937bb9fc3230103fc7be8d835ee2d7ad696ca3d57b01cd03329c899c37acd2b5
4
+ data.tar.gz: a583fb654a994255ecd697b68ab324b07c10f7470f0e0849659d5103ebd4d4d9
5
5
  SHA512:
6
- metadata.gz: fdda34d574e75cf743086d341b2c27e08269f6a8483f8f6dc1fd6409e7e8fd25e0ece1f67f345e0836b5c86f0e82b1dfea0e48d9bdaeab3818e2bdab31967ff5
7
- data.tar.gz: 3f51f45b3580853de7b4fa027d83f24e1669b5798b4db06f4cd48cd6fd9e11418058177018383561edfee92e859943f271ba080786cc5d455424654f0ab959a4
6
+ metadata.gz: a77333d667e26114e78da6a2ad3df2fef62cf1da13e2ca5c8c273a23f8cb1095bcd7e510f140ccaa0111207accf78d66cd34eb993fee9a1d4d3512c7ef4f5c9b
7
+ data.tar.gz: 9bb3eecfa0326a5bd74802ddb7b4448102c82c71169d2726573586db48eefb7a4a65ea4d03964cc5ef4d80a0fc3e256fc4abf6e928c88bb3bab20f8ade55aa77
@@ -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';
@@ -116,7 +116,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
116
116
  const [rowSelection, setRowSelection] = useState<RowSelectionState>({})
117
117
 
118
118
  //Create cells for columns, with customization for first column
119
- const createCellFunction = (cellAccessors: string[], customRenderer?: (row: Row<GenericObject>, value: any) => JSX.Element, isFirstColumn?: boolean) => {
119
+ const createCellFunction = (cellAccessors: string[], customRenderer?: (row: Row<GenericObject>, value: any) => JSX.Element, index?: number) => {
120
120
  const columnCells = ({
121
121
  row,
122
122
  getValue,
@@ -126,7 +126,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
126
126
  }) => {
127
127
  const rowData = row.original
128
128
 
129
- if (isFirstColumn) {
129
+ if (index === 0) {
130
130
  switch (row.depth) {
131
131
  case 0: {
132
132
  return (
@@ -164,16 +164,15 @@ const AdvancedTable = (props: AdvancedTableProps) => {
164
164
  return columnCells
165
165
  }
166
166
 
167
- const buildColumns = (columnDefinitions: GenericObject[], isRoot= true): any => {
167
+ const buildColumns = (columnDefinitions: GenericObject[]): any => {
168
168
  return (
169
169
  columnDefinitions &&
170
170
  columnDefinitions.map((column, index) => {
171
- const isFirstColumn = isRoot && index === 0;
172
171
  //Checking to see if grouped column or not
173
172
  if (column.columns && column.columns.length > 0) {
174
173
  return {
175
174
  header: column.label || "",
176
- columns: buildColumns(column.columns, false),
175
+ columns: buildColumns(column.columns),
177
176
  };
178
177
  } else {
179
178
  // Define the base column structure
@@ -187,7 +186,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
187
186
  columnStructure.cell = createCellFunction(
188
187
  column.cellAccessors,
189
188
  column.customRenderer,
190
- isFirstColumn
189
+ index
191
190
  );
192
191
  }
193
192
 
@@ -30,7 +30,6 @@ examples:
30
30
  - advanced_table_pagination_with_props: Pagination Props
31
31
  - advanced_table_column_headers: Multi-Header Columns
32
32
  - advanced_table_column_headers_multiple: Multi-Header Columns (Multiple Levels)
33
- - advanced_table_column_headers_custom_cell: Multi-Header Columns with Custom Cells
34
33
  # - advanced_table_no_subrows: Table with No Subrows
35
34
  - advanced_table_selectable_rows: Selectable Rows
36
35
  - advanced_table_selectable_rows_no_subrows: Selectable Rows (No Subrows)
@@ -19,5 +19,4 @@ export { default as AdvancedTableSelectableRowsNoSubrows } from './_advanced_tab
19
19
  export { default as AdvancedTableNoSubrows } from './_advanced_table_no_subrows.jsx'
20
20
  export { default as AdvancedTableSelectableRowsHeader } from './_advanced_table_selectable_rows_header.jsx'
21
21
  export { default as AdvancedTableSelectableRowsActions } from './_advanced_table_selectable_rows_actions.jsx'
22
- export { default as AdvancedTableTablePropsStickyHeader } from './_advanced_table_table_props_sticky_header.jsx'
23
- export { default as AdvancedTableColumnHeadersCustomCell } from './_advanced_table_column_headers_custom_cell.jsx'
22
+ export { default as AdvancedTableTablePropsStickyHeader } from './_advanced_table_table_props_sticky_header.jsx'
@@ -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'
@@ -3,8 +3,7 @@
3
3
  @import "../tokens/border_radius";
4
4
 
5
5
  @mixin pb_progress_pill {
6
- width: 100%;
7
- max-width: 45px;
6
+ width: 45px;
8
7
  height: 4px;
9
8
  border-radius: $border_rad_light;
10
9
  margin-right: $space_xs;
@@ -28,10 +27,6 @@
28
27
  [class*=pb_progress_pill] {
29
28
  @include pb_progress_pill;
30
29
 
31
- &.full_width_pill {
32
- max-width: none;
33
- }
34
-
35
30
  &[class*=_inactive] {
36
31
  background-color: $border_light;
37
32
  &.dark {
@@ -13,7 +13,6 @@ type ProgressPillsProps = {
13
13
  className?: string,
14
14
  data?: { [key: string]: string },
15
15
  dark?: boolean,
16
- fullWidthPill?: boolean,
17
16
  htmlOptions?: {[key: string]: string | number | boolean | (() => void)},
18
17
  id?: string,
19
18
  steps?: number,
@@ -21,19 +20,19 @@ type ProgressPillsProps = {
21
20
  value?: string,
22
21
  }
23
22
 
24
- const ProgressPill = ({ active, dark, steps: step, fullWidthPill }: ProgressPillsProps) => (
23
+ const ProgressPill = ({ active, dark, steps: step }: ProgressPillsProps) => (
25
24
  <div
26
25
  className={`pb_progress_pill${step <= active ? '_active' : '_inactive'}${dark ? ' dark' : ''
27
- }${fullWidthPill ? ' full_width_pill' : ''}`}
26
+ }`}
28
27
  key={step}
29
28
  />
30
29
  )
31
30
 
32
- const showSteps = (steps: number, active: number, dark: boolean, fullWidthPill: boolean) => {
31
+ const showSteps = (steps: number, active: number, dark: boolean) => {
33
32
  const items = []
34
33
 
35
34
  for (let step = 1; step <= steps; step++) {
36
- items.push(ProgressPill({ steps: step, active, dark, fullWidthPill }))
35
+ items.push(ProgressPill({ steps: step, active, dark }))
37
36
  }
38
37
 
39
38
  return items
@@ -45,7 +44,6 @@ const ProgressPills = (props: ProgressPillsProps) => {
45
44
  aria = { hidden: 'true' },
46
45
  className,
47
46
  data = {},
48
- fullWidthPill = false,
49
47
  htmlOptions = {},
50
48
  id,
51
49
  steps = 3,
@@ -81,7 +79,7 @@ const ProgressPills = (props: ProgressPillsProps) => {
81
79
  text={value}
82
80
  />
83
81
  </div>}
84
- <div className="progress_pills">{showSteps(steps, active, dark, fullWidthPill)}</div>
82
+ <div className="progress_pills">{showSteps(steps, active, dark)}</div>
85
83
  </div>
86
84
  )
87
85
  }