playbook_ui 15.3.0.pre.alpha.PLAY2630fctearlyautoClose12133 → 15.3.0.pre.alpha.PLAY258611978

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 (48) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/pb_advanced_table/Components/RegularTableView.tsx +1 -2
  3. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +0 -63
  4. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_background_control_rails.html.erb +0 -4
  5. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_background_control_rails.md +1 -1
  6. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling.jsx +1 -3
  7. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling.md +0 -2
  8. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_column_headers.jsx +1 -1
  9. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_rails.html.erb +0 -1
  10. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_column_styling_rails.md +0 -2
  11. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_padding_control.jsx +1 -9
  12. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_padding_control.md +1 -1
  13. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header_multi_header.jsx +0 -16
  14. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header_rails.html.erb +1 -1
  15. data/app/pb_kits/playbook/pb_advanced_table/docs/example.yml +0 -1
  16. data/app/pb_kits/playbook/pb_advanced_table/table_header.rb +20 -90
  17. data/app/pb_kits/playbook/pb_advanced_table/table_row.rb +2 -31
  18. data/app/pb_kits/playbook/pb_background/background.html.erb +2 -10
  19. data/app/pb_kits/playbook/pb_badge/_badge.tsx +1 -4
  20. data/app/pb_kits/playbook/pb_badge/badge.test.js +0 -13
  21. data/app/pb_kits/playbook/pb_currency/_currency.tsx +7 -20
  22. data/app/pb_kits/playbook/pb_currency/currency.rb +8 -35
  23. data/app/pb_kits/playbook/pb_currency/currency.test.js +0 -47
  24. data/app/pb_kits/playbook/pb_currency/docs/_currency_variants.html.erb +1 -1
  25. data/app/pb_kits/playbook/pb_currency/docs/_currency_variants.jsx +1 -1
  26. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.tsx +9 -31
  27. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_auto_close.html.erb +1 -15
  28. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_multi_line.html.erb +8 -9
  29. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_positions.html.erb +10 -11
  30. data/app/pb_kits/playbook/pb_form_pill/_form_pill.tsx +1 -1
  31. data/app/pb_kits/playbook/pb_typeahead/_typeahead.scss +0 -7
  32. data/app/pb_kits/playbook/pb_typeahead/_typeahead.test.jsx +1 -64
  33. data/app/pb_kits/playbook/pb_typeahead/components/MultiValue.tsx +1 -33
  34. data/dist/chunks/{_line_graph-BRirnhGy.js → _line_graph-BokgW0SI.js} +1 -1
  35. data/dist/chunks/_typeahead-BR-uKbcO.js +6 -0
  36. data/dist/chunks/{_weekday_stacked-C4BovBRB.js → _weekday_stacked-n_2SPgc2.js} +3 -3
  37. data/dist/chunks/vendor.js +1 -1
  38. data/dist/playbook-doc.js +1 -1
  39. data/dist/playbook-rails-react-bindings.js +1 -1
  40. data/dist/playbook-rails.js +1 -1
  41. data/dist/playbook.css +1 -1
  42. data/lib/playbook/version.rb +1 -1
  43. metadata +6 -9
  44. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header_multi_header_rails.html.erb +0 -104
  45. data/app/pb_kits/playbook/pb_advanced_table/docs/_advanced_table_with_custom_header_multi_header_rails.md +0 -1
  46. data/app/pb_kits/playbook/pb_currency/docs/_currency_variants.md +0 -1
  47. data/dist/chunks/_typeahead-CFOqvZNu.js +0 -6
  48. /data/app/pb_kits/playbook/pb_date_picker/docs/{_date_picker_and_dropdown_range.md → _date_picker_and_dropdown_range..md} +0 -0
@@ -17,7 +17,8 @@ module Playbook
17
17
  prop :symbol, type: Playbook::Props::String,
18
18
  default: "$"
19
19
 
20
- prop :amount, required: true
20
+ prop :amount, type: Playbook::Props::String,
21
+ required: true
21
22
 
22
23
  prop :unit, type: Playbook::Props::String,
23
24
  required: false
@@ -91,7 +92,7 @@ module Playbook
91
92
  end
92
93
 
93
94
  def negative_sign
94
- currency_amount.starts_with?("-") && swap_negative ? "-" : ""
95
+ amount.starts_with?("-") && swap_negative ? "-" : ""
95
96
  end
96
97
 
97
98
  def body_props
@@ -116,32 +117,10 @@ module Playbook
116
117
  end
117
118
  end
118
119
 
119
- def currency_amount
120
- @currency_amount ||= convert_amount(amount)
121
- end
122
-
123
120
  private
124
121
 
125
- # Convert numeric input to string format
126
- def convert_amount(input)
127
- if input.is_a?(Numeric)
128
- if input.zero? && null_display.nil?
129
- ""
130
- else
131
- format("%.2f", input)
132
- end
133
- # Handle string representations of zero
134
- elsif input.to_s.strip.match?(/^-?0+(\.0+)?$/) && null_display.nil?
135
- ""
136
- else
137
- input.to_s
138
- end
139
- end
140
-
141
122
  def whole_value
142
- return "" if currency_amount.blank?
143
-
144
- value = currency_amount.split(".").first
123
+ value = amount.split(".").first
145
124
  if comma_separator
146
125
  number_with_delimiter(value.gsub(",", ""))
147
126
  else
@@ -150,9 +129,7 @@ module Playbook
150
129
  end
151
130
 
152
131
  def decimal_value
153
- return "00" if currency_amount.blank?
154
-
155
- currency_amount.split(".")[1] || "00"
132
+ amount.split(".")[1] || "00"
156
133
  end
157
134
 
158
135
  def units_element
@@ -170,9 +147,7 @@ module Playbook
170
147
  end
171
148
 
172
149
  def abbreviated_value(index = 0..-2)
173
- return "" if currency_amount.blank?
174
-
175
- value = currency_amount.split(".").first.gsub(",", "").to_i
150
+ value = amount.split(".").first.gsub(",", "").to_i
176
151
  abbreviated_num = number_to_human(value, units: { thousand: "K", million: "M", billion: "B", trillion: "T" }).gsub(/\s+/, "")
177
152
  abbreviated_num[index]
178
153
  end
@@ -199,11 +174,9 @@ module Playbook
199
174
 
200
175
  if decimals == "matching"
201
176
  if comma_separator
202
- return "" if currency_amount.blank?
203
-
204
- number_with_delimiter(currency_amount.gsub(",", ""))
177
+ number_with_delimiter(amount.gsub(",", ""))
205
178
  else
206
- currency_amount
179
+ amount
207
180
  end
208
181
  else
209
182
  whole_value
@@ -133,50 +133,3 @@ test('handles negative amounts correctly', () => {
133
133
  expect(screen.getByTestId('test-negative-no-symbol')).toHaveTextContent('-400.50')
134
134
  expect(screen.getByTestId('test-negative-medium-size')).toHaveTextContent('$-500.55')
135
135
  })
136
-
137
- test('handles numeric amounts correctly', () => {
138
- render(
139
- <>
140
- <Currency
141
- amount={320}
142
- data={{ testid: 'test-numeric-default' }}
143
- />
144
- <Currency
145
- abbreviate
146
- amount={3200000}
147
- data={{ testid: 'test-numeric-millions' }}
148
- />
149
- <Currency
150
- amount={123456.78}
151
- commaSeparator
152
- data={{ testid: 'test-numeric-comma-decimals' }}
153
- />
154
- <Currency
155
- amount={400.50}
156
- data={{ testid: 'test-numeric-no-symbol' }}
157
- symbol=""
158
- />
159
- <Currency
160
- amount={500.55}
161
- data={{ testid: 'test-numeric-medium-size' }}
162
- size="md"
163
- />
164
- <Currency
165
- amount={-600.70}
166
- data={{ testid: 'test-numeric-negative' }}
167
- />
168
- <Currency
169
- amount={0.00}
170
- data={{ testid: 'test-numeric-null' }}
171
- />
172
- </>
173
- )
174
-
175
- expect(screen.getByTestId('test-numeric-default')).toHaveTextContent('$320')
176
- expect(screen.getByTestId('test-numeric-millions')).toHaveTextContent('$3.2M')
177
- expect(screen.getByTestId('test-numeric-comma-decimals')).toHaveTextContent('$123,456.78')
178
- expect(screen.getByTestId('test-numeric-no-symbol')).toHaveTextContent('400.50')
179
- expect(screen.getByTestId('test-numeric-medium-size')).toHaveTextContent('$500.55')
180
- expect(screen.getByTestId('test-numeric-negative')).toHaveTextContent('-$600.70')
181
- expect(screen.getByTestId('test-numeric-null')).toHaveTextContent('$.00')
182
- })
@@ -7,7 +7,7 @@
7
7
  }) %>
8
8
 
9
9
  <%= pb_rails("currency", props: {
10
- amount: 342,
10
+ amount: "342",
11
11
  label: "Light",
12
12
  margin_bottom: "md",
13
13
  size: "sm",
@@ -14,7 +14,7 @@ const CurrencyVariants = (props) => {
14
14
  {...props}
15
15
  />
16
16
  <Currency
17
- amount={342}
17
+ amount="342"
18
18
  label="Light"
19
19
  marginBottom="md"
20
20
  size="sm"
@@ -1,4 +1,4 @@
1
- import React, { useEffect, useState, useRef } from "react";
1
+ import React, { useEffect, useState } from "react";
2
2
  import classnames from "classnames";
3
3
 
4
4
  import { globalProps, GlobalProps } from "../utilities/globalProps";
@@ -36,7 +36,6 @@ type FixedConfirmationToastProps = {
36
36
 
37
37
  const FixedConfirmationToast = (props: FixedConfirmationToastProps): React.ReactElement => {
38
38
  const [showToast, toggleToast] = useState(true);
39
- const timeoutRef = useRef<NodeJS.Timeout | null>(null);
40
39
 
41
40
  const {
42
41
  autoClose = 0,
@@ -68,42 +67,21 @@ const FixedConfirmationToast = (props: FixedConfirmationToastProps): React.React
68
67
 
69
68
  const htmlProps = buildHtmlProps(htmlOptions);
70
69
 
71
- useEffect(() => {
72
- toggleToast(open);
73
- }, [open]);
74
-
75
- // Manage auto-close timeout separately
76
- useEffect(() => {
77
- // Clear any existing timeout
78
- if (timeoutRef.current) {
79
- clearTimeout(timeoutRef.current);
80
- timeoutRef.current = null;
81
- }
82
-
83
- // Set new timeout if autoClose is enabled and toast is open
84
- if (autoClose && open && showToast) {
85
- timeoutRef.current = setTimeout(() => {
70
+ const autoCloseToast = () => {
71
+ if (autoClose && open) {
72
+ setTimeout(() => {
86
73
  toggleToast(false);
87
74
  onClose();
88
- timeoutRef.current = null;
89
75
  }, autoClose);
90
76
  }
77
+ };
91
78
 
92
- // Cleanup function to clear timeout on unmount or when dependencies change
93
- return () => {
94
- if (timeoutRef.current) {
95
- clearTimeout(timeoutRef.current);
96
- timeoutRef.current = null;
97
- }
98
- };
99
- }, [autoClose, open, showToast, onClose]);
79
+ useEffect(() => {
80
+ toggleToast(open);
81
+ autoCloseToast();
82
+ }, [open]);
100
83
 
101
84
  const handleClick = () => {
102
- // Clear autoClose timeout when manually closing
103
- if (timeoutRef.current) {
104
- clearTimeout(timeoutRef.current);
105
- timeoutRef.current = null;
106
- }
107
85
  toggleToast(!closeable);
108
86
  onClose();
109
87
  };
@@ -22,27 +22,13 @@
22
22
  }) %>
23
23
 
24
24
  <script>
25
- // Hide toasts immediately
26
- const hideAutoToasts = () => {
27
- const toastAuto = document.getElementById('toast-auto-close');
28
- const toastAutoCloseable = document.getElementById('toast-auto-close-closeable');
29
- if (toastAuto) toastAuto.style.display = 'none';
30
- if (toastAutoCloseable) toastAutoCloseable.style.display = 'none';
31
- }
32
- hideAutoToasts();
33
-
34
- // Handle various page load/restore events
35
- window.addEventListener('pageshow', hideAutoToasts)
36
- document.addEventListener('turbolinks:load', hideAutoToasts)
37
- document.addEventListener('turbo:load', hideAutoToasts)
38
-
39
25
  document.addEventListener('DOMContentLoaded', () => {
40
26
  // Initialize toast elements and buttons
41
27
  const toasts = {
42
28
  '#toast-auto-close': document.querySelector("#toast-auto-close"),
43
29
  '#toast-auto-close-closeable': document.querySelector("#toast-auto-close-closeable")
44
30
  }
45
-
31
+
46
32
  const buttons = {
47
33
  '#toast-auto-close': document.querySelector("button[data-toast='#toast-auto-close']"),
48
34
  '#toast-auto-close-closeable': document.querySelector("button[data-toast='#toast-auto-close-closeable']")
@@ -24,6 +24,7 @@
24
24
  horizontal: "center"
25
25
  }) %>
26
26
 
27
+
27
28
  <script type="text/javascript">
28
29
  const multitoasts = document.querySelectorAll(".multitoast-to-hide")
29
30
  const multibuttons = document.querySelectorAll("button[data-multitoast]")
@@ -34,15 +35,6 @@
34
35
  })
35
36
  }
36
37
 
37
- // Hide toasts immediately
38
- hideMultiToasts()
39
-
40
- // Handle various page load/restore events
41
- window.addEventListener('pageshow', hideMultiToasts)
42
- document.addEventListener('DOMContentLoaded', hideMultiToasts)
43
- document.addEventListener('turbolinks:load', hideMultiToasts)
44
- document.addEventListener('turbo:load', hideMultiToasts)
45
-
46
38
  multibuttons.forEach((button) => {
47
39
  button.onclick = () => {
48
40
  hideMultiToasts()
@@ -54,3 +46,10 @@
54
46
  }
55
47
  })
56
48
  </script>
49
+
50
+ <!-- hiding toast on page load -->
51
+ <style>
52
+ #toast-long, #toast-short {
53
+ display: none;
54
+ }
55
+ </style>
@@ -69,28 +69,27 @@
69
69
  const toasts = document.querySelectorAll(".toast-to-hide")
70
70
  const buttons = document.querySelectorAll("button[data-toast]")
71
71
 
72
- const hidePositionToasts = () => {
72
+ const hideToasts = () => {
73
73
  toasts.forEach((toast) => {
74
74
  toast.style.display = "none"
75
75
  })
76
76
  }
77
77
 
78
- // Hide toasts immediately
79
- hidePositionToasts()
80
-
81
- // Handle various page load/restore events
82
- window.addEventListener('pageshow', hidePositionToasts)
83
- document.addEventListener('DOMContentLoaded', hidePositionToasts)
84
- document.addEventListener('turbolinks:load', hidePositionToasts)
85
- document.addEventListener('turbo:load', hidePositionToasts)
86
-
87
78
  buttons.forEach((button) => {
88
79
  button.onclick = () => {
89
- hidePositionToasts()
80
+ hideToasts()
90
81
  let toast = document.querySelector(button.getAttribute("data-toast"))
82
+
91
83
  if (toast) {
92
84
  toast.style.display = "flex"
93
85
  }
94
86
  }
95
87
  })
96
88
  </script>
89
+
90
+ <!-- hiding toast on page load -->
91
+ <style>
92
+ #toast-top-center, #toast-top-right, #toast-top-left, #toast-bottom-center, #toast-bottom-right, #toast-bottom-left {
93
+ display: none;
94
+ }
95
+ </style>
@@ -9,7 +9,7 @@ import { buildDataProps, buildHtmlProps } from '../utilities/props'
9
9
 
10
10
  type FormPillProps = {
11
11
  className?: string,
12
- htmlOptions?: {[key: string]: string | number | boolean | (() => void) | ((event: any) => void) | any},
12
+ htmlOptions?: {[key: string]: string | number | boolean | (() => void)},
13
13
  id?: string,
14
14
  text: string,
15
15
  name?: string,
@@ -165,13 +165,6 @@
165
165
  line-height: 16.5px;
166
166
  letter-spacing: normal;
167
167
  }
168
-
169
- // Add focus indicator for multi-value pills
170
- .pb_form_pill_or_badge_focused {
171
- outline: $primary solid 2px;
172
- outline-offset: -1px;
173
- }
174
-
175
168
  &.inline {
176
169
  &:not(:hover) {
177
170
  .text_input {
@@ -212,67 +212,4 @@ test('typeahead with grouped options and defaultValue focus behavior', async ()
212
212
  const kit = screen.getByTestId('grouped-options-focus-test')
213
213
  const inputDiv = kit.querySelector(".typeahead-kit-select__single-value")
214
214
  expect(inputDiv).toHaveTextContent("Pink")
215
- })
216
-
217
- test('multi-value pills have tabIndex for keyboard navigation', () => {
218
- render(
219
- <Typeahead
220
- data={{ testid: 'pill-tabindex-test' }}
221
- defaultValue={[options[0], options[1]]}
222
- isMulti
223
- options={options}
224
- />
225
- )
226
-
227
- const kit = screen.getByTestId('pill-tabindex-test')
228
- const pills = kit.querySelectorAll('.pb_form_pill_kit')
229
-
230
- expect(pills.length).toBe(2)
231
-
232
- pills.forEach(pill => {
233
- expect(pill).toHaveAttribute('tabIndex', '0')
234
- })
235
- })
236
-
237
- test('multi-value pills show focus indicator when focused', async () => {
238
- render(
239
- <Typeahead
240
- data={{ testid: 'pill-focus-indicator-test' }}
241
- defaultValue={[options[0], options[1], options[2]]}
242
- isMulti
243
- options={options}
244
- />
245
- )
246
-
247
- const kit = screen.getByTestId('pill-focus-indicator-test')
248
- const pills = kit.querySelectorAll('.pb_form_pill_kit')
249
-
250
- expect(pills.length).toBe(3)
251
-
252
- const firstPill = pills[0]
253
- firstPill.focus()
254
-
255
- expect(document.activeElement).toBe(firstPill)
256
- })
257
-
258
- test('multi-value badges have tabIndex and focus class when focused', () => {
259
- render(
260
- <Typeahead
261
- data={{ testid: 'badge-focus-test' }}
262
- defaultValue={[options[0], options[1]]}
263
- isMulti
264
- multiKit="badge"
265
- options={options}
266
- />
267
- )
268
-
269
- const kit = screen.getByTestId('badge-focus-test')
270
- const badges = kit.querySelectorAll('.pb_badge_kit_primary')
271
-
272
- expect(badges.length).toBe(2)
273
-
274
- badges.forEach(badge => {
275
- expect(badge).toHaveAttribute('tabIndex', '0')
276
- })
277
- })
278
-
215
+ })
@@ -12,12 +12,11 @@ type Props = {
12
12
  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",
13
13
  removeProps: any,
14
14
  selectProps: any,
15
- isFocused?: boolean,
16
15
  }
17
16
 
18
17
 
19
18
  const MultiValue = (props: Props) => {
20
- const { removeProps, isFocused } = props
19
+ const { removeProps } = props
21
20
  const { imageUrl, label } = props.data
22
21
  const { dark, multiKit, pillColor, truncate, wrapped } = props.selectProps
23
22
 
@@ -30,28 +29,6 @@ const MultiValue = (props: Props) => {
30
29
 
31
30
  if (typeof imageUrl === 'string') formPillProps.avatarUrl = imageUrl
32
31
 
33
- // Add className for focus state
34
- const pillClassName = isFocused ? 'pb_form_pill_or_badge_focused' : ''
35
-
36
- // Handle keyboard events on the pill itself to enable deletion when using tabIndex
37
- const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {
38
- if (event.key === 'Backspace' || event.key === 'Delete') {
39
- event.preventDefault()
40
- event.stopPropagation()
41
- // Trigger the remove action from react-select
42
- if (removeProps && removeProps.onClick) {
43
- removeProps.onClick(event as any)
44
- }
45
- }
46
- // if arrow keys used, transfer focus to input so react-select can take over
47
- else if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {
48
- const selectInput = event.currentTarget.closest('.pb_typeahead_kit')?.querySelector('input')
49
- if (selectInput instanceof HTMLInputElement) {
50
- selectInput.focus()
51
- }
52
- }
53
- }
54
-
55
32
  return (
56
33
  <components.MultiValueContainer
57
34
  className="text_input_multivalue_container"
@@ -59,11 +36,8 @@ const MultiValue = (props: Props) => {
59
36
  >
60
37
  {multiKit === 'badge' &&
61
38
  <Badge
62
- className={pillClassName}
63
39
  closeProps={removeProps}
64
- htmlOptions={{onKeyDown:handleKeyDown}}
65
40
  removeIcon
66
- tabIndex={0}
67
41
  text={label}
68
42
  variant="primary"
69
43
  />
@@ -72,15 +46,12 @@ const MultiValue = (props: Props) => {
72
46
  {multiKit !== 'badge' && imageUrl &&
73
47
  <FormPill
74
48
  avatarUrl={imageUrl}
75
- className={pillClassName}
76
49
  closeProps={removeProps}
77
50
  color={pillColor}
78
51
  dark={dark}
79
- htmlOptions={{onKeyDown:handleKeyDown}}
80
52
  marginRight="xs"
81
53
  name={label}
82
54
  size={multiKit === 'smallPill' ? 'small' : ''}
83
- tabIndex={0}
84
55
  text=''
85
56
  truncate={truncate}
86
57
  wrapped={wrapped}
@@ -90,15 +61,12 @@ const MultiValue = (props: Props) => {
90
61
 
91
62
  {multiKit !== 'badge' && !imageUrl &&
92
63
  <FormPill
93
- className={pillClassName}
94
64
  closeProps={removeProps}
95
65
  color={pillColor}
96
66
  dark={dark}
97
- htmlOptions={{onKeyDown:handleKeyDown}}
98
67
  marginRight="xs"
99
68
  name=''
100
69
  size={multiKit === 'smallPill' ? 'small' : ''}
101
- tabIndex={0}
102
70
  text={label}
103
71
  truncate={truncate}
104
72
  wrapped={wrapped}
@@ -1 +1 @@
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-CFOqvZNu.js";import{c as colors,h as highchartsTheme,m as merge,a as highchartsDarkTheme,t as typography}from"./lib-BXBHAZMY.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-BR-uKbcO.js";import{c as colors,h as highchartsTheme,m as merge,a as highchartsDarkTheme,t as typography}from"./lib-BXBHAZMY.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};