playbook_ui 14.23.0.pre.alpha.PLAY2243customindeterminatemaincheckboxlabels9046 → 14.23.0.pre.alpha.PLAY2329atstickypinnedborderbug9151

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.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/Components/CustomCell.tsx +7 -6
  3. data/app/pb_kits/playbook/pb_advanced_table/Components/TableActionBar.tsx +10 -10
  4. data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +0 -1
  5. data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableState.ts +2 -2
  6. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +223 -1
  7. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +9 -6
  8. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.html.erb +1 -1
  9. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +14 -2
  10. data/app/pb_kits/playbook/pb_advanced_table/advanced_table_action_bar.js +16 -0
  11. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pinned_rows.jsx +1 -1
  12. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_row_styling.html.erb +46 -0
  13. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_row_styling_rails.md +7 -0
  14. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header.md +1 -1
  15. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header_multi_header.jsx +107 -0
  16. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header_multi_header.md +1 -0
  17. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header_rails.html.erb +51 -0
  18. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header_rails.md +1 -0
  19. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +3 -0
  20. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +1 -0
  21. data/app/pb_kits/playbook/pb_advanced_table/scss_partials/advanced_table_sticky_mixin.scss +51 -10
  22. data/app/pb_kits/playbook/pb_advanced_table/table_body.rb +3 -1
  23. data/app/pb_kits/playbook/pb_advanced_table/table_header.html.erb +5 -1
  24. data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +36 -0
  25. data/app/pb_kits/playbook/pb_advanced_table/table_row.html.erb +13 -4
  26. data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +2 -0
  27. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_legend_position.md +1 -1
  28. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_legend_position.md +1 -1
  29. data/app/pb_kits/playbook/pb_line_graph/docs/_description.md +1 -3
  30. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_colors.jsx +36 -17
  31. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_colors_react.md +3 -0
  32. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_default.jsx +31 -16
  33. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_height.jsx +63 -31
  34. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_height.md +3 -0
  35. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_legend.jsx +35 -16
  36. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_legend_nonclickable.jsx +41 -16
  37. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_legend_position.jsx +107 -62
  38. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_legend_position.md +4 -7
  39. data/app/pb_kits/playbook/pb_line_graph/docs/example.yml +0 -1
  40. data/app/pb_kits/playbook/pb_line_graph/docs/index.js +0 -1
  41. data/app/pb_kits/playbook/pb_line_graph/lineGraphTheme.ts +16 -1
  42. data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.tsx +3 -0
  43. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_strict_mode.html.erb +10 -0
  44. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_strict_mode.jsx +26 -0
  45. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_strict_mode.md +3 -0
  46. data/app/pb_kits/playbook/pb_phone_number_input/docs/example.yml +2 -0
  47. data/app/pb_kits/playbook/pb_phone_number_input/docs/index.js +1 -0
  48. data/app/pb_kits/playbook/pb_phone_number_input/phone_number_input.rb +3 -0
  49. data/dist/chunks/_line_graph-BfCo79KE.js +1 -0
  50. data/dist/chunks/_typeahead-Db4YQA5c.js +6 -0
  51. data/dist/chunks/{_weekday_stacked-BIEMUAn8.js → _weekday_stacked-CoOhQc3y.js} +2 -2
  52. data/dist/chunks/{lib-AStGp3dD.js → lib-DnQyMxO1.js} +1 -1
  53. data/dist/chunks/{pb_form_validation-DF742j1h.js → pb_form_validation-kl-4Jv4t.js} +1 -1
  54. data/dist/chunks/vendor.js +1 -1
  55. data/dist/menu.yml +1 -1
  56. data/dist/playbook-doc.js +1 -1
  57. data/dist/playbook-rails-react-bindings.js +1 -1
  58. data/dist/playbook-rails.js +1 -1
  59. data/dist/playbook.css +1 -1
  60. data/lib/playbook/version.rb +1 -1
  61. metadata +20 -11
  62. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_pb_styles.jsx +0 -52
  63. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_pb_styles.md +0 -1
  64. data/dist/chunks/_gauge-BUpiCaK5.js +0 -1
  65. data/dist/chunks/_typeahead-ITbXBlyi.js +0 -6
  66. /data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_row_styling.md → _advanced_table_row_styling_react.md} +0 -0
  67. /data/app/pb_kits/playbook/pb_line_graph/docs/{_line_graph_colors.md → _line_graph_colors_rails.md} +0 -0
@@ -0,0 +1,107 @@
1
+ import React from "react"
2
+ import AdvancedTable from '../../pb_advanced_table/_advanced_table'
3
+ import Icon from "../../pb_icon/_icon"
4
+ import Flex from "../../pb_flex/_flex"
5
+ import Caption from "../../pb_caption/_caption"
6
+ import Tooltip from "../../pb_tooltip/_tooltip"
7
+ import MOCK_DATA from "./advanced_table_mock_data.json"
8
+
9
+ const AdvancedTableWithCustomHeaderMultiHeader = (props) => {
10
+
11
+ const columnDefinitions = [
12
+ {
13
+ accessor: "year",
14
+ label: "Year",
15
+ id: "year",
16
+ cellAccessors: ["quarter", "month", "day"],
17
+ },
18
+ {
19
+ label: "Enrollment Data",
20
+ id: "enrollmentData",
21
+ header: () => (
22
+ <Flex alignItems="center"
23
+ justifyContent="center"
24
+ >
25
+ <Caption marginRight="xs">Enrollments Data</Caption>
26
+ <Tooltip placement="top"
27
+ text="Whoa. I'm a Tooltip"
28
+ zIndex={10}
29
+ >
30
+ <Icon cursor="pointer"
31
+ icon="info"
32
+ size="xs"
33
+ />
34
+ </Tooltip>
35
+ </Flex>
36
+ ),
37
+ columns: [
38
+ {
39
+ label: "Enrollment Stats",
40
+ id: "enrollmentStats",
41
+ columns: [
42
+ {
43
+ accessor: "newEnrollments",
44
+ id: "newEnrollments",
45
+ label: "New Enrollments",
46
+ },
47
+ {
48
+ accessor: "scheduledMeetings",
49
+ id: "scheduledMeetings",
50
+ label: "Scheduled Meetings",
51
+ },
52
+ ],
53
+ },
54
+ ],
55
+ },
56
+ {
57
+ label: "Performance Data",
58
+ id: "performanceData",
59
+ columns: [
60
+ {
61
+ label: "Completion Metrics",
62
+ id: "completionMetrics",
63
+ columns: [
64
+ {
65
+ accessor: "completedClasses",
66
+ label: "Completed Classes",
67
+ id: "completedClasses",
68
+ },
69
+ {
70
+ accessor: "classCompletionRate",
71
+ label: "Class Completion Rate",
72
+ id: "classCompletionRate",
73
+ },
74
+ ],
75
+ },
76
+ {
77
+ label: "Attendance",
78
+ id: "attendance",
79
+ columns: [
80
+ {
81
+ accessor: "attendanceRate",
82
+ label: "Attendance Rate",
83
+ id: "attendanceRate",
84
+ },
85
+ {
86
+ accessor: "scheduledMeetings",
87
+ label: "Scheduled Meetings",
88
+ id: "scheduledMeetings",
89
+ },
90
+ ],
91
+ },
92
+ ],
93
+ },
94
+ ];
95
+
96
+ return (
97
+ <div>
98
+ <AdvancedTable
99
+ columnDefinitions={columnDefinitions}
100
+ tableData={MOCK_DATA}
101
+ {...props}
102
+ />
103
+ </div>
104
+ )
105
+ }
106
+
107
+ export default AdvancedTableWithCustomHeaderMultiHeader;
@@ -0,0 +1 @@
1
+ The optional `header` key/value pair within `columnDefinitions` can also be used with multi headers as seen here.
@@ -0,0 +1,51 @@
1
+ <%
2
+ column_definitions = [
3
+ {
4
+ accessor: "year",
5
+ label: "Year",
6
+ cellAccessors: ["quarter", "month", "day"],
7
+ },
8
+ {
9
+ accessor: "newEnrollments",
10
+ label: "New Enrollments",
11
+ header: ->(cell, label) {
12
+ capture do
13
+ pb_rails("flex", props: { align_items: "center", justify_content: "center" }) do
14
+ pb_rails("caption", props: { margin_right: "xs", text: "New Enrollments" }) +
15
+ pb_rails("icon", props: { id: "tooltip-interact", icon: "info", size: "xs" }) +
16
+ pb_rails("tooltip", props: {
17
+ trigger_element_id: "tooltip-interact",
18
+ tooltip_id: "example-custom-tooltip",
19
+ position: "top",
20
+ z_index: "10"
21
+ }) do
22
+ "Whoa. I'm a Tooltip"
23
+ end
24
+ end
25
+ end
26
+ }
27
+ },
28
+ {
29
+ accessor: "scheduledMeetings",
30
+ label: "Scheduled Meetings",
31
+ },
32
+ {
33
+ accessor: "attendanceRate",
34
+ label: "Attendance Rate",
35
+ },
36
+ {
37
+ accessor: "completedClasses",
38
+ label: "Completed Classes",
39
+ },
40
+ {
41
+ accessor: "classCompletionRate",
42
+ label: "Class Completion Rate",
43
+ },
44
+ {
45
+ accessor: "graduatedStudents",
46
+ label: "Graduated Students",
47
+ }
48
+ ]
49
+ %>
50
+
51
+ <%= pb_rails("advanced_table", props: { id: "custom_header_table", table_data: @table_data, column_definitions: column_definitions }) %>
@@ -0,0 +1 @@
1
+ The optional `header` item can be used within `column_definitions` to render a custom header. This example shows an Icon and Tooltip being used but other kits can be used as well.
@@ -10,6 +10,7 @@ examples:
10
10
  - advanced_table_beta_sort: Enable Sorting
11
11
  - advanced_table_responsive: Responsive Tables
12
12
  - advanced_table_custom_cell_rails: Custom Components for Cells
13
+ - advanced_table_with_custom_header_rails: Custom Header Cell
13
14
  - advanced_table_column_headers: Multi-Header Columns
14
15
  - advanced_table_column_headers_multiple: Multi-Header Columns (Multiple Levels)
15
16
  - advanced_table_no_subrows: Table with No Subrows or Expansion
@@ -18,6 +19,7 @@ examples:
18
19
  - advanced_table_selectable_rows_actions_rails: Selectable Rows (With Actions)
19
20
  - advanced_table_selectable_rows_header_rails: Selectable Rows (No Actions Bar)
20
21
  - advanced_table_scrollbar_none: Advanced Table Scrollbar None
22
+ - advanced_table_row_styling: Row Styling
21
23
  - advanced_table_column_styling_rails: Column Styling
22
24
  - advanced_table_column_styling_column_headers_rails: Column Styling with Multiple Headers
23
25
  - advanced_table_column_border_color_rails: Column Group Border Color
@@ -41,6 +43,7 @@ examples:
41
43
  - advanced_table_responsive: Responsive Tables
42
44
  - advanced_table_custom_cell: Custom Components for Cells
43
45
  - advanced_table_with_custom_header: Custom Header Cell
46
+ - advanced_table_with_custom_header_multi_header: Custom Header with Multiple Headers
44
47
  - advanced_table_pagination: Pagination
45
48
  - advanced_table_pagination_with_props: Pagination Props
46
49
  - advanced_table_loading: Loading State
@@ -40,3 +40,4 @@ export { default as AdvancedTableColumnStylingColumnHeaders } from './_advanced_
40
40
  export { default as AdvancedTableInfiniteScroll} from './_advanced_table_infinite_scroll.jsx'
41
41
  export {default as AdvancedTableWithCustomHeader} from './_advanced_table_with_custom_header.jsx'
42
42
  export { default as AdvancedTableCustomSort } from './_advanced_table_custom_sort.jsx'
43
+ export { default as AdvancedTableWithCustomHeaderMultiHeader } from './_advanced_table_with_custom_header_multi_header.jsx'
@@ -8,24 +8,29 @@
8
8
  border-radius: 4px;
9
9
  box-shadow: 1px 0 0 0px $border-color, -1px 0 0 0px $border-color;
10
10
  display: block;
11
+
12
+ // Handle both table-card and non-table-card cases
11
13
  [class^="pb_table"].table-sm.table-card thead tr th:first-child,
12
- [class^="pb_table"].table-sm:not(.no-hover).table-card
13
- tbody
14
- tr
15
- td:first-child {
14
+ [class^="pb_table"].table-sm:not(.no-hover).table-card tbody tr td:first-child,
15
+ [class^="pb_table"].table-sm:not(.table-card) thead tr th:first-child,
16
+ [class^="pb_table"].table-sm:not(.no-hover):not(.table-card) tbody tr td:first-child {
16
17
  border-left-width: 0px !important;
17
18
  }
19
+
18
20
  [class^="pb_table"].table-sm.table-card thead tr th:last-child,
19
- [class^="pb_table"].table-sm:not(.no-hover).table-card
20
- tbody
21
- tr
22
- td:last-child {
21
+ [class^="pb_table"].table-sm:not(.no-hover).table-card tbody tr td:last-child,
22
+ [class^="pb_table"].table-sm:not(.table-card) thead tr th:last-child,
23
+ [class^="pb_table"].table-sm:not(.no-hover):not(.table-card) tbody tr td:last-child {
23
24
  border-right-width: 0px;
24
25
  }
26
+
25
27
  [class^="pb_table"].table-sm.table-card tbody tr:last-child td:first-child,
26
- [class^="pb_table"].table-sm.table-card tbody tr:last-child td:last-child {
28
+ [class^="pb_table"].table-sm.table-card tbody tr:last-child td:last-child,
29
+ [class^="pb_table"].table-sm:not(.table-card) tbody tr:last-child td:first-child,
30
+ [class^="pb_table"].table-sm:not(.table-card) tbody tr:last-child td:last-child {
27
31
  border-radius: 0 0 0 0;
28
32
  }
33
+
29
34
  .table-header-cells:first-child,
30
35
  td:first-child,
31
36
  .pb_table_td:first-child,
@@ -39,12 +44,42 @@
39
44
  z-index: 2;
40
45
  }
41
46
 
47
+ // For tables with verticalBorder, ensure sticky elements maintain their borders
48
+ [class^="pb_table"].vertical-border {
49
+ .table-header-cells:first-child,
50
+ td:first-child,
51
+ .pb_table_td:first-child,
52
+ .checkbox-cell.checkbox-cell-header:first-child,
53
+ .table-header-cells.sticky-left {
54
+ // Maintain right border for vertical border styling when sticky
55
+ &:not(:last-child) {
56
+ border-right: 1px solid $border-color !important;
57
+ }
58
+ }
59
+
60
+ // Ensure pinned rows maintain vertical borders
61
+ .pinned-row {
62
+ td:not(:last-child),
63
+ .pb_table_td:not(:last-child) {
64
+ border-right: 1px solid $border-color !important;
65
+ }
66
+ }
67
+
68
+ // Handle sticky header with vertical borders
69
+ &.sticky-header thead th {
70
+ &:not(:last-child) {
71
+ border-right: 1px solid $border-color !important;
72
+ }
73
+ }
74
+ }
75
+
42
76
  .bg-silver {
43
77
  td:first-child,
44
78
  .sticky-left {
45
79
  background-color: $bg-secondary;
46
80
  }
47
81
  }
82
+
48
83
  .bg-row-selection {
49
84
  td:first-child,
50
85
  .sticky-left {
@@ -79,8 +114,14 @@
79
114
  left: 0;
80
115
  border-radius: unset;
81
116
  z-index: 5;
82
- }
83
117
 
118
+ // Add proper border radius when action bar is visible
119
+ &.is-visible,
120
+ &.show-action-card {
121
+ border-top-left-radius: 4px !important;
122
+ border-top-right-radius: 4px !important;
123
+ }
124
+ }
84
125
  .checkbox-cell {
85
126
  display: table-cell !important;
86
127
  }
@@ -23,6 +23,8 @@ module Playbook
23
23
  default: "scroll"
24
24
  prop :selectable_rows, type: Playbook::Props::Boolean,
25
25
  default: false
26
+ prop :row_styling, type: Playbook::Props::Array,
27
+ default: []
26
28
 
27
29
  def flatten_columns(columns)
28
30
  columns.flat_map do |col|
@@ -66,7 +68,7 @@ module Playbook
66
68
  end
67
69
 
68
70
  # Additional class and data attributes needed for toggle logic
69
- output << pb_rails("advanced_table/table_row", props: { id: id, row: row, column_definitions: leaf_columns, depth: current_depth, collapsible_trail: collapsible_trail, classname: additional_classes, table_data_attributes: current_data_attributes, responsive: responsive, loading: loading, selectable_rows: selectable_rows, row_id: row[:id], enable_toggle_expansion: enable_toggle_expansion })
71
+ output << pb_rails("advanced_table/table_row", props: { id: id, row: row, column_definitions: leaf_columns, depth: current_depth, collapsible_trail: collapsible_trail, classname: additional_classes, table_data_attributes: current_data_attributes, responsive: responsive, loading: loading, selectable_rows: selectable_rows, row_id: row[:id], enable_toggle_expansion: enable_toggle_expansion, row_styling: row_styling })
70
72
 
71
73
  if row[:children].present?
72
74
  row[:children].each do |child_row|
@@ -26,7 +26,11 @@
26
26
  <% end %>
27
27
  <% end %>
28
28
  <% end %>
29
- <%= cell[:label] %>
29
+ <% if object.has_header_renderer?(cell) %>
30
+ <%= raw(object.render_header(cell)) %>
31
+ <% else %>
32
+ <%= cell[:label] %>
33
+ <% end %>
30
34
  <% end %>
31
35
  <% end %>
32
36
  <% end %>
@@ -76,6 +76,30 @@ module Playbook
76
76
  end
77
77
  end
78
78
 
79
+ # Get original column definition for custom rendering
80
+ def find_original_column_def(accessor)
81
+ find_column_def_by_accessor(column_definitions, accessor)
82
+ end
83
+
84
+ # Check if a header cell has a custom renderer
85
+ def has_header_renderer?(cell)
86
+ return false unless cell[:accessor].present?
87
+
88
+ original_def = find_original_column_def(cell[:accessor])
89
+ original_def && original_def[:header].present?
90
+ end
91
+
92
+ # Render custom header content
93
+ def render_header(cell)
94
+ return cell[:label] unless has_header_renderer?(cell)
95
+
96
+ original_def = find_original_column_def(cell[:accessor])
97
+ custom_renderer = original_def[:header]
98
+
99
+ # Call the custom renderer with the cell data and label
100
+ custom_renderer.call(cell, cell[:label])
101
+ end
102
+
79
103
  private
80
104
 
81
105
  def compute_max_depth(columns)
@@ -148,6 +172,18 @@ module Playbook
148
172
  end
149
173
  wrapped
150
174
  end
175
+
176
+ def find_column_def_by_accessor(defs, target_accessor)
177
+ defs.each do |col|
178
+ return col if col[:accessor] == target_accessor
179
+
180
+ if col[:columns].is_a?(Array)
181
+ found = find_column_def_by_accessor(col[:columns], target_accessor)
182
+ return found if found
183
+ end
184
+ end
185
+ nil
186
+ end
151
187
  end
152
188
  end
153
189
  end
@@ -1,3 +1,10 @@
1
+ <%
2
+ row_style = object.row_styling.find { |style| style[:row_id].to_s == object.row_id.to_s }
3
+ button_color = row_style&.[](:expand_button_color)
4
+ bg_color = row_style&.[](:background_color)
5
+ font_color = row_style&.[](:font_color)
6
+ %>
7
+
1
8
  <%= pb_content_tag(:tr) do %>
2
9
  <% has_separate_checkbox = object.selectable_rows && object.enable_toggle_expansion == "none" %>
3
10
  <% if has_separate_checkbox %>
@@ -5,7 +12,7 @@
5
12
  <% end %>
6
13
  <% object.column_definitions.each_with_index do |column, index| %>
7
14
  <% next unless column[:accessor].present? %>
8
- <%= pb_rails("table/table_cell", props: { classname:object.td_classname(column, index)}) do %>
15
+ <%= pb_rails("table/table_cell", props: { html_options: { style: { "background-color": bg_color, color: font_color } }, classname:object.td_classname(column, index)}) do %>
9
16
  <%= pb_rails("flex", props:{ align: "center", justify: object.justify_for(column, index), classname: object.loading ? "loading-cell" : "" }) do %>
10
17
  <% if collapsible_trail && index.zero? %>
11
18
  <% (1..depth).each do |i| %>
@@ -28,13 +35,15 @@
28
35
  <button
29
36
  id="<%= "#{object.id}_#{object.row.object_id}" %>"
30
37
  class="gray-icon expand-toggle-icon"
31
- data-advanced-table="true">
38
+ data-advanced-table="true"
39
+ style="color: <%= button_color %>"
40
+ >
32
41
  <%= pb_rails("icon", props: { id: "advanced-table_open_icon", icon: "circle-play", cursor: "pointer" }) %>
33
- <%= pb_rails("icon", props: { id: "advanced-table_close_icon", icon: "circle-play-down", cursor: "pointer" }) %>
42
+ <%= pb_rails("icon", props: { id: "advanced-table_close_icon", icon: "circle-play", cursor: "pointer", rotation: 90 }) %>
34
43
  </button>
35
44
  <% end %>
36
45
  <% end %>
37
- <%= pb_rails("flex/flex_item") do %>
46
+ <%= pb_rails("flex/flex_item") do %>
38
47
  <% if column[:custom_renderer].present? %>
39
48
  <%= raw(column[:custom_renderer].call(object.row, custom_renderer_value(column, index))) %>
40
49
  <% elsif index.zero? %>
@@ -27,6 +27,8 @@ module Playbook
27
27
  prop :enable_toggle_expansion, type: Playbook::Props::Enum,
28
28
  values: %w[all header none],
29
29
  default: "header"
30
+ prop :row_styling, type: Playbook::Props::Array,
31
+ default: []
30
32
 
31
33
  def data
32
34
  Hash(prop(:data)).merge(table_data_attributes)
@@ -1,7 +1,7 @@
1
1
  ##### Prop
2
2
 
3
3
  `align` **Type**: String | **Values**: left | center | right (defaults to center)
4
- `verticalAlign` **Type**: String | **Values**: top | middle | bottom (defaults middle)
4
+ `verticalAlign` **Type**: String | **Values**: top | middle | bottom (defaults to bottom)
5
5
  `layout` **Type**: String | **Values**: horizontal | vertical | proximate (defaults to horizontal)
6
6
  `x` **Type**: Number (defaults to 0)
7
7
  `y` **Type**: Number (defaults to 0)
@@ -1,7 +1,7 @@
1
1
  ##### Prop
2
2
 
3
3
  `align` **Type**: String | **Values**: left | center | right (defaults to center)
4
- `verticalAlign` **Type**: String | **Values**: top | middle | bottom (defaults middle)
4
+ `verticalAlign` **Type**: String | **Values**: top | middle | bottom (defaults to bottom)
5
5
  `layout` **Type**: String | **Values**: horizontal | vertical | proximate (defaults to horizontal)
6
6
  `x` **Type**: Number (defaults to 0)
7
7
  `y` **Type**: Number (defaults to 0)
@@ -1,3 +1 @@
1
- Line graphs are used to show changes in data over time. The default height of line graph is 400px and can be changed. The default height is in pixel units, but can also use percentage string (percentage would be that of the width. For example, `height:"50%"` would mean that the height is 50% of the width). This allows for preserving the aspect ratio across responsive sizes.
2
-
3
- For more information, see: <a href="https://api.highcharts.com/highcharts/chart.height" target="_blank"> highcharts/chart.height</a>.
1
+ **Important Note for the React Kit**: In order to leverage this kit, you must install `highcharts` and `highcharts-react-official` into your project as shown below. To then apply Playbook styles to your Highchart, import lineGraphTheme.ts from playbook-ui and merge it with your Highchart options. Then, pass the merged value to the options prop. Playbook’s styling will be applied automatically. See the examples in the documentation below.
@@ -1,6 +1,8 @@
1
1
  import React from 'react'
2
-
3
- import LineGraph from '../_line_graph'
2
+ import lineGraphTheme from '../lineGraphTheme'
3
+ import Highcharts from "highcharts"
4
+ import HighchartsReact from "highcharts-react-official"
5
+ import colors from '../../tokens/exports/_colors.module.scss'
4
6
 
5
7
  const data = [{
6
8
  name: 'Installation',
@@ -19,19 +21,36 @@ const data = [{
19
21
  data: [null, null, null, 3112, 4989, 5816, 15274, 18111],
20
22
  }]
21
23
 
22
- const LineGraphColors = (props) => (
23
- <div>
24
- <LineGraph
25
- axisTitle="Number of Employees"
26
- chartData={data}
27
- colors={['data-4', 'data-5', 'data-6', 'data-7', 'data-8']}
28
- id="line-colors"
29
- title="Line Graph with Custom Data Colors"
30
- xAxisCategories={['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']}
31
- yAxisMin={0}
32
- {...props}
33
- />
34
- </div>
35
- )
24
+ const categories = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
25
+
26
+ const LineGraphColors = () => {
27
+ const chartOptions = {
28
+ title: {
29
+ text: 'Line Graph with Custom Data Colors',
30
+ },
31
+ xAxis: {
32
+ categories: categories,
33
+ },
34
+ yAxis: {
35
+ min: 0,
36
+ title: {
37
+ text: 'Number of Employees',
38
+ },
39
+ },
40
+ series: data,
41
+ colors: [colors.data_4, colors.data_5, "#144075", colors.data_7, colors.data_8]
42
+ }
43
+
44
+ const options = Highcharts.merge({}, lineGraphTheme, chartOptions)
45
+
46
+ return (
47
+ <div>
48
+ <HighchartsReact
49
+ highcharts={Highcharts}
50
+ options={options}
51
+ />
52
+ </div>
53
+ )
54
+ }
36
55
 
37
- export default LineGraphColors
56
+ export default LineGraphColors
@@ -0,0 +1,3 @@
1
+
2
+ Custom data colors allow for color customization to match the needs of business requirements.
3
+ Import the colors from Playbook's tokens, then set custom colors in the colors array using the desired color variables. Hex colors are also available `eg: #CA0095`.
@@ -1,6 +1,7 @@
1
1
  import React from 'react'
2
-
3
- import LineGraph from '../_line_graph'
2
+ import lineGraphTheme from '../lineGraphTheme'
3
+ import Highcharts from "highcharts"
4
+ import HighchartsReact from "highcharts-react-official"
4
5
 
5
6
  const data = [{
6
7
  name: 'Installation',
@@ -19,19 +20,33 @@ const data = [{
19
20
  data: [12908, 5948, 8105, 11248, 8989, 11816, 18274, 18111],
20
21
  }]
21
22
 
22
- const LineGraphDefault = (props) => (
23
- <div>
24
- <LineGraph
25
- axisTitle="Number of Employees"
26
- chartData={data}
27
- id="line-default"
28
- subTitle="Source: thesolarfoundation.com"
29
- title="Solar Employment Growth by Sector, 2010-2016"
30
- xAxisCategories={['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']}
31
- yAxisMin={0}
32
- {...props}
33
- />
34
- </div>
35
- )
23
+ const categories = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
24
+
25
+ const chartOptions = {
26
+ series: data,
27
+ title: { text: "Solar Employment Growth by Sector, 2010-2016" },
28
+ subtitle: { text: "Source: thesolarfoundation.com" },
29
+ xAxis: {
30
+ categories: categories,
31
+ },
32
+ yAxis: {
33
+ title: {
34
+ text: "Number of Employees",
35
+ },
36
+ },
37
+ }
38
+
39
+ const LineGraphDefault = () => {
40
+ const options = Highcharts.merge({}, lineGraphTheme, chartOptions)
41
+
42
+ return(
43
+ <div>
44
+ <HighchartsReact
45
+ highcharts={Highcharts}
46
+ options={options}
47
+ />
48
+ </div>
49
+ )
50
+ }
36
51
 
37
52
  export default LineGraphDefault