playbook_ui 15.3.0.pre.alpha.PLAY2596datestackedcurrentyear12149 → 15.3.0.pre.alpha.PLAY2601advancedtablecustomcellmultiheaderrails12030
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/Components/RegularTableView.tsx +1 -2
- data/app/pb_kits/playbook/pb_advanced_table/Utilities/RowUtils.ts +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +4 -4
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +5 -68
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_background_control_rails.html.erb +0 -4
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_background_control_rails.md +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling.jsx +1 -3
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling.md +0 -2
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_column_headers.jsx +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_rails.html.erb +0 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_rails.md +0 -2
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_padding_control.jsx +1 -9
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_padding_control.md +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/flat_advanced_table.js +2 -2
- data/app/pb_kits/playbook/pb_advanced_table/index.js +7 -7
- data/app/pb_kits/playbook/pb_advanced_table/scss_partials/advanced_table_sticky_mixin.scss +2 -2
- data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +3 -32
- data/app/pb_kits/playbook/pb_background/background.html.erb +2 -10
- data/app/pb_kits/playbook/pb_badge/_badge.tsx +1 -4
- data/app/pb_kits/playbook/pb_badge/badge.test.js +0 -13
- data/app/pb_kits/playbook/pb_currency/_currency.tsx +7 -20
- data/app/pb_kits/playbook/pb_currency/currency.rb +8 -35
- data/app/pb_kits/playbook/pb_currency/currency.test.js +0 -47
- data/app/pb_kits/playbook/pb_currency/docs/_currency_variants.html.erb +1 -1
- data/app/pb_kits/playbook/pb_currency/docs/_currency_variants.jsx +1 -1
- data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.ts +4 -16
- data/app/pb_kits/playbook/pb_date_picker/docs/example.yml +1 -2
- data/app/pb_kits/playbook/pb_date_picker/docs/index.js +1 -2
- data/app/pb_kits/playbook/pb_date_stacked/_date_stacked.tsx +4 -6
- data/app/pb_kits/playbook/pb_date_stacked/date_stacked.html.erb +3 -2
- data/app/pb_kits/playbook/pb_date_stacked/date_stacked.rb +5 -11
- data/app/pb_kits/playbook/pb_date_stacked/date_stacked.test.js +9 -26
- data/app/pb_kits/playbook/pb_date_stacked/docs/_description.md +1 -1
- data/app/pb_kits/playbook/pb_date_stacked/docs/example.yml +0 -2
- data/app/pb_kits/playbook/pb_date_stacked/docs/index.js +0 -1
- data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +0 -1
- data/app/pb_kits/playbook/pb_dropdown/_dropdown.tsx +6 -111
- data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +0 -5
- data/app/pb_kits/playbook/pb_dropdown/docs/index.js +1 -5
- data/app/pb_kits/playbook/pb_dropdown/dropdown.test.jsx +2 -148
- data/app/pb_kits/playbook/pb_dropdown/index.js +1 -1
- data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_auto_close.html.erb +1 -15
- data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_multi_line.html.erb +8 -9
- data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_positions.html.erb +10 -11
- data/app/pb_kits/playbook/pb_form/pb_form_validation.js +11 -44
- data/app/pb_kits/playbook/pb_form_pill/_form_pill.tsx +1 -1
- data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.tsx +17 -110
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +0 -7
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.test.jsx +1 -64
- data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.tsx +1 -33
- data/dist/chunks/{_line_graph-C-AuMGN2.js → _line_graph-CqE0-dq5.js} +1 -1
- data/dist/chunks/_typeahead-3ZAbZUqU.js +6 -0
- data/dist/chunks/_weekday_stacked-BFB3mjtE.js +37 -0
- data/dist/chunks/{lib-BXBHAZMY.js → lib-CGxXTQ75.js} +1 -1
- data/dist/chunks/pb_form_validation-DebqlUKZ.js +1 -0
- data/dist/chunks/vendor.js +1 -1
- 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 +7 -22
- data/app/pb_kits/playbook/pb_currency/docs/_currency_variants.md +0 -1
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_and_dropdown_range.jsx +0 -38
- data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_and_dropdown_range.md +0 -14
- data/app/pb_kits/playbook/pb_date_stacked/docs/_date_stacked_current_year.html.erb +0 -12
- data/app/pb_kits/playbook/pb_date_stacked/docs/_date_stacked_current_year.jsx +0 -27
- data/app/pb_kits/playbook/pb_date_stacked/docs/_date_stacked_current_year.md +0 -1
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick.jsx +0 -18
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick.md +0 -4
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_default_dates.jsx +0 -18
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_default_dates.md +0 -1
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_range_end.jsx +0 -19
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_range_end.md +0 -1
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_with_date_pickers.jsx +0 -38
- data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_quickpick_with_date_pickers.md +0 -14
- data/app/pb_kits/playbook/pb_dropdown/quickpick/index.ts +0 -60
- data/dist/chunks/_typeahead--38pnHwS.js +0 -6
- data/dist/chunks/_weekday_stacked-onVWU89T.js +0 -37
- data/dist/chunks/pb_form_validation-BNfSnIUF.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: 71c946c57721add9d100ccfbec820fa90be3f3c94be0afdf39695628deca73e9
|
|
4
|
+
data.tar.gz: 7522b3287f188f339d1a6b2505a536844d499ae958cc7c0229b8ced157560d93
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 020af161b8745bb423001fc445750e262af8e58755f92a780080190387dcf99cbb27d8bea2c5993684a652ef19929de83f590131bc26027bee3d156f67af0cd6
|
|
7
|
+
data.tar.gz: 334c51dd3a74487207f3b8a7c74c61738245c232239f0dc5c10da4d3f03b9a42042c6a572ab2d608e3716856783f4245edf67368de6efdc5e682f66068ac9c44
|
|
@@ -66,7 +66,6 @@ const TableCellRenderer = ({
|
|
|
66
66
|
// Find the “owning” colDefinition by accessor. Needed for multi column logic
|
|
67
67
|
const colDef = findColumnDefByAccessor(columnDefinitions ?? [], column.id)
|
|
68
68
|
const cellAlignment = colDef?.columnStyling?.cellAlignment ?? "right"
|
|
69
|
-
const cellFontColor = colDef?.columnStyling?.fontColor
|
|
70
69
|
const paddingValue = colDef?.columnStyling?.cellPadding ?? customRowStyle?.cellPadding
|
|
71
70
|
const paddingClass = paddingValue ? `p_${paddingValue}` : undefined
|
|
72
71
|
|
|
@@ -89,7 +88,7 @@ const TableCellRenderer = ({
|
|
|
89
88
|
: `${column.getStart("left")}px`
|
|
90
89
|
: undefined,
|
|
91
90
|
backgroundColor: i === 0 && customRowStyle?.backgroundColor,
|
|
92
|
-
color:
|
|
91
|
+
color: customRowStyle?.fontColor,
|
|
93
92
|
}}
|
|
94
93
|
>
|
|
95
94
|
{collapsibleTrail && i === 0 && row.depth > 0 && renderCollapsibleTrail(row.depth)}
|
|
@@ -17,7 +17,7 @@ export const getRowColorClass = (
|
|
|
17
17
|
(inlineRowLoading && (rowHasNoChildren || row.getCanExpand()))
|
|
18
18
|
);
|
|
19
19
|
|
|
20
|
-
return row.getIsSelected() ? "bg-row-selection" : shouldShowExpandedBackground ? "bg-silver" : "
|
|
20
|
+
return row.getIsSelected() ? "bg-row-selection" : shouldShowExpandedBackground ? "bg-silver" : "bg-white";
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
/**
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
background-color: lighten($silver, $opacity_7);
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
-
.
|
|
54
|
+
.bg-white {
|
|
55
55
|
background-color: $white;
|
|
56
56
|
}
|
|
57
57
|
|
|
@@ -278,7 +278,7 @@
|
|
|
278
278
|
}
|
|
279
279
|
}
|
|
280
280
|
|
|
281
|
-
&.
|
|
281
|
+
&.bg-white {
|
|
282
282
|
td:first-child {
|
|
283
283
|
background-color: $white;
|
|
284
284
|
}
|
|
@@ -756,7 +756,7 @@
|
|
|
756
756
|
border-bottom-color: $border_dark !important;
|
|
757
757
|
}
|
|
758
758
|
|
|
759
|
-
.
|
|
759
|
+
.bg-white {
|
|
760
760
|
background: $bg_dark_card;
|
|
761
761
|
}
|
|
762
762
|
|
|
@@ -766,7 +766,7 @@
|
|
|
766
766
|
|
|
767
767
|
// Dark mode virtualized rows
|
|
768
768
|
.virtualized-table-row {
|
|
769
|
-
&.
|
|
769
|
+
&.bg-white {
|
|
770
770
|
background: $bg_dark_card !important;
|
|
771
771
|
|
|
772
772
|
td:first-child {
|
|
@@ -308,10 +308,10 @@ test("Row toggle button exists and toggles subrows open and closed", () => {
|
|
|
308
308
|
const kit = screen.getByTestId(testId)
|
|
309
309
|
const rowButton = kit.querySelector(".gray-icon.expand-toggle-icon")
|
|
310
310
|
expect(rowButton).toBeInTheDocument()
|
|
311
|
-
const subRow1 = kit.querySelector(".
|
|
311
|
+
const subRow1 = kit.querySelector(".bg-white.depth-sub-row-1")
|
|
312
312
|
expect(subRow1).not.toBeInTheDocument()
|
|
313
313
|
rowButton.click()
|
|
314
|
-
const subRow = kit.querySelector(".
|
|
314
|
+
const subRow = kit.querySelector(".bg-white.depth-sub-row-1")
|
|
315
315
|
expect(subRow).toBeInTheDocument()
|
|
316
316
|
})
|
|
317
317
|
|
|
@@ -328,13 +328,13 @@ test("toggleExpansionAll button exists and toggles subrows open and closed", asy
|
|
|
328
328
|
const toggleButton = kit.querySelector(".gray-icon.toggle-all-icon");
|
|
329
329
|
expect(toggleButton).toBeInTheDocument();
|
|
330
330
|
|
|
331
|
-
const subRow1 = kit.querySelector(".
|
|
331
|
+
const subRow1 = kit.querySelector(".bg-white.depth-sub-row-1");
|
|
332
332
|
expect(subRow1).not.toBeInTheDocument();
|
|
333
333
|
|
|
334
334
|
toggleButton.click();
|
|
335
335
|
|
|
336
336
|
await waitFor(() => {
|
|
337
|
-
const subRow = kit.querySelector(".
|
|
337
|
+
const subRow = kit.querySelector(".bg-white.depth-sub-row-1");
|
|
338
338
|
expect(subRow).toBeInTheDocument();
|
|
339
339
|
})
|
|
340
340
|
})
|
|
@@ -385,7 +385,7 @@ test("expandControl prop works as expected", () => {
|
|
|
385
385
|
render (<AdvancedTableExpandControl/>)
|
|
386
386
|
|
|
387
387
|
const kit = screen.getByTestId(testId)
|
|
388
|
-
const subRow = kit.querySelector(".
|
|
388
|
+
const subRow = kit.querySelector(".bg-white.depth-sub-row-1")
|
|
389
389
|
expect(subRow).toBeInTheDocument()
|
|
390
390
|
})
|
|
391
391
|
|
|
@@ -740,69 +740,6 @@ test("columnStyling.cellPadding sets cell padding", () => {
|
|
|
740
740
|
expect(firstEnrollmentCell).toHaveClass('p_none')
|
|
741
741
|
});
|
|
742
742
|
|
|
743
|
-
test("columnStyling.fontColor sets cell font color", () => {
|
|
744
|
-
const styledColumnDefs = [
|
|
745
|
-
{
|
|
746
|
-
accessor: "year",
|
|
747
|
-
label: "Year",
|
|
748
|
-
cellAccessors: ["quarter", "month", "day"],
|
|
749
|
-
},
|
|
750
|
-
{
|
|
751
|
-
accessor: "newEnrollments",
|
|
752
|
-
label: "New Enrollments",
|
|
753
|
-
columnStyling: { fontColor: colors.category_1 },
|
|
754
|
-
},
|
|
755
|
-
{
|
|
756
|
-
accessor: "scheduledMeetings",
|
|
757
|
-
label: "Scheduled Meetings",
|
|
758
|
-
},
|
|
759
|
-
];
|
|
760
|
-
|
|
761
|
-
render(
|
|
762
|
-
<AdvancedTable
|
|
763
|
-
columnDefinitions={styledColumnDefs}
|
|
764
|
-
data={{ testid: testId }}
|
|
765
|
-
tableData={MOCK_DATA}
|
|
766
|
-
/>
|
|
767
|
-
);
|
|
768
|
-
|
|
769
|
-
const firstEnrollmentCell = screen.getAllByText("20")[0].closest("td");
|
|
770
|
-
expect(firstEnrollmentCell).toHaveStyle({ color: colors.category_1 });
|
|
771
|
-
});
|
|
772
|
-
|
|
773
|
-
test("columnStyling.fontColor works with background color", () => {
|
|
774
|
-
const styledColumnDefs = [
|
|
775
|
-
{
|
|
776
|
-
accessor: "year",
|
|
777
|
-
label: "Year",
|
|
778
|
-
cellAccessors: ["quarter", "month", "day"],
|
|
779
|
-
},
|
|
780
|
-
{
|
|
781
|
-
accessor: "newEnrollments",
|
|
782
|
-
label: "New Enrollments",
|
|
783
|
-
columnStyling: {
|
|
784
|
-
cellBackgroundColor: (row) => row.newEnrollments > 20 ? "success_secondary" : "warning_secondary",
|
|
785
|
-
fontColor: colors.white
|
|
786
|
-
},
|
|
787
|
-
},
|
|
788
|
-
{
|
|
789
|
-
accessor: "scheduledMeetings",
|
|
790
|
-
label: "Scheduled Meetings",
|
|
791
|
-
},
|
|
792
|
-
];
|
|
793
|
-
|
|
794
|
-
render(
|
|
795
|
-
<AdvancedTable
|
|
796
|
-
columnDefinitions={styledColumnDefs}
|
|
797
|
-
data={{ testid: testId }}
|
|
798
|
-
tableData={MOCK_DATA}
|
|
799
|
-
/>
|
|
800
|
-
);
|
|
801
|
-
|
|
802
|
-
const firstEnrollmentCell = screen.getAllByText("20")[0].closest("td");
|
|
803
|
-
expect(firstEnrollmentCell).toHaveStyle({ color: colors.white });
|
|
804
|
-
});
|
|
805
|
-
|
|
806
743
|
test("renders virtualized table rows and header", () => {
|
|
807
744
|
render(
|
|
808
745
|
<AdvancedTable
|
data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_background_control_rails.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
`column_styling` can also be used to control the background color on all cells in a given column via the use of the `cell_background_color` key/value pair. Use `cell_background_color` to achieve custom background colors for individual cells as seen here.
|
|
1
|
+
`column_styling` can also be used to control the background color on all cells in a given column via the use of the `cell_background_color` key/value pair. Use `cell_background_color` to achieve custom background colors for individual cells as seen here.
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import React from "react"
|
|
2
|
-
import
|
|
2
|
+
import AdvancedTable from '../../pb_advanced_table/_advanced_table'
|
|
3
3
|
import MOCK_DATA from "./advanced_table_mock_data.json"
|
|
4
4
|
|
|
5
|
-
|
|
6
5
|
const AdvancedTableColumnStyling = (props) => {
|
|
7
6
|
const columnDefinitions = [
|
|
8
7
|
{
|
|
@@ -35,7 +34,6 @@ const AdvancedTableColumnStyling = (props) => {
|
|
|
35
34
|
{
|
|
36
35
|
accessor: "graduatedStudents",
|
|
37
36
|
label: "Graduated Students",
|
|
38
|
-
columnStyling:{fontColor: colors.data_8},
|
|
39
37
|
},
|
|
40
38
|
]
|
|
41
39
|
|
|
@@ -4,6 +4,4 @@ The `columnStyling` prop is an optional item that can be used within `columnDefi
|
|
|
4
4
|
|
|
5
5
|
2) `cellAlignment`: This will allow you to control alignment of content within all cells in the given column. This is set to right aligned by default. you can set this to `left`, `right` or `center`.
|
|
6
6
|
|
|
7
|
-
3) `fontColor`: This will allow you to control the font color for a given column.
|
|
8
|
-
|
|
9
7
|
`columnStyling` can be used within the columnDefinition of all the columns or some of them, as shown. Each column has its own individual control in this way.
|
|
@@ -4,6 +4,4 @@ The `column_styling` prop is an optional item that can be used within `column_de
|
|
|
4
4
|
|
|
5
5
|
2) `cell_alignment`: This will allow you to control alignment of content within all cells in the given column. This is set to right aligned by default. you can set this to `left`, `right` or `center`.
|
|
6
6
|
|
|
7
|
-
3) `font_color`: This will allow you to control the font color for a given column.
|
|
8
|
-
|
|
9
7
|
`column_styling` can be used within the column_definition of all the columns or some of them, as shown. Each column has its own individual control in this way.
|
|
@@ -22,6 +22,7 @@ const AdvancedTablePaddingControl = (props) => {
|
|
|
22
22
|
{value}
|
|
23
23
|
</Background>
|
|
24
24
|
),
|
|
25
|
+
|
|
25
26
|
},
|
|
26
27
|
{
|
|
27
28
|
accessor: "scheduledMeetings",
|
|
@@ -38,15 +39,6 @@ const AdvancedTablePaddingControl = (props) => {
|
|
|
38
39
|
{
|
|
39
40
|
accessor: "classCompletionRate",
|
|
40
41
|
label: "Class Completion Rate",
|
|
41
|
-
columnStyling:{cellPadding: "none", fontColor: "white"},
|
|
42
|
-
customRenderer: (row, value) => (
|
|
43
|
-
<Background
|
|
44
|
-
backgroundColor={"category_1"}
|
|
45
|
-
padding="xs"
|
|
46
|
-
>
|
|
47
|
-
{value}
|
|
48
|
-
</Background>
|
|
49
|
-
),
|
|
50
42
|
},
|
|
51
43
|
{
|
|
52
44
|
accessor: "graduatedStudents",
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
`columnStyling` can also be used to control padding on all cells in a given column via the use of the `cellPadding` key/value pair. `cellPadding` lets you use 'xxs', 'xs', 'sm', 'md', 'lg', 'xl' and 'none'.
|
|
2
2
|
|
|
3
|
-
This control can be used in conjunction with the `customRenderer` item within each columnDefinition to achieve custom background colors for individual cells as seen here.
|
|
3
|
+
This control can be used in conjunction with the `customRenderer` item within each columnDefinition to achieve custom background colors for individual cells as seen here.
|
|
@@ -51,7 +51,7 @@ export default class PbFlatAdvancedTable extends PbEnhancedElement {
|
|
|
51
51
|
|
|
52
52
|
const tr = rowCb.closest("tr");
|
|
53
53
|
tr?.classList.toggle("bg-row-selection", rowCb.checked);
|
|
54
|
-
tr?.classList.toggle("
|
|
54
|
+
tr?.classList.toggle("bg-white", !rowCb.checked);
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
if (allCb) {
|
|
@@ -62,7 +62,7 @@ export default class PbFlatAdvancedTable extends PbEnhancedElement {
|
|
|
62
62
|
cb.checked = checked;
|
|
63
63
|
const tr = cb.closest("tr");
|
|
64
64
|
tr?.classList.toggle("bg-row-selection", checked);
|
|
65
|
-
tr?.classList.toggle("
|
|
65
|
+
tr?.classList.toggle("bg-white", !checked);
|
|
66
66
|
const id = cb.id;
|
|
67
67
|
if (checked) this.selectedRows.add(id);
|
|
68
68
|
else this.selectedRows.delete(id);
|
|
@@ -76,7 +76,7 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
|
76
76
|
// Only apply styling if the checkbox is inside a table row
|
|
77
77
|
if (rowEl) {
|
|
78
78
|
rowEl.classList.add("bg-row-selection");
|
|
79
|
-
rowEl.classList.remove("
|
|
79
|
+
rowEl.classList.remove("bg-white", "bg-silver");
|
|
80
80
|
}
|
|
81
81
|
} else {
|
|
82
82
|
// Only apply styling if the checkbox is inside a table row
|
|
@@ -85,9 +85,9 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
|
85
85
|
|
|
86
86
|
if (this.isRowExpanded(rowEl)) {
|
|
87
87
|
rowEl.classList.remove("bg-silver");
|
|
88
|
-
rowEl.classList.add("
|
|
88
|
+
rowEl.classList.add("bg-white");
|
|
89
89
|
} else {
|
|
90
|
-
rowEl.classList.remove("
|
|
90
|
+
rowEl.classList.remove("bg-white");
|
|
91
91
|
rowEl.classList.add("bg-silver");
|
|
92
92
|
}
|
|
93
93
|
}
|
|
@@ -120,7 +120,7 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
|
120
120
|
if (isChecked) {
|
|
121
121
|
PbAdvancedTable.selectedRows.add(rowId);
|
|
122
122
|
rowEl.classList.add("bg-row-selection");
|
|
123
|
-
rowEl.classList.remove("
|
|
123
|
+
rowEl.classList.remove("bg-white", "bg-silver");
|
|
124
124
|
} else {
|
|
125
125
|
PbAdvancedTable.selectedRows.delete(rowId);
|
|
126
126
|
}
|
|
@@ -130,9 +130,9 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
|
130
130
|
|
|
131
131
|
if (this.isRowExpanded(rowEl)) {
|
|
132
132
|
rowEl.classList.remove("bg-silver");
|
|
133
|
-
rowEl.classList.add("
|
|
133
|
+
rowEl.classList.add("bg-white");
|
|
134
134
|
} else {
|
|
135
|
-
rowEl.classList.remove("
|
|
135
|
+
rowEl.classList.remove("bg-white");
|
|
136
136
|
rowEl.classList.add("bg-silver");
|
|
137
137
|
}
|
|
138
138
|
}
|
|
@@ -407,7 +407,7 @@ export default class PbAdvancedTable extends PbEnhancedElement {
|
|
|
407
407
|
const row = this.element.closest("tr");
|
|
408
408
|
if (row) {
|
|
409
409
|
row.classList.toggle("bg-silver", !isVisible);
|
|
410
|
-
row.classList.toggle("
|
|
410
|
+
row.classList.toggle("bg-white", isVisible);
|
|
411
411
|
}
|
|
412
412
|
|
|
413
413
|
this.addBorderRadiusOnLastVisibleRow();
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
.
|
|
55
|
+
.bg-white {
|
|
56
56
|
td:first-child,
|
|
57
57
|
.sticky-left {
|
|
58
58
|
background-color: $bg-main;
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
&.bg-silver td:first-child {
|
|
64
64
|
background-color: $bg-secondary;
|
|
65
65
|
}
|
|
66
|
-
&.
|
|
66
|
+
&.bg-white td:first-child {
|
|
67
67
|
background-color: $bg-main;
|
|
68
68
|
}
|
|
69
69
|
&.bg-row-selection td:first-child {
|
|
@@ -39,7 +39,7 @@ module Playbook
|
|
|
39
39
|
end
|
|
40
40
|
|
|
41
41
|
def classname
|
|
42
|
-
generate_classname("pb_table_tr", "
|
|
42
|
+
generate_classname("pb_table_tr", "bg-white", subrow_depth_classname, separator: " ")
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
def td_classname(column, index)
|
|
@@ -79,44 +79,15 @@ module Playbook
|
|
|
79
79
|
cell_background_color(column).present?
|
|
80
80
|
end
|
|
81
81
|
|
|
82
|
-
def cell_font_color(column)
|
|
83
|
-
return nil unless column[:accessor].present?
|
|
84
|
-
|
|
85
|
-
orig_def = find_column_def_by_accessor(column_definitions, column[:accessor])
|
|
86
|
-
if orig_def && orig_def[:column_styling].is_a?(Hash) && orig_def[:column_styling][:font_color].present?
|
|
87
|
-
font_color = orig_def[:column_styling][:font_color]
|
|
88
|
-
if font_color.respond_to?(:call)
|
|
89
|
-
font_color.call(row)
|
|
90
|
-
else
|
|
91
|
-
font_color
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
end
|
|
95
|
-
|
|
96
82
|
# Uses a regular table/table_cell component if there is no custom background color; if there is a cell_background_color uses a background component with tag "td"
|
|
97
83
|
def cell_component_info(column, index, bg_color, font_color)
|
|
98
|
-
column_font_color = cell_font_color(column)
|
|
99
|
-
effective_font_color = column_font_color || font_color
|
|
100
|
-
|
|
101
84
|
if has_custom_background_color?(column)
|
|
102
85
|
custom_bg_color = cell_background_color(column)
|
|
103
86
|
component_name = "background"
|
|
104
|
-
component_props = {
|
|
105
|
-
background_color: custom_bg_color,
|
|
106
|
-
tag: "td",
|
|
107
|
-
classname: td_classname(column, index),
|
|
108
|
-
}
|
|
109
|
-
component_props[:html_options] = { style: { color: effective_font_color } } if effective_font_color.present?
|
|
87
|
+
component_props = { background_color: custom_bg_color, tag: "td", classname: td_classname(column, index) }
|
|
110
88
|
else
|
|
111
89
|
component_name = "table/table_cell"
|
|
112
|
-
|
|
113
|
-
style_hash[:color] = effective_font_color if effective_font_color.present?
|
|
114
|
-
component_props = {
|
|
115
|
-
html_options: {
|
|
116
|
-
style: style_hash,
|
|
117
|
-
},
|
|
118
|
-
classname: td_classname(column, index),
|
|
119
|
-
}
|
|
90
|
+
component_props = { html_options: { style: { "background-color": bg_color, color: font_color } }, classname: td_classname(column, index) }
|
|
120
91
|
end
|
|
121
92
|
|
|
122
93
|
{ name: component_name, props: component_props }
|
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
<%
|
|
2
|
-
html_options_style = ""
|
|
3
|
-
if object.html_options[:style].is_a?(Hash)
|
|
4
|
-
html_options_style = object.html_options[:style].map { |k, v| "#{k.to_s.tr('_', '-')}: #{v}" }.join("; ")
|
|
5
|
-
elsif object.html_options[:style].is_a?(String)
|
|
6
|
-
html_options_style = object.html_options[:style]
|
|
7
|
-
end
|
|
8
|
-
%>
|
|
9
1
|
<% if object.image_url.present? %>
|
|
10
2
|
<%= pb_content_tag(object.tag,
|
|
11
3
|
style: "background-image: url('#{object.image_url}');
|
|
@@ -17,8 +9,8 @@
|
|
|
17
9
|
<% end %>
|
|
18
10
|
<% else %>
|
|
19
11
|
<%= pb_content_tag(object.tag,
|
|
20
|
-
style:
|
|
12
|
+
style: object.custom_background_color
|
|
21
13
|
) do %>
|
|
22
14
|
<%= content.presence %>
|
|
23
15
|
<% end %>
|
|
24
|
-
<% end %>
|
|
16
|
+
<% end %>
|
|
@@ -20,12 +20,11 @@ type BadgeProps = {
|
|
|
20
20
|
onTouchEnd?: React.TouchEventHandler<HTMLSpanElement>,
|
|
21
21
|
},
|
|
22
22
|
data?: {[key: string]: string},
|
|
23
|
-
htmlOptions?: {[key: string]: string | number | boolean | (() => void)
|
|
23
|
+
htmlOptions?: {[key: string]: string | number | boolean | (() => void)},
|
|
24
24
|
id?: string,
|
|
25
25
|
removeIcon?: boolean,
|
|
26
26
|
removeOnClick?: React.MouseEventHandler<HTMLSpanElement>,
|
|
27
27
|
rounded?: boolean,
|
|
28
|
-
tabIndex?: number,
|
|
29
28
|
text?: string,
|
|
30
29
|
variant?: "error" | "info" | "neutral" | "notification" | "notificationError" | "primary" | "success" | "warning",
|
|
31
30
|
} & GlobalProps
|
|
@@ -40,7 +39,6 @@ const Badge = (props: BadgeProps): React.ReactElement => {
|
|
|
40
39
|
removeIcon = false,
|
|
41
40
|
removeOnClick,
|
|
42
41
|
rounded = false,
|
|
43
|
-
tabIndex,
|
|
44
42
|
text,
|
|
45
43
|
variant = 'neutral',
|
|
46
44
|
} = props
|
|
@@ -63,7 +61,6 @@ const Badge = (props: BadgeProps): React.ReactElement => {
|
|
|
63
61
|
{...htmlProps}
|
|
64
62
|
className={css}
|
|
65
63
|
id={id}
|
|
66
|
-
tabIndex={tabIndex}
|
|
67
64
|
>
|
|
68
65
|
<span>
|
|
69
66
|
{text}
|
|
@@ -112,16 +112,3 @@ test('displays notification variants', () => {
|
|
|
112
112
|
cleanup()
|
|
113
113
|
})
|
|
114
114
|
})
|
|
115
|
-
|
|
116
|
-
test('should allow tabIndex to be set', () => {
|
|
117
|
-
render(
|
|
118
|
-
<Badge
|
|
119
|
-
data={{ testid: testId }}
|
|
120
|
-
tabIndex={0}
|
|
121
|
-
text="+1"
|
|
122
|
-
/>
|
|
123
|
-
)
|
|
124
|
-
|
|
125
|
-
const kit = screen.getByTestId(testId)
|
|
126
|
-
expect(kit).toHaveAttribute('tabIndex', '0')
|
|
127
|
-
})
|
|
@@ -11,7 +11,7 @@ import Title from '../pb_title/_title'
|
|
|
11
11
|
type CurrencyProps = {
|
|
12
12
|
abbreviate?: boolean,
|
|
13
13
|
align?: 'center' | 'left' | 'right',
|
|
14
|
-
amount: string
|
|
14
|
+
amount: string,
|
|
15
15
|
aria?: {[key:string]:string},
|
|
16
16
|
className?: string,
|
|
17
17
|
dark?: boolean,
|
|
@@ -59,19 +59,6 @@ const Currency = (props: CurrencyProps): React.ReactElement => {
|
|
|
59
59
|
commaSeparator = false,
|
|
60
60
|
} = props
|
|
61
61
|
|
|
62
|
-
// Convert numeric input to string format
|
|
63
|
-
const convertAmount = (input: string | number): string => {
|
|
64
|
-
if (typeof input === 'number') {
|
|
65
|
-
if (input === 0 && !nullDisplay) {
|
|
66
|
-
return ""
|
|
67
|
-
}
|
|
68
|
-
return input.toFixed(2)
|
|
69
|
-
}
|
|
70
|
-
return input
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
const currencyAmount = convertAmount(amount)
|
|
74
|
-
|
|
75
62
|
const emphasizedClass = emphasized ? '' : '_deemphasized'
|
|
76
63
|
|
|
77
64
|
let variantClass
|
|
@@ -81,7 +68,7 @@ const Currency = (props: CurrencyProps): React.ReactElement => {
|
|
|
81
68
|
variantClass = '_bold'
|
|
82
69
|
}
|
|
83
70
|
|
|
84
|
-
const [whole, decimal = '00'] =
|
|
71
|
+
const [whole, decimal = '00'] = amount.split('.')
|
|
85
72
|
const ariaProps = buildAriaProps(aria)
|
|
86
73
|
const dataProps = buildDataProps(data)
|
|
87
74
|
const htmlProps = buildHtmlProps(htmlOptions)
|
|
@@ -105,19 +92,19 @@ const Currency = (props: CurrencyProps): React.ReactElement => {
|
|
|
105
92
|
return isAmount ? num.slice(0, -1) : isUnit ? num.slice(-1) : ''
|
|
106
93
|
}
|
|
107
94
|
|
|
108
|
-
const getMatchingDecimalAmount = decimals === "matching" ?
|
|
95
|
+
const getMatchingDecimalAmount = decimals === "matching" ? amount : whole
|
|
109
96
|
const getMatchingDecimalValue = decimals === "matching" ? '' : `.${decimal}`
|
|
110
97
|
|
|
111
98
|
const formatAmount = (amount: string) => {
|
|
112
99
|
if (!commaSeparator) return amount;
|
|
113
|
-
|
|
100
|
+
|
|
114
101
|
const [wholePart, decimalPart] = amount.split('.');
|
|
115
102
|
const formattedWhole = new Intl.NumberFormat('en-US').format(parseInt(wholePart));
|
|
116
103
|
return decimalPart ? `${formattedWhole}.${decimalPart}` : formattedWhole;
|
|
117
104
|
}
|
|
118
105
|
|
|
119
106
|
const swapNegative = size === "sm" && symbol !== ""
|
|
120
|
-
const handleNegative =
|
|
107
|
+
const handleNegative = amount.startsWith("-") && swapNegative ? "-" : ""
|
|
121
108
|
const getAbsoluteAmount = (amountString: string) => amountString.replace(/^-/,'')
|
|
122
109
|
const getAbbrOrFormatAmount = abbreviate ? getAbbreviatedValue('amount') : formatAmount(getMatchingDecimalAmount)
|
|
123
110
|
const getAmount = swapNegative ? getAbsoluteAmount(getAbbrOrFormatAmount) : getAbbrOrFormatAmount
|
|
@@ -165,7 +152,7 @@ const Currency = (props: CurrencyProps): React.ReactElement => {
|
|
|
165
152
|
>
|
|
166
153
|
{handleNegative}{symbol}
|
|
167
154
|
</Body>
|
|
168
|
-
|
|
155
|
+
|
|
169
156
|
<Title
|
|
170
157
|
className="pb_currency_value"
|
|
171
158
|
dark={dark}
|
|
@@ -173,7 +160,7 @@ const Currency = (props: CurrencyProps): React.ReactElement => {
|
|
|
173
160
|
>
|
|
174
161
|
{getAmount}
|
|
175
162
|
</Title>
|
|
176
|
-
|
|
163
|
+
|
|
177
164
|
<Body
|
|
178
165
|
className="unit"
|
|
179
166
|
color="light"
|
|
@@ -17,7 +17,8 @@ module Playbook
|
|
|
17
17
|
prop :symbol, type: Playbook::Props::String,
|
|
18
18
|
default: "$"
|
|
19
19
|
|
|
20
|
-
prop :amount,
|
|
20
|
+
prop :amount, type: Playbook::Props::String,
|
|
21
|
+
required: true
|
|
21
22
|
|
|
22
23
|
prop :unit, type: Playbook::Props::String,
|
|
23
24
|
required: false
|
|
@@ -91,7 +92,7 @@ module Playbook
|
|
|
91
92
|
end
|
|
92
93
|
|
|
93
94
|
def negative_sign
|
|
94
|
-
|
|
95
|
+
amount.starts_with?("-") && swap_negative ? "-" : ""
|
|
95
96
|
end
|
|
96
97
|
|
|
97
98
|
def body_props
|
|
@@ -116,32 +117,10 @@ module Playbook
|
|
|
116
117
|
end
|
|
117
118
|
end
|
|
118
119
|
|
|
119
|
-
def currency_amount
|
|
120
|
-
@currency_amount ||= convert_amount(amount)
|
|
121
|
-
end
|
|
122
|
-
|
|
123
120
|
private
|
|
124
121
|
|
|
125
|
-
# Convert numeric input to string format
|
|
126
|
-
def convert_amount(input)
|
|
127
|
-
if input.is_a?(Numeric)
|
|
128
|
-
if input.zero? && null_display.nil?
|
|
129
|
-
""
|
|
130
|
-
else
|
|
131
|
-
format("%.2f", input)
|
|
132
|
-
end
|
|
133
|
-
# Handle string representations of zero
|
|
134
|
-
elsif input.to_s.strip.match?(/^-?0+(\.0+)?$/) && null_display.nil?
|
|
135
|
-
""
|
|
136
|
-
else
|
|
137
|
-
input.to_s
|
|
138
|
-
end
|
|
139
|
-
end
|
|
140
|
-
|
|
141
122
|
def whole_value
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
value = currency_amount.split(".").first
|
|
123
|
+
value = amount.split(".").first
|
|
145
124
|
if comma_separator
|
|
146
125
|
number_with_delimiter(value.gsub(",", ""))
|
|
147
126
|
else
|
|
@@ -150,9 +129,7 @@ module Playbook
|
|
|
150
129
|
end
|
|
151
130
|
|
|
152
131
|
def decimal_value
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
currency_amount.split(".")[1] || "00"
|
|
132
|
+
amount.split(".")[1] || "00"
|
|
156
133
|
end
|
|
157
134
|
|
|
158
135
|
def units_element
|
|
@@ -170,9 +147,7 @@ module Playbook
|
|
|
170
147
|
end
|
|
171
148
|
|
|
172
149
|
def abbreviated_value(index = 0..-2)
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
value = currency_amount.split(".").first.gsub(",", "").to_i
|
|
150
|
+
value = amount.split(".").first.gsub(",", "").to_i
|
|
176
151
|
abbreviated_num = number_to_human(value, units: { thousand: "K", million: "M", billion: "B", trillion: "T" }).gsub(/\s+/, "")
|
|
177
152
|
abbreviated_num[index]
|
|
178
153
|
end
|
|
@@ -199,11 +174,9 @@ module Playbook
|
|
|
199
174
|
|
|
200
175
|
if decimals == "matching"
|
|
201
176
|
if comma_separator
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
number_with_delimiter(currency_amount.gsub(",", ""))
|
|
177
|
+
number_with_delimiter(amount.gsub(",", ""))
|
|
205
178
|
else
|
|
206
|
-
|
|
179
|
+
amount
|
|
207
180
|
end
|
|
208
181
|
else
|
|
209
182
|
whole_value
|