playbook_ui 14.22.0 → 14.23.0.pre.alpha.PLAY2148selectclassnamessinglespacesfix9144

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 (163) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/Components/SubRowHeaderRow.tsx +32 -11
  3. data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +0 -1
  4. data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableState.ts +3 -3
  5. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +5 -0
  6. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +6 -0
  7. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.html.erb +1 -1
  8. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +2 -0
  9. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_custom_sort.jsx +65 -0
  10. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_custom_sort.md +5 -0
  11. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_row_styling.html.erb +46 -0
  12. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_row_styling_rails.md +7 -0
  13. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header.jsx +69 -0
  14. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header.md +1 -0
  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 +14 -8
  20. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +3 -0
  21. data/app/pb_kits/playbook/pb_advanced_table/table_body.rb +3 -1
  22. data/app/pb_kits/playbook/pb_advanced_table/table_header.html.erb +5 -1
  23. data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +36 -0
  24. data/app/pb_kits/playbook/pb_advanced_table/table_row.html.erb +11 -2
  25. data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +2 -0
  26. data/app/pb_kits/playbook/pb_badge/_badge.scss +5 -6
  27. data/app/pb_kits/playbook/pb_bar_graph/barGraphTheme.ts +106 -0
  28. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_colors.jsx +33 -15
  29. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_default.jsx +33 -15
  30. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_height.jsx +52 -22
  31. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_height.md +3 -0
  32. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_horizontal.jsx +12 -16
  33. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_legend.jsx +31 -15
  34. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_legend_non_clickable.jsx +39 -16
  35. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_legend_position.jsx +86 -38
  36. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_legend_position.md +1 -1
  37. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_negative_numbers.jsx +32 -15
  38. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_secondary_y_axis.jsx +72 -22
  39. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_secondary_y_axis.md +1 -1
  40. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_spline.jsx +31 -15
  41. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_stacked.jsx +37 -16
  42. data/app/pb_kits/playbook/pb_bar_graph/docs/_description.md +1 -3
  43. data/app/pb_kits/playbook/pb_bar_graph/docs/example.yml +1 -3
  44. data/app/pb_kits/playbook/pb_bar_graph/docs/index.js +0 -2
  45. data/app/pb_kits/playbook/pb_body/docs/_body_truncate.jsx +3 -3
  46. data/app/pb_kits/playbook/pb_body/docs/_body_truncate_react.md +4 -0
  47. data/app/pb_kits/playbook/pb_checkbox/checkbox.rb +12 -1
  48. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_indeterminate.html.erb +1 -1
  49. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_indeterminate_rails.md +2 -1
  50. data/app/pb_kits/playbook/pb_checkbox/index.js +3 -1
  51. data/app/pb_kits/playbook/pb_circle_chart/circleChartTheme.ts +36 -1
  52. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_block.jsx +71 -26
  53. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_colors.jsx +29 -16
  54. data/app/pb_kits/playbook/pb_circle_chart/docs/{_circle_chart_colors.md → _circle_chart_colors_rails.md} +1 -1
  55. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_colors_react.md +2 -0
  56. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_custom_tooltip.jsx +28 -16
  57. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_custom_tooltip.md +4 -2
  58. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_default.jsx +23 -15
  59. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_inner_sizes.jsx +81 -51
  60. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_legend_position.jsx +103 -75
  61. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_legend_position.md +4 -7
  62. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_live_data.jsx +19 -13
  63. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_rounded.jsx +30 -17
  64. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_with_labels.jsx +34 -20
  65. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_with_legend_kit.jsx +29 -20
  66. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_with_title.jsx +28 -20
  67. data/app/pb_kits/playbook/pb_circle_chart/docs/_description.md +1 -0
  68. data/app/pb_kits/playbook/pb_circle_chart/docs/example.yml +0 -1
  69. data/app/pb_kits/playbook/pb_circle_chart/docs/index.js +0 -1
  70. data/app/pb_kits/playbook/pb_draggable/context/index.tsx +12 -4
  71. data/app/pb_kits/playbook/pb_draggable/context/types.ts +5 -2
  72. data/app/pb_kits/playbook/pb_gauge/docs/_description.md +1 -0
  73. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_colors.jsx +32 -15
  74. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_colors_react.md +2 -0
  75. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_complex.jsx +35 -9
  76. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_complex_react.md +1 -0
  77. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_default.jsx +26 -14
  78. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_disable_animation.jsx +32 -15
  79. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_full_circle.jsx +45 -17
  80. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_height.jsx +59 -22
  81. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_live_data.jsx +40 -9
  82. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_min_max.jsx +50 -18
  83. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_sizing.jsx +31 -18
  84. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_title.jsx +34 -17
  85. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_units.jsx +64 -23
  86. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_units_react.md +1 -0
  87. data/app/pb_kits/playbook/pb_gauge/docs/example.yml +0 -1
  88. data/app/pb_kits/playbook/pb_gauge/docs/index.js +0 -1
  89. data/app/pb_kits/playbook/pb_gauge/gaugeTheme.ts +7 -1
  90. data/app/pb_kits/playbook/pb_line_graph/docs/_description.md +1 -3
  91. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_colors.jsx +36 -17
  92. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_colors_react.md +3 -0
  93. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_default.jsx +31 -16
  94. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_height.jsx +63 -31
  95. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_height.md +3 -0
  96. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_legend.jsx +35 -16
  97. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_legend_nonclickable.jsx +41 -16
  98. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_legend_position.jsx +107 -62
  99. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_legend_position.md +4 -7
  100. data/app/pb_kits/playbook/pb_line_graph/docs/example.yml +0 -1
  101. data/app/pb_kits/playbook/pb_line_graph/docs/index.js +0 -1
  102. data/app/pb_kits/playbook/pb_line_graph/lineGraphTheme.ts +16 -1
  103. data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.tsx +30 -17
  104. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_strict_mode.html.erb +10 -0
  105. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_strict_mode.jsx +26 -0
  106. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_strict_mode.md +3 -0
  107. data/app/pb_kits/playbook/pb_phone_number_input/docs/example.yml +2 -0
  108. data/app/pb_kits/playbook/pb_phone_number_input/docs/index.js +1 -0
  109. data/app/pb_kits/playbook/pb_phone_number_input/phone_number_input.rb +3 -0
  110. data/app/pb_kits/playbook/pb_select/select.rb +4 -2
  111. data/app/pb_kits/playbook/pb_table/_table.tsx +4 -4
  112. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_columns.jsx +8 -8
  113. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_columns_react.md +1 -1
  114. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_left_columns.jsx +12 -12
  115. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_left_columns_react.md +3 -3
  116. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_right_columns.jsx +12 -12
  117. data/app/pb_kits/playbook/pb_table/docs/_table_sticky_right_columns_react.md +3 -3
  118. data/app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.html.erb +1 -0
  119. data/app/pb_kits/playbook/pb_title/docs/_title_truncate.jsx +3 -3
  120. data/app/pb_kits/playbook/pb_title/docs/_title_truncate_react.md +4 -0
  121. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_click_open.html.erb +14 -0
  122. data/app/pb_kits/playbook/pb_tooltip/docs/_tooltip_click_open_rails.md +1 -0
  123. data/app/pb_kits/playbook/pb_tooltip/docs/example.yml +1 -0
  124. data/app/pb_kits/playbook/pb_tooltip/index.js +59 -36
  125. data/app/pb_kits/playbook/pb_tooltip/tooltip.rb +9 -2
  126. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_preserve_input.html.erb +18 -0
  127. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_preserve_input_rails.md +1 -0
  128. data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +1 -0
  129. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +3 -0
  130. data/dist/chunks/_line_graph-BfCo79KE.js +1 -0
  131. data/dist/chunks/_typeahead-Db4YQA5c.js +6 -0
  132. data/dist/chunks/_weekday_stacked-DfH_cGOX.js +61 -0
  133. data/dist/chunks/lib-DnQyMxO1.js +29 -0
  134. data/dist/chunks/{pb_form_validation-Dx1C9XCK.js → pb_form_validation-kl-4Jv4t.js} +1 -1
  135. data/dist/chunks/vendor.js +1 -1
  136. data/dist/menu.yml +68 -8
  137. data/dist/playbook-doc.js +2 -2
  138. data/dist/playbook-rails-react-bindings.js +1 -1
  139. data/dist/playbook-rails.js +1 -1
  140. data/dist/playbook.css +1 -1
  141. data/lib/playbook/version.rb +2 -2
  142. metadata +45 -25
  143. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_custom.jsx +0 -72
  144. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_custom.md +0 -6
  145. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.jsx +0 -64
  146. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_pb_styles.md +0 -1
  147. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_pb_styles.jsx +0 -38
  148. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_pb_styles.md +0 -1
  149. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_pb_styles.jsx +0 -30
  150. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_pb_styles.md +0 -1
  151. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_pb_styles.jsx +0 -52
  152. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_pb_styles.md +0 -1
  153. data/dist/chunks/_typeahead-dOC1gq2X.js +0 -22
  154. data/dist/chunks/_weekday_stacked-Bh8iY5uA.js +0 -45
  155. data/dist/chunks/lib-DtCftrUN.js +0 -29
  156. /data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_row_styling.md → _advanced_table_row_styling_react.md} +0 -0
  157. /data/app/pb_kits/playbook/pb_body/docs/{_body_truncate.md → _body_truncate_rails.md} +0 -0
  158. /data/app/pb_kits/playbook/pb_gauge/docs/{_gauge_colors.md → _gauge_colors_rails.md} +0 -0
  159. /data/app/pb_kits/playbook/pb_gauge/docs/{_gauge_complex.md → _gauge_complex_rails.md} +0 -0
  160. /data/app/pb_kits/playbook/pb_line_graph/docs/{_line_graph_colors.md → _line_graph_colors_rails.md} +0 -0
  161. /data/app/pb_kits/playbook/pb_title/docs/{_title_truncate.md → _title_truncate_rails.md} +0 -0
  162. /data/app/pb_kits/playbook/pb_tooltip/docs/{_tooltip_click_open.md → _tooltip_click_open_react.md} +0 -0
  163. /data/app/pb_kits/playbook/pb_typeahead/docs/{_typeahead_preserve_input.md → _typeahead_preserve_input_react.md} +0 -0
@@ -1,5 +1,7 @@
1
1
  import React from 'react'
2
- import LineGraph from '../../pb_line_graph/_line_graph'
2
+ import lineGraphTheme from '../lineGraphTheme'
3
+ import Highcharts from "highcharts"
4
+ import HighchartsReact from "highcharts-react-official"
3
5
  import Title from '../../pb_title/_title'
4
6
 
5
7
  const data = [{
@@ -19,66 +21,109 @@ const data = [{
19
21
  data: [12908, 5948, 8105, 11248, 8989, 11816, 18274, 18111],
20
22
  }]
21
23
 
22
- const LineGraphLegendPosition = (props) => (
23
- <div>
24
- <Title
25
- paddingBottom="sm"
26
- paddingTop="sm"
27
- size={4}
28
- tag="h4"
29
- text="align | verticalAlign"
30
- />
31
- <LineGraph
32
- align='right'
33
- axisTitle="Number of Employees"
34
- chartData={data}
35
- id="legend-position-line"
36
- legend
37
- title="Alignment of Legend"
38
- verticalAlign="top"
39
- xAxisCategories={['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug']}
40
- yAxisMin={0}
41
- {...props}
42
- />
43
- <Title
44
- paddingBottom="sm"
45
- paddingTop="sm"
46
- size={4}
47
- tag="h4"
48
- text="layout"
49
- />
50
- <LineGraph
51
- axisTitle="Number of Employees"
52
- chartData={data}
53
- id="legend-position-line-1"
54
- layout="vertical"
55
- legend
56
- title="Layout of Legend"
57
- xAxisCategories={['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug']}
58
- yAxisMin={0}
59
- {...props}
60
- />
61
- <Title
62
- paddingBottom="sm"
63
- paddingTop="sm"
64
- size={4}
65
- tag="h4"
66
- text="x | y"
67
- />
68
- <LineGraph
69
- axisTitle="Number of Employees"
70
- chartData={data}
71
- id="legend-position-line-2"
72
- layout="vertical"
73
- legend
74
- title="Offset of Legend"
75
- x={100}
76
- xAxisCategories={['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug']}
77
- y={10}
78
- yAxisMin={0}
79
- {...props}
80
- />
81
- </div>
82
- )
24
+ const categories = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug']
25
+
26
+ const LineGraphLegendPosition = (props) => {
27
+ const chartOptionsFirst = {
28
+ title: { text: "Alignment of Legend" },
29
+ series: data,
30
+ xAxis: {
31
+ categories: categories,
32
+ },
33
+ yAxis: {
34
+ min: 0,
35
+ title: {
36
+ text: "Number of Employees",
37
+ },
38
+ },
39
+ legend: {
40
+ enabled: true,
41
+ align: 'right',
42
+ verticalAlign: 'top'
43
+ },
44
+ }
45
+
46
+ const chartOptionsSecond = {
47
+ title: { text: "Layout of Legend" },
48
+ series: data,
49
+ xAxis: {
50
+ categories: categories,
51
+ },
52
+ yAxis: {
53
+ min: 0,
54
+ title: {
55
+ text: "Number of Employees",
56
+ },
57
+ },
58
+ legend: {
59
+ enabled: true,
60
+ layout: 'vertical'
61
+ },
62
+ }
63
+
64
+ const chartOptionsThird = {
65
+ title: { text: "Offset of Legend" },
66
+ series: data,
67
+ xAxis: {
68
+ categories: categories,
69
+ },
70
+ yAxis: {
71
+ min: 0,
72
+ title: {
73
+ text: "Number of Employees",
74
+ },
75
+ },
76
+ legend: {
77
+ enabled: true,
78
+ layout: 'vertical',
79
+ x: 100,
80
+ y: 10
81
+ },
82
+ }
83
+
84
+ const optionsFirst = Highcharts.merge({}, lineGraphTheme, chartOptionsFirst)
85
+ const optionsSecond = Highcharts.merge({}, lineGraphTheme, chartOptionsSecond)
86
+ const optionsThird = Highcharts.merge({}, lineGraphTheme, chartOptionsThird)
87
+
88
+ return (
89
+ <div>
90
+ <Title
91
+ paddingY="sm"
92
+ size={4}
93
+ tag="h4"
94
+ text="align | verticalAlign"
95
+ {...props}
96
+ />
97
+ <HighchartsReact
98
+ highcharts={Highcharts}
99
+ options={optionsFirst}
100
+ />
101
+
102
+ <Title
103
+ paddingY="sm"
104
+ size={4}
105
+ tag="h4"
106
+ text="layout"
107
+ {...props}
108
+ />
109
+ <HighchartsReact
110
+ highcharts={Highcharts}
111
+ options={optionsSecond}
112
+ />
113
+
114
+ <Title
115
+ paddingY="sm"
116
+ size={4}
117
+ tag="h4"
118
+ text="x | y"
119
+ {...props}
120
+ />
121
+ <HighchartsReact
122
+ highcharts={Highcharts}
123
+ options={optionsThird}
124
+ />
125
+ </div>
126
+ )
127
+ }
83
128
 
84
129
  export default LineGraphLegendPosition
@@ -1,17 +1,14 @@
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)
8
8
 
9
- -
10
-
11
- - `layout` determines the position of the legend items
9
+ `layout` determines the position of the legend items
12
10
  `layout: proximate` will place the legend items as close as possible to the graphs they're representing. It will also determine whether to place the legend above/below or on the side of the plot area, if the legend is in a corner.
13
11
 
14
- - `x` offsets the legend relative to its horizontal alignmnet. Negative x moves it to the left, positive x moves it to the right
15
-
12
+ `x` offsets the legend relative to its horizontal alignment. Negative x moves it to the left, positive x moves it to the right
16
13
 
17
- - `y` offsets the legend relative to its vertical alignmnet. Negative y moves it up, positive y moves it down.
14
+ `y` offsets the legend relative to its vertical alignment. Negative y moves it up, positive y moves it down.
@@ -11,7 +11,6 @@ examples:
11
11
 
12
12
  react:
13
13
  - line_graph_default: Default
14
- - line_graph_pb_styles: Playbook Styles
15
14
  - line_graph_legend: Legend
16
15
  - line_graph_legend_position: Legend Position
17
16
  - line_graph_legend_nonclickable: Legend Nonclickable
@@ -4,4 +4,3 @@ export { default as LineGraphLegendPosition } from './_line_graph_legend_positio
4
4
  export { default as LineGraphLegendNonclickable } from './_line_graph_legend_nonclickable.jsx'
5
5
  export { default as LineGraphHeight } from './_line_graph_height.jsx'
6
6
  export { default as LineGraphColors } from './_line_graph_colors.jsx'
7
- export { default as LineGraphPbStyles } from './_line_graph_pb_styles.jsx'
@@ -50,7 +50,21 @@ const lineGraphTheme = {
50
50
  },
51
51
  },
52
52
  credits: { enabled: false },
53
- legend: { enabled: false },
53
+ legend: {
54
+ enabled: false,
55
+ itemStyle: {
56
+ fontFamily: typography.font_family_base,
57
+ color: colors.text_lt_light,
58
+ fontWeight: typography.regular,
59
+ fontSize: typography.text_smaller,
60
+ },
61
+ itemHoverStyle: {
62
+ color: colors.text_lt_default,
63
+ },
64
+ itemHiddenStyle: {
65
+ color: colors.text_lt_lighter,
66
+ },
67
+ },
54
68
  colors: [
55
69
  colors.data_1,
56
70
  colors.data_2,
@@ -88,6 +102,7 @@ const lineGraphTheme = {
88
102
  minorGridLineColor: colors.border_light,
89
103
  lineWidth: 0,
90
104
  tickWidth: 0,
105
+ tickPixelInterval: 50,
91
106
  labels: {
92
107
  style: {
93
108
  fontFamily: typography.font_family_base,
@@ -38,6 +38,7 @@ type PhoneNumberInputProps = {
38
38
  required?: boolean,
39
39
  value?: string,
40
40
  formatAsYouType?: boolean,
41
+ strictMode?: boolean,
41
42
  countrySearch?: boolean,
42
43
  }
43
44
 
@@ -68,7 +69,7 @@ const containOnlyNumbers = (value: string) => {
68
69
  return /^[()+\-\ .\d]*$/g.test(value)
69
70
  }
70
71
 
71
- const PhoneNumberInput = (props: PhoneNumberInputProps, ref?: React.MutableRefObject<unknown>) => {
72
+ const PhoneNumberInput = (props: PhoneNumberInputProps, ref?: React.Ref<unknown>) => {
72
73
  const {
73
74
  aria = {},
74
75
  className,
@@ -94,6 +95,7 @@ const PhoneNumberInput = (props: PhoneNumberInputProps, ref?: React.MutableRefOb
94
95
  preferredCountries = [],
95
96
  value = "",
96
97
  formatAsYouType = false,
98
+ strictMode = false,
97
99
  countrySearch = false,
98
100
  } = props
99
101
 
@@ -106,15 +108,16 @@ const PhoneNumberInput = (props: PhoneNumberInputProps, ref?: React.MutableRefOb
106
108
  className
107
109
  )
108
110
 
109
- const inputRef = useRef<HTMLInputElement>()
111
+ const inputRef = useRef<HTMLInputElement | null>(null)
110
112
  const itiRef = useRef<any>(null);
111
113
  const [inputValue, setInputValue] = useState(value)
112
114
  const [error, setError] = useState(props.error)
113
115
  const [dropDownIsOpen, setDropDownIsOpen] = useState(false)
114
116
  const [selectedData, setSelectedData] = useState()
117
+ const [hasTyped, setHasTyped] = useState(false)
115
118
 
116
119
  useEffect(() => {
117
- if (error?.length > 0) {
120
+ if ((error ?? '').length > 0) {
118
121
  onValidate(false)
119
122
  } else {
120
123
  onValidate(true)
@@ -131,6 +134,7 @@ const PhoneNumberInput = (props: PhoneNumberInputProps, ref?: React.MutableRefOb
131
134
  clearField() {
132
135
  setInputValue("")
133
136
  setError("")
137
+ setHasTyped(false)
134
138
  },
135
139
  inputNode() {
136
140
  return inputRef.current
@@ -201,6 +205,8 @@ const PhoneNumberInput = (props: PhoneNumberInputProps, ref?: React.MutableRefOb
201
205
  }
202
206
 
203
207
  const validateErrors = () => {
208
+ if (!hasTyped && !error) return
209
+
204
210
  if (itiRef.current) isValid(itiRef.current.isValidNumber())
205
211
  if (validateOnlyNumbers(itiRef.current)) return
206
212
  if (validateTooLongNumber(itiRef.current)) return
@@ -214,6 +220,7 @@ const PhoneNumberInput = (props: PhoneNumberInputProps, ref?: React.MutableRefOb
214
220
  }
215
221
 
216
222
  const handleOnChange = (evt: React.ChangeEvent<HTMLInputElement>) => {
223
+ if (!hasTyped) setHasTyped(true)
217
224
  setInputValue(evt.target.value)
218
225
  let phoneNumberData
219
226
  if (formatAsYouType) {
@@ -251,6 +258,7 @@ const PhoneNumberInput = (props: PhoneNumberInputProps, ref?: React.MutableRefOb
251
258
  countrySearch: countrySearch,
252
259
  fixDropdownWidth: false,
253
260
  formatAsYouType: formatAsYouType,
261
+ strictMode: strictMode,
254
262
  hiddenInput: hiddenInputs ? () => ({
255
263
  phone: `${name}_full`,
256
264
  country: `${name}_country_code`,
@@ -259,16 +267,17 @@ const PhoneNumberInput = (props: PhoneNumberInputProps, ref?: React.MutableRefOb
259
267
 
260
268
  itiRef.current = telInputInit;
261
269
 
262
- inputRef.current.addEventListener("countrychange", (evt: Event) => {
263
- const phoneNumberData = getCurrentSelectedData(telInputInit, (evt.target as HTMLInputElement).value)
264
- setSelectedData(phoneNumberData)
265
- onChange(phoneNumberData)
266
- validateErrors()
267
- })
268
-
269
- inputRef.current.addEventListener("open:countrydropdown", () => setDropDownIsOpen(true))
270
- inputRef.current.addEventListener("close:countrydropdown", () => setDropDownIsOpen(false))
270
+ if (inputRef.current) {
271
+ inputRef.current.addEventListener("countrychange", (evt: Event) => {
272
+ const phoneNumberData = getCurrentSelectedData(telInputInit, (evt.target as HTMLInputElement).value)
273
+ setSelectedData(phoneNumberData)
274
+ onChange(phoneNumberData)
275
+ validateErrors()
276
+ })
271
277
 
278
+ inputRef.current.addEventListener("open:countrydropdown", () => setDropDownIsOpen(true))
279
+ inputRef.current.addEventListener("close:countrydropdown", () => setDropDownIsOpen(false))
280
+ }
272
281
  if (formatAsYouType) {
273
282
  inputRef.current?.addEventListener("input", (evt) => {
274
283
  handleOnChange(evt as unknown as React.ChangeEvent<HTMLInputElement>);
@@ -303,12 +312,16 @@ const PhoneNumberInput = (props: PhoneNumberInputProps, ref?: React.MutableRefOb
303
312
  {...htmlProps}
304
313
  >
305
314
  <TextInput
306
- ref={
307
- inputNode => {
308
- ref ? ref.current = inputNode : null
309
- inputRef.current = inputNode
315
+ ref={inputNode => {
316
+ if (ref) {
317
+ if (typeof ref === 'function') {
318
+ ref(inputNode)
319
+ } else {
320
+ (ref as React.MutableRefObject<HTMLInputElement | null>).current = inputNode
321
+ }
310
322
  }
311
- }
323
+ inputRef.current = inputNode
324
+ }}
312
325
  {...textInputProps}
313
326
  />
314
327
  </div>
@@ -0,0 +1,10 @@
1
+ <%= pb_rails("phone_number_input", props: {
2
+ strict_mode: true,
3
+ }) %>
4
+
5
+ <%= pb_rails("body", props: { text: "With format_as_you_type" }) %>
6
+
7
+ <%= pb_rails("phone_number_input", props: {
8
+ strict_mode: true,
9
+ format_as_you_type: true,
10
+ }) %>
@@ -0,0 +1,26 @@
1
+ import React from "react";
2
+
3
+ import Body from '../../pb_body/_body'
4
+ import PhoneNumberInput from '../../pb_phone_number_input/_phone_number_input'
5
+
6
+ const PhoneNumberInputStrictMode = (props) => {
7
+
8
+ return (
9
+ <>
10
+ <PhoneNumberInput
11
+ id="strict"
12
+ strictMode
13
+ {...props}
14
+ />
15
+ <Body>With formatAsYouType</Body>
16
+ <PhoneNumberInput
17
+ formatAsYouType
18
+ id="strict"
19
+ strictMode
20
+ {...props}
21
+ />
22
+ </>
23
+ );
24
+ };
25
+
26
+ export default PhoneNumberInputStrictMode;
@@ -0,0 +1,3 @@
1
+ Ignore any irrelevant characters and cap the length at the maximum valid number length.
2
+
3
+ This can be combined with `format_as_you_type` / `formatAsYouType`.
@@ -10,6 +10,7 @@ examples:
10
10
  - phone_number_input_clear_field: Clearing the Input Field
11
11
  - phone_number_input_access_input_element: Accessing the Input Element
12
12
  - phone_number_input_format: Format as You Type
13
+ - phone_number_input_strict_mode: Strict Mode
13
14
  - phone_number_input_country_search: Country Search
14
15
 
15
16
  rails:
@@ -20,5 +21,6 @@ examples:
20
21
  - phone_number_input_exclude_countries: Exclude Countries
21
22
  - phone_number_input_validation: Form Validation
22
23
  - phone_number_input_format: Format as You Type
24
+ - phone_number_input_strict_mode: Strict Mode
23
25
  - phone_number_input_hidden_inputs: Hidden Inputs
24
26
  - phone_number_input_country_search: Country Search
@@ -7,4 +7,5 @@ export { default as PhoneNumberInputValidation } from './_phone_number_input_val
7
7
  export { default as PhoneNumberInputClearField } from './_phone_number_input_clear_field'
8
8
  export { default as PhoneNumberInputAccessInputElement } from './_phone_number_input_access_input_element'
9
9
  export { default as PhoneNumberInputFormat } from './_phone_number_input_format'
10
+ export { default as PhoneNumberInputStrictMode } from './_phone_number_input_strict_mode'
10
11
  export { default as PhoneNumberInputCountrySearch } from './_phone_number_input_country_search'
@@ -25,6 +25,8 @@ module Playbook
25
25
  default: ""
26
26
  prop :format_as_you_type, type: Playbook::Props::Boolean,
27
27
  default: false
28
+ prop :strict_mode, type: Playbook::Props::Boolean,
29
+ default: false
28
30
  prop :hidden_inputs, type: Playbook::Props::Boolean,
29
31
  default: false
30
32
  prop :country_search, type: Playbook::Props::Boolean,
@@ -41,6 +43,7 @@ module Playbook
41
43
  disabled: disabled,
42
44
  error: error,
43
45
  formatAsYouType: format_as_you_type,
46
+ strictMode: strict_mode,
44
47
  hiddenInputs: hidden_inputs,
45
48
  initialCountry: initial_country,
46
49
  label: label,
@@ -24,7 +24,9 @@ module Playbook
24
24
  prop :validation_message, type: Playbook::Props::String, default: ""
25
25
 
26
26
  def classnames
27
- classname + inline_class + compact_class + show_arrow_class
27
+ ([classname] + [inline_class, compact_class, show_arrow_class])
28
+ .reject(&:empty?)
29
+ .join(" ")
28
30
  end
29
31
 
30
32
  def all_attributes
@@ -44,7 +46,7 @@ module Playbook
44
46
  end
45
47
 
46
48
  def inline_class
47
- inline ? " inline " : " "
49
+ inline ? "inline" : ""
48
50
  end
49
51
 
50
52
  def compact_class
@@ -104,8 +104,8 @@ const Table = (props: TableProps): React.ReactElement => {
104
104
 
105
105
  stickyLeftColumn.forEach((colId, index) => {
106
106
  const isLastColumn = index === stickyLeftColumn.length - 1;
107
- const header = document.querySelector(`th[id="${colId}"]`);
108
- const cells = document.querySelectorAll(`td[id="${colId}"]`);
107
+ const header = document.querySelector(`th[data-sticky-id="${colId}"]`);
108
+ const cells = document.querySelectorAll(`td[data-sticky-id="${colId}"]`);
109
109
 
110
110
  if (header) {
111
111
  header.classList.add('sticky');
@@ -155,8 +155,8 @@ const Table = (props: TableProps): React.ReactElement => {
155
155
 
156
156
  stickyRightColumnReversed.forEach((colId, index) => {
157
157
  const isLastColumn = index === stickyRightColumn.length - 1;
158
- const header = document.querySelector(`th[id="${colId}"]`);
159
- const cells = document.querySelectorAll(`td[id="${colId}"]`);
158
+ const header = document.querySelector(`th[data-sticky-id="${colId}"]`);
159
+ const cells = document.querySelectorAll(`td[data-sticky-id="${colId}"]`);
160
160
 
161
161
  if (header) {
162
162
  header.classList.add('sticky');
@@ -11,7 +11,7 @@ const TableStickyColumns = () => {
11
11
  >
12
12
  <thead>
13
13
  <tr>
14
- <th id="a">{'Column 1'}</th>
14
+ <th data-sticky-id="a">{'Column 1'}</th>
15
15
  <th>{'Column 2'}</th>
16
16
  <th>{'Column 3'}</th>
17
17
  <th>{'Column 4'}</th>
@@ -25,12 +25,12 @@ const TableStickyColumns = () => {
25
25
  <th>{'Column 12'}</th>
26
26
  <th>{'Column 13'}</th>
27
27
  <th>{'Column 14'}</th>
28
- <th id="b">{'Column 15'}</th>
28
+ <th data-sticky-id="b">{'Column 15'}</th>
29
29
  </tr>
30
30
  </thead>
31
31
  <tbody>
32
32
  <tr>
33
- <td id="a">{'Value 1'}</td>
33
+ <td data-sticky-id="a">{'Value 1'}</td>
34
34
  <td>{'Value 2'}</td>
35
35
  <td>{'Value 3'}</td>
36
36
  <td>{'Value 4'}</td>
@@ -44,10 +44,10 @@ const TableStickyColumns = () => {
44
44
  <td>{'Value 12'}</td>
45
45
  <td>{'Value 13'}</td>
46
46
  <td>{'Value 14'}</td>
47
- <td id="b">{'Value 15'}</td>
47
+ <td data-sticky-id="b">{'Value 15'}</td>
48
48
  </tr>
49
49
  <tr>
50
- <td id="a">{'Value 1'}</td>
50
+ <td data-sticky-id="a">{'Value 1'}</td>
51
51
  <td>{'Value 2'}</td>
52
52
  <td>{'Value 3'}</td>
53
53
  <td>{'Value 4'}</td>
@@ -61,10 +61,10 @@ const TableStickyColumns = () => {
61
61
  <td>{'Value 12'}</td>
62
62
  <td>{'Value 13'}</td>
63
63
  <td>{'Value 14'}</td>
64
- <td id="b">{'Value 15'}</td>
64
+ <td data-sticky-id="b">{'Value 15'}</td>
65
65
  </tr>
66
66
  <tr>
67
- <td id="a">{'Value 1'}</td>
67
+ <td data-sticky-id="a">{'Value 1'}</td>
68
68
  <td>{'Value 2'}</td>
69
69
  <td>{'Value 3'}</td>
70
70
  <td>{'Value 4'}</td>
@@ -78,7 +78,7 @@ const TableStickyColumns = () => {
78
78
  <td>{'Value 12'}</td>
79
79
  <td>{'Value 13'}</td>
80
80
  <td>{'Value 14'}</td>
81
- <td id="b">{'Value 15'}</td>
81
+ <td data-sticky-id="b">{'Value 15'}</td>
82
82
  </tr>
83
83
  </tbody>
84
84
  </Table>
@@ -1,3 +1,3 @@
1
1
  The `stickyLeftColumn` and `stickyRightColumn` props can be used together on the same table as needed.
2
2
 
3
- Please ensure that unique ids are used for all columns across multiple tables. Using the same columns ids on multiple tables can lead to issues when using props.
3
+ Please ensure that unique `data-sticky-id`s are used for all columns across multiple tables. Using the same columns `data-sticky-id`s on multiple tables can lead to issues when using props.
@@ -10,9 +10,9 @@ const TableStickyLeftColumns = () => {
10
10
  >
11
11
  <thead>
12
12
  <tr>
13
- <th id="1">{'Column 1'}</th>
14
- <th id="2">{'Column 2'}</th>
15
- <th id="3">{'Column 3'}</th>
13
+ <th data-sticky-id="1">{'Column 1'}</th>
14
+ <th data-sticky-id="2">{'Column 2'}</th>
15
+ <th data-sticky-id="3">{'Column 3'}</th>
16
16
  <th>{'Column 4'}</th>
17
17
  <th>{'Column 5'}</th>
18
18
  <th>{'Column 6'}</th>
@@ -29,9 +29,9 @@ const TableStickyLeftColumns = () => {
29
29
  </thead>
30
30
  <tbody>
31
31
  <tr>
32
- <td id="1">{'Value 1'}</td>
33
- <td id="2">{'Value 2'}</td>
34
- <td id="3">{'Value 3'}</td>
32
+ <td data-sticky-id="1">{'Value 1'}</td>
33
+ <td data-sticky-id="2">{'Value 2'}</td>
34
+ <td data-sticky-id="3">{'Value 3'}</td>
35
35
  <td>{'Value 4'}</td>
36
36
  <td>{'Value 5'}</td>
37
37
  <td>{'Value 6'}</td>
@@ -46,9 +46,9 @@ const TableStickyLeftColumns = () => {
46
46
  <td>{'Value 15'}</td>
47
47
  </tr>
48
48
  <tr>
49
- <td id="1">{'Value 1'}</td>
50
- <td id="2">{'Value 2'}</td>
51
- <td id="3">{'Value 3'}</td>
49
+ <td data-sticky-id="1">{'Value 1'}</td>
50
+ <td data-sticky-id="2">{'Value 2'}</td>
51
+ <td data-sticky-id="3">{'Value 3'}</td>
52
52
  <td>{'Value 4'}</td>
53
53
  <td>{'Value 5'}</td>
54
54
  <td>{'Value 6'}</td>
@@ -63,9 +63,9 @@ const TableStickyLeftColumns = () => {
63
63
  <td>{'Value 15'}</td>
64
64
  </tr>
65
65
  <tr>
66
- <td id="1">{'Value 1'}</td>
67
- <td id="2">{'Value 2'}</td>
68
- <td id="3">{'Value 3'}</td>
66
+ <td data-sticky-id="1">{'Value 1'}</td>
67
+ <td data-sticky-id="2">{'Value 2'}</td>
68
+ <td data-sticky-id="3">{'Value 3'}</td>
69
69
  <td>{'Value 4'}</td>
70
70
  <td>{'Value 5'}</td>
71
71
  <td>{'Value 6'}</td>
@@ -1,5 +1,5 @@
1
- The `stickyLeftColumn` prop expects an array of the column ids you want to be sticky. Make sure to add the corresponding id to the `<th>` and `<td>`.
1
+ The `stickyLeftColumn` prop expects an array of the column `data-sticky-id`s you want to be sticky. Make sure to add the corresponding `data-sticky-id` to the `<th>` and `<td>`.
2
2
 
3
- If you are using the sub-component variant, then you will pass the id to `<Table.Header>` and `<Table.Cell>`
3
+ If you are using the sub-component variant, then you will pass the `data-sticky-id` to `<Table.Header>` and `<Table.Cell>`
4
4
 
5
- Please ensure that unique ids are used for all columns across multiple tables. Using the same columns ids on multiple tables can lead to issues when using `stickyLeftColumn` prop.
5
+ Please ensure that unique `data-sticky-id`s are used for all columns across multiple tables. Using the same columns `data-sticky-id`s on multiple tables can lead to issues when using `stickyLeftColumn` prop.