playbook_ui 14.13.0.pre.alpha.play1900progresspillwidth6122 → 14.13.0.pre.alpha.rails8compatible6228
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/_playbook.scss +0 -1
- data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +3 -0
- data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +6 -5
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +8 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_headers_custom_cell.jsx +75 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props.html.erb +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_rails.md +3 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_react.md +1 -1
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header.html.erb +33 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header_rails.md +3 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +2 -1
- data/app/pb_kits/playbook/pb_bar_graph/BarGraphStyles.scss +58 -0
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.jsx +64 -0
- data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.md +1 -0
- data/app/pb_kits/playbook/pb_bar_graph/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_bar_graph/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_checkbox/_checkbox.tsx +17 -8
- data/app/pb_kits/playbook/pb_checkbox/checkbox.test.js +16 -0
- data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_react_hook.jsx +69 -0
- data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_react_hook.md +1 -0
- data/app/pb_kits/playbook/pb_checkbox/docs/example.yml +2 -1
- data/app/pb_kits/playbook/pb_checkbox/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_overlay/_overlay.tsx +4 -0
- data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional.jsx +37 -0
- data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional_react.md +1 -0
- data/app/pb_kits/playbook/pb_overlay/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_overlay/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_overlay/subcomponents/_overlay_token.tsx +48 -10
- data/app/pb_kits/playbook/pb_progress_pills/progress_pills.html.erb +1 -6
- data/app/pb_kits/playbook/pb_progress_simple/progress_simple.html.erb +1 -5
- data/app/pb_kits/playbook/pb_progress_step/progress_step.html.erb +1 -5
- data/app/pb_kits/playbook/pb_progress_step/progress_step_item.html.erb +1 -5
- data/app/pb_kits/playbook/pb_radio/radio.html.erb +6 -11
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible.jsx +1 -1
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click.html.erb +51 -0
- data/app/pb_kits/playbook/pb_table/docs/_table_with_collapsible_with_custom_click_rails.md +2 -0
- data/app/pb_kits/playbook/pb_table/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_table/index.ts +41 -9
- data/app/pb_kits/playbook/pb_table/styles/_collapsible.scss +4 -0
- data/app/pb_kits/playbook/pb_table/table_row.html.erb +1 -0
- data/app/pb_kits/playbook/pb_table/table_row.rb +10 -1
- data/dist/chunks/{_typeahead-C_q1qAtC.js → _typeahead-PqkcDf1H.js} +3 -3
- data/dist/chunks/_weekday_stacked-C7J0S4f7.js +45 -0
- data/dist/chunks/{lib-WQEeEj3t.js → lib-D3us1bGD.js} +1 -1
- data/dist/chunks/{pb_form_validation-Cq64l4zn.js → pb_form_validation-BpihMSOQ.js} +1 -1
- data/dist/chunks/vendor.js +1 -1
- data/dist/menu.yml +0 -7
- data/dist/playbook-doc.js +1 -1
- data/dist/playbook-rails-react-bindings.js +1 -1
- data/dist/playbook-rails.js +1 -1
- data/dist/playbook.css +1 -1
- data/lib/playbook/version.rb +1 -1
- metadata +27 -25
- data/app/pb_kits/playbook/pb_avatar_action_button/_avatar_action_button.scss +0 -66
- data/app/pb_kits/playbook/pb_avatar_action_button/_avatar_action_button.tsx +0 -98
- data/app/pb_kits/playbook/pb_avatar_action_button/avatar_action_button.html.erb +0 -28
- data/app/pb_kits/playbook/pb_avatar_action_button/avatar_action_button.rb +0 -42
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_actions.html.erb +0 -19
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_actions.jsx +0 -26
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_default.html.erb +0 -10
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_default.jsx +0 -17
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_on_click.jsx +0 -19
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_onclick.html.erb +0 -16
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_placement.html.erb +0 -35
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_placement.jsx +0 -42
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/_avatar_action_button_tooltip.html.erb +0 -13
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/example.yml +0 -15
- data/app/pb_kits/playbook/pb_avatar_action_button/docs/index.js +0 -4
- data/app/pb_kits/playbook/pb_avatar_action_button/pb_avatar_action_button.test.js +0 -31
- data/dist/chunks/_weekday_stacked-CB-T-41Z.js +0 -45
- /data/app/pb_kits/playbook/pb_table/docs/{_table_with_collapsible_with_custom_click.md → _table_with_collapsible_with_custom_click_react.md} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cc7c8ebd8119324510cf2e4b40342f274049080ef8421fdddb396587e3d1dfb4
|
4
|
+
data.tar.gz: 7ace46d7713e3952c7658ffeaaff3b43825745782305b6a668141eb8c6450a47
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7ad1eed6872c295dcc255f214f05911661afd9cebc965cf0dfacbfa2ceb22c01b7425eafbb40d464dbf645afdf686beb590a1e03e11242843a8069c5ada2113a
|
7
|
+
data.tar.gz: 3b048d995c77bdd95b98564d6de766f58bed06e0bc51a2080c235afb79429816ee6ab9722717cccdc3f23faee4d1f5abfa841c0649472114beee14a95729b4e0
|
@@ -116,7 +116,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
|
|
116
116
|
const [rowSelection, setRowSelection] = useState<RowSelectionState>({})
|
117
117
|
|
118
118
|
//Create cells for columns, with customization for first column
|
119
|
-
const createCellFunction = (cellAccessors: string[], customRenderer?: (row: Row<GenericObject>, value: any) => JSX.Element,
|
119
|
+
const createCellFunction = (cellAccessors: string[], customRenderer?: (row: Row<GenericObject>, value: any) => JSX.Element, isFirstColumn?: boolean) => {
|
120
120
|
const columnCells = ({
|
121
121
|
row,
|
122
122
|
getValue,
|
@@ -126,7 +126,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
|
|
126
126
|
}) => {
|
127
127
|
const rowData = row.original
|
128
128
|
|
129
|
-
if (
|
129
|
+
if (isFirstColumn) {
|
130
130
|
switch (row.depth) {
|
131
131
|
case 0: {
|
132
132
|
return (
|
@@ -164,15 +164,16 @@ const AdvancedTable = (props: AdvancedTableProps) => {
|
|
164
164
|
return columnCells
|
165
165
|
}
|
166
166
|
|
167
|
-
const buildColumns = (columnDefinitions: GenericObject[]): any => {
|
167
|
+
const buildColumns = (columnDefinitions: GenericObject[], isRoot= true): any => {
|
168
168
|
return (
|
169
169
|
columnDefinitions &&
|
170
170
|
columnDefinitions.map((column, index) => {
|
171
|
+
const isFirstColumn = isRoot && index === 0;
|
171
172
|
//Checking to see if grouped column or not
|
172
173
|
if (column.columns && column.columns.length > 0) {
|
173
174
|
return {
|
174
175
|
header: column.label || "",
|
175
|
-
columns: buildColumns(column.columns),
|
176
|
+
columns: buildColumns(column.columns, false),
|
176
177
|
};
|
177
178
|
} else {
|
178
179
|
// Define the base column structure
|
@@ -186,7 +187,7 @@ const AdvancedTable = (props: AdvancedTableProps) => {
|
|
186
187
|
columnStructure.cell = createCellFunction(
|
187
188
|
column.cellAccessors,
|
188
189
|
column.customRenderer,
|
189
|
-
|
190
|
+
isFirstColumn
|
190
191
|
);
|
191
192
|
}
|
192
193
|
|
@@ -17,14 +17,21 @@ module Playbook
|
|
17
17
|
default: "scroll"
|
18
18
|
prop :table_props, type: Playbook::Props::HashProp,
|
19
19
|
default: {}
|
20
|
+
prop :max_height, type: Playbook::Props::Enum,
|
21
|
+
values: %w[auto xs sm md lg xl xxl xxxl],
|
22
|
+
default: "auto"
|
20
23
|
|
21
24
|
def classname
|
22
|
-
generate_classname("pb_advanced_table", responsive_classname, separator: " ")
|
25
|
+
generate_classname("pb_advanced_table", responsive_classname, max_height_classname, separator: " ")
|
23
26
|
end
|
24
27
|
|
25
28
|
def responsive_classname
|
26
29
|
responsive == "scroll" ? "advanced-table-responsive-scroll" : "advanced-table-responsive-none"
|
27
30
|
end
|
31
|
+
|
32
|
+
def max_height_classname
|
33
|
+
max_height.present? ? "advanced-table-max-height-#{max_height}" : ""
|
34
|
+
end
|
28
35
|
end
|
29
36
|
end
|
30
37
|
end
|
data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_headers_custom_cell.jsx
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
import React from "react"
|
2
|
+
import { AdvancedTable, Pill } from "playbook-ui"
|
3
|
+
import MOCK_DATA from "./advanced_table_mock_data.json"
|
4
|
+
|
5
|
+
const AdvancedTableColumnHeadersCustomCell = (props) => {
|
6
|
+
const columnDefinitions = [
|
7
|
+
{
|
8
|
+
accessor: "year",
|
9
|
+
label: "Year",
|
10
|
+
cellAccessors: ["quarter", "month", "day"],
|
11
|
+
},
|
12
|
+
{
|
13
|
+
label: "Enrollment Data",
|
14
|
+
columns: [
|
15
|
+
{
|
16
|
+
accessor: "newEnrollments",
|
17
|
+
label: "New Enrollments",
|
18
|
+
customRenderer: (row, value) => (
|
19
|
+
<Pill text={value}
|
20
|
+
variant="success"
|
21
|
+
/>
|
22
|
+
),
|
23
|
+
},
|
24
|
+
{
|
25
|
+
accessor: "scheduledMeetings",
|
26
|
+
label: "Scheduled Meetings",
|
27
|
+
customRenderer: (row, value) => (
|
28
|
+
<Pill text={value}
|
29
|
+
variant="info"
|
30
|
+
/>
|
31
|
+
),
|
32
|
+
},
|
33
|
+
],
|
34
|
+
},
|
35
|
+
{
|
36
|
+
label: "Performance Data",
|
37
|
+
columns: [
|
38
|
+
{
|
39
|
+
accessor: "attendanceRate",
|
40
|
+
label: "Attendance Rate",
|
41
|
+
},
|
42
|
+
{
|
43
|
+
accessor: "completedClasses",
|
44
|
+
label: "Completed Classes",
|
45
|
+
customRenderer: (row, value) => (
|
46
|
+
<Pill text={value}
|
47
|
+
variant="error"
|
48
|
+
/>
|
49
|
+
),
|
50
|
+
},
|
51
|
+
{
|
52
|
+
accessor: "classCompletionRate",
|
53
|
+
label: "Class Completion Rate",
|
54
|
+
},
|
55
|
+
{
|
56
|
+
accessor: "graduatedStudents",
|
57
|
+
label: "Graduated Students",
|
58
|
+
},
|
59
|
+
],
|
60
|
+
},
|
61
|
+
];
|
62
|
+
|
63
|
+
|
64
|
+
return (
|
65
|
+
<>
|
66
|
+
<AdvancedTable
|
67
|
+
columnDefinitions={columnDefinitions}
|
68
|
+
tableData={MOCK_DATA}
|
69
|
+
{...props}
|
70
|
+
/>
|
71
|
+
</>
|
72
|
+
)
|
73
|
+
}
|
74
|
+
|
75
|
+
export default AdvancedTableColumnHeadersCustomCell
|
@@ -30,4 +30,4 @@
|
|
30
30
|
}
|
31
31
|
] %>
|
32
32
|
|
33
|
-
<%= pb_rails("advanced_table", props: { id: "table_props_table", table_data: @table_data, column_definitions: column_definitions, table_props: { container: false, sticky: true }}) %>
|
33
|
+
<%= pb_rails("advanced_table", props: { id: "table_props_table", table_data: @table_data, column_definitions: column_definitions, responsive: "none", table_props: { container: false, sticky: true }}) %>
|
@@ -1 +1,3 @@
|
|
1
|
-
This kit uses the [Table kit](https://playbook.powerapp.cloud/kits/table) under the hood which comes with
|
1
|
+
This kit uses the [Table kit](https://playbook.powerapp.cloud/kits/table) under the hood which comes with its own set of props. If you want to apply certain Table props to that underlying kit, you can do so by using the optional `table_props` prop. This prop must be an object that contains valid Table props. For a full list of Table props, see [here](https://playbook.powerapp.cloud/kits/table).
|
2
|
+
|
3
|
+
This doc example showcases how to set a sticky header for a nonresponsive table. To achieve sticky header AND responsive functionality, see the ["Table Props Sticky Header"](https://playbook.powerapp.cloud/kits/advanced_table#table-props-sticky-header) doc example below.
|
@@ -1,3 +1,3 @@
|
|
1
|
-
This kit uses the [Table kit](https://playbook.powerapp.cloud/kits/table/react) under the hood which comes with
|
1
|
+
This kit uses the [Table kit](https://playbook.powerapp.cloud/kits/table/react) under the hood which comes with its own set of props. If you want to apply certain Table props to that underlying kit, you can do so by using the optional `tableProps` prop. This prop must be an object that contains valid Table props. For a full list of Table props, see [here](https://playbook.powerapp.cloud/kits/table/react).
|
2
2
|
|
3
3
|
This doc example showcases how to set a sticky header for a nonresponsive table. To achieve sticky header AND responsive functionality, see the ["Table Props Sticky Header"](https://playbook.powerapp.cloud/kits/advanced_table/react#table-props-sticky-header) doc example below.
|
data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header.html.erb
ADDED
@@ -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: "table_props_table", table_data: @table_data, column_definitions: column_definitions, max_height: "xs", table_props: { sticky: true }}) %>
|
data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_table_props_sticky_header_rails.md
ADDED
@@ -0,0 +1,3 @@
|
|
1
|
+
Create a sticky header that works for responsive Advanced Tables by setting `sticky: true` via `table_props` and giving the AdvancedTable a `max_height` using our [Max Height](https://playbook.powerapp.cloud/visual_guidelines/max_height) global prop. This behavior requires a `max_height` to work. The header is sticky within the table container, allowing for it to work along with the first column stickiness of a responsive table on smaller screen sizes.
|
2
|
+
|
3
|
+
A sticky header on a nonresponsive table is demonstrated in the ["Table Props"](https://playbook.powerapp.cloud/kits/advanced_table#table-props) doc example above.
|
@@ -5,6 +5,7 @@ examples:
|
|
5
5
|
- advanced_table_beta_subrow_headers: SubRow Headers
|
6
6
|
- advanced_table_collapsible_trail_rails: Collapsible Trail
|
7
7
|
- advanced_table_table_props: Table Props
|
8
|
+
- advanced_table_table_props_sticky_header: Table Props Sticky Header
|
8
9
|
- advanced_table_beta_sort: Enable Sorting
|
9
10
|
- advanced_table_responsive: Responsive Tables
|
10
11
|
- advanced_table_custom_cell_rails: Custom Components for Cells
|
@@ -30,6 +31,7 @@ examples:
|
|
30
31
|
- advanced_table_pagination_with_props: Pagination Props
|
31
32
|
- advanced_table_column_headers: Multi-Header Columns
|
32
33
|
- advanced_table_column_headers_multiple: Multi-Header Columns (Multiple Levels)
|
34
|
+
- advanced_table_column_headers_custom_cell: Multi-Header Columns with Custom Cells
|
33
35
|
# - advanced_table_no_subrows: Table with No Subrows
|
34
36
|
- advanced_table_selectable_rows: Selectable Rows
|
35
37
|
- advanced_table_selectable_rows_no_subrows: Selectable Rows (No Subrows)
|
@@ -19,4 +19,5 @@ export { default as AdvancedTableSelectableRowsNoSubrows } from './_advanced_tab
|
|
19
19
|
export { default as AdvancedTableNoSubrows } from './_advanced_table_no_subrows.jsx'
|
20
20
|
export { default as AdvancedTableSelectableRowsHeader } from './_advanced_table_selectable_rows_header.jsx'
|
21
21
|
export { default as AdvancedTableSelectableRowsActions } from './_advanced_table_selectable_rows_actions.jsx'
|
22
|
-
export { default as AdvancedTableTablePropsStickyHeader } from './_advanced_table_table_props_sticky_header.jsx'
|
22
|
+
export { default as AdvancedTableTablePropsStickyHeader } from './_advanced_table_table_props_sticky_header.jsx'
|
23
|
+
export { default as AdvancedTableColumnHeadersCustomCell } from './_advanced_table_column_headers_custom_cell.jsx'
|
@@ -0,0 +1,58 @@
|
|
1
|
+
@import "../tokens/colors";
|
2
|
+
@import "../tokens/typography";
|
3
|
+
@import url("https://code.highcharts.com/css/highcharts.css");
|
4
|
+
|
5
|
+
:root {
|
6
|
+
--highcharts-color-0: #{$data_1};
|
7
|
+
--highcharts-color-1: #{$data_2};
|
8
|
+
--highcharts-color-2: #{$data_3};
|
9
|
+
--highcharts-color-3: #{$data_4};
|
10
|
+
--highcharts-color-4: #{$data_5};
|
11
|
+
--highcharts-color-5: #{$data_6};
|
12
|
+
--highcharts-color-6: #{$data_7};
|
13
|
+
--highcharts-color-7: #{$data_8};
|
14
|
+
}
|
15
|
+
|
16
|
+
.highcharts-title {
|
17
|
+
font-family: $font_family_base;
|
18
|
+
font-weight: $bold;
|
19
|
+
font-size: $heading_3;
|
20
|
+
color: $text_lt_default;
|
21
|
+
fill: $text_lt_default;
|
22
|
+
}
|
23
|
+
|
24
|
+
.highcharts-subtitle {
|
25
|
+
font-family: $font_family_base;
|
26
|
+
color: $text_lt_light;
|
27
|
+
fill: $text_lt_light;
|
28
|
+
font-weight: $regular;
|
29
|
+
font-size: $text_base;
|
30
|
+
}
|
31
|
+
|
32
|
+
.highcharts-yaxis > .highcharts-axis-title {
|
33
|
+
color: $text_lt_lighter;
|
34
|
+
fill: $text_lt_lighter;
|
35
|
+
font-family: $font_family_base;
|
36
|
+
font-weight: $bold;
|
37
|
+
font-size: $text_smaller;
|
38
|
+
}
|
39
|
+
|
40
|
+
.highcharts-axis-labels {
|
41
|
+
font-family: $font_family_base;
|
42
|
+
color: $text_lt_lighter;
|
43
|
+
fill: $text_lt_lighter;
|
44
|
+
font-weight: $bold;
|
45
|
+
font-size: $text_smaller;
|
46
|
+
}
|
47
|
+
|
48
|
+
.highcharts-grid-line {
|
49
|
+
stroke: $border_light;
|
50
|
+
}
|
51
|
+
|
52
|
+
.highcharts-point {
|
53
|
+
border-radius: 3px;
|
54
|
+
}
|
55
|
+
|
56
|
+
.highcharts-axis-line {
|
57
|
+
stroke: $border_light;
|
58
|
+
}
|
@@ -0,0 +1,64 @@
|
|
1
|
+
import React from 'react'
|
2
|
+
import Highcharts from "highcharts";
|
3
|
+
import HighchartsReact from "highcharts-react-official";
|
4
|
+
|
5
|
+
import "../BarGraphStyles.scss";
|
6
|
+
// Your path might look more like this
|
7
|
+
//import "playbook-ui/dist/pb_bar_graph/BarGraphStyles.scss";
|
8
|
+
|
9
|
+
const columnChartData = [
|
10
|
+
{
|
11
|
+
name: "Installation",
|
12
|
+
data: [1475, 200, 3000, 654, 656],
|
13
|
+
},
|
14
|
+
{
|
15
|
+
name: "Manufacturing",
|
16
|
+
data: [4434, 524, 2320, 440, 500],
|
17
|
+
},
|
18
|
+
{
|
19
|
+
name: "Sales & Distribution",
|
20
|
+
data: [3387, 743, 1344, 434, 440],
|
21
|
+
},
|
22
|
+
{
|
23
|
+
name: "Project Development",
|
24
|
+
data: [3227, 878, 999, 780, 1000],
|
25
|
+
},
|
26
|
+
{
|
27
|
+
name: "Other",
|
28
|
+
data: [1111, 677, 3245, 500, 200],
|
29
|
+
},
|
30
|
+
];
|
31
|
+
|
32
|
+
const columnOptions = {
|
33
|
+
chart: {
|
34
|
+
type: "column",
|
35
|
+
},
|
36
|
+
series: columnChartData,
|
37
|
+
title: {
|
38
|
+
text: "Solar Employment Growth by Sector, 2010-2016",
|
39
|
+
},
|
40
|
+
subtitle: {
|
41
|
+
text: "Source: thesolarfoundation.com",
|
42
|
+
},
|
43
|
+
xAxis: {
|
44
|
+
categories: ["Jan", "Feb", "Mar", "Apr", "May"],
|
45
|
+
},
|
46
|
+
yAxis: {
|
47
|
+
min: 0,
|
48
|
+
title: {
|
49
|
+
text: "Number of Employees",
|
50
|
+
},
|
51
|
+
},
|
52
|
+
legend: { enabled: false },
|
53
|
+
credits: { enabled: false },
|
54
|
+
};
|
55
|
+
|
56
|
+
const BarGraphPbStyles = () => (
|
57
|
+
<div>
|
58
|
+
<HighchartsReact highcharts={Highcharts}
|
59
|
+
options={columnOptions}
|
60
|
+
/>
|
61
|
+
</div>
|
62
|
+
)
|
63
|
+
|
64
|
+
export default BarGraphPbStyles
|
@@ -0,0 +1 @@
|
|
1
|
+
You don't need to use the bar graph kit to apply the styles to your Highcharts bar graph. Just import the BarGraphStyles.scss to your component and the styles will apply automatically.
|
@@ -10,3 +10,4 @@ export { default as BarGraphStacked } from './_bar_graph_stacked.jsx'
|
|
10
10
|
export { default as BarGraphNegativeNumbers } from './_bar_graph_negative_numbers.jsx'
|
11
11
|
export { default as BarGraphSecondaryYAxis } from './_bar_graph_secondary_y_axis.jsx'
|
12
12
|
export { default as BarGraphHorizontal } from './_bar_graph_horizontal.jsx'
|
13
|
+
export { default as BarGraphPbStyles } from './_bar_graph_pb_styles.jsx'
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import React, { useEffect, useRef } from 'react'
|
1
|
+
import React, { useEffect, useRef, forwardRef } from 'react'
|
2
2
|
import Body from '../pb_body/_body'
|
3
3
|
import Icon from '../pb_icon/_icon'
|
4
4
|
import { buildAriaProps, buildCss, buildDataProps, buildHtmlProps } from '../utilities/props'
|
@@ -24,7 +24,7 @@ type CheckboxProps = {
|
|
24
24
|
value?: string,
|
25
25
|
} & GlobalProps
|
26
26
|
|
27
|
-
const Checkbox = (props
|
27
|
+
const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>((props, ref) => {
|
28
28
|
const {
|
29
29
|
aria = {},
|
30
30
|
checked = false,
|
@@ -44,7 +44,15 @@ const Checkbox = (props: CheckboxProps): React.ReactElement => {
|
|
44
44
|
value = '',
|
45
45
|
} = props
|
46
46
|
|
47
|
-
const
|
47
|
+
const internalRef = useRef<HTMLInputElement>(null)
|
48
|
+
const setRefs = (el: HTMLInputElement) => {
|
49
|
+
internalRef.current = el
|
50
|
+
if (typeof ref === 'function') {
|
51
|
+
ref(el)
|
52
|
+
} else if (ref) {
|
53
|
+
(ref as React.MutableRefObject<HTMLInputElement | null>).current = el
|
54
|
+
}
|
55
|
+
}
|
48
56
|
const ariaProps = buildAriaProps(aria)
|
49
57
|
const dataProps = buildDataProps(data)
|
50
58
|
const htmlProps = buildHtmlProps(htmlOptions)
|
@@ -56,9 +64,9 @@ const Checkbox = (props: CheckboxProps): React.ReactElement => {
|
|
56
64
|
)
|
57
65
|
|
58
66
|
useEffect(() => {
|
59
|
-
if (
|
60
|
-
|
61
|
-
|
67
|
+
if (internalRef.current) {
|
68
|
+
internalRef.current.checked = checked
|
69
|
+
internalRef.current.indeterminate = indeterminate
|
62
70
|
}
|
63
71
|
}, [indeterminate, checked])
|
64
72
|
|
@@ -72,7 +80,7 @@ const Checkbox = (props: CheckboxProps): React.ReactElement => {
|
|
72
80
|
disabled={disabled}
|
73
81
|
name={name}
|
74
82
|
onChange={onChange}
|
75
|
-
ref={
|
83
|
+
ref={setRefs}
|
76
84
|
tabIndex={tabIndex}
|
77
85
|
type="checkbox"
|
78
86
|
value={value}
|
@@ -119,6 +127,7 @@ const Checkbox = (props: CheckboxProps): React.ReactElement => {
|
|
119
127
|
</Body>
|
120
128
|
</label>
|
121
129
|
)
|
122
|
-
}
|
130
|
+
})
|
123
131
|
|
132
|
+
Checkbox.displayName = "Checkbox"
|
124
133
|
export default Checkbox
|
@@ -106,3 +106,19 @@ test('has disabled attribute', () => {
|
|
106
106
|
const input = kit.querySelector('input')
|
107
107
|
expect(input).toHaveAttribute('disabled')
|
108
108
|
})
|
109
|
+
|
110
|
+
test('has ref in the input element', () => {
|
111
|
+
const ref = React.createRef()
|
112
|
+
render(
|
113
|
+
<Checkbox
|
114
|
+
data={{ testid: testId }}
|
115
|
+
name="checkbox-name"
|
116
|
+
ref={ref}
|
117
|
+
text="Checkbox"
|
118
|
+
value="check-box value"
|
119
|
+
/>
|
120
|
+
)
|
121
|
+
|
122
|
+
expect(ref.current).not.toBeNull()
|
123
|
+
expect(ref.current?.tagName).toBe('INPUT')
|
124
|
+
})
|
@@ -0,0 +1,69 @@
|
|
1
|
+
import React, { useState } from "react"
|
2
|
+
import { useForm } from "react-hook-form"
|
3
|
+
import { Button, Checkbox, Flex, Body } from "playbook-ui"
|
4
|
+
|
5
|
+
const CheckboxReactHook = () => {
|
6
|
+
const { register, handleSubmit } = useForm({
|
7
|
+
defaultValues: {
|
8
|
+
Small: false,
|
9
|
+
Medium: false,
|
10
|
+
Large: false,
|
11
|
+
},
|
12
|
+
})
|
13
|
+
|
14
|
+
const [submittedData, setSubmittedData] = useState({
|
15
|
+
Small: false,
|
16
|
+
Medium: false,
|
17
|
+
Large: false,
|
18
|
+
})
|
19
|
+
|
20
|
+
const onSubmit = (data) => {
|
21
|
+
setSubmittedData(data)
|
22
|
+
}
|
23
|
+
|
24
|
+
return (
|
25
|
+
<Flex orientation="row">
|
26
|
+
<Flex align="start"
|
27
|
+
orientation="column"
|
28
|
+
paddingRight="lg"
|
29
|
+
>
|
30
|
+
<form onSubmit={handleSubmit(onSubmit)}>
|
31
|
+
<Checkbox padding="xs"
|
32
|
+
text="Small"
|
33
|
+
{...register("Small")}
|
34
|
+
/>
|
35
|
+
<br />
|
36
|
+
<Checkbox padding="xs"
|
37
|
+
text="Medium"
|
38
|
+
{...register("Medium")}
|
39
|
+
/>
|
40
|
+
<br />
|
41
|
+
<Checkbox padding="xs"
|
42
|
+
text="Large"
|
43
|
+
{...register("Large")}
|
44
|
+
/>
|
45
|
+
<br />
|
46
|
+
<Button htmlType="submit"
|
47
|
+
marginTop="sm"
|
48
|
+
text="submit"
|
49
|
+
/>
|
50
|
+
</form>
|
51
|
+
</Flex>
|
52
|
+
<Flex align="start"
|
53
|
+
orientation="column"
|
54
|
+
>
|
55
|
+
<Body padding="xs"
|
56
|
+
text={`Small: ${submittedData.Small ? "true" : "false"}`}
|
57
|
+
/>
|
58
|
+
<Body padding="xs"
|
59
|
+
text={`Medium: ${submittedData.Medium ? "true" : "false"}`}
|
60
|
+
/>
|
61
|
+
<Body padding="xs"
|
62
|
+
text={`Large: ${submittedData.Large ? "true" : "false"}`}
|
63
|
+
/>
|
64
|
+
</Flex>
|
65
|
+
</Flex>
|
66
|
+
)
|
67
|
+
}
|
68
|
+
|
69
|
+
export default CheckboxReactHook
|
@@ -0,0 +1 @@
|
|
1
|
+
You can pass react hook props to the checkbox kit.
|
@@ -11,6 +11,7 @@ examples:
|
|
11
11
|
react:
|
12
12
|
- checkbox_default: Default
|
13
13
|
- checkbox_checked: Load as checked
|
14
|
+
- checkbox_react_hook: React Hook Form
|
14
15
|
- checkbox_custom: Custom Checkbox
|
15
16
|
- checkbox_error: Default w/ Error
|
16
17
|
- checkbox_indeterminate: Indeterminate Checkbox
|
@@ -21,4 +22,4 @@ examples:
|
|
21
22
|
- checkbox_error_swift: Default w/ Error
|
22
23
|
- checkbox_indeterminate_swift: Indeterminate Checkbox
|
23
24
|
- checkbox_props_swift: ""
|
24
|
-
|
25
|
+
|
@@ -1,5 +1,6 @@
|
|
1
1
|
export { default as CheckboxDefault } from './_checkbox_default.jsx'
|
2
2
|
export { default as CheckboxCustom } from './_checkbox_custom.jsx'
|
3
|
+
export { default as CheckboxReactHook } from './_checkbox_react_hook.jsx'
|
3
4
|
export { default as CheckboxError } from './_checkbox_error.jsx'
|
4
5
|
export { default as CheckboxChecked } from './_checkbox_checked.jsx'
|
5
6
|
export { default as CheckboxIndeterminate } from './_checkbox_indeterminate.jsx'
|
@@ -8,6 +8,7 @@ import OverlayToken from './subcomponents/_overlay_token'
|
|
8
8
|
export type OverlayChildrenProps = {
|
9
9
|
children: React.ReactNode[] | React.ReactNode,
|
10
10
|
color: "card_light" | "bg_light" | "card_dark" | "bg_dark",
|
11
|
+
dynamic?: boolean,
|
11
12
|
position: string,
|
12
13
|
size: string,
|
13
14
|
}
|
@@ -18,6 +19,7 @@ type OverlayProps = {
|
|
18
19
|
children: React.ReactNode[] | React.ReactNode,
|
19
20
|
color: "card_light" | "bg_light" | "card_dark" | "bg_dark",
|
20
21
|
data?: { [key: string]: string },
|
22
|
+
dynamic?: false,
|
21
23
|
htmlOptions?: { [key: string]: string | number | boolean | (() => void) },
|
22
24
|
id?: string,
|
23
25
|
layout: { [key: string]: string },
|
@@ -30,6 +32,7 @@ const Overlay = (props: OverlayProps) => {
|
|
30
32
|
children,
|
31
33
|
color = "card_light",
|
32
34
|
data = {},
|
35
|
+
dynamic = false,
|
33
36
|
htmlOptions = {},
|
34
37
|
id,
|
35
38
|
layout = { "bottom": "full" },
|
@@ -69,6 +72,7 @@ const Overlay = (props: OverlayProps) => {
|
|
69
72
|
}) : OverlayToken({
|
70
73
|
children,
|
71
74
|
color,
|
75
|
+
dynamic: dynamic,
|
72
76
|
position: getPosition(),
|
73
77
|
size: getSize()
|
74
78
|
})
|
@@ -0,0 +1,37 @@
|
|
1
|
+
import React, { forwardRef } from 'react'
|
2
|
+
import {
|
3
|
+
Overlay,
|
4
|
+
Card,
|
5
|
+
Flex,
|
6
|
+
FlexItem,
|
7
|
+
} from 'playbook-ui'
|
8
|
+
|
9
|
+
const InlineCardsExample = forwardRef(function InlineCardsExample(ref) {
|
10
|
+
return (
|
11
|
+
<Flex
|
12
|
+
columnGap="lg"
|
13
|
+
orientation="row"
|
14
|
+
ref={ref}
|
15
|
+
>
|
16
|
+
{Array.from({ length: 15 }, (_, index) => (
|
17
|
+
<FlexItem key={index}>
|
18
|
+
<Card>{"Card Content"}</Card>
|
19
|
+
</FlexItem>
|
20
|
+
))}
|
21
|
+
</Flex>
|
22
|
+
)
|
23
|
+
})
|
24
|
+
|
25
|
+
const OverlayVerticalDynamicMultiDirectional = () => (
|
26
|
+
<>
|
27
|
+
<Overlay
|
28
|
+
color="card_light"
|
29
|
+
dynamic
|
30
|
+
layout={{"x": "xl"}}
|
31
|
+
>
|
32
|
+
<InlineCardsExample />
|
33
|
+
</Overlay>
|
34
|
+
</>
|
35
|
+
)
|
36
|
+
|
37
|
+
export default OverlayVerticalDynamicMultiDirectional
|
data/app/pb_kits/playbook/pb_overlay/docs/_overlay_vertical_dynamic_multi_directional_react.md
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Pass the `dynamic` prop to make the overlay render while the scrollbar isn't at either end on the scrollbar. You must also add a `ref` to the child that's being passed through the Overlay.
|