playbook_ui 15.0.0.pre.alpha.PLAY2361datepickerarrownav10322 → 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 +3 -15
- 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-DHO-uYxy.js → _line_graph-CTpWU06n.js} +1 -1
- data/dist/chunks/{_typeahead-_kMvPVfz.js → _typeahead-DmVCLhQz.js} +2 -2
- data/dist/chunks/{_weekday_stacked-B1esXFeA.js → _weekday_stacked-DvnT8mDi.js} +1 -1
- data/dist/chunks/{lib-C43ywQsO.js → lib-CY5ZPzic.js} +1 -1
- data/dist/chunks/{pb_form_validation-Cqj3itLG.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 +10 -7
    
        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,16 +89,6 @@ const datePickerHelper = (config: DatePickerConfig, scrollContainer: string | HT | |
| 89 89 | 
             
                }
         | 
| 90 90 | 
             
              }
         | 
| 91 91 |  | 
| 92 | 
            -
              // Helper function to get min/max dates based on yearRange
         | 
| 93 | 
            -
              const getMinMaxDates = () => {
         | 
| 94 | 
            -
                const [minYear, maxYear] = yearRange
         | 
| 95 | 
            -
             | 
| 96 | 
            -
                const setMinDate = minDate || `01/01/${minYear}`
         | 
| 97 | 
            -
                const setMaxDate = maxDate || `12/31/${maxYear}`
         | 
| 98 | 
            -
             | 
| 99 | 
            -
                return { setMinDate, setMaxDate }
         | 
| 100 | 
            -
              }
         | 
| 101 | 
            -
             | 
| 102 92 | 
             
              const disabledWeekDays = () => {
         | 
| 103 93 | 
             
                return (
         | 
| 104 94 | 
             
                  [
         | 
| @@ -211,8 +201,6 @@ const datePickerHelper = (config: DatePickerConfig, scrollContainer: string | HT | |
| 211 201 | 
             
              // |             Flatpickr initializer w/ config             |
         | 
| 212 202 | 
             
              // ===========================================================
         | 
| 213 203 |  | 
| 214 | 
            -
              const { setMinDate, setMaxDate } = getMinMaxDates()
         | 
| 215 | 
            -
             | 
| 216 204 | 
             
              flatpickr(`#${pickerId}`, {
         | 
| 217 205 | 
             
                allowInput,
         | 
| 218 206 | 
             
                closeOnSelect,
         | 
| @@ -224,8 +212,8 @@ const datePickerHelper = (config: DatePickerConfig, scrollContainer: string | HT | |
| 224 212 | 
             
                locale: {
         | 
| 225 213 | 
             
                  rangeSeparator: ' to '
         | 
| 226 214 | 
             
                },
         | 
| 227 | 
            -
                maxDate | 
| 228 | 
            -
                minDate | 
| 215 | 
            +
                maxDate,
         | 
| 216 | 
            +
                minDate,
         | 
| 229 217 | 
             
                mode,
         | 
| 230 218 | 
             
                nextArrow: '<i class="far fa-angle-right"></i>',
         | 
| 231 219 | 
             
                onOpen: [() => {
         | 
| @@ -335,7 +323,7 @@ const datePickerHelper = (config: DatePickerConfig, scrollContainer: string | HT | |
| 335 323 | 
             
              }
         | 
| 336 324 | 
             
            // === End of Automatic Sync Logic ===
         | 
| 337 325 |  | 
| 338 | 
            -
             | 
| 326 | 
            +
                
         | 
| 339 327 | 
             
              // Adding dropdown icons to year and month select
         | 
| 340 328 | 
             
              dropdown.insertAdjacentHTML('afterend', `<i class="year-dropdown-icon">${angleDown}</i>`)
         | 
| 341 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-_kMvPVfz.js";import{c as colors,h as highchartsTheme,m as merge,a as highchartsDarkTheme,t as typography}from"./lib-C43ywQsO.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};
         |