playbook_ui 14.12.0 → 14.13.0.pre.rc.0
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/pb_advanced_table/advanced_table.html.erb +3 -3
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +3 -1
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_loading.html.erb +33 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_loading_rails.md +1 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_loading.md → _advanced_table_loading_react.md} +2 -2
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_responsive.html.erb +38 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_advanced_table/table_body.rb +17 -3
- data/app/pb_kits/playbook/pb_advanced_table/table_header.html.erb +15 -11
- data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +14 -3
- data/app/pb_kits/playbook/pb_advanced_table/table_row.html.erb +2 -2
- data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +9 -1
- data/app/pb_kits/playbook/pb_advanced_table/table_subrow_header.html.erb +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/table_subrow_header.rb +9 -0
- data/app/pb_kits/playbook/pb_avatar/_avatar.scss +5 -0
- data/app/pb_kits/playbook/pb_card/card.html.erb +21 -2
- data/app/pb_kits/playbook/pb_card/card.rb +7 -0
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_cards_rails.html.erb +1 -3
- data/app/pb_kits/playbook/pb_draggable/docs/_draggable_with_cards_rails.md +7 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_content.jsx +12 -8
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_content_rails.html.erb +52 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_content_rails.md +0 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_nested_rows_rails.html.erb +52 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_nested_rows_rails.md +3 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_nested_table_rails.html.erb +80 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_nested_table_rails.md +1 -0
- data/app/pb_kits/playbook/pb_table/docs/example.yml +3 -0
- data/app/pb_kits/playbook/pb_table/table_row.rb +1 -1
- data/dist/chunks/{_weekday_stacked-DE8qVYG2.js → _weekday_stacked-zyBCd1s8.js} +1 -1
- data/dist/chunks/lazysizes-B7xYodB-.js +1 -0
- data/dist/chunks/vendor.js +1 -1
- data/dist/playbook-doc.js +1 -1
- data/dist/playbook-rails.js +1 -1
- data/dist/playbook.css +1 -1
- data/lib/playbook/pb_forms_global_props_helper.rb +136 -0
- data/lib/playbook/pb_forms_helper.rb +13 -4
- data/lib/playbook/version.rb +2 -2
- metadata +15 -5
- data/dist/chunks/lazysizes-DHz07jlL.js +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fcf251161270426f1872fe6a3344fa2b30027ebf0e8de2438a1425b76227a846
|
4
|
+
data.tar.gz: 7c0f7ef946114d87099cdf24562e8731f1686498dcef593092d0fd8a7c9f4091
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1d66fe512c67ece02687f200a99c4daf2fd581b83e45857bac0214a6ea62160eee6f9152833b35ee6a9b618a212f360e721604ebfc913fdfb5871c4464e24ae
|
7
|
+
data.tar.gz: fd937db687917267ff67e23f04344d63dda613ee7c56c17870892c8a2894f2a9d5c2c06916a607711c9d70dbd028acad003480d9585c4ab05f6481b7b96b1ff6
|
@@ -1,10 +1,10 @@
|
|
1
1
|
<%= pb_content_tag do %>
|
2
|
-
<%= pb_rails("table", props: { size: "sm", data_table: true, number_spacing:"tabular", responsive:"none", dark: dark }.merge(object.table_props)) do %>
|
2
|
+
<%= pb_rails("table", props: { size: "sm", data_table: true, number_spacing:"tabular", responsive:"none", dark: dark, classname: object.loading ? "content-loading" : "" }.merge(object.table_props)) do %>
|
3
3
|
<% if content.present? %>
|
4
4
|
<% content.presence %>
|
5
5
|
<% else %>
|
6
|
-
<%= pb_rails("advanced_table/table_header", props: { column_definitions: object.column_definitions, enable_toggle_expansion: object.enable_toggle_expansion }) %>
|
7
|
-
<%= pb_rails("advanced_table/table_body", props: { id: object.id, table_data: object.table_data, column_definitions: object.column_definitions }) %>
|
6
|
+
<%= pb_rails("advanced_table/table_header", props: { column_definitions: object.column_definitions, enable_toggle_expansion: object.enable_toggle_expansion, responsive: object.responsive, loading: object.loading }) %>
|
7
|
+
<%= pb_rails("advanced_table/table_body", props: { id: object.id, table_data: object.table_data, column_definitions: object.column_definitions, responsive: object.responsive, loading: object.loading }) %>
|
8
8
|
<% end %>
|
9
9
|
<% end %>
|
10
10
|
<% end %>
|
@@ -10,9 +10,11 @@ module Playbook
|
|
10
10
|
prop :enable_toggle_expansion, type: Playbook::Props::Enum,
|
11
11
|
values: %w[all header none],
|
12
12
|
default: "header"
|
13
|
+
prop :loading, type: Playbook::Props::Boolean,
|
14
|
+
default: false
|
13
15
|
prop :responsive, type: Playbook::Props::Enum,
|
14
16
|
values: %w[none scroll],
|
15
|
-
default: "
|
17
|
+
default: "scroll"
|
16
18
|
prop :table_props, type: Playbook::Props::HashProp,
|
17
19
|
default: {}
|
18
20
|
|
@@ -245,7 +245,7 @@ test("toggleExpansionAll button exists and toggles subrows open and closed", asy
|
|
245
245
|
})
|
246
246
|
|
247
247
|
|
248
|
-
test("loading state +
|
248
|
+
test("loading state + initialLoadingRowsCount prop", () => {
|
249
249
|
render(
|
250
250
|
<AdvancedTable
|
251
251
|
columnDefinitions={columnDefinitions}
|
@@ -0,0 +1,33 @@
|
|
1
|
+
<% column_definitions = [
|
2
|
+
{
|
3
|
+
accessor: "year",
|
4
|
+
label: "Year",
|
5
|
+
cellAccessors: ["quarter", "month", "day"],
|
6
|
+
},
|
7
|
+
{
|
8
|
+
accessor: "newEnrollments",
|
9
|
+
label: "New Enrollments",
|
10
|
+
},
|
11
|
+
{
|
12
|
+
accessor: "scheduledMeetings",
|
13
|
+
label: "Scheduled Meetings",
|
14
|
+
},
|
15
|
+
{
|
16
|
+
accessor: "attendanceRate",
|
17
|
+
label: "Attendance Rate",
|
18
|
+
},
|
19
|
+
{
|
20
|
+
accessor: "completedClasses",
|
21
|
+
label: "Completed Classes",
|
22
|
+
},
|
23
|
+
{
|
24
|
+
accessor: "classCompletionRate",
|
25
|
+
label: "Class Completion Rate",
|
26
|
+
},
|
27
|
+
{
|
28
|
+
accessor: "graduatedStudents",
|
29
|
+
label: "Graduated Students",
|
30
|
+
}
|
31
|
+
] %>
|
32
|
+
|
33
|
+
<%= pb_rails("advanced_table", props: { id: "beta_table", table_data: @table_data, column_definitions: column_definitions, loading: true }) %>
|
@@ -0,0 +1 @@
|
|
1
|
+
The optional `loading` prop takes a boolean value that can be managed using state. If loading is true, the table will display the loading skeleton and once loading is false, the table will render with the data provided.
|
@@ -1,3 +1,3 @@
|
|
1
|
-
|
1
|
+
The optional `loading` prop takes a boolean value that can be managed using state. If loading is true, the table will display the loading skeleton and once loading is false, the table will render with the data provided.
|
2
2
|
|
3
|
-
By default, the inital row count of the loading skeleton is set to 10. If you want more control over this initial row count, the optional `
|
3
|
+
By default, the inital row count of the loading skeleton is set to 10. If you want more control over this initial row count, the optional `initialLoadingRowsCount` prop can be used to pass in a number. __NOTE__: This is only for the first render of the table, subsequent loading skeleton row count logic is handled within the kit itself.
|
@@ -0,0 +1,38 @@
|
|
1
|
+
|
2
|
+
<% column_definitions = [
|
3
|
+
{
|
4
|
+
accessor: "year",
|
5
|
+
label: "Year",
|
6
|
+
cellAccessors: ["quarter", "month", "day"],
|
7
|
+
},
|
8
|
+
{
|
9
|
+
accessor: "newEnrollments",
|
10
|
+
label: "New Enrollments",
|
11
|
+
},
|
12
|
+
{
|
13
|
+
accessor: "scheduledMeetings",
|
14
|
+
label: "Scheduled Meetings",
|
15
|
+
},
|
16
|
+
{
|
17
|
+
accessor: "attendanceRate",
|
18
|
+
label: "Attendance Rate",
|
19
|
+
},
|
20
|
+
{
|
21
|
+
accessor: "completedClasses",
|
22
|
+
label: "Completed Classes",
|
23
|
+
},
|
24
|
+
{
|
25
|
+
accessor: "classCompletionRate",
|
26
|
+
label: "Class Completion Rate",
|
27
|
+
},
|
28
|
+
{
|
29
|
+
accessor: "graduatedStudents",
|
30
|
+
label: "Graduated Students",
|
31
|
+
},
|
32
|
+
] %>
|
33
|
+
|
34
|
+
<%= pb_rails("title", props: { size: 4 }) do %> Not Responsive <% end %>
|
35
|
+
<%= pb_rails("advanced_table", props: { id: "table_props_table_non_responsive", table_data: @table_data, column_definitions: column_definitions, responsive: "none" }) %>
|
36
|
+
|
37
|
+
<%= pb_rails("title", props: { padding_top: "sm", size: 4 }) do %> Responsive as Default <% end %>
|
38
|
+
<%= pb_rails("advanced_table", props: { id: "table_props_table_responsive", table_data: @table_data, column_definitions: column_definitions }) %>
|
@@ -1,10 +1,12 @@
|
|
1
1
|
examples:
|
2
2
|
rails:
|
3
3
|
- advanced_table_beta: Default (Required Props)
|
4
|
+
- advanced_table_loading: Loading State
|
4
5
|
- advanced_table_beta_subrow_headers: SubRow Headers
|
5
6
|
- advanced_table_collapsible_trail_rails: Collapsible Trail
|
6
7
|
- advanced_table_table_props: Table Props
|
7
8
|
- advanced_table_beta_sort: Enable Sorting
|
9
|
+
- advanced_table_responsive: Responsive Tables
|
8
10
|
- advanced_table_custom_cell_rails: Custom Components for Cells
|
9
11
|
- advanced_table_column_headers: Multi-Header Columns
|
10
12
|
- advanced_table_column_headers_multiple: Multi-Header Columns (Multiple Levels)
|
@@ -16,6 +16,11 @@ module Playbook
|
|
16
16
|
default: []
|
17
17
|
prop :collapsible_trail, type: Playbook::Props::Boolean,
|
18
18
|
default: true
|
19
|
+
prop :loading, type: Playbook::Props::Boolean,
|
20
|
+
default: false
|
21
|
+
prop :responsive, type: Playbook::Props::Enum,
|
22
|
+
values: %w[none scroll],
|
23
|
+
default: "scroll"
|
19
24
|
|
20
25
|
def flatten_columns(columns)
|
21
26
|
columns.flat_map do |col|
|
@@ -46,12 +51,12 @@ module Playbook
|
|
46
51
|
row_parent: "#{id}_#{ancestor_ids.last}",
|
47
52
|
}
|
48
53
|
# Subrow header if applicable
|
49
|
-
output << pb_rails("advanced_table/table_subrow_header", props: { row: row, column_definitions: leaf_columns, depth: current_depth, subrow_header: subrow_headers[current_depth - 1], collapsible_trail: collapsible_trail, classname: "toggle-content", subrow_data_attributes: subrow_data_attributes }) if is_first_child_of_subrow && enable_toggle_expansion == "all"
|
54
|
+
output << pb_rails("advanced_table/table_subrow_header", props: { row: row, column_definitions: leaf_columns, depth: current_depth, subrow_header: subrow_headers[current_depth - 1], collapsible_trail: collapsible_trail, classname: "toggle-content", responsive: responsive, subrow_data_attributes: subrow_data_attributes }) if is_first_child_of_subrow && enable_toggle_expansion == "all"
|
50
55
|
|
51
56
|
current_data_attributes = current_depth.zero? ? { row_depth: 0 } : table_data_attributes
|
52
57
|
|
53
58
|
# Additional class and data attributes needed for toggle logic
|
54
|
-
output << pb_rails("advanced_table/table_row", props: { id: id, row: row, column_definitions: leaf_columns, depth: current_depth, collapsible_trail: collapsible_trail, classname: additional_classes, table_data_attributes: current_data_attributes })
|
59
|
+
output << pb_rails("advanced_table/table_row", props: { id: id, row: row, column_definitions: leaf_columns, depth: current_depth, collapsible_trail: collapsible_trail, classname: additional_classes, table_data_attributes: current_data_attributes, responsive: responsive, loading: loading })
|
55
60
|
|
56
61
|
if row[:children].present?
|
57
62
|
row[:children].each do |child_row|
|
@@ -74,7 +79,16 @@ module Playbook
|
|
74
79
|
end
|
75
80
|
|
76
81
|
def classname
|
77
|
-
|
82
|
+
additional_classes = []
|
83
|
+
additional_classes << "advanced-table-responsive-#{responsive} pinned-left" if responsive == "scroll"
|
84
|
+
|
85
|
+
generate_classname("pb_advanced_table_body", *additional_classes, separator: " ")
|
86
|
+
end
|
87
|
+
|
88
|
+
def pinned_cell_class(index)
|
89
|
+
return "pinned-left" if index.zero? && responsive == "scroll"
|
90
|
+
|
91
|
+
""
|
78
92
|
end
|
79
93
|
|
80
94
|
private
|
@@ -3,17 +3,21 @@
|
|
3
3
|
<%= pb_rails("table/table_row") do %>
|
4
4
|
<% header_row.each_with_index do |cell, cell_index| %>
|
5
5
|
<% header_id = cell[:accessor].present? ? cell[:accessor] : "header_#{row_index}_#{cell_index}" %>
|
6
|
-
<%= pb_rails("table/table_header", props: { id: header_id, colspan: cell[:colspan], classname: [object.th_classname, ('last-header-cell' if cell[:is_last_in_group] && cell_index != 0)].compact.join(' '), sort_menu: cell[:accessor] ? cell[:sort_menu] : nil }) do %>
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
6
|
+
<%= pb_rails("table/table_header", props: { id: header_id, colspan: cell[:colspan], classname: [object.th_classname(is_first_column: cell_index.zero?), ('last-header-cell' if cell[:is_last_in_group] && cell_index != 0)].compact.join(' '), sort_menu: cell[:accessor] ? cell[:sort_menu] : nil }) do %>
|
7
|
+
<%= pb_rails("flex", props: { align: "center", justify: cell_index.zero? ? "start" : row_index === header_rows.size - 1 ? "end" : "center", text_align: "end" }) do %>
|
8
|
+
<% if cell_index.zero? && (object.enable_toggle_expansion == "header" || object.enable_toggle_expansion == "all") && row_index === header_rows.size - 1 %>
|
9
|
+
<% if loading %>
|
10
|
+
<div class="<%= object.loading ? 'loading-toggle-icon' : '' %>"></div>
|
11
|
+
<% else %>
|
12
|
+
<button
|
13
|
+
class="gray-icon toggle-all-icon"
|
14
|
+
onclick="expandAllRows(this); event.preventDefault();">
|
15
|
+
<%= pb_rails("icon", props: { icon: "arrows-from-line", cursor: "pointer", fixed_width: true, padding_right: "xs" }) %>
|
16
|
+
</button>
|
17
|
+
<% end %>
|
18
|
+
<% end %>
|
19
|
+
<%= cell[:label] %>
|
20
|
+
<% end %>
|
17
21
|
<% end %>
|
18
22
|
<% end %>
|
19
23
|
<% end %>
|
@@ -8,13 +8,24 @@ module Playbook
|
|
8
8
|
prop :enable_toggle_expansion, type: Playbook::Props::Enum,
|
9
9
|
values: %w[all header none],
|
10
10
|
default: "header"
|
11
|
+
prop :loading, type: Playbook::Props::Boolean,
|
12
|
+
default: false
|
13
|
+
prop :responsive, type: Playbook::Props::Enum,
|
14
|
+
values: %w[none scroll],
|
15
|
+
default: "scroll"
|
11
16
|
|
12
17
|
def classname
|
13
|
-
|
18
|
+
additional_classes = []
|
19
|
+
additional_classes << "advanced-table-responsive-#{responsive} pinned-left" if responsive == "scroll"
|
20
|
+
|
21
|
+
generate_classname("pb_advanced_table_header", "pb_table_thead", *additional_classes, separator: " ")
|
14
22
|
end
|
15
23
|
|
16
|
-
def th_classname
|
17
|
-
|
24
|
+
def th_classname(is_first_column: false)
|
25
|
+
additional_classes = []
|
26
|
+
additional_classes << "pinned-left" if is_first_column && responsive == "scroll"
|
27
|
+
|
28
|
+
generate_classname("table-header-cells", *additional_classes, separator: " ")
|
18
29
|
end
|
19
30
|
|
20
31
|
def header_rows
|
@@ -1,8 +1,8 @@
|
|
1
1
|
<%= pb_content_tag(:tr) do %>
|
2
2
|
<% object.column_definitions.each_with_index do |column, index| %>
|
3
3
|
<% next unless column[:accessor].present? %>
|
4
|
-
<%= pb_rails("table/table_cell", props: { classname:object.td_classname(column)}) do %>
|
5
|
-
<%= pb_rails("flex", props:{ align: "center", justify: index.zero? ? "start" : "end" }) do %>
|
4
|
+
<%= pb_rails("table/table_cell", props: { classname:object.td_classname(column, index)}) do %>
|
5
|
+
<%= pb_rails("flex", props:{ align: "center", justify: index.zero? ? "start" : "end", classname: object.loading ? "loading-cell" : "" }) do %>
|
6
6
|
<% if collapsible_trail && index.zero? %>
|
7
7
|
<% (1..depth).each do |i| %>
|
8
8
|
<% additional_offset = i > 1 ? (i - 1) * 0.25 : 0 %>
|
@@ -13,6 +13,13 @@ module Playbook
|
|
13
13
|
default: true
|
14
14
|
prop :table_data_attributes, type: Playbook::Props::HashProp,
|
15
15
|
default: {}
|
16
|
+
prop :loading, type: Playbook::Props::Boolean,
|
17
|
+
default: false
|
18
|
+
prop :responsive, type: Playbook::Props::Enum,
|
19
|
+
values: %w[none scroll],
|
20
|
+
default: "scroll"
|
21
|
+
prop :is_pinned_left, type: Playbook::Props::Boolean,
|
22
|
+
default: false
|
16
23
|
|
17
24
|
def data
|
18
25
|
Hash(prop(:data)).merge(table_data_attributes)
|
@@ -22,9 +29,10 @@ module Playbook
|
|
22
29
|
generate_classname("pb_table_tr", "bg-white", subrow_depth_classname, separator: " ")
|
23
30
|
end
|
24
31
|
|
25
|
-
def td_classname(column)
|
32
|
+
def td_classname(column, index)
|
26
33
|
classes = %w[id-cell chrome-styles]
|
27
34
|
classes << "last-cell" if column[:is_last_in_group]
|
35
|
+
classes << "pinned-left" if index.zero? && is_pinned_left && responsive == "scroll"
|
28
36
|
classes.join(" ")
|
29
37
|
end
|
30
38
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<%= pb_content_tag(:tr) do %>
|
2
2
|
<% object.column_definitions.each_with_index do |column, index| %>
|
3
|
-
<%= pb_rails("table/table_cell", props: { classname:
|
3
|
+
<%= pb_rails("table/table_cell", props: { classname: object.td_classname(index) }) do %>
|
4
4
|
<%= pb_rails("flex", props:{ align: "center", justify: "start" }) do %>
|
5
5
|
<% if collapsible_trail && index.zero? %>
|
6
6
|
<% (1..depth).each do |i| %>
|
@@ -16,6 +16,9 @@ module Playbook
|
|
16
16
|
default: true
|
17
17
|
prop :subrow_data_attributes, type: Playbook::Props::HashProp,
|
18
18
|
default: {}
|
19
|
+
prop :responsive, type: Playbook::Props::Enum,
|
20
|
+
values: %w[none scroll],
|
21
|
+
default: "scroll"
|
19
22
|
|
20
23
|
def data
|
21
24
|
Hash(prop(:data)).merge(subrow_data_attributes)
|
@@ -25,6 +28,12 @@ module Playbook
|
|
25
28
|
generate_classname("pb_table_tr", "bg-silver", "pb_subrow_header", subrow_depth_classname, separator: " ")
|
26
29
|
end
|
27
30
|
|
31
|
+
def td_classname(index)
|
32
|
+
classes = %w[id-cell chrome-styles]
|
33
|
+
classes << "pinned-left" if index.zero? && responsive == "scroll"
|
34
|
+
classes.join(" ")
|
35
|
+
end
|
36
|
+
|
28
37
|
private
|
29
38
|
|
30
39
|
def subrow_depth_classname
|
@@ -1,5 +1,24 @@
|
|
1
|
-
|
2
|
-
<%=
|
1
|
+
<% if object.draggable_item %>
|
2
|
+
<%= pb_rails("draggable/draggable_item", props:{drag_id: object.drag_id}) do %>
|
3
|
+
<%= pb_content_tag(object.tag) do %>
|
4
|
+
<% if object.draggable_item %>
|
5
|
+
<%= pb_rails("flex", props: { align: "center" }) do %>
|
6
|
+
<% if object.drag_handle %>
|
7
|
+
<span classname="card_draggable_handle">
|
8
|
+
<%= pb_rails("icon", props: { icon: "grip-dots-vertical", padding_right: "xs" }) %>
|
9
|
+
</span>
|
10
|
+
<% end %>
|
11
|
+
<div style="width: 100%">
|
12
|
+
<%= content.presence %>
|
13
|
+
</div>
|
14
|
+
<% end %>
|
15
|
+
<% end %>
|
16
|
+
<% end %>
|
17
|
+
<% end %>
|
18
|
+
<% else %>
|
19
|
+
<%= pb_content_tag(object.tag) do %>
|
20
|
+
<%= content.presence %>
|
21
|
+
<% end %>
|
3
22
|
<% end %>
|
4
23
|
|
5
24
|
|
@@ -17,6 +17,13 @@ module Playbook
|
|
17
17
|
prop :background, type: Playbook::Props::Enum,
|
18
18
|
values: %w[white light dark product_1_background product_1_highlight product_2_background product_2_highlight product_3_background product_3_highlight product_4_background product_4_highlight product_5_background product_5_highlight product_6_background product_6_highlight product_7_background product_7_highlight product_8_background product_8_highlight product_9_background product_9_highlight product_10_background product_10_highlight windows siding doors solar roofing gutters insulation none success_subtle warning_subtle error_subtle info_subtle neutral_subtle],
|
19
19
|
default: "none"
|
20
|
+
prop :drag_id, type: Playbook::Props::String
|
21
|
+
prop :draggable_item, type: Playbook::Props::Boolean,
|
22
|
+
default: false
|
23
|
+
prop :drag_handle, type: Playbook::Props::Boolean,
|
24
|
+
default: true
|
25
|
+
prop :items, type: Playbook::Props::Array,
|
26
|
+
default: []
|
20
27
|
|
21
28
|
def classname
|
22
29
|
generate_classname("pb_card_kit",
|
@@ -7,8 +7,7 @@
|
|
7
7
|
<%= pb_rails("draggable", props: {initial_items: initial_items}) do %>
|
8
8
|
<%= pb_rails("draggable/draggable_container") do %>
|
9
9
|
<% initial_items.each do |item| %>
|
10
|
-
|
11
|
-
<%= pb_rails("card", props: {highlight: {position: "side", color:"primary"}, margin_bottom: "xs", padding: "xs"}) do %>
|
10
|
+
<%= pb_rails("card", props: {highlight: {position: "side", color:"primary"}, margin_bottom: "xs", padding: "xs", drag_id: item[:id], draggable_item: true }) do %>
|
12
11
|
<%= pb_rails("flex", props:{align_items: "stretch", flex_direction:"column"}) do %>
|
13
12
|
<%= pb_rails("flex", props:{gap: "xs"}) do %>
|
14
13
|
<%= pb_rails("title", props: { text: item[:name], tag: "h4", size: 4 }) %>
|
@@ -32,7 +31,6 @@
|
|
32
31
|
<% end %>
|
33
32
|
<% end %>
|
34
33
|
<% end %>
|
35
|
-
<% end %>
|
36
34
|
<% end %>
|
37
35
|
<% end %>
|
38
36
|
<% end %>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
For a simplified version of the Draggable API for the Card kit, you can do the following:
|
2
|
+
|
3
|
+
Use the `draggable` kit and manage state as shown.
|
4
|
+
|
5
|
+
`draggable/draggable_container` kit creates the container within which the cards can be dragged and dropped.
|
6
|
+
|
7
|
+
The Card kit is optimized to work with the draggable kit. To enable drag, use the `draggable_item` and `drag_id` props on the Card kit as shown. An additional optional boolean prop (set to true by default) of `drag_handle` is also available to show the drag handle icon.
|
@@ -8,27 +8,31 @@ const TableWithCollapsibleWithCustomContent = (props) => {
|
|
8
8
|
<Card
|
9
9
|
borderNone
|
10
10
|
borderRadius="none"
|
11
|
-
color="light"
|
11
|
+
color="light"
|
12
12
|
paddingX="xl"
|
13
13
|
paddingY="md"
|
14
14
|
{...props}
|
15
15
|
>
|
16
|
-
<Body paddingBottom="sm"
|
16
|
+
<Body paddingBottom="sm"
|
17
17
|
text="Expanded Custom Layout"
|
18
18
|
{...props}
|
19
19
|
/>
|
20
20
|
<Flex justify="between">
|
21
21
|
<Image
|
22
|
-
|
22
|
+
size="sm"
|
23
|
+
url="https://unsplash.it/500/400/?image=634"
|
23
24
|
/>
|
24
25
|
<Image
|
25
|
-
|
26
|
+
size="sm"
|
27
|
+
url="https://unsplash.it/500/400/?image=634"
|
26
28
|
/>
|
27
29
|
<Image
|
28
|
-
|
30
|
+
size="sm"
|
31
|
+
url="https://unsplash.it/500/400/?image=634"
|
29
32
|
/>
|
30
33
|
<Image
|
31
|
-
|
34
|
+
size="sm"
|
35
|
+
url="https://unsplash.it/500/400/?image=634"
|
32
36
|
/>
|
33
37
|
</Flex>
|
34
38
|
</Card>
|
@@ -52,7 +56,7 @@ const TableWithCollapsibleWithCustomContent = (props) => {
|
|
52
56
|
|
53
57
|
</Table.Head>
|
54
58
|
<Table.Body>
|
55
|
-
<Table.Row collapsible
|
59
|
+
<Table.Row collapsible
|
56
60
|
collapsibleContent={<Content/>}
|
57
61
|
{...props}
|
58
62
|
>
|
@@ -61,7 +65,7 @@ const TableWithCollapsibleWithCustomContent = (props) => {
|
|
61
65
|
<Table.Cell>{'Value 3'}</Table.Cell>
|
62
66
|
<Table.Cell>{'Value 4'}</Table.Cell>
|
63
67
|
<Table.Cell>{'Value 5'}</Table.Cell>
|
64
|
-
<Table.Cell textAlign="right">{
|
68
|
+
<Table.Cell textAlign="right">{
|
65
69
|
<Icon
|
66
70
|
color="primary"
|
67
71
|
fixedWidth
|
data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_content_rails.html.erb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
<% content = capture do %>
|
2
|
+
<%= pb_rails("card", props: { border_none: true, border_radius: "none", padding: "md" }) do %>
|
3
|
+
<%= pb_rails("body", props: { text: "Expanded Custom Layout", padding_bottom: "sm" }) %>
|
4
|
+
<%= pb_rails("flex", props: { justify: "between" }) do %>
|
5
|
+
<%= pb_rails("image", props: { size: "sm", url: "https://unsplash.it/500/400/?image=634" }) %>
|
6
|
+
<%= pb_rails("image", props: { size: "sm", url: "https://unsplash.it/500/400/?image=634" }) %>
|
7
|
+
<%= pb_rails("image", props: { size: "sm", url: "https://unsplash.it/500/400/?image=634" }) %>
|
8
|
+
<%= pb_rails("image", props: { size: "sm", url: "https://unsplash.it/500/400/?image=634" }) %>
|
9
|
+
<% end %>
|
10
|
+
<% end %>
|
11
|
+
<% end %>
|
12
|
+
|
13
|
+
<%= pb_rails("table", props: { size: "sm" }) do %>
|
14
|
+
<%= pb_rails("table/table_head") do %>
|
15
|
+
<%= pb_rails("table/table_row") do %>
|
16
|
+
<%= pb_rails("table/table_header", props: { text: "Column 1"}) %>
|
17
|
+
<%= pb_rails("table/table_header", props: { text: "Column 2"}) %>
|
18
|
+
<%= pb_rails("table/table_header", props: { text: "Column 3"}) %>
|
19
|
+
<%= pb_rails("table/table_header", props: { text: "Column 4"}) %>
|
20
|
+
<%= pb_rails("table/table_header", props: { text: "Column 5"}) %>
|
21
|
+
<%= pb_rails("table/table_header", props: { text: ""}) %>
|
22
|
+
<% end %>
|
23
|
+
<% end %>
|
24
|
+
<%= pb_rails("table/table_body") do %>
|
25
|
+
<%= pb_rails("table/table_row", props: { collapsible: true, collapsible_content: content, id: "2" }) do %>
|
26
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 1"}) %>
|
27
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 2"}) %>
|
28
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 3"}) %>
|
29
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 4"}) %>
|
30
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 5"}) %>
|
31
|
+
<%= pb_rails("table/table_cell", props: { text_align: "right"}) do %>
|
32
|
+
<%= pb_rails("icon", props: { icon: "chevron-down", fixed_width: true, color: "primary" }) %>
|
33
|
+
<% end %>
|
34
|
+
<% end %>
|
35
|
+
<%= pb_rails("table/table_row") do %>
|
36
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 1"}) %>
|
37
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 2"}) %>
|
38
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 3"}) %>
|
39
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 4"}) %>
|
40
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 5"}) %>
|
41
|
+
<%= pb_rails("table/table_cell", props: { text: ""}) %>
|
42
|
+
<% end %>
|
43
|
+
<%= pb_rails("table/table_row") do %>
|
44
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 1"}) %>
|
45
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 2"}) %>
|
46
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 3"}) %>
|
47
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 4"}) %>
|
48
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 5"}) %>
|
49
|
+
<%= pb_rails("table/table_cell", props: { text: ""}) %>
|
50
|
+
<% end %>
|
51
|
+
<% end %>
|
52
|
+
<% end %>
|
File without changes
|
data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_nested_rows_rails.html.erb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
<% content = capture do %>
|
2
|
+
<%= pb_rails("table", props: { container: false, border_radius: "none", size: "sm"}) do %>
|
3
|
+
<%= pb_rails("background", props: { tag: "tr" }) do %>
|
4
|
+
<%= pb_rails("table/table_cell") do %>Expanded<% end %>
|
5
|
+
<%= pb_rails("table/table_cell") do %>Expanded<% end %>
|
6
|
+
<%= pb_rails("table/table_cell") do %>Expanded<% end %>
|
7
|
+
<%= pb_rails("table/table_cell") do %>Expanded<% end %>
|
8
|
+
<%= pb_rails("table/table_cell") do %>Expanded<% end %>
|
9
|
+
<% end %>
|
10
|
+
<% end %>
|
11
|
+
<% end %>
|
12
|
+
|
13
|
+
<%= pb_rails("table", props: { size: "sm" }) do %>
|
14
|
+
<%= pb_rails("table/table_head") do %>
|
15
|
+
<%= pb_rails("table/table_row") do %>
|
16
|
+
<%= pb_rails("table/table_header", props: { text: "Column 1"}) %>
|
17
|
+
<%= pb_rails("table/table_header", props: { text: "Column 2"}) %>
|
18
|
+
<%= pb_rails("table/table_header", props: { text: "Column 3"}) %>
|
19
|
+
<%= pb_rails("table/table_header", props: { text: "Column 4"}) %>
|
20
|
+
<%= pb_rails("table/table_header", props: { text: "Column 5"}) %>
|
21
|
+
<%= pb_rails("table/table_header", props: { text: ""}) %>
|
22
|
+
<% end %>
|
23
|
+
<% end %>
|
24
|
+
<%= pb_rails("table/table_body") do %>
|
25
|
+
<%= pb_rails("table/table_row", props: { collapsible: true, collapsible_content: content, collapsible_side_highlight: false, id: "3" }) do %>
|
26
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 1"}) %>
|
27
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 2"}) %>
|
28
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 3"}) %>
|
29
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 4"}) %>
|
30
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 5"}) %>
|
31
|
+
<%= pb_rails("table/table_cell", props: { text_align: "right"}) do %>
|
32
|
+
<%= pb_rails("icon", props: { icon: "chevron-down", fixed_width: true, color: "primary" }) %>
|
33
|
+
<% end %>
|
34
|
+
<% end %>
|
35
|
+
<%= pb_rails("table/table_row") do %>
|
36
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 1"}) %>
|
37
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 2"}) %>
|
38
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 3"}) %>
|
39
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 4"}) %>
|
40
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 5"}) %>
|
41
|
+
<%= pb_rails("table/table_cell", props: { text: ""}) %>
|
42
|
+
<% end %>
|
43
|
+
<%= pb_rails("table/table_row") do %>
|
44
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 1"}) %>
|
45
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 2"}) %>
|
46
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 3"}) %>
|
47
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 4"}) %>
|
48
|
+
<%= pb_rails("table/table_cell", props: { text: "Value 5"}) %>
|
49
|
+
<%= pb_rails("table/table_cell", props: { text: ""}) %>
|
50
|
+
<% end %>
|
51
|
+
<% end %>
|
52
|
+
<% end %>
|