playbook_ui 14.23.0 → 14.24.0.pre.alpha.PLAY1972validatemissingareacodeandrepeatcountrycode9457

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 (152) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +0 -1
  3. data/app/pb_kits/playbook/pb_advanced_table/Components/CustomCell.tsx +7 -6
  4. data/app/pb_kits/playbook/pb_advanced_table/Components/SortIconButton.tsx +24 -25
  5. data/app/pb_kits/playbook/pb_advanced_table/Components/TableActionBar.tsx +10 -10
  6. data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +11 -12
  7. data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableState.ts +7 -4
  8. data/app/pb_kits/playbook/pb_advanced_table/SubKits/TableHeader.tsx +1 -1
  9. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +112 -2
  10. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +13 -7
  11. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.html.erb +2 -2
  12. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.rb +14 -2
  13. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +34 -0
  14. data/app/pb_kits/playbook/pb_advanced_table/advanced_table_action_bar.js +16 -0
  15. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_headers_vertical_border.html.erb +43 -0
  16. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_headers_vertical_border.jsx +64 -0
  17. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_row_styling.html.erb +46 -0
  18. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_row_styling_rails.md +7 -0
  19. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_header_rails.html.erb +1 -1
  20. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_rails.html.erb +1 -1
  21. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort_per_column.jsx +55 -0
  22. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort_per_column.md +6 -0
  23. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort_per_column_for_multi_column.jsx +80 -0
  24. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_sort_per_column_for_multi_column.md +1 -0
  25. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header.md +1 -1
  26. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header_multi_header.jsx +107 -0
  27. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header_multi_header.md +1 -0
  28. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header_rails.html.erb +51 -0
  29. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header_rails.md +1 -0
  30. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +7 -0
  31. data/app/pb_kits/playbook/pb_advanced_table/docs/index.js +4 -0
  32. data/app/pb_kits/playbook/pb_advanced_table/flat_advanced_table.js +4 -11
  33. data/app/pb_kits/playbook/pb_advanced_table/index.js +108 -125
  34. data/app/pb_kits/playbook/pb_advanced_table/scss_partials/advanced_table_sticky_mixin.scss +7 -1
  35. data/app/pb_kits/playbook/pb_advanced_table/table_body.rb +7 -4
  36. data/app/pb_kits/playbook/pb_advanced_table/table_header.html.erb +5 -1
  37. data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +46 -4
  38. data/app/pb_kits/playbook/pb_advanced_table/table_row.html.erb +13 -4
  39. data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +24 -5
  40. data/app/pb_kits/playbook/pb_advanced_table/table_subrow_header.rb +1 -1
  41. data/app/pb_kits/playbook/pb_bar_graph/docs/_bar_graph_legend_position.md +1 -1
  42. data/app/pb_kits/playbook/pb_checkbox/checkbox.rb +12 -1
  43. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_indeterminate.html.erb +1 -1
  44. data/app/pb_kits/playbook/pb_checkbox/docs/_checkbox_indeterminate_rails.md +2 -1
  45. data/app/pb_kits/playbook/pb_checkbox/index.js +218 -26
  46. data/app/pb_kits/playbook/pb_circle_chart/docs/_circle_chart_legend_position.md +1 -1
  47. data/app/pb_kits/playbook/pb_date/_date.tsx +5 -3
  48. data/app/pb_kits/playbook/pb_date/date.html.erb +6 -6
  49. data/app/pb_kits/playbook/pb_date/date.rb +2 -0
  50. data/app/pb_kits/playbook/pb_date/docs/_date_with_show_current_year.html.erb +4 -0
  51. data/app/pb_kits/playbook/pb_date/docs/_date_with_show_current_year.jsx +17 -0
  52. data/app/pb_kits/playbook/pb_date/docs/_date_with_show_current_year.md +1 -0
  53. data/app/pb_kits/playbook/pb_date/docs/example.yml +2 -0
  54. data/app/pb_kits/playbook/pb_date/docs/index.js +1 -0
  55. data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +17 -1
  56. data/app/pb_kits/playbook/pb_dropdown/_dropdown.tsx +6 -0
  57. data/app/pb_kits/playbook/pb_dropdown/_dropdown_mixin.scss +36 -0
  58. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_active_style_options.jsx +90 -0
  59. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_active_style_options_react.md +4 -0
  60. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_radio_options.jsx +1 -0
  61. data/app/pb_kits/playbook/pb_dropdown/docs/_dropdown_with_custom_radio_options_react.md +1 -1
  62. data/app/pb_kits/playbook/pb_dropdown/docs/example.yml +3 -2
  63. data/app/pb_kits/playbook/pb_dropdown/docs/index.js +2 -1
  64. data/app/pb_kits/playbook/pb_dropdown/dropdown.test.jsx +24 -0
  65. data/app/pb_kits/playbook/pb_dropdown/subcomponents/DropdownOption.tsx +11 -1
  66. data/app/pb_kits/playbook/pb_gauge/docs/_description.md +1 -0
  67. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_colors.jsx +32 -15
  68. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_colors_react.md +2 -0
  69. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_complex.jsx +35 -9
  70. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_complex_react.md +1 -0
  71. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_default.jsx +26 -14
  72. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_disable_animation.jsx +32 -15
  73. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_full_circle.jsx +45 -17
  74. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_height.jsx +59 -22
  75. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_live_data.jsx +40 -9
  76. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_min_max.jsx +50 -18
  77. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_sizing.jsx +31 -18
  78. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_title.jsx +34 -17
  79. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_units.jsx +64 -23
  80. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_units_react.md +1 -0
  81. data/app/pb_kits/playbook/pb_gauge/docs/example.yml +0 -1
  82. data/app/pb_kits/playbook/pb_gauge/docs/index.js +0 -1
  83. data/app/pb_kits/playbook/pb_gauge/gaugeTheme.ts +7 -1
  84. data/app/pb_kits/playbook/pb_line_graph/docs/_description.md +1 -3
  85. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_colors.jsx +36 -17
  86. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_colors_react.md +3 -0
  87. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_default.jsx +31 -16
  88. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_height.jsx +63 -31
  89. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_height.md +3 -0
  90. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_legend.jsx +35 -16
  91. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_legend_nonclickable.jsx +41 -16
  92. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_legend_position.jsx +107 -62
  93. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_legend_position.md +4 -7
  94. data/app/pb_kits/playbook/pb_line_graph/docs/example.yml +0 -1
  95. data/app/pb_kits/playbook/pb_line_graph/docs/index.js +0 -1
  96. data/app/pb_kits/playbook/pb_line_graph/lineGraphTheme.ts +16 -1
  97. data/app/pb_kits/playbook/pb_multi_level_select/_helper_functions.tsx +18 -9
  98. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.tsx +3 -1
  99. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_show_checked_children.html.erb +75 -0
  100. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_show_checked_children.jsx +94 -0
  101. data/app/pb_kits/playbook/pb_multi_level_select/docs/_multi_level_select_show_checked_children.md +3 -0
  102. data/app/pb_kits/playbook/pb_multi_level_select/docs/index.js +1 -1
  103. data/app/pb_kits/playbook/pb_multi_level_select/multi_level_select.rb +3 -0
  104. data/app/pb_kits/playbook/pb_pagination/_pagination.tsx +4 -0
  105. data/app/pb_kits/playbook/pb_pagination/docs/_pagination_default_rails.md +3 -1
  106. data/app/pb_kits/playbook/pb_pagination/docs/_pagination_default_react.md +3 -1
  107. data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.tsx +14 -1
  108. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_strict_mode.html.erb +10 -0
  109. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_strict_mode.jsx +26 -0
  110. data/app/pb_kits/playbook/pb_phone_number_input/docs/_phone_number_input_strict_mode.md +3 -0
  111. data/app/pb_kits/playbook/pb_phone_number_input/docs/example.yml +2 -0
  112. data/app/pb_kits/playbook/pb_phone_number_input/docs/index.js +1 -0
  113. data/app/pb_kits/playbook/pb_phone_number_input/phone_number_input.rb +3 -0
  114. data/app/pb_kits/playbook/pb_select/select.rb +4 -2
  115. data/app/pb_kits/playbook/pb_table/docs/_table_with_selectable_rows.html.erb +1 -0
  116. data/app/pb_kits/playbook/pb_table/styles/_vertical_border.scss +49 -1
  117. data/dist/chunks/_line_graph-qk_BN_J0.js +1 -0
  118. data/dist/chunks/_typeahead-ZLTFtAoW.js +6 -0
  119. data/dist/chunks/_weekday_stacked-svceGyvR.js +37 -0
  120. data/dist/chunks/lib-CY5ZPzic.js +29 -0
  121. data/dist/chunks/{pb_form_validation-B7kuYG-_.js → pb_form_validation-D3b0JKHH.js} +1 -1
  122. data/dist/chunks/vendor.js +1 -1
  123. data/dist/menu.yml +3 -10
  124. data/dist/playbook-doc.js +2 -2
  125. data/dist/playbook-rails-react-bindings.js +1 -1
  126. data/dist/playbook-rails.js +1 -1
  127. data/dist/playbook.css +1 -1
  128. data/lib/playbook/version.rb +2 -2
  129. metadata +41 -26
  130. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_pb_styles.jsx +0 -30
  131. data/app/pb_kits/playbook/pb_gauge/docs/_gauge_pb_styles.md +0 -1
  132. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_pb_styles.jsx +0 -52
  133. data/app/pb_kits/playbook/pb_line_graph/docs/_line_graph_pb_styles.md +0 -1
  134. data/app/pb_kits/playbook/pb_walkthrough/_walkthrough.scss +0 -0
  135. data/app/pb_kits/playbook/pb_walkthrough/_walkthrough.tsx +0 -202
  136. data/app/pb_kits/playbook/pb_walkthrough/docs/_walkthrough_continuous.jsx +0 -69
  137. data/app/pb_kits/playbook/pb_walkthrough/docs/_walkthrough_default.jsx +0 -71
  138. data/app/pb_kits/playbook/pb_walkthrough/docs/_walkthrough_multi_beacon.jsx +0 -110
  139. data/app/pb_kits/playbook/pb_walkthrough/docs/_walkthrough_no_beacon.jsx +0 -76
  140. data/app/pb_kits/playbook/pb_walkthrough/docs/_walkthrough_no_overlay.jsx +0 -76
  141. data/app/pb_kits/playbook/pb_walkthrough/docs/_walkthrough_styled.jsx +0 -76
  142. data/app/pb_kits/playbook/pb_walkthrough/docs/example.yml +0 -10
  143. data/app/pb_kits/playbook/pb_walkthrough/docs/index.js +0 -6
  144. data/app/pb_kits/playbook/pb_walkthrough/walkthrough.test.jsx +0 -34
  145. data/dist/chunks/_circle_chart-D01WLw-z.js +0 -1
  146. data/dist/chunks/_typeahead-mrBE9f17.js +0 -22
  147. data/dist/chunks/_weekday_stacked-_LSSbN1y.js +0 -45
  148. data/dist/chunks/lib-CHh_1-Oj.js +0 -29
  149. /data/app/pb_kits/playbook/pb_advanced_table/docs/{_advanced_table_row_styling.md → _advanced_table_row_styling_react.md} +0 -0
  150. /data/app/pb_kits/playbook/pb_gauge/docs/{_gauge_colors.md → _gauge_colors_rails.md} +0 -0
  151. /data/app/pb_kits/playbook/pb_gauge/docs/{_gauge_complex.md → _gauge_complex_rails.md} +0 -0
  152. /data/app/pb_kits/playbook/pb_line_graph/docs/{_line_graph_colors.md → _line_graph_colors_rails.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,
@@ -143,7 +143,8 @@ export const recursiveCheckParent = (
143
143
 
144
144
  export const getExpandedItems = (
145
145
  treeData: { [key: string]: string }[],
146
- selectedIds: string[]
146
+ selectedIds: string[],
147
+ showCheckedChildren = true
147
148
  ): any[] => {
148
149
  const expandedItems: any[] = [];
149
150
 
@@ -152,19 +153,27 @@ export const getExpandedItems = (
152
153
  const item = items[i];
153
154
  const itemAncestors = [...ancestors, item];
154
155
 
156
+ // Always honor explicit expanded: true
155
157
  if (item.expanded) {
156
158
  expandedItems.push(item.id);
157
159
  }
158
- if (selectedIds && selectedIds.length && selectedIds.includes(item.id)) {
159
- expandedItems.push(...itemAncestors.map((ancestor) => ancestor.id));
160
+
161
+ // Only expand based on selected items if showCheckedChildren is true
162
+ if (showCheckedChildren) {
163
+ if (selectedIds && selectedIds.length && selectedIds.includes(item.id)) {
164
+ expandedItems.push(...itemAncestors.map((ancestor: any) => ancestor.id));
165
+ }
166
+ if (Array.isArray(item.children)) {
167
+ const hasCheckedChildren = item.children.some(
168
+ (child: { [key: string]: string }) => child.checked
169
+ );
170
+ if (hasCheckedChildren) {
171
+ expandedItems.push(...itemAncestors.map((ancestor: any) => ancestor.id));
172
+ }
173
+ }
160
174
  }
175
+
161
176
  if (Array.isArray(item.children)) {
162
- const hasCheckedChildren = item.children.some(
163
- (child: { [key: string]: string }) => child.checked
164
- );
165
- if (hasCheckedChildren) {
166
- expandedItems.push(...itemAncestors.map((ancestor) => ancestor.id));
167
- }
168
177
  traverse(item.children, itemAncestors);
169
178
  }
170
179
  }
@@ -47,6 +47,7 @@ type MultiLevelSelectProps = {
47
47
  name?: string
48
48
  required?: boolean
49
49
  returnAllSelected?: boolean
50
+ showCheckedChildren?: boolean
50
51
  treeData?: { [key: string]: string; }[] | any
51
52
  onChange?: (event: { target: { name?: string; value: any } }) => void
52
53
  onSelect?: (prop: { [key: string]: any }) => void
@@ -71,6 +72,7 @@ const MultiLevelSelect = forwardRef<HTMLInputElement, MultiLevelSelectProps>((pr
71
72
  label,
72
73
  required = false,
73
74
  returnAllSelected = false,
75
+ showCheckedChildren = true,
74
76
  treeData,
75
77
  onChange = () => null,
76
78
  onSelect = () => null,
@@ -104,7 +106,7 @@ const MultiLevelSelect = forwardRef<HTMLInputElement, MultiLevelSelectProps>((pr
104
106
  // State for default return
105
107
  const [defaultReturn, setDefaultReturn] = useState([]);
106
108
  // Get expanded items from treeData
107
- const initialExpandedItems = getExpandedItems(treeData, selectedIds);
109
+ const initialExpandedItems = getExpandedItems(treeData, selectedIds, showCheckedChildren);
108
110
  // Initialize state with expanded items
109
111
  const [expanded, setExpanded] = useState(initialExpandedItems);
110
112
 
@@ -0,0 +1,75 @@
1
+ <% treeData = [{
2
+ label: "Power Home Remodeling",
3
+ value: "powerHomeRemodeling",
4
+ id: "100",
5
+ expanded: true,
6
+ children: [
7
+ {
8
+ label: "People",
9
+ value: "people",
10
+ id: "101",
11
+ children: [
12
+ {
13
+ label: "Talent Acquisition",
14
+ value: "talentAcquisition",
15
+ id: "102",
16
+ },
17
+ {
18
+ label: "Business Affairs",
19
+ value: "businessAffairs",
20
+ id: "103",
21
+ children: [
22
+ {
23
+ label: "Initiatives",
24
+ value: "initiatives",
25
+ id: "104",
26
+ },
27
+ {
28
+ label: "Learning & Development",
29
+ value: "learningAndDevelopment",
30
+ id: "105",
31
+ },
32
+ ],
33
+ },
34
+ {
35
+ label: "People Experience",
36
+ value: "peopleExperience",
37
+ id: "106",
38
+ },
39
+ ],
40
+ },
41
+ {
42
+ label: "Contact Center",
43
+ value: "contactCenter",
44
+ id: "107",
45
+ children: [
46
+ {
47
+ label: "Appointment Management",
48
+ value: "appointmentManagement",
49
+ id: "108",
50
+ },
51
+ {
52
+ label: "Customer Service",
53
+ value: "customerService",
54
+ id: "109",
55
+ },
56
+ {
57
+ label: "Energy",
58
+ value: "energy",
59
+ id: "110",
60
+ },
61
+ ],
62
+ },
63
+ ],
64
+ }] %>
65
+
66
+ <% # Pre-selected node IDs to demonstrate the functionality %>
67
+ <% preSelectedIds = ["102", "104", "109"] %>
68
+
69
+ <%= pb_rails("multi_level_select", props: {
70
+ id: "multi-level-select-show-checked-children-rails",
71
+ name: "my_array",
72
+ tree_data: treeData,
73
+ selected_ids: preSelectedIds,
74
+ show_checked_children: false
75
+ }) %>
@@ -0,0 +1,94 @@
1
+ import React from "react";
2
+ import MultiLevelSelect from "../_multi_level_select";
3
+
4
+ const treeData = [
5
+ {
6
+ label: "Power Home Remodeling",
7
+ value: "powerHomeRemodeling",
8
+ id: "powerhome1",
9
+ expanded: true,
10
+ children: [
11
+ {
12
+ label: "People",
13
+ value: "people",
14
+ id: "people1",
15
+ children: [
16
+ {
17
+ label: "Talent Acquisition",
18
+ value: "talentAcquisition",
19
+ id: "talent1",
20
+ },
21
+ {
22
+ label: "Business Affairs",
23
+ value: "businessAffairs",
24
+ id: "business1",
25
+ children: [
26
+ {
27
+ label: "Initiatives",
28
+ value: "initiatives",
29
+ id: "initiative1",
30
+ },
31
+ {
32
+ label: "Learning & Development",
33
+ value: "learningAndDevelopment",
34
+ id: "development1",
35
+ },
36
+ ],
37
+ },
38
+ {
39
+ label: "People Experience",
40
+ value: "peopleExperience",
41
+ id: "experience1",
42
+ },
43
+ ],
44
+ },
45
+ {
46
+ label: "Contact Center",
47
+ value: "contactCenter",
48
+ id: "contact1",
49
+ children: [
50
+ {
51
+ label: "Appointment Management",
52
+ value: "appointmentManagement",
53
+ id: "appointment1",
54
+ },
55
+ {
56
+ label: "Customer Service",
57
+ value: "customerService",
58
+ id: "customer1",
59
+ },
60
+ {
61
+ label: "Energy",
62
+ value: "energy",
63
+ id: "energy1",
64
+ },
65
+ ],
66
+ },
67
+ ],
68
+ },
69
+ ];
70
+
71
+ // Pre-selected node IDs to demonstrate the functionality
72
+ const preSelectedIds = ["talent1", "initiative1", "customer1"];
73
+
74
+ const MultiLevelSelectShowCheckedChildren = (props) => {
75
+ return (
76
+ <div>
77
+ <MultiLevelSelect
78
+ id='multiselect-checked-children'
79
+ onSelect={(selectedNodes) =>
80
+ console.log(
81
+ "Selected Items",
82
+ selectedNodes
83
+ )
84
+ }
85
+ selectedIds={preSelectedIds}
86
+ showCheckedChildren={false}
87
+ treeData={treeData}
88
+ {...props}
89
+ />
90
+ </div>
91
+ )
92
+ };
93
+
94
+ export default MultiLevelSelectShowCheckedChildren;
@@ -0,0 +1,3 @@
1
+ If you wish to control the auto-expansion of nodes with selected descendants in your multi-level select, you can utilize `showCheckedChildren/show_checked_children`. This prop (set to 'true' by default) controls whether items will be expanded on first render. When set to true, a node with selected descendants will automatically render as expanded so the selected nodes are visible. If you do NOT wish for this to be the case, you can set this prop to false.
2
+
3
+ The prop will still honor any `expanded` attribute set up within your tree data.
@@ -13,4 +13,4 @@ export { default as MultiLevelSelectDisabledOptions } from './_multi_level_selec
13
13
  export { default as MultiLevelSelectDisabledOptionsParent } from './_multi_level_select_disabled_options_parent.jsx'
14
14
  export { default as MultiLevelSelectDisabledOptionsParentDefault } from './_multi_level_select_disabled_options_parent_default.jsx'
15
15
  export { default as MultiLevelSelectDisabledOptionsDefault } from './_multi_level_select_disabled_options_default.jsx'
16
- export { default as MultiLevelSelectLabel } from './_multi_level_select_label.jsx'
16
+ export { default as MultiLevelSelectLabel } from './_multi_level_select_label.jsx'
@@ -32,6 +32,8 @@ module Playbook
32
32
  default: ""
33
33
  prop :label, type: Playbook::Props::String,
34
34
  default: ""
35
+ prop :show_checked_children, type: Playbook::Props::Boolean,
36
+ default: true
35
37
 
36
38
  def classname
37
39
  generate_classname("pb_multi_level_select")
@@ -54,6 +56,7 @@ module Playbook
54
56
  variant: variant,
55
57
  pillColor: pill_color,
56
58
  wrapped: wrapped,
59
+ showCheckedChildren: show_checked_children,
57
60
  }
58
61
  end
59
62
  end
@@ -134,6 +134,10 @@ const Pagination = ( props: PaginationProps) => {
134
134
  className
135
135
  )
136
136
 
137
+ if (total <= 1) {
138
+ return null;
139
+ }
140
+
137
141
  return (
138
142
  <div
139
143
  {...ariaProps}
@@ -3,4 +3,6 @@ Our Pagination kit depends on the <a href="https://github.com/mislav/will_pagina
3
3
 
4
4
  Once you have perfomed the paginated query in your controller file you can use our kit (see code example below) instead of `<%= will_paginate @users %>` in your view file.
5
5
 
6
- You need to add: <code>require "playbook/pagination_renderer"</code> in your apps controller file.
6
+ You need to add: <code>require "playbook/pagination_renderer"</code> in your apps controller file.
7
+
8
+ Note: If the total page count is 0 or 1, the Pagination kit will not be displayed as there aren't multiple pages to navigate.
@@ -1 +1,3 @@
1
- The `range` prop determines how many pages to display in the Pagination component. Regardless of this value, the first two and last two pages are always visible to facilitate navigation to the beginning and end of the pagination. If these always-visible pages fall within the specified range, they are included in the display. If they fall outside the range, the pagination will show additional pages up to the number defined by the `range` prop.
1
+ The `range` prop determines how many pages to display in the Pagination component. Regardless of this value, the first two and last two pages are always visible to facilitate navigation to the beginning and end of the pagination. If these always-visible pages fall within the specified range, they are included in the display. If they fall outside the range, the pagination will show additional pages up to the number defined by the `range` prop.
2
+
3
+ Note: If the `total` pages prop is 0 or 1, the Pagination component will not be displayed, as there aren't multiple pages to navigate.
@@ -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
 
@@ -94,6 +95,7 @@ const PhoneNumberInput = (props: PhoneNumberInputProps, ref?: React.Ref<unknown>
94
95
  preferredCountries = [],
95
96
  value = "",
96
97
  formatAsYouType = false,
98
+ strictMode = false,
97
99
  countrySearch = false,
98
100
  } = props
99
101
 
@@ -195,13 +197,22 @@ const PhoneNumberInput = (props: PhoneNumberInputProps, ref?: React.Ref<unknown>
195
197
  }
196
198
 
197
199
  const validateMissingAreaCode = (itiInit: any) => {
198
- if (!required || !itiInit) return
200
+ if (!itiInit) return
199
201
  if (itiInit.getValidationError() === ValidationError.MissingAreaCode) {
200
202
  showFormattedError('missing area code')
201
203
  return true
202
204
  }
203
205
  }
204
206
 
207
+ const validateRepeatCountryCode = (itiInit: any) => {
208
+ if (!itiInit) return
209
+ const countryDialCode = itiInit.getSelectedCountryData().dialCode;
210
+ if (unformatNumber(inputValue).startsWith(countryDialCode)) {
211
+ return showFormattedError('repeat country code')
212
+ }
213
+ }
214
+
215
+
205
216
  const validateErrors = () => {
206
217
  if (!hasTyped && !error) return
207
218
 
@@ -211,6 +222,7 @@ const PhoneNumberInput = (props: PhoneNumberInputProps, ref?: React.Ref<unknown>
211
222
  if (validateTooShortNumber(itiRef.current)) return
212
223
  if (validateUnhandledError(itiRef.current)) return
213
224
  if (validateMissingAreaCode(itiRef.current)) return
225
+ if (validateRepeatCountryCode(itiRef.current)) return
214
226
  }
215
227
 
216
228
  const getCurrentSelectedData = (itiInit: any, inputValue: string) => {
@@ -256,6 +268,7 @@ const PhoneNumberInput = (props: PhoneNumberInputProps, ref?: React.Ref<unknown>
256
268
  countrySearch: countrySearch,
257
269
  fixDropdownWidth: false,
258
270
  formatAsYouType: formatAsYouType,
271
+ strictMode: strictMode,
259
272
  hiddenInput: hiddenInputs ? () => ({
260
273
  phone: `${name}_full`,
261
274
  country: `${name}_country_code`,
@@ -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'