playbook_ui 15.1.0.pre.rc.7 → 15.2.0.pre.alpha.PLAY1978bugiconauto11317

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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/Hooks/useTableState.ts +7 -0
  3. data/app/pb_kits/playbook/pb_button/docs/_button_managed_disabled.html.erb +31 -0
  4. data/app/pb_kits/playbook/pb_button/docs/_button_managed_disabled.md +7 -0
  5. data/app/pb_kits/playbook/pb_button/docs/_button_managed_disabled_helper.html.erb +21 -0
  6. data/app/pb_kits/playbook/pb_button/docs/_button_managed_disabled_helper.md +7 -0
  7. data/app/pb_kits/playbook/pb_button/docs/example.yml +2 -0
  8. data/app/pb_kits/playbook/pb_button/index.js +99 -0
  9. data/app/pb_kits/playbook/pb_collapsible/__snapshots__/collapsible.test.js.snap +2 -2
  10. data/app/pb_kits/playbook/pb_date_picker/_date_picker.scss +4 -0
  11. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_stacked_alert.html.erb +16 -16
  12. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_stacked_alert.jsx +2 -1
  13. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_status.html.erb +31 -31
  14. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_status.jsx +4 -3
  15. data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +105 -29
  16. data/app/pb_kits/playbook/pb_dropdown/index.js +1 -1
  17. data/app/pb_kits/playbook/pb_form/docs/_form_form_with_validate.html.erb +11 -0
  18. data/app/pb_kits/playbook/pb_icon/_icon.tsx +1 -2
  19. data/app/pb_kits/playbook/pb_icon/icon.rb +1 -2
  20. data/app/pb_kits/playbook/pb_icon_circle/_icon_circle.tsx +2 -2
  21. data/app/pb_kits/playbook/pb_icon_stat_value/_icon_stat_value.scss +15 -21
  22. data/app/pb_kits/playbook/pb_icon_stat_value/_icon_stat_value.tsx +6 -5
  23. data/app/pb_kits/playbook/pb_icon_stat_value/icon_stat_value.html.erb +2 -0
  24. data/app/pb_kits/playbook/pb_icon_stat_value/icon_stat_value.rb +11 -3
  25. data/app/pb_kits/playbook/pb_icon_stat_value/icon_stat_value.test.js +9 -8
  26. data/app/pb_kits/playbook/pb_list/item.html.erb +1 -1
  27. data/app/pb_kits/playbook/pb_loading_inline/_loading_inline.tsx +1 -1
  28. data/app/pb_kits/playbook/pb_loading_inline/loading_inline.rb +1 -1
  29. data/app/pb_kits/playbook/pb_multiple_users_stacked/_multiple_users_stacked.scss +36 -9
  30. data/app/pb_kits/playbook/pb_popover/docs/_popover_list.html.erb +2 -2
  31. data/app/pb_kits/playbook/pb_selectable_list/selectable_list_item.html.erb +1 -1
  32. data/app/pb_kits/playbook/pb_text_input/_text_input.scss +3 -0
  33. data/app/pb_kits/playbook/pb_text_input/_text_input.tsx +14 -6
  34. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_default.html.erb +8 -4
  35. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_default.jsx +5 -0
  36. data/app/pb_kits/playbook/pb_text_input/docs/_text_input_default.md +1 -0
  37. data/app/pb_kits/playbook/pb_text_input/text_input.html.erb +3 -1
  38. data/app/pb_kits/playbook/pb_text_input/text_input.rb +6 -0
  39. data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +10 -10
  40. data/app/pb_kits/playbook/pb_typeahead/_typeahead.tsx +39 -1
  41. data/app/pb_kits/playbook/pb_typeahead/typeahead.rb +2 -0
  42. data/app/pb_kits/playbook/utilities/_hover.scss +2 -2
  43. data/app/pb_kits/playbook/utilities/globalProps.ts +2 -2
  44. data/dist/chunks/{_line_graph-C9stNsP3.js → _line_graph-B-R1nzPu.js} +1 -1
  45. data/dist/chunks/_typeahead-DqRbRocY.js +6 -0
  46. data/dist/chunks/{_weekday_stacked-BMwekyel.js → _weekday_stacked-C3YxWFMB.js} +3 -3
  47. data/dist/chunks/vendor.js +1 -1
  48. data/dist/menu.yml +1 -1
  49. data/dist/playbook-doc.js +2 -2
  50. data/dist/playbook-rails-react-bindings.js +1 -1
  51. data/dist/playbook-rails.js +1 -1
  52. data/dist/playbook.css +1 -1
  53. data/lib/playbook/hover.rb +5 -1
  54. data/lib/playbook/version.rb +2 -2
  55. metadata +11 -5
  56. data/dist/chunks/_typeahead-D3MtsWXG.js +0 -6
@@ -89,7 +89,18 @@ $positions: (
89
89
  }
90
90
  }
91
91
 
92
- [class^=pb_multiple_users_stacked_kit] {
92
+ .pb_multiple_users_stacked_kit,
93
+ .pb_multiple_users_stacked_kit_single,
94
+ .pb_multiple_users_stacked_kit_bubble,
95
+ .pb_multiple_users_stacked_kit_single_bubble,
96
+ .pb_multiple_users_stacked_kit_bubble_size_sm,
97
+ .pb_multiple_users_stacked_kit_bubble_size_md,
98
+ .pb_multiple_users_stacked_kit_bubble_size_lg,
99
+ .pb_multiple_users_stacked_kit_bubble_size_xl,
100
+ .pb_multiple_users_stacked_kit_single_bubble_size_sm,
101
+ .pb_multiple_users_stacked_kit_single_bubble_size_md,
102
+ .pb_multiple_users_stacked_kit_single_bubble_size_lg,
103
+ .pb_multiple_users_stacked_kit_single_bubble_size_xl {
93
104
  $container_size: map-get($avatar-sizes, "xs");
94
105
  $bubble_container_size: map-get($avatar-sizes, "sm");
95
106
  $overlap: -15px;
@@ -103,7 +114,8 @@ $positions: (
103
114
  position: relative;
104
115
  flex-shrink: 0;
105
116
  flex-grow: 0;
106
- [class^=pb_avatar_kit].pb_multiple_users_stacked_item {
117
+ .pb_avatar_kit_size_xs.pb_multiple_users_stacked_item,
118
+ .pb_avatar_kit_size_md.pb_multiple_users_stacked_item {
107
119
  @include avatar-size($stacked_size);
108
120
  &.dark {
109
121
  .avatar_wrapper {
@@ -117,10 +129,17 @@ $positions: (
117
129
  }
118
130
  }
119
131
  }
120
- &[class*=_single] .pb_multiple_users_stacked_item {
132
+ &.pb_multiple_users_stacked_kit_single .pb_multiple_users_stacked_item,
133
+ &.pb_multiple_users_stacked_kit_single_bubble .pb_multiple_users_stacked_item,
134
+ &.pb_multiple_users_stacked_kit_single_bubble_size_sm .pb_multiple_users_stacked_item,
135
+ &.pb_multiple_users_stacked_kit_single_bubble_size_md .pb_multiple_users_stacked_item,
136
+ &.pb_multiple_users_stacked_kit_single_bubble_size_lg .pb_multiple_users_stacked_item,
137
+ &.pb_multiple_users_stacked_kit_single_bubble_size_xl .pb_multiple_users_stacked_item {
121
138
  @include avatar-size(28px);
122
139
  }
123
- [class^=pb_avatar_kit].second_item, [class^=pb_badge_kit].second_item {
140
+ .pb_avatar_kit_size_xs.second_item,
141
+ .pb_avatar_kit_size_md.second_item,
142
+ .pb_badge_kit_primary_rounded.second_item {
124
143
  @include position((bottom: 0, right: 0));
125
144
  z-index: 2;
126
145
  background: tint($primary, 90%);
@@ -143,7 +162,8 @@ $positions: (
143
162
 
144
163
  // Iterate over each size to adjust the bubble container only when class contains "_bubble_"
145
164
  @each $size_name, $size_value in $avatar-sizes {
146
- &[class*=_bubble_][class*=_size_#{$size_name}] {
165
+ &.pb_multiple_users_stacked_kit_bubble_size_#{$size_name},
166
+ &.pb_multiple_users_stacked_kit_single_bubble_size_#{$size_name} {
147
167
  // Set bubble container size based on the class
148
168
  $bubble_container_size: $size_value;
149
169
  $container_size: $size_value;
@@ -161,7 +181,8 @@ $positions: (
161
181
  background-color: $card_dark;
162
182
  }
163
183
 
164
- [class^=pb_avatar_kit].pb_multiple_users_stacked_item {
184
+ .pb_avatar_kit_size_xs.pb_multiple_users_stacked_item,
185
+ .pb_avatar_kit_size_md.pb_multiple_users_stacked_item {
165
186
  @include avatar-size($bubble_container_size * 0.45); // Adjust the size of stacked avatars
166
187
 
167
188
  &.dark {
@@ -175,7 +196,8 @@ $positions: (
175
196
  }
176
197
  }
177
198
 
178
- [class^=pb_avatar_kit] {
199
+ .pb_avatar_kit_size_xs,
200
+ .pb_avatar_kit_size_md {
179
201
  // First Item
180
202
  &.first_item {
181
203
  @include position(map-get(map-get($positions, 'first-item-double'), $size_name));
@@ -235,8 +257,13 @@ $positions: (
235
257
  }
236
258
  }
237
259
 
238
- &[class*=_single_bubble] {
239
- [class^=pb_avatar_kit].first_item {
260
+ &.pb_multiple_users_stacked_kit_single_bubble,
261
+ &.pb_multiple_users_stacked_kit_single_bubble_size_sm,
262
+ &.pb_multiple_users_stacked_kit_single_bubble_size_md,
263
+ &.pb_multiple_users_stacked_kit_single_bubble_size_lg,
264
+ &.pb_multiple_users_stacked_kit_single_bubble_size_xl {
265
+ .pb_avatar_kit_size_xs.first_item,
266
+ .pb_avatar_kit_size_md.first_item {
240
267
  @include position((top: 0, left: 0));
241
268
  @include avatar-size($bubble_container_size);
242
269
  }
@@ -28,9 +28,9 @@
28
28
  popoverButton.onclick = () => {
29
29
  buttonClicked = !buttonClicked
30
30
  if (buttonClicked) {
31
- arrowDiv.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="auto" height="auto" viewBox="0 0 31 25" fill="none" class="pb_custom_icon svg-inline--fa pb_icon_kit svg_fw" id="" data="{}" aria="{}" tabindex=""><path d="M14.2031 5.70312C14.625 5.28125 15.3281 5.28125 15.75 5.70312L24.7969 14.7031C25.2188 15.1719 25.2188 15.875 24.7969 16.2969C24.3281 16.7656 23.625 16.7656 23.2031 16.2969L15 8.09375L6.79688 16.2969C6.32812 16.7656 5.625 16.7656 5.20312 16.2969C4.73438 15.875 4.73438 15.1719 5.20312 14.75L14.2031 5.70312Z" fill="currentColor"/></svg>'
31
+ arrowDiv.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="1em" viewBox="0 0 31 25" fill="none" class="pb_custom_icon svg-inline--fa pb_icon_kit svg_fw" id="" data="{}" aria="{}" tabindex=""><path d="M14.2031 5.70312C14.625 5.28125 15.3281 5.28125 15.75 5.70312L24.7969 14.7031C25.2188 15.1719 25.2188 15.875 24.7969 16.2969C24.3281 16.7656 23.625 16.7656 23.2031 16.2969L15 8.09375L6.79688 16.2969C6.32812 16.7656 5.625 16.7656 5.20312 16.2969C4.73438 15.875 4.73438 15.1719 5.20312 14.75L14.2031 5.70312Z" fill="currentColor"/></svg>'
32
32
  } else {
33
- arrowDiv.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="auto" height="auto" viewBox="0 0 31 25" fill="none" class="pb_custom_icon svg-inline--fa pb_icon_kit svg_fw" id="" data="{}" aria="{}" tabindex=""><path d="M14.2031 19.2969L5.20312 10.2969C4.73438 9.875 4.73438 9.17188 5.20312 8.70312C5.625 8.28125 6.32812 8.28125 6.79688 8.70312L15 16.9531L23.2031 8.75C23.625 8.28125 24.3281 8.28125 24.7969 8.75C25.2188 9.17188 25.2188 9.875 24.7969 10.2969L15.75 19.2969C15.3281 19.7656 14.625 19.7656 14.2031 19.2969Z" fill="currentColor"/></svg>'
33
+ arrowDiv.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="1em" viewBox="0 0 31 25" fill="none" class="pb_custom_icon svg-inline--fa pb_icon_kit svg_fw" id="" data="{}" aria="{}" tabindex=""><path d="M14.2031 19.2969L5.20312 10.2969C4.73438 9.875 4.73438 9.17188 5.20312 8.70312C5.625 8.28125 6.32812 8.28125 6.79688 8.70312L15 16.9531L23.2031 8.75C23.625 8.28125 24.3281 8.28125 24.7969 8.75C25.2188 9.17188 25.2188 9.875 24.7969 10.2969L15.75 19.2969C15.3281 19.7656 14.625 19.7656 14.2031 19.2969Z" fill="currentColor"/></svg>'
34
34
  }
35
35
  }
36
36
  </script>
@@ -7,7 +7,7 @@
7
7
  <% if object.drag_id && object.drag_handle %>
8
8
  <span style="vertical-align: middle;">
9
9
  <%= pb_rails("body") do %>
10
- <svg width="auto" height="auto" viewBox="0 0 31 25" fill="none" xmlns="http://www.w3.org/2000/svg" color="currentColor" class="pb_custom_icon svg-inline--fa vertical_align_middle svg_fw"><path d="M12.904 6.355a1.48 1.48 0 01-1.5-1.5c0-.796.656-1.5 1.5-1.5.797 0 1.5.704 1.5 1.5 0 .844-.703 1.5-1.5 1.5zm0 7.5a1.48 1.48 0 01-1.5-1.5c0-.796.656-1.5 1.5-1.5.797 0 1.5.704 1.5 1.5 0 .844-.703 1.5-1.5 1.5zm1.5 6c0 .844-.703 1.5-1.5 1.5a1.48 1.48 0 01-1.5-1.5c0-.796.656-1.5 1.5-1.5.797 0 1.5.704 1.5 1.5zm4.5-13.5a1.48 1.48 0 01-1.5-1.5c0-.796.657-1.5 1.5-1.5.797 0 1.5.704 1.5 1.5 0 .844-.703 1.5-1.5 1.5zm1.5 6c0 .844-.703 1.5-1.5 1.5a1.48 1.48 0 01-1.5-1.5c0-.796.657-1.5 1.5-1.5.797 0 1.5.704 1.5 1.5zm-1.5 9a1.48 1.48 0 01-1.5-1.5c0-.796.657-1.5 1.5-1.5.797 0 1.5.704 1.5 1.5 0 .844-.703 1.5-1.5 1.5z" fill="#242B42"></path></svg>
10
+ <svg width="1em" viewBox="0 0 31 25" fill="none" xmlns="http://www.w3.org/2000/svg" color="currentColor" class="pb_custom_icon svg-inline--fa vertical_align_middle svg_fw"><path d="M12.904 6.355a1.48 1.48 0 01-1.5-1.5c0-.796.656-1.5 1.5-1.5.797 0 1.5.704 1.5 1.5 0 .844-.703 1.5-1.5 1.5zm0 7.5a1.48 1.48 0 01-1.5-1.5c0-.796.656-1.5 1.5-1.5.797 0 1.5.704 1.5 1.5 0 .844-.703 1.5-1.5 1.5zm1.5 6c0 .844-.703 1.5-1.5 1.5a1.48 1.48 0 01-1.5-1.5c0-.796.656-1.5 1.5-1.5.797 0 1.5.704 1.5 1.5zm4.5-13.5a1.48 1.48 0 01-1.5-1.5c0-.796.657-1.5 1.5-1.5.797 0 1.5.704 1.5 1.5 0 .844-.703 1.5-1.5 1.5zm1.5 6c0 .844-.703 1.5-1.5 1.5a1.48 1.48 0 01-1.5-1.5c0-.796.657-1.5 1.5-1.5.797 0 1.5.704 1.5 1.5zm-1.5 9a1.48 1.48 0 01-1.5-1.5c0-.796.657-1.5 1.5-1.5.797 0 1.5.704 1.5 1.5 0 .844-.703 1.5-1.5 1.5z" fill="#242B42"></path></svg>
11
11
  <% end %>
12
12
  </span>
13
13
  <% end %>
@@ -3,6 +3,9 @@
3
3
  @import "../tokens/colors";
4
4
 
5
5
  .pb_text_input_kit {
6
+ label {
7
+ display: block !important;
8
+ }
6
9
  .pb_text_input_kit_label {
7
10
  margin-bottom: $space_xs;
8
11
  display: block;
@@ -140,10 +140,14 @@ const TextInput = (props: TextInputProps, ref: React.LegacyRef<HTMLInputElement>
140
140
  formattedValue = value
141
141
  }
142
142
 
143
+ const errorId = error ? `${id}-error` : undefined
144
+
143
145
  const textInput = (
144
146
  childInput ? React.cloneElement(children, { className: "text_input" }) :
145
147
  (<input
146
148
  {...domSafeProps(props)}
149
+ aria-describedby={errorId}
150
+ aria-invalid={!!error}
147
151
  autoComplete={typeof autoComplete === "string" ? autoComplete : ( autoComplete ? undefined : "off" )}
148
152
  className="text_input"
149
153
  disabled={disabled}
@@ -202,16 +206,20 @@ const TextInput = (props: TextInputProps, ref: React.LegacyRef<HTMLInputElement>
202
206
  {...htmlProps}
203
207
  className={css}
204
208
  >
205
- {label &&
206
- <Caption
207
- className="pb_text_input_kit_label"
208
- text={label}
209
- />
210
- }
209
+ {label && (
210
+ <label htmlFor={id}>
211
+ <Caption className="pb_text_input_kit_label"
212
+ text={label}
213
+ />
214
+ </label>
215
+ )}
211
216
  <div className={`${addOnCss} text_input_wrapper`}>
212
217
  {render}
213
218
 
214
219
  {error && <Body
220
+ aria={{ atomic: "true", live: "polite" }}
221
+ htmlOptions={{ role: "alert" }}
222
+ id={errorId}
215
223
  status="negative"
216
224
  text={error}
217
225
  variant={null}
@@ -9,23 +9,27 @@
9
9
 
10
10
  <%= pb_rails("text_input", props: {
11
11
  label: "Last Name",
12
- placeholder: "Enter last name"
12
+ placeholder: "Enter last name",
13
+ id: "last-name"
13
14
  }) %>
14
15
 
15
16
  <%= pb_rails("text_input", props: {
16
17
  label: "Phone Number",
17
18
  type: "phone",
18
- placeholder: "Enter phone number"
19
+ placeholder: "Enter phone number",
20
+ id: "phone"
19
21
  }) %>
20
22
 
21
23
  <%= pb_rails("text_input", props: {
22
24
  label: "Email Address",
23
25
  type: "email",
24
- placeholder: "Enter email address"
26
+ placeholder: "Enter email address",
27
+ id: "email"
25
28
  }) %>
26
29
 
27
30
  <%= pb_rails("text_input", props: {
28
31
  label: "Zip Code",
29
32
  type: "number",
30
- placeholder: "Enter zip code"
33
+ placeholder: "Enter zip code",
34
+ id: "zip"
31
35
  }) %>
@@ -38,6 +38,7 @@ const TextInputDefault = (props) => {
38
38
  {...props}
39
39
  />
40
40
  <TextInput
41
+ id="last-name"
41
42
  label="Last Name"
42
43
  name="lastName"
43
44
  onChange={handleOnChangeFormField}
@@ -46,6 +47,7 @@ const TextInputDefault = (props) => {
46
47
  {...props}
47
48
  />
48
49
  <TextInput
50
+ id="phone"
49
51
  label="Phone Number"
50
52
  name="phone"
51
53
  onChange={handleOnChangeFormField}
@@ -55,6 +57,7 @@ const TextInputDefault = (props) => {
55
57
  {...props}
56
58
  />
57
59
  <TextInput
60
+ id="email"
58
61
  label="Email Address"
59
62
  name="email"
60
63
  onChange={handleOnChangeFormField}
@@ -64,6 +67,7 @@ const TextInputDefault = (props) => {
64
67
  {...props}
65
68
  />
66
69
  <TextInput
70
+ id="zip"
67
71
  label="Zip Code"
68
72
  name="zip"
69
73
  onChange={handleOnChangeFormField}
@@ -84,6 +88,7 @@ const TextInputDefault = (props) => {
84
88
  <br />
85
89
 
86
90
  <TextInput
91
+ id="first-name"
87
92
  label="First Name"
88
93
  onChange={handleOnChangeFirstName}
89
94
  placeholder="Enter first name"
@@ -0,0 +1 @@
1
+ Add an `id` to your Text Input so that clicking the label will move focus directly to the input.
@@ -1,6 +1,8 @@
1
1
  <%= pb_content_tag(:div, id: nil ) do %>
2
2
  <% if object.label.present? %>
3
+ <label for="<%= object.input_options[:id] || object.id %>" >
3
4
  <%= pb_rails("caption", props: { text: object.label, dark: object.dark, classname: "pb_text_input_kit_label" }) %>
5
+ </label>
4
6
  <% end %>
5
7
  <%= content_tag(:div, class: "#{add_on_class} text_input_wrapper") do %>
6
8
  <% if content.present? %>
@@ -15,7 +17,7 @@
15
17
  <% else %>
16
18
  <%= input_tag %>
17
19
  <% end %>
18
- <%= pb_rails("body", props: {dark: object.dark, status: "negative", text: object.error}) if object.error %>
20
+ <%= pb_rails("body", props: {dark: object.dark, status: "negative", text: object.error, id: object.error_id, aria: { atomic: "true", live: "polite" }, html_options: { role: "alert" }}) if object.error %>
19
21
  <% end %>
20
22
  <% end %>
21
23
 
@@ -64,10 +64,16 @@ module Playbook
64
64
  "#{object.id}-sanitized" if id.present?
65
65
  end
66
66
 
67
+ def error_id
68
+ "#{id}-error" if error.present?
69
+ end
70
+
67
71
  private
68
72
 
69
73
  def all_input_options
70
74
  {
75
+ 'aria-describedby': error.present? ? error_id : nil,
76
+ 'aria-invalid': error.present?,
71
77
  autocomplete: autocomplete == true ? nil : (autocomplete.presence || "off"),
72
78
  class: "text_input #{input_options.dig(:classname) || ''}",
73
79
  data: validation_data,
@@ -4,7 +4,7 @@
4
4
  @import "../tokens/shadows";
5
5
  @import "../tokens/positioning";
6
6
 
7
- [class^=pb_typeahead_kit] {
7
+ .pb_typeahead_kit {
8
8
  .typeahead-kit-select__option {
9
9
  cursor: pointer;
10
10
  }
@@ -28,7 +28,7 @@
28
28
  transition: opacity .15s ease-in-out;
29
29
  }
30
30
  }
31
- [class^=pb_text_input_kit] {
31
+ .pb_text_input_kit {
32
32
  .text_input_wrapper {
33
33
  .text_input {
34
34
  max-height: none;
@@ -47,7 +47,7 @@
47
47
  }
48
48
  }
49
49
  }
50
- [class^=pb_list_kit] {
50
+ .pb_list_kit_xpadding_borderless_ {
51
51
  max-height: 18em;
52
52
  overflow-y: auto;
53
53
  overscroll-behavior: contain;
@@ -60,15 +60,15 @@
60
60
  border-radius: $border_rad_heavier;
61
61
  transition: opacity .25s ease-in-out;
62
62
  }
63
- &:focus-within [class^=pb_list_kit] {
63
+ &:focus-within .pb_list_kit_xpadding_borderless_ {
64
64
  display: block;
65
65
  opacity: 1;
66
66
  }
67
- &:not(:focus-within) [class^=pb_list_kit] {
67
+ &:not(:focus-within) .pb_list_kit_xpadding_borderless_ {
68
68
  display: none;
69
69
  opacity: 0;
70
70
  }
71
- [class^=pb_list_kit] {
71
+ .pb_list_kit_xpadding_borderless_ {
72
72
  li {
73
73
  transition: background-color .25s ease-in-out;
74
74
  }
@@ -161,7 +161,7 @@
161
161
  .typeahead-plus-icon {
162
162
  color: $text_lt_lighter;
163
163
  }
164
- [class^=pb_badge_kit] span {
164
+ .pb_badge_kit_primary span {
165
165
  line-height: 16.5px;
166
166
  letter-spacing: normal;
167
167
  }
@@ -176,14 +176,14 @@
176
176
  }
177
177
  }
178
178
 
179
- &[class*=dark] {
179
+ &.dark {
180
180
  .pb_typeahead_wrapper .pb_typeahead_loading_indicator {
181
181
  color: $text_dk_light;
182
182
  }
183
183
  .pb_text_input_kit_label {
184
184
  color: $text_dk_light;
185
185
  }
186
- [class^=pb_text_input_kit].dark .text_input_wrapper .text_input {
186
+ .pb_text_input_kit.dark .text_input_wrapper .text_input {
187
187
  display: inherit !important;
188
188
  }
189
189
  .typeahead-kit-select__menu {
@@ -227,7 +227,7 @@
227
227
  .typeahead-kit-select__option--is-focused {
228
228
  background-color: $active_dark;
229
229
  }
230
- [class^=pb_list_kit] {
230
+ .pb_list_kit_xpadding_borderless_ {
231
231
  background-color: $bg_dark;
232
232
  }
233
233
  .pb_item_kit {
@@ -53,6 +53,8 @@ type TypeaheadProps = {
53
53
  pillColor?: "primary" | "neutral" | "success" | "warning" | "error" | "info" | "data_1" | "data_2" | "data_3" | "data_4" | "data_5" | "data_6" | "data_7" | "data_8" | "windows" | "siding" | "roofing" | "doors" | "gutters" | "solar" | "insulation" | "accessories",
54
54
  onChange?: any,
55
55
  optionsByContext?: Record<string, Array<{ label: string; value?: string }>>
56
+ required?: boolean,
57
+ validation?: { message: string },
56
58
  searchContextSelector?: string,
57
59
  clearOnContextChange?: boolean,
58
60
  preserveSearchInput?: boolean,
@@ -94,12 +96,16 @@ const Typeahead = forwardRef<HTMLInputElement, TypeaheadProps>(({
94
96
  onChange,
95
97
  optionsByContext = {},
96
98
  searchContextSelector,
99
+ required = false,
100
+ validation,
97
101
  clearOnContextChange = false,
98
102
  preserveSearchInput = false, // Default to false to maintain backward compatibility
99
103
  ...props
100
104
  }: TypeaheadProps) => {
101
105
  // State to manage the input value when preserveSearchInput is true
102
106
  const [inputValue, setInputValue] = useState("")
107
+ // State to track if form has been submitted to control validation display for react rendered rails kit
108
+ const [formSubmitted, setFormSubmitted] = useState(false)
103
109
 
104
110
  // If preserveSearchInput is true, we need to control the input value
105
111
  const handleInputChange = preserveSearchInput
@@ -135,6 +141,7 @@ const Typeahead = forwardRef<HTMLInputElement, TypeaheadProps>(({
135
141
 
136
142
  const selectProps = {
137
143
  cacheOptions: true,
144
+ required,
138
145
  components: {
139
146
  Control,
140
147
  ClearIndicator,
@@ -170,6 +177,27 @@ const Typeahead = forwardRef<HTMLInputElement, TypeaheadProps>(({
170
177
 
171
178
  const [contextValue, setContextValue] = useState("")
172
179
 
180
+ // Add listener for form validation to track when validation should be shown (needed for react rendered rails kit)
181
+ useEffect(() => {
182
+ const handleInvalid = (event: Event) => {
183
+ const target = event.target as HTMLInputElement
184
+ const typeaheadContainer = target.closest('[data-pb-react-component="Typeahead"]')
185
+
186
+ if (typeaheadContainer) {
187
+ // Check if this invalid event is specifically for our typeahead by comparing names so we do not have to require ids
188
+ const invalidInputName = target.name || target.getAttribute('name')
189
+ if (invalidInputName === name) {
190
+ setFormSubmitted(true)
191
+ }
192
+ }
193
+ }
194
+ document.addEventListener('invalid', handleInvalid, true)
195
+
196
+ return () => {
197
+ document.removeEventListener('invalid', handleInvalid, true)
198
+ }
199
+ }, [name])
200
+
173
201
  // Add listener for clearing
174
202
  useEffect(() => {
175
203
  const handleClear = () => {
@@ -230,6 +258,11 @@ const Typeahead = forwardRef<HTMLInputElement, TypeaheadProps>(({
230
258
  }
231
259
  }
232
260
 
261
+ // Reset form submitted state when a selection is made (this is all for react rendered rails kit)
262
+ if (action === 'select-option') {
263
+ setFormSubmitted(false)
264
+ }
265
+
233
266
  // If a value is selected and we're preserving input on blur, clear the input
234
267
  if (action === 'select-option' && preserveSearchInput) {
235
268
  setInputValue('')
@@ -268,6 +301,11 @@ const Typeahead = forwardRef<HTMLInputElement, TypeaheadProps>(({
268
301
 
269
302
  const inlineClass = selectProps.inline ? 'inline' : null
270
303
 
304
+ const shouldShowValidationError = required &&
305
+ formSubmitted
306
+
307
+ const errorDisplay = error || (shouldShowValidationError ? validation?.message || "Please fill out this field." : "")
308
+
271
309
  return (
272
310
  <div
273
311
  {...dataProps}
@@ -276,7 +314,7 @@ const Typeahead = forwardRef<HTMLInputElement, TypeaheadProps>(({
276
314
  >
277
315
  <Tag
278
316
  classNamePrefix="typeahead-kit-select"
279
- error={error}
317
+ error={errorDisplay}
280
318
  isDisabled={disabled}
281
319
  onChange={handleOnChange}
282
320
  {...selectProps}
@@ -101,6 +101,8 @@ module Playbook
101
101
  plusIcon: plus_icon,
102
102
  truncate: truncate,
103
103
  wrapped: wrapped,
104
+ required: required,
105
+ validation: validation,
104
106
  searchContextSelector: search_context_selector,
105
107
  optionsByContext: options_by_context,
106
108
  clearOnContextChange: clear_on_context_change,
@@ -60,7 +60,7 @@
60
60
  @include hover-color-classes($text_colors);
61
61
  @include hover-color-classes($category_colors);
62
62
 
63
- .hover_visibility {
63
+ .hover_visible_true {
64
64
  opacity: 0;
65
65
  transition: opacity $transition-speed ease;
66
66
 
@@ -70,7 +70,7 @@
70
70
  }
71
71
 
72
72
  .group_hover:hover {
73
- .group_hover.hover_visibility {
73
+ .group_hover.hover_visible_true {
74
74
  opacity: 1;
75
75
  }
76
76
  }
@@ -65,7 +65,7 @@ type Hover = Shadow & {
65
65
  color?: string,
66
66
  scale?: "sm" | "md" | "lg",
67
67
  underline?: boolean,
68
- visibility?: boolean,
68
+ visible?: boolean,
69
69
  }
70
70
 
71
71
  type GroupHover = {
@@ -252,7 +252,7 @@ const PROP_CATEGORIES: {[key:string]: (props: {[key: string]: any}) => string} =
252
252
  css += hover.underline ? `hover_underline ` : '';
253
253
  css += hover.scale ? `hover_scale_${hover.scale} ` : '';
254
254
  css += hover.color ? `hover_color-${hover.color } ` : '';
255
- css += hover.visibility ? `hover_visibility` : '';
255
+ css += hover.visible ? `hover_visible_true` : '';
256
256
  return css;
257
257
  },
258
258
 
@@ -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-D3MtsWXG.js";import{c as colors,h as highchartsTheme,m as merge,a as highchartsDarkTheme,t as typography}from"./lib-QZuu1ltS.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{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-DqRbRocY.js";import{c as colors,h as highchartsTheme,m as merge,a as highchartsDarkTheme,t as typography}from"./lib-QZuu1ltS.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};