playbook_ui 16.2.0.pre.alpha.PLAY2719atpinnedrowsrails14418 → 16.2.0.pre.alpha.PLAY2791closeonclick14636
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +1 -46
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.html.erb +2 -2
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +0 -2
- data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +0 -1
- data/app/pb_kits/playbook/pb_advanced_table/index.js +0 -38
- data/app/pb_kits/playbook/pb_advanced_table/table_body.html.erb +4 -21
- data/app/pb_kits/playbook/pb_advanced_table/table_body.rb +9 -115
- data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +1 -16
- data/app/pb_kits/playbook/pb_advanced_table/table_subrow_header.rb +1 -15
- data/app/pb_kits/playbook/pb_body/_body.scss +4 -4
- data/app/pb_kits/playbook/pb_body/_body_mixins.scss +28 -28
- data/app/pb_kits/playbook/pb_caption/_caption.scss +1 -1
- data/app/pb_kits/playbook/pb_caption/_caption_mixin.scss +15 -15
- data/app/pb_kits/playbook/pb_caption/docs/_caption_colors.html.erb +6 -4
- data/app/pb_kits/playbook/pb_caption/docs/_caption_colors.jsx +14 -4
- data/app/pb_kits/playbook/pb_checkbox/_checkbox.scss +18 -18
- data/app/pb_kits/playbook/pb_date_picker/_date_picker.scss +7 -7
- data/app/pb_kits/playbook/pb_date_picker/_date_picker.tsx +7 -1
- data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +2 -2
- data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +1 -0
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_positions.md +1 -0
- data/app/pb_kits/playbook/pb_date_picker/sass_partials/_calendar_input_icon.scss +14 -6
- data/app/pb_kits/playbook/pb_date_picker/sass_partials/_input_styles.scss +80 -5
- data/app/pb_kits/playbook/pb_date_picker/sass_partials/_time_selection_styles.scss +8 -1
- data/app/pb_kits/playbook/pb_detail/_detail.scss +14 -14
- data/app/pb_kits/playbook/pb_detail/_detail_mixins.scss +13 -13
- data/app/pb_kits/playbook/pb_detail/docs/_detail_colors.html.erb +6 -24
- data/app/pb_kits/playbook/pb_detail/docs/_detail_colors.jsx +35 -33
- data/app/pb_kits/playbook/pb_dialog/docs/_dialog_compound_components.md +3 -1
- data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +31 -25
- data/app/pb_kits/playbook/pb_dropdown/_dropdown.tsx +14 -3
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_closing_options.jsx +63 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_closing_options.md +1 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_closing_options_rails.html.erb +16 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_closing_options_rails.md +1 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_dropdown/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_dropdown/dropdown.html.erb +2 -2
- data/app/pb_kits/playbook/pb_dropdown/dropdown.rb +4 -0
- data/app/pb_kits/playbook/pb_dropdown/dropdown.test.jsx +1 -1
- data/app/pb_kits/playbook/pb_dropdown/index.js +27 -9
- data/app/pb_kits/playbook/pb_dropdown/utilities/clickOutsideHelper.tsx +7 -1
- data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +2 -1
- data/app/pb_kits/playbook/pb_form/docs/_form_with_required_indicator.html.erb +2 -0
- data/app/pb_kits/playbook/pb_icon/_icon.scss +5 -1
- data/app/pb_kits/playbook/pb_icon/icon.rb +168 -19
- data/app/pb_kits/playbook/pb_link/_link.scss +16 -1
- data/app/pb_kits/playbook/pb_link/docs/_link_underline.jsx +31 -1
- data/app/pb_kits/playbook/pb_list/_list_mixin.scss +4 -4
- data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.scss +28 -10
- data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +3 -2
- data/app/pb_kits/playbook/pb_passphrase/_passphrase.scss +14 -1
- data/app/pb_kits/playbook/pb_passphrase/_passphrase.tsx +5 -2
- data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.scss +11 -11
- data/app/pb_kits/playbook/pb_phone_number_input/phone_number_input.rb +2 -0
- data/app/pb_kits/playbook/pb_radio/_radio.scss +17 -17
- data/app/pb_kits/playbook/pb_rich_text_editor/_previewer_mixin.scss +6 -6
- data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.scss +31 -32
- data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.tsx +2 -0
- data/app/pb_kits/playbook/pb_rich_text_editor/_tiptap_styles.scss +5 -5
- data/app/pb_kits/playbook/pb_select/_select.scss +61 -51
- data/app/pb_kits/playbook/pb_select/_select.tsx +28 -18
- data/app/pb_kits/playbook/pb_select/docs/_select_required_indicator.html.erb +24 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_required_indicator.jsx +33 -0
- data/app/pb_kits/playbook/pb_select/docs/_select_required_indicator.md +3 -0
- data/app/pb_kits/playbook/pb_select/docs/example.yml +3 -2
- data/app/pb_kits/playbook/pb_select/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_select/select.html.erb +7 -1
- data/app/pb_kits/playbook/pb_select/select.rb +3 -0
- data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.scss +69 -20
- data/app/pb_kits/playbook/pb_selectable_icon/_selectable_icon.scss +6 -5
- data/app/pb_kits/playbook/pb_star_rating/star_rating.html.erb +1 -1
- data/app/pb_kits/playbook/pb_star_rating/subcomponents/_star_rating_interactive.tsx +1 -0
- data/app/pb_kits/playbook/pb_text_input/_text_input.scss +51 -20
- data/app/pb_kits/playbook/pb_text_input/_text_input.tsx +11 -4
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_disabled.jsx +11 -13
- data/app/pb_kits/playbook/pb_text_input/text_input.html.erb +2 -2
- data/app/pb_kits/playbook/pb_textarea/_textarea.scss +55 -12
- data/app/pb_kits/playbook/pb_textarea/_textarea.tsx +52 -21
- data/app/pb_kits/playbook/pb_textarea/_textarea_mixin.scss +31 -10
- data/app/pb_kits/playbook/pb_textarea/docs/_textarea_disabled.html.erb +10 -0
- data/app/pb_kits/playbook/pb_textarea/docs/_textarea_disabled.jsx +27 -0
- data/app/pb_kits/playbook/pb_textarea/docs/_textarea_input_options.jsx +68 -0
- data/app/pb_kits/playbook/pb_textarea/docs/example.yml +3 -0
- data/app/pb_kits/playbook/pb_textarea/docs/index.js +2 -0
- data/app/pb_kits/playbook/pb_textarea/textarea.html.erb +2 -2
- data/app/pb_kits/playbook/pb_textarea/textarea.rb +3 -0
- data/app/pb_kits/playbook/pb_textarea/textarea.test.js +115 -1
- data/app/pb_kits/playbook/pb_time_picker/_time_picker.scss +186 -25
- data/app/pb_kits/playbook/pb_time_picker/_time_picker.tsx +22 -1
- data/app/pb_kits/playbook/pb_time_picker/time_picker.rb +8 -1
- data/app/pb_kits/playbook/pb_time_picker/time_picker.test.jsx +2 -2
- data/app/pb_kits/playbook/pb_title/_title_mixin.scss +13 -13
- data/app/pb_kits/playbook/pb_title/docs/_title_colors.html.erb +2 -0
- data/app/pb_kits/playbook/pb_title/docs/_title_colors.jsx +14 -0
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +66 -23
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.test.jsx +1 -1
- data/app/pb_kits/playbook/tokens/_colors_accessible.scss +5 -1
- data/app/pb_kits/playbook/tokens/_titles.scss +1 -1
- data/dist/chunks/{_pb_line_graph-CC2Ywwix.js → _pb_line_graph-BSLb5VXP.js} +1 -1
- data/dist/chunks/_typeahead-COVN8XN7.js +1 -0
- data/dist/chunks/{globalProps-DYr2qrIf.js → globalProps-DyTB8IdV.js} +1 -1
- data/dist/chunks/{lib-DgqmX9CF.js → lib-9wz3x5jl.js} +1 -1
- data/dist/chunks/vendor.js +3 -3
- 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/forms/builder/checkbox_field.rb +1 -1
- data/lib/playbook/forms/builder/collection_select_field.rb +7 -1
- data/lib/playbook/forms/builder/intl_telephone_field.rb +11 -1
- data/lib/playbook/forms/builder/phone_number_field.rb +3 -2
- data/lib/playbook/forms/builder/select_field.rb +7 -1
- data/lib/playbook/forms/builder/time_zone_select_field.rb +7 -1
- data/lib/playbook/tokens/colors.json +2 -0
- data/lib/playbook/version.rb +1 -1
- metadata +16 -8
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pinned_rows_rails.html.erb +0 -57
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pinned_rows_rails.md +0 -7
- data/dist/chunks/_typeahead-DtzfGPUT.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: cfccccc8ec73a171782599bac37606fbbdc9c917eb9c48bb33c2cbfd4aa68258
|
|
4
|
+
data.tar.gz: 779c27fc41b966c1d0d2ce21369643049bdc3b80b8cd2efcc9400b27d8554836
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6e31002ccaa72626ea3eaaa01c9e5e2b299a05dbdaeebd7a5f9c54d80d1503155974a93fc25b6b78e906455dd389aeec2707e55e1904177c4e7e14c2f93f263e
|
|
7
|
+
data.tar.gz: 5663ca65cca211f1a494ef7535a2a82162bc2416db6653bb38f7fcd6e3485775f0ca7c7fd3cc610c71a498c599e377c5e0f5a742a95c0cf7abcde194ecd5a0e7
|
|
@@ -63,51 +63,6 @@
|
|
|
63
63
|
width: 100%;
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
// Override pb_table endcap: first and last column use same padding as rest of row
|
|
67
|
-
// First column
|
|
68
|
-
[class^="pb_table"].table-sm tbody tr td:first-child,
|
|
69
|
-
[class^="pb_table"].table-sm tbody tr .pb_table_td:first-child,
|
|
70
|
-
[class^="pb_table"].table-sm tbody .pb_table_tr td:first-child,
|
|
71
|
-
[class^="pb_table"].table-sm tbody .pb_table_tr .pb_table_td:first-child,
|
|
72
|
-
[class^="pb_table"].table-sm .pb_table_tbody tr td:first-child,
|
|
73
|
-
[class^="pb_table"].table-sm .pb_table_tbody tr .pb_table_td:first-child,
|
|
74
|
-
[class^="pb_table"].table-sm .pb_table_tbody .pb_table_tr td:first-child,
|
|
75
|
-
[class^="pb_table"].table-sm .pb_table_tbody .pb_table_tr .pb_table_td:first-child {
|
|
76
|
-
padding-left: $space-xs;
|
|
77
|
-
}
|
|
78
|
-
[class^="pb_table"].table-md tbody tr td:first-child,
|
|
79
|
-
[class^="pb_table"].table-md tbody tr .pb_table_td:first-child,
|
|
80
|
-
[class^="pb_table"].table-md tbody .pb_table_tr td:first-child,
|
|
81
|
-
[class^="pb_table"].table-md tbody .pb_table_tr .pb_table_td:first-child,
|
|
82
|
-
[class^="pb_table"].table-md .pb_table_tbody tr td:first-child,
|
|
83
|
-
[class^="pb_table"].table-md .pb_table_tbody tr .pb_table_td:first-child,
|
|
84
|
-
[class^="pb_table"].table-md .pb_table_tbody .pb_table_tr td:first-child,
|
|
85
|
-
[class^="pb_table"].table-md .pb_table_tbody .pb_table_tr .pb_table_td:first-child {
|
|
86
|
-
padding-left: $space-sm;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// Last column
|
|
90
|
-
[class^="pb_table"].table-sm tbody tr td:last-child,
|
|
91
|
-
[class^="pb_table"].table-sm tbody tr .pb_table_td:last-child,
|
|
92
|
-
[class^="pb_table"].table-sm tbody .pb_table_tr td:last-child,
|
|
93
|
-
[class^="pb_table"].table-sm tbody .pb_table_tr .pb_table_td:last-child,
|
|
94
|
-
[class^="pb_table"].table-sm .pb_table_tbody tr td:last-child,
|
|
95
|
-
[class^="pb_table"].table-sm .pb_table_tbody tr .pb_table_td:last-child,
|
|
96
|
-
[class^="pb_table"].table-sm .pb_table_tbody .pb_table_tr td:last-child,
|
|
97
|
-
[class^="pb_table"].table-sm .pb_table_tbody .pb_table_tr .pb_table_td:last-child {
|
|
98
|
-
padding-right: $space-xs;
|
|
99
|
-
}
|
|
100
|
-
[class^="pb_table"].table-md tbody tr td:last-child,
|
|
101
|
-
[class^="pb_table"].table-md tbody tr .pb_table_td:last-child,
|
|
102
|
-
[class^="pb_table"].table-md tbody .pb_table_tr td:last-child,
|
|
103
|
-
[class^="pb_table"].table-md tbody .pb_table_tr .pb_table_td:last-child,
|
|
104
|
-
[class^="pb_table"].table-md .pb_table_tbody tr td:last-child,
|
|
105
|
-
[class^="pb_table"].table-md .pb_table_tbody tr .pb_table_td:last-child,
|
|
106
|
-
[class^="pb_table"].table-md .pb_table_tbody .pb_table_tr td:last-child,
|
|
107
|
-
[class^="pb_table"].table-md .pb_table_tbody .pb_table_tr .pb_table_td:last-child {
|
|
108
|
-
padding-right: $space-sm;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
66
|
// Virtualized Table and Rows for Infinite Scroll
|
|
112
67
|
scrollbar-gutter: stable right-edges;
|
|
113
68
|
.virtualized-header-row-header {
|
|
@@ -765,7 +720,7 @@
|
|
|
765
720
|
}
|
|
766
721
|
}
|
|
767
722
|
|
|
768
|
-
// Row Pinning -
|
|
723
|
+
// Row Pinning - additional inline styles in RegularTableView.tsx
|
|
769
724
|
.pinned-row {
|
|
770
725
|
box-shadow: 0 4px 10px 0 rgba($shadow, 0.16) !important;
|
|
771
726
|
}
|
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
}) %>
|
|
8
8
|
<% end %>
|
|
9
9
|
|
|
10
|
-
<%= 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
|
|
10
|
+
<%= 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 %>
|
|
11
11
|
<% if content.present? %>
|
|
12
12
|
<% content.presence %>
|
|
13
13
|
<% else %>
|
|
14
14
|
<%= pb_rails("advanced_table/table_header", props: { table_id: object.id, column_definitions: object.column_definitions, enable_toggle_expansion: object.enable_toggle_expansion, responsive: object.responsive, loading: object.loading, selectable_rows: object.selectable_rows, show_actions_bar: object.show_actions_bar, inline_row_loading: object.inline_row_loading, persist_toggle_expansion_button: object.persist_toggle_expansion_button, table_data: object.table_data }) %>
|
|
15
|
-
<%= pb_rails("advanced_table/table_body", props: { table_id: object.id, table_data: object.table_data, column_definitions: object.column_definitions, responsive: object.responsive, loading: object.loading, selectable_rows: object.selectable_rows, enable_toggle_expansion: object.enable_toggle_expansion, row_styling: object.row_styling, inline_row_loading: object.inline_row_loading
|
|
15
|
+
<%= pb_rails("advanced_table/table_body", props: { table_id: object.id, table_data: object.table_data, column_definitions: object.column_definitions, responsive: object.responsive, loading: object.loading, selectable_rows: object.selectable_rows, enable_toggle_expansion: object.enable_toggle_expansion, row_styling: object.row_styling, inline_row_loading: object.inline_row_loading }) %>
|
|
16
16
|
<% end %>
|
|
17
17
|
<% end %>
|
|
18
18
|
<% end %>
|
|
@@ -7,7 +7,6 @@ examples:
|
|
|
7
7
|
- advanced_table_table_props: Table Props
|
|
8
8
|
- advanced_table_sticky_header_rails: Sticky Header
|
|
9
9
|
- advanced_table_table_props_sticky_header: Sticky Header for Responsive Table
|
|
10
|
-
- advanced_table_pinned_rows_rails: Pinned Rows
|
|
11
10
|
- advanced_table_beta_sort: Enable Sorting
|
|
12
11
|
- advanced_table_responsive: Responsive Tables
|
|
13
12
|
- advanced_table_custom_cell_rails: Custom Components for Cells
|
|
@@ -304,36 +304,9 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
|
304
304
|
lastVisibleRow.classList.add("last-visible-row");
|
|
305
305
|
lastVisibleRow.classList.add("last-row-cell");
|
|
306
306
|
}
|
|
307
|
-
|
|
308
|
-
PbAdvancedTable.updatePinnedRowsStickyTops(table);
|
|
309
307
|
}
|
|
310
308
|
}
|
|
311
309
|
|
|
312
|
-
/**
|
|
313
|
-
* Recompute sticky top for visible pinned rows so collapsed rows don't leave a gap.
|
|
314
|
-
* Call after expand/collapse and on load.
|
|
315
|
-
*/
|
|
316
|
-
static updatePinnedRowsStickyTops(advancedTableWrapper) {
|
|
317
|
-
const pinnedTbody = advancedTableWrapper?.querySelector("tbody.pinned-rows-tbody");
|
|
318
|
-
if (!pinnedTbody) return;
|
|
319
|
-
|
|
320
|
-
const pinnedRows = Array.from(pinnedTbody.querySelectorAll("tr.pinned-row"));
|
|
321
|
-
const visibleRows = pinnedRows.filter(
|
|
322
|
-
(tr) => tr.style.display !== "none" && tr.offsetParent !== null
|
|
323
|
-
);
|
|
324
|
-
|
|
325
|
-
const headerOffset = "var(--advanced-table-header-height, 44px)";
|
|
326
|
-
visibleRows.forEach((tr, index) => {
|
|
327
|
-
tr.style.top = `calc(${headerOffset} + 2.5em * ${index})`;
|
|
328
|
-
});
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
static updatePinnedRowsStickyTopsForAll() {
|
|
332
|
-
document.querySelectorAll(".pb_advanced_table").forEach((wrapper) => {
|
|
333
|
-
PbAdvancedTable.updatePinnedRowsStickyTops(wrapper);
|
|
334
|
-
});
|
|
335
|
-
}
|
|
336
|
-
|
|
337
310
|
hideCloseIcon() {
|
|
338
311
|
const closeIcon = this.element.querySelector(UP_ARROW_SELECTOR);
|
|
339
312
|
closeIcon.style.display = "none";
|
|
@@ -527,14 +500,3 @@ window.expandAllRows = (element) => {
|
|
|
527
500
|
window.expandAllSubRows = (element, rowDepth) => {
|
|
528
501
|
PbAdvancedTable.handleToggleAllSubRows(element, rowDepth);
|
|
529
502
|
};
|
|
530
|
-
|
|
531
|
-
// Fix pinned row sticky tops on load (collapsed rows would otherwise leave a gap)
|
|
532
|
-
if (typeof document !== "undefined") {
|
|
533
|
-
if (document.readyState === "loading") {
|
|
534
|
-
document.addEventListener("DOMContentLoaded", () =>
|
|
535
|
-
PbAdvancedTable.updatePinnedRowsStickyTopsForAll()
|
|
536
|
-
);
|
|
537
|
-
} else {
|
|
538
|
-
PbAdvancedTable.updatePinnedRowsStickyTopsForAll();
|
|
539
|
-
}
|
|
540
|
-
}
|
|
@@ -1,22 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
<%
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
<% object.pinned_root_rows.each do |root_info| %>
|
|
6
|
-
<% row_output, next_index = object.render_row_and_children(root_info[:row], object.column_definitions, root_info[:depth], root_info[:depth] > 0, root_info[:ancestor_ids] || [], root_info[:ancestor_ids]&.first, immediate_parent_row_id: object.row_id_for(root_info[:parent_row]), is_pinned_row: true, pinned_index: next_index, initial_table_data_attributes: root_info[:depth].to_i > 0 ? object.pinned_root_initial_data_attributes(root_info) : nil) %>
|
|
7
|
-
<%= row_output %>
|
|
8
|
-
<% end %>
|
|
9
|
-
<% end %>
|
|
10
|
-
<%= pb_content_tag(:tbody) do %>
|
|
11
|
-
<% table_data.each do |row| %>
|
|
12
|
-
<% result = object.render_row_and_children(row, object.column_definitions, 0, false, skip_pinned_ids: object.pinned_ids_set) %>
|
|
13
|
-
<%= result.is_a?(Array) ? result[0] : result %>
|
|
14
|
-
<% end %>
|
|
15
|
-
<% end %>
|
|
16
|
-
<% else %>
|
|
17
|
-
<%= pb_content_tag(:tbody) do %>
|
|
18
|
-
<% table_data.each do |row| %>
|
|
19
|
-
<%= object.render_row_and_children(row, object.column_definitions, 0, false) %>
|
|
20
|
-
<% end %>
|
|
21
|
-
<% end %>
|
|
1
|
+
<%= pb_content_tag(:tbody) do %>
|
|
2
|
+
<% object.table_data.each do |row| %>
|
|
3
|
+
<%= render_row_and_children(row, object.column_definitions, 0, false) %>
|
|
4
|
+
<% end %>
|
|
22
5
|
<% end %>
|
|
@@ -27,8 +27,6 @@ module Playbook
|
|
|
27
27
|
default: []
|
|
28
28
|
prop :inline_row_loading, type: Playbook::Props::Boolean,
|
|
29
29
|
default: false
|
|
30
|
-
prop :pinned_rows, type: Playbook::Props::HashProp,
|
|
31
|
-
default: {}
|
|
32
30
|
|
|
33
31
|
def flatten_columns(columns)
|
|
34
32
|
columns.flat_map do |col|
|
|
@@ -44,21 +42,14 @@ module Playbook
|
|
|
44
42
|
end.compact
|
|
45
43
|
end
|
|
46
44
|
|
|
47
|
-
def render_row_and_children(row, column_definitions, current_depth, first_parent_child, ancestor_ids = [], top_parent_id = nil, additional_classes: "", table_data_attributes: {}, immediate_parent_row_id: nil
|
|
48
|
-
if skip_pinned_ids && row_id_for(row) && skip_pinned_ids.include?(row_id_for(row).to_s)
|
|
49
|
-
return is_pinned_row ? [ActiveSupport::SafeBuffer.new, pinned_index] : ActiveSupport::SafeBuffer.new
|
|
50
|
-
end
|
|
51
|
-
|
|
45
|
+
def render_row_and_children(row, column_definitions, current_depth, first_parent_child, ancestor_ids = [], top_parent_id = nil, additional_classes: "", table_data_attributes: {}, immediate_parent_row_id: nil)
|
|
52
46
|
top_parent_id ||= row.object_id
|
|
53
47
|
new_ancestor_ids = ancestor_ids + [row.object_id]
|
|
54
|
-
leaf_columns = flatten_columns(column_definitions
|
|
48
|
+
leaf_columns = flatten_columns(column_definitions)
|
|
55
49
|
|
|
56
50
|
output = ActiveSupport::SafeBuffer.new
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
last_row = subrow_headers_arr.length == current_depth
|
|
60
|
-
|
|
61
|
-
next_pinned_index = pinned_index
|
|
51
|
+
is_first_child_of_subrow = current_depth.positive? && first_parent_child && subrow_headers[current_depth - 1].present?
|
|
52
|
+
last_row = subrow_headers.length == current_depth
|
|
62
53
|
|
|
63
54
|
subrow_ancestor_ids = ancestor_ids + ["#{row.object_id}sr"]
|
|
64
55
|
subrow_data_attributes = {
|
|
@@ -67,16 +58,7 @@ module Playbook
|
|
|
67
58
|
row_parent: "#{table_id}_#{ancestor_ids.last}",
|
|
68
59
|
}
|
|
69
60
|
# Subrow header if applicable
|
|
70
|
-
if is_first_child_of_subrow && enable_toggle_expansion == "all"
|
|
71
|
-
subrow_props = { row: row, column_definitions: leaf_columns, depth: current_depth, subrow_header: subrow_headers_arr[current_depth - 1], collapsible_trail: collapsible_trail, classname: "toggle-content", responsive: responsive, subrow_data_attributes: subrow_data_attributes, last_row: last_row, immediate_parent_row_id: immediate_parent_row_id }
|
|
72
|
-
if is_pinned_row && next_pinned_index
|
|
73
|
-
subrow_props[:is_pinned_row] = true
|
|
74
|
-
subrow_props[:pinned_index] = next_pinned_index
|
|
75
|
-
subrow_props[:html_options] = { style: build_pinned_row_style(next_pinned_index, background: "var(--pb_table_sticky_bg, #f5f5f5)") }
|
|
76
|
-
next_pinned_index += 1
|
|
77
|
-
end
|
|
78
|
-
output << pb_rails("advanced_table/table_subrow_header", props: subrow_props)
|
|
79
|
-
end
|
|
61
|
+
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, last_row: last_row, immediate_parent_row_id: immediate_parent_row_id }) if is_first_child_of_subrow && enable_toggle_expansion == "all"
|
|
80
62
|
|
|
81
63
|
current_data_attributes = if current_depth.zero?
|
|
82
64
|
{
|
|
@@ -85,19 +67,11 @@ module Playbook
|
|
|
85
67
|
row_parent: nil,
|
|
86
68
|
}
|
|
87
69
|
else
|
|
88
|
-
|
|
70
|
+
table_data_attributes
|
|
89
71
|
end
|
|
90
72
|
|
|
91
73
|
# Additional class and data attributes needed for toggle logic
|
|
92
|
-
|
|
93
|
-
if is_pinned_row && next_pinned_index
|
|
94
|
-
row_props[:is_pinned_row] = true
|
|
95
|
-
row_props[:pinned_index] = next_pinned_index
|
|
96
|
-
row_bg = (row_styling || []).find { |s| s[:row_id].to_s == row_id_for(row).to_s }&.[](:background_color) || "white"
|
|
97
|
-
row_props[:html_options] = { style: build_pinned_row_style(next_pinned_index, background: row_bg) }
|
|
98
|
-
next_pinned_index += 1
|
|
99
|
-
end
|
|
100
|
-
output << pb_rails("advanced_table/table_row", props: row_props)
|
|
74
|
+
output << pb_rails("advanced_table/table_row", props: { table_id: table_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, selectable_rows: selectable_rows, row_id: row[:id], enable_toggle_expansion: enable_toggle_expansion, row_styling: row_styling, last_row: last_row, immediate_parent_row_id: immediate_parent_row_id, inline_row_loading: inline_row_loading })
|
|
101
75
|
|
|
102
76
|
# Render inline loading row when inline_row_loading is enabled and row has empty children
|
|
103
77
|
if inline_row_loading
|
|
@@ -129,21 +103,11 @@ module Playbook
|
|
|
129
103
|
advanced_table_content: data_content,
|
|
130
104
|
}
|
|
131
105
|
|
|
132
|
-
|
|
133
|
-
child_opts[:is_pinned_row] = is_pinned_row
|
|
134
|
-
child_opts[:pinned_index] = next_pinned_index if is_pinned_row
|
|
135
|
-
child_opts[:skip_pinned_ids] = skip_pinned_ids if skip_pinned_ids
|
|
136
|
-
|
|
137
|
-
child_output, next_pinned_index = render_row_and_children(child_row, column_definitions, current_depth + 1, is_first_child, new_ancestor_ids, top_parent_id, **child_opts)
|
|
138
|
-
output << child_output
|
|
106
|
+
output << render_row_and_children(child_row, column_definitions, current_depth + 1, is_first_child, new_ancestor_ids, top_parent_id, additional_classes: "toggle-content", table_data_attributes: child_data_attributes, immediate_parent_row_id: row[:id])
|
|
139
107
|
end
|
|
140
108
|
end
|
|
141
109
|
|
|
142
|
-
|
|
143
|
-
[output, next_pinned_index]
|
|
144
|
-
else
|
|
145
|
-
output
|
|
146
|
-
end
|
|
110
|
+
output
|
|
147
111
|
end
|
|
148
112
|
|
|
149
113
|
def classname
|
|
@@ -178,76 +142,6 @@ module Playbook
|
|
|
178
142
|
end
|
|
179
143
|
end
|
|
180
144
|
|
|
181
|
-
def row_id_for(row)
|
|
182
|
-
return nil if row.nil?
|
|
183
|
-
|
|
184
|
-
row[:id] || row["id"]
|
|
185
|
-
end
|
|
186
|
-
|
|
187
|
-
def pinned_top_ids
|
|
188
|
-
return [] if pinned_rows.nil? || !pinned_rows.respond_to?(:[])
|
|
189
|
-
|
|
190
|
-
top = pinned_rows["top"] || pinned_rows[:top]
|
|
191
|
-
Array(top).map(&:to_s)
|
|
192
|
-
end
|
|
193
|
-
|
|
194
|
-
def pinned_ids_set
|
|
195
|
-
return Set.new if pinned_top_ids.blank?
|
|
196
|
-
|
|
197
|
-
set = Set.new
|
|
198
|
-
pinned_root_rows.each do |root|
|
|
199
|
-
collect_row_and_descendant_ids(root[:row], set)
|
|
200
|
-
end
|
|
201
|
-
set
|
|
202
|
-
end
|
|
203
|
-
|
|
204
|
-
def collect_row_and_descendant_ids(row, set)
|
|
205
|
-
id = row_id_for(row)
|
|
206
|
-
set.add(id.to_s) if id
|
|
207
|
-
row_children_for(row)&.each { |child| collect_row_and_descendant_ids(child, set) }
|
|
208
|
-
end
|
|
209
|
-
|
|
210
|
-
def find_row_by_id(data, id, depth: 0, ancestor_ids: [], parent_row: nil)
|
|
211
|
-
id_str = id.to_s
|
|
212
|
-
Array(data).each do |row|
|
|
213
|
-
return { row: row, depth: depth, ancestor_ids: ancestor_ids, parent_row: parent_row } if row_id_for(row).to_s == id_str
|
|
214
|
-
|
|
215
|
-
found = find_row_by_id(row_children_for(row), id_str, depth: depth + 1, ancestor_ids: ancestor_ids + [row.object_id], parent_row: row)
|
|
216
|
-
return found if found
|
|
217
|
-
end
|
|
218
|
-
nil
|
|
219
|
-
end
|
|
220
|
-
|
|
221
|
-
def pinned_root_rows
|
|
222
|
-
return [] if pinned_top_ids.blank?
|
|
223
|
-
|
|
224
|
-
pinned_top_ids.filter_map { |id| find_row_by_id(table_data, id) }
|
|
225
|
-
end
|
|
226
|
-
|
|
227
|
-
def has_pinned_rows?
|
|
228
|
-
pinned_root_rows.any?
|
|
229
|
-
end
|
|
230
|
-
|
|
231
|
-
# Build inline style for sticky pinned row (matches React). Pass via html_options so the tr gets the attribute.
|
|
232
|
-
def build_pinned_row_style(pinned_index, background: "white")
|
|
233
|
-
header_offset = "var(--advanced-table-header-height, 44px)"
|
|
234
|
-
row_offset = "calc(2.5em * #{pinned_index})"
|
|
235
|
-
"position: sticky; top: calc(#{header_offset} + #{row_offset}); z-index: 3; background: #{background};"
|
|
236
|
-
end
|
|
237
|
-
|
|
238
|
-
def pinned_root_initial_data_attributes(root_info)
|
|
239
|
-
return {} if root_info[:depth].to_i.zero?
|
|
240
|
-
|
|
241
|
-
anc = root_info[:ancestor_ids] || []
|
|
242
|
-
content = (anc + [root_info[:row].object_id]).join("-")
|
|
243
|
-
{
|
|
244
|
-
top_parent: "#{table_id}_#{anc.first}",
|
|
245
|
-
row_depth: root_info[:depth],
|
|
246
|
-
row_parent: "#{table_id}_#{anc.last}",
|
|
247
|
-
advanced_table_content: content,
|
|
248
|
-
}
|
|
249
|
-
end
|
|
250
|
-
|
|
251
145
|
def cell_accessors_length(col_defs)
|
|
252
146
|
first_col = col_defs.first
|
|
253
147
|
return 0 unless first_col
|
|
@@ -35,28 +35,13 @@ module Playbook
|
|
|
35
35
|
default: ""
|
|
36
36
|
prop :inline_row_loading, type: Playbook::Props::Boolean,
|
|
37
37
|
default: false
|
|
38
|
-
prop :is_pinned_row, type: Playbook::Props::Boolean,
|
|
39
|
-
default: false
|
|
40
|
-
prop :pinned_index, type: Playbook::Props::Numeric,
|
|
41
|
-
default: nil
|
|
42
38
|
|
|
43
39
|
def data
|
|
44
40
|
Hash(prop(:data)).merge(table_data_attributes)
|
|
45
41
|
end
|
|
46
42
|
|
|
47
43
|
def classname
|
|
48
|
-
|
|
49
|
-
classes << "pinned-row" if is_pinned_row
|
|
50
|
-
generate_classname(*classes, separator: " ")
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def pinned_row_style
|
|
54
|
-
return nil unless is_pinned_row && pinned_index.is_a?(Numeric)
|
|
55
|
-
|
|
56
|
-
header_offset = "var(--advanced-table-header-height, 40px)"
|
|
57
|
-
row_offset = "calc(2.5em * #{pinned_index})"
|
|
58
|
-
bg = row_styling.find { |style| style[:row_id].to_s == row_id.to_s }&.[](:background_color) || "white"
|
|
59
|
-
"position: sticky; top: calc(#{header_offset} + #{row_offset}); z-index: 3; background: #{bg};"
|
|
44
|
+
generate_classname("pb_table_tr", "pb-bg-row-white", subrow_depth_classname, separator: " ")
|
|
60
45
|
end
|
|
61
46
|
|
|
62
47
|
def td_classname(column, index)
|
|
@@ -19,27 +19,13 @@ module Playbook
|
|
|
19
19
|
prop :responsive, type: Playbook::Props::Enum,
|
|
20
20
|
values: %w[none scroll],
|
|
21
21
|
default: "scroll"
|
|
22
|
-
prop :is_pinned_row, type: Playbook::Props::Boolean,
|
|
23
|
-
default: false
|
|
24
|
-
prop :pinned_index, type: Playbook::Props::Numeric,
|
|
25
|
-
default: nil
|
|
26
22
|
|
|
27
23
|
def data
|
|
28
24
|
Hash(prop(:data)).merge(subrow_data_attributes)
|
|
29
25
|
end
|
|
30
26
|
|
|
31
27
|
def classname
|
|
32
|
-
|
|
33
|
-
classes << "pinned-row" if is_pinned_row
|
|
34
|
-
generate_classname(*classes, separator: " ")
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def pinned_row_style
|
|
38
|
-
return nil unless is_pinned_row && pinned_index.is_a?(Numeric)
|
|
39
|
-
|
|
40
|
-
header_offset = "var(--advanced-table-header-height, 40px)"
|
|
41
|
-
row_offset = "calc(2.5em * #{pinned_index})"
|
|
42
|
-
"position: sticky; top: calc(#{header_offset} + #{row_offset}); z-index: 3; background: var(--pb_table_sticky_bg, #f5f5f5);"
|
|
28
|
+
generate_classname("pb_table_tr", "bg-silver", "pb_subrow_header", subrow_depth_classname, separator: " ")
|
|
43
29
|
end
|
|
44
30
|
|
|
45
31
|
def td_classname(index)
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
.pb_body_kit_error_neutral,
|
|
31
31
|
.pb_body_kit_error_positive,
|
|
32
32
|
.pb_body_kit_error_negative {
|
|
33
|
-
@include pb_body($
|
|
33
|
+
@include pb_body($text_default_color);
|
|
34
34
|
|
|
35
35
|
b,
|
|
36
36
|
strong {
|
|
@@ -38,9 +38,9 @@
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
a {
|
|
41
|
-
color: $
|
|
41
|
+
color: $text_link;
|
|
42
42
|
&:hover {
|
|
43
|
-
color: $
|
|
43
|
+
color: $text_default_color;
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
|
|
@@ -110,7 +110,7 @@
|
|
|
110
110
|
@include pb_body_dark();
|
|
111
111
|
|
|
112
112
|
a {
|
|
113
|
-
color: $
|
|
113
|
+
color: $text_link_dark;
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
116
|
|
|
@@ -3,38 +3,38 @@
|
|
|
3
3
|
@import "../tokens/typography";
|
|
4
4
|
|
|
5
5
|
$pb_body_colors: (
|
|
6
|
-
default: $
|
|
7
|
-
light: $
|
|
8
|
-
lighter: $
|
|
9
|
-
link: $
|
|
10
|
-
error: $
|
|
11
|
-
success: $
|
|
6
|
+
default: $text_default_color,
|
|
7
|
+
light: $text_light,
|
|
8
|
+
lighter: $text_lighter,
|
|
9
|
+
link: $text_link,
|
|
10
|
+
error: $text_error,
|
|
11
|
+
success: $text_success,
|
|
12
12
|
);
|
|
13
13
|
|
|
14
14
|
$pb_dark_body_colors: (
|
|
15
|
-
default: $
|
|
16
|
-
light: $
|
|
17
|
-
lighter: $
|
|
18
|
-
link: $
|
|
19
|
-
error: $
|
|
20
|
-
success: $
|
|
15
|
+
default: $text_default_dark,
|
|
16
|
+
light: $text_light_dark,
|
|
17
|
+
lighter: $text_lighter_dark,
|
|
18
|
+
link: $text_link_dark,
|
|
19
|
+
error: $text_error_dark,
|
|
20
|
+
success: $text_success_dark,
|
|
21
21
|
);
|
|
22
22
|
|
|
23
23
|
// Order is important here!
|
|
24
24
|
$pb_body_status: (
|
|
25
|
-
default: $
|
|
26
|
-
negative: $
|
|
27
|
-
dark_error: $
|
|
28
|
-
positive: $
|
|
25
|
+
default: $text_default_color,
|
|
26
|
+
negative: $text_error,
|
|
27
|
+
dark_error: $text_error_dark,
|
|
28
|
+
positive: $text_success,
|
|
29
29
|
);
|
|
30
30
|
|
|
31
31
|
$pb_dark_body_status: (
|
|
32
|
-
default: $
|
|
33
|
-
negative: $
|
|
34
|
-
positive: $
|
|
32
|
+
default: $text_default_dark,
|
|
33
|
+
negative: $text_error_dark,
|
|
34
|
+
positive: $text_success_dark,
|
|
35
35
|
);
|
|
36
36
|
|
|
37
|
-
@mixin pb_body($color: $
|
|
37
|
+
@mixin pb_body($color: $text_default_color) {
|
|
38
38
|
line-height: $lh_tight;
|
|
39
39
|
color: $color;
|
|
40
40
|
font-size: $text_default;
|
|
@@ -44,34 +44,34 @@ $pb_dark_body_status: (
|
|
|
44
44
|
|
|
45
45
|
// Colors ======================
|
|
46
46
|
@mixin pb_body_light {
|
|
47
|
-
@include pb_body($
|
|
47
|
+
@include pb_body($text_light);
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
@mixin pb_body_lighter {
|
|
51
|
-
@include pb_body($
|
|
51
|
+
@include pb_body($text_lighter);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
@mixin pb_body_dark {
|
|
55
|
-
@include pb_body($
|
|
55
|
+
@include pb_body($text_default_dark);
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
@mixin pb_body_light_dark {
|
|
59
|
-
@include pb_body($
|
|
59
|
+
@include pb_body($text_light_dark);
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
@mixin pb_body_lighter_dark {
|
|
63
|
-
@include pb_body($
|
|
63
|
+
@include pb_body($text_lighter_dark);
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
// Statuses =====================
|
|
67
67
|
@mixin pb_body_negative {
|
|
68
|
-
@include pb_body($
|
|
68
|
+
@include pb_body($text_error);
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
@mixin pb_body_dark_error {
|
|
72
|
-
@include pb_body($
|
|
72
|
+
@include pb_body($text_error_dark);
|
|
73
73
|
}
|
|
74
74
|
|
|
75
75
|
@mixin pb_body_positive {
|
|
76
|
-
@include pb_body($
|
|
76
|
+
@include pb_body($text_success);
|
|
77
77
|
}
|
|
@@ -2,33 +2,33 @@
|
|
|
2
2
|
@import "../tokens/typography";
|
|
3
3
|
|
|
4
4
|
$pb_caption_colors: (
|
|
5
|
-
default: $
|
|
6
|
-
light: $
|
|
7
|
-
link: $
|
|
8
|
-
lighter: $
|
|
9
|
-
success: $
|
|
10
|
-
error: $
|
|
5
|
+
default: $text_default_color,
|
|
6
|
+
light: $text_light,
|
|
7
|
+
link: $text_link,
|
|
8
|
+
lighter: $text_lighter,
|
|
9
|
+
success: $text_success,
|
|
10
|
+
error: $text_error,
|
|
11
11
|
);
|
|
12
12
|
|
|
13
13
|
$pb_dark_caption_colors: (
|
|
14
|
-
default: $
|
|
15
|
-
light: $
|
|
16
|
-
lighter: $
|
|
17
|
-
link: $
|
|
18
|
-
success: $
|
|
19
|
-
error: $
|
|
14
|
+
default: $text_default_dark,
|
|
15
|
+
light: $text_light_dark,
|
|
16
|
+
lighter: $text_lighter_dark,
|
|
17
|
+
link: $text_link_dark,
|
|
18
|
+
success: $text_success_dark,
|
|
19
|
+
error: $text_error_dark,
|
|
20
20
|
);
|
|
21
21
|
|
|
22
22
|
|
|
23
23
|
@mixin caption($font_size: $font_smaller, $font_weight: $bold) {
|
|
24
24
|
font-weight: $font_weight;
|
|
25
|
-
color: $
|
|
25
|
+
color: $text_light;
|
|
26
26
|
text-transform: uppercase;
|
|
27
27
|
font-size: $font_size;
|
|
28
28
|
letter-spacing: $lspace_loosest;
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
@mixin caption_color($color: $
|
|
31
|
+
@mixin caption_color($color: $text_light) {
|
|
32
32
|
color: $color;
|
|
33
33
|
}
|
|
34
34
|
|
|
@@ -43,5 +43,5 @@ $pb_dark_caption_colors: (
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
@mixin caption_dark {
|
|
46
|
-
color: $
|
|
46
|
+
color: $text_light_dark;
|
|
47
47
|
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
<%= pb_rails("caption", props: { text: "
|
|
2
|
-
<%= pb_rails("caption", props: { text: "
|
|
3
|
-
<%= pb_rails("caption", props: { text: "
|
|
4
|
-
<%= pb_rails("caption", props: { text: "
|
|
1
|
+
<%= pb_rails("caption", props: { text: "Caption light" }) %>
|
|
2
|
+
<%= pb_rails("caption", props: { text: "Caption default", color: "default" }) %>
|
|
3
|
+
<%= pb_rails("caption", props: { text: "Caption lighter", color: "lighter" }) %>
|
|
4
|
+
<%= pb_rails("caption", props: { text: "Caption success", color: "success" }) %>
|
|
5
|
+
<%= pb_rails("caption", props: { text: "Caption error", color: "error" }) %>
|
|
6
|
+
<%= pb_rails("caption", props: { text: "Caption link", color: "link" }) %>
|