playbook_ui 14.14.0.pre.rc.3 → 14.14.0.pre.rc.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/_playbook.scss +0 -1
- data/app/pb_kits/playbook/pb_bar_graph/BarGraphStyles.scss +58 -0
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.jsx +64 -0
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.md +1 -0
- data/app/pb_kits/playbook/pb_bar_graph/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_bar_graph/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_progress_pills/_progress_pills.scss +6 -1
- data/app/pb_kits/playbook/pb_progress_pills/_progress_pills.tsx +7 -5
- data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.html.erb +1 -0
- data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.jsx +7 -0
- data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_default.md +1 -0
- data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_full_width.html.erb +1 -0
- data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_full_width.jsx +18 -0
- data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_full_width_rails.md +1 -0
- data/app/pb_kits/playbook/pb_progress_pills/docs/_progress_pills_full_width_react.md +1 -0
- data/app/pb_kits/playbook/pb_progress_pills/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_progress_pills/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_progress_pills/progress_pills.html.erb +1 -1
- data/app/pb_kits/playbook/pb_progress_pills/progress_pills.rb +6 -0
- data/app/pb_kits/playbook/pb_progress_pills/progress_pills.test.js +26 -1
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible.jsx +1 -1
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click.html.erb +51 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click_rails.md +2 -0
- data/app/pb_kits/playbook/pb_table/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_table/index.ts +41 -9
- data/app/pb_kits/playbook/pb_table/styles/_collapsible.scss +4 -0
- data/app/pb_kits/playbook/pb_table/table_row.html.erb +1 -0
- data/app/pb_kits/playbook/pb_table/table_row.rb +10 -1
- data/dist/chunks/{_typeahead-C_q1qAtC.js → _typeahead-CAIQfP7X.js} +2 -2
- data/dist/chunks/_weekday_stacked-DstwbGUv.js +45 -0
- data/dist/chunks/{lib-WQEeEj3t.js → lib-D3us1bGD.js} +1 -1
- data/dist/chunks/{pb_form_validation-Cq64l4zn.js → pb_form_validation-BpihMSOQ.js} +1 -1
- data/dist/chunks/vendor.js +1 -1
- data/dist/menu.yml +0 -7
- 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 +17 -23
- data/app/pb_kits/playbook/pb_avatar_action_button/_avatar_action_button.scss +0 -66
- data/app/pb_kits/playbook/pb_avatar_action_button/_avatar_action_button.tsx +0 -98
- data/app/pb_kits/playbook/pb_avatar_action_button/avatar_action_button.html.erb +0 -28
- data/app/pb_kits/playbook/pb_avatar_action_button/avatar_action_button.rb +0 -42
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_actions.html.erb +0 -19
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_actions.jsx +0 -26
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_default.html.erb +0 -10
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_default.jsx +0 -17
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_on_click.jsx +0 -19
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_onclick.html.erb +0 -16
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_placement.html.erb +0 -35
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_placement.jsx +0 -42
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_tooltip.html.erb +0 -13
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/example.yml +0 -15
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/index.js +0 -4
- data/app/pb_kits/playbook/pb_avatar_action_button/pb_avatar_action_button.test.js +0 -31
- data/dist/chunks/_weekday_stacked-DCeouuO3.js +0 -45
- /data/app/pb_kits/playbook/pb_table/docs/{_table_with_collapsible_with_custom_click.md → _table_with_collapsible_with_custom_click_react.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: 5a78bc366f1f7086a31c4095eb10e5c5ee0be08a56c68327597848a0d7a9236a
|
4
|
+
data.tar.gz: 83701efa1b7889f3359c4e73dde11ce3f2a48d5ec39e42d5c550f5c6299aeb38
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a51f1c37116779e420d0a30abe9aa0617d611103fdb5bf1e44aa3639be7e4d09ab61d71ea2e29173dc6a144110a262eaf7a27370c110db5926d24b80a20d870f
|
7
|
+
data.tar.gz: 4dceab2450821e9c3b12a791d4b919d747341b7b73fca55b83ff18fa6c460a0e39204a0d7bd3757b2bd53b46ad37af9a5624222e897e0ffe1f2f5d12938b9c4d
|
@@ -0,0 +1,58 @@
|
|
1
|
+
@import "../tokens/colors";
|
2
|
+
@import "../tokens/typography";
|
3
|
+
@import url("https://code.highcharts.com/css/highcharts.css");
|
4
|
+
|
5
|
+
:root {
|
6
|
+
--highcharts-color-0: #{$data_1};
|
7
|
+
--highcharts-color-1: #{$data_2};
|
8
|
+
--highcharts-color-2: #{$data_3};
|
9
|
+
--highcharts-color-3: #{$data_4};
|
10
|
+
--highcharts-color-4: #{$data_5};
|
11
|
+
--highcharts-color-5: #{$data_6};
|
12
|
+
--highcharts-color-6: #{$data_7};
|
13
|
+
--highcharts-color-7: #{$data_8};
|
14
|
+
}
|
15
|
+
|
16
|
+
.highcharts-title {
|
17
|
+
font-family: $font_family_base;
|
18
|
+
font-weight: $bold;
|
19
|
+
font-size: $heading_3;
|
20
|
+
color: $text_lt_default;
|
21
|
+
fill: $text_lt_default;
|
22
|
+
}
|
23
|
+
|
24
|
+
.highcharts-subtitle {
|
25
|
+
font-family: $font_family_base;
|
26
|
+
color: $text_lt_light;
|
27
|
+
fill: $text_lt_light;
|
28
|
+
font-weight: $regular;
|
29
|
+
font-size: $text_base;
|
30
|
+
}
|
31
|
+
|
32
|
+
.highcharts-yaxis > .highcharts-axis-title {
|
33
|
+
color: $text_lt_lighter;
|
34
|
+
fill: $text_lt_lighter;
|
35
|
+
font-family: $font_family_base;
|
36
|
+
font-weight: $bold;
|
37
|
+
font-size: $text_smaller;
|
38
|
+
}
|
39
|
+
|
40
|
+
.highcharts-axis-labels {
|
41
|
+
font-family: $font_family_base;
|
42
|
+
color: $text_lt_lighter;
|
43
|
+
fill: $text_lt_lighter;
|
44
|
+
font-weight: $bold;
|
45
|
+
font-size: $text_smaller;
|
46
|
+
}
|
47
|
+
|
48
|
+
.highcharts-grid-line {
|
49
|
+
stroke: $border_light;
|
50
|
+
}
|
51
|
+
|
52
|
+
.highcharts-point {
|
53
|
+
border-radius: 3px;
|
54
|
+
}
|
55
|
+
|
56
|
+
.highcharts-axis-line {
|
57
|
+
stroke: $border_light;
|
58
|
+
}
|
@@ -0,0 +1,64 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
import Highcharts from "highcharts";
|
3
|
+
import HighchartsReact from "highcharts-react-official";
|
4
|
+
|
5
|
+
import "../BarGraphStyles.scss";
|
6
|
+
// Your path might look more like this
|
7
|
+
//import "playbook-ui/dist/pb_bar_graph/BarGraphStyles.scss";
|
8
|
+
|
9
|
+
const columnChartData = [
|
10
|
+
{
|
11
|
+
name: "Installation",
|
12
|
+
data: [1475, 200, 3000, 654, 656],
|
13
|
+
},
|
14
|
+
{
|
15
|
+
name: "Manufacturing",
|
16
|
+
data: [4434, 524, 2320, 440, 500],
|
17
|
+
},
|
18
|
+
{
|
19
|
+
name: "Sales & Distribution",
|
20
|
+
data: [3387, 743, 1344, 434, 440],
|
21
|
+
},
|
22
|
+
{
|
23
|
+
name: "Project Development",
|
24
|
+
data: [3227, 878, 999, 780, 1000],
|
25
|
+
},
|
26
|
+
{
|
27
|
+
name: "Other",
|
28
|
+
data: [1111, 677, 3245, 500, 200],
|
29
|
+
},
|
30
|
+
];
|
31
|
+
|
32
|
+
const columnOptions = {
|
33
|
+
chart: {
|
34
|
+
type: "column",
|
35
|
+
},
|
36
|
+
series: columnChartData,
|
37
|
+
title: {
|
38
|
+
text: "Solar Employment Growth by Sector, 2010-2016",
|
39
|
+
},
|
40
|
+
subtitle: {
|
41
|
+
text: "Source: thesolarfoundation.com",
|
42
|
+
},
|
43
|
+
xAxis: {
|
44
|
+
categories: ["Jan", "Feb", "Mar", "Apr", "May"],
|
45
|
+
},
|
46
|
+
yAxis: {
|
47
|
+
min: 0,
|
48
|
+
title: {
|
49
|
+
text: "Number of Employees",
|
50
|
+
},
|
51
|
+
},
|
52
|
+
legend: { enabled: false },
|
53
|
+
credits: { enabled: false },
|
54
|
+
};
|
55
|
+
|
56
|
+
const BarGraphPbStyles = () => (
|
57
|
+
<div>
|
58
|
+
<HighchartsReact highcharts={Highcharts}
|
59
|
+
options={columnOptions}
|
60
|
+
/>
|
61
|
+
</div>
|
62
|
+
)
|
63
|
+
|
64
|
+
export default BarGraphPbStyles
|
@@ -0,0 +1 @@
|
|
1
|
+
You don't need to use the bar graph kit to apply the styles to your Highcharts bar graph. Just import the BarGraphStyles.scss to your component and the styles will apply automatically.
|
@@ -10,3 +10,4 @@ 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,7 +3,8 @@
|
|
3
3
|
@import "../tokens/border_radius";
|
4
4
|
|
5
5
|
@mixin pb_progress_pill {
|
6
|
-
width:
|
6
|
+
width: 100%;
|
7
|
+
max-width: 45px;
|
7
8
|
height: 4px;
|
8
9
|
border-radius: $border_rad_light;
|
9
10
|
margin-right: $space_xs;
|
@@ -27,6 +28,10 @@
|
|
27
28
|
[class*=pb_progress_pill] {
|
28
29
|
@include pb_progress_pill;
|
29
30
|
|
31
|
+
&.full_width_pill {
|
32
|
+
max-width: none;
|
33
|
+
}
|
34
|
+
|
30
35
|
&[class*=_inactive] {
|
31
36
|
background-color: $border_light;
|
32
37
|
&.dark {
|
@@ -13,6 +13,7 @@ type ProgressPillsProps = {
|
|
13
13
|
className?: string,
|
14
14
|
data?: { [key: string]: string },
|
15
15
|
dark?: boolean,
|
16
|
+
fullWidthPill?: boolean,
|
16
17
|
htmlOptions?: {[key: string]: string | number | boolean | (() => void)},
|
17
18
|
id?: string,
|
18
19
|
steps?: number,
|
@@ -20,19 +21,19 @@ type ProgressPillsProps = {
|
|
20
21
|
value?: string,
|
21
22
|
}
|
22
23
|
|
23
|
-
const ProgressPill = ({ active, dark, steps: step }: ProgressPillsProps) => (
|
24
|
+
const ProgressPill = ({ active, dark, steps: step, fullWidthPill }: ProgressPillsProps) => (
|
24
25
|
<div
|
25
26
|
className={`pb_progress_pill${step <= active ? '_active' : '_inactive'}${dark ? ' dark' : ''
|
26
|
-
}`}
|
27
|
+
}${fullWidthPill ? ' full_width_pill' : ''}`}
|
27
28
|
key={step}
|
28
29
|
/>
|
29
30
|
)
|
30
31
|
|
31
|
-
const showSteps = (steps: number, active: number, dark: boolean) => {
|
32
|
+
const showSteps = (steps: number, active: number, dark: boolean, fullWidthPill: boolean) => {
|
32
33
|
const items = []
|
33
34
|
|
34
35
|
for (let step = 1; step <= steps; step++) {
|
35
|
-
items.push(ProgressPill({ steps: step, active, dark }))
|
36
|
+
items.push(ProgressPill({ steps: step, active, dark, fullWidthPill }))
|
36
37
|
}
|
37
38
|
|
38
39
|
return items
|
@@ -44,6 +45,7 @@ const ProgressPills = (props: ProgressPillsProps) => {
|
|
44
45
|
aria = { hidden: 'true' },
|
45
46
|
className,
|
46
47
|
data = {},
|
48
|
+
fullWidthPill = false,
|
47
49
|
htmlOptions = {},
|
48
50
|
id,
|
49
51
|
steps = 3,
|
@@ -79,7 +81,7 @@ const ProgressPills = (props: ProgressPillsProps) => {
|
|
79
81
|
text={value}
|
80
82
|
/>
|
81
83
|
</div>}
|
82
|
-
<div className="progress_pills">{showSteps(steps, active, dark)}</div>
|
84
|
+
<div className="progress_pills">{showSteps(steps, active, dark, fullWidthPill)}</div>
|
83
85
|
</div>
|
84
86
|
)
|
85
87
|
}
|
@@ -0,0 +1 @@
|
|
1
|
+
Progress pills start at `45px` wide if the container allows, but will shrink down to `1px` as the container gets smaller. Resize this window to see each pill shrink.
|
@@ -0,0 +1 @@
|
|
1
|
+
<%= pb_rails("progress_pills", props: { aria: { label: "2 out of 5 steps complete" }, steps: 5, active: 2, full_width_pill: true }) %>
|
@@ -0,0 +1,18 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
import ProgressPills from '../_progress_pills'
|
3
|
+
|
4
|
+
const ProgressPillsFullWidth = (props) => {
|
5
|
+
return (
|
6
|
+
<>
|
7
|
+
<ProgressPills
|
8
|
+
active={2}
|
9
|
+
aria={{ label: '2 out of 5 steps complete' }}
|
10
|
+
fullWidthPill
|
11
|
+
steps={5}
|
12
|
+
{...props}
|
13
|
+
/>
|
14
|
+
</>
|
15
|
+
)
|
16
|
+
}
|
17
|
+
|
18
|
+
export default ProgressPillsFullWidth
|
@@ -0,0 +1 @@
|
|
1
|
+
Pass `full_width_pill: true` to the Progress Pill kit to get true 100% full width pills. The kit will take up the full width of the container that it is in.
|
@@ -0,0 +1 @@
|
|
1
|
+
Pass `fullWidthPill` to the Progress Pill kit to get true 100% full width pills. The kit will take up the full width of the container that it is in.
|
@@ -3,9 +3,11 @@ examples:
|
|
3
3
|
rails:
|
4
4
|
- progress_pills_default: Default
|
5
5
|
- progress_pills_status: Status
|
6
|
+
- progress_pills_full_width: Full Container Width
|
6
7
|
|
7
8
|
|
8
9
|
|
9
10
|
react:
|
10
11
|
- progress_pills_default: Default
|
11
12
|
- progress_pills_status: Status
|
13
|
+
- progress_pills_full_width: Full Container Width
|
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
<div class="progress_pills">
|
16
16
|
<% object.each_step do |step| %>
|
17
|
-
<span class="pb_progress_pill<%= object.active_step(step) %><%= object.dark_pill %>"></span>
|
17
|
+
<span class="pb_progress_pill<%= object.active_step(step) %><%= object.make_full_width %><%= object.dark_pill %>"></span>
|
18
18
|
<% end %>
|
19
19
|
</div>
|
20
20
|
|
@@ -9,6 +9,8 @@ module Playbook
|
|
9
9
|
prop :steps, type: Playbook::Props::Number,
|
10
10
|
default: 3
|
11
11
|
prop :title
|
12
|
+
prop :full_width_pill, type: Playbook::Props::Boolean,
|
13
|
+
default: false
|
12
14
|
|
13
15
|
def classname
|
14
16
|
generate_classname("pb_progress_pills_kit")
|
@@ -26,6 +28,10 @@ module Playbook
|
|
26
28
|
step <= active ? "_active" : "_inactive"
|
27
29
|
end
|
28
30
|
|
31
|
+
def make_full_width
|
32
|
+
full_width_pill ? " full_width_pill" : nil
|
33
|
+
end
|
34
|
+
|
29
35
|
def aria_attributes
|
30
36
|
return aria if aria.present?
|
31
37
|
|
@@ -23,6 +23,20 @@ const ProgressPillsDefault = () => {
|
|
23
23
|
)
|
24
24
|
}
|
25
25
|
|
26
|
+
const ProgressPillsFullWidth = () => {
|
27
|
+
return (
|
28
|
+
<ProgressPills
|
29
|
+
active={2}
|
30
|
+
aria={{ label: ariaLabel }}
|
31
|
+
data={{ testid: testId }}
|
32
|
+
fullWidthPill
|
33
|
+
steps={3}
|
34
|
+
title={title}
|
35
|
+
value={value}
|
36
|
+
/>
|
37
|
+
)
|
38
|
+
}
|
39
|
+
|
26
40
|
test('should pass data prop', () => {
|
27
41
|
render(<ProgressPillsDefault />)
|
28
42
|
const kit = screen.getByTestId(testId)
|
@@ -51,4 +65,15 @@ test('should render value', () => {
|
|
51
65
|
render(<ProgressPillsDefault />)
|
52
66
|
const kit = screen.getByText(value)
|
53
67
|
expect(kit).toBeInTheDocument()
|
54
|
-
})
|
68
|
+
})
|
69
|
+
|
70
|
+
test('should apply fullWidthPill styling when fullWidthPill prop is true', () => {
|
71
|
+
render(<ProgressPillsFullWidth />)
|
72
|
+
const container = screen.getByTestId(testId)
|
73
|
+
const pillElements = container.querySelectorAll('.full_width_pill')
|
74
|
+
|
75
|
+
expect(pillElements.length).toBeGreaterThan(0)
|
76
|
+
pillElements.forEach((pill) => {
|
77
|
+
expect(pill).toHaveClass('full_width_pill')
|
78
|
+
})
|
79
|
+
})
|
@@ -0,0 +1,51 @@
|
|
1
|
+
<% content = capture do %>
|
2
|
+
<%= pb_rails("card", props: { border_none: true, border_radius: "none", padding: "md" }) do %>
|
3
|
+
<%= pb_rails("body", props: { text: "Nested content inside a Table Row" }) %>
|
4
|
+
<% end %>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<%= pb_rails("table", props: { size: "sm" }) do %>
|
8
|
+
<%= pb_rails("table/table_head") do %>
|
9
|
+
<%= pb_rails("table/table_row") do %>
|
10
|
+
<%= pb_rails("table/table_header", props: { text: "Column 1"}) %>
|
11
|
+
<%= pb_rails("table/table_header", props: { text: "Column 2"}) %>
|
12
|
+
<%= pb_rails("table/table_header", props: { text: "Column 3"}) %>
|
13
|
+
<%= pb_rails("table/table_header", props: { text: "Column 4"}) %>
|
14
|
+
<%= pb_rails("table/table_header", props: { text: "Column 5"}) %>
|
15
|
+
<%= pb_rails("table/table_header", props: { text: ""}) %>
|
16
|
+
<% end %>
|
17
|
+
<% end %>
|
18
|
+
<%= pb_rails("table/table_body") do %>
|
19
|
+
<%= pb_rails("table/table_row", props: { collapsible: true, collapsible_content: content, collapsible_side_highlight: true, toggle_cell_id: "cell-1", id: "5" }) do %>
|
20
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 1"}) %>
|
21
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 2"}) %>
|
22
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 3"}) %>
|
23
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 4"}) %>
|
24
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 5"}) %>
|
25
|
+
<%= pb_rails("table/table_cell", props: { text_align: "right", id: "cell-1", cursor: "pointer" }) do %>
|
26
|
+
<%= pb_rails("icon", props: { icon: "chevron-down", fixed_width: true, color: "primary" }) %>
|
27
|
+
<% end %>
|
28
|
+
<% end %>
|
29
|
+
<%= pb_rails("table/table_row", props: { collapsible: true, collapsible_content: content, collapsible_side_highlight: true, toggle_cell_id: "cell-2", id: "6" }) do %>
|
30
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 1"}) %>
|
31
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 2"}) %>
|
32
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 3"}) %>
|
33
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 4"}) %>
|
34
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 5"}) %>
|
35
|
+
<%= pb_rails("table/table_cell", props: { text_align: "right", id: "cell-2", cursor: "pointer" }) do %>
|
36
|
+
<%= pb_rails("icon", props: { icon: "chevron-down", fixed_width: true, color: "primary" }) %>
|
37
|
+
<% end %>
|
38
|
+
<% end %>
|
39
|
+
<%= pb_rails("table/table_row", props: { collapsible: true, collapsible_content: content, collapsible_side_highlight: true, toggle_cell_id: "cell-3", id: "7" }) do %>
|
40
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 1"}) %>
|
41
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 2"}) %>
|
42
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 3"}) %>
|
43
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 4"}) %>
|
44
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 5"}) %>
|
45
|
+
<%= pb_rails("table/table_cell", props: { text_align: "right", id: "cell-3", cursor: "pointer" }) do %>
|
46
|
+
<%= pb_rails("icon", props: { icon: "chevron-down", fixed_width: true, color: "primary" }) %>
|
47
|
+
<% end %>
|
48
|
+
<% end %>
|
49
|
+
<% end %>
|
50
|
+
<% end %>
|
51
|
+
|
@@ -0,0 +1,2 @@
|
|
1
|
+
When using the `collapsible` prop, the default functionality is that the entire Row will be clickable to toggle the Row. To limit the click event to a specific Table Cell, you can use the `toggle_cell_id` prop to pass in the id of the Cell you want to use as the trigger.
|
2
|
+
__NOTE__: `toggle_cell_id` and the `id` on the Cell you want to use as the trigger MUST be the same. Please also be aware that you will need to pass in an `id` to any Table Rows you want to be collapsible. Make sure every `id` is unique if you are using multipe collapsibles.
|
@@ -31,6 +31,7 @@ examples:
|
|
31
31
|
- table_with_subcomponents_as_divs: Table with Sub Components (Divs)
|
32
32
|
- table_outer_padding: Outer Padding
|
33
33
|
- table_with_collapsible: Table with Collapsible
|
34
|
+
- table_with_collapsible_with_custom_click: Table with Collapsible with Custom Click
|
34
35
|
- table_with_collapsible_with_custom_content_rails: Table with Collapsible with Custom Content
|
35
36
|
- table_with_collapsible_with_nested_rows_rails: Table with Collapsible with Nested Rows
|
36
37
|
- table_with_collapsible_with_nested_table_rails: Table with Collapsible with Nested Table
|
@@ -2,6 +2,7 @@ import PbEnhancedElement from '../pb_enhanced_element'
|
|
2
2
|
|
3
3
|
const TABLE_WRAPPER_SELECTOR = "[data-pb-table-wrapper]";
|
4
4
|
const TABLE_COLLAPSIBLE_WRAPPER_SELECTOR = "[data-pb-table-collapsible-wrapper]";
|
5
|
+
const TABLE_COLLAPSIBLE_CELL_SELECTOR = "[data-pb-table-collapsible-cell-id]";
|
5
6
|
|
6
7
|
export default class PbTable extends PbEnhancedElement {
|
7
8
|
stickyLeftColumns: string[] = [];
|
@@ -158,18 +159,49 @@ export default class PbTable extends PbEnhancedElement {
|
|
158
159
|
}
|
159
160
|
|
160
161
|
handleCollapsibleClick() {
|
162
|
+
const cells = this.element.querySelectorAll(TABLE_COLLAPSIBLE_CELL_SELECTOR);
|
161
163
|
const collapsibleElements = this.element.querySelectorAll(TABLE_COLLAPSIBLE_WRAPPER_SELECTOR);
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
164
|
+
|
165
|
+
if (cells.length > 0) {
|
166
|
+
cells.forEach((cell) => {
|
167
|
+
const cellId = (cell as HTMLElement).dataset.pbTableCollapsibleCellId;
|
168
|
+
|
169
|
+
Array.from(cell.children).forEach((child) => {
|
170
|
+
if (child.id === cellId) {
|
171
|
+
Array.from(child.children).forEach((svgChild) => {
|
172
|
+
svgChild.id = cellId; // Assign cellId to SVG child
|
173
|
+
Array.from(svgChild.children).forEach((pathChild) => {
|
174
|
+
pathChild.id = cellId; // Assign cellId to path child
|
175
|
+
});
|
176
|
+
});
|
177
|
+
}
|
178
|
+
});
|
179
|
+
cell.addEventListener('click', (event) => {
|
180
|
+
if ((event.target as HTMLElement).id) {
|
181
|
+
document.dispatchEvent(new CustomEvent(`collapsed-toggle${(event.currentTarget as HTMLElement).id}`));
|
182
|
+
|
183
|
+
const toggleElements = this.element.querySelectorAll(`.collapsible_border_toggle${(event.currentTarget as HTMLElement).id}`);
|
184
|
+
toggleElements.forEach((element) => {
|
185
|
+
element.classList.toggle('no-border');
|
186
|
+
element.classList.toggle('border-active');
|
187
|
+
});
|
188
|
+
}
|
170
189
|
});
|
190
|
+
});
|
191
|
+
|
192
|
+
} else {
|
193
|
+
collapsibleElements.forEach((collapsibleElement) => {
|
194
|
+
collapsibleElement.addEventListener('click', (event) => {
|
195
|
+
document.dispatchEvent(new CustomEvent(`collapsed-toggle${(event.currentTarget as HTMLElement).id}`))
|
196
|
+
|
197
|
+
const toggleElements = this.element.querySelectorAll(`.collapsible_border_toggle${(event.currentTarget as HTMLElement).id}`);
|
198
|
+
toggleElements.forEach(element => {
|
199
|
+
element.classList.toggle('no-border');
|
200
|
+
element.classList.toggle('border-active');
|
201
|
+
});
|
202
|
+
})
|
171
203
|
})
|
172
|
-
}
|
204
|
+
}
|
173
205
|
}
|
174
206
|
|
175
207
|
handleCollapsibleRow() {
|
@@ -13,13 +13,14 @@ module Playbook
|
|
13
13
|
prop :collapsible_content
|
14
14
|
prop :collapsible_side_highlight, type: Playbook::Props::Boolean,
|
15
15
|
default: true
|
16
|
+
prop :toggle_cell_id, type: Playbook::Props::String
|
16
17
|
prop :draggable_item, type: Playbook::Props::Boolean,
|
17
18
|
default: false
|
18
19
|
prop :drag_id, type: Playbook::Props::String,
|
19
20
|
default: nil
|
20
21
|
|
21
22
|
def classname
|
22
|
-
generate_classname("pb_table_row_kit", side_highlight_class) + tag_class
|
23
|
+
generate_classname("pb_table_row_kit", side_highlight_class) + tag_class + collapsible_cell_class
|
23
24
|
end
|
24
25
|
|
25
26
|
def side_highlight_class
|
@@ -29,6 +30,14 @@ module Playbook
|
|
29
30
|
def tag_class
|
30
31
|
" pb_table_tr"
|
31
32
|
end
|
33
|
+
|
34
|
+
def collapsible_cell_class
|
35
|
+
if toggle_cell_id
|
36
|
+
" collapsible_cell"
|
37
|
+
else
|
38
|
+
""
|
39
|
+
end
|
40
|
+
end
|
32
41
|
end
|
33
42
|
end
|
34
43
|
end
|