playbook_ui 15.2.0 → 15.3.0.pre.alpha.PLAY2012currencyallownonstring11930

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 (197) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +5 -5
  3. data/app/pb_kits/playbook/pb_advanced_table/Components/TableHeaderCell.tsx +3 -1
  4. data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableActions.ts +18 -3
  5. data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableState.ts +71 -14
  6. data/app/pb_kits/playbook/pb_advanced_table/SubKits/TableHeader.tsx +3 -0
  7. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.tsx +12 -3
  8. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.html.erb +2 -2
  9. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +59 -0
  10. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_background_control_rails.html.erb +39 -0
  11. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_background_control_rails.md +1 -0
  12. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_beta.md +3 -1
  13. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_beta_sort.html.erb +3 -3
  14. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_beta_subrow_headers.html.erb +3 -3
  15. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_collapsible_trail_rails.html.erb +2 -2
  16. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling.md +1 -1
  17. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_column_headers_rails.html.erb +2 -2
  18. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_rails.html.erb +2 -2
  19. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_rails.md +1 -1
  20. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_inline_row_loading.jsx +28 -0
  21. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_inline_row_loading.md +11 -2
  22. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_padding_control_per_row_rails.html.erb +51 -0
  23. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_padding_control_per_row_rails.md +1 -0
  24. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_padding_control_rails.html.erb +40 -0
  25. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_padding_control_rails.md +1 -0
  26. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pagination_with_props.jsx +4 -1
  27. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_pagination_with_props.md +3 -2
  28. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_row_styling_rails.md +1 -1
  29. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_row_styling_react.md +1 -1
  30. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_selectable_rows_rails.html.erb +2 -2
  31. data/app/pb_kits/playbook/pb_advanced_table/docs/_mock_data_inline_loading_empty_children.js +42 -0
  32. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +3 -0
  33. data/app/pb_kits/playbook/pb_advanced_table/index.js +5 -1
  34. data/app/pb_kits/playbook/pb_advanced_table/table_body.rb +6 -6
  35. data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +6 -6
  36. data/app/pb_kits/playbook/pb_advanced_table/table_row.html.erb +3 -2
  37. data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +49 -5
  38. data/app/pb_kits/playbook/pb_bread_crumbs/docs/_bread_crumbs_default.html.erb +4 -4
  39. data/app/pb_kits/playbook/pb_bread_crumbs/docs/_bread_crumbs_default.jsx +4 -0
  40. data/app/pb_kits/playbook/pb_button/_button.scss +6 -0
  41. data/app/pb_kits/playbook/pb_button/docs/_button_loading.html.erb +7 -3
  42. data/app/pb_kits/playbook/pb_button/docs/_button_loading.jsx +29 -0
  43. data/app/pb_kits/playbook/pb_currency/_currency.tsx +17 -7
  44. data/app/pb_kits/playbook/pb_currency/currency.rb +20 -8
  45. data/app/pb_kits/playbook/pb_currency/currency.test.js +42 -0
  46. data/app/pb_kits/playbook/pb_currency/docs/_currency_variants.html.erb +1 -1
  47. data/app/pb_kits/playbook/pb_currency/docs/_currency_variants.jsx +1 -1
  48. data/app/pb_kits/playbook/pb_currency/docs/_currency_variants.md +1 -0
  49. data/app/pb_kits/playbook/pb_date_picker/date_picker.rb +2 -0
  50. data/app/pb_kits/playbook/pb_date_picker/docs/_date_picker_range_pattern.jsx +1 -1
  51. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_quick_pick_styles.scss +11 -30
  52. data/app/pb_kits/playbook/pb_draggable/_draggable.scss +8 -0
  53. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.scss +0 -1
  54. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.tsx +5 -3
  55. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_description.md +2 -0
  56. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/fixed_confirmation_toast.rb +4 -1
  57. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/fixed_confirmation_toast.test.js +10 -0
  58. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_loading.html.erb +1 -1
  59. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +1 -1
  60. data/app/pb_kits/playbook/pb_form/formHelper.js +1 -1
  61. data/app/pb_kits/playbook/pb_icon_circle/docs/_icon_circle_color.md +1 -1
  62. data/app/pb_kits/playbook/pb_icon_stat_value/docs/_icon_stat_value_color.html.erb +7 -14
  63. data/app/pb_kits/playbook/pb_icon_stat_value/docs/_icon_stat_value_color.jsx +6 -15
  64. data/app/pb_kits/playbook/pb_pb_bar_graph/_pb_bar_graph.tsx +8 -6
  65. data/app/pb_kits/playbook/pb_pb_bar_graph/docs/_description.md +3 -0
  66. data/app/pb_kits/playbook/pb_pb_bar_graph/pb_bar_graph.rb +7 -10
  67. data/app/pb_kits/playbook/pb_pb_bar_graph/pbbargraph.test.jsx +73 -1
  68. data/app/pb_kits/playbook/pb_pb_circle_chart/_pb_circle_chart.tsx +1 -1
  69. data/app/pb_kits/playbook/pb_pb_circle_chart/docs/_description.md +3 -0
  70. data/app/pb_kits/playbook/pb_pb_circle_chart/pb_circle_chart.rb +7 -10
  71. data/app/pb_kits/playbook/pb_pb_circle_chart/pb_circle_chart.test.jsx +47 -0
  72. data/app/pb_kits/playbook/pb_pb_gauge_chart/_pb_gauge_chart.scss +3 -0
  73. data/app/pb_kits/playbook/pb_pb_gauge_chart/_pb_gauge_chart.tsx +69 -0
  74. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_description.md +3 -0
  75. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_color.html.erb +12 -0
  76. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_color.jsx +24 -0
  77. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_color.md +5 -0
  78. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_complex.html.erb +45 -0
  79. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_complex.jsx +119 -0
  80. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_complex.md +1 -0
  81. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_default.html.erb +5 -0
  82. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_default.jsx +17 -0
  83. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_disable_animation.html.erb +12 -0
  84. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_disable_animation.jsx +24 -0
  85. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_full_circle.html.erb +23 -0
  86. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_full_circle.jsx +37 -0
  87. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_height.html.erb +40 -0
  88. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_height.jsx +56 -0
  89. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_live_data.jsx +64 -0
  90. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_min_max.html.erb +27 -0
  91. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_min_max.jsx +40 -0
  92. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_min_max.md +1 -0
  93. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_sizing.html.erb +19 -0
  94. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_sizing.jsx +65 -0
  95. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_sizing.md +3 -0
  96. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_title.html.erb +14 -0
  97. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_title.jsx +27 -0
  98. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_units.html.erb +39 -0
  99. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_units.jsx +58 -0
  100. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/_pb_gauge_chart_units.md +1 -0
  101. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/example.yml +29 -0
  102. data/app/pb_kits/playbook/pb_pb_gauge_chart/docs/index.js +11 -0
  103. data/app/pb_kits/playbook/pb_pb_gauge_chart/pbGaugeGraphTheme.ts +91 -0
  104. data/app/pb_kits/playbook/pb_pb_gauge_chart/pb_gauge_chart.html.erb +1 -0
  105. data/app/pb_kits/playbook/pb_pb_gauge_chart/pb_gauge_chart.rb +25 -0
  106. data/app/pb_kits/playbook/pb_pb_gauge_chart/pb_gauge_chart.test.jsx +80 -0
  107. data/app/pb_kits/playbook/pb_pb_line_graph/_pb_line_graph.scss +3 -0
  108. data/app/pb_kits/playbook/pb_pb_line_graph/_pb_line_graph.tsx +61 -0
  109. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_description.md +3 -0
  110. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_colors.html.erb +34 -0
  111. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_colors.jsx +52 -0
  112. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_colors.md +5 -0
  113. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_default.html.erb +34 -0
  114. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_default.jsx +45 -0
  115. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_height.html.erb +47 -0
  116. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_height.jsx +64 -0
  117. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_height.md +3 -0
  118. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_legend.html.erb +24 -0
  119. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_legend.jsx +37 -0
  120. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_legend_nonclickable.html.erb +39 -0
  121. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_legend_nonclickable.jsx +45 -0
  122. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_legend_position.html.erb +86 -0
  123. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_legend_position.jsx +116 -0
  124. data/app/pb_kits/playbook/pb_pb_line_graph/docs/_pb_line_graph_legend_position.md +11 -0
  125. data/app/pb_kits/playbook/pb_pb_line_graph/docs/example.yml +20 -0
  126. data/app/pb_kits/playbook/pb_pb_line_graph/docs/index.js +6 -0
  127. data/app/pb_kits/playbook/pb_pb_line_graph/pbLineGraphTheme.ts +125 -0
  128. data/app/pb_kits/playbook/pb_pb_line_graph/pb_line_graph.html.erb +1 -0
  129. data/app/pb_kits/playbook/pb_pb_line_graph/pb_line_graph.rb +25 -0
  130. data/app/pb_kits/playbook/pb_pb_line_graph/pb_line_graph.test.jsx +110 -0
  131. data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.tsx +130 -28
  132. data/app/pb_kits/playbook/pb_popover/_popover.tsx +69 -34
  133. data/app/pb_kits/playbook/pb_popover/docs/_popover_append_to.jsx +68 -0
  134. data/app/pb_kits/playbook/pb_popover/docs/_popover_append_to_react.md +1 -0
  135. data/app/pb_kits/playbook/pb_popover/docs/example.yml +1 -0
  136. data/app/pb_kits/playbook/pb_popover/docs/index.js +1 -0
  137. data/app/pb_kits/playbook/pb_popover/popover.test.js +80 -0
  138. data/app/pb_kits/playbook/pb_rich_text_editor/TipTap/Toolbar.tsx +41 -2
  139. data/app/pb_kits/playbook/pb_rich_text_editor/TipTap/ToolbarDropdown.tsx +1 -0
  140. data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.tsx +60 -20
  141. data/app/pb_kits/playbook/pb_rich_text_editor/_tiptap_styles.scss +36 -0
  142. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_attributes.jsx +38 -0
  143. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_attributes.md +1 -0
  144. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_focus.jsx +34 -0
  145. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_focus.md +1 -0
  146. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_inline.jsx +37 -0
  147. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_inline.md +1 -0
  148. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_simple.jsx +37 -0
  149. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_sticky.jsx +38 -0
  150. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_sticky.md +1 -0
  151. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_templates.jsx +69 -0
  152. data/app/pb_kits/playbook/pb_rich_text_editor/docs/_rich_text_editor_advanced_templates.md +1 -0
  153. data/app/pb_kits/playbook/pb_rich_text_editor/docs/example.yml +8 -2
  154. data/app/pb_kits/playbook/pb_rich_text_editor/docs/index.js +6 -0
  155. data/app/pb_kits/playbook/pb_rich_text_editor/rich_text_editor.test.js +127 -1
  156. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.scss +29 -0
  157. data/app/pb_kits/playbook/pb_table/docs/_table_with_dynamic_collapsible.html.erb +63 -0
  158. data/app/pb_kits/playbook/pb_table/docs/_table_with_dynamic_collapsible.jsx +89 -0
  159. data/app/pb_kits/playbook/pb_table/docs/_table_with_dynamic_collapsible_rails.md +4 -0
  160. data/app/pb_kits/playbook/pb_table/docs/_table_with_dynamic_collapsible_react.md +3 -0
  161. data/app/pb_kits/playbook/pb_table/docs/example.yml +2 -0
  162. data/app/pb_kits/playbook/pb_table/docs/index.js +1 -0
  163. data/app/pb_kits/playbook/pb_text_input/text_input.rb +2 -2
  164. data/app/pb_kits/playbook/pb_timeline/_timeline.scss +250 -233
  165. data/app/pb_kits/playbook/pb_timeline/_timeline.tsx +1 -1
  166. data/app/pb_kits/playbook/pb_timeline/timeline.test.js +2 -2
  167. data/app/pb_kits/playbook/pb_typeahead/_typeahead.test.jsx +76 -1
  168. data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +85 -2
  169. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_custom_options.html.erb +64 -0
  170. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_custom_options.jsx +70 -0
  171. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_custom_options.md +1 -0
  172. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_default_options.html.erb +102 -0
  173. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_default_options.md +1 -0
  174. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_default_value.jsx +103 -0
  175. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_default_value.md +1 -0
  176. data/app/pb_kits/playbook/pb_typeahead/docs/example.yml +4 -0
  177. data/app/pb_kits/playbook/pb_typeahead/docs/index.js +2 -0
  178. data/app/pb_kits/playbook/tokens/_positioning.scss +1 -0
  179. data/app/pb_kits/playbook/utilities/_positioning.scss +6 -1
  180. data/app/pb_kits/playbook/utilities/globalProps.ts +3 -1
  181. data/dist/chunks/{_line_graph-ByLTvO72.js → _line_graph-CqE0-dq5.js} +1 -1
  182. data/dist/chunks/_typeahead-3ZAbZUqU.js +6 -0
  183. data/dist/chunks/{_weekday_stacked-CB1Sm0pQ.js → _weekday_stacked-D6fNzH0S.js} +3 -3
  184. data/dist/chunks/{lib-izYrkvOQ.js → lib-CGxXTQ75.js} +2 -2
  185. data/dist/chunks/{pb_form_validation-Cah5Z5J3.js → pb_form_validation-DebqlUKZ.js} +1 -1
  186. data/dist/chunks/vendor.js +1 -1
  187. data/dist/menu.yml +12 -0
  188. data/dist/playbook-doc.js +2 -2
  189. data/dist/playbook-rails-react-bindings.js +1 -1
  190. data/dist/playbook-rails.js +1 -1
  191. data/dist/playbook.css +1 -1
  192. data/lib/playbook/pb_forms_helper.rb +7 -6
  193. data/lib/playbook/version.rb +2 -2
  194. data/lib/playbook/z_index.rb +1 -1
  195. metadata +101 -8
  196. data/dist/chunks/_typeahead-DXZQU3hC.js +0 -6
  197. /data/app/pb_kits/playbook/pb_popover/docs/{_popover_append_to.md → _popover_append_to_rails.md} +0 -0
@@ -1,4 +1,4 @@
1
- import React, { useState, useEffect, forwardRef} from 'react'
1
+ import React, { useState, useEffect, forwardRef, useRef} from 'react'
2
2
  import Select from 'react-select'
3
3
  import AsyncSelect from 'react-select/async'
4
4
  import CreateableSelect from 'react-select/creatable'
@@ -106,6 +106,8 @@ const Typeahead = forwardRef<HTMLInputElement, TypeaheadProps>(({
106
106
  const [inputValue, setInputValue] = useState("")
107
107
  // State to track if form has been submitted to control validation display for react rendered rails kit
108
108
  const [formSubmitted, setFormSubmitted] = useState(false)
109
+ // State to track if user has made a selection (to disable defaultValue focus behavior)
110
+ const [hasUserSelected, setHasUserSelected] = useState(false)
109
111
 
110
112
  // If preserveSearchInput is true, we need to control the input value
111
113
  const handleInputChange = preserveSearchInput
@@ -139,6 +141,83 @@ const Typeahead = forwardRef<HTMLInputElement, TypeaheadProps>(({
139
141
  }
140
142
  : props.onBlur
141
143
 
144
+ // Create a ref to access React Select instance
145
+ const selectRef = useRef<any>(null)
146
+
147
+ // Helper function to flatten grouped options if custom groups are used
148
+ const flattenOptions = (options: any[]): any[] => {
149
+ if (!options) return []
150
+
151
+ return options.reduce((acc, option) => {
152
+ if (option.options && Array.isArray(option.options)) {
153
+ return [...acc, ...option.options]
154
+ }
155
+ return [...acc, option]
156
+ }, [])
157
+ }
158
+
159
+ // Configure focus on selected option using React Select's API
160
+ const handleMenuOpen = () => {
161
+ setTimeout(() => {
162
+ let currentValue = props.value || props.defaultValue
163
+
164
+ // Handle react rendered rails version which passes arrays even for single selects
165
+ if (Array.isArray(currentValue) && currentValue.length > 0) {
166
+ currentValue = currentValue[0]
167
+ }
168
+
169
+ // Only apply custom focus if user has NOT made a selection yet
170
+ if (currentValue && selectRef.current && !hasUserSelected && !props.isMulti) {
171
+
172
+ const options = props.options
173
+ if (options) {
174
+ // Flatten grouped options to find the matching option and find matching option
175
+ const flatOptions = flattenOptions(options)
176
+
177
+ const targetOption = flatOptions.find((option: any) => {
178
+ const optionValue = props.getOptionValue ? props.getOptionValue(option) : option.value
179
+ const currentOptionValue = props.getOptionValue ? props.getOptionValue(currentValue) : currentValue.value
180
+ return optionValue === currentOptionValue
181
+ })
182
+
183
+ if (targetOption) {
184
+ // Use React Select's internal state to set focused option
185
+ if (selectRef.current && selectRef.current.setState) {
186
+ selectRef.current.setState({
187
+ focusedOption: targetOption,
188
+ focusedValue: null
189
+ })
190
+
191
+ // Handle scrolling so selected option is visible
192
+ setTimeout(() => {
193
+ if (selectRef.current && selectRef.current.menuListRef) {
194
+ const menuElement = selectRef.current.menuListRef
195
+ // Find the focused option using React Select's class
196
+ const focusedElement = menuElement.querySelector('.typeahead-kit-select__option--is-focused')
197
+
198
+ if (focusedElement) {
199
+ const optionTop = focusedElement.offsetTop
200
+ const optionHeight = focusedElement.offsetHeight
201
+ const menuHeight = menuElement.clientHeight
202
+
203
+ // Set the menu's scrollTop to position the selected option in the middle
204
+ const scrollToMiddle = optionTop - (menuHeight / 2) + (optionHeight / 2)
205
+ menuElement.scrollTop = Math.max(0, scrollToMiddle)
206
+ }
207
+ }
208
+ }, 20)
209
+ }
210
+ }
211
+ }
212
+ }
213
+ }, 0)
214
+
215
+ // Call original onMenuOpen if provided
216
+ if (props.onMenuOpen) {
217
+ props.onMenuOpen()
218
+ }
219
+ }
220
+
142
221
  const selectProps = {
143
222
  cacheOptions: true,
144
223
  required,
@@ -172,6 +251,7 @@ const Typeahead = forwardRef<HTMLInputElement, TypeaheadProps>(({
172
251
  ...(preserveSearchInput ? { inputValue } : {}),
173
252
  onInputChange: handleInputChange,
174
253
  onBlur: handleBlur,
254
+ onMenuOpen: handleMenuOpen,
175
255
  ...props,
176
256
  }
177
257
 
@@ -261,6 +341,8 @@ const Typeahead = forwardRef<HTMLInputElement, TypeaheadProps>(({
261
341
  // Reset form submitted state when a selection is made (this is all for react rendered rails kit)
262
342
  if (action === 'select-option') {
263
343
  setFormSubmitted(false)
344
+ // Mark that user has made a selection to disable default value focus behavior
345
+ setHasUserSelected(true)
264
346
  }
265
347
 
266
348
  // If a value is selected and we're preserving input on blur, clear the input
@@ -269,7 +351,7 @@ const Typeahead = forwardRef<HTMLInputElement, TypeaheadProps>(({
269
351
  }
270
352
 
271
353
  if (action === 'select-option') {
272
- if (selectProps.onMultiValueClick) selectProps.onMultiValueClick(option)
354
+ if (selectProps.onMultiValueClick && option) selectProps.onMultiValueClick(option)
273
355
  const multiValueClearEvent = new CustomEvent(`pb-typeahead-kit-${selectProps.id}-result-option-select`, { detail: option ? option : _data })
274
356
  document.dispatchEvent(multiValueClearEvent)
275
357
  }
@@ -317,6 +399,7 @@ const Typeahead = forwardRef<HTMLInputElement, TypeaheadProps>(({
317
399
  error={errorDisplay}
318
400
  isDisabled={disabled}
319
401
  onChange={handleOnChange}
402
+ ref={selectRef}
320
403
  {...selectProps}
321
404
  />
322
405
  </div>
@@ -0,0 +1,64 @@
1
+ <%
2
+ grouped_options = [
3
+ {
4
+ label: "Warm Colors",
5
+ options: [
6
+ { label: "Red", value: "#FF0000" },
7
+ { label: "Orange", value: "#FFA500" },
8
+ { label: "Yellow", value: "#FFFF00" },
9
+ { label: "Coral", value: "#FF7F50" },
10
+ { label: "Gold", value: "#FFD700" }
11
+ ]
12
+ },
13
+ {
14
+ label: "Cool Colors",
15
+ options: [
16
+ { label: "Blue", value: "#0000FF" },
17
+ { label: "Teal", value: "#008080" },
18
+ { label: "Cyan", value: "#00FFFF" },
19
+ { label: "Navy", value: "#000080" },
20
+ { label: "Turquoise", value: "#40E0D0" }
21
+ ]
22
+ },
23
+ {
24
+ label: "Neutrals",
25
+ options: [
26
+ { label: "White", value: "#FFFFFF" },
27
+ { label: "Black", value: "#000000" },
28
+ { label: "Gray", value: "#808080" },
29
+ { label: "Beige", value: "#F5F5DC" },
30
+ { label: "Silver", value: "#C0C0C0" }
31
+ ]
32
+ },
33
+ {
34
+ label: "Earth Tones",
35
+ options: [
36
+ { label: "Brown", value: "#A52A2A" },
37
+ { label: "Olive", value: "#808000" },
38
+ { label: "Forest Green", value: "#228B22" },
39
+ { label: "Tan", value: "#D2B48C" },
40
+ { label: "Maroon", value: "#800000" }
41
+ ]
42
+ },
43
+ {
44
+ label: "Fun Shades",
45
+ options: [
46
+ { label: "Pink", value: "#FFC0CB" },
47
+ { label: "Magenta", value: "#FF00FF" },
48
+ { label: "Lime", value: "#00FF00" },
49
+ { label: "Purple", value: "#800080" },
50
+ { label: "Indigo", value: "#4B0082" }
51
+ ]
52
+ }
53
+ ]
54
+ %>
55
+ <br />
56
+ <%= pb_rails("typeahead", props: {
57
+ id: "typeahead-custom-options",
58
+ options: grouped_options,
59
+ label: "Colors",
60
+ name: :foo,
61
+ placeholder: "Select a Color...",
62
+ is_multi: false
63
+ })
64
+ %>
@@ -0,0 +1,70 @@
1
+ import React from 'react'
2
+
3
+ import Typeahead from '../_typeahead'
4
+
5
+ const groupedOptions = [
6
+ {
7
+ label: "Warm Colors",
8
+ options: [
9
+ { label: "Red", value: "#FF0000" },
10
+ { label: "Orange", value: "#FFA500" },
11
+ { label: "Yellow", value: "#FFFF00" },
12
+ { label: "Coral", value: "#FF7F50" },
13
+ { label: "Gold", value: "#FFD700" }
14
+ ]
15
+ },
16
+ {
17
+ label: "Cool Colors",
18
+ options: [
19
+ { label: "Blue", value: "#0000FF" },
20
+ { label: "Teal", value: "#008080" },
21
+ { label: "Cyan", value: "#00FFFF" },
22
+ { label: "Navy", value: "#000080" },
23
+ { label: "Turquoise", value: "#40E0D0" }
24
+ ]
25
+ },
26
+ {
27
+ label: "Neutrals",
28
+ options: [
29
+ { label: "White", value: "#FFFFFF" },
30
+ { label: "Black", value: "#000000" },
31
+ { label: "Gray", value: "#808080" },
32
+ { label: "Beige", value: "#F5F5DC" },
33
+ { label: "Silver", value: "#C0C0C0" }
34
+ ]
35
+ },
36
+ {
37
+ label: "Earth Tones",
38
+ options: [
39
+ { label: "Brown", value: "#A52A2A" },
40
+ { label: "Olive", value: "#808000" },
41
+ { label: "Forest Green", value: "#228B22" },
42
+ { label: "Tan", value: "#D2B48C" },
43
+ { label: "Maroon", value: "#800000" }
44
+ ]
45
+ },
46
+ {
47
+ label: "Fun Shades",
48
+ options: [
49
+ { label: "Pink", value: "#FFC0CB" },
50
+ { label: "Magenta", value: "#FF00FF" },
51
+ { label: "Lime", value: "#00FF00" },
52
+ { label: "Purple", value: "#800080" },
53
+ { label: "Indigo", value: "#4B0082" }
54
+ ]
55
+ }
56
+ ]
57
+
58
+ const TypeaheadCustomOptions = (props) => {
59
+ return (
60
+ <Typeahead
61
+ label="Colors"
62
+ options={groupedOptions}
63
+ placeholder="Select a Color..."
64
+ {...props}
65
+ />
66
+ )
67
+ }
68
+
69
+ export default TypeaheadCustomOptions
70
+
@@ -0,0 +1 @@
1
+ Grouped options can be rendered via structuring the options in the way shown in the code snippet below.
@@ -0,0 +1,102 @@
1
+ <%
2
+ options = [
3
+ { label: 'Orange', value: '#FFA500' },
4
+ { label: 'Red', value: '#FF0000' },
5
+ { label: 'Green', value: '#1e3d1eff' },
6
+ { label: 'Blue', value: '#0000FF' },
7
+ { label: 'Purple', value: '#800080' },
8
+ { label: 'Yellow', value: '#FFFF00' },
9
+ { label: 'Pink', value: '#FFC0CB' },
10
+ { label: 'Brown', value: '#A52A2A' },
11
+ { label: 'Black', value: '#000000' },
12
+ { label: 'White', value: '#FFFFFF' },
13
+ { label: 'Gray', value: '#808080' },
14
+ { label: 'Cyan', value: '#00FFFF' },
15
+ { label: 'Magenta', value: '#FF00FF' },
16
+ { label: 'Lime', value: '#00FF00' },
17
+ { label: 'Maroon', value: '#800000' },
18
+ { label: 'Olive', value: '#808000' },
19
+ { label: 'Navy', value: '#000080' },
20
+ { label: 'Teal', value: '#008080' },
21
+ { label: 'Silver', value: '#C0C0C0' },
22
+ { label: 'Gold', value: '#FFD700' },
23
+ { label: 'Beige', value: '#F5F5DC' },
24
+ { label: 'Coral', value: '#FF7F50' }
25
+ ]
26
+ %>
27
+
28
+ <%
29
+ grouped_options = [
30
+ {
31
+ label: "Warm Colors",
32
+ options: [
33
+ { label: "Red", value: "#FF0000" },
34
+ { label: "Orange", value: "#FFA500" },
35
+ { label: "Yellow", value: "#FFFF00" },
36
+ { label: "Coral", value: "#FF7F50" },
37
+ { label: "Gold", value: "#FFD700" }
38
+ ]
39
+ },
40
+ {
41
+ label: "Cool Colors",
42
+ options: [
43
+ { label: "Blue", value: "#0000FF" },
44
+ { label: "Teal", value: "#008080" },
45
+ { label: "Cyan", value: "#00FFFF" },
46
+ { label: "Navy", value: "#000080" },
47
+ { label: "Turquoise", value: "#40E0D0" }
48
+ ]
49
+ },
50
+ {
51
+ label: "Neutrals",
52
+ options: [
53
+ { label: "White", value: "#FFFFFF" },
54
+ { label: "Black", value: "#000000" },
55
+ { label: "Gray", value: "#808080" },
56
+ { label: "Beige", value: "#F5F5DC" },
57
+ { label: "Silver", value: "#C0C0C0" }
58
+ ]
59
+ },
60
+ {
61
+ label: "Earth Tones",
62
+ options: [
63
+ { label: "Brown", value: "#A52A2A" },
64
+ { label: "Olive", value: "#808000" },
65
+ { label: "Forest Green", value: "#228B22" },
66
+ { label: "Tan", value: "#D2B48C" },
67
+ { label: "Maroon", value: "#800000" }
68
+ ]
69
+ },
70
+ {
71
+ label: "Fun Shades",
72
+ options: [
73
+ { label: "Pink", value: "#FFC0CB" },
74
+ { label: "Magenta", value: "#FF00FF" },
75
+ { label: "Lime", value: "#00FF00" },
76
+ { label: "Purple", value: "#800080" },
77
+ { label: "Indigo", value: "#4B0082" }
78
+ ]
79
+ }
80
+ ]
81
+ %>
82
+
83
+
84
+ <%= pb_rails("typeahead", props: {
85
+ default_options: [{ label: 'Gray', value: '#808080' }],
86
+ id: "typeahead-default-value",
87
+ options: options,
88
+ label: "Default Value with basic options",
89
+ name: :foo,
90
+ is_multi: false
91
+ })
92
+ %>
93
+
94
+ <%= pb_rails("typeahead", props: {
95
+ default_options:[{ label: "Pink", value: "#FFC0CB" }],
96
+ id: "typeahead-default-value-grouped-options",
97
+ options: grouped_options,
98
+ label: "Default Value with grouped options",
99
+ name: :foo,
100
+ is_multi: false
101
+ })
102
+ %>
@@ -0,0 +1 @@
1
+ The optional `default_options` prop can be used to set a default value for the kit. When a default value is set, focus will be automatically set to the selected option and the dropdown container will scroll to bring the selected option into view.
@@ -0,0 +1,103 @@
1
+ import React from 'react'
2
+
3
+ import Typeahead from '../_typeahead'
4
+
5
+ const options = [
6
+ { label: 'Orange', value: '#FFA500' },
7
+ { label: 'Red', value: '#FF0000' },
8
+ { label: 'Green', value: '#1e3d1eff' },
9
+ { label: 'Blue', value: '#0000FF' },
10
+ { label: 'Purple', value: '#800080' },
11
+ { label: 'Yellow', value: '#FFFF00' },
12
+ { label: 'Pink', value: '#FFC0CB' },
13
+ { label: 'Brown', value: '#A52A2A' },
14
+ { label: 'Black', value: '#000000' },
15
+ { label: 'White', value: '#FFFFFF' },
16
+ { label: 'Gray', value: '#808080' },
17
+ { label: 'Cyan', value: '#00FFFF' },
18
+ { label: 'Magenta', value: '#FF00FF' },
19
+ { label: 'Lime', value: '#00FF00' },
20
+ { label: 'Maroon', value: '#800000' },
21
+ { label: 'Olive', value: '#808000' },
22
+ { label: 'Navy', value: '#000080' },
23
+ { label: 'Teal', value: '#008080' },
24
+ { label: 'Silver', value: '#C0C0C0' },
25
+ { label: 'Gold', value: '#FFD700' },
26
+ { label: 'Beige', value: '#F5F5DC' },
27
+ { label: 'Coral', value: '#FF7F50' }
28
+ ]
29
+
30
+ const groupedOptions = [
31
+ {
32
+ label: "Warm Colors",
33
+ options: [
34
+ { label: "Red", value: "#FF0000" },
35
+ { label: "Orange", value: "#FFA500" },
36
+ { label: "Yellow", value: "#FFFF00" },
37
+ { label: "Coral", value: "#FF7F50" },
38
+ { label: "Gold", value: "#FFD700" }
39
+ ]
40
+ },
41
+ {
42
+ label: "Cool Colors",
43
+ options: [
44
+ { label: "Blue", value: "#0000FF" },
45
+ { label: "Teal", value: "#008080" },
46
+ { label: "Cyan", value: "#00FFFF" },
47
+ { label: "Navy", value: "#000080" },
48
+ { label: "Turquoise", value: "#40E0D0" }
49
+ ]
50
+ },
51
+ {
52
+ label: "Neutrals",
53
+ options: [
54
+ { label: "White", value: "#FFFFFF" },
55
+ { label: "Black", value: "#000000" },
56
+ { label: "Gray", value: "#808080" },
57
+ { label: "Beige", value: "#F5F5DC" },
58
+ { label: "Silver", value: "#C0C0C0" }
59
+ ]
60
+ },
61
+ {
62
+ label: "Earth Tones",
63
+ options: [
64
+ { label: "Brown", value: "#A52A2A" },
65
+ { label: "Olive", value: "#808000" },
66
+ { label: "Forest Green", value: "#228B22" },
67
+ { label: "Tan", value: "#D2B48C" },
68
+ { label: "Maroon", value: "#800000" }
69
+ ]
70
+ },
71
+ {
72
+ label: "Fun Shades",
73
+ options: [
74
+ { label: "Pink", value: "#FFC0CB" },
75
+ { label: "Magenta", value: "#FF00FF" },
76
+ { label: "Lime", value: "#00FF00" },
77
+ { label: "Purple", value: "#800080" },
78
+ { label: "Indigo", value: "#4B0082" }
79
+ ]
80
+ }
81
+ ]
82
+
83
+ const TypeaheadDefaultValue = (props) => {
84
+ return (
85
+ <>
86
+ <Typeahead
87
+ defaultValue={options[10]}
88
+ label="Default Value with basic options"
89
+ options={options}
90
+ {...props}
91
+ />
92
+ <br />
93
+ <Typeahead
94
+ defaultValue={{ label: "Pink", value: "#FFC0CB" }}
95
+ label="Default Value with grouped options"
96
+ options={groupedOptions}
97
+ {...props}
98
+ />
99
+ </>
100
+ )
101
+ }
102
+
103
+ export default TypeaheadDefaultValue
@@ -0,0 +1 @@
1
+ The optional `defaultValue` prop can be used to set a default value for the kit. When a default value is set, focus will be automatically set to the selected option and the dropdown container will scroll to bring the selected option into view.
@@ -1,6 +1,8 @@
1
1
  examples:
2
2
  rails:
3
3
  - typeahead_default: Default
4
+ - typeahead_custom_options: With Grouped Options
5
+ - typeahead_default_options: With Default Options
4
6
  - typeahead_with_context: With Context
5
7
  - typeahead_with_pills: With Pills
6
8
  - typeahead_without_pills: Without Pills (Single Select)
@@ -19,6 +21,8 @@ examples:
19
21
 
20
22
  react:
21
23
  - typeahead_default: Default
24
+ - typeahead_custom_options: With Grouped Options
25
+ - typeahead_default_value: With Default Value
22
26
  - typeahead_react_hook: React Hook
23
27
  - typeahead_with_highlight: With Highlight
24
28
  - typeahead_with_pills: With Pills
@@ -16,3 +16,5 @@ export { default as TypeaheadTruncatedText } from './_typeahead_truncated_text.j
16
16
  export { default as TypeaheadReactHook } from './_typeahead_react_hook.jsx'
17
17
  export { default as TypeaheadDisabled } from './_typeahead_disabled.jsx'
18
18
  export { default as TypeaheadPreserveInput } from './_typeahead_preserve_input.jsx'
19
+ export { default as TypeaheadDefaultValue } from './_typeahead_default_value.jsx'
20
+ export { default as TypeaheadCustomOptions } from './_typeahead_custom_options.jsx'
@@ -22,6 +22,7 @@ $z_7: 700 !default;
22
22
  $z_8: 800 !default;
23
23
  $z_9: 900 !default;
24
24
  $z_10: 1000 !default;
25
+ $z_max: 999999 !default;
25
26
  $z_index: (
26
27
  zindex_1: $z_1,
27
28
  zindex_2: $z_1,
@@ -58,6 +58,10 @@
58
58
  z-index: $z_10 !important;
59
59
  }
60
60
 
61
+ .z_index_max {
62
+ z-index: $z_max !important;
63
+ }
64
+
61
65
  $zIndex_values: (
62
66
  1: $z_1,
63
67
  2: $z_2,
@@ -68,7 +72,8 @@ $zIndex_values: (
68
72
  7: $z_7,
69
73
  8: $z_8,
70
74
  9: $z_9,
71
- 10: $z_10
75
+ 10: $z_10,
76
+ max: $z_max
72
77
  );
73
78
 
74
79
  @each $size, $size_value in $breakpoints_grid {
@@ -186,7 +186,7 @@ type VerticalAlign = {
186
186
  verticalAlign?: "baseline" | "super" | "top" | "middle" | "bottom" | "sub" | "text-top" | "text-bottom"
187
187
  }
188
188
 
189
- type ZIndexType = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10
189
+ type ZIndexType = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 'max'
190
190
  type ZIndexResponsiveType = {[key: string]: ZIndexType}
191
191
  type ZIndex = {
192
192
  zIndex?: ZIndexType,
@@ -439,6 +439,8 @@ const PROP_CATEGORIES: {[key:string]: (props: {[key: string]: any}) => string} =
439
439
  Object.entries(zIndexEntry[1]).forEach((zIndexObj) => {
440
440
  css += `z_index_${zIndexObj[0]}_${zIndexObj[1]} `
441
441
  })
442
+ } else if (zIndexEntry[1] === 'max') {
443
+ css += `z_index_max `
442
444
  }
443
445
  }
444
446
  })
@@ -1 +1 @@
1
- import{jsx,Fragment,jsxs}from"react/jsx-runtime";import{useState,useEffect}from"react";import{d as buildAriaProps,e as buildDataProps,f as buildHtmlProps,H as HighchartsReact,g as Highcharts,h as classnames,i as globalProps,j as HighchartsMore,S as SolidGauge,k as buildCss}from"./_typeahead-DXZQU3hC.js";import{c as colors,h as highchartsTheme,m as merge,a as highchartsDarkTheme,t as typography}from"./lib-izYrkvOQ.js";const mapColors=array=>{const regex=/(data)\-[1-8]/;const newArray=array.map((item=>regex.test(item)?`${colors[`data_${item[item.length-1]}`]}`:item));return newArray};const BarGraph=({aria:aria={},data:data={},align:align="center",axisTitle:axisTitle,dark:dark=false,chartData:chartData,className:className="pb_bar_graph",colors:colors2,htmlOptions:htmlOptions={},customOptions:customOptions={},axisFormat:axisFormat,id:id,pointStart:pointStart,stacking:stacking,subTitle:subTitle,type:type="column",title:title="Title",xAxisCategories:xAxisCategories,yAxisMin:yAxisMin,yAxisMax:yAxisMax,legend:legend=false,toggleLegendClick:toggleLegendClick=true,height:height,layout:layout="horizontal",verticalAlign:verticalAlign="bottom",x:x=0,y:y=0,...props})=>{const ariaProps=buildAriaProps(aria);const dataProps=buildDataProps(data);const htmlProps=buildHtmlProps(htmlOptions);const setupTheme=()=>{dark?Highcharts.setOptions(highchartsDarkTheme):Highcharts.setOptions(highchartsTheme)};setupTheme();const staticOptions={title:{text:title},chart:{height:height,type:type},subtitle:{text:subTitle},yAxis:[{labels:{format:typeof axisFormat==="string"?axisFormat:axisFormat&&axisFormat[0]?axisFormat[0].format:""},min:yAxisMin,max:yAxisMax,opposite:false,title:{text:Array.isArray(axisTitle)?axisTitle.length>0?axisTitle[0].name:null:axisTitle},plotLines:typeof yAxisMin!=="undefined"&&yAxisMin!==null?[]:[{value:0,zIndex:10,color:"#E4E8F0"}]}],xAxis:{categories:xAxisCategories},legend:{enabled:legend,align:align,verticalAlign:verticalAlign,layout:layout,x:x,y:y},colors:colors2!==void 0&&colors2.length>0?mapColors(colors2):highchartsTheme.colors,plotOptions:{series:{stacking:stacking,pointStart:pointStart,borderWidth:stacking?0:"",events:{},dataLabels:{enabled:false}}},series:chartData,credits:false};if(Array.isArray(axisTitle)&&axisTitle.length>1&&axisTitle[1].name){staticOptions.yAxis.push({labels:{format:typeof axisFormat==="string"?axisFormat:axisFormat[1].format},min:yAxisMin,max:yAxisMax,opposite:true,title:{text:axisTitle[1].name},plotLines:typeof yAxisMin!=="undefined"&&yAxisMin!==null?[]:[{value:0,zIndex:10,color:"#E4E8F0"}]})}if(!toggleLegendClick){staticOptions.plotOptions.series.events={legendItemClick:()=>false}}const filteredProps={...props};delete filteredProps.verticalAlign;const[options,setOptions]=useState({});useEffect((()=>{setOptions(merge(staticOptions,customOptions))}),[chartData]);return jsx(HighchartsReact,{containerProps:{className:classnames(globalProps(filteredProps),className),id:id,...ariaProps,...dataProps,...htmlProps},highcharts:Highcharts,options:options})};const alignBlockElement=event=>{const itemToMove=document.querySelector(`#wrapper-circle-chart-${event.target.renderTo.id} .pb-circle-chart-block`);const chartContainer=document.querySelector(`#${event.target.renderTo.id}`);if(itemToMove!==null&&chartContainer!==null){itemToMove.style.height=`${event.target.chartHeight}px`;itemToMove.style.width=`${event.target.chartWidth}px`;if(chartContainer.firstChild!==null){chartContainer.firstChild.before(itemToMove)}}};const CircleChart=({align:align="center",aria:aria={},rounded:rounded=false,borderColor:borderColor=(rounded?null:""),borderWidth:borderWidth=(rounded?20:null),chartData:chartData,children:children,className:className,colors:colors2=[],customOptions:customOptions={},dark:dark=false,data:data={},dataLabelHtml:dataLabelHtml="<div>{point.name}</div>",dataLabels:dataLabels=false,height:height,htmlOptions:htmlOptions={},id:id,innerSize:innerSize="md",legend:legend=false,maxPointSize:maxPointSize=null,minPointSize:minPointSize=null,startAngle:startAngle=null,style:style="pie",title:title,tooltipHtml:tooltipHtml,useHtml:useHtml=false,zMin:zMin=null,layout:layout="horizontal",verticalAlign:verticalAlign="bottom",x:x=0,y:y=0,...props})=>{const ariaProps=buildAriaProps(aria);const dataProps=buildDataProps(data);const htmlProps=buildHtmlProps(htmlOptions);HighchartsMore(Highcharts);const setupTheme=()=>{dark?Highcharts.setOptions(highchartsDarkTheme):Highcharts.setOptions(highchartsTheme)};setupTheme();Highcharts.setOptions({tooltip:{headerFormat:null,pointFormat:tooltipHtml?tooltipHtml:'<span style="font-weight: bold; color:{point.color};">●</span>{point.name}: <b>{point.y}</b>',useHTML:useHtml}});const innerSizes={sm:"35%",md:"50%",lg:"85%",none:"0%"};const innerSizeFormat=size=>innerSizes[size];const filteredProps={...props};delete filteredProps.verticalAlign;const[options,setOptions]=useState({});useEffect((()=>{const formattedChartData=chartData.map((obj=>{obj.y=obj.value;delete obj.value;return obj}));const staticOptions={title:{text:title},chart:{height:height,type:style,events:{render:event=>alignBlockElement(event),redraw:event=>alignBlockElement(event)}},legend:{align:align,verticalAlign:verticalAlign,layout:layout,x:x,y:y},plotOptions:{pie:{colors:colors2.length>0?mapColors(colors2):highchartsTheme.colors,dataLabels:{enabled:dataLabels,connectorShape:"straight",connectorWidth:3,format:dataLabelHtml},showInLegend:legend}},series:[{minPointSize:minPointSize,maxPointSize:maxPointSize,innerSize:borderWidth==20?"100%":innerSizeFormat(innerSize),data:formattedChartData,zMin:zMin,startAngle:startAngle,borderWidth:borderWidth,borderColor:borderColor}],credits:false};setOptions(merge(staticOptions,customOptions))}),[chartData]);return jsx(Fragment,{children:children?jsxs("div",{id:`wrapper-circle-chart-${id}`,children:[jsx(HighchartsReact,{containerProps:{className:classnames("pb_circle_chart",globalProps(filteredProps)),id:id,...ariaProps,...dataProps,...htmlProps},highcharts:Highcharts,options:options}),jsx("div",{className:"pb-circle-chart-block",children:children})]}):jsx(HighchartsReact,{containerProps:{className:classnames("pb_circle_chart",globalProps(filteredProps)),id:id,...ariaProps,...dataProps,...htmlProps},highcharts:Highcharts,options:options})})};const Gauge=({aria:aria={},chartData:chartData,customOptions:customOptions={},dark:dark=false,data:data={},disableAnimation:disableAnimation=false,fullCircle:fullCircle=false,height:height=null,htmlOptions:htmlOptions={},id:id,max:max=100,min:min=0,prefix:prefix="",showLabels:showLabels=false,style:style="solidgauge",suffix:suffix="",title:title="",tooltipHtml:tooltipHtml='<span style="font-weight: bold; color:{point.color};">●</span>{point.name}: <b>{point.y}</b>',colors:colors$1=[],minorTickInterval:minorTickInterval=null,circumference:circumference=(fullCircle?[0,360]:[-100,100]),...props})=>{const ariaProps=buildAriaProps(aria);const dataProps=buildDataProps(data);const htmlProps=buildHtmlProps(htmlOptions);HighchartsMore(Highcharts);SolidGauge(Highcharts);const setupTheme=()=>{dark?Highcharts.setOptions(highchartsDarkTheme):Highcharts.setOptions(highchartsTheme)};setupTheme();Highcharts.setOptions({tooltip:{pointFormat:tooltipHtml,followPointer:true}});const css=buildCss({pb_gauge_kit:true});const[options,setOptions]=useState({});useEffect((()=>{const formattedChartData=chartData.map((obj=>{obj.y=obj.value;delete obj.value;return obj}));const staticOptions={chart:{events:{load(){setTimeout(this.reflow.bind(this),0)}},type:style,height:height},title:{text:title},yAxis:{min:min,max:max,lineWidth:0,tickWidth:0,minorTickInterval:minorTickInterval,tickAmount:2,tickPositions:[min,max],labels:{y:26,enabled:showLabels}},credits:false,series:[{data:formattedChartData}],pane:{center:["50%","50%"],size:"90%",startAngle:circumference[0],endAngle:circumference[1],background:{borderWidth:20,innerRadius:"90%",outerRadius:"90%",shape:"arc",className:"gauge-pane"}},colors:colors$1!==void 0&&colors$1.length>0?mapColors(colors$1):highchartsTheme.colors,plotOptions:{series:{animation:!disableAnimation},solidgauge:{borderColor:colors$1!==void 0&&colors$1.length===1?mapColors(colors$1).join():highchartsTheme.colors[0],borderWidth:20,radius:90,innerRadius:"90%",dataLabels:{borderWidth:0,color:colors.text_lt_default,enabled:true,format:`<span class="prefix${dark?" dark":""}">${prefix}</span><span class="fix${dark?" dark":""}">{y:,f}</span><span class="suffix${dark?" dark":""}">${suffix}</span>`,style:{fontFamily:typography.font_family_base,fontWeight:typography.regular,fontSize:typography.heading_2},y:-26}}}};setOptions(merge(staticOptions,customOptions));if(document.querySelector(".prefix")){document.querySelectorAll(".prefix").forEach((prefix2=>{prefix2.setAttribute("y","28")}));document.querySelectorAll(".fix").forEach((fix=>fix.setAttribute("y","38")))}}),[chartData]);return jsx(HighchartsReact,{containerProps:{className:classnames(css,globalProps(props)),id:id,...ariaProps,...dataProps,...htmlProps},highcharts:Highcharts,options:options})};const LineGraph=({aria:aria={},data:data={},align:align="center",className:className="pb_bar_graph",customOptions:customOptions={},dark:dark=false,gradient:gradient=false,type:type="line",htmlOptions:htmlOptions={},id:id,legend:legend=false,toggleLegendClick:toggleLegendClick=true,layout:layout="horizontal",verticalAlign:verticalAlign="bottom",x:x=0,y:y=0,axisTitle:axisTitle,xAxisCategories:xAxisCategories,yAxisMin:yAxisMin,yAxisMax:yAxisMax,chartData:chartData,pointStart:pointStart,subTitle:subTitle,title:title,height:height,colors:colors2=[],...props})=>{const ariaProps=buildAriaProps(aria);const dataProps=buildDataProps(data);const htmlProps=buildHtmlProps(htmlOptions);const setupTheme=()=>{dark?Highcharts.setOptions(highchartsDarkTheme):Highcharts.setOptions(highchartsTheme)};setupTheme();const staticOptions={title:{text:title},chart:{height:height,type:type},subtitle:{text:subTitle},yAxis:{min:yAxisMin,max:yAxisMax,title:{text:axisTitle}},xAxis:{categories:xAxisCategories},legend:{enabled:legend,align:align,verticalAlign:verticalAlign,layout:layout,x:x,y:y},colors:colors2!==void 0&&colors2.length>0?mapColors(colors2):highchartsTheme.colors,plotOptions:{series:{pointStart:pointStart,events:{},dataLabels:{enabled:false}}},series:chartData,credits:false};if(!toggleLegendClick){staticOptions.plotOptions.series.events={legendItemClick:()=>false}}const filteredProps={...props};delete filteredProps.verticalAlign;const[options,setOptions]=useState({});useEffect((()=>{setOptions(merge(staticOptions,customOptions))}),[chartData]);return jsx(HighchartsReact,{containerProps:{className:classnames(globalProps(filteredProps),className),id:id,...ariaProps,...dataProps,...htmlProps},highcharts:Highcharts,options:options})};export{BarGraph as B,CircleChart as C,Gauge as G,LineGraph as L};
1
+ import{jsx,Fragment,jsxs}from"react/jsx-runtime";import{useState,useEffect}from"react";import{f as buildAriaProps,g as buildDataProps,h as buildHtmlProps,H as HighchartsReact,i as Highcharts,j as classnames,k as globalProps,l as HighchartsMore,S as SolidGauge,m as buildCss}from"./_typeahead-3ZAbZUqU.js";import{c as colors,h as highchartsTheme,m as merge,a as highchartsDarkTheme,t as typography}from"./lib-CGxXTQ75.js";const mapColors=array=>{const regex=/(data)\-[1-8]/;const newArray=array.map((item=>regex.test(item)?`${colors[`data_${item[item.length-1]}`]}`:item));return newArray};const BarGraph=({aria:aria={},data:data={},align:align="center",axisTitle:axisTitle,dark:dark=false,chartData:chartData,className:className="pb_bar_graph",colors:colors2,htmlOptions:htmlOptions={},customOptions:customOptions={},axisFormat:axisFormat,id:id,pointStart:pointStart,stacking:stacking,subTitle:subTitle,type:type="column",title:title="Title",xAxisCategories:xAxisCategories,yAxisMin:yAxisMin,yAxisMax:yAxisMax,legend:legend=false,toggleLegendClick:toggleLegendClick=true,height:height,layout:layout="horizontal",verticalAlign:verticalAlign="bottom",x:x=0,y:y=0,...props})=>{const ariaProps=buildAriaProps(aria);const dataProps=buildDataProps(data);const htmlProps=buildHtmlProps(htmlOptions);const setupTheme=()=>{dark?Highcharts.setOptions(highchartsDarkTheme):Highcharts.setOptions(highchartsTheme)};setupTheme();const staticOptions={title:{text:title},chart:{height:height,type:type},subtitle:{text:subTitle},yAxis:[{labels:{format:typeof axisFormat==="string"?axisFormat:axisFormat&&axisFormat[0]?axisFormat[0].format:""},min:yAxisMin,max:yAxisMax,opposite:false,title:{text:Array.isArray(axisTitle)?axisTitle.length>0?axisTitle[0].name:null:axisTitle},plotLines:typeof yAxisMin!=="undefined"&&yAxisMin!==null?[]:[{value:0,zIndex:10,color:"#E4E8F0"}]}],xAxis:{categories:xAxisCategories},legend:{enabled:legend,align:align,verticalAlign:verticalAlign,layout:layout,x:x,y:y},colors:colors2!==void 0&&colors2.length>0?mapColors(colors2):highchartsTheme.colors,plotOptions:{series:{stacking:stacking,pointStart:pointStart,borderWidth:stacking?0:"",events:{},dataLabels:{enabled:false}}},series:chartData,credits:false};if(Array.isArray(axisTitle)&&axisTitle.length>1&&axisTitle[1].name){staticOptions.yAxis.push({labels:{format:typeof axisFormat==="string"?axisFormat:axisFormat[1].format},min:yAxisMin,max:yAxisMax,opposite:true,title:{text:axisTitle[1].name},plotLines:typeof yAxisMin!=="undefined"&&yAxisMin!==null?[]:[{value:0,zIndex:10,color:"#E4E8F0"}]})}if(!toggleLegendClick){staticOptions.plotOptions.series.events={legendItemClick:()=>false}}const filteredProps={...props};delete filteredProps.verticalAlign;const[options,setOptions]=useState({});useEffect((()=>{setOptions(merge(staticOptions,customOptions))}),[chartData]);return jsx(HighchartsReact,{containerProps:{className:classnames(globalProps(filteredProps),className),id:id,...ariaProps,...dataProps,...htmlProps},highcharts:Highcharts,options:options})};const alignBlockElement=event=>{const itemToMove=document.querySelector(`#wrapper-circle-chart-${event.target.renderTo.id} .pb-circle-chart-block`);const chartContainer=document.querySelector(`#${event.target.renderTo.id}`);if(itemToMove!==null&&chartContainer!==null){itemToMove.style.height=`${event.target.chartHeight}px`;itemToMove.style.width=`${event.target.chartWidth}px`;if(chartContainer.firstChild!==null){chartContainer.firstChild.before(itemToMove)}}};const CircleChart=({align:align="center",aria:aria={},rounded:rounded=false,borderColor:borderColor=(rounded?null:""),borderWidth:borderWidth=(rounded?20:null),chartData:chartData,children:children,className:className,colors:colors2=[],customOptions:customOptions={},dark:dark=false,data:data={},dataLabelHtml:dataLabelHtml="<div>{point.name}</div>",dataLabels:dataLabels=false,height:height,htmlOptions:htmlOptions={},id:id,innerSize:innerSize="md",legend:legend=false,maxPointSize:maxPointSize=null,minPointSize:minPointSize=null,startAngle:startAngle=null,style:style="pie",title:title,tooltipHtml:tooltipHtml,useHtml:useHtml=false,zMin:zMin=null,layout:layout="horizontal",verticalAlign:verticalAlign="bottom",x:x=0,y:y=0,...props})=>{const ariaProps=buildAriaProps(aria);const dataProps=buildDataProps(data);const htmlProps=buildHtmlProps(htmlOptions);HighchartsMore(Highcharts);const setupTheme=()=>{dark?Highcharts.setOptions(highchartsDarkTheme):Highcharts.setOptions(highchartsTheme)};setupTheme();Highcharts.setOptions({tooltip:{headerFormat:null,pointFormat:tooltipHtml?tooltipHtml:'<span style="font-weight: bold; color:{point.color};">●</span>{point.name}: <b>{point.y}</b>',useHTML:useHtml}});const innerSizes={sm:"35%",md:"50%",lg:"85%",none:"0%"};const innerSizeFormat=size=>innerSizes[size];const filteredProps={...props};delete filteredProps.verticalAlign;const[options,setOptions]=useState({});useEffect((()=>{const formattedChartData=chartData.map((obj=>{obj.y=obj.value;delete obj.value;return obj}));const staticOptions={title:{text:title},chart:{height:height,type:style,events:{render:event=>alignBlockElement(event),redraw:event=>alignBlockElement(event)}},legend:{align:align,verticalAlign:verticalAlign,layout:layout,x:x,y:y},plotOptions:{pie:{colors:colors2.length>0?mapColors(colors2):highchartsTheme.colors,dataLabels:{enabled:dataLabels,connectorShape:"straight",connectorWidth:3,format:dataLabelHtml},showInLegend:legend}},series:[{minPointSize:minPointSize,maxPointSize:maxPointSize,innerSize:borderWidth==20?"100%":innerSizeFormat(innerSize),data:formattedChartData,zMin:zMin,startAngle:startAngle,borderWidth:borderWidth,borderColor:borderColor}],credits:false};setOptions(merge(staticOptions,customOptions))}),[chartData]);return jsx(Fragment,{children:children?jsxs("div",{id:`wrapper-circle-chart-${id}`,children:[jsx(HighchartsReact,{containerProps:{className:classnames("pb_circle_chart",globalProps(filteredProps)),id:id,...ariaProps,...dataProps,...htmlProps},highcharts:Highcharts,options:options}),jsx("div",{className:"pb-circle-chart-block",children:children})]}):jsx(HighchartsReact,{containerProps:{className:classnames("pb_circle_chart",globalProps(filteredProps)),id:id,...ariaProps,...dataProps,...htmlProps},highcharts:Highcharts,options:options})})};const Gauge=({aria:aria={},chartData:chartData,customOptions:customOptions={},dark:dark=false,data:data={},disableAnimation:disableAnimation=false,fullCircle:fullCircle=false,height:height=null,htmlOptions:htmlOptions={},id:id,max:max=100,min:min=0,prefix:prefix="",showLabels:showLabels=false,style:style="solidgauge",suffix:suffix="",title:title="",tooltipHtml:tooltipHtml='<span style="font-weight: bold; color:{point.color};">●</span>{point.name}: <b>{point.y}</b>',colors:colors$1=[],minorTickInterval:minorTickInterval=null,circumference:circumference=(fullCircle?[0,360]:[-100,100]),...props})=>{const ariaProps=buildAriaProps(aria);const dataProps=buildDataProps(data);const htmlProps=buildHtmlProps(htmlOptions);HighchartsMore(Highcharts);SolidGauge(Highcharts);const setupTheme=()=>{dark?Highcharts.setOptions(highchartsDarkTheme):Highcharts.setOptions(highchartsTheme)};setupTheme();Highcharts.setOptions({tooltip:{pointFormat:tooltipHtml,followPointer:true}});const css=buildCss({pb_gauge_kit:true});const[options,setOptions]=useState({});useEffect((()=>{const formattedChartData=chartData.map((obj=>{obj.y=obj.value;delete obj.value;return obj}));const staticOptions={chart:{events:{load(){setTimeout(this.reflow.bind(this),0)}},type:style,height:height},title:{text:title},yAxis:{min:min,max:max,lineWidth:0,tickWidth:0,minorTickInterval:minorTickInterval,tickAmount:2,tickPositions:[min,max],labels:{y:26,enabled:showLabels}},credits:false,series:[{data:formattedChartData}],pane:{center:["50%","50%"],size:"90%",startAngle:circumference[0],endAngle:circumference[1],background:{borderWidth:20,innerRadius:"90%",outerRadius:"90%",shape:"arc",className:"gauge-pane"}},colors:colors$1!==void 0&&colors$1.length>0?mapColors(colors$1):highchartsTheme.colors,plotOptions:{series:{animation:!disableAnimation},solidgauge:{borderColor:colors$1!==void 0&&colors$1.length===1?mapColors(colors$1).join():highchartsTheme.colors[0],borderWidth:20,radius:90,innerRadius:"90%",dataLabels:{borderWidth:0,color:colors.text_lt_default,enabled:true,format:`<span class="prefix${dark?" dark":""}">${prefix}</span><span class="fix${dark?" dark":""}">{y:,f}</span><span class="suffix${dark?" dark":""}">${suffix}</span>`,style:{fontFamily:typography.font_family_base,fontWeight:typography.regular,fontSize:typography.heading_2},y:-26}}}};setOptions(merge(staticOptions,customOptions));if(document.querySelector(".prefix")){document.querySelectorAll(".prefix").forEach((prefix2=>{prefix2.setAttribute("y","28")}));document.querySelectorAll(".fix").forEach((fix=>fix.setAttribute("y","38")))}}),[chartData]);return jsx(HighchartsReact,{containerProps:{className:classnames(css,globalProps(props)),id:id,...ariaProps,...dataProps,...htmlProps},highcharts:Highcharts,options:options})};const LineGraph=({aria:aria={},data:data={},align:align="center",className:className="pb_bar_graph",customOptions:customOptions={},dark:dark=false,gradient:gradient=false,type:type="line",htmlOptions:htmlOptions={},id:id,legend:legend=false,toggleLegendClick:toggleLegendClick=true,layout:layout="horizontal",verticalAlign:verticalAlign="bottom",x:x=0,y:y=0,axisTitle:axisTitle,xAxisCategories:xAxisCategories,yAxisMin:yAxisMin,yAxisMax:yAxisMax,chartData:chartData,pointStart:pointStart,subTitle:subTitle,title:title,height:height,colors:colors2=[],...props})=>{const ariaProps=buildAriaProps(aria);const dataProps=buildDataProps(data);const htmlProps=buildHtmlProps(htmlOptions);const setupTheme=()=>{dark?Highcharts.setOptions(highchartsDarkTheme):Highcharts.setOptions(highchartsTheme)};setupTheme();const staticOptions={title:{text:title},chart:{height:height,type:type},subtitle:{text:subTitle},yAxis:{min:yAxisMin,max:yAxisMax,title:{text:axisTitle}},xAxis:{categories:xAxisCategories},legend:{enabled:legend,align:align,verticalAlign:verticalAlign,layout:layout,x:x,y:y},colors:colors2!==void 0&&colors2.length>0?mapColors(colors2):highchartsTheme.colors,plotOptions:{series:{pointStart:pointStart,events:{},dataLabels:{enabled:false}}},series:chartData,credits:false};if(!toggleLegendClick){staticOptions.plotOptions.series.events={legendItemClick:()=>false}}const filteredProps={...props};delete filteredProps.verticalAlign;const[options,setOptions]=useState({});useEffect((()=>{setOptions(merge(staticOptions,customOptions))}),[chartData]);return jsx(HighchartsReact,{containerProps:{className:classnames(globalProps(filteredProps),className),id:id,...ariaProps,...dataProps,...htmlProps},highcharts:Highcharts,options:options})};export{BarGraph as B,CircleChart as C,Gauge as G,LineGraph as L};