playbook_ui 15.0.0.pre.alpha.PLAY2453formtextfieldtextinputprops10419 → 15.0.0.pre.alpha.PLAY2468phonenuminputvalidation10790

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 (175) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +3 -0
  3. data/app/pb_kits/playbook/pb_advanced_table/Components/RegularTableView.tsx +24 -11
  4. data/app/pb_kits/playbook/pb_advanced_table/Components/VirtualizedTableView.tsx +7 -7
  5. data/app/pb_kits/playbook/pb_advanced_table/Utilities/RowUtils.ts +7 -2
  6. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +67 -13
  7. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_headers_vertical_border.jsx +2 -2
  8. data/app/pb_kits/playbook/pb_bar_graph/docs/example.yml +0 -1
  9. data/app/pb_kits/playbook/pb_card/_card.scss +12 -4
  10. data/app/pb_kits/playbook/pb_card/_card.tsx +3 -3
  11. data/app/pb_kits/playbook/pb_card/_card_mixin.scss +10 -0
  12. data/app/pb_kits/playbook/pb_card/docs/_card_highlight.html.erb +3 -0
  13. data/app/pb_kits/playbook/pb_card/docs/_card_highlight.jsx +8 -0
  14. data/app/pb_kits/playbook/pb_contact/_contact.tsx +5 -0
  15. data/app/pb_kits/playbook/pb_contact/contact.rb +4 -0
  16. data/app/pb_kits/playbook/pb_contact/contact.test.js +21 -1
  17. data/app/pb_kits/playbook/pb_contact/docs/_contact_default.html.erb +16 -1
  18. data/app/pb_kits/playbook/pb_contact/docs/_contact_default.jsx +15 -0
  19. data/app/pb_kits/playbook/pb_contact/docs/_contact_default.md +5 -0
  20. data/app/pb_kits/playbook/pb_contact/docs/_contact_with_detail.html.erb +6 -0
  21. data/app/pb_kits/playbook/pb_contact/docs/_contact_with_detail.jsx +6 -0
  22. data/app/pb_kits/playbook/pb_date_picker/_date_picker.tsx +6 -4
  23. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.tsx +9 -0
  24. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/fixed_confirmation_toast.html.erb +3 -3
  25. data/app/pb_kits/playbook/pb_form/docs/_form_form_with.html.erb +1 -0
  26. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +1 -1
  27. data/app/pb_kits/playbook/pb_form/pb_form_validation.js +19 -4
  28. data/app/pb_kits/playbook/pb_icon_button/_icon_button.tsx +1 -0
  29. data/app/pb_kits/playbook/pb_icon_button/icon_button.html.erb +2 -1
  30. data/app/pb_kits/playbook/pb_nav/_item.tsx +19 -5
  31. data/app/pb_kits/playbook/pb_nav/_nav.scss +27 -0
  32. data/app/pb_kits/playbook/pb_nav/_nav.test.js +16 -0
  33. data/app/pb_kits/playbook/pb_nav/_nav.tsx +5 -0
  34. data/app/pb_kits/playbook/pb_nav/docs/_horizontal_nav_extendedunderline.html.erb +6 -0
  35. data/app/pb_kits/playbook/pb_nav/docs/_horizontal_nav_extendedunderline.jsx +39 -0
  36. data/app/pb_kits/playbook/pb_nav/docs/_horizontal_nav_extendedunderline.md +1 -0
  37. data/app/pb_kits/playbook/pb_nav/docs/example.yml +2 -0
  38. data/app/pb_kits/playbook/pb_nav/docs/index.js +2 -1
  39. data/app/pb_kits/playbook/pb_nav/item.html.erb +6 -2
  40. data/app/pb_kits/playbook/pb_nav/nav.rb +6 -1
  41. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_breached.html.erb +3 -3
  42. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_common.html.erb +3 -3
  43. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_confirmation.html.erb +3 -3
  44. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_meter_settings.html.erb +3 -3
  45. data/app/pb_kits/playbook/pb_passphrase/docs/_passphrase_strength_change.html.erb +3 -3
  46. data/app/pb_kits/playbook/pb_pb_bar_graph/_pb_bar_graph.scss +0 -0
  47. data/app/pb_kits/playbook/pb_pb_bar_graph/_pb_bar_graph.tsx +62 -0
  48. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_colors.html.erb +35 -0
  49. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_colors.jsx +49 -0
  50. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_colors_rails.md +1 -0
  51. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_colors_react.md +2 -0
  52. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_default.html.erb +38 -0
  53. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_default.jsx +51 -0
  54. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_height.html.erb +46 -0
  55. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_height.jsx +62 -0
  56. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_height.md +3 -0
  57. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_horizontal.html.erb +47 -0
  58. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_horizontal.jsx +60 -0
  59. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_legend.html.erb +25 -0
  60. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_legend.jsx +36 -0
  61. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_legend_non_clickable.jsx +44 -0
  62. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_legend_position.html.erb +100 -0
  63. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_legend_position.jsx +126 -0
  64. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_negative_numbers.html.erb +32 -0
  65. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_negative_numbers.jsx +48 -0
  66. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_secondary_y_axis.html.erb +68 -0
  67. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_secondary_y_axis.jsx +81 -0
  68. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_spline.html.erb +31 -0
  69. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_spline.jsx +42 -0
  70. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_spline.md +2 -0
  71. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_stacked.html.erb +35 -0
  72. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_pb_bar_graph_stacked.jsx +51 -0
  73. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/example.yml +27 -0
  74. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/index.js +11 -0
  75. data/app/pb_kits/playbook/pb_pb_bar_graph/pbBarGraphTheme.ts +106 -0
  76. data/app/pb_kits/playbook/pb_pb_bar_graph/pb_bar_graph.html.erb +1 -0
  77. data/app/pb_kits/playbook/pb_pb_bar_graph/pb_bar_graph.rb +28 -0
  78. data/app/pb_kits/playbook/pb_pb_bar_graph/pbbargraph.test.jsx +31 -0
  79. data/app/pb_kits/playbook/pb_pb_circle_chart/_pb_circle_chart.scss +3 -0
  80. data/app/pb_kits/playbook/pb_pb_circle_chart/_pb_circle_chart.tsx +62 -0
  81. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_block_content.html.erb +31 -0
  82. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_block_content.jsx +81 -0
  83. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_color_overrides.html.erb +25 -0
  84. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_color_overrides.jsx +40 -0
  85. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_color_overrides.md +5 -0
  86. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_custom_tooltip.html.erb +27 -0
  87. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_custom_tooltip.jsx +39 -0
  88. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_custom_tooltip.md +5 -0
  89. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_data_legend_position.html.erb +93 -0
  90. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_data_legend_position.jsx +131 -0
  91. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_data_legend_position.md +14 -0
  92. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_data_with_labels.html.erb +42 -0
  93. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_data_with_labels.jsx +58 -0
  94. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_data_with_legend.html.erb +24 -0
  95. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_data_with_legend.jsx +38 -0
  96. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_default.html.erb +22 -0
  97. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_default.jsx +33 -0
  98. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_inner_sizes.html.erb +118 -0
  99. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_inner_sizes.jsx +144 -0
  100. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_live_data.jsx +60 -0
  101. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_rounded.html.erb +24 -0
  102. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_rounded.jsx +42 -0
  103. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_with_title.html.erb +38 -0
  104. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_pb_circle_chart_with_title.jsx +52 -0
  105. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/example.yml +29 -0
  106. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/index.js +11 -0
  107. data/app/pb_kits/playbook/pb_pb_circle_chart/pbCircleChartTheme.ts +88 -0
  108. data/app/pb_kits/playbook/pb_pb_circle_chart/pb_circle_chart.html.erb +1 -0
  109. data/app/pb_kits/playbook/pb_pb_circle_chart/pb_circle_chart.rb +28 -0
  110. data/app/pb_kits/playbook/pb_pb_circle_chart/pb_circle_chart.test.jsx +51 -0
  111. data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.tsx +43 -2
  112. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_preview.html.erb +2 -2
  113. data/app/pb_kits/playbook/pb_section_separator/_section_separator.scss +13 -5
  114. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_children.html.erb +23 -0
  115. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_children.jsx +45 -7
  116. data/app/pb_kits/playbook/pb_section_separator/section_separator.html.erb +4 -1
  117. data/app/pb_kits/playbook/pb_section_separator/section_separator.test.js +165 -0
  118. data/app/pb_kits/playbook/pb_timestamp/_timestamp.tsx +24 -8
  119. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_align.html.erb +0 -10
  120. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_align.jsx +0 -9
  121. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_align.md +1 -0
  122. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_default.html.erb +3 -17
  123. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_default.jsx +0 -15
  124. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_default.md +1 -0
  125. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_elapsed.html.erb +0 -2
  126. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_elapsed.jsx +0 -2
  127. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_elapsed.md +5 -0
  128. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_show_current_year.html.erb +12 -0
  129. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_show_current_year.jsx +25 -0
  130. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_show_current_year.md +1 -0
  131. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_show_date.html.erb +4 -0
  132. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_show_date.jsx +17 -0
  133. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_show_date.md +1 -0
  134. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_show_time.html.erb +18 -0
  135. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_show_time.jsx +44 -0
  136. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_show_time.md +1 -0
  137. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_timezones.html.erb +0 -14
  138. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_timezones.jsx +0 -14
  139. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_timezones.md +1 -0
  140. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_unstyled.html.erb +0 -4
  141. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_unstyled.jsx +0 -4
  142. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated.jsx +0 -1
  143. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated.md +5 -0
  144. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_show_current_year.html.erb +16 -0
  145. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_show_current_year.jsx +30 -0
  146. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_show_current_year.md +1 -0
  147. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_show_date.html.erb +16 -0
  148. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_show_date.jsx +30 -0
  149. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_show_date.md +1 -0
  150. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_show_time.html.erb +26 -0
  151. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_show_time.jsx +41 -0
  152. data/app/pb_kits/playbook/pb_timestamp/docs/_timestamp_updated_show_time.md +1 -0
  153. data/app/pb_kits/playbook/pb_timestamp/docs/example.yml +18 -6
  154. data/app/pb_kits/playbook/pb_timestamp/docs/index.js +6 -0
  155. data/app/pb_kits/playbook/pb_timestamp/timestamp.rb +29 -7
  156. data/app/pb_kits/playbook/pb_timestamp/timestamp.test.js +69 -4
  157. data/dist/chunks/{_line_graph-B-n_nsLR.js → _line_graph-CspDMr9b.js} +1 -1
  158. data/dist/chunks/{_typeahead-CS9PvM1x.js → _typeahead-B_wpgm_J.js} +2 -2
  159. data/dist/chunks/{_weekday_stacked-DaFBilv5.js → _weekday_stacked-CXzARuTy.js} +3 -3
  160. data/dist/chunks/componentRegistry-DzmmLR2x.js +1 -0
  161. data/dist/chunks/{lib-BTs5acfO.js → lib-QZuu1ltS.js} +1 -1
  162. data/dist/chunks/pb_form_validation-W63gNcnu.js +1 -0
  163. data/dist/chunks/vendor.js +1 -1
  164. data/dist/menu.yml +15 -1
  165. data/dist/playbook-doc.js +2 -2
  166. data/dist/playbook-rails-react-bindings.js +1 -1
  167. data/dist/playbook-rails.js +1 -1
  168. data/dist/playbook.css +1 -1
  169. data/lib/playbook/engine.rb +0 -1
  170. data/lib/playbook/forms/builder/form_field_builder.rb +9 -1
  171. data/lib/playbook/kit_base.rb +23 -2
  172. data/lib/playbook/version.rb +1 -1
  173. metadata +106 -27
  174. data/app/pb_kits/playbook/pb_timestamp/docs/_time_stamp_default.md +0 -1
  175. data/dist/chunks/pb_form_validation-CKkaQFX3.js +0 -1
@@ -0,0 +1,48 @@
1
+ import React from 'react'
2
+ import { PbBarGraph } from 'playbook-ui'
3
+
4
+
5
+ const chartData = [{
6
+ name: 'Installation',
7
+ data: [-475, 400, -1000, 354, -856],
8
+ threshold: 0
9
+ }, {
10
+ name: 'Manufacturing',
11
+ data: [1475, 200, 1000, 654, -656],
12
+ threshold: 0
13
+ },
14
+ {
15
+ name: 'Sales & Distribution',
16
+ data: [1270, 100, -1200, 554, 756],
17
+ threshold: 0
18
+ }]
19
+
20
+ const chartOptions = {
21
+ series: chartData,
22
+ title: {
23
+ text: "Bar Graph with Negative Numbers",
24
+ },
25
+ xAxis: {
26
+ categories: ["Jan", "Feb", "Mar", "Apr", "May"],
27
+ },
28
+ yAxis: {
29
+ title: {
30
+ text: "Number of Employees",
31
+ },
32
+ },
33
+ legend: { enabled: true },
34
+ };
35
+
36
+
37
+ const PbBarGraphStacked = () => {
38
+
39
+ return(
40
+ <div>
41
+ <PbBarGraph
42
+ options={chartOptions}
43
+ />
44
+ </div>
45
+ )
46
+ }
47
+
48
+ export default PbBarGraphStacked
@@ -0,0 +1,68 @@
1
+ <% chart_data = [{
2
+ name: 'Number of Installations',
3
+ data: [1475,200,3000,654,656]
4
+ }, {
5
+ type: 'spline',
6
+ name: 'Percentage',
7
+ data: [48, 70, 25, 55, 72],
8
+ color: '#F9BB00',
9
+ yAxis: 1
10
+ }] %>
11
+
12
+
13
+ <% chart_options = {
14
+ series: chart_data,
15
+ title: {
16
+ text: "Bar Graph with Secondary Y-axis",
17
+ },
18
+ xAxis: {
19
+ categories: ["Jan", "Feb", "Mar", "Apr", "May"],
20
+ },
21
+ yAxis: [{
22
+ format: "{value}%",
23
+ labels: {
24
+ style: {
25
+ fontFamily: "Power Centra",
26
+ color: "#C1CDD6",
27
+ fontWeight: "bold",
28
+ fontSize: "12px",
29
+ },
30
+ },
31
+ title: {
32
+ text: "Number of Employees",
33
+ style: {
34
+ fontFamily: "Power Centra",
35
+ color: "#C1CDD6",
36
+ fontWeight: "bold",
37
+ fontSize: "12px",
38
+ },
39
+ },
40
+ }, {
41
+ labels: {
42
+ style: {
43
+ fontFamily: "Power Centra",
44
+ color: "#C1CDD6",
45
+ fontWeight: "bold",
46
+ fontSize: "12px",
47
+ },
48
+ },
49
+ title: {
50
+ text: "Percentage",
51
+ style: {
52
+ fontFamily: "Power Centra",
53
+ color: "#C1CDD6",
54
+ fontWeight: "bold",
55
+ fontSize: "12px",
56
+ },
57
+ },
58
+
59
+ opposite: true,
60
+ min: 0,
61
+ max: 100
62
+ }],
63
+ legend: { enabled: true },
64
+ }
65
+ %>
66
+
67
+ <%= pb_rails("pb_bar_graph", props: {options: chart_options}) %>
68
+
@@ -0,0 +1,81 @@
1
+ import React from 'react'
2
+ import { PbBarGraph } from 'playbook-ui'
3
+
4
+ import colors from '../../tokens/exports/_colors.module.scss'
5
+ import typography from '../../tokens/exports/_typography.module.scss'
6
+
7
+ const chartData = [{
8
+ name: 'Number of Installations',
9
+ data: [1475, 200, 3000, 654, 656],
10
+ }, {
11
+ type: 'spline',
12
+ name: 'Percentage',
13
+ data: [48, 70, 25, 55, 72],
14
+ color: '#F9BB00',
15
+ yAxis: 1
16
+ }]
17
+
18
+ const chartOptions = {
19
+ series: chartData,
20
+ title: {
21
+ text: "Bar Graph with Secondary Y-axis",
22
+ },
23
+ xAxis: {
24
+ categories: ["Jan", "Feb", "Mar", "Apr", "May"],
25
+ },
26
+ yAxis: [{
27
+ labels: {
28
+ style: {
29
+ fontFamily: typography.font_family_base,
30
+ color: colors.text_lt_lighter,
31
+ fontWeight: typography.bold,
32
+ fontSize: typography.text_smaller,
33
+ },
34
+ },
35
+ title: {
36
+ text: "Number of Employees",
37
+ style: {
38
+ fontFamily: typography.font_family_base,
39
+ color: colors.text_lt_lighter,
40
+ fontWeight: typography.bold,
41
+ fontSize: typography.text_smaller,
42
+ },
43
+ },
44
+ }, {
45
+ labels: {
46
+ style: {
47
+ fontFamily: typography.font_family_base,
48
+ color: colors.text_lt_lighter,
49
+ fontWeight: typography.bold,
50
+ fontSize: typography.text_smaller,
51
+ },
52
+ },
53
+ title: {
54
+ text: "Percentage",
55
+ style: {
56
+ fontFamily: typography.font_family_base,
57
+ color: colors.text_lt_lighter,
58
+ fontWeight: typography.bold,
59
+ fontSize: typography.text_smaller,
60
+ },
61
+ },
62
+
63
+ opposite: true,
64
+ min: 0,
65
+ max: 100
66
+ }],
67
+ legend: { enabled: true },
68
+ }
69
+
70
+ const PbBarGraphSecondaryYAxis = () => {
71
+
72
+ return (
73
+ <div>
74
+ <PbBarGraph
75
+ options={chartOptions}
76
+ />
77
+ </div>
78
+ )
79
+ }
80
+
81
+ export default PbBarGraphSecondaryYAxis
@@ -0,0 +1,31 @@
1
+ <% chart_data = [{
2
+ name: 'Number of Installations',
3
+ data: [1475,200,3000,654,656]
4
+ }, {
5
+ type: 'spline',
6
+ name: 'Trend Line',
7
+ data: [1975, 600, 2500, 924, 500],
8
+ color: '#F9BB00',
9
+ }] %>
10
+
11
+ <% chart_options = {
12
+ series: chart_data,
13
+ title: {
14
+ text: 'Bar Graph with Spline',
15
+ },
16
+ subtitle: {
17
+ text: 'Source: thesolarfoundation.com',
18
+ },
19
+ xAxis: {
20
+ categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May'],
21
+ },
22
+ yAxis: {
23
+ title: {
24
+ text: 'Number of Employees',
25
+ },
26
+ },
27
+ legend: { enabled: true },
28
+ }
29
+ %>
30
+
31
+ <%= pb_rails("pb_bar_graph", props: {options: chart_options}) %>
@@ -0,0 +1,42 @@
1
+ import React from 'react'
2
+ import { PbBarGraph } from 'playbook-ui'
3
+
4
+
5
+ const chartData = [{
6
+ name: 'Number of Installations',
7
+ data: [1475, 200, 3000, 654, 656],
8
+ }, {
9
+ type: 'spline',
10
+ name: 'Trend Line',
11
+ data: [1975, 600, 2500, 924, 500],
12
+ color: '#F9BB00',
13
+ }]
14
+
15
+ const chartOptions = {
16
+ series: chartData,
17
+ title: {
18
+ text: "Bar Graph with Spline",
19
+ },
20
+ xAxis: {
21
+ categories: ["Jan", "Feb", "Mar", "Apr", "May"],
22
+ },
23
+ yAxis: {
24
+ title: {
25
+ text: "Number of Employees",
26
+ },
27
+ },
28
+ legend: { enabled: true },
29
+ };
30
+
31
+ const PbBarGraphSpline = () => {
32
+
33
+ return (
34
+ <div>
35
+ <PbBarGraph
36
+ options={chartOptions}
37
+ />
38
+ </div>
39
+ )
40
+ }
41
+
42
+ export default PbBarGraphSpline
@@ -0,0 +1,2 @@
1
+ A spline can be added by including a separate chart data with the `type: 'spline'` attribute.
2
+ A color can also be specified for the spline.
@@ -0,0 +1,35 @@
1
+ <% chart_data = [{
2
+ name: 'Installation',
3
+ data: [1475, 200, 3000, 654, 656],
4
+ },
5
+ {
6
+ name: 'Manufacturing',
7
+ data: [1270, 800, 200, 454, 956],
8
+ }, {
9
+ name: 'Sales & Distribution',
10
+ data: [975, 1600, 1500, 924, 500],
11
+ }] %>
12
+
13
+ <% chart_options = {
14
+ series: chart_data,
15
+ title: {
16
+ text: "Bar Graph with Stacked Columns",
17
+ },
18
+ xAxis: {
19
+ categories: ["Jan", "Feb", "Mar", "Apr", "May"],
20
+ },
21
+ yAxis: {
22
+ title: {
23
+ text: "Number of Employees",
24
+ },
25
+ },
26
+ plotOptions: {
27
+ column: {
28
+ stacking: 'normal',
29
+ borderWidth: 0,
30
+ }
31
+ },
32
+ legend: { enabled: true },
33
+ } %>
34
+
35
+ <%= pb_rails("pb_bar_graph", props: {options: chart_options}) %>
@@ -0,0 +1,51 @@
1
+ import React from 'react'
2
+ import { PbBarGraph } from 'playbook-ui'
3
+
4
+
5
+ const chartData = [{
6
+ name: 'Installation',
7
+ data: [1475, 200, 3000, 654, 656],
8
+ },
9
+ {
10
+ name: 'Manufacturing',
11
+ data: [1270, 800, 200, 454, 956],
12
+ }, {
13
+ name: 'Sales & Distribution',
14
+ data: [975, 1600, 1500, 924, 500],
15
+ }]
16
+
17
+ const chartOptions = {
18
+ series: chartData,
19
+ title: {
20
+ text: "Bar Graph with Stacked Columns",
21
+ },
22
+ xAxis: {
23
+ categories: ["Jan", "Feb", "Mar", "Apr", "May"],
24
+ },
25
+ yAxis: {
26
+ title: {
27
+ text: "Number of Employees",
28
+ },
29
+ },
30
+ plotOptions: {
31
+ column: {
32
+ stacking: 'normal',
33
+ borderWidth: 0,
34
+ }
35
+ },
36
+ legend: { enabled: true },
37
+ };
38
+
39
+
40
+ const PbBarGraphStacked = () => {
41
+
42
+ return (
43
+ <div>
44
+ <PbBarGraph
45
+ options={chartOptions}
46
+ />
47
+ </div>
48
+ )
49
+ }
50
+
51
+ export default PbBarGraphStacked
@@ -0,0 +1,27 @@
1
+ examples:
2
+
3
+ rails:
4
+ - pb_bar_graph_default: Default
5
+ - pb_bar_graph_legend: Legend
6
+ - pb_bar_graph_legend_position: Legend Position
7
+ - pb_bar_graph_height: Height
8
+ - pb_bar_graph_spline: Spline
9
+ - pb_bar_graph_colors: Color Overrides
10
+ - pb_bar_graph_stacked: Stacked
11
+ - pb_bar_graph_negative_numbers: Negative Numbers
12
+ - pb_bar_graph_secondary_y_axis: Secondary Y-Axis
13
+ - pb_bar_graph_horizontal: Horizontal Bar Graph
14
+
15
+
16
+ react:
17
+ - pb_bar_graph_default: Default
18
+ - pb_bar_graph_legend: Legend
19
+ - pb_bar_graph_legend_position: Legend Position
20
+ - pb_bar_graph_legend_non_clickable: Legend Non Clickable
21
+ - pb_bar_graph_height: Height
22
+ - pb_bar_graph_spline: Spline
23
+ - pb_bar_graph_colors: Color Overrides
24
+ - pb_bar_graph_stacked: Stacked
25
+ - pb_bar_graph_negative_numbers: Negative Numbers
26
+ - pb_bar_graph_secondary_y_axis: Secondary Y-Axis
27
+ - pb_bar_graph_horizontal: Horizontal Bar Graph
@@ -0,0 +1,11 @@
1
+ export { default as PbBarGraphDefault } from './_pb_bar_graph_default.jsx'
2
+ export { default as PbBarGraphLegend } from './_pb_bar_graph_legend.jsx'
3
+ export { default as PbBarGraphLegendPosition } from './_pb_bar_graph_legend_position.jsx'
4
+ export { default as PbBarGraphLegendNonClickable } from './_pb_bar_graph_legend_non_clickable.jsx'
5
+ export { default as PbBarGraphHeight } from './_pb_bar_graph_height.jsx'
6
+ export { default as PbBarGraphSpline } from './_pb_bar_graph_spline.jsx'
7
+ export { default as PbBarGraphColors } from './_pb_bar_graph_colors.jsx'
8
+ export { default as PbBarGraphStacked } from './_pb_bar_graph_stacked.jsx'
9
+ export { default as PbBarGraphNegativeNumbers } from './_pb_bar_graph_negative_numbers.jsx'
10
+ export { default as PbBarGraphSecondaryYAxis } from './_pb_bar_graph_secondary_y_axis.jsx'
11
+ export { default as PbBarGraphHorizontal } from './_pb_bar_graph_horizontal.jsx'
@@ -0,0 +1,106 @@
1
+ import colors from '../tokens/exports/_colors.module.scss'
2
+ import typography from '../tokens/exports/_typography.module.scss'
3
+
4
+ const barGraphTheme = {
5
+ title: {
6
+ text: "",
7
+ style: {
8
+ color: colors.text_lt_default,
9
+ fontFamily: typography.font_family_base,
10
+ fontWeight: typography.bold,
11
+ fontSize: typography.heading_3,
12
+ },
13
+ },
14
+ subtitle: {
15
+ text: "",
16
+ style: {
17
+ fontFamily: typography.font_family_base,
18
+ color: colors.text_lt_light,
19
+ fontWeight: typography.regular,
20
+ fontSize: typography.text_base,
21
+ },
22
+ },
23
+ chart: {
24
+ type: "column",
25
+ },
26
+ tooltip: {
27
+ backgroundColor: {
28
+ linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 },
29
+ stops: [
30
+ [0, colors.bg_dark],
31
+ [1, colors.bg_dark],
32
+ ],
33
+ },
34
+ style: {
35
+ fontFamily: typography.font_family_base,
36
+ color: colors.text_dk_default,
37
+ fontWeight: typography.regular,
38
+ fontSize: typography.text_smaller,
39
+ },
40
+ },
41
+ colors: [
42
+ colors.data_1,
43
+ colors.data_2,
44
+ colors.data_3,
45
+ colors.data_4,
46
+ colors.data_5,
47
+ colors.data_6,
48
+ colors.data_7,
49
+ ],
50
+ credits: { enabled: false },
51
+ legend: {
52
+ enabled: false,
53
+ itemStyle: {
54
+ color: colors.text_lt_light,
55
+ fill: colors.text_lt_light,
56
+ fontSize: typography.text_smaller,
57
+ },
58
+ },
59
+ xAxis: {
60
+ gridLineWidth: 0,
61
+ lineColor: colors.border_light,
62
+ tickColor: colors.border_light,
63
+ labels: {
64
+ style: {
65
+ fontFamily: typography.font_family_base,
66
+ color: colors.text_lt_lighter,
67
+ fontWeight: typography.bold,
68
+ fontSize: typography.text_smaller,
69
+ },
70
+ },
71
+ title: {
72
+ style: {
73
+ color: colors.text_lt_default,
74
+ fontFamily: typography.font_family_base,
75
+ fontWeight: typography.regular,
76
+ fontSize: typography.heading_4,
77
+ },
78
+ },
79
+ },
80
+ yAxis: {
81
+ alternateGridColor: undefined as string | undefined,
82
+ minorTickInterval: null as number | null,
83
+ gridLineColor: colors.border_light,
84
+ minorGridLineColor: colors.border_light,
85
+ lineWidth: 0,
86
+ tickWidth: 0,
87
+ labels: {
88
+ style: {
89
+ fontFamily: typography.font_family_base,
90
+ color: colors.text_lt_lighter,
91
+ fontWeight: typography.bold,
92
+ fontSize: typography.text_smaller,
93
+ },
94
+ },
95
+ title: {
96
+ style: {
97
+ fontFamily: typography.font_family_base,
98
+ color: colors.text_lt_lighter,
99
+ fontWeight: typography.bold,
100
+ fontSize: typography.text_smaller,
101
+ },
102
+ },
103
+ },
104
+ }
105
+
106
+ export default barGraphTheme;
@@ -0,0 +1 @@
1
+ <%= react_component('PbBarGraph', object.react_props) %>
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Playbook
4
+ module PbPbBarGraph
5
+ class PbBarGraph < ::Playbook::KitBase
6
+ prop :options, default: {}
7
+ prop :container_props, default: {}
8
+
9
+ def react_props
10
+ {
11
+ options: options,
12
+ containerProps: container_props_hash,
13
+ }
14
+ end
15
+
16
+ def container_props_hash
17
+ container_props.merge({
18
+ id: id,
19
+ className: classname,
20
+ }).compact
21
+ end
22
+
23
+ def classname
24
+ generate_classname("pb_pb_bar_graph")
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,31 @@
1
+ import React from 'react';
2
+ import { render, screen } from '../utilities/test-utils';
3
+ import PbBarGraph from './_pb_bar_graph';
4
+
5
+ beforeEach(() => {
6
+ // Silences error logs within the test suite.
7
+ jest.spyOn(console, 'error');
8
+ jest.spyOn(console, 'warn');
9
+ console.error.mockImplementation(() => {});
10
+ console.warn.mockImplementation(() => {});
11
+ });
12
+
13
+ afterEach(() => {
14
+ console.error.mockRestore();
15
+ console.warn.mockRestore();
16
+ });
17
+
18
+ const testId = 'bargraph1';
19
+
20
+ test('bargraph uses exact classname', () => {
21
+ render(
22
+ <PbBarGraph
23
+ className='super_important_class'
24
+ data={{ testid: testId }}
25
+ id='bar-default'
26
+ />
27
+ );
28
+
29
+ const kit = screen.getByTestId(testId);
30
+ expect(kit).toHaveClass('super_important_class');
31
+ });
@@ -0,0 +1,3 @@
1
+ .pb_pb_circle_chart {
2
+
3
+ }
@@ -0,0 +1,62 @@
1
+
2
+ import React, { useMemo } from 'react'
3
+ import classnames from 'classnames'
4
+ import { buildAriaProps, buildCss, buildDataProps, buildHtmlProps } from '../utilities/props'
5
+ import Highcharts from "highcharts"
6
+ import HighchartsReact from "highcharts-react-official"
7
+ import pbCircleGraphTheme from './pbCircleChartTheme'
8
+ import { globalProps } from '../utilities/globalProps'
9
+
10
+ type PbCircleChartProps = {
11
+ aria?: { [key: string]: string },
12
+ className?: string,
13
+ data?: { [key: string]: string },
14
+ id?: string,
15
+ htmlOptions?: { [key: string]: string | number | boolean | (() => void) };
16
+ options: Record<string, unknown>
17
+ }
18
+
19
+ const PbCircleChart = (props: PbCircleChartProps) => {
20
+ const {
21
+ aria = {},
22
+ className,
23
+ data = {},
24
+ id,
25
+ htmlOptions = {},
26
+ options
27
+ } = props
28
+
29
+ const ariaProps = buildAriaProps(aria)
30
+ const dataProps = buildDataProps(data)
31
+ const htmlProps = buildHtmlProps(htmlOptions);
32
+ const classes = classnames(buildCss('pb_pb_circle_chart'), globalProps(props), className)
33
+
34
+ const mergedOptions = useMemo(() => {
35
+ if (!options || typeof options !== "object") {
36
+ // eslint-disable-next-line no-console
37
+ console.error("❌ Invalid options passed to <PbCircleChart />", options)
38
+ return {}
39
+ }
40
+
41
+ return Highcharts.merge({}, pbCircleGraphTheme, options)
42
+ }, [options])
43
+
44
+ return (
45
+
46
+ <div>
47
+ <HighchartsReact
48
+ containerProps={{
49
+ className: classnames(globalProps, className),
50
+ id: id,
51
+ ...ariaProps,
52
+ ...dataProps,
53
+ ...htmlProps
54
+ }}
55
+ highcharts={Highcharts}
56
+ options={mergedOptions}
57
+ />
58
+ </div>
59
+ )
60
+ }
61
+
62
+ export default PbCircleChart
@@ -0,0 +1,31 @@
1
+ <% data = [
2
+ {
3
+ name: "Waiting for Calls",
4
+ y: 41,
5
+ },
6
+ {
7
+ name: "On Call",
8
+ y: 49,
9
+ },
10
+ {
11
+ name: "After Call",
12
+ y: 10,
13
+ },
14
+ ] %>
15
+
16
+ <% chart_options = {
17
+ series: [{
18
+ data: data,
19
+ innerSize: '100%',
20
+ borderWidth: '20',
21
+ }],
22
+ } %>
23
+
24
+ <div style="position: relative;">
25
+ <%= pb_rails("pb_circle_chart", props: { options: chart_options }) %>
26
+
27
+ <div class="pb-circle-chart-block"
28
+ style="position: absolute; inset: 0; display: flex; justify-content: center; align-items: center; z-index: 1; text-align: center; pointer-events: none;">
29
+ <%= pb_rails("title", props: { size: 1, tag: "div", text: "83" }) %>
30
+ </div>
31
+ </div>