playbook_ui 15.0.0.pre.alpha.PLAY2361datepickerarrownav10369 → 15.0.0.pre.alpha.PLAY2369textinputautocompleteprop10372
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.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.ts +4 -48
- data/app/pb_kits/playbook/pb_text_input/_text_input.tsx +3 -0
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_autocomplete.html.erb +41 -0
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_autocomplete.jsx +80 -0
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_autocomplete.md +1 -0
- data/app/pb_kits/playbook/pb_text_input/docs/example.yml +3 -0
- data/app/pb_kits/playbook/pb_text_input/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_text_input/text_input.rb +2 -3
- data/app/pb_kits/playbook/pb_text_input/text_input.test.js +38 -0
- data/dist/chunks/{_line_graph-AWRQrijB.js → _line_graph-CTpWU06n.js} +1 -1
- data/dist/chunks/{_typeahead-kSoeXQEm.js → _typeahead-DmVCLhQz.js} +2 -2
- data/dist/chunks/{_weekday_stacked-wsIF4pdn.js → _weekday_stacked-DvnT8mDi.js} +1 -1
- data/dist/chunks/{lib-9rRWxm7V.js → lib-CY5ZPzic.js} +1 -1
- data/dist/chunks/{pb_form_validation-dx1UC-z-.js → pb_form_validation-D3b0JKHH.js} +1 -1
- data/dist/chunks/vendor.js +1 -1
- data/dist/playbook-doc.js +2 -2
- data/dist/playbook-rails-react-bindings.js +1 -1
- data/dist/playbook-rails.js +1 -1
- data/lib/playbook/version.rb +1 -1
- metadata +9 -6
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: af93fa7c52eb17c06ae7be41b1371733eae49baa0755123f0a10962b145fb31e
         | 
| 4 | 
            +
              data.tar.gz: 2c326218147360b0948127bf86b4ffde9dbd7f79c996140d61405139c104fb67
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: a8334355a1766859b0772c36151f5300d61877bb216f9e7dabea4da91dd14caa64f9553b40e6150b15d2a4ddaa0e396bbcb821ae94356fee1542f7c393ccc4fc
         | 
| 7 | 
            +
              data.tar.gz: e8ceaa0ee157d34cdf68dfef0277b80634d0e2a08ba4d3705cdcec61b40efa8d2377e14c7329ed3677b1b53ae2c795571e55b9e4dbfe6c27d48c24b73fe5e215
         | 
| @@ -89,48 +89,6 @@ const datePickerHelper = (config: DatePickerConfig, scrollContainer: string | HT | |
| 89 89 | 
             
                }
         | 
| 90 90 | 
             
              }
         | 
| 91 91 |  | 
| 92 | 
            -
              // Helper function to get min/max years based on yearRange. If minDate/maxDate provided, grab year from those values
         | 
| 93 | 
            -
              const getMinMaxYears = () => {
         | 
| 94 | 
            -
                const [minYear, maxYear] = yearRange;
         | 
| 95 | 
            -
             | 
| 96 | 
            -
                const extractYear = (dateOption: typeof minDate | typeof maxDate): number | null => {
         | 
| 97 | 
            -
                  if (!dateOption) return null;
         | 
| 98 | 
            -
             | 
| 99 | 
            -
                  // If it's already a number, assume it's a year
         | 
| 100 | 
            -
                  if (typeof dateOption === 'number') {
         | 
| 101 | 
            -
                    return dateOption;
         | 
| 102 | 
            -
                  }
         | 
| 103 | 
            -
             | 
| 104 | 
            -
                  // If it's a string, extract year with regex
         | 
| 105 | 
            -
                  if (typeof dateOption === 'string') {
         | 
| 106 | 
            -
                    const match = dateOption.match(/\b(19|20)\d{2}\b/);
         | 
| 107 | 
            -
                    return match ? parseInt(match[0], 10) : null;
         | 
| 108 | 
            -
                  }
         | 
| 109 | 
            -
             | 
| 110 | 
            -
                  // If it's a Date object, get the year directly
         | 
| 111 | 
            -
                  if (dateOption instanceof Date) {
         | 
| 112 | 
            -
                    return dateOption.getFullYear();
         | 
| 113 | 
            -
                  }
         | 
| 114 | 
            -
             | 
| 115 | 
            -
                  return null;
         | 
| 116 | 
            -
                };
         | 
| 117 | 
            -
             | 
| 118 | 
            -
                const setMinYear = minDate ? (extractYear(minDate) ?? minYear) : minYear;
         | 
| 119 | 
            -
                const setMaxYear = maxDate ? (extractYear(maxDate) ?? maxYear) : maxYear;
         | 
| 120 | 
            -
             | 
| 121 | 
            -
                return { setMinYear, setMaxYear };
         | 
| 122 | 
            -
              };
         | 
| 123 | 
            -
             | 
| 124 | 
            -
              const { setMinYear, setMaxYear } = getMinMaxYears()
         | 
| 125 | 
            -
             | 
| 126 | 
            -
              // Helper function to get min/max dates based on yearRange
         | 
| 127 | 
            -
              const getMinMaxDates = () => {
         | 
| 128 | 
            -
                const setMinDate = minDate || `01/01/${setMinYear}`
         | 
| 129 | 
            -
                const setMaxDate = maxDate || `12/31/${setMaxYear}`
         | 
| 130 | 
            -
             | 
| 131 | 
            -
                return { setMinDate, setMaxDate }
         | 
| 132 | 
            -
              }
         | 
| 133 | 
            -
             | 
| 134 92 | 
             
              const disabledWeekDays = () => {
         | 
| 135 93 | 
             
                return (
         | 
| 136 94 | 
             
                  [
         | 
| @@ -243,8 +201,6 @@ const datePickerHelper = (config: DatePickerConfig, scrollContainer: string | HT | |
| 243 201 | 
             
              // |             Flatpickr initializer w/ config             |
         | 
| 244 202 | 
             
              // ===========================================================
         | 
| 245 203 |  | 
| 246 | 
            -
              const { setMinDate, setMaxDate } = getMinMaxDates()
         | 
| 247 | 
            -
             | 
| 248 204 | 
             
              flatpickr(`#${pickerId}`, {
         | 
| 249 205 | 
             
                allowInput,
         | 
| 250 206 | 
             
                closeOnSelect,
         | 
| @@ -256,8 +212,8 @@ const datePickerHelper = (config: DatePickerConfig, scrollContainer: string | HT | |
| 256 212 | 
             
                locale: {
         | 
| 257 213 | 
             
                  rangeSeparator: ' to '
         | 
| 258 214 | 
             
                },
         | 
| 259 | 
            -
                maxDate | 
| 260 | 
            -
                minDate | 
| 215 | 
            +
                maxDate,
         | 
| 216 | 
            +
                minDate,
         | 
| 261 217 | 
             
                mode,
         | 
| 262 218 | 
             
                nextArrow: '<i class="far fa-angle-right"></i>',
         | 
| 263 219 | 
             
                onOpen: [() => {
         | 
| @@ -294,7 +250,7 @@ const datePickerHelper = (config: DatePickerConfig, scrollContainer: string | HT | |
| 294 250 |  | 
| 295 251 | 
             
              // create html option tags for desired years
         | 
| 296 252 | 
             
              let years = ''
         | 
| 297 | 
            -
              for (let year =  | 
| 253 | 
            +
              for (let year = yearRange[1]; year >= yearRange[0]; year--) {
         | 
| 298 254 | 
             
                years += `<option value="${year}">${year}</option>`
         | 
| 299 255 | 
             
              }
         | 
| 300 256 |  | 
| @@ -367,7 +323,7 @@ const datePickerHelper = (config: DatePickerConfig, scrollContainer: string | HT | |
| 367 323 | 
             
              }
         | 
| 368 324 | 
             
            // === End of Automatic Sync Logic ===
         | 
| 369 325 |  | 
| 370 | 
            -
             | 
| 326 | 
            +
                
         | 
| 371 327 | 
             
              // Adding dropdown icons to year and month select
         | 
| 372 328 | 
             
              dropdown.insertAdjacentHTML('afterend', `<i class="year-dropdown-icon">${angleDown}</i>`)
         | 
| 373 329 | 
             
              if (picker.monthElements[0].parentElement) {
         | 
| @@ -36,6 +36,7 @@ type TextInputProps = { | |
| 36 36 | 
             
                alignment?: "right" | "left",
         | 
| 37 37 | 
             
                border?: boolean,
         | 
| 38 38 | 
             
              },
         | 
| 39 | 
            +
              autoComplete?: boolean | string,
         | 
| 39 40 | 
             
            } & GlobalProps
         | 
| 40 41 |  | 
| 41 42 | 
             
            const TextInput = (props: TextInputProps, ref: React.LegacyRef<HTMLInputElement>) => {
         | 
| @@ -59,6 +60,7 @@ const TextInput = (props: TextInputProps, ref: React.LegacyRef<HTMLInputElement> | |
| 59 60 | 
             
                type = 'text',
         | 
| 60 61 | 
             
                value = '',
         | 
| 61 62 | 
             
                children = null,
         | 
| 63 | 
            +
                autoComplete = true,
         | 
| 62 64 | 
             
              } = props
         | 
| 63 65 |  | 
| 64 66 | 
             
              const ariaProps = buildAriaProps(aria)
         | 
| @@ -142,6 +144,7 @@ const TextInput = (props: TextInputProps, ref: React.LegacyRef<HTMLInputElement> | |
| 142 144 | 
             
                childInput ? React.cloneElement(children, { className: "text_input" }) :
         | 
| 143 145 | 
             
                (<input
         | 
| 144 146 | 
             
                    {...domSafeProps(props)}
         | 
| 147 | 
            +
                    autoComplete={typeof autoComplete === "string" ? autoComplete : ( autoComplete ? undefined : "off" )}
         | 
| 145 148 | 
             
                    className="text_input"
         | 
| 146 149 | 
             
                    disabled={disabled}
         | 
| 147 150 | 
             
                    id={id}
         | 
| @@ -0,0 +1,41 @@ | |
| 1 | 
            +
            <%= pb_rails("text_input", props: {
         | 
| 2 | 
            +
              autocomplete: false,
         | 
| 3 | 
            +
              label: "autocomplete='off'",
         | 
| 4 | 
            +
              name: "firstName",
         | 
| 5 | 
            +
              placeholder: "Enter first name",
         | 
| 6 | 
            +
            }) %>
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            <%= pb_rails("text_input", props: {
         | 
| 9 | 
            +
              label: "no autocomplete attribute (let browser decide- basically 'on')",
         | 
| 10 | 
            +
              name: "lastName",
         | 
| 11 | 
            +
              placeholder: "Enter last name"
         | 
| 12 | 
            +
            }) %>
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            <%= pb_rails("text_input", props: {
         | 
| 15 | 
            +
                autocomplete: true,
         | 
| 16 | 
            +
                label: "autocomplete='on'",
         | 
| 17 | 
            +
                name: "phone",
         | 
| 18 | 
            +
                type: "phone",
         | 
| 19 | 
            +
                placeholder: "Enter phone number"
         | 
| 20 | 
            +
            }) %>
         | 
| 21 | 
            +
             | 
| 22 | 
            +
            <%= pb_rails("body", props: { margin_bottom: "sm" }) do %>
         | 
| 23 | 
            +
              The following have the same autocomplete attributes (email), but have
         | 
| 24 | 
            +
              different name attributes (email and emailAlt). Many browsers will
         | 
| 25 | 
            +
              open autocomplete based on name attributes instead of autocomplete:
         | 
| 26 | 
            +
            <% end %>
         | 
| 27 | 
            +
             | 
| 28 | 
            +
            <%= pb_rails("text_input", props: {
         | 
| 29 | 
            +
                autocomplete: "email",
         | 
| 30 | 
            +
                label: "autocomplete='email' name='email'",
         | 
| 31 | 
            +
                name: "email",
         | 
| 32 | 
            +
                placeholder: "Enter email address"
         | 
| 33 | 
            +
            }) %>
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            <%= pb_rails("text_input", props: {
         | 
| 36 | 
            +
                autocomplete: "email",
         | 
| 37 | 
            +
                label: "autocomplete='email' name='emailAlt'",
         | 
| 38 | 
            +
                name: "emailAlt",
         | 
| 39 | 
            +
                type: "email",
         | 
| 40 | 
            +
                placeholder: "Enter email address"
         | 
| 41 | 
            +
            }) %>
         | 
| @@ -0,0 +1,80 @@ | |
| 1 | 
            +
            import React, { useState } from 'react'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            import TextInput from '../../pb_text_input/_text_input'
         | 
| 4 | 
            +
            import Body from '../../pb_body/_body'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
             | 
| 7 | 
            +
            const TextInputAutocomplete = (props) => {
         | 
| 8 | 
            +
              const [formFields, setFormFields] = useState({
         | 
| 9 | 
            +
                firstName: "",
         | 
| 10 | 
            +
                lastName: "",
         | 
| 11 | 
            +
                phone: "",
         | 
| 12 | 
            +
                emailTest: "",
         | 
| 13 | 
            +
                email: "",
         | 
| 14 | 
            +
              });
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              const handleOnChangeFormField = ({ target }) => {
         | 
| 17 | 
            +
                const { name, value } = target;
         | 
| 18 | 
            +
                setFormFields({ ...formFields, [name]: value });
         | 
| 19 | 
            +
              };
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              return (
         | 
| 22 | 
            +
                <div>
         | 
| 23 | 
            +
                  <TextInput
         | 
| 24 | 
            +
                      autoComplete={false}
         | 
| 25 | 
            +
                      label="autocomplete='off'"
         | 
| 26 | 
            +
                      name="firstName"
         | 
| 27 | 
            +
                      onChange={handleOnChangeFormField}
         | 
| 28 | 
            +
                      placeholder="Enter first name"
         | 
| 29 | 
            +
                      value={formFields.firstName}
         | 
| 30 | 
            +
                      {...props}
         | 
| 31 | 
            +
                  />
         | 
| 32 | 
            +
                  <TextInput
         | 
| 33 | 
            +
                      label="no autocomplete attribute (let browser decide- basically 'on')"
         | 
| 34 | 
            +
                      name="lastName"
         | 
| 35 | 
            +
                      onChange={handleOnChangeFormField}
         | 
| 36 | 
            +
                      placeholder="Enter last name"
         | 
| 37 | 
            +
                      value={formFields.lastName}
         | 
| 38 | 
            +
                      {...props}
         | 
| 39 | 
            +
                  />
         | 
| 40 | 
            +
                  <TextInput
         | 
| 41 | 
            +
                      autoComplete
         | 
| 42 | 
            +
                      label="autocomplete='on'"
         | 
| 43 | 
            +
                      name="phone"
         | 
| 44 | 
            +
                      onChange={handleOnChangeFormField}
         | 
| 45 | 
            +
                      placeholder="Enter phone number"
         | 
| 46 | 
            +
                      type="phone"
         | 
| 47 | 
            +
                      value={formFields.phone}
         | 
| 48 | 
            +
                      {...props}
         | 
| 49 | 
            +
                  />
         | 
| 50 | 
            +
                  <Body marginBottom="sm">
         | 
| 51 | 
            +
                    The following have the same autocomplete attributes (email), but have
         | 
| 52 | 
            +
                    different name attributes (email and emailAlt). Many browsers will
         | 
| 53 | 
            +
                    open autocomplete based on name attributes instead of autocomplete:
         | 
| 54 | 
            +
                  </Body>
         | 
| 55 | 
            +
                  <TextInput
         | 
| 56 | 
            +
                      autoComplete="email"
         | 
| 57 | 
            +
                      label="autocomplete='email' name='email'"
         | 
| 58 | 
            +
                      name="email"
         | 
| 59 | 
            +
                      onChange={handleOnChangeFormField}
         | 
| 60 | 
            +
                      placeholder="Enter email address"
         | 
| 61 | 
            +
                      type="email"
         | 
| 62 | 
            +
                      value={formFields.email}
         | 
| 63 | 
            +
                      {...props}
         | 
| 64 | 
            +
                  />
         | 
| 65 | 
            +
                  <TextInput
         | 
| 66 | 
            +
                      autoComplete="email"
         | 
| 67 | 
            +
                      label="autocomplete='email' name='emailAlt'"
         | 
| 68 | 
            +
                      marginTop="sm"
         | 
| 69 | 
            +
                      name="emailTest"
         | 
| 70 | 
            +
                      onChange={handleOnChangeFormField}
         | 
| 71 | 
            +
                      placeholder="Enter email address"
         | 
| 72 | 
            +
                      type="email"
         | 
| 73 | 
            +
                      value={formFields.emailTest}
         | 
| 74 | 
            +
                      {...props}
         | 
| 75 | 
            +
                  />
         | 
| 76 | 
            +
                </div>
         | 
| 77 | 
            +
              );
         | 
| 78 | 
            +
            };
         | 
| 79 | 
            +
             | 
| 80 | 
            +
            export default TextInputAutocomplete;
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            Set this prop to `false` or `"off"` to remove autocomplete from text inputs. You can also set it to a string, but browsers will often defer to other attributes like `name`. 
         | 
| @@ -9,6 +9,8 @@ examples: | |
| 9 9 | 
             
              - text_input_no_label: No Label
         | 
| 10 10 | 
             
              - text_input_options: Input Options
         | 
| 11 11 | 
             
              - text_input_mask: Mask
         | 
| 12 | 
            +
              - text_input_autocomplete: Autocomplete
         | 
| 13 | 
            +
              
         | 
| 12 14 | 
             
              react:
         | 
| 13 15 | 
             
              - text_input_default: Default
         | 
| 14 16 | 
             
              - text_input_error: With Error
         | 
| @@ -19,6 +21,7 @@ examples: | |
| 19 21 | 
             
              - text_input_no_label: No Label
         | 
| 20 22 | 
             
              - text_input_mask: Mask
         | 
| 21 23 | 
             
              - text_input_sanitize: Sanitized Masked Input
         | 
| 24 | 
            +
              - text_input_autocomplete: Autocomplete
         | 
| 22 25 |  | 
| 23 26 |  | 
| 24 27 | 
             
              swift:
         | 
| @@ -7,3 +7,4 @@ export { default as TextInputInline } from './_text_input_inline.jsx' | |
| 7 7 | 
             
            export { default as TextInputNoLabel } from './_text_input_no_label.jsx'
         | 
| 8 8 | 
             
            export { default as TextInputMask } from './_text_input_mask.jsx'
         | 
| 9 9 | 
             
            export { default as TextInputSanitize } from './_text_input_sanitize.jsx'
         | 
| 10 | 
            +
            export { default as TextInputAutocomplete } from './_text_input_autocomplete.jsx'
         | 
| @@ -15,8 +15,7 @@ module Playbook | |
| 15 15 | 
             
                    "cvv" => '\d{3,4}',
         | 
| 16 16 | 
             
                  }.freeze
         | 
| 17 17 |  | 
| 18 | 
            -
                  prop :autocomplete,  | 
| 19 | 
            -
                                      default: true
         | 
| 18 | 
            +
                  prop :autocomplete, default: true
         | 
| 20 19 | 
             
                  prop :disabled, type: Playbook::Props::Boolean,
         | 
| 21 20 | 
             
                                  default: false
         | 
| 22 21 | 
             
                  prop :error
         | 
| @@ -69,7 +68,7 @@ module Playbook | |
| 69 68 |  | 
| 70 69 | 
             
                  def all_input_options
         | 
| 71 70 | 
             
                    {
         | 
| 72 | 
            -
                      autocomplete: autocomplete ? nil : "off",
         | 
| 71 | 
            +
                      autocomplete: autocomplete == true ? nil : (autocomplete.presence || "off"),
         | 
| 73 72 | 
             
                      class: "text_input #{input_options.dig(:classname) || ''}",
         | 
| 74 73 | 
             
                      data: validation_data,
         | 
| 75 74 | 
             
                      disabled: disabled,
         | 
| @@ -306,3 +306,41 @@ test('returns masked CVV value', () => { | |
| 306 306 |  | 
| 307 307 | 
             
              expect(input.value).toBe('')
         | 
| 308 308 | 
             
            })
         | 
| 309 | 
            +
             | 
| 310 | 
            +
            test('adds autocomplete string attribute', () => {
         | 
| 311 | 
            +
              render(
         | 
| 312 | 
            +
                <TextInput
         | 
| 313 | 
            +
                    autoComplete="family-name"
         | 
| 314 | 
            +
                    data={{ testid: testId }}
         | 
| 315 | 
            +
                />
         | 
| 316 | 
            +
              )
         | 
| 317 | 
            +
             | 
| 318 | 
            +
              const kit = screen.getByTestId(testId)
         | 
| 319 | 
            +
              const input = within(kit).getByRole('textbox')
         | 
| 320 | 
            +
              expect(input).toHaveAttribute("autocomplete", "family-name")
         | 
| 321 | 
            +
            })
         | 
| 322 | 
            +
             | 
| 323 | 
            +
            test('adds autocomplete "off" attribute', () => {
         | 
| 324 | 
            +
              render(
         | 
| 325 | 
            +
                <TextInput
         | 
| 326 | 
            +
                    autoComplete={false}
         | 
| 327 | 
            +
                    data={{ testid: testId }}
         | 
| 328 | 
            +
                />
         | 
| 329 | 
            +
              )
         | 
| 330 | 
            +
             | 
| 331 | 
            +
              const kit = screen.getByTestId(testId)
         | 
| 332 | 
            +
              const input = within(kit).getByRole('textbox')
         | 
| 333 | 
            +
              expect(input).toHaveAttribute("autocomplete", "off")
         | 
| 334 | 
            +
            })
         | 
| 335 | 
            +
             | 
| 336 | 
            +
            test('does not add autocomplete attribute otherwise', () => {
         | 
| 337 | 
            +
              render(
         | 
| 338 | 
            +
                <TextInput
         | 
| 339 | 
            +
                    data={{ testid: testId }}
         | 
| 340 | 
            +
                />
         | 
| 341 | 
            +
              )
         | 
| 342 | 
            +
             | 
| 343 | 
            +
              const kit = screen.getByTestId(testId)
         | 
| 344 | 
            +
              const input = within(kit).getByRole('textbox')
         | 
| 345 | 
            +
              expect(input).not.toHaveAttribute("autocomplete")
         | 
| 346 | 
            +
            })
         | 
| @@ -1 +1 @@ | |
| 1 | 
            -
            import{jsx,Fragment,jsxs}from"react/jsx-runtime";import{useState,useEffect}from"react";import{b as buildAriaProps,c as buildDataProps,d as buildHtmlProps,H as HighchartsReact,e as Highcharts,f as classnames,g as globalProps,h as HighchartsMore,S as SolidGauge,i as buildCss}from"./_typeahead-kSoeXQEm.js";import{c as colors,h as highchartsTheme,m as merge,a as highchartsDarkTheme,t as typography}from"./lib-9rRWxm7V.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{b as buildAriaProps,c as buildDataProps,d as buildHtmlProps,H as HighchartsReact,e as Highcharts,f as classnames,g as globalProps,h as HighchartsMore,S as SolidGauge,i as buildCss}from"./_typeahead-DmVCLhQz.js";import{c as colors,h as highchartsTheme,m as merge,a as highchartsDarkTheme,t as typography}from"./lib-CY5ZPzic.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};
         |