diff --git a/.eslintrc.json b/.eslintrc.json index 9094de5300..bb477ec668 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,9 +1,18 @@ { - "extends": "next/core-web-vitals", + "plugins": ["@typescript-eslint"], + "extends": [ + "next/core-web-vitals", + "plugin:@typescript-eslint/recommended", + "prettier" + ], "rules": { "@next/next/no-img-element": "off", "react/display-name": "off", "react/no-unescaped-entities": "off", + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/no-empty-interface": "off", + "@typescript-eslint/no-unused-vars": "off", + "@typescript-eslint/no-explicit-any": "off", "no-console": 2 } } diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000..94f480de94 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto eol=lf \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000000..8f2f3cdf94 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,7 @@ +# Ignore artifacts: +build +coverage +api-generator +out +public +styles \ No newline at end of file diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000000..0edb04230b --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,9 @@ +{ + "useTabs": false, + "tabWidth": 4, + "trailingComma": "none", + "semi": true, + "singleQuote": true, + "jsxSingleQuote": false, + "printWidth": 250 +} diff --git a/components/doc/accordion/index.js b/components/doc/accordion/index.js index c7d9569e91..a6287b037c 100644 --- a/components/doc/accordion/index.js +++ b/components/doc/accordion/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const AccordionDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -139,7 +138,7 @@ export class AccordionDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -261,7 +260,7 @@ export const AccordionDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -382,8 +381,8 @@ export const AccordionDemo = () => { ) } ` - }, - 'browser': { + }, + browser: { tabName: 'Browser Source', imports: ` @@ -508,8 +507,8 @@ const AccordionDemo = () => { ) } ` - } - }; + } + }; const extFiles = { 'demo/AccordionDemo.css': { @@ -528,35 +527,37 @@ const AccordionDemo = () => { } ` } - } + }; return (
-
Import via Module
- -{` +
Import via Module
+ + {` import { Accordion, AccordionTab } from 'primereact/accordion'; `} - +
-
Import via CDN
- -{` +
Import via CDN
+ + {` `} - +
-
Getting Started
-

Accordion element consists of one or more AccordionTab elements and can either be used as a Controlled or Uncontrolled component.

+
Getting Started
+

Accordion element consists of one or more AccordionTab elements and can either be used as a Controlled or Uncontrolled component.

-
Controlled Component
-

In controlled mode, activeIndex and onTabChange properties need to be defined to control the state.

+
Controlled Component
+

+ In controlled mode, activeIndex and onTabChange properties need to be defined to control the state. +

- -{` + + {` setActiveIndex(e.index)}> Content I @@ -569,14 +570,16 @@ import { Accordion, AccordionTab } from 'primereact/accordion'; `} - + -
Uncontrolled
-

In uncontrolled mode, no additional properties are required. Initial active tab can be provided using the activeIndex property in uncontrolled mode however it is evaluated at initial rendering and ignored in further updates. If you programmatically - need to update the active tab, prefer to use the component as controlled.

+
Uncontrolled
+

+ In uncontrolled mode, no additional properties are required. Initial active tab can be provided using the activeIndex property in uncontrolled mode however it is evaluated at initial rendering and ignored in further + updates. If you programmatically need to update the active tab, prefer to use the component as controlled. +

- -{` + + {` Content I @@ -589,12 +592,14 @@ import { Accordion, AccordionTab } from 'primereact/accordion'; `} - + -
Multiple
-

By default only one tab at a time can be active, enabling multiple property changes this behavior to allow multiple tabs be active at the same time.

- -{` +
Multiple
+

+ By default only one tab at a time can be active, enabling multiple property changes this behavior to allow multiple tabs be active at the same time. +

+ + {` Content I @@ -607,211 +612,226 @@ import { Accordion, AccordionTab } from 'primereact/accordion'; `} - - -
Properties For AccordionTab
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
headerstringnullOrientation of tab headers.
disabledbooleanfalseWhether the tab is disabled.
styleobjectnullInline style of the tab header and content.
classNamestringnullStyle class of the tab header and content.
headerStyleobjectnullInline style of the tab header.
headerClassNamestringnullStyle class of the tab header.
headerTemplateanynullTemplate of the tab header.
contentStyleobjectnullInline style of the tab content.
contentClassNamestringnullStyle class of the tab content.
-
+
+ +
Properties For AccordionTab
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDefaultDescription
headerstringnullOrientation of tab headers.
disabledbooleanfalseWhether the tab is disabled.
styleobjectnullInline style of the tab header and content.
classNamestringnullStyle class of the tab header and content.
headerStyleobjectnullInline style of the tab header.
headerClassNamestringnullStyle class of the tab header.
headerTemplateanynullTemplate of the tab header.
contentStyleobjectnullInline style of the tab content.
contentClassNamestringnullStyle class of the tab content.
+
-
Properties
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
activeIndexanynullActive index or indexes of the element. Use an array of numbers for multiple indexes. the "multiple" prop must be set to true in order to specify multiple indexes.
classNamestringnullStyle class of the element.
styleobjectnullInline style of the element.
multiplebooleanfalseWhen enabled, multiple tabs can be activated at the same time.
expandIconstringpi pi-chevron-rightIcon of a collapsed tab.
collapseIconstringpi pi-chevron-downIcon of an expanded tab.
transitionOptionsobjectnullThe properties of CSSTransition can be customized, except for "nodeRef" and "in" properties.
-
+
Properties
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
activeIndexanynullActive index or indexes of the element. Use an array of numbers for multiple indexes. the "multiple" prop must be set to true in order to specify multiple indexes.
classNamestringnullStyle class of the element.
styleobjectnullInline style of the element.
multiplebooleanfalseWhen enabled, multiple tabs can be activated at the same time.
expandIconstringpi pi-chevron-rightIcon of a collapsed tab.
collapseIconstringpi pi-chevron-downIcon of an expanded tab.
transitionOptionsobjectnull + The properties of{' '} + + CSSTransition + {' '} + can be customized, except for "nodeRef" and "in" properties. +
+
-
Events
-
- - - - - - - - - - - - - - - - - - - - - - - - - -
NameParametersDescription
onTabOpenevent.originalEvent: browser event
- event.index: Index or indexes of the tab (number or array of numbers). -
Callback to invoke when a tab gets expanded.
onTabCloseevent.originalEvent: browser event
- event.index: Index of the tab -
Callback to invoke when an active tab is collapsed by clicking on the header.
onTabChangeevent.originalEvent: browser event
- event.index: Index of the tab -
Callback to invoke when state of the accordion changes.
-
+
Events
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
NameParametersDescription
onTabOpen + event.originalEvent: browser event
+ event.index: Index or indexes of the tab (number or array of numbers). +
Callback to invoke when a tab gets expanded.
onTabClose + event.originalEvent: browser event
+ event.index: Index of the tab +
Callback to invoke when an active tab is collapsed by clicking on the header.
onTabChange + event.originalEvent: browser event
+ event.index: Index of the tab +
Callback to invoke when state of the accordion changes.
+
-
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - -
NameElement
p-accordionContainer element.
p-accordion-headerHeader of a tab.
p-accordion-contentContainer of a tab.
-
+
Styling
+

+ Following is the list of structural style classes, for theming classes visit theming page. +

+
+ + + + + + + + + + + + + + + + + + + + + +
NameElement
p-accordionContainer element.
p-accordion-headerHeader of a tab.
p-accordion-contentContainer of a tab.
+
-
Accessibility
+
Accessibility
Screen Reader
-

Accordion header elements have a button role and use aria-controls to define the id of the content section along with aria-expanded for the visibility state. The value to read a header element - defaults to the value of the header property and can be customized by defining an aria-label or aria-labelledby via the headerProps property.

-

The content uses region role, defines an id that matches the aria-controls of the header and aria-labelledby referring to the id of the header.

+

+ Accordion header elements have a button role and use aria-controls to define the id of the content section along with aria-expanded for the visibility state. The value to read a header element defaults + to the value of the header property and can be customized by defining an aria-label or aria-labelledby via the headerProps property. +

+

+ The content uses region role, defines an id that matches the aria-controls of the header and aria-labelledby referring to the id of the header. +

Header Keyboard Support
@@ -824,53 +844,67 @@ import { Accordion, AccordionTab } from 'primereact/accordion'; - tab + + tab + Moves focus to the next the focusable element in the page tab sequence. - shift + tab + + shift + tab + Moves focus to the previous the focusable element in the page tab sequence. - enter + + enter + Toggles the visibility of the content. - space + + space + Toggles the visibility of the content. - down arrow + + down arrow + Moves focus to the next header. - up arrow + + up arrow + Moves focus to the previous header. - home + + home + Moves focus to the first header. - end + + end + Moves focus to the last header.
-
Dependencies
-
    -
  • react-transition-group
  • -
+
Dependencies
+
    +
  • react-transition-group
  • +
- { - useLiveEditorTabs({ name: 'AccordionDemo', sources: sources, extFiles: extFiles }) - } + {useLiveEditorTabs({ name: 'AccordionDemo', sources: sources, extFiles: extFiles })}
); -}) +}); export default AccordionDoc; diff --git a/components/doc/autocomplete/index.js b/components/doc/autocomplete/index.js index a84f9e729d..942e4f07d7 100644 --- a/components/doc/autocomplete/index.js +++ b/components/doc/autocomplete/index.js @@ -1,14 +1,13 @@ import React, { memo } from 'react'; -import Link from 'next/link'; +import Link from 'next/link'; import { TabView, TabPanel } from '../../lib/tabview/TabView'; import { useLiveEditorTabs } from '../common/liveeditor'; import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const AutoCompleteDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -163,7 +162,7 @@ export class AutoCompleteDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -305,7 +304,7 @@ export const AutoCompleteDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -446,8 +445,8 @@ export const AutoCompleteDemo = () => { ) } ` - }, - 'browser': { + }, + browser: { tabName: 'Browser Source', imports: ` @@ -591,41 +590,41 @@ const AutoCompleteDemo = () => { ) } ` - } } - + }; return (
Import via Module
- -{` + + {` import { AutoComplete } from 'primereact/autocomplete'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

AutoComplete is used as a controlled component with value and onChange properties. In addition, the component - requires a list of suggestions and a completeMethod to query the results.

+

+ AutoComplete is used as a controlled component with value and onChange properties. In addition, the component requires a list of suggestions and a completeMethod to query the results. +

- -{` + + {` setSelectedCountry(e.value)} /> `} - + - -{` + + {` const countries = // datasource const searchCountry = (event) => { @@ -639,43 +638,48 @@ render() { ); } `} - +
Dropdown
-

Enabling dropdown property displays a button next to the input field where click behavior of the button is defined using - dropdownMode property that takes "blank" or "current" as possible values. - "blank" is the default mode to send a query with an empty string whereas - "current" setting sends a query with the current value of the input.

+

+ Enabling dropdown property displays a button next to the input field where click behavior of the button is defined using dropdownMode property that takes "blank" or "current" as possible values. "blank" is the default + mode to send a query with an empty string whereas "current" setting sends a query with the current value of the input. +

- -{` + + {` setSelectedCountry(e.value)} /> `} - +
Multiple Mode
-

Multiple mode is enabled using multiple property used to select more than one value from the autocomplete. In this case, value reference should be an array.

- -{` +

+ Multiple mode is enabled using multiple property used to select more than one value from the autocomplete. In this case, value reference should be an array. +

+ + {` setSelectedCountry(e.value)} /> `} - +
Objects
-

AutoComplete can also work with objects using the field property that defines the label to display - as a suggestion. The value passed to the model would still be the object instance of a suggestion. - Here is an example with a Country object that has name and code fields such as {name:"United States",code:"USA"}.

+

+ AutoComplete can also work with objects using the field property that defines the label to display as a suggestion. The value passed to the model would still be the object instance of a suggestion. Here is an example + with a Country object that has name and code fields such as {name:"United States",code:"USA"}. +

- -{` + + {` setSelectedCountry(e.value)} /> `} - +
Grouping
-

Options groups are specified with the optionGroupLabel and optionGroupChildren properties.

- -{` +

+ Options groups are specified with the optionGroupLabel and optionGroupChildren properties. +

+ + {` const groupedCities = [ { label: 'Germany', code: 'DE', @@ -706,44 +710,51 @@ const groupedCities = [ } ]; `} - +
- -{` + + {` setSelectedCity(e.value)}/> `} - +
Force Selection
-

ForceSelection mode validates the manual input to check whether it also exists in the suggestions list, if not the input value is cleared - to make sure the value passed to the model is always one of the suggestions. Simply enable forceSelection to enforce that input is always from the suggestion list.

- -{` +

+ ForceSelection mode validates the manual input to check whether it also exists in the suggestions list, if not the input value is cleared to make sure the value passed to the model is always one of the suggestions. Simply + enable forceSelection to enforce that input is always from the suggestion list. +

+ + {` setSelectedCountry(e.value)} /> `} - +
Templating
-

Custom content can be displayed using itemTemplate property that references a function or JSXElement or string which gets - the suggestion option and returns an element. Similarly selectedItemTemplate property is available - to customize the chips in multiple mode using the same approach.

+

+ Custom content can be displayed using itemTemplate property that references a function or JSXElement or string which gets the suggestion option and returns an element. Similarly selectedItemTemplate property is + available to customize the chips in multiple mode using the same approach. +

- -{` + + {` setSelectedCountry(e.value)} itemTemplate={itemTemplate} /> `} - + - -{` + + {` itemTemplate(item) { //return custom element } `} - +
Properties
-

Standard HTMLSpanElement properties are passed to the wrapping div element.
In addition the component uses these properties:

+

+ Standard HTMLSpanElement properties are passed to the wrapping div element. +
+ In addition the component uses these properties: +

@@ -807,8 +818,7 @@ itemTemplate(item) { - + @@ -934,7 +944,9 @@ itemTemplate(item) { - + @@ -982,7 +994,13 @@ itemTemplate(item) { - + @@ -1000,7 +1018,9 @@ itemTemplate(item) { - +
forceSelection boolean falseWhen present, autocomplete clears the manual input if it does not match of the suggestions to force only - accepting values from the suggestions.When present, autocomplete clears the manual input if it does not match of the suggestions to force only accepting values from the suggestions.
autoHighlightappendTo DOM element | string document.bodyDOM element instance where the overlay panel should be mounted. Valid values are any DOM Element and 'self'. The self value is used to render a component where it is located. + DOM element instance where the overlay panel should be mounted. Valid values are any DOM Element and 'self'. The self value is used to render a component where it is located. +
tabIndextransitionOptions object nullThe properties of CSSTransition can be customized, except for "nodeRef" and "in" properties. + The properties of{' '} + + CSSTransition + {' '} + can be customized, except for "nodeRef" and "in" properties. +
dropdownIconvirtualScrollerOptions object nullWhether to use the virtualScroller feature. The properties of VirtualScroller component can be used like an object in it. + Whether to use the virtualScroller feature. The properties of VirtualScroller component can be used like an object in it. +
@@ -1027,8 +1047,10 @@ itemTemplate(item) { onChange - event.originalEvent: Browser event
- event.value: Value of the component + + event.originalEvent: Browser event
+ event.value: Value of the component + Callback to invoke when autocomplete value changes. @@ -1043,14 +1065,18 @@ itemTemplate(item) { onSelect - event.originalEvent: Browser event
- event.value: Value of the component + + event.originalEvent: Browser event
+ event.value: Value of the component + Callback to invoke when a suggestion is selected. onUnselect - event.originalEvent: Browser event
- event.value: Value of the component + + event.originalEvent: Browser event
+ event.value: Value of the component + Callback to invoke when a selected value is removed. @@ -1154,15 +1180,22 @@ itemTemplate(item) {
Accessibility
- -
Screen Reader
-

Value to describe the component can either be provided via label tag combined with inputId prop or using aria-labelledby, aria-label props. The input element has combobox role - in addition to aria-autocomplete, aria-haspopup and aria-expanded attributes. The relation between the input and the popup is created with aria-controls and aria-activedescendant attribute is used - to instruct screen reader which option to read during keyboard navigation within the popup list.

-

In multiple mode, chip list uses listbox role with aria-orientation set to horizontal whereas each chip has the option role with aria-label set to the label of the chip.

-

The popup list has an id that refers to the aria-controls attribute of the input element and uses listbox as the role. Each list item has option role and an id to match the aria-activedescendant of the input element.

- -{` + +
Screen Reader
+

+ Value to describe the component can either be provided via label tag combined with inputId prop or using aria-labelledby, aria-label props. The input element has combobox role in addition + to aria-autocomplete, aria-haspopup and aria-expanded attributes. The relation between the input and the popup is created with aria-controls and aria-activedescendant attribute is used to + instruct screen reader which option to read during keyboard navigation within the popup list. +

+

+ In multiple mode, chip list uses listbox role with aria-orientation set to horizontal whereas each chip has the option role with aria-label set to the label of the chip. +

+

+ The popup list has an id that refers to the aria-controls attribute of the input element and uses listbox as the role. Each list item has option role and an id to match the aria-activedescendant{' '} + of the input element. +

+ + {` @@ -1171,110 +1204,130 @@ itemTemplate(item) { `} - -
Keyboard Support
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
KeyFunction
tabMoves focus to the input element when popup is not visible. - If the popup is open and an item is highlighted then popup gets closed, item gets selected and focus moves to the next focusable element.
up arrowHighlights the previous item if popup is visible.
down arrowHighlights the next item if popup is visible.
enterSelects the highlighted item and closes the popup if popup is visible.
homeHighlights the first item if popup is visible.
endHighlights the last item if popup is visible.
escapeHides the popup.
-
- -
Chips Input Keyboard Support
-
- - - - - - - - - - - - - - - - - -
KeyFunction
backspaceDeletes the previous chip if the input field is empty.
left arrowMoves focus to the previous chip if available and input field is empty.
-
- -
Chip Keyboard Support
-
- - - - - - - - - - - - - - - - - - - - - -
KeyFunction
left arrowMoves focus to the previous chip if available.
right arrowMoves focus to the next chip, if there is none then input field receives the focus.
backspaceDeletes the chips and adds focus to the input field.
-
-
- +
+
Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the input element when popup is not visible. If the popup is open and an item is highlighted then popup gets closed, item gets selected and focus moves to the next focusable element.
+ up arrow + Highlights the previous item if popup is visible.
+ down arrow + Highlights the next item if popup is visible.
+ enter + Selects the highlighted item and closes the popup if popup is visible.
+ home + Highlights the first item if popup is visible.
+ end + Highlights the last item if popup is visible.
+ escape + Hides the popup.
+
+ +
Chips Input Keyboard Support
+
+ + + + + + + + + + + + + + + + + +
KeyFunction
+ backspace + Deletes the previous chip if the input field is empty.
+ left arrow + Moves focus to the previous chip if available and input field is empty.
+
+ +
Chip Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ left arrow + Moves focus to the previous chip if available.
+ right arrow + Moves focus to the next chip, if there is none then input field receives the focus.
+ backspace + Deletes the chips and adds focus to the input field.
+
+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'AutoCompleteDemo', sources: sources, service: 'CountryService', data: 'countries' }) - } + {useLiveEditorTabs({ name: 'AutoCompleteDemo', sources: sources, service: 'CountryService', data: 'countries' })}
- ) -}) + ); +}); export default AutoCompleteDoc; diff --git a/components/doc/avatar/index.js b/components/doc/avatar/index.js index 7828beabeb..c008da3833 100644 --- a/components/doc/avatar/index.js +++ b/components/doc/avatar/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const AvatarDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -116,7 +115,7 @@ export class AvatarDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React from 'react'; @@ -222,7 +221,7 @@ export const AvatarDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React from 'react'; @@ -328,7 +327,7 @@ export const AvatarDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -439,49 +438,53 @@ const AvatarDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { Avatar } from 'primereact/avatar'; import { AvatarGroup } from 'primereact/avatargroup'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started

Avatar has three built-in display modes; "label", "icon" and "image".

- -{` + + {` `} - +
Sizes
-

size property defines the size of the Avatar with "large" and "xlarge" as possible values.

- -{` +

+ size property defines the size of the Avatar with "large" and "xlarge" as possible values. +

+ + {` `} - +
AvatarGroup
-

A set of Avatars can be displayed together using the AvatarGroup component.

- -{` +

+ A set of Avatars can be displayed together using the AvatarGroup component. +

+ + {` @@ -489,32 +492,36 @@ import { AvatarGroup } from 'primereact/avatargroup'; `} - +
Shape
-

Avatar comes in two different styles specified with the shape property, "square" is the default and "circle" is the alternative.

- -{` +

+ Avatar comes in two different styles specified with the shape property, "square" is the default and "circle" is the alternative. +

+ + {` `} - +
Badge
-

A badge can be added to an Avatar with the Badge component.

- -{` +

+ A badge can be added to an Avatar with the Badge component. +

+ + {` `} - +
Templating

Content can easily be customized with the default slot instead of using the built-in modes.

- -{` + + {` Content `} - +
Properties of Avatar

Any valid attribute is passed to the root element implicitly, extended properties are as follows;

@@ -604,7 +611,9 @@ import { AvatarGroup } from 'primereact/avatargroup';
Styling of Avatar
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

@@ -667,8 +676,10 @@ import { AvatarGroup } from 'primereact/avatargroup';
Accessibility
Screen Reader
-

Avatar does not include any roles and attributes by default. Any attribute is passed to the root element so you may add a role like img along with aria-labelledby or aria-label to describe the component. - In case avatars need to be tabbable, tabIndex can be added as well to implement custom key handlers.

+

+ Avatar does not include any roles and attributes by default. Any attribute is passed to the root element so you may add a role like img along with aria-labelledby or aria-label to describe the + component. In case avatars need to be tabbable, tabIndex can be added as well to implement custom key handlers. +

Keyboard Support

Component does not include any interactive elements.

@@ -678,12 +689,10 @@ import { AvatarGroup } from 'primereact/avatargroup';

None.

- { - useLiveEditorTabs({ name: 'AvatarDemo', sources: sources }) - } + {useLiveEditorTabs({ name: 'AvatarDemo', sources: sources })} ); -}) +}); export default AvatarDoc; diff --git a/components/doc/badge/index.js b/components/doc/badge/index.js index 618bd84ee9..38baeb5528 100644 --- a/components/doc/badge/index.js +++ b/components/doc/badge/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const BadgeDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -48,7 +47,7 @@ export class BadgeDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React from 'react'; @@ -86,7 +85,7 @@ export const BadgeDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React from 'react'; @@ -124,7 +123,7 @@ export const BadgeDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -166,7 +165,7 @@ const BadgeDemo = () => { } ` } - } + }; return (
@@ -176,20 +175,23 @@ const BadgeDemo = () => {

Badge can be used as a component.

Component
- -{` + + {` import { Badge } from 'primereact/badge'; `} - -

Content of the badge is specified using the value property.

- -{` + +

+ Content of the badge is specified using the value property. +

+ + {` `} - +
Severities
-

Different color options are available as severity levels. When used as a component use the severity property - to apply a severity.

+

+ Different color options are available as severity levels. When used as a component use the severity property to apply a severity. +

  • success
  • @@ -197,17 +199,19 @@ import { Badge } from 'primereact/badge';
  • warning
  • danger
- -{` + + {` `} - +
Button Badges
-

Buttons provide integrated badge support with the badge and badgeClass properties.

+

+ Buttons provide integrated badge support with the badge and badgeClass properties. +

- -{` + + {` @@ -216,23 +220,25 @@ import { Badge } from 'primereact/badge'; `} - +
Sizes
-

Badge sizes are adjusted with the size property that accepts "large" and "xlarge" as the possible alternatives to the default size.

- -{` +

+ Badge sizes are adjusted with the size property that accepts "large" and "xlarge" as the possible alternatives to the default size. +

+ + {` `} - +

In addition, when placed inside another element, badge sizes can also derive their size from their parent.

- -{` + + {`

Heading 1

Heading 2

`} -
+
Properties

Any valid attribute is passed to the root element implicitly, extended properties are as follows;

@@ -269,14 +275,16 @@ import { Badge } from 'primereact/badge';
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

- - - - + + + + @@ -322,8 +330,10 @@ import { Badge } from 'primereact/badge';
Accessibility
Screen Reader
-

Badge does not include any roles and attributes by default, any attribute is passed to the root element so aria roles and attributes can be added if required. If the badges are dynamic, - aria-live may be utilized as well. In case badges need to be tabbable, tabIndex can be added to implement custom key handlers.

+

+ Badge does not include any roles and attributes by default, any attribute is passed to the root element so aria roles and attributes can be added if required. If the badges are dynamic, + aria-live may be utilized as well. In case badges need to be tabbable, tabIndex can be added to implement custom key handlers. +

Keyboard Support

Component does not include any interactive elements.

@@ -333,12 +343,10 @@ import { Badge } from 'primereact/badge';

None.

- { - useLiveEditorTabs({ name: 'BadgeDemo', sources: sources }) - } + {useLiveEditorTabs({ name: 'BadgeDemo', sources: sources })} ); -}) +}); export default BadgeDoc; diff --git a/components/doc/blockui/index.js b/components/doc/blockui/index.js index 480ada8e9c..c0bf7193a7 100644 --- a/components/doc/blockui/index.js +++ b/components/doc/blockui/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const BlockUIDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -93,7 +92,7 @@ export class BlockUIDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -162,7 +161,7 @@ export const BlockUIDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -231,7 +230,7 @@ export const BlockUIDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -304,8 +303,8 @@ const BlockUIDemo = () => { ) } ` - } } + }; const extFiles = { 'demo/BlockUIDemo.css': { @@ -319,34 +318,35 @@ const BlockUIDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { BlockUI } from 'primereact/blockui'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

BlockUI is controlled using the blocked property, by default target element to block is the child component. In example below, panel gets blocked - with a mask when blockedPanel is enabled and gets unblock when the bound variable is set to false. +

+ BlockUI is controlled using the blocked property, by default target element to block is the child component. In example below, panel gets blocked with a mask when blockedPanel is enabled and gets unblock when the bound + variable is set to false.

- -{` + + {` export const BlockUIDemo = () => { const [blockedPanel, setBlockedPanel] = useState(false); @@ -368,17 +368,19 @@ export const BlockUIDemo = () => { ); } `} - +
Full Screen
-

In full screen mode, instead of a particular element, the whole document gets blocked. Set fullScreen as true in order to enable this functionality.

- -{` +

+ In full screen mode, instead of a particular element, the whole document gets blocked. Set fullScreen as true in order to enable this functionality. +

+ + {` // content `} - +
Properties

Any valid attribute is passed to the root element implicitly, extended properties are as follows;

@@ -471,7 +473,9 @@ export const BlockUIDemo = () => {
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

NameElement
NameElement
@@ -496,8 +500,10 @@ export const BlockUIDemo = () => {
Accessibility
Screen Reader
-

BlockUI manages aria-busy state attribute when the UI gets blocked and unblocked. Any valid attribute is passed to the root element so additional attributes - like role and aria-live can be used to define live regions.

+

+ BlockUI manages aria-busy state attribute when the UI gets blocked and unblocked. Any valid attribute is passed to the root element so additional attributes like role and aria-live can be used to + define live regions. +

Keyboard Support

Component does not include any interactive elements.

@@ -507,13 +513,10 @@ export const BlockUIDemo = () => {

None.

- { - useLiveEditorTabs({ name: 'BlockUIDemo', sources: sources, extFiles: extFiles }) - } - + {useLiveEditorTabs({ name: 'BlockUIDemo', sources: sources, extFiles: extFiles })} - ) -}) + ); +}); export default BlockUIDoc; diff --git a/components/doc/breadcrumb/index.js b/components/doc/breadcrumb/index.js index 377a83397c..6581ff50bd 100644 --- a/components/doc/breadcrumb/index.js +++ b/components/doc/breadcrumb/index.js @@ -6,11 +6,10 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const BreadCrumbDoc = memo(() => { - - const sources = { - 'class': { - tabName: 'Class Source', - content: ` + const sources = { + class: { + tabName: 'Class Source', + content: ` import React, { Component } from 'react'; import { BreadCrumb } from 'primereact/breadcrumb'; @@ -38,7 +37,7 @@ export class BreadCrumbDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React from 'react'; @@ -65,7 +64,7 @@ const BreadCrumbDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React from 'react'; @@ -92,7 +91,7 @@ const BreadCrumbDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -122,35 +121,37 @@ const BreadCrumbDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { BreadCrumb } from 'primereact/breadcrumb'; `} - +
Import via CDN
- -{` + + {` `} - +
MenuModel API
-

BreadCrumb uses the common menumodel api to define its items, visit MenuModel for details.

+

+ BreadCrumb uses the common menumodel api to define its items, visit MenuModel for details. +

Getting Started

BreadCrumb requires a collection of menuitems as its model.

- -{` + + {` const items = [ { label: 'Categories' }, { label: 'Sports' }, @@ -164,13 +165,13 @@ const items = [ const home = { icon: 'pi pi-home', url: 'https://www.primefaces.org/primereact' } `} - + - -{` + + {` `} - +
Properties
@@ -219,7 +220,9 @@ const home = { icon: 'pi pi-home', url: 'https://www.primefaces.org/primereact'
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

@@ -251,24 +254,24 @@ const home = { icon: 'pi pi-home', url: 'https://www.primefaces.org/primereact'
Accessibility
-
Screen Reader
-

Breadcrumb uses the nav element and since any attribute is passed to the root implicitly aria-labelledby or aria-label can be used to describe the component. Inside an ordered list is used - where the list item separators have aria-hidden to be able to ignored by the screen readers. If the last link represents the current route, aria-current is added with "page" as the value.

+
Screen Reader
+

+ Breadcrumb uses the nav element and since any attribute is passed to the root implicitly aria-labelledby or aria-label can be used to describe the component. Inside an ordered list is used where the + list item separators have aria-hidden to be able to ignored by the screen readers. If the last link represents the current route, aria-current is added with "page" as the value. +

-
Keyboard Support
-

No special keyboard interaction is needed, all menuitems are focusable based on the page tab sequence.

-
+
Keyboard Support
+

No special keyboard interaction is needed, all menuitems are focusable based on the page tab sequence.

+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'BreadCrumbDemo', sources: sources }) - } + {useLiveEditorTabs({ name: 'BreadCrumbDemo', sources: sources })} - ) -}) + ); +}); export default BreadCrumbDoc; diff --git a/components/doc/button/index.js b/components/doc/button/index.js index 35c19d1d74..1106d61b91 100644 --- a/components/doc/button/index.js +++ b/components/doc/button/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const ButtonDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -205,7 +204,7 @@ export class ButtonDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -394,7 +393,7 @@ const ButtonDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -583,7 +582,7 @@ const ButtonDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -774,8 +773,8 @@ const ButtonDemo = () => { ) } ` - } } + }; const extFiles = { 'demo/ButtonDemo.css': { @@ -939,70 +938,75 @@ const ButtonDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { Button } from 'primereact/button'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started

Button is created using the Button element.

- -{` + + {`
@@ -1104,7 +1108,9 @@ import { Button } from 'primereact/button';
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

@@ -1131,12 +1137,14 @@ import { Button } from 'primereact/button';
Accessibility
- -
Screen Reader
-

Button component renders a native button element that implicitly includes any passed prop. Text to describe the button is defined with the aria-label prop, if not present label prop is used as the value. If the button - is icon only or custom templating is used, it is recommended to use aria-label so that screen readers would be able to read the element properly.

- -{` + +
Screen Reader
+

+ Button component renders a native button element that implicitly includes any passed prop. Text to describe the button is defined with the aria-label prop, if not present label prop is used as the value. If + the button is icon only or custom templating is used, it is recommended to use aria-label so that screen readers would be able to read the element properly. +

+ + {` `} - -
Keyboard Support
-
-
- - - - - - - - - - - - - - - - - - - - -
KeyFunction
tabMoves focus to the button.
enterActivates the button.
spaceActivates the button.
-
- + +
Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the button.
+ enter + Activates the button.
+ space + Activates the button.
+
+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'ButtonDemo', sources: sources, extFiles: extFiles }) - } + {useLiveEditorTabs({ name: 'ButtonDemo', sources: sources, extFiles: extFiles })} - ) -}) + ); +}); export default ButtonDoc; diff --git a/components/doc/calendar/index.js b/components/doc/calendar/index.js index b368ebd6ed..ec24cdb91c 100644 --- a/components/doc/calendar/index.js +++ b/components/doc/calendar/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const CalendarDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -161,7 +160,7 @@ export class CalendarDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -300,7 +299,7 @@ const CalendarDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -439,7 +438,7 @@ const CalendarDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -581,7 +580,7 @@ const CalendarDemo = () => { } ` } - } + }; return (
@@ -603,7 +602,9 @@ import { Calendar } from 'primereact/calendar';
Getting Started
-

Calendar is used a controlled input component with value and onChange properties.

+

+ Calendar is used a controlled input component with value and onChange properties. +

{` @@ -612,7 +613,9 @@ import { Calendar } from 'primereact/calendar';
Popup and Inline
-

Calendar is displayed in a popup by default whereas inline property needs to be enabled for inline mode.

+

+ Calendar is displayed in a popup by default whereas inline property needs to be enabled for inline mode. +

{` @@ -621,9 +624,11 @@ import { Calendar } from 'primereact/calendar';
View Date
-

viewDate defines the date whose month and year are used to display the calendar. By default calendar uses value to render the view and falls back to today's date when value is not defined. In case you'd like - to display a different month/year use viewDate. The usage of this property can either be controlled or uncontrolled. In controlled mode, onViewDateChange is required to manage the viewDate whereas in - uncontrolled mode, viewDate is used only once in initial rendering and ignored in updates. If you'd like to change the displayed month/year programmatically, use the onViewDateChange in controlled mode.

+

+ viewDate defines the date whose month and year are used to display the calendar. By default calendar uses value to render the view and falls back to today's date when value is not defined. In case you'd like to display + a different month/year use viewDate. The usage of this property can either be controlled or uncontrolled. In controlled mode, onViewDateChange is required to manage the viewDate whereas in uncontrolled mode, + viewDate is used only once in initial rendering and ignored in updates. If you'd like to change the displayed month/year programmatically, use the onViewDateChange in controlled mode. +

{` setDate(e.value)} viewDate={viewDate} onViewDateChange={(e) => setViewDate(e.value)}> @@ -631,9 +636,11 @@ import { Calendar } from 'primereact/calendar';
Selection Mode
-

Calendar offers "single" (default), "multiple" and "range" selection types controlled via the selectionMode property. In single, mode the bound value should be an array whereas in multiple - case an array is required. Third alternative is the range mode that allows selecting a range based on an array of two values where first value is the start date and second value - is the end date. Note: Time picker is supported in range mode but not in multiple mode.

+

+ Calendar offers "single" (default), "multiple" and "range" selection types controlled via the selectionMode property. In single, mode the bound value should be an array whereas in multiple case an array is required. + Third alternative is the range mode that allows selecting a range based on an array of two values where first value is the start date and second value is the end date. Note: Time picker is supported in range + mode but not in multiple mode. +

{` setDates(e.value)}> @@ -641,7 +648,9 @@ import { Calendar } from 'primereact/calendar';
DateFormat
-

Default date format is "mm/dd/yy" which can be customized using the dateFormat property.

+

+ Default date format is "mm/dd/yy" which can be customized using the dateFormat property. +

{` @@ -671,11 +680,15 @@ import { Calendar } from 'primereact/calendar';
Locale
-

Translations for the calendar are defined with the Locale API.

+

+ Translations for the calendar are defined with the Locale API. +

Time
-

TimePicker is enabled with showTime property and hourFormat is used to select the 24 (default) or 12 hour mode. Optionally enabling timeOnly - displays a calendare with time controls only.

+

+ TimePicker is enabled with showTime property and hourFormat is used to select the 24 (default) or 12 hour mode. Optionally enabling timeOnly + displays a calendare with time controls only. +

{` @@ -686,7 +699,9 @@ import { Calendar } from 'primereact/calendar';
Date Restriction
-

To disable entering dates manually, set readOnlyInput to true and to restrict selectable date ranges use minDate and maxDate options.

+

+ To disable entering dates manually, set readOnlyInput to true and to restrict selectable date ranges use minDate and maxDate options. +

{` @@ -695,8 +710,10 @@ import { Calendar } from 'primereact/calendar';
Disable specific dates and/or days
-

Specific dates or days can be disabled as well, in this case set readOnlyInput to true and to restrict selectable dates use disabledDates and/or disabledDays options. disabledDates - property should be an array of dates and disabledDays should be an array of disabled weekdays.

+

+ Specific dates or days can be disabled as well, in this case set readOnlyInput to true and to restrict selectable dates use disabledDates and/or disabledDays options. disabledDates + property should be an array of dates and disabledDays should be an array of disabled weekdays. +

{` @@ -705,7 +722,9 @@ import { Calendar } from 'primereact/calendar';
Button Bar
-

Button bar displays today and clear buttons and activated using the showButtonBar property.

+

+ Button bar displays today and clear buttons and activated using the showButtonBar property. +

{` setDate(e.value)} showButtonBar> @@ -713,7 +732,9 @@ import { Calendar } from 'primereact/calendar';
Multiple Months
-

Displaying multiple months is enabled by setting numberOfMonths property to a value greater than 1.

+

+ Displaying multiple months is enabled by setting numberOfMonths property to a value greater than 1. +

{` setDate(e.value)} numberOfMonths={3}> @@ -721,8 +742,10 @@ import { Calendar } from 'primereact/calendar';
Date Template
-

Date cell contents can be templated using the dateTemplate property that returns the content of a cell. This is a handy feature to highlight specific dates. Note that the - variable passed to the template is not a date instance but a metadata object to represent a Date with "day", "month", "year", "otherMonth", "today" and "selectable" properties to represent the date. Example below changes the styling of dates between 10 and 15.

+

+ Date cell contents can be templated using the dateTemplate property that returns the content of a cell. This is a handy feature to highlight specific dates. Note that the variable passed to the template is not a date + instance but a metadata object to represent a Date with "day", "month", "year", "otherMonth", "today" and "selectable" properties to represent the date. Example below changes the styling of dates between 10 and 15. +

{` @@ -746,7 +769,9 @@ dateTemplate(date) {
Header and Footer
-

The headerTemplate and footerTemplate properties are available to place custom content at these sections.

+

+ The headerTemplate and footerTemplate properties are available to place custom content at these sections. +

{` setDate(e.value)} headerTemplate={() =>
); -}) +}); export default CalendarDoc; diff --git a/components/doc/captcha/index.js b/components/doc/captcha/index.js index 48cd7b4dbe..80e2b45b7b 100644 --- a/components/doc/captcha/index.js +++ b/components/doc/captcha/index.js @@ -4,10 +4,9 @@ import { useLiveEditorTabs } from '../common/liveeditor'; import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; -const CaptchaDoc = memo(() => { - +const CaptchaDoc = memo(() => { const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -39,7 +38,7 @@ export class CaptchaDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useRef } from 'react'; @@ -65,7 +64,7 @@ const CaptchaDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useRef } from 'react'; @@ -91,7 +90,7 @@ const CaptchaDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -121,52 +120,53 @@ const CaptchaDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { Captcha } from 'primereact/captcha'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started

Captcha is used with a siteKey and a callback to verify the response.

- -{` + + {` `} - +
Verification
-

In order to ensure if a response token is valid, verification against recaptcha api needs to be done at backend. Read more at - official documentation.

- -{` +

+ In order to ensure if a response token is valid, verification against recaptcha api needs to be done at backend. Read more at official documentation. +

+ + {` const showResponse = (response) => { //call to a backend to verify against recaptcha with private key } `} - +

In addition, include the captcha widget resource to your page.

- -{` + + {` `} - +
Properties
@@ -278,19 +278,23 @@ const showResponse = (response) => {
Accessibility
-

Refer to the Recaptcha Accessibility documentation for more information.

+

+ Refer to the{' '} + + Recaptcha Accessibility + {' '} + documentation for more information. +

Dependencies

Google Recaptcha V2

- { - useLiveEditorTabs({ name: 'CaptchaDemo', sources: sources }) - } + {useLiveEditorTabs({ name: 'CaptchaDemo', sources: sources })}
- ) -}) + ); +}); export default CaptchaDoc; diff --git a/components/doc/card/index.js b/components/doc/card/index.js index 8f5653bfcd..4e42689d32 100644 --- a/components/doc/card/index.js +++ b/components/doc/card/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const CardDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -45,7 +44,7 @@ export class CardDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React from 'react'; @@ -80,7 +79,7 @@ const CardDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React from 'react'; @@ -115,7 +114,7 @@ const CardDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -153,52 +152,54 @@ const CardDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { Card } from 'primereact/card'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started

Card is used as a container.

- -{` + + {` Content `} - +
Title
-

Title text of the card is provided using the title property whereas subTitle property is available for additional information about the card. Both of these properties accept JSX as well.

- -{` +

+ Title text of the card is provided using the title property whereas subTitle property is available for additional information about the card. Both of these properties accept JSX as well. +

+ + {` Content `} - +
Header and Footer

Header and Footer sections are defined using the properties of the same name.

- -{` + + {` const header = Card; const footer =
- ) -}) + ); +}); export default CascadeSelectDoc; diff --git a/components/doc/chart/index.js b/components/doc/chart/index.js index 31557d3db7..3b0c84ee8e 100644 --- a/components/doc/chart/index.js +++ b/components/doc/chart/index.js @@ -3,48 +3,53 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const ChartDoc = () => { - return (
Import via Module
- -{` + + {` import { Chart } from 'primereact/chart'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

Chart component is a wrapper around on Chart.js 3.3.2+ so chart.js needs to be included in your project. - For a complete documentation and samples please refer to the chart.js website.

+

+ Chart component is a wrapper around on Chart.js 3.3.2+ so chart.js needs to be included in your project. For a complete documentation and samples please refer to the{' '} + chart.js website. +

- -{` + + {` npm install chart.js `} - +
Chart Types
-

Chart type is defined using the type property. Currently there are 6 options available; "pie", "doughtnut", "line", "bar", "radar" and "polarArea".

+

+ Chart type is defined using the type property. Currently there are 6 options available; "pie", "doughtnut", "line", "bar", "radar" and "polarArea". +

Data
-

Data of a chart is provided using a binding to the data property, each type has its own format of data. Here is an example of a line chart.

+

+ Data of a chart is provided using a binding to the data property, each type has its own format of data. Here is an example of a line chart. +

- -{` + + {` `} - + - -{` + + {` const data = { labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], datasets: [ @@ -63,20 +68,22 @@ const data = { ] }; `} - +
Options
-

While a series can be customized per dataset, general chart options are defined with options property. - Example below adds a title and customizes the legend position of the chart. For all available options refer to the charts.js documentation.

+

+ While a series can be customized per dataset, general chart options are defined with options property. Example below adds a title and customizes the legend position of the chart. For all available options refer to the charts.js + documentation. +

- -{` + + {` `} - + - -{` + + {` const options = { plugins: { title: { @@ -92,7 +99,7 @@ const options = { }; } `} - +
Properties
@@ -186,22 +193,22 @@ const options = {
Accessibility
-

Chart components internally use canvas element, refer to the Chart.js accessibility guide for more information. The canvas element can be customized - with canvasProps property to define aria roles and properties, in addition any content inside the component is directly passed as a child of the canvas to be able to - provide fallback content like a table.

- -{` +

+ Chart components internally use canvas element, refer to the Chart.js accessibility guide for more information. The canvas element can be customized with canvasProps property to define aria roles and + properties, in addition any content inside the component is directly passed as a child of the canvas to be able to provide fallback content like a table. +

+ + {` `} - - +
- ) -} + ); +}; export default ChartDoc; diff --git a/components/doc/checkbox/index.js b/components/doc/checkbox/index.js index 44abffd414..0d9e964c88 100644 --- a/components/doc/checkbox/index.js +++ b/components/doc/checkbox/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const CheckboxDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -109,7 +108,7 @@ export class CheckboxDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -197,7 +196,7 @@ const CheckboxDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -285,7 +284,7 @@ const CheckboxDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` `, @@ -375,38 +374,40 @@ const CheckboxDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { Checkbox } from 'primereact/checkbox'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

Checkbox is used as a controlled input with checked and onChange properties.

- -{` +

+ Checkbox is used as a controlled input with checked and onChange properties. +

+ + {` setChecked(e.checked)} checked={checked}> `} - +
Multiple Values

Multiple checkboxes can be grouped using a list of values.

- -{` + + {`
@@ -420,10 +421,10 @@ import { Checkbox } from 'primereact/checkbox';
`} -
+
- -{` + + {` const [cities, setCities] = useState([]); const onCityChange = (e) => { @@ -436,7 +437,7 @@ const onCityChange = (e) => { setCities(selectedCities); } `} - +
Properties

Any valid attribute is passed to the root element implicitly, extended properties are as follows;

@@ -564,9 +565,11 @@ const onCityChange = (e) => { onChange - event.originalEvent: Original event
- event.value: Value of the checkbox
- event.checked: Checked state as a boolean. + + event.originalEvent: Original event
+ event.value: Value of the checkbox
+ event.checked: Checked state as a boolean. + Callback to invoke on value change @@ -584,7 +587,9 @@ const onCityChange = (e) => {
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

@@ -615,11 +620,14 @@ const onCityChange = (e) => {
Accessibility
- -
Screen Reader
-

Checkbox component uses a hidden native checkbox element internally that is only visible to screen readers. Value to describe the component can either be provided via label tag combined with inputId prop or using aria-labelledby, aria-label props.

- -{` + +
Screen Reader
+

+ Checkbox component uses a hidden native checkbox element internally that is only visible to screen readers. Value to describe the component can either be provided via label tag combined with inputId prop or + using aria-labelledby, aria-label props. +

+ + {` @@ -628,39 +636,41 @@ const onCityChange = (e) => { `} - -
Keyboard Support
-
-
- - - - - - - - - - - - - - - - -
KeyFunction
tabMoves focus to the checkbox.
spaceToggles the checked state.
-
- + +
Keyboard Support
+
+ + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the checkbox.
+ space + Toggles the checked state.
+
+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'CheckboxDemo', sources: sources }) - } + {useLiveEditorTabs({ name: 'CheckboxDemo', sources: sources })}
- ) -}) + ); +}); export default CheckboxDoc; diff --git a/components/doc/chip/index.js b/components/doc/chip/index.js index 1e4571b4af..95042be9b3 100644 --- a/components/doc/chip/index.js +++ b/components/doc/chip/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const ChipDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -59,7 +58,7 @@ export class ChipDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React from 'react'; @@ -107,7 +106,7 @@ const ChipDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React from 'react'; @@ -155,7 +154,7 @@ const ChipDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -207,7 +206,7 @@ const ChipDemo = () => { } ` } - } + }; const extFiles = { 'demo/ChipDemo.css': { content: ` @@ -217,56 +216,60 @@ const ChipDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { Chip } from 'primereact/chip'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started

Chip can display labels, icons and images.

- -{` + + {` `} - +
Removable
-

Setting removable property displays an icon to close the chip, the optional onRemove - event is available to get notified when a chip is hidden.

- -{` +

+ Setting removable property displays an icon to close the chip, the optional onRemove + event is available to get notified when a chip is hidden. +

+ + {` `} - +
Templating
-

Content can easily be customized with the template property instead of using the built-in modes.

+

+ Content can easily be customized with the template property instead of using the built-in modes. +

- -{` + + {` Content} /> Content} /> `} - +
Properties
@@ -364,7 +367,9 @@ import { Chip } from 'primereact/chip';
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

@@ -395,40 +400,42 @@ import { Chip } from 'primereact/chip';
Accessibility
- -
Screen Reader
-

Chip uses the label property as the default aria-label, since any attribute is passed to the root element aria-labelledby or aria-label can be used to override the default behavior. - Removable chips have a tabIndex and focusable with the tab key.

- -
Keyboard Support
-
-
- - - - - - - - - - - - -
KeyFunction
backspaceHides removable.
-
- + +
Screen Reader
+

+ Chip uses the label property as the default aria-label, since any attribute is passed to the root element aria-labelledby or aria-label can be used to override the default behavior. Removable + chips have a tabIndex and focusable with the tab key. +

+ +
Keyboard Support
+
+ + + + + + + + + + + + + +
KeyFunction
+ backspace + Hides removable.
+
+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'ChipDemo', sources: sources, extFiles: extFiles }) - } + {useLiveEditorTabs({ name: 'ChipDemo', sources: sources, extFiles: extFiles })}
- ) -}) + ); +}); export default ChipDoc; diff --git a/components/doc/chips/index.js b/components/doc/chips/index.js index 893fe9aeae..5bbee6bcc7 100644 --- a/components/doc/chips/index.js +++ b/components/doc/chips/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; export const ChipsDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -53,7 +52,7 @@ export class ChipsDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -90,7 +89,7 @@ const ChipsDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -127,7 +126,7 @@ const ChipsDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -167,45 +166,49 @@ const ChipsDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { Chips } from 'primereact/chips'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

Chips requires an array as its value and onChange callback to update the model.

+

+ Chips requires an array as its value and onChange callback to update the model. +

- -{` + + {` setValue(e.value)}> `} - +
Custom Content
-

A chip is customized using itemTemplate function where value is passed to return JSX.

- -{` +

+ A chip is customized using itemTemplate function where value is passed to return JSX. +

+ + {` setValue(e.value)} itemTemplate={customChip}> `} - - -{` + + + {` customChip(item) { return (
@@ -216,9 +219,11 @@ customChip(item) { } `} - +
KeyFilter
-

Chips has built-in key filtering support to block certain keys, refer to keyfilter page for more information.

+

+ Chips has built-in key filtering support to block certain keys, refer to keyfilter page for more information. +

Properties
@@ -363,20 +368,26 @@ customChip(item) { onChange - originalEvent: Browser event
- value: New value of the component + + originalEvent: Browser event
+ value: New value of the component + Callback to invoke when a chip is added or removed. onAdd - originalEvent: Browser event
- value: Added item value + + originalEvent: Browser event
+ value: Added item value + Callback to invoke when a chip is added. Return 'false' to prevent the item from being added. onRemove - originalEvent: Browser event
- value: Removed item value + + originalEvent: Browser event
+ value: Removed item value + Callback to invoke when a chip is removed. @@ -399,7 +410,9 @@ customChip(item) {
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

@@ -434,12 +447,14 @@ customChip(item) {
Accessibility
- -
Screen Reader
-

Value to describe the component can either be provided via label tag combined with inputId prop or using aria-labelledby, aria-label props. - Chip list uses listbox role with aria-orientation set to horizontal whereas each chip has the option role with aria-label set to the label of the chip.

- -{` + +
Screen Reader
+

+ Value to describe the component can either be provided via label tag combined with inputId prop or using aria-labelledby, aria-label props. Chip list uses listbox role with{' '} + aria-orientation set to horizontal whereas each chip has the option role with aria-label set to the label of the chip. +

+ + {` @@ -448,73 +463,85 @@ customChip(item) { `} - -
Input Field Keyboard Support
-
-
- - - - - - - - - - - - - - - - - - - - - - - - -
KeyFunction
tabMoves focus to the input element
enterAdds a new chips using the input field value.
backspaceDeletes the previous chip if the input field is empty.
left arrowMoves focus to the previous chip if available and input field is empty.
-
- -
Chip Keyboard Support
-
- - - - - - - - - - - - - - - - - - - - - -
KeyFunction
left arrowMoves focus to the previous chip if available.
right arrowMoves focus to the next chip, if there is none then input field receives the focus.
backspaceDeletes the chips and adds focus to the input field.
-
- + +
Input Field Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the input element
+ enter + Adds a new chips using the input field value.
+ backspace + Deletes the previous chip if the input field is empty.
+ left arrow + Moves focus to the previous chip if available and input field is empty.
+
+ +
Chip Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ left arrow + Moves focus to the previous chip if available.
+ right arrow + Moves focus to the next chip, if there is none then input field receives the focus.
+ backspace + Deletes the chips and adds focus to the input field.
+
+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'ChipsDemo', sources: sources }) - } + {useLiveEditorTabs({ name: 'ChipsDemo', sources: sources })}
); -}) +}); export default ChipsDoc; diff --git a/components/doc/colorpicker/index.js b/components/doc/colorpicker/index.js index 331cd6a1ba..a957713373 100644 --- a/components/doc/colorpicker/index.js +++ b/components/doc/colorpicker/index.js @@ -5,9 +5,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const ColorPickerDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -39,7 +38,7 @@ export class ColorPickerDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -63,7 +62,7 @@ const ColorPickerDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -87,7 +86,7 @@ const ColorPickerDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -113,11 +112,11 @@ const ColorPickerDemo = () => { ) } ` - } } + }; - const extFiles = { - 'index.css': ` + const extFiles = { + 'index.css': ` .p-colorpicker-panel .p-colorpicker-hue { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAACWCAIAAAC3uvTNAAAA7ElEQVRYw+2YUQqDQAxEh9GWuqV6Be9/JT88RN0VRUuv0ElBwhKY3yF5m90kLKd+mF/975r6geNyjm9Fy0kgqTJ6nqoIdGKczjmPJU5tZxA8wWPL7YOHKhZAlcmTAVVcxSCrMbfgqY/H6JEOoASPe56tgSrqLR7U2zWojwWjJ3jq47HEiZoGTwJxP1RRXw8y9RZfCMhbhTHOVTxXnUFtPJ5rGjzu35y2KfKGQxWT2K4TQL1d2zz6KAH1kRU8wfOXx+37qY3Hct+aDaqot2u7R/wMuDS3qnj0z0HqK4X/+kRNHdfUwFP2Nisqe/sFuUZiVjC9HCUAAAAASUVORK5CYII=) } @@ -125,48 +124,50 @@ const ColorPickerDemo = () => { background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAYAAAA8AXHiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHotAACAlQAA+NcAAIhSAABxRQAA6mYAADkHAAAh+QMnhVYAACf5SURBVHja7H3LjuRIkqQaJ+e0wB72T/s7+w/qOKduoLBd3ZVZmeEP0z0UjSUUiqqpuUf1AoMJIBDuTjrdwyhUERVVMzZ3/y8z+99m9jAz33/7/hs97vb7zzv7qff54n7HNncv7Vc9nnjuf/Ixsv2i7y/328eii/EMP9vd5fjvr3cc4/Fa793dvffe+/P57Pf73b99+9b/8pe/9C+99/9jZv9rB8Dsn3kWT9RsQCIgzE7Us3r8le+Ig/fqMRKAp8cAEPAY4/Gy93l2cY393P0J+/nYBtvH8+e+rfXe246cBr/+eDz68/m0+/3uHx8f9v37d/v69av9/PPP/tNPP9lf//pX+9J7f+ygenzCSfPZgLxz0l48oeEvXKVv7fPisU4/v28yM7O2/5q7t+A5P3Y8hvq772/u3nYQjdePfXbgbDuYxmv+fD7t+Xza4/Gwx+Ph9/vdbreb3W43//79u/3666/2z3/+0/72t7/5Tz/9ZN++fbMv8A+Vfmj/ZmZtf63hgLXWVo7z0ueOgQ0enwY9+MH9Kp99+Vw8wcG2bQc+7+cF8BgcC4957EevNwDRRgByAFYbQILIdIDI3e35fFrvvY2/j8ejPR6P7X6/++1284+Pj/bjxw/79u1b+/XXX9s//vGP9ve//91+/vnn9ng82pfe+8qJ5YH1FeAEJ28KEPpsg5NyArEA3+lEtdaOE8MXQvBZDBKbAYv3w+PhNnhsapu7W2tt671ba63vf1vvPQQWRaUjUu2/B9D2c34C0YhSO5B8j1B9/9uez2e73++2/247BfrXr1/tX//6l/3yyy/2yy+/+NevX+35fNoUWDAwKZCKESYEZyGCpSdeAEnRTRW4YSQKgJQBy+HxRkHUOZrtwEGAMICOY/wRhE60NsDTB7DGMZHuzMx778Zgcnd7PB4DWPZ8Pn0A6na79dvtZvf7fbvf7/bbb78dwPr111/t69ev/ttvv1nvfQqs8Y/5Im2VIluR3sag+uQ7toDi5PcQ39FEVLqALgNW8HgDJPWE0i5gIp00ANSZ0sxs0BkCyDBCjef7376/NgT51ns/IhYCCzXV/X63j48P//HjR//4+Gj3+719+/bNxu/379/9drv9DqwoUlQBpehnIk6jSOSr+ir4jnysCCDZ+46T1FrDk+2tNcOLESN6AKzTRwFQZsByEteK7hrS3R6ZBngaRizQUcfj5/PZdh01QDWe266p2uPxsPv93m632/i179+/t99++619fHwMrdV+/PjRbrebPR6PZmZaY1WFNdFkKwCqLYjriI48SCAqkU5RldJEXtBLBhGpR8AiACGNdd4v0EuH+GZggd7aRJTqCKRBhyN6YYQaVLhrqra/tokscEQs+/j4sG/fvg0hbz9+/LDb7eaPx8Pc/UKFHlz1L9GkONk+iXQZ9UnwKKApQNIxWyGVtxkV9t7bHsGOyBYAq+3jzGDCCHWIa6C+Jva9ZHs7tWEE25D6CEwDaObu2wDW8/n0XVPZ4/FAkLUBKgTWANK3b9/6x8fHtuuwASy/UOEMT8paSFJzn2WEETjpODK4Bd6PR1GVhT1mZgIUjhdYkt35hOKG3cD7oDVw8pYYdOOYw7AkXXWiwmEbDDpES2Hoqp3ybKfAE/09n8+2R6p2v9/brrdOVIiPPz4+2sfHhz0ej+3xePQRGTliTb2fLErR1e0FjeQB2CLqi7Ix3keefBF5HPZzYQd4JNCVfzRokSmTQDYcbtZU214iMQBiI5G+Daug//5zimSwDS2Ek0AHj2oYn0dk6r0fgn3XVna/3/1+v/fn87kNU3QI+X2bff/+vd/vd3s8HkekvGisiVGYgSoDVEsiT2iyigzsopeQgnbvx/Gqx+PTtgiATQBGelCUwTUGDBxzUxkd6qMByID6DEouaG6iN9VRoO9AQyBhJriBV3VQ4W6EbgJYdr/f++Px2G63G2aJvgNxZJI+wH0CFmc8k2wrjXJIQXBCj9d3s/L0VgDJBcScKJzMIG0BuNJ5FKkuEXCAqxClsowuMi3VYxbiJ62EYAIgDVrrHLH2KIXaagBpRCnctiGwBqD2yLXtUWgAaQAMjdIDgB8fHw4R96yxXgBV5rAfJ1fQravPGumyos8MaALUlwwPwYRCXgGNdZWyDlico/YR9oADAE7uusr20DkHf8r2E8flmAFMh+cbRqjn83lsez6f296NcESpkQkOnXS/3we42g6utkerfr/ffddhbQflQaPj89y9lahwxesKKC0T4XiVSwOTNJLyiDLt1DIdJQS82rYSlSLfaRNU2MAaQOd9i7K9AUb0o0a0IothwzLN8/kc20YmeGis/bUTre1Z4TYi1g4wu91uDr6X7zRruw5rkgoDEKlolUWKCCAVoEURxZSQJ8CYMk5VticikQEFSkc9K/4yeJSOQ0obQh6jFdoSqLcITJ0tBQTT0FXjdbQUIAvsz+ezuXvbW1+s9953CtzAbrDb7dZHlENb4na79cfjsaFFMT5jnI+S3VDcJwJPRG2evB+BEkU4BTKPaJIozIPOAUWBzlEIvxcBS+2LOglFuTM4oeRy2m8/YRdLAbRVH71S6LSzdwUdC0iPB609Hg9398NuGIVnduL3bUcHBEdPM+vTiFWNYBOgWGYh0L6H97MQiZTx6YHYNnDLEUwciYztAlWjE/ttlME5ZXlHJBrWA9b5JhGLHfROADuAhNFrWAoAtpHFdXcfAh47Ghr0YA09tqGRumutkwE7LA4z2xBYUQmkUqbxLCIJY1JRIeopT7SUKUCojI7KMxYArqExySZn1gfFAAs01sm7wmwPTE9JjQCyEaUYZNu+30AYgqcrd33fZxuFZtZYe4RyyBjb7XbroMl8aCoE6gDr+O5fVIE0A0zv3aGJ7wjp+2tH9rJbB6ayqQb+Az8fINn7jxToOCPzSG8RxTXhtl/cdwCnTwT7MR4ELG6oc5HtObnpp/4poJWTFTGi0XjfSO/JAPVdQw2v6jnApOyGYTOAI98AiIdbPxx4LFbvugw7Kw5cfBGV+ik1BtX6qB32orH4GIKO0ZJQ1MmRT1Irl0w4SkJDnZHmMWETXLwxtgYIdJjhdUGF3IhnAJgjGRj6CemPxLtDG8ygvw6txdtOhaOp73gO9oPt4NqGyN8j0jaAOOgSW5VHZOMCOFPhTF8p51s994QOmfqUPvJApB/utqBJRX0bTBy4RC/x/GRaMkgmlsJF3KOFEBidbG4iNSItbnDS0EbAks62U1pD8xTAZgAutBs6UJ7v+2yot0D0H/qLitqnwvnQsFVgqZpd9FxZES0CUKSjqLxigYnJ2VhEmS6EOReAT811rL8WgLXh8Vg3ofWwA+mSNQLINmExdDBFEWRSvA/AjegzBHvkY8H+p6gEYv6IbFjGuUQsprAqLSYgs4mQtwmNeUCfyvl2bo6j6KLc9YstwPvS+0xYAxcdFbjsjaLVoHjpvKPdgJoKAMcaC2fXODbwPZ9PN7OGzvjYd4js4aADiNpuJRwZ6PCp0LLgRIUK7meNNfOZEjBkJRaOVJdSSkSTIqM7rgZBca5qjMpZh6Jw5+iV1fJWtqFews8D7WSsozgqiVrhAEDn/SBadSjpDCAeVEjUeNo2DFLY5rhtHHOPdCNK+U6XGwD/bDfMIlY1WhE4PHHNI4A1dYxAU4XHUIYoHwMjmSpCZ6BT9Dd6pLDTYUxcIJpE6uukqzpMdjhto8cdvKpOvesH3cF+h/OOtIglHnDtj5LOHgEdmgZP+yEFAtuUqLAFnQtyP8iyuMB8WBJgR1yyxgGAkakFwLlENkFpRkLc4AQbgc0n+51oblAOfO4lewQKc4peWFh2ENzOzXy4DaIWuutO7cdD6xx0ho+HVTDEOLxnFKbZUjg04E6Bg2o9MIevdgObo4UIFWmrBuhN9QtrGQQI+EPsVXUVEVkHBd7UpeeKIo8JbYXFYRP2ggmLAT2ok8M+ohmA01QkwuiFpihEqUYRa2Mq3CMNUmFjWtyp7JQtDsCOrHAHU8dmweGZjYwSorSdSjpF6otqgCXARTQ5iUycBQ7dwVkh7yd9LAYaG6WTDHD6GgOL/KqTjUBA6kpjsa1AuoofH5kgPwbnHUE3PCoGXaPCNb5/dDQ4jLFjQpSJ9xmwLAFVn4AtAowFYPGkM8ECC8Gw15wzFirhOLnkTdT4PAIbFIgjMDkbqUizkN1dtou+9Q7PO2WGG7bGoI8VAM0hCrGYd0oAnH0rBBOiKrUbkozPFwA3jWbZZwsgeTKBIXL2I+q1RNzPgHbyvYbmEdmeilJOFsXIFk009xnPA6TuBnyM2grfh1rqpLmoHnn6HlBQvui28b7xOWKisIxYF7tAgKklloGanOBFoLRk1ktEY5445JZkf1GdEBfQkBYD1sXIp7pQoXjM2R33sOO+LcoKdzBjScfJee9QG+SscPRnjcenyIbvo3LQhiCmHvsOLTMW2g0TuptFuAs4lI5SACRwc8lF+VZNUaYQ9TMtZYGQb0Hr8Ba0w1QfH5po2ApCsGMJp2OGBuDBiIVA29DvejwekgrBQkCN5ZCVnqgOaRLXi4DEb5yDlApLYCIxHwnxVyjPgga8GXg8oEDuS3dM8xNKPOk9thCGTqJJppbQX4Pow/sZ2wtAPyb621FjOTb3DbpCehs2whhLbPaDx2pSa4eGANSXijFi8f4GmEyUY6Jow3pHinoB1Ma1uARIDF6mxVeimQVCHP0tg8LyicbAuzpFL9jviF7Q/tKhsH0yQckQ7QAiJyo8KA0jFACpg9vuoiLg6MqTIXpcV6tUaNEMYUVbKu2f7RcBSWR/GTVeQJFto8euwMRZ57hyx7iRWMcGvosgB7P40GVDXOMx0I8S1Gg4E4eywE1RIWaFBJDDx+LskUE2to3pZSozBJDNs8IJpZ0a/9TJ3534sV9pG9sNTE0U9bB/yYVRe9nGrcojonDNUVkUUTSb6SoCz0Ws4zGSbQg6zgLlNnTY99c6l35GZCI6RN13lG6gG3YjmwGXw6xHrGx71uxHK6ZY5G5Tx4EFUUxFPVetLcEyQKps48JB5++EeuJSHcBtrLfAjmg41ii8iU6noKOuBuPno8MBvC+MbidLAnSd4TR/ZWUgaOm8vq6xotphdKJFS0oTGaAFYLKgCM0n10UHQ0aLbFq66HDwaMlF9Rqk2a40VqCrsCW57ye0K/CwxsIeLKKtC90hLY7C86DXPZrhhAvH/i+0Mjh6EQ2ySeqr4l3ZCGo61ax3KrMfPNFHHmgsfu+lyMxLA0WinCjPlaNOkQdLMZfIQ89PugomWaDzPhz1LTipJ10FNgQ+b1w7xONNjn8CJOspFvNUysEVoXONNel8UK3HvmAtmABGRrGtCC7V0WDsSzHdcQE9mFjBFoKiTAvsBiedhfbCKVoCHbH9cBLwAU3iMRCIbCOw/jqKyWhhiPmQp+yXHPe8VhgBYCWyiQxy9tcUpTGNFo7VAi2XUiE77qp7Qbjrp3mHSGdAb5sAlQQFWgoYXiArRKrifixTVoTICtFuONEpRCaHibK8aK7D3Mlxg4JtSbwHLTGhXprNoIkiV9BLlQEwshRc1ASjKV3Sn1JCP8r8gomopuwGKuEgWNhtv1Am05aIRsP34udHBgfgQQCdgKkoEj0tBJT9cVMEEzdPuFLhrDwza/KLAEZzDUfjXybW8X1oSRj3rcMqNU10MKi7MrRoHiF3JYCzfsr88H1oVSC10usnpx7pMrMb4DV23Q93HVeiYRrjKfmDEqF33Uk3Oq0WqHrcj4xY0KCmwqh9Zva3oNOauEOCV8Q7ao/EL1MWA9Of6njgRj4X7cdGRWjpwuNECIpUHkS+jQDNrTKYKXJDIEYsIz8Ko9RGbcUYlRymxWON0Fig49pb4pYpuEqhpsKqYRqUbFINlYh8SXcBeCzyoQJH3YLGPksoMivjXPQW7XeiuERHZRHqoEVw0Lnxj+2Fk/OO1IeuOWZ36HGx5hL7bwxAPK0DjO8AK1vJxSagU4150eKwFpRvLlYA2xFKZwn91YLPOhWTsYwzsxTgdiJhNIs0G0QJg5PEpRvOItEcPYEJdJPNwMMrKw8A9T/C0waAOmmeEcna7+WXksaKIs4sml0AtmgjqC4GGcnUcRSlUshW7noDB91EZuk0+cEFxbONEIl+ZyCJ/YymrV9KQ+TOG82W9ijikuNvgcbEi+k/MPJyVeEljVWIYiH4koJxtmZV1sulsj3LqFFEM349ctRN0aJ6zuBlW6FChaKDAd9zoSRhYLLxqaIXZ5ONi9M4NY1tDl5c1/Jb6r0NrOo2bpO53CcmAODqtkukigCnthGNZVEJqaHT+0KNhdqJhbly14nqTpYFLfxh7HFRDfGizSjCskiX20TUisCV2w3FTFD2ZbGPla02o3rXZ9FsITNUjX6RQGeLIRL6FkyYcCXsxW1LVCZ4cegJOMYOvIq+2Iajoi5aHXa+odPlQsXvwKsfTvR3q4p3dsSz5j++8SJ/KZt0Mlh0jCgaTWgwms4VaQwP9mui/yqNRASyTLybcNeV3trIGe9KwON+ogUGC9enY1BN8RSFqIpwMUrtfOfY17LCpI041EbBzGSV0cmisOipsgJFqrZi9X+kuinTYgJA8jhMd7iUJMyQOQGVTzIDieyGkz4iUc/Oe4dVbzZBh05FZ4/oTznxEljD5c6iUmQrDGc9obGmoh4CZEzFh8YyC3wsizI3Me39otPIdc78rBBYTBViZo4pK0LNI6RtRgC69E+hpQDH3sR0fKepXXwHi4bgIMA79Iixj4WPOxWjrxqrUjuMSjdqra2kPhjZBvgdwvmEAd15ZoKSpSAb1hD4Qo+5yh4ZmFFEEyCRjjyPI/tg4II3QZenLJPAPsZno2LypXKA27MVHVliKLshKwRPxbuKSgkoZRdnRndCw10ojyOiaitOIl00jT6kPWE/lEDF2eOgrsBuiKyHjagLb9WLJR0T9oOLzPVEjQN8SnO11oab31prDu77MErnGqvappzMPK4CzZXADmwJi6Z8BdrsYpAGNcx3gSXFexVkILw70h2e+KGbRNaIgn0LANRoRcBO+25KN4F+6sQiKFcODyu1G16xHxIDVa1Eo1aJ8cmxs2JytGJfVIy2aA6hinJEd0p/+cwgnbjrJhoDjaZfScCDFJH/B72u5kBmcxPUvAE1sfi0ul8UseQUeBLtbRKFZhNTLZh5YyrDg5MrJ66Kx9Iby05M9lwtYzSJYivg2qA+N8vSkO4syBJNUSG56CzAnZr1Tlnh6Mfax+J4PBr9IKot+VgVSyFccDaqNRZn9yhATgGzAKooWqkZOjh3sAUa5ZLdLYLM1DHIrnBlEzAQry93pNcGqwaeqBZ1GtCcUfXkdFqXqTCYfm6VVWMyAEZrZgWWRhM9QKlrn0U1sbAarzBzWbVPTNBwtSQR2wsq26YSUGQtyP0R5ERxFyqcPVa2h8iYnTLSU8Mle5IV5z2cqJoJ74Du1H6WzGbOKLMUkYIZzp5Qps9Ee0XMs3e1Eqn4GJn7zk2EahtMyjhFupHBcXZKrceZu47UucmI9Q4VfvJfZSuE0Yw0oCXlnFRDrWx7RU+xF5WBh+wG1Dboe3UwP7swQtuMFvE1BAr2YkU/qMHUtjKwVrRWBArVnCeOO41YybZoTXYLANlIY83mH34KsKIINekm5ULxBvTEBucmOhTYYO2Be99QsEcRKrMjXrIbXphqP5soMRXyiZg3RasqokW99up4yj4Q/fIl2syi1mT/6cSKV6IprlHBvmCwOLGpIKDmRXCTXykrnAjyCyWpGdAV0CjjM3hPGKHQkpjMal61Ilql0BzpLdHa0oniD8oTC3Hw1HY+tjJSp1SGnQ404/mwFPx8oy2eMCF11ytUyECyqp8ljhFRYaWmmIl4FxHKkt72ioeljMRNZamRcBelGgWWLTBfsU345C0xILhZT0THxmUdpZlGnRCSNxf2g9Rd7zjvLeppd73YbATIMt0FlDa1FqJIJ+qRlixZxHXFavuyqYwz6Yl3VYxG519M0PDo+yYTPGZlL3nBk9OeUWWJCtMidAYK9cWSfipTglropdPxsZk/MTgtG8hKJlh9raK5YKVlhzIQrliTaS+MKEq8MzU20eqy8RQuFO+RG09rjI5WmRaI95LznkYo3xdPE6CoUKFHi3cosKjOhYjiou/AV3kCqtmV3agzIQNXqxSnDe7uEGilMLsTq7+EoEt0Fy9LEFkNNko6YVY4A9ZouptRGO8HzxtZ/5dUO4lYYRbHa55y8Ve1xwRTuySgKDJmIMzmFWYTYC8aCBaNVYYrg0KKegJPn2Sfl/YZO995TYEQI5W9bDcks3iiKFJp+rPA85rpNBOTMyT1ZdqJVgEMPS7XyyCFES1q3OMEYFbsTioIVun7Clx1NYMZP2cjAW/BxInNzjekr9sNb04Bk6I5ocJSVHKx0GxgP6T/C1JhJGgrmip4LqMIZoUFw3QaibDLAxYekTqKoq3KJi/RS0yOUKUcL1PhZ80trHphKvIks3iiWUItiy4V8LzTUrPw+ibm53G/uSfU52w9FKiQPSZTAl2BhyZHRHXCnAor0+SjSDHRR+E6Ddl0MY5Y1W0ZZfp16e1wichkgZGs5TmkqmSbqwkbLC9YqwoAnjRitE1Eqct71HlJlgNQoG7u/jsVvhOhViOYJ2tofWbEUgD8jIj1KlVSppVGpUm2p7apblZ0wtMoJaZ0WVILtGRq/VljfTKwShpL2As+mZg6O36a7U2cd59NvCj6XS3SWMpVT7LHkOKo5SUCYIOJppca6OwYag4h02miuUIqjIDliRHqlanzZEOEWWHi9l8ilrp5wMTNP9FJkFm2QlaYeWxhVljVbOJ3KSuEC5QjVsggOzi6KMifzldrrSeF6OWI1SbT6ytZoru+l2BGhe0zIpZoRmwTz6tNJhfMjiGn2WfbJkDjyNRmVMhzBFgrCfozmEvITvvJfE1o8o+s0Oc3DLBocY+CeJ/tF3VFmOijT8V61NEgDNCmJmEm8w3D4nIwuZUjVIkKwc2faSk1u4n3a5GjruhOtQ2prJDbygVNloDVBAVeXo8yPdHWosxNTzLElgl2MfO5VP5h2npFyE8ojW/FYolgj3RYKwj2BnP9VGRrQv031Fi4YiECRL0naJHREWumsWbZnOtbyVXc9WxF5iZmgmRWwgWoCb2qmUVRd4NP9JYHzr4pLRY0FFo0z4+zWnH/aY9aeFTHBHZJiHmBPjQwfz6v3Ke+47LGyiJV0CLsSYdpEyvMRCc++tzmwXpbijYnAJveVzoo8zTuREhotWXGaBKxGBRIbU3onsox25giDxNlT5ke9MM3YbC2SdRa0lih2A5626OZzjZZlC1qObaJWPcos0sshmmbdHEGUNgZkfTYN+WiD6AyVRKgZsKedZSzrlLgEZJBaimIXNENBNbtBhfLDlWjmxdX96uUgsS8xjbRZekcxSBCSr00KVaXgTabdDKZDGIqeqpedLXOgud3SruMu6JBoj2nx8t2w2UtiFdn6aw+T2ZYS4DNTlTyOWHr8gs98j6ZNCspTFBatB2bBi9ZZXRRctZo55uKXgzW3Xf8/cXf9VdUoLYMWDNB7QUd5olm8SjqqTbjZJ0IOWs6Wj0mWg9iZZbQqxljYkmE0VNZA5HGUtsYJGSOKpo8ZYEIJlHCacqFh225xsoMUdN3hOeTnE4sLYhxD45XmXoW+VHHohXQWhvdE3oGKmcdmCxkEiYK1QQAszkRsXwCzBZotsu5YC2Fj1U7MtwPqZ+A5fkNAaKsrBK50tVrZms3JAuLyAgQbTO9Zle4hGREw4XJr6WW5yxdp0bJTApEU+V4llKLLq7J3ED+Xkc7DGfe8LOV7IZK94Ja4sjyNbCmvV8RKAmIrThP0YNo5gVwHItf0KSNbCGT2WODe0TPoll2T+pTdiZ0WESFFwolf8wpU22ZnhJF6andICNUEm0yYW/ZdHkFSl7hRZmZ6vssAHC6yFtkJ7ygv0K7wa73f7yARzy+lIjUeWMqBM3UAr01Lib2uKaUKrLDuvMujE6vrOOQTXCd7avmrLlYzJ9S3Wx57xBkQdboonzkgQ2hwDKL0O76lnd8k/aQwuiejyEVqpJWQGkRDVZ/1px3RnoAlnQlwEADhTOdg2wuA4O6430YRZJk4aXF3Cy/eVQKas7qmJJEs1/o8NNYuIp6UbSEJQqixr6WWA2SCmW5xvRdvGS0CGgypEX6otFM53BFP/E+lXmqyNGoU7KtmLaFRU3k8YN9WpDVZced0mTCBsp6uFBxpOdIXzXx2vZqEfpIkyEMZ9nd6R8e97UjUSp77llEi6jHt+xNbyhgtM57Eh0vjXmV8g/eQKE6jS6iyaizZDETHrZKmHTtjX3KcR/foQdO+xoVFhr6mpiXl7YsGy3g7ws3MVflC4+X4bbAT4vuPOHqs5NJIWGPF2dukT8nwOau762YabNwfATItqxDlywEFYk2/r8m0WuLgFWxGUoAFNGsfC8dNTMoygotuZcOR6wCjdmsnvnqJF/qXvWZLlNue0WjTVqUXF1QykIItke9WgbA2krAssLdVhO9ZUJQZ9tkCSiaK8hRrgCeyv2r24y+kszykqREyxREYprXlA/GP5y0IRItj7ZlIFNRifcTrTdaY0WaqkJzE701NUhnJ00lCQEwsruQtaQtR1GiKX0XZcSq3x9Ape6tqDJbaTvw+7m7IehAiNgntCCqVkRQOWhlKpwAa+VWKFlkakmWWB5wC27bG2SIL93Z1ea3zCttq1wkynmPji0incxARWRSkccCZ139fZkKU8c40UcZ3aQDLpz/sLZXAJm6OtOLYWX5gJVtxRM/pdkK3RFlVujfo0SENNccWEkEyoCQvged+eL0MC+K2PTkUEZ5cuOD+YvRhaHc9ugv949faI7oFFN5eZfXzPkOdFgUwdOCd8AW2b4hZVbshupKyZXV/ppK+UUnwZQu+OQVqGsq7JPoMt03atku7hutKJ2uv5pF90CUl6IeZ3wiK6zQYY0KZzbDRD+F1FeJNsWsLdNA4Y2eIkG+AKQl8BSpMFpLtfRX7R9kdDITRCciyvyULvtsYL26nQvXK6DhbC2LSrLSb/mtVyyLhivabEWjTcpIUaG/VTUTue8ntx3/CuB07l6ZAQp7tsysZRortQsyWgw0i7+wXxrBJkapnASQNPXNXn/17+zzKxNIZEeE0l7B9LqNvtcmXHd83zaZO5h1Pcw1lriyohM9i0rT6MXiepH+lujzE+julUXnymAU9cyZxOA+9EaNchcao6zPIvqLsmwKEKi//iOkwkRHVeiwqrlUCC6DJaHLyrpdHvRNyWiyApwsSnv9tjBLEVFNfXshqjrNxpK0V9Bfsd1QHUhlAUyc33DwTawFUb3iA41Volo66ThnsXxh8ISRzC2HDojliykzgCsXjZr8gdO2ZvT6VqPf7MQWoluoubIu0iwardb4qE1aDlRB21T2LS/tZGICb9Jq3YQf5rNxy8xhQXkyYwyikE0MUrtErGwyRdKk5wG4wmn4BX1mBZqcgilq3KPHFwO18v6F5QeyMcnqmCt+XoUaS9osiXQp0FJgsTgfwvH3fjyb9rejm7yH+Sk1BS65Rc452gCT99nEeA09rFmf/4rVUJUT1WJ81vxXKIJ70KDHTn8nK2IWnaJt799hddaxUNFfq1d7YOAp8LcJrVc1nK1GjVmnwCSNXynuz8Y9M2952wYRp3x88Tn5vXQy8R2d8IS2ImBYRI8FqktnoVQj0qSNZOkkW2Eyb2G/ENAe30CrelFENGkzGgz0Va6xFoBlBdMzsx+sAMw2+8ez42VC3q7rPFgFdK+8JjRlJTpbpbtDXAipPgoqDyFIFsAUAat9mWUxFe0xEdvlq3ySGEyv6iIgLSiCX6h1ov2y/WRL9IsXxiXlL1BuutbF7DiJLVFx3+tUOANJAZAvAUFllJOBtSJNlibmJu8vj0ehM6Q6HlaRDOyoT4Dq3NIjHHULMsQocmkqTNLRWYSJ/pmVfavcz5liBRQrYCtnigWQTcfrxfctA+mNCzKjWN7+h92QDeCLUWsm6itXepT1hSvYvXhS1bHlehKFx+r/qZysGeVYVqoqHqN8Yb1QeJ5TYeWERf1Z1cczWqtQwgsAj56Xv8vKZ70g9g26S18Z5yVGwGhXAL0XBXxKhauRoBTiI4p9ZUCKgLQKgF8By+Ljy8JmwRKas/F4aayidbImGiuqF8p1Q98GVvZPRxMpOPNKsrCLo6s4vBgRo8FV6028FfU+8z0JMK3yv2ZjIKKTPJYAzyyKaWAVwrP0qWb7FY8XtuNUo1oVeFWRXDhRSyd0Ieq+StcWRN9IXL+roS4rKb+ssYoRbAVAFaBcwLUIIp8BYuVkV9qBXvn/3rhIOBq98v+FUWghQtWpcAYYE1O7FgfOViJCcHWWBi/L0lYo6819qxdgCZQTvfbKxcUyJKPEGQBjKlxMQzM6e2dQl04AaUr1vALiFcCvnECbXQR0wlqwQNzKBZPNE1QgerfB7xRcoog1PakU/lKAvHuyiiG9fKzZSXklYolWlYo9sxLVo/PwKcCOnos7U2QUOaXCtL3lVXAt/OP2Zw3UKuheeT4By2dfiC9duG+MXUv01RxYBYpLwQZNf2NVvsNRV8/Ve2YDhfuLIvClKEz2gnz+DrDwlmxOt2hzccu2NwE6u1iWLnjTyxGkIAqAlmusd8Bm8U0yj31oichsUZHsua1ShSooF6l/etUnd+IwS+Y8zjLOYvTl/1U+V3qouNpQVXed7QabtKysgE3RpLqSKldb9SpNTpjP3le1WCqvBRfa7AKogPnVqJXtUx7HSrQ6LW6b1KaWgFR9TXzJV8BTeQ3D+yVqBO9NFxyrjo8ARBlwn/jadHwqF+KCthqvnanwzcFcAZeKaMvgLAz0pbRUOAGlzymcQCu44y9fNCsAiFzyBQC9Yje0acRaOLnLJz07cew7rZ7kyeBZdVALBfmXx2p1TFZBTp5eNbq/PFbGq828GKHSiLQKxhWQUSZnnzAgqwBafv2dC1QIeV+JrquRsxC9PImAVyqcXYkjZVb7i22n9hnYdnHXs22RNmOHXXzfYQGE08f3z22R6SeuePx8qTnE6+G2JFJE52TFTa9E42XqK7zn7LxPIlBkCagaVmWbXL5xEsGq0c3oam9R1lNJ6YvR6E/ZlnhOKxGqHKWK22ZRrE6FVeAFYCiD5Z3BenfQKlfjnzk2s/cuXmjLY/fu2EyBNRmg0vY3BupdMK0O2lIPeqXHXLnwq/tkOq0KpM+4EBcuuHgyxeIAzsBV3mcCwqV9XgBrKwJ6+eSJIndqylYnRiwAwQoXin/GPvSzXeyGPwsUk5NVOWHVaPUpA754oqvezn/LsQr7sQJgrUwtaoXBWBmUTxucKh28eZVWLsK3x2oFlCsR992xsqi74QWP6t0r8933rAz4CkDfeU8LLJeq1qy8b+WiWAFGaHu8eAG2jArfAcorJ3/1arIXrqxXr8iXxPtqlMre9xkX0rvRbAG8ORV+EsBWuNzeHbDPHLw35cFnSIG3xuGViPxJ0bAOLFrd7+DVVwZahPxy2UCl68k+lcHzxYFtK//fZHw+PZH4BEB68XNnwGpf3g3vq1ffK0nBm9T06VfuvzGb/LOBtGwzFT+3fem9f/n/+c/8Gwa+2X/zn38DSFd//vNL7/3/mtnD/ufnf34+7+df/28AkXg9KZ7Ze3oAAAAASUVORK5CYII=) } ` - } + }; return (
Import via Module
- -{` + + {` import { ColorPicker } from 'primereact/colorpicker'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

ColorPicker is used as a controlled input component with value and onChange properties.

+

+ ColorPicker is used as a controlled input component with value and onChange properties. +

- -{` + + {` setColor(e.value)} /> `} - +
Formats

Default color format to use in value binding is "hex" and other possible values are "rgb" and "hsb". Example below has 3 colorpickers having default values with different formats.

- -{` + + {` setColor1(e.value)} /> setColor2(e.value)} /> setColor3(e.value)}/> `} - +
Properties
@@ -226,7 +227,9 @@ import { ColorPicker } from 'primereact/colorpicker'; appendTo DOM element | string document.body - DOM element instance where the overlay panel should be mounted. Valid values are any DOM Element and 'self'. The self value is used to render a component where it is located. + + DOM element instance where the overlay panel should be mounted. Valid values are any DOM Element and 'self'. The self value is used to render a component where it is located. + disabled @@ -262,7 +265,13 @@ import { ColorPicker } from 'primereact/colorpicker'; transitionOptions object null - The properties of CSSTransition can be customized, except for "nodeRef" and "in" properties. + + The properties of{' '} + + CSSTransition + {' '} + can be customized, except for "nodeRef" and "in" properties. + @@ -354,110 +363,122 @@ import { ColorPicker } from 'primereact/colorpicker';
Accessibility
- -
Screen Reader
-

Specification does not cover a color picker yet and using a semantic native color picker is not consistent across browsers so currently component is not compatible with screen readers. - In the upcoming versions, text fields will be introduced below the slider section to be able to pick a color using accessible text boxes in hsl, rgba and hex formats.

- -
Closed State Keyboard Support of Popup ColorPicker
-
- - - - - - - - - - - - - - - - - -
KeyFunction
tabMoves focus to the color picker button.
spaceOpens the popup and moves focus to the color slider.
-
- -
Popup Keyboard Support
-
- - - - - - - - - - - - - - - - - - - - - -
KeyFunction
enterSelects the color and closes the popup.
spaceSelects the color and closes the popup.
escapeCloses the popup, moves focus to the input.
-
- -
Color Picker Slider
-
- - - - - - - - - - - - - -
KeyFunction
arrow keysChanges color.
-
- -
Hue Slider
-
- - - - - - - - - - - - - -
KeyFunction
- - up arrow - down arrow - - Changes hue.
-
-
+ +
Screen Reader
+

+ Specification does not cover a color picker yet and using a semantic native color picker is not consistent across browsers so currently component is not compatible with + screen readers. In the upcoming versions, text fields will be introduced below the slider section to be able to pick a color using accessible text boxes in hsl, rgba and hex formats. +

+ +
Closed State Keyboard Support of Popup ColorPicker
+
+ + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the color picker button.
+ space + Opens the popup and moves focus to the color slider.
+
+ +
Popup Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ enter + Selects the color and closes the popup.
+ space + Selects the color and closes the popup.
+ escape + Closes the popup, moves focus to the input.
+
+ +
Color Picker Slider
+
+ + + + + + + + + + + + + +
KeyFunction
+ arrow keys + Changes color.
+
+ +
Hue Slider
+
+ + + + + + + + + + + + + +
KeyFunction
+ + up arrow + down arrow + + Changes hue.
+
+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'ColorPickerDemo', sources: sources, extFiles: extFiles }) - } + {useLiveEditorTabs({ name: 'ColorPickerDemo', sources: sources, extFiles: extFiles })}
- ) -}) + ); +}); export default ColorPickerDoc; diff --git a/components/doc/common/developmentsection.js b/components/doc/common/developmentsection.js index 60cd9b41bb..e79767546a 100644 --- a/components/doc/common/developmentsection.js +++ b/components/doc/common/developmentsection.js @@ -4,9 +4,7 @@ export const DevelopmentSection = React.memo((props) => { const isProduction = process.env.NODE_ENV === 'production'; if (isProduction) { - return ( -

This section is under development. After the necessary tests and improvements are made, it will be shared with the users as soon as possible.

- ) + return

This section is under development. After the necessary tests and improvements are made, it will be shared with the users as soon as possible.

; } return props.children; diff --git a/components/doc/common/docactions.js b/components/doc/common/docactions.js index 8131adb32f..7e0061b33b 100644 --- a/components/doc/common/docactions.js +++ b/components/doc/common/docactions.js @@ -44,7 +44,7 @@ export const DocActions = (props) => { const toggleMenu = (event) => { menu.current.toggle(event); - } + }; const scrollToDocs = () => { const top = DomHandler.getOffset(document.getElementById('app-doc')).top - DomHandler.getOuterHeight(document.getElementsByClassName('layout-topbar')[0], true); @@ -53,38 +53,40 @@ export const DocActions = (props) => { top, behavior: 'smooth' }); - } + }; const viewOnGitHub = () => { window.open('https://github.com/primefaces/primereact/blob/master/pages/' + props.github, '_blank'); - } + }; const viewOnFigma = () => { - if (context.darkTheme) - window.open('https://www.figma.com/file/LJBqVfMpK8xY6KR2KIc8RK/Preview-%7C-Dark-%7C-PrimeOne-2022-%7C-1.0.0?node-id=806%3A36648', '_blank'); - else - window.open('https://www.figma.com/file/c3BuENd8nGcyPmn7ADieee/Preview-%7C-PrimeOne-2022-%7C-1.0.0?node-id=806%3A36648', '_blank'); - } + if (context.darkTheme) window.open('https://www.figma.com/file/LJBqVfMpK8xY6KR2KIc8RK/Preview-%7C-Dark-%7C-PrimeOne-2022-%7C-1.0.0?node-id=806%3A36648', '_blank'); + else window.open('https://www.figma.com/file/c3BuENd8nGcyPmn7ADieee/Preview-%7C-PrimeOne-2022-%7C-1.0.0?node-id=806%3A36648', '_blank'); + }; return ( <> - -
- - - - - -
+ +
+ + + + + +
- ) -} - + ); +}; diff --git a/components/doc/common/liveeditor.js b/components/doc/common/liveeditor.js index 4ba42b8859..2c7113b3fd 100644 --- a/components/doc/common/liveeditor.js +++ b/components/doc/common/liveeditor.js @@ -9,7 +9,7 @@ const vPrimeReact = '^8.0.0'; // latest let currentProps = {}; const contents = (name, content, imports) => ({ - 'js': `import 'primeicons/primeicons.css'; + js: `import 'primeicons/primeicons.css'; import 'primereact/resources/themes/lara-light-indigo/theme.css'; import 'primereact/resources/primereact.css'; import 'primeflex/primeflex.css'; @@ -19,7 +19,7 @@ ${content} const rootElement = document.getElementById("root"); ReactDOM.render(<${name} />, rootElement);`, - 'browser': ` + browser: ` @@ -61,28 +61,30 @@ export const useLiveEditorTabs = (props) => { const liveEditor = useLiveEditor(); - let extFiles = props.extFiles && Object.entries(props.extFiles).map(([key, value], i) => { - if (key === 'index.css') { - return null; - } + let extFiles = + props.extFiles && + Object.entries(props.extFiles).map(([key, value], i) => { + if (key === 'index.css') { + return null; + } - const lang = key.indexOf('.css') !== -1 ? 'css' : 'js'; - return ( - -{` + const lang = key.indexOf('.css') !== -1 ? 'css' : 'js'; + return ( + + {` /* ${key.replace('demo/', '')} */ `} - {value.content} - - ) - }); + {value.content} + + ); + }); let ordered_sources = { - 'hooks': { ...props.sources.hooks }, - 'class': { ...props.sources.class }, - 'ts': { ...props.sources.ts }, - 'browser': {...props.sources.browser} - } + hooks: { ...props.sources.hooks }, + class: { ...props.sources.class }, + ts: { ...props.sources.ts }, + browser: { ...props.sources.browser } + }; let tabs = Object.entries(ordered_sources).map(([key, value]) => { const { content: _c, imports: _i } = value; @@ -95,9 +97,7 @@ export const useLiveEditorTabs = (props) => { Edit in CodeSandbox {/* eslint-enable */} - - {content} - + {content} {extFiles}
@@ -105,21 +105,19 @@ export const useLiveEditorTabs = (props) => { }); if (props.service) { - const serviceArr = props.service.replace(/\s/g,'').split(','); + const serviceArr = props.service.replace(/\s/g, '').split(','); serviceArr.forEach((s, i) => { tabs.push( - - {services[s]} - + {services[s]} * This code is different for the 'Browser Source'. - ) + ); }); } if (props.data) { - const dataArr = props.data.replace(/\s/g,'').split(','); + const dataArr = props.data.replace(/\s/g, '').split(','); dataArr.forEach((d, i) => { tabs.push( @@ -127,12 +125,12 @@ export const useLiveEditorTabs = (props) => { {data[d]} - ) + ); }); } return tabs; -} +}; export const useLiveEditor = () => { const props = currentProps; @@ -144,7 +142,7 @@ export const useLiveEditor = () => { delete _extFiles['index.css']; let extFiles = {}; - Object.entries(_extFiles).forEach(([k, v]) => extFiles[`${rootPath}${k}`] = v); + Object.entries(_extFiles).forEach(([k, v]) => (extFiles[`${rootPath}${k}`] = v)); const dependencies = pkg ? pkg.dependencies : {}; @@ -153,20 +151,23 @@ export const useLiveEditor = () => { 'package.json': { content: { main: `${rootPath}demo/${nameWithExt}`, - dependencies: isBrowser ? {} : { - ...extDependencies, - 'react': dependencies['react'], - 'react-dom': dependencies['react-dom'], - 'react-transition-group': dependencies['react-transition-group'], - 'primereact': vPrimeReact, // latest - 'primeflex': dependencies['primeflex'], - 'primeicons': dependencies['primeicons'] - } + dependencies: isBrowser + ? {} + : { + ...extDependencies, + react: dependencies['react'], + 'react-dom': dependencies['react-dom'], + 'react-transition-group': dependencies['react-transition-group'], + primereact: vPrimeReact, // latest + primeflex: dependencies['primeflex'], + primeicons: dependencies['primeicons'] + } } }, 'index.html': { - content: isBrowser ? `` : - `
+ content: isBrowser + ? `` + : `
` @@ -372,12 +373,12 @@ img.flag { width:30px } ${extIndexCSS} - `, + ` }, ...files, ...extFiles } - } + }; }; const getSandboxParameters = (sourceType) => { @@ -396,21 +397,19 @@ ${extIndexCSS} _files[`sandbox.config.json`] = { content: { - "infiniteLoopProtection": false + infiniteLoopProtection: false } - } + }; if (sourceType === 'class' || sourceType === 'hooks') { extension = serviceExtension = '.js'; content = js; - } - else if (sourceType === 'ts') { + } else if (sourceType === 'ts') { extension = serviceExtension = '.tsx'; content = js; _files[`tsconfig.json`] = { - content: - `{ + content: `{ "compilerOptions": { "target": "es5", "lib": [ @@ -435,20 +434,19 @@ ${extIndexCSS} "src" ] }` - } + }; extDependencies = { ...extDependencies, - "@types/node": "10.12.24", - "@types/react": "16.8.2", - "@types/react-dom": "16.8.0", - "@types/react-transition-group": "^4.2.4", - "@types/classnames": "^2.2.10", - "react-scripts": "2.1.3", - "typescript": "3.3.3" - } - } - else if (sourceType === 'browser') { + '@types/node': '10.12.24', + '@types/react': '16.8.2', + '@types/react-dom': '16.8.0', + '@types/react-transition-group': '^4.2.4', + '@types/classnames': '^2.2.10', + 'react-scripts': '2.1.3', + typescript: '3.3.3' + }; + } else if (sourceType === 'browser') { extension = '.html'; content = browser; rootPath = ''; @@ -458,52 +456,52 @@ ${extIndexCSS} _files[`${rootPath}demo/${name}${extension}`] = { content - } + }; if (props.service) { - const serviceArr = props.service.replace(/\s/g,'').split(','); - serviceArr.forEach(s => { + const serviceArr = props.service.replace(/\s/g, '').split(','); + serviceArr.forEach((s) => { const path = `${rootPath}${sourceType === 'browser' ? 'demo' : 'service'}/${s}${serviceExtension}`; const content = sourceType === 'browser' ? services[s].replace('export class', 'class') : services[s]; _files[path] = { content - } + }; }); } if (props.data) { - const dataArr = props.data.replace(/\s/g,'').split(','); - dataArr.forEach(d => { + const dataArr = props.data.replace(/\s/g, '').split(','); + dataArr.forEach((d) => { const path = `${sourceType === 'browser' ? 'demo' : 'public'}/data/${d}.json`; const content = data[d]; _files[path] = { content - } + }; }); } return createSandboxParameters(`${name}${extension}`, _files, extDependencies, sourceType, rootPath); - } + }; return { postSandboxParameters(sourceType, toast) { const sandboxParameters = getSandboxParameters(sourceType); if (!sandboxParameters) { - toast.current.show({severity: 'warn', summary: 'Not Available', detail: 'That code sandbox demonstration is not available!'}); + toast.current.show({ severity: 'warn', summary: 'Not Available', detail: 'That code sandbox demonstration is not available!' }); return; } fetch('https://codesandbox.io/api/v1/sandboxes/define?json=1', { - method: "POST", + method: 'POST', headers: { 'Content-Type': 'application/json', - 'Accept': 'application/json' + Accept: 'application/json' }, body: JSON.stringify(sandboxParameters) }) - .then(response => response.json()) - .then(data => window.open(`https://codesandbox.io/s/${data.sandbox_id}`, '_blank')); + .then((response) => response.json()) + .then((data) => window.open(`https://codesandbox.io/s/${data.sandbox_id}`, '_blank')); } - } -} + }; +}; diff --git a/components/doc/common/liveeditordata.js b/components/doc/common/liveeditordata.js index b1da15b45b..3029e3af78 100644 --- a/components/doc/common/liveeditordata.js +++ b/components/doc/common/liveeditordata.js @@ -1,5 +1,5 @@ const services = { - 'CountryService': ` + CountryService: ` export class CountryService { getCountries() { @@ -8,7 +8,7 @@ export class CountryService { } } `, - 'CustomerService': ` + CustomerService: ` export class CustomerService { getCustomersSmall() { @@ -37,7 +37,7 @@ export class CustomerService { } } `, - 'EventService': ` + EventService: ` export class EventService { getEvents() { @@ -46,7 +46,7 @@ export class EventService { } } `, - 'NodeService': ` + NodeService: ` export class NodeService { getTreeTableNodes() { @@ -60,7 +60,7 @@ export class NodeService { } } `, - 'PhotoService': ` + PhotoService: ` export class PhotoService { getImages() { @@ -69,7 +69,7 @@ export class PhotoService { } } `, - 'ProductService': ` + ProductService: ` export class ProductService { getProductsSmall() { @@ -85,7 +85,7 @@ export class ProductService { } } `, - 'CarService': ` + CarService: ` export class CarService { brands = ['Vapid', 'Carson', 'Kitano', 'Dabver', 'Ibex', 'Morello', 'Akira', 'Titan', 'Dover', 'Norma']; @@ -126,10 +126,10 @@ export class CarService { } } ` -} +}; const data = { - 'countries': ` + countries: ` { "data": [ {"name": "Afghanistan", "code": "AF"}, @@ -378,7 +378,7 @@ const data = { ] } `, - 'events': ` + events: ` { "data": [ {"id": 1,"title": "All Day Event","start": "2017-02-01"}, @@ -396,7 +396,7 @@ const data = { ] } `, - 'photos': ` + photos: ` { "data":[ {"itemImageSrc": "images/galleria/galleria1.jpg","thumbnailImageSrc": "images/galleria/galleria1s.jpg","alt": "Description for Image 1","title": "Title 1"}, @@ -417,7 +417,7 @@ const data = { ] } `, - 'treenodes': ` + treenodes: ` { "root": [ { @@ -473,7 +473,7 @@ const data = { ] } `, - 'treetablenodes': ` + treetablenodes: ` { "root": [ @@ -13532,7 +13532,7 @@ const data = { ] } `, - 'products': ` + products: ` { "data": [ {"id": "1000","code": "f230fh0g3","name": "Bamboo Watch","description": "Product Description","image": "bamboo-watch.jpg","price": 65,"category": "Accessories","quantity": 24,"inventoryStatus": "INSTOCK","rating": 5}, @@ -13635,7 +13635,7 @@ const data = { {"id": "1009","code": "cm230f032","name": "Gaming Set","description": "Product Description","image": "gaming-set.jpg","price": 299,"category": "Electronics","quantity": 63,"inventoryStatus": "INSTOCK","rating": 3,"orders": [{"id": "10000","productCode": "cm230f032","date": "2020-06-24","amount": 299,"quantity": 1,"customer": "Kadeem Mujtaba","status": "PENDING"},{"id": "10001","productCode": "cm230f032","date": "2020-05-11","amount": 299,"quantity": 1,"customer": "Ashley Wickens","status": "DELIVERED"},{"id": "10002","productCode": "cm230f032","date": "2019-02-07","amount": 299,"quantity": 1,"customer": "Julie Johnson","status": "DELIVERED"},{"id": "10003","productCode": "cm230f032","date": "2020-04-26","amount": 299,"quantity": 1,"customer": "Tony Costa","status": "CANCELLED"}]} ] } - `, -} + ` +}; export { services, data }; diff --git a/components/doc/confirmdialog/index.js b/components/doc/confirmdialog/index.js index 78d4c27574..1fc06d99f5 100644 --- a/components/doc/confirmdialog/index.js +++ b/components/doc/confirmdialog/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const ConfirmDialogDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -113,7 +112,7 @@ export class ConfirmDialogDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useRef } from 'react'; @@ -204,7 +203,7 @@ const ConfirmDialogDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useRef } from 'react'; @@ -295,7 +294,7 @@ const ConfirmDialogDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -390,35 +389,37 @@ const ConfirmDialogDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { ConfirmDialog } from 'primereact/confirmdialog'; // To use tag import { confirmDialog } from 'primereact/confirmdialog'; // To use confirmDialog method `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

There are two ways to display confirm dialog. One of them is to use the confirmDialog method and the other is to use the <ConfirmDialog> tag. - These independently create dialog element. It supports the same properties in both.

+

+ There are two ways to display confirm dialog. One of them is to use the confirmDialog method and the other is to use the <ConfirmDialog> tag. These independently create dialog element. It supports the same + properties in both. +

1. confirmDialog method
- -{` + + {` const confirm = () => { confirmDialog({ message: 'Are you sure you want to proceed?', @@ -432,28 +433,32 @@ const confirm = () => { `} - +
2. <ConfirmDialog> tag
-

ConfirmDialog is used as a container and visibility is managed with visible property where onHide event is required to update the visibility state.

+

+ ConfirmDialog is used as a container and visibility is managed with visible property where onHide event is required to update the visibility state. +

- -{` + + {` setVisible(false)} message="Are you sure you want to proceed?" header="Confirmation" icon="pi pi-exclamation-triangle" accept={accept} reject={reject} />
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

@@ -597,16 +606,22 @@ const confirm = () => {
Accessibility
-
Screen Reader
-

ConfirmDialog component uses alertdialog role along with aria-labelledby referring to the header element however any attribute is passed to the root element so you may use aria-labelledby to override this default behavior. - In addition aria-modal is added since focus is kept within the popup.

-

It is recommended to use a trigger component that can be accessed with keyboard such as a button, if not adding tabIndex would be necessary.

- -

When confirm function is used and a trigger is passed as a parameter, - ConfirmDialog adds aria-expanded state attribute and aria-controls to the trigger so that the relation between the trigger and the popup is defined.

- - -{` +
Screen Reader
+

+ ConfirmDialog component uses alertdialog role along with aria-labelledby referring to the header element however any attribute is passed to the root element so you may use aria-labelledby to override + this default behavior. In addition aria-modal is added since focus is kept within the popup. +

+

+ It is recommended to use a trigger component that can be accessed with keyboard such as a button, if not adding tabIndex would be necessary. +

+ +

+ When confirm function is used and a trigger is passed as a parameter, ConfirmDialog adds aria-expanded state attribute and aria-controls to the trigger so that the relation between the trigger and the + popup is defined. +

+ + + {` const confirm = (event) => { confirmDialog({ trigger: event.currentTarget, @@ -622,78 +637,88 @@ const confirm = (event) => { `} - +
-

If the dialog is controlled with the visible property aria-expanded and aria-controls need to be handled explicitly.

+

+ If the dialog is controlled with the visible property aria-expanded and aria-controls need to be handled explicitly. +

- -{` + + {` setVisible(false)} message="Are you sure you want to proceed?" header="Confirmation" icon="pi pi-exclamation-triangle" accept={accept} reject={reject} />
- - - - - - - - - - - - - - - - - - - - -
KeyFunction
tabMoves focus to the next the focusable element within the popup.
shift + tabMoves focus to the previous the focusable element within the popup.
escapeCloses the popup and moves focus to the trigger.
-
+ + +
Overlay Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the next the focusable element within the popup.
+ shift + tab + Moves focus to the previous the focusable element within the popup.
+ escape + Closes the popup and moves focus to the trigger.
+
-
Buttons Keyboard Support
-
- - - - - - - - - - - - - - - - - -
KeyFunction
enterTriggers the action, closes the popup and moves focus to the trigger.
spaceTriggers the action, closes the popup and moves focus to the trigger.
-
+
Buttons Keyboard Support
+
+ + + + + + + + + + + + + + + + + +
KeyFunction
+ enter + Triggers the action, closes the popup and moves focus to the trigger.
+ space + Triggers the action, closes the popup and moves focus to the trigger.
+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'ConfirmDialogDemo', sources: sources }) - } + {useLiveEditorTabs({ name: 'ConfirmDialogDemo', sources: sources })}
- ) -}) + ); +}); export default ConfirmDialogDoc; diff --git a/components/doc/confirmpopup/index.js b/components/doc/confirmpopup/index.js index b609885fdb..7dd10ff015 100644 --- a/components/doc/confirmpopup/index.js +++ b/components/doc/confirmpopup/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const ConfirmPopupDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -83,7 +82,7 @@ export class ConfirmPopupDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useRef } from 'react'; @@ -145,7 +144,7 @@ const ConfirmPopupDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useRef } from 'react'; @@ -206,8 +205,8 @@ const ConfirmPopupDemo = () => { ) } ` - }, - 'browser': { + }, + browser: { tabName: 'Browser Source', imports: ` @@ -273,35 +272,37 @@ const ConfirmPopupDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { ConfirmPopup } from 'primereact/confirmpopup'; // To use tag import { confirmPopup } from 'primereact/confirmpopup'; // To use confirmPopup method `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

There are two ways to display confirm popup. One of them is to use the confirmPopup method and the other is to use the <ConfirmPopup> tag. - These independently create popup element. It supports the same properties in both. target property is mandatory to align the popup to its caller.

+

+ There are two ways to display confirm popup. One of them is to use the confirmPopup method and the other is to use the <ConfirmPopup> tag. These independently create popup element. It supports the same + properties in both. target property is mandatory to align the popup to its caller. +

1. confirmPopup method
- -{` + + {` const confirm = (event) => { confirmPopup({ target: event.currentTarget, @@ -314,11 +315,13 @@ const confirm = (event) => { `} - -

The confirmPopup method returns an object incudes hide and show methods. The component can be shown or hidden by using this object at any time.

+
+

+ The confirmPopup method returns an object incudes hide and show methods. The component can be shown or hidden by using this object at any time. +

- -{` + + {` const confirm = (event) => { const myConfirm = confirmPopup({ target: event.currentTarget, @@ -340,18 +343,20 @@ const confirm = (event) => { `} - +
2. <ConfirmPopup> tag
-

ConfirmPopup is used as a container and visibility is managed with visible property where onHide event is required to update the visibility state.

+

+ ConfirmPopup is used as a container and visibility is managed with visible property where onHide event is required to update the visibility state. +

- -{` + + {` setVisible(false)} message="Are you sure you want to proceed?" icon="pi pi-exclamation-triangle" accept={accept} reject={reject} />
- ) -}) + ); +}); export default ConfirmPopupDoc; diff --git a/components/doc/contextmenu/index.js b/components/doc/contextmenu/index.js index 3ae12304f2..65a98b885e 100644 --- a/components/doc/contextmenu/index.js +++ b/components/doc/contextmenu/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const ContextMenuDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -165,7 +164,7 @@ export class ContextMenuDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useRef } from 'react'; @@ -316,7 +315,7 @@ const ContextMenuDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useRef } from 'react'; @@ -467,7 +466,7 @@ const ContextMenuDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -621,34 +620,36 @@ const ContextMenuDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { ContextMenu } from 'primereact/contextmenu'; `} - +
Import via CDN
- -{` + + {` `} - +
MenuItem API
-

ContextMenu uses the common menu item api to define its items, visit MenuModel for details.

+

+ ContextMenu uses the common menu item api to define its items, visit MenuModel for details. +

Getting Started

Menu requires a collection of menuitems as its model.

- -{` + + {` const items = [ { label:'File', @@ -781,33 +782,32 @@ const items = [ } ]; `} - + - -{` + + {` `} - +
Document Menu

Setting global property attaches the context menu to the document.

- - -{` + + {` `} - +
Element Menu

ContextMenu is attached to a custom element manually using the reference and calling the show(event) method.

- -{` + + {` Logo cm.current.show(e)}/> `} - +
Properties
@@ -867,13 +867,21 @@ const items = [ appendTo DOM element | string document.body - DOM element instance where the overlay panel should be mounted. Valid values are any DOM Element and 'self'. The self value is used to render a component where it is located. + + DOM element instance where the overlay panel should be mounted. Valid values are any DOM Element and 'self'. The self value is used to render a component where it is located. + transitionOptions object null - The properties of CSSTransition can be customized, except for "nodeRef" and "in" properties. + + The properties of{' '} + + CSSTransition + {' '} + can be customized, except for "nodeRef" and "in" properties. + @@ -930,7 +938,9 @@ const items = [
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

@@ -970,77 +980,97 @@ const items = [
Accessibility
-
Screen Reader
-

ContextMenu component uses the menubar role with aria-orientation set to "vertical" and the value to describe the menu can either be provided with aria-labelledby or aria-label props. Each list item has a presentation role - whereas anchor elements have a menuitem role with aria-label referring to the label of the item and aria-disabled defined if the item is disabled. A submenu within a ContextMenu uses the menu role with an aria-labelledby defined - as the id of the submenu root menuitem label. In addition, menuitems that open a submenu have aria-haspopup, aria-expanded and aria-controls to define the relation between the item and the submenu.

+
Screen Reader
+

+ ContextMenu component uses the menubar role with aria-orientation set to "vertical" and the value to describe the menu can either be provided with aria-labelledby or aria-label props. Each list + item has a presentation role whereas anchor elements have a menuitem role with aria-label referring to the label of the item and aria-disabled defined if the item is disabled. A submenu within a + ContextMenu uses the menu role with an aria-labelledby defined as the id of the submenu root menuitem label. In addition, menuitems that open a submenu have aria-haspopup, aria-expanded and{' '} + aria-controls to define the relation between the item and the submenu. +

-
Keyboard Support
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
KeyFunction
tabWhen focus is in the menu, closes the context menu and moves focus to the next focusable element in the page sequence.
enterIf menuitem has a submenu, toggles the visibility of the submenu otherwise activates the menuitem and closes all open overlays.
spaceIf menuitem has a submenu, toggles the visibility of the submenu otherwise activates the menuitem and closes all open overlays.
escapeCloses the context menu.
down arrowIf focus is not inside the menu and menu is open, add focus to the first item. If an item is already focused, moves focus to the next menuitem within the submenu.
up arrowIf focus is not inside the menu and menu is open, add focus to the last item. If an item is already focused, moves focus to the next menuitem within the submenu.
right arrowOpens a submenu if there is one available and moves focus to the first item.
left arrowCloses a submenu and moves focus to the root item of the closed submenu.
homeMoves focus to the first menuitem within the submenu.
endMoves focus to the last menuitem within the submenu.
-
- +
Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + When focus is in the menu, closes the context menu and moves focus to the next focusable element in the page sequence.
+ enter + If menuitem has a submenu, toggles the visibility of the submenu otherwise activates the menuitem and closes all open overlays.
+ space + If menuitem has a submenu, toggles the visibility of the submenu otherwise activates the menuitem and closes all open overlays.
+ escape + Closes the context menu.
+ down arrow + If focus is not inside the menu and menu is open, add focus to the first item. If an item is already focused, moves focus to the next menuitem within the submenu.
+ up arrow + If focus is not inside the menu and menu is open, add focus to the last item. If an item is already focused, moves focus to the next menuitem within the submenu.
+ right arrow + Opens a submenu if there is one available and moves focus to the first item.
+ left arrow + Closes a submenu and moves focus to the root item of the closed submenu.
+ home + Moves focus to the first menuitem within the submenu.
+ end + Moves focus to the last menuitem within the submenu.
+
+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'ContextMenuDemo', sources: sources }) - } + {useLiveEditorTabs({ name: 'ContextMenuDemo', sources: sources })}
- ) - -}) + ); +}); export default ContextMenuDoc; diff --git a/components/doc/datascroller/index.js b/components/doc/datascroller/index.js index 841c21e5e7..05befe4333 100644 --- a/components/doc/datascroller/index.js +++ b/components/doc/datascroller/index.js @@ -5,9 +5,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const DataScrollerDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -66,7 +65,7 @@ export class DataScrollerDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -114,7 +113,7 @@ const DataScrollerDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -162,7 +161,7 @@ const DataScrollerDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -215,7 +214,7 @@ const DataScrollerDemo = () => { } ` } - } + }; const extFiles = { 'demo/DataScrollerDemo.css': { @@ -310,72 +309,77 @@ const DataScrollerDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { DataScroller } from 'primereact/datascroller'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

DataScroller requires a collection of items as its value, number of rows to load and a template content to display. Here is a sample DataScroller that displays a - list of cars where each load event adds 10 more rows if available.

- -{` +

+ DataScroller requires a collection of items as its value, number of rows to load and a template content to display. Here is a sample DataScroller that displays a list of cars where each load event adds 10 more rows if + available. +

+ + {` `} - - - {` + + + {` const itemTemplate = (item) => { // custom item content } `} - +
Inline
-

By default DataScroller listens to the scroll event of window, the alternative is the inline mode where container of the DataScroller element itself is used as the event target. Set inline option to true to enable this mode.

- - {` +

+ By default DataScroller listens to the scroll event of window, the alternative is the inline mode where container of the DataScroller element itself is used as the event target. Set inline option to true to enable this + mode. +

+ + {` `} - +
Lazy Loading
-

Lazy mode is handy to deal with large datasets, instead of loading the entire data, small chunks of data is loaded by invoking - onLazyLoad callback everytime paging happens. To implement lazy loading, - enable lazy property and provide a method callback using onLazyLoad that actually loads the data from a remote datasource. onLazyLoad gets an event object - that contains information about what to load.

+

+ Lazy mode is handy to deal with large datasets, instead of loading the entire data, small chunks of data is loaded by invoking onLazyLoad callback everytime paging happens. To implement lazy loading, enable lazy{' '} + property and provide a method callback using onLazyLoad that actually loads the data from a remote datasource. onLazyLoad gets an event object that contains information about what to load. +

- - {` + + {` `} - + - -{` + + {` const loadData = (event) => { //event.first = First row offset //event.rows = Number of rows per page //add more records to the cars array } `} - +
Properties
@@ -484,8 +488,10 @@ const loadData = (event) => { onLazyLoad - event.first = First row offset
- event.rows = Number of rows per page
+ + event.first = First row offset
+ event.rows = Number of rows per page
+ Callback to invoke in lazy mode to load new data. @@ -529,26 +535,24 @@ const loadData = (event) => {
Accessibility
-
Screen Reader
-

DataScroller uses a semantic list element to list the items. No specific role is enforced, still you may use any aria role and attributes - as any valid attribute is passed to the container element. List element can be also customized for accessibility using listProps property. -

+
Screen Reader
+

+ DataScroller uses a semantic list element to list the items. No specific role is enforced, still you may use any aria role and attributes as any valid attribute is passed to the container element. List element can be also + customized for accessibility using listProps property. +

-
Keyboard Support
-

Component does not include any built-in interactive elements.

+
Keyboard Support
+

Component does not include any built-in interactive elements.

-
Dependencies
-

None.

+
Dependencies
+

None.

- - { - useLiveEditorTabs({ name: 'DataScrollerDemo', sources: sources, service: 'ProductService', data: 'products', extFiles: extFiles }) - } + {useLiveEditorTabs({ name: 'DataScrollerDemo', sources: sources, service: 'ProductService', data: 'products', extFiles: extFiles })}
); -}) +}); export default DataScrollerDoc; diff --git a/components/doc/datatable/index.js b/components/doc/datatable/index.js index 9bc252c6b1..f0db1ba70f 100644 --- a/components/doc/datatable/index.js +++ b/components/doc/datatable/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const DataTableDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -249,7 +248,7 @@ export class DataTableDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -467,7 +466,7 @@ const DataTableDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -685,7 +684,7 @@ const DataTableDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -911,7 +910,7 @@ const DataTableDemo = () => { } ` } - } + }; const extFiles = { 'demo/DataTableDemo.css': { @@ -948,35 +947,37 @@ const DataTableDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { DataTable } from 'primereact/datatable'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

DataTable requires a value as an array of objects and columns defined with Column component. Throughout the samples, a product interface having code, name, description, image, category, quantity, price, inventoryStatus and rating properties is used to define an object to be displayed by the datatable. - Products are loaded by a CustomerService that connects to a server to fetch the products. Note that this is only for demo purposes, DataTable does not have any restrictions on how data is provided. +

+ DataTable requires a value as an array of objects and columns defined with Column component. Throughout the samples, a product interface having code, name, description, image, category, quantity, price, inventoryStatus and + rating properties is used to define an object to be displayed by the datatable. Products are loaded by a CustomerService that connects to a server to fetch the products. Note that this is only for demo purposes, DataTable does + not have any restrictions on how data is provided.

- -{` + + {` export default class ProductService { getProductsSmall() { @@ -992,11 +993,11 @@ export default class ProductService { } } `} - +

Following sample datatable has 4 columns and retrieves the data from a service on componentDidMount.

- - {` + + {` export const DataTableDemo = () => { const [products, setProducts] = useState([]) @@ -1017,11 +1018,11 @@ export const DataTableDemo = () => { } `} - +

Dynamic columns are also possible by creating the column component dynamically.

- -{` + + {` export const DataTableDemo = () => { const [products, setProducts] = useState([]); @@ -1049,7 +1050,7 @@ export const DataTableDemo = () => { ); } `} - +
Column Component

Column component defines various options to specify corresponding features.

@@ -1515,17 +1516,20 @@ export const DataTableDemo = () => {
Table Layout
-

Default table-layout is fixed meaning the cell widths do not depend on their content. If you require cells to scale based on their contents - set autoLayout property to true. Note that Scrollable and/or Resizable tables do not support auto layout due to technical limitations. +

+ Default table-layout is fixed meaning the cell widths do not depend on their content. If you require cells to scale based on their contents set autoLayout property to true. Note that Scrollable and/or Resizable tables + do not support auto layout due to technical limitations.

Templates
-

Field data of a corresponding row is displayed as the cell content by default, this can be customized using templating where current row data and column properties are passed to the body template. - On the other hand, header and footer properties of a column are used to define the content of these sections by accepting either simple string values or JSX for advanced content. Similarly DataTable itself - also provides header and footer properties for the main header and footer of the table.

+

+ Field data of a corresponding row is displayed as the cell content by default, this can be customized using templating where current row data and column properties are passed to the body template. On the other hand,{' '} + header and footer properties of a column are used to define the content of these sections by accepting either simple string values or JSX for advanced content. Similarly DataTable itself also provides{' '} + header and footer properties for the main header and footer of the table. +

- -{` + + {` export const DataTableTemplatingDemo = () => { const [products, setProducts] = useState([]) @@ -1576,13 +1580,13 @@ export const DataTableTemplatingDemo = () => { } `} - +
Size

In addition to the regular table, a smal and a large version are available with different paddings.

- -{` + + {` @@ -1604,13 +1608,15 @@ export const DataTableTemplatingDemo = () => { `} - +
Column Group
-

Columns can be grouped at header and footer sections by defining a ColumnGroup component as the headerColumnGroup and footerColumnGroup properties.

+

+ Columns can be grouped at header and footer sections by defining a ColumnGroup component as the headerColumnGroup and footerColumnGroup properties. +

- - {` + + {` import React, { Component } from 'react'; import {DataTable} from 'primereact/datatable'; import {Column} from 'primereact/column'; @@ -1705,17 +1711,21 @@ export const DataTableColGroupDemo = () => { ); } `} - +

When using sorting with column groups, define sort properties like sortable at columns inside column groups not at the direct children of DataTable component.

Pagination
-

Pagination is enabled by setting paginator property to true, rows property defines the number of rows per page and optionally pageLinks specify the the number of page links to display. - See paginator component for more information about further customization options such as paginator template.

+

+ Pagination is enabled by setting paginator property to true, rows property defines the number of rows per page and optionally pageLinks specify the the number of page links to display. See{' '} + paginator component for more information about further customization options such as paginator template. +

-

Pagination can either be used in Controlled or Uncontrolled manner. In controlled mode, first and onPage properties need to be defined to control the paginator state.

- -{` +

+ Pagination can either be used in Controlled or Uncontrolled manner. In controlled mode, first and onPage properties need to be defined to control the paginator state. +

+ + {` export const DataTablePaginatorDemo = () => { const [products, setProducts] = useState([]); @@ -1736,12 +1746,14 @@ export const DataTablePaginatorDemo = () => { ); } `} - +
-

In uncontrolled mode, only paginator and rows need to be enabled. Index of the first record can be still be provided using the first property in uncontrolled mode however - it is evaluated at initial rendering and ignored in further updates. If you programmatically need to update the paginator state, prefer to use the component as controlled.

- -{` +

+ In uncontrolled mode, only paginator and rows need to be enabled. Index of the first record can be still be provided using the first property in uncontrolled mode however it is evaluated at initial + rendering and ignored in further updates. If you programmatically need to update the paginator state, prefer to use the component as controlled. +

+ + {` export const DataTablePaginatorDemo = () => { const [products, setProducts] = useState([]); @@ -1761,11 +1773,13 @@ export const DataTablePaginatorDemo = () => { ); } `} - +
-

Elements of the paginator can be customized using the paginatorTemplate by the DataTable. Refer to the template section of the paginator documentation for further options.

- -{` +

+ Elements of the paginator can be customized using the paginatorTemplate by the DataTable. Refer to the template section of the paginator documentation for further options. +

+ + {` @@ -1774,37 +1788,42 @@ export const DataTablePaginatorDemo = () => { `} - +
Sorting
-

Enabling sortable property at column component would be enough to make a column sortable. The property to use when sorting is field by default and can be customized using sortField.

- -{` +

+ Enabling sortable property at column component would be enough to make a column sortable. The property to use when sorting is field by default and can be customized using sortField. +

+ + {` `} - +
-

By default sorting is executed on the clicked column only. To enable multiple field sorting, set sortMode property to "multiple" and use metakey when clicking on another column.

- -{` +

+ By default sorting is executed on the clicked column only. To enable multiple field sorting, set sortMode property to "multiple" and use metakey when clicking on another column. +

+ + {` `} - +
+

+ In case you'd like to display the table as sorted per a single column by default on mount, use sortField and sortOrder properties in Controlled or Uncontrolled manner. In controlled mode,{' '} + sortField, sortOrder and onSort properties need to be defined to control the sorting state. +

-

In case you'd like to display the table as sorted per a single column by default on mount, use sortField and sortOrder properties in Controlled or Uncontrolled manner. - In controlled mode, sortField, sortOrder and onSort properties need to be defined to control the sorting state.

- - -{` + + {` const onSort = (e) => { setSortField(e.sortField); setSortOrder(e.sortOrder); } `} - - - {` + + + {` @@ -1812,11 +1831,13 @@ const onSort = (e) => { `} - + -

In multiple mode, use the multiSortMeta property and bind an array of SortMeta objects instead.

- -{` +

+ In multiple mode, use the multiSortMeta property and bind an array of SortMeta objects instead. +

+ + {` setMultiSortMeta(e.multiSortMeta)}> @@ -1824,21 +1845,23 @@ const onSort = (e) => { `} - +
- -{` + + {` let multiSortMeta = []; multiSortMeta.push({field: 'code', order: 1}); multiSortMeta.push({field: 'name', order: -1}); `} - + -

In uncontrolled mode, no additional properties need to be enabled. Initial sort field can be still be provided using the sortField property in uncontrolled mode however - it is evaluated at initial rendering and ignored in further updates. If you programmatically need to update the sorting state, prefer to use the component as controlled.

+

+ In uncontrolled mode, no additional properties need to be enabled. Initial sort field can be still be provided using the sortField property in uncontrolled mode however it is evaluated at initial rendering and ignored + in further updates. If you programmatically need to update the sorting state, prefer to use the component as controlled. +

- -{` + + {` @@ -1846,11 +1869,11 @@ multiSortMeta.push({field: 'name', order: -1}); `} - +

To customize sorting algorithm, define a sortFunction that sorts the list.

- -{` + + {` @@ -1858,20 +1881,22 @@ multiSortMeta.push({field: 'name', order: -1}); `} - + - -{` + + {` const mysort = (event) => { //event.field = Field to sort //event.order = Sort order } `} - + -

Getting access to the sorted data is provided by the onValueChange callback.

- -{` +

+ Getting access to the sorted data is provided by the onValueChange callback. +

+ + {` console.log(sortedData)}> @@ -1879,16 +1904,17 @@ const mysort = (event) => { `} - +
Filtering
-

DataTable has advanced filtering capabilities that does the heavy lifting while providing flexible customization. Filtering has two layout alternatives defined with the filterDisplay. - In row setting, filter elements are displayed in a separate row at the header section whereas - in menu mode filter elements are displayed inside an overlay. The template filter gets a value, filterCallback and filterApplyCallback, - use value to populate the filter with your own form components and call the filterCallback with the event of your choice like onInput, onChange, onClick. - FilterCallback adds new values in hidden 'filters' state in DataTable and when filterApplyCallback is called, data is filtered. The filterApplyCallback method can be used directly if you want to filter by value directly.

- -{` +

+ DataTable has advanced filtering capabilities that does the heavy lifting while providing flexible customization. Filtering has two layout alternatives defined with the filterDisplay. In row setting, filter + elements are displayed in a separate row at the header section whereas in menu mode filter elements are displayed inside an overlay. The template filter gets a value, filterCallback and{' '} + filterApplyCallback, use value to populate the filter with your own form components and call the filterCallback with the event of your choice like onInput, onChange, onClick. FilterCallback adds new values in hidden + 'filters' state in DataTable and when filterApplyCallback is called, data is filtered. The filterApplyCallback method can be used directly if you want to filter by value directly. +

+ + {` const DataTableFilterDemo = () => { const [customers, setCustomers] = useState(null); const filters = { @@ -1902,44 +1928,43 @@ const DataTableFilterDemo = () => { ) } `} - +
Filter Row

Input field is displayed in a separate header row.

- -{` + + {` `} - +
Filter Menu

Input field is displayed in an overlay.

- -{` + + {` `} - +
Multiple Constraints
-

In "menu" display, it is possible to add more constraints to a same filter. In this case, metadata could be an array of constraints. The operator - defines whether all or any of the constraints should match.

+

In "menu" display, it is possible to add more constraints to a same filter. In this case, metadata could be an array of constraints. The operator defines whether all or any of the constraints should match.

- -{` + + {` const filters = { 'name': {operator: FilterOperator.AND, constraints: [{value: null, matchMode: FilterMatchMode.STARTS_WITH}]}, } `} - +
Populate Filters

Providing a filters with predefined values would be enough to display the table as filtered by default. This approach can also be used to clear filters progammatically.

- -{` + + {` const filters = { 'name': {operator: FilterOperator.AND, constraints: [ {value: 'Prime', matchMode: FilterMatchMode.STARTS_WITH}, @@ -1947,12 +1972,15 @@ const filters = { ]} } `} - +
Match Modes
-

Depending on the dataType of the column, suitable match modes are displayed. Default configuration is available at PrimeReact.filterMatchModeOptions which can be used to customize the modes globally for all tables.

- -{` +

+ Depending on the dataType of the column, suitable match modes are displayed. Default configuration is available at PrimeReact.filterMatchModeOptions which can be used to customize the modes globally for all + tables. +

+ + {` PrimeReact.filterMatchModeOptions = { text: [ FilterMatchMode.STARTS_WITH, @@ -1978,11 +2006,13 @@ PrimeReact.filterMatchModeOptions = { ] } `} - +
-

If you need to override the match modes for a particular column use the filterMatchModeOptions property and provide an array with label-value pairs.

- -{` +

+ If you need to override the match modes for a particular column use the filterMatchModeOptions property and provide an array with label-value pairs. +

+ + {` const matchModes = [ {label: 'Starts With', value: FilterMatchMode.STARTS_WITH}, {label: 'Contains', value: FilterMatchMode.CONTAINS}, @@ -1990,12 +2020,14 @@ const matchModes = [ ... `} - +
Custom Filter
-

Custom filtering is implemented using the FilterService, first register your filter and add it to your filterMatchModeOptions.

- -{` +

+ Custom filtering is implemented using the FilterService, first register your filter and add it to your filterMatchModeOptions. +

+ + {` import {FilterService} from 'primereact/api'; FilterService.register('myfilter', (a,b) => a === b); @@ -2007,11 +2039,14 @@ const matchModes = [ {label: 'Contains', value: FilterMatchMode.CONTAINS}, ] `} - +
-

By default, input fields are used as filter elements and this can be customized using the filterElement property of the Column that calls the filter function of the table instance by passing the value, field and the match mode.

- -{` +

+ By default, input fields are used as filter elements and this can be customized using the filterElement property of the Column that calls the filter function of the table instance by passing the value, field and the + match mode. +

+ + {` export const DataTableCustomFilterDemo = () => { const [products, setProducts] = useState([]); @@ -2048,13 +2083,15 @@ export const DataTableCustomFilterDemo = () => { ); } `} - +
-

In case you'd like to display the table as filtered by default on mount, use filters property in Controlled or Uncontrolled manner. - In controlled mode, filters and onFilter properties need to be defined to control the filtering state.

+

+ In case you'd like to display the table as filtered by default on mount, use filters property in Controlled or Uncontrolled manner. In controlled mode, filters and onFilter properties need to + be defined to control the filtering state. +

- -{` + + {` export const DataTableDefaultFilteredDemo = () => { const [products, setProducts] = useState([]); @@ -2078,13 +2115,15 @@ export const DataTableDefaultFilteredDemo = () => { ); } `} - + -

In uncontrolled filtering, no additional properties need to be enabled. Initial filtering can be still be provided using the filters property in uncontrolled mode however - it is evaluated at initial rendering and ignored in further updates. If you programmatically need to update the filtering state, prefer to use the component as controlled.

+

+ In uncontrolled filtering, no additional properties need to be enabled. Initial filtering can be still be provided using the filters property in uncontrolled mode however it is evaluated at initial rendering and ignored + in further updates. If you programmatically need to update the filtering state, prefer to use the component as controlled. +

- -{` + + {` @@ -2092,12 +2131,13 @@ export const DataTableDefaultFilteredDemo = () => { `} - + - -

Getting access to the filtered data is provided by the onValueChange callback.

- -{` +

+ Getting access to the filtered data is provided by the onValueChange callback. +

+ + {` console.log(filteredData)}> @@ -2105,16 +2145,19 @@ export const DataTableDefaultFilteredDemo = () => { `} - +
Selection
-

DataTable provides single and multiple selection modes on click of a row or cell. Selected rows are bound to the selection property for reading and updated using onSelectionChange callback. - Alternatively column based selection can be done using radio buttons or checkboxes using selectionMode of a particular column. In addition onRowSelect-onRowUnselect / onCellSelect-onCellUnselect events are provided as optional callbacks.

+

+ DataTable provides single and multiple selection modes on click of a row or cell. Selected rows are bound to the selection property for reading and updated using onSelectionChange callback. Alternatively column + based selection can be done using radio buttons or checkboxes using selectionMode of a particular column. In addition onRowSelect-onRowUnselect / onCellSelect-onCellUnselect events are + provided as optional callbacks. +

In single mode, selection binding is an object reference.

- -{` + + {` export const DataTableSelectionDemo = () => { const [products, setProducts] = useState([]); @@ -2147,13 +2190,16 @@ export const DataTableSelectionDemo = () => { ); } `} - + -

In multiple mode, selection binding should be an array and multiple items can either be selected using metaKey or toggled individually depending on the value of metaKeySelection property value which is true by default. - On touch enabled devices metaKeySelection is turned off automatically. Also, ShiftKey is supported for range selection. In addition, the rectangular selection can be dragged over the desired rows or cells thanks to the dragSelection property. In this way, a range of rows or cells can be selected.

+

+ In multiple mode, selection binding should be an array and multiple items can either be selected using metaKey or toggled individually depending on the value of metaKeySelection property value which is true by default. On + touch enabled devices metaKeySelection is turned off automatically. Also, ShiftKey is supported for range selection. In addition, the rectangular selection can be dragged over the desired rows or cells thanks to the + dragSelection property. In this way, a range of rows or cells can be selected. +

- -{` + + {` export const DataTableSelectionDemo = () => { const [products, setProducts] = useState([]); @@ -2205,13 +2251,17 @@ export const DataTableSelectionDemo = () => { } `} - + -

If you prefer a radiobutton or a checkbox instead of a row click, use the selectionMode of a column instead. - Following datatable displays a checkbox at the first column of each row and automatically adds a header checkbox to toggle selection of all rows.

-

Tip: Use showSelectionElement function in case you need to hide selection element for a particular row.

- -{` +

+ If you prefer a radiobutton or a checkbox instead of a row click, use the selectionMode of a column instead. Following datatable displays a checkbox at the first column of each row and automatically adds a header + checkbox to toggle selection of all rows. +

+

+ Tip: Use showSelectionElement function in case you need to hide selection element for a particular row. +

+ + {`
Row and Checkbox Selection
setSelectedProducts(e.value))}> @@ -2230,14 +2280,15 @@ export const DataTableSelectionDemo = () => { `} -
+
Cell Editing
-

Incell editing feature provides a way to quickly edit data inside the table. A cell editor is defined using the editor property - that refers to a function to return an input element for the editing.

+

+ Incell editing feature provides a way to quickly edit data inside the table. A cell editor is defined using the editor property that refers to a function to return an input element for the editing. +

- -{` + + {` @@ -2245,10 +2296,10 @@ export const DataTableSelectionDemo = () => { `} - + - -{` + + {` const onEditorValueChange = (props, value) => { let updatedProducts = [...props.value]; updatedProducts[props.rowIndex][props.field] = value; @@ -2281,37 +2332,39 @@ const statusEditor = (props) => { ); } `} - + -

Clicking outside the cell or hitting enter key closes the cell, however this may not be desirable if the input is invalid. In order - to decide whether to keep the cell open or not, provide a cellEditValidator function that validates the value. Optionally onCellEditComplete and onCellEditCancel - events are available at the column component to provide callbacks whenever an editor is submitted or cancelled.

+

+ Clicking outside the cell or hitting enter key closes the cell, however this may not be desirable if the input is invalid. In order to decide whether to keep the cell open or not, provide a cellEditValidator function + that validates the value. Optionally onCellEditComplete and onCellEditCancel + events are available at the column component to provide callbacks whenever an editor is submitted or cancelled. +

- -{` + + {` `} - + - - {` + + {` const requiredValidator = (e) => { let props = e.columnProps; let value = props.rowData[props.field]; return value && value.length > 0; } `} - +
Row Editing

Row editing toggles the visibility of the all editors in the row at once and provides additional options to save and cancel editing.

- -{` + + {` @@ -2319,22 +2372,24 @@ const requiredValidator = (e) => { `} - + - - {` + + {` const onRowEditValidator = (rowData) => { let value = rowData['inventoryStatuses']; return value.length > 0; } `} - +
ContextMenu
-

DataTable provides exclusive integration with ContextMenu. contextMenuSelection and onContextMenuSelectionChange are used to get a reference of the the selected row - and onContextMenu callback is utilized to display a particular context menu.

- -{` +

+ DataTable provides exclusive integration with ContextMenu. contextMenuSelection and onContextMenuSelectionChange are used to get a reference of the the selected row and onContextMenu callback is utilized + to display a particular context menu. +

+ + {` export const DataTableContextMenuDemo = () => { const [products, setProducts] = useState([]); @@ -2389,15 +2444,17 @@ export const DataTableContextMenuDemo = () => { ); } `} - +
Expandable Rows
-

Row expansion allows displaying detailed content for a particular row. To use this feature, add an expander column, define a rowExpansionTemplate as a function to return the expanded content and bind to +

+ Row expansion allows displaying detailed content for a particular row. To use this feature, add an expander column, define a rowExpansionTemplate as a function to return the expanded content and bind to expandedRows property to read the expanded rows along with the onRowToggle property to update it. expandedRows property either accepts an array of row data or a map whose key is the dataKey of the record. - Using expandable rows with a dataKey is suggested for better performance.

+ Using expandable rows with a dataKey is suggested for better performance. +

- - {` + + {` export const DataTableRowExpansionDemo = () => { const [products, setProducts] = useState([]); @@ -2497,13 +2554,15 @@ export const DataTableRowExpansionDemo = () => { ); } `} - +
Column Resize
-

Columns can be resized using drag drop by setting the resizableColumns to true. There are two resize modes; "fit" and "expand". Fit is the default one and the overall table width does not change when a column is resized. - In "expand" mode, table width also changes along with the column width. onColumnResizeEnd is a callback that passes the resized column header as a parameter.

- -{` +

+ Columns can be resized using drag drop by setting the resizableColumns to true. There are two resize modes; "fit" and "expand". Fit is the default one and the overall table width does not change when a column is + resized. In "expand" mode, table width also changes along with the column width. onColumnResizeEnd is a callback that passes the resized column header as a parameter. +

+ + {` @@ -2511,11 +2570,11 @@ export const DataTableRowExpansionDemo = () => { `} - +

It is important to note that when you need to change column widths, since table width is 100%, giving fixed pixel widths does not work well as browsers scale them, instead give percentage widths.

- -{` + + {` @@ -2523,11 +2582,13 @@ export const DataTableRowExpansionDemo = () => { `} - + -

You can choose which columns are resizeable per column.

- -{` +

+ You can choose which columns are resizeable per column. +

+ + {` @@ -2535,14 +2596,16 @@ export const DataTableRowExpansionDemo = () => { `} - +
Column Reorder
-

Columns can be reordered using drag drop by setting the reorderableColumns to true. onColReorder is a callback that is invoked when a column is reordered. - DataTable keeps the column order state internally using keys that identifies a column using the field property. If the column has no field, use columnKey instead.

+

+ Columns can be reordered using drag drop by setting the reorderableColumns to true. onColReorder is a callback that is invoked when a column is reordered. DataTable keeps the column order state internally using + keys that identifies a column using the field property. If the column has no field, use columnKey instead. +

- -{` + + {` @@ -2550,15 +2613,19 @@ export const DataTableRowExpansionDemo = () => { `} - +
Row Reorder
-

Data can be reordered using drag drop by adding a reorder column that will display an icon as a drag handle. onRowReorder is a callback that is invoked when a column is reordered, use - this callback to update the new order. The reorder icon can be customized using rowReorderIcon of the column component.

-

Tip: Use showRowReorderElement function in case you need to hide selection element for a particular row.

+

+ Data can be reordered using drag drop by adding a reorder column that will display an icon as a drag handle. onRowReorder is a callback that is invoked when a column is reordered, use this callback to update the new + order. The reorder icon can be customized using rowReorderIcon of the column component. +

+

+ Tip: Use showRowReorderElement function in case you need to hide selection element for a particular row. +

- -{` + + {` setProducts(e.value)}> @@ -2567,12 +2634,12 @@ export const DataTableRowExpansionDemo = () => { `} - +
Data Export

DataTable can export its data in CSV format using exportCSV() method.

- -{` + + {` export const DataTableExportDemo = () => { const [products, setProducts] = useState([]); @@ -2599,16 +2666,17 @@ export const DataTableExportDemo = () => { ); } `} - +
RowGrouping
-

RowGrouping has two modes defined be the rowGroupMode property, in "subheader" option rows are grouped by a groupRowsBy and in "rowspan" mode grouping - is done based on the sort field. In both cases, data should be sorted initally using the properties such as sortField and sortOrder. In "subheader" mode, - rowGroupHeaderTemplate property should be defined to provide the content of the header and optionally rowGroupFooterTemplate is available to provide a footer - for the group.

+

+ RowGrouping has two modes defined be the rowGroupMode property, in "subheader" option rows are grouped by a groupRowsBy and in "rowspan" mode grouping is done based on the sort field. In both cases, data should be + sorted initally using the properties such as sortField and sortOrder. In "subheader" mode, + rowGroupHeaderTemplate property should be defined to provide the content of the header and optionally rowGroupFooterTemplate is available to provide a footer for the group. +

- -{` + + {` const DataTableRowGroupDemo = () => { const [products, setProducts] = useState(null); @@ -2666,12 +2734,14 @@ const DataTableRowGroupDemo = () => { } `} - +
Scrolling
-

DataTable supports both horizontal and vertical scrolling as well as frozen columns and rows. Scrollable DataTable is enabled using scrollable property and scrollHeight to define the viewport height.

- -{` +

+ DataTable supports both horizontal and vertical scrolling as well as frozen columns and rows. Scrollable DataTable is enabled using scrollable property and scrollHeight to define the viewport height. +

+ + {` @@ -2679,27 +2749,36 @@ const DataTableRowGroupDemo = () => { `} - +
Column Widths of a Scrollable Table

Scrollable table uses flex layout so there are a couple of rules to consider when adjusting the widths of columns.

    -
  • Use min-width in vertical scrolling only so that when there is enough space columns may grow and for smaller screens a horizontal scrollbar is displayed to provide responsive design.
  • -
  • When horizontal scrolling is enabled, prefer width instead of min-width.
  • -
  • In vertical scrolling only, use flex to disable grow and shrink while defining a initial width. When horizontal scrolling is enabled, this is not required as columns do not grow or shrink in horizontal scrolling.
  • +
  • + Use min-width in vertical scrolling only so that when there is enough space columns may grow and for smaller screens a horizontal scrollbar is displayed to provide responsive design. +
  • +
  • + When horizontal scrolling is enabled, prefer width instead of min-width. +
  • +
  • + In vertical scrolling only, use flex to disable grow and shrink while defining a initial width. When horizontal scrolling is enabled, this is not required as columns do not grow or shrink in horizontal scrolling. +
- -{` + + {` `} - +
Flex Scroll
-

In cases where viewport should adjust itself according to the table parent's height instead of a fixed viewport height, set scrollHeight option as flex. In example below, table is inside a Dialog where viewport size dynamically responds to the dialog size changes such as maximizing.

+

+ In cases where viewport should adjust itself according to the table parent's height instead of a fixed viewport height, set scrollHeight option as flex. In example below, table is inside a Dialog where viewport size + dynamically responds to the dialog size changes such as maximizing. +

- -{` + + {`
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

@@ -3835,26 +4006,46 @@ export const DataTableStateDemo = () => {
Accessibility
Screen Reader
-

DataTable uses a table element whose attributes can be extended with the tableProps option. This property allows passing aria roles and attributes like aria-label and aria-describedby to define the table for readers. Default - role of the table is table. Header, body and footer elements use rowgroup, rows use row role, header cells have columnheader and body cells use cell roles. Sortable headers utilizer aria-sort attribute - either set to "ascending" or "descending".

- -

Built-in checkbox and radiobutton components for row selection use checkbox and radiobutton roles respectively with aria-checked state attribute. The label to describe them is retrieved from the - aria.selectRow and aria.unselectRow properties of the locale API. Similarly header checkbox uses selectAll and unselectAll keys. When a row is selected, aria-selected is set to true on a row.

- -

The element to expand or collapse a row is a button with aria-expanded and aria-controls properties. Value to describe the buttons is derived from aria.expandRow and aria.collapseRow properties of the locale API.

- -

The filter menu button use aria.showFilterMenu and aria.hideFilterMenu properties as aria-label in addition to the aria-haspopup, aria-expanded and aria-controls to define the relation between the button and the overlay. Popop menu has dialog role with aria-modal - as focus is kept within the overlay. The operator dropdown use aria.filterOperator and filter constraints dropdown use aria.filterConstraint properties. Buttons to add rules on the other hand utilize aria.addRule and aria.removeRule properties. The footer buttons similarly use - aria.clear and aria.apply properties. filterInputProps of the Column component can be used to define aria labels for the built-in filter components, if a custom component is used with templating you also may define your own aria labels as well.

- -

Editable cells use custom templating so you need to manage aria roles and attributes manually if required. The row editor controls are button elements with aria.editRow, aria.cancelEdit and aria.saveEdit used for the aria-label.

- -

Paginator is a standalone component used inside the DataTable, refer to the paginator for more information about the accessibility features.

+

+ DataTable uses a table element whose attributes can be extended with the tableProps option. This property allows passing aria roles and attributes like aria-label and aria-describedby to define + the table for readers. Default role of the table is table. Header, body and footer elements use rowgroup, rows use row role, header cells have columnheader and body cells use cell roles. + Sortable headers utilizer aria-sort attribute either set to "ascending" or "descending". +

+ +

+ Built-in checkbox and radiobutton components for row selection use checkbox and radiobutton roles respectively with aria-checked state attribute. The label to describe them is retrieved from the + aria.selectRow and aria.unselectRow properties of the locale API. Similarly header checkbox uses selectAll and unselectAll keys. When a row is selected,{' '} + aria-selected is set to true on a row. +

+ +

+ The element to expand or collapse a row is a button with aria-expanded and aria-controls properties. Value to describe the buttons is derived from aria.expandRow and aria.collapseRow{' '} + properties of the locale API. +

+ +

+ The filter menu button use aria.showFilterMenu and aria.hideFilterMenu properties as aria-label in addition to the aria-haspopup, aria-expanded and aria-controls to define the + relation between the button and the overlay. Popop menu has dialog role with aria-modal + as focus is kept within the overlay. The operator dropdown use aria.filterOperator and filter constraints dropdown use aria.filterConstraint properties. Buttons to add rules on the other hand utilize{' '} + aria.addRule and aria.removeRule properties. The footer buttons similarly use + aria.clear and aria.apply properties. filterInputProps of the Column component can be used to define aria labels for the built-in filter components, if a custom component is used with templating you + also may define your own aria labels as well. +

+ +

+ Editable cells use custom templating so you need to manage aria roles and attributes manually if required. The row editor controls are button elements with aria.editRow, aria.cancelEdit and{' '} + aria.saveEdit used for the aria-label. +

+ +

+ Paginator is a standalone component used inside the DataTable, refer to the paginator for more information about the accessibility features. +

Sortable Headers Keyboard Support
-

Any button element inside the DataTable used for cases like filter, row expansion, edit are tabbable and can be used with space and enter keys.

- +

+ Any button element inside the DataTable used for cases like filter, row expansion, edit are tabbable and can be used with space and enter keys. +

+
Sortable Headers Keyboard Support
@@ -3866,15 +4057,21 @@ export const DataTableStateDemo = () => { - + - + - + @@ -3892,11 +4089,15 @@ export const DataTableStateDemo = () => { - + - + @@ -3914,55 +4115,81 @@ export const DataTableStateDemo = () => { - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3972,14 +4199,11 @@ export const DataTableStateDemo = () => {
Dependencies

None.

- - { - useLiveEditorTabs({ name: 'DataTableDemo', sources: sources, service: 'CustomerService', data: 'customers-large', extFiles: extFiles }) - } + {useLiveEditorTabs({ name: 'DataTableDemo', sources: sources, service: 'CustomerService', data: 'customers-large', extFiles: extFiles })} ); -}) +}); export default DataTableDoc; diff --git a/components/doc/dataview/index.js b/components/doc/dataview/index.js index 182262ace0..a5c99f8b30 100644 --- a/components/doc/dataview/index.js +++ b/components/doc/dataview/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const DataViewDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -151,7 +150,7 @@ export class DataViewDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -279,7 +278,7 @@ const DataViewDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -407,7 +406,7 @@ const DataViewDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -540,7 +539,7 @@ const DataViewDemo = () => { } ` } - } + }; const extFiles = { 'demo/DataViewDemo.css': { @@ -668,41 +667,47 @@ const DataViewDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { DataView, DataViewLayoutOptions } from 'primereact/dataview'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

Layout of the DataView is managed by the PrimeFlex that can be downloaded from npm.

+

+ Layout of the DataView is managed by the PrimeFlex that can be downloaded from npm. +

- -{` + + {` npm install primeflex `} - + -

DataView requires a collection of items as its value and one or more templates depending on the layout mode e.g. list and grid.

+

+ DataView requires a collection of items as its value and one or more templates depending on the layout mode e.g. list and grid.{' '} +

-

DataView has two layout modes; list and grid where itemTemplate function is called by passing the item to render along with the layout mode.

- -{` +

+ DataView has two layout modes; list and grid where itemTemplate function is called by passing the item to render along with the layout mode. +

+ + {` const itemTemplate = (data, layout) => { if (layout === 'list') { return ( @@ -718,22 +723,22 @@ const itemTemplate = (data, layout) => { } `} - +
- -{` + + {` `} - +
DataViewLayoutOptions

DataViewLayoutOptions is a helper component to choose between layout modes. This component is used in controlled manner to manage the state of layout orientation.

- -{` + + {` setLayout(e.value)} /> `} - +
Properties of DataViewLayoutOptions
@@ -794,7 +799,8 @@ const itemTemplate = (data, layout) => {
- @@ -804,31 +810,39 @@ const itemTemplate = (data, layout) => {
Paginator
-

Pagination is enabled by setting paginator property to true, rows attribute defines the number of rows per page and pageLinks specify the the number - of page links to display. Visit the paginator paginator component for more information about the available properties.

+

+ Pagination is enabled by setting paginator property to true, rows attribute defines the number of rows per page and pageLinks specify the the number of page links to display. Visit the paginator{' '} + paginator component for more information about the available properties. +

-

Pagination can either be used in Controlled or Uncontrolled manner. In controlled mode, first and onPage properties needs to be defined to control the pagination state.

+

+ Pagination can either be used in Controlled or Uncontrolled manner. In controlled mode, first and onPage properties needs to be defined to control the pagination state. +

- -{` + + {` setFirst(e.first)}> `} - - -

In uncontrolled mode, only paginator property needs to be enabled. Initial page state can be still be provided using the first property in uncontrolled mode however - it is evaluated at initial rendering and ignored in further updates. If you programmatically need to update the paginator, prefer to use the component as controlled.

- -{` + + +

+ In uncontrolled mode, only paginator property needs to be enabled. Initial page state can be still be provided using the first property in uncontrolled mode however it is evaluated at initial rendering and + ignored in further updates. If you programmatically need to update the paginator, prefer to use the component as controlled. +

+ + {` `} - +
Sorting
-

sortField and sortOrder properties are available for sorting functionality, for flexibility there is no built-in UI available so that a custom UI can be used for the sorting element. - Here is an example that uses a dropdown where simply updating the sortField-sortOrder bindings of the DataView initiates sorting.

+

+ sortField and sortOrder properties are available for sorting functionality, for flexibility there is no built-in UI available so that a custom UI can be used for the sorting element. Here is an example that uses + a dropdown where simply updating the sortField-sortOrder bindings of the DataView initiates sorting. +

- -{` + + {` const sortOptions = [ {label: 'Price High to Low', value: '!price'}, {label: 'Price Low to High', value: 'price'}, @@ -845,10 +859,10 @@ const header = ( `} - + - -{` + + {` const onSortChange = (event) => { const value = event.value; @@ -864,12 +878,14 @@ const onSortChange = (event) => { } } `} - +
Lazy Loading
-

Lazy loading is useful to deal with huge datasets, in order to implement lazy loading use the pagination in controlled mode and utilize the onPage callback to load your data from the backend. - Pagination in this case needs to display the logical number of records so bind this value to the totalRecords property so that paginator can display itself according to the total records although you'd only - need to load the data of the current page. Refer to DataTable lazy loading for a sample implementation.

+

+ Lazy loading is useful to deal with huge datasets, in order to implement lazy loading use the pagination in controlled mode and utilize the onPage callback to load your data from the backend. Pagination in this case + needs to display the logical number of records so bind this value to the totalRecords property so that paginator can display itself according to the total records although you'd only need to load the data of the current + page. Refer to DataTable lazy loading for a sample implementation. +

Properties
@@ -959,7 +975,9 @@ const onSortChange = (event) => {
- + @@ -995,7 +1013,9 @@ const onSortChange = (event) => { - + @@ -1053,18 +1073,20 @@ const onSortChange = (event) => {
tab + tab + Moves through the headers.
enter + enter + Sorts the column.
space + space + Sorts the column.
tab + tab + Moves through the elements inside the popup.
escape + escape + Hides the popup.
tab + tab + Moves focus to the first selected row, if there is none then first row receives the focus.
up arrow + up arrow + Moves focus to the previous row.
down arrow + down arrow + Moves focus to the next row.
enter + enter + Toggles the selected state of the focused row depending on the metaKeySelection setting.
space + space + Toggles the selected state of the focused row depending on the metaKeySelection setting.
home + home + Moves focus to the first row.
end + end + Moves focus to the last row.
shift + down arrow + shift + down arrow + Moves focus to the next row and toggles the selection state.
shift + up arrow + shift + up arrow + Moves focus to the previous row and toggles the selection state.
shift + space + shift + space + Selects the rows between the most recently selected row and the focused row.
control + shift + home + control + shift + home + Selects the focused rows and all the options up to the first one.
control + shift + end + control + shift + end + Selects the focused rows and all the options down to the last one.
control + a + control + a + Selects all rows.
onChangeevent.originalEvent: browser event
+
+ event.originalEvent: browser event
event.value = layout mode e.g. "list" or "grid"
Callback to invoke when layout mode is changed. paginatorTemplate string|object FirstPageLink PrevPageLink PageLinks NextPageLink LastPageLink RowsPerPageDropdownTemplate of the paginator. For details, refer to the template section of the paginator documentation for further options. + Template of the paginator. For details, refer to the template section of the paginator documentation for further options. +
paginatorLeftpaginatorDropdownAppendTo DOM element | string document.bodyDOM element instance where the overlay panel should be mounted. Valid values are any DOM Element and 'self'. The self value is used to render a component where it is located. + DOM element instance where the overlay panel should be mounted. Valid values are any DOM Element and 'self'. The self value is used to render a component where it is located. +
emptyMessage
- - - - - + + + + + - + event.rows: Number of records to display per page. + @@ -1072,14 +1094,16 @@ const onSortChange = (event) => {
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

NameParametersDescription
NameParametersDescription
onPageevent.originalEvent: Browser event
+
+ event.originalEvent: Browser event
event.first: Index of the first records on page.
- event.rows: Number of records to display per page.
Callback to invoke on pagination.
- - - - + + + + @@ -1111,47 +1135,52 @@ const onSortChange = (event) => {
Accessibility
- -
Screen Reader
-

The container element that wraps the layout options buttons has a group role whereas each button element uses button role and aria-pressed is updated depending on selection state. - Values to describe the buttons are derived from the aria.listView and aria.gridView properties of the locale API respectively.

- -

Refer to paginator accessibility documentation for the paginator of the component.

- -
Keyboard Support
-
-
NameElement
NameElement
- - - - - - - - - - - - - - - - -
KeyFunction
tabMoves focus to the buttons.
spaceToggles the checked state of a button.
-
- + +
Screen Reader
+

+ The container element that wraps the layout options buttons has a group role whereas each button element uses button role and aria-pressed is updated depending on selection state. Values to describe + the buttons are derived from the aria.listView and aria.gridView properties of the locale API respectively. +

+ +

+ Refer to paginator accessibility documentation for the paginator of the component. +

+ +
Keyboard Support
+
+ + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the buttons.
+ space + Toggles the checked state of a button.
+
+
Dependencies

None.

-
- { - useLiveEditorTabs({ name: 'DataViewDemo', sources: sources, service: 'ProductService', data: 'products', extFiles: extFiles }) - } + {useLiveEditorTabs({ name: 'DataViewDemo', sources: sources, service: 'ProductService', data: 'products', extFiles: extFiles })}
); -}) +}); export default DataViewDoc; diff --git a/components/doc/deferredcontent/index.js b/components/doc/deferredcontent/index.js index b4d5ac20ce..e9b8f5d6bf 100644 --- a/components/doc/deferredcontent/index.js +++ b/components/doc/deferredcontent/index.js @@ -5,9 +5,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const DeferredContentDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -70,7 +69,7 @@ export class DeferredContentDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useRef } from 'react'; @@ -123,7 +122,7 @@ const DeferredContentDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useRef } from 'react'; @@ -176,7 +175,7 @@ const DeferredContentDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -236,31 +235,31 @@ const DeferredContentDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { DeferredContent } from 'primereact/deferredcontent'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started

DeferredContent is used as a wrapper element of its content.

- -{` + + {` @@ -270,12 +269,14 @@ import { DeferredContent } from 'primereact/deferredcontent'; `} - +
Callback
-

onLoad callback is useful to initialize the content when it becomes visible on scroll such as loading data.

- -{` +

+ onLoad callback is useful to initialize the content when it becomes visible on scroll such as loading data. +

+ + {` @@ -285,12 +286,10 @@ import { DeferredContent } from 'primereact/deferredcontent'; `} - +
Properties
-
- Component has no attributes. -
+
Component has no attributes.
Events
@@ -316,33 +315,36 @@ import { DeferredContent } from 'primereact/deferredcontent';

Component does not apply any styling.

Accessibility
- -
Screen Reader
-

DeferredContent can be utilized in many use cases as a result no role is enforced, in fact a role may not be necessary if the card is used for presentational purposes only. - Any valid attribute is passed to the container element so you have full control over the roles like landmark and attributes like aria-live. -

- - -{` + +
Screen Reader
+

+ DeferredContent can be utilized in many use cases as a result no role is enforced, in fact a role may not be necessary if the card is used for presentational purposes only. Any valid attribute is passed to the container + element so you have full control over the roles like{' '} + + landmark + {' '} + and attributes like aria-live. +

+ + + {` Content `} - +
-
Keyboard Support
-

Component does not include any interactive elements.

-
+
Keyboard Support
+

Component does not include any interactive elements.

+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'DeferredContentDemo', sources: sources, service: 'ProductService', data: 'products-small' }) - } + {useLiveEditorTabs({ name: 'DeferredContentDemo', sources: sources, service: 'ProductService', data: 'products-small' })}
); -}) +}); export default DeferredContentDoc; diff --git a/components/doc/dialog/index.js b/components/doc/dialog/index.js index c00bc0a163..c0353de70c 100644 --- a/components/doc/dialog/index.js +++ b/components/doc/dialog/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const DialogDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -167,7 +166,7 @@ export class DialogDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -315,7 +314,7 @@ const DialogDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -463,7 +462,7 @@ const DialogDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -614,7 +613,7 @@ const DialogDemo = () => { } ` } - } + }; const extFiles = { 'demo/DialogDemo.css': { @@ -634,30 +633,32 @@ const DialogDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { Dialog } from 'primereact/dialog'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

Dialog is used as a container and visibility is managed with visible property where onHide event is required to update the visibility state.

- -{` +

+ Dialog is used as a container and visibility is managed with visible property where onHide event is required to update the visibility state. +

+ + {`
); -}) +}); export default DialogDoc; diff --git a/components/doc/divider/index.js b/components/doc/divider/index.js index 19790dcef3..b91470af2d 100644 --- a/components/doc/divider/index.js +++ b/components/doc/divider/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const DividerDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -164,7 +163,7 @@ export class DividerDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React from 'react'; @@ -319,7 +318,7 @@ const DividerDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React from 'react'; @@ -474,7 +473,7 @@ const DividerDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -632,51 +631,57 @@ const DividerDemo = () => { } ` } - } + }; return (
-
Import via Module
- -{` +
Import via Module
+ + {` import { Divider } from 'primereact/divider'; `} - +
-
Import via CDN
- -{` +
Import via CDN
+ + {` `} - - -
Getting Started
-

Divider has two orientations defined with the layout property, default is "horizontal" and the alternative is "vertical".

- -{` + + +
Getting Started
+

+ Divider has two orientations defined with the layout property, default is "horizontal" and the alternative is "vertical". +

+ + {`
Content 1
Content 2
`} -
- -
Border Style
-

Style of the border is configured with the type property and supports 3 values; default is "solid" and other possibilities are "dashed" and "dotted".

- -{` + + +
Border Style
+

+ Style of the border is configured with the type property and supports 3 values; default is "solid" and other possibilities are "dashed" and "dotted". +

+ + {`
Content 1
Content 2
`} -
- -
Vertical Divider
-

Vertical divider is enabled by setting the layout property as "vertical".

- -{` + + +
Vertical Divider
+

+ Vertical divider is enabled by setting the layout property as "vertical". +

+ + {`
Content 1
@@ -685,15 +690,15 @@ import { Divider } from 'primereact/divider';
Content 3
`} -
+
-
Content
-

Any content placed inside is rendered within the boundaries of the divider. In addition, location - of the content is configured with the align property. In horizontal layout, alignment options - are "left", "center" and "right" whereas vertical mode supports "top", "center" and "bottom". -

- -{` +
Content
+

+ Any content placed inside is rendered within the boundaries of the divider. In addition, location of the content is configured with the align property. In horizontal layout, alignment options are "left", "center" and + "right" whereas vertical mode supports "top", "center" and "bottom". +

+ + {`
Content 1
@@ -717,121 +722,122 @@ import { Divider } from 'primereact/divider';
Content 4
`} -
- -
Properties
-

Any valid attribute is passed to the root element implicitly, extended properties are as follows;

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
alignstringnullAlignment of the content, options are "left", "center", "right" for horizontal layout - and "top", "center", "bottom" for vertical.
layoutstringhorizontalSpecifies the orientation, valid values are "horizontal" and "vertical".
typeStringsolidBorder style type, default is "solid" and other options are "dashed" and "dotted".
-
+
+ +
Properties
+

Any valid attribute is passed to the root element implicitly, extended properties are as follows;

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDefaultDescription
alignstringnullAlignment of the content, options are "left", "center", "right" for horizontal layout and "top", "center", "bottom" for vertical.
layoutstringhorizontalSpecifies the orientation, valid values are "horizontal" and "vertical".
typeStringsolidBorder style type, default is "solid" and other options are "dashed" and "dotted".
+
-
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameElement
p-dividerContainer element.
p-divider-horizontalContainer element in horizontal layout.
p-divider-verticalContainer element in vertical layout.
p-divider-solidContainer element with solid border.
p-divider-dashedContainer element with dashed border.
p-divider-dottedContainer element with dotted border.
p-divider-leftContainer element with content aligned to left.
p-divider-rightContainer element with content aligned to right.
p-divider-centerContainer element with content aligned to center.
p-divider-bottomContainer element with content aligned to bottom.
p-divider-topContainer element with content aligned to top.
-
+
Styling
+

+ Following is the list of structural style classes, for theming classes visit theming page. +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameElement
p-dividerContainer element.
p-divider-horizontalContainer element in horizontal layout.
p-divider-verticalContainer element in vertical layout.
p-divider-solidContainer element with solid border.
p-divider-dashedContainer element with dashed border.
p-divider-dottedContainer element with dotted border.
p-divider-leftContainer element with content aligned to left.
p-divider-rightContainer element with content aligned to right.
p-divider-centerContainer element with content aligned to center.
p-divider-bottomContainer element with content aligned to bottom.
p-divider-topContainer element with content aligned to top.
+
-
Accessibility
- -
Screen Reader
-

Divider uses a separator role with aria-orientation set to either "horizontal" or "vertical".

- -
Keyboard Support
-

Component does not include any interactive elements.

-
-
Dependencies
-

None.

-
- - { - useLiveEditorTabs({ name: 'DividerDemo', sources: sources }) - } +
Accessibility
+ +
Screen Reader
+

+ Divider uses a separator role with aria-orientation set to either "horizontal" or "vertical". +

+ +
Keyboard Support
+

Component does not include any interactive elements.

+
+
Dependencies
+

None.

+ + + {useLiveEditorTabs({ name: 'DividerDemo', sources: sources })}
); -}) +}); export default DividerDoc; diff --git a/components/doc/dock/index.js b/components/doc/dock/index.js index 398f3dc30c..3ecc57d9ee 100644 --- a/components/doc/dock/index.js +++ b/components/doc/dock/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const DockDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -360,7 +359,7 @@ export class DockDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -707,7 +706,7 @@ export const DockDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -1054,7 +1053,7 @@ export const DockDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -1408,8 +1407,8 @@ const DockDemo = () => { ) } ` - } } + }; const extFiles = { 'demo/DockDemo.css': { @@ -1492,32 +1491,34 @@ const DockDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { Dock } from 'primereact/dock'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

Dock is a navigation component consisting of menuitems. It has a collection of additional options defined by the model property.

+

+ Dock is a navigation component consisting of menuitems. It has a collection of additional options defined by the model property. +

- -{` + + {` export const DockDemo = () => { const imgPath = 'images/dock'; @@ -1547,10 +1548,12 @@ export const DockDemo = () => { ); } `} - +
MenuModel API
-

Dock uses the common MenuModel API to define the items, visit MenuModel API for details.

+

+ Dock uses the common MenuModel API to define the items, visit MenuModel API for details. +

Properties

Any valid attribute is passed to the root element implicitly, extended properties are as follows;

@@ -1618,7 +1621,9 @@ export const DockDemo = () => {
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

@@ -1645,69 +1650,84 @@ export const DockDemo = () => {
Accessibility
- -
Screen Reader
-

Dock component uses the menu role with the aria-orientation and the value to describe the menu can either be provided with aria-labelledby or aria-label props. Each list item has a presentation role - whereas anchor elements have a menuitem role with aria-label referring to the label of the item and aria-disabled defined if the item is disabled.

- -
Keyboard Support
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
KeyFunction
tabAdd focus to the first item if focus moves in to the menu. If the focus is already within the menu, focus moves to the next focusable item in the page tab sequence.
shift + tabAdd focus to the last item if focus moves in to the menu. If the focus is already within the menu, focus moves to the previous focusable item in the page tab sequence.
enterActivates the focused menuitem.
spaceActivates the focused menuitem.
down arrowMoves focus to the next menuitem in vertical layout.
up arrowMoves focus to the previous menuitem in vertical layout.
homeMoves focus to the first menuitem in horizontal layout.
endMoves focus to the last menuitem in horizontal layout.
-
- + +
Screen Reader
+

+ Dock component uses the menu role with the aria-orientation and the value to describe the menu can either be provided with aria-labelledby or aria-label props. Each list item has a{' '} + presentation role whereas anchor elements have a menuitem role with aria-label referring to the label of the item and aria-disabled defined if the item is disabled. +

+ +
Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Add focus to the first item if focus moves in to the menu. If the focus is already within the menu, focus moves to the next focusable item in the page tab sequence.
+ shift + tab + Add focus to the last item if focus moves in to the menu. If the focus is already within the menu, focus moves to the previous focusable item in the page tab sequence.
+ enter + Activates the focused menuitem.
+ space + Activates the focused menuitem.
+ down arrow + Moves focus to the next menuitem in vertical layout.
+ up arrow + Moves focus to the previous menuitem in vertical layout.
+ home + Moves focus to the first menuitem in horizontal layout.
+ end + Moves focus to the last menuitem in horizontal layout.
+
+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'DockDemo', sources: sources, service: 'NodeService, PhotoService', extFiles: extFiles }) - } - + {useLiveEditorTabs({ name: 'DockDemo', sources: sources, service: 'NodeService, PhotoService', extFiles: extFiles })}
- ) -}) + ); +}); export default DockDoc; diff --git a/components/doc/dropdown/index.js b/components/doc/dropdown/index.js index f091e12435..2b6ffeda9d 100644 --- a/components/doc/dropdown/index.js +++ b/components/doc/dropdown/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const DropdownDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -218,7 +217,7 @@ export class DropdownDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect, useRef } from 'react'; @@ -411,7 +410,7 @@ const DropdownDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect, useRef } from 'react'; @@ -604,7 +603,7 @@ const DropdownDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -801,7 +800,7 @@ const DropdownDemo = () => { } ` } - } + }; const extFiles = { 'demo/DropdownDemo.css': { @@ -815,35 +814,38 @@ const DropdownDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { Dropdown } from 'primereact/dropdown'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

SelectButton is used as a controlled component with value and onChange properties along with the options collection. There are two alternatives - of how to define the options property; One way is providing a collection of SelectItem instances having label-value pairs - whereas other way is providing an array of arbitrary objects along with the optionLabel and optionValue properties to specify the label/value field pair. In addition, - options can be simple primitive values such as a string array, in this case no optionLabel or optionValue is necessary.

- -

Options as SelectItems

- -{` +

+ SelectButton is used as a controlled component with value and onChange properties along with the options collection. There are two alternatives of how to define the options property; One way is providing a + collection of SelectItem instances having label-value pairs whereas other way is providing an array of arbitrary objects along with the optionLabel and optionValue properties to specify the label/value + field pair. In addition, options can be simple primitive values such as a string array, in this case no optionLabel or optionValue is necessary. +

+ +

+ Options as SelectItems +

+ + {` const citySelectItems = [ {label: 'New York', value: 'NY'}, {label: 'Rome', value: 'RM'}, @@ -852,17 +854,19 @@ const citySelectItems = [ {label: 'Paris', value: 'PRS'} ]; `} - +
- -{` + + {` setCity(e.value)} placeholder="Select a City"/> `} - + -

Options as any type

- -{` +

+ Options as any type +

+ + {` const cities = [ {name: 'New York', code: 'NY'}, {name: 'Rome', code: 'RM'}, @@ -871,42 +875,48 @@ const cities = [ {name: 'Paris', code: 'PRS'} ]; `} - +
- -{` + + {` setCity(e.value)} placeholder="Select a City"/> setCity(e.value)} placeholder="Select a City"/> `} - -

When optionValue is not defined, value of an option refers to the option object itself.

+
+

+ When optionValue is not defined, value of an option refers to the option object itself. +

Placeholder

Common pattern is providing an empty option as the placeholder when using native selects, however Dropdown has built-in support using the placeholder option so it is suggested to use it instead of creating an empty option.

Filtering
-

Options can be filtered using an input field in the overlay by enabling the filter property. By default filtering is done against - label of the items and filterBy property is available to choose one or more properties of the options. In addition filterMatchMode can be utilized - to define the filtering algorithm, valid options are "contains" (default), "startsWith", "endsWith", "equals" and "notEquals".

+

+ Options can be filtered using an input field in the overlay by enabling the filter property. By default filtering is done against label of the items and filterBy property is available to choose one or more + properties of the options. In addition filterMatchMode can be utilized to define the filtering algorithm, valid options are "contains" (default), "startsWith", "endsWith", "equals" and "notEquals". +

- -{` + + {` setSelectedCountry(e.value)} optionLabel="name" filter showClear filterBy="name" placeholder="Select a Country" itemTemplate={countryOptionTemplate} /> `} - +
Custom Content
-

Label of an option is used as the display text of an item by default, for custom content support define an itemTemplate function that gets the option instance as a parameter and returns the content. For custom filter support define a filterTemplate function that gets the option instance as a parameter and returns the content for the filter element.

- -{` +

+ Label of an option is used as the display text of an item by default, for custom content support define an itemTemplate function that gets the option instance as a parameter and returns the content. For custom filter + support define a filterTemplate function that gets the option instance as a parameter and returns the content for the filter element. +

+ + {` setSelectedCountry(e.value)} optionLabel="name" placeholder="Select a Country" valueTemplate={selectedCountryTemplate} itemTemplate={countryOptionTemplate} filter filterTemplate={filterTemplate}/> `} - +
- -{` + + {` const [filterValue, setFilterValue] = useState(''); const filterInputRef = useRef(); @@ -959,12 +969,14 @@ const myFilterFunction = (event, options) => { options.filter(event); } `} - +
Grouping
-

Options groups are specified with the optionGroupLabel and optionGroupChildren properties.

- -{` +

+ Options groups are specified with the optionGroupLabel and optionGroupChildren properties. +

+ + {` const groupedCities = [ { label: 'Germany', code: 'DE', @@ -995,13 +1007,13 @@ const groupedCities = [ } ]; `} - +
- -{` + + {` setSelectedGroupedCity(e.value)} optionLabel="label" optionGroupLabel="label" optionGroupChildren="items" /> `} - +
SelectItem API
@@ -1233,7 +1245,9 @@ const groupedCities = [ - + @@ -1323,7 +1337,13 @@ const groupedCities = [ - + @@ -1341,7 +1361,9 @@ const groupedCities = [ - +
appendTo DOM element | string document.bodyDOM element instance where the overlay panel should be mounted. Valid values are any DOM Element and 'self'. The self value is used to render a component where it is located. + DOM element instance where the overlay panel should be mounted. Valid values are any DOM Element and 'self'. The self value is used to render a component where it is located. +
tabIndextransitionOptions object nullThe properties of CSSTransition can be customized, except for "nodeRef" and "in" properties. + The properties of{' '} + + CSSTransition + {' '} + can be customized, except for "nodeRef" and "in" properties. +
dropdownIconvirtualScrollerOptions object nullWhether to use the virtualScroller feature. The properties of VirtualScroller component can be used like an object in it. + Whether to use the virtualScroller feature. The properties of VirtualScroller component can be used like an object in it. +
@@ -1360,8 +1382,10 @@ const groupedCities = [ onChange - event.originalEvent: Original event
- event.value: Value of the checkbox + + event.originalEvent: Original event
+ event.value: Value of the checkbox{' '} + Callback to invoke on value change @@ -1386,8 +1410,10 @@ const groupedCities = [ onFilter - event.originalEvent: Original event
- event.filter: Value of the filter input + + event.originalEvent: Original event
+ event.filter: Value of the filter input + Callback to invoke when the value is filtered. @@ -1430,7 +1456,9 @@ const groupedCities = [
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

@@ -1485,147 +1513,187 @@ const groupedCities = [
Accessibility
- -
Screen Reader
-

Value to describe the component can either be provided with aria-labelledby or aria-label props. The dropdown element has a combobox role - in addition to aria-haspopup and aria-expanded attributes. If the editable option is enabled aria-autocomplete is also added. - The relation between the combobox and the popup is created with aria-controls and aria-activedescendant attribute is used - to instruct screen reader which option to read during keyboard navigation within the popup list.

-

The popup list has an id that refers to the aria-controls attribute of the combobox element and uses listbox as the role. Each list item has an option role, an id to match the aria-activedescendant of the input element along with aria-label, aria-selected and aria-disabled attributes.

- -

If filtering is enabled, filterInputProps can be defined to give aria-* props to the filter input element.

- -{` + +
Screen Reader
+

+ Value to describe the component can either be provided with aria-labelledby or aria-label props. The dropdown element has a combobox role in addition to aria-haspopup and aria-expanded{' '} + attributes. If the editable option is enabled aria-autocomplete is also added. The relation between the combobox and the popup is created with aria-controls and aria-activedescendant attribute is used + to instruct screen reader which option to read during keyboard navigation within the popup list. +

+

+ The popup list has an id that refers to the aria-controls attribute of the combobox element and uses listbox as the role. Each list item has an option role, an id to match the{' '} + aria-activedescendant of the input element along with aria-label, aria-selected and aria-disabled attributes. +

+ +

+ If filtering is enabled, filterInputProps can be defined to give aria-* props to the filter input element. +

+ + {` Options `} - -
Closed State Keyboard Support
-
-
- - - - - - - - - - - - - - - - - - - - - - - - -
KeyFunction
tabMoves focus to the dropdown element.
spaceOpens the popup and moves visual focus to the selected option, if there is none then first option receives the focus.
down arrowOpens the popup and moves visual focus to the selected option, if there is none then first option receives the focus.
up arrowOpens the popup and moves visual focus to the selected option, if there is none then last option receives the focus.
-
+ +
Closed State Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the dropdown element.
+ space + Opens the popup and moves visual focus to the selected option, if there is none then first option receives the focus.
+ down arrow + Opens the popup and moves visual focus to the selected option, if there is none then first option receives the focus.
+ up arrow + Opens the popup and moves visual focus to the selected option, if there is none then last option receives the focus.
+
-
Popup Keyboard Support
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
KeyFunction
tabMoves focus to the next focusable element in the popup, if there is none then first focusable element receives the focus.
shift + tabMoves focus to the previous focusable element in the popup, if there is none then last focusable element receives the focus.
enterSelects the focused option and closes the popup.
spaceSelects the focused option and closes the popup.
escapeCloses the popup, moves focus to the dropdown element.
down arrowMoves focus to the next option, if there is none then visual focus does not change.
up arrowMoves focus to the previous option, if there is none then visual focus does not change.
right arrowIf the dropdown is editable, removes the visual focus from the current option and moves input cursor to one character left.
left arrowIf the dropdown is editable, removes the visual focus from the current option and moves input cursor to one character right.
homeIf the dropdown is editable, moves input cursor at the end, if not then moves focus to the first option.
endIf the dropdown is editable, moves input cursor at the beginning, if not then moves focus to the last option.
any printable characterMoves focus to the option whose label starts with the characters being typed if dropdown is not editable.
-
+
Popup Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the next focusable element in the popup, if there is none then first focusable element receives the focus.
+ shift + tab + Moves focus to the previous focusable element in the popup, if there is none then last focusable element receives the focus.
+ enter + Selects the focused option and closes the popup.
+ space + Selects the focused option and closes the popup.
+ escape + Closes the popup, moves focus to the dropdown element.
+ down arrow + Moves focus to the next option, if there is none then visual focus does not change.
+ up arrow + Moves focus to the previous option, if there is none then visual focus does not change.
+ right arrow + If the dropdown is editable, removes the visual focus from the current option and moves input cursor to one character left.
+ left arrow + If the dropdown is editable, removes the visual focus from the current option and moves input cursor to one character right.
+ home + If the dropdown is editable, moves input cursor at the end, if not then moves focus to the first option.
+ end + If the dropdown is editable, moves input cursor at the beginning, if not then moves focus to the last option.
+ any printable character + Moves focus to the option whose label starts with the characters being typed if dropdown is not editable.
+
-
Filter Input Keyboard Support
-
- - - - - - - - - - - - - - - - - -
KeyFunction
enterCloses the popup and moves focus to the dropdown element.
escapeCloses the popup and moves focus to the dropdown element.
-
- +
Filter Input Keyboard Support
+
+ + + + + + + + + + + + + + + + + +
KeyFunction
+ enter + Closes the popup and moves focus to the dropdown element.
+ escape + Closes the popup and moves focus to the dropdown element.
+
+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'DropdownDemo', sources: sources, extFiles: extFiles }) - } + {useLiveEditorTabs({ name: 'DropdownDemo', sources: sources, extFiles: extFiles })}
- ) -}) + ); +}); export default DropdownDoc; diff --git a/components/doc/editor/index.js b/components/doc/editor/index.js index 66e89b4b8d..63cbbbfc42 100644 --- a/components/doc/editor/index.js +++ b/components/doc/editor/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const EditorDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -52,7 +51,7 @@ export class EditorDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -88,7 +87,7 @@ const EditorDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -124,7 +123,7 @@ const EditorDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -165,41 +164,46 @@ const EditorDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { Editor } from 'primereact/editor'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

Editor is used as a controlled component with value and onTextChange properties.

+

+ Editor is used as a controlled component with value and onTextChange properties. +

- -{` + + {` setText(e.htmlValue)} /> `} - +
Toolbar
-

Editor provides a default toolbar with common options, to customize it define your elements with the headerTemplate. Refer to Quill documentation for available controls.

+

+ Editor provides a default toolbar with common options, to customize it define your elements with the headerTemplate. Refer to Quill documentation for available + controls. +

- -{` + + {` const header = ( @@ -210,7 +214,7 @@ const header = ( setText(e.htmlValue)} headerTemplate={header}/> `} - +
Properties

Any valid attribute is passed to the root element implicitly, extended properties are as follows;

@@ -265,13 +269,17 @@ const header = ( modules object null - Modules configuration, see here for available options. + + Modules configuration, see here for available options. + formats string[] null - Whitelist of formats to display, see here for available options. + + Whitelist of formats to display, see here for available options. + headerTemplate @@ -296,17 +304,27 @@ const header = ( onTextChange - event.delta: Representation of the change.
- event.source: Source of change. Will be either "user" or "api".
- event.htmlValue: Current value as html.
- event.textValue: Current value as text.
+ + event.delta: Representation of the change. +
+ event.source: Source of change. Will be either "user" or "api". +
+ event.htmlValue: Current value as html. +
+ event.textValue: Current value as text. +
+ Callback to invoke when text of editor changes. onSelectionChange - event.range: Object with index and length keys indicating where the selection exists.
- event.oldRange: Object with index and length keys indicating where the previous selection was.
- event.source: Source of change. Will be either "user" or "api". + + event.range: Object with index and length keys indicating where the selection exists. +
+ event.oldRange: Object with index and length keys indicating where the previous selection was. +
+ event.source: Source of change. Will be either "user" or "api". + Callback to invoke when selected text of editor changes. @@ -318,10 +336,14 @@ const header = (
-

Refer to Quill documentation for more information.

+

+ Refer to Quill documentation for more information. +

Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

@@ -348,26 +370,28 @@ const header = (
Accessibility
- -

Quill performs generally well in terms of accessibility. The elements in the toolbar can be tabbed and have the necessary ARIA roles/attributes for screen readers. One known limitation is the lack of arrow key support - for dropdowns in the toolbar that may be overcome with a custom toolbar.

-
+ +

+ Quill performs generally well in terms of accessibility. The elements in the toolbar can be tabbed and have the necessary ARIA roles/attributes for screen readers. One known limitation is the lack of arrow key support for{' '} + dropdowns in the toolbar that may be overcome with a custom toolbar. +

+
Dependencies
-

Quill Editor 1.3+.

+

+ Quill Editor 1.3+. +

Resources of quill needs to be added to your application.

- -{` + + {` npm install quill `} - + - { - useLiveEditorTabs({ name: 'EditorDemo', sources: sources, dependencies: { "quill": "1.3.7" } }) - } + {useLiveEditorTabs({ name: 'EditorDemo', sources: sources, dependencies: { quill: '1.3.7' } })} - ) -}) + ); +}); export default EditorDoc; diff --git a/components/doc/fieldset/index.js b/components/doc/fieldset/index.js index dce9f416d5..957f7d743a 100644 --- a/components/doc/fieldset/index.js +++ b/components/doc/fieldset/index.js @@ -5,10 +5,9 @@ import { useLiveEditorTabs } from '../common/liveeditor'; import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; -export const FieldsetDoc = memo(() => { - +export const FieldsetDoc = memo(() => { const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -42,7 +41,7 @@ export class FieldsetDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React from 'react'; @@ -73,7 +72,7 @@ const FieldsetDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React from 'react'; @@ -104,7 +103,7 @@ const FieldsetDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -138,31 +137,31 @@ const FieldsetDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { Fieldset } from 'primereact/fieldset'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started

Panel is a container component that accepts content as its children.

- -{` + + {`

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. @@ -170,16 +169,22 @@ import { Fieldset } from 'primereact/fieldset'; cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

`} -
+
-

Instead of simple strings, legend propery also can be used to provide custom content as JSX.

+

+ Instead of simple strings, legend propery also can be used to provide custom content as JSX. +

Toggleable
-

Content of the fieldset can be expanded and collapsed using toggleable option. A toggleable fieldset can either be used as a Controlled or Uncontrolled component.

+

+ Content of the fieldset can be expanded and collapsed using toggleable option. A toggleable fieldset can either be used as a Controlled or Uncontrolled component. +

-

In controlled mode, collapsed and onToggle properties need to be defined to control the collapsed state.

- -{` +

+ In controlled mode, collapsed and onToggle properties need to be defined to control the collapsed state. +

+ + {`
this.setState({panelCollapsed: e.value})}>

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. @@ -187,13 +192,15 @@ import { Fieldset } from 'primereact/fieldset'; cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

`} -
+
-

In uncontrolled mode, only toggleable property needs to be enabled. Initial state can be still be provided using the collapsed property in uncontrolled mode however - it is evaluated at initial rendering and ignored in further updates. If you programmatically need to update the collapsed state, prefer to use the component as controlled.

+

+ In uncontrolled mode, only toggleable property needs to be enabled. Initial state can be still be provided using the collapsed property in uncontrolled mode however it is evaluated at initial rendering and + ignored in further updates. If you programmatically need to update the collapsed state, prefer to use the component as controlled. +

- -{` + + {`

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. @@ -201,7 +208,7 @@ import { Fieldset } from 'primereact/fieldset'; cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

`} -
+
Properties
@@ -255,7 +262,13 @@ import { Fieldset } from 'primereact/fieldset';
- +
transitionOptions object nullThe properties of CSSTransition can be customized, except for "nodeRef" and "in" properties. + The properties of{' '} + + CSSTransition + {' '} + can be customized, except for "nodeRef" and "in" properties. +
@@ -284,9 +297,10 @@ import { Fieldset } from 'primereact/fieldset'; onToggle - event.originalEvent: browser event
- event.value: Collapsed state as a boolean - + + event.originalEvent: browser event
+ event.value: Collapsed state as a boolean + Callback to invoke when a tab gets expanded. @@ -299,7 +313,9 @@ import { Fieldset } from 'primereact/fieldset';
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

@@ -330,55 +346,63 @@ import { Fieldset } from 'primereact/fieldset';
Accessibility
- -
Screen Reader
-

Fieldset component uses the semantic fieldset element. When toggleable option is enabled, a clickable element with button role is included inside the legend element, this button - has aria-controls to define the id of the content section along with aria-expanded for the visibility state. The value to read the button - defaults to the value of the legend property and can be customized by defining an aria-label or aria-labelledby via the toggleButtonProps property.

-

The content uses region, defines an id that matches the aria-controls of the content toggle button and aria-labelledby referring to the id of the header.

+ +
Screen Reader
+

+ Fieldset component uses the semantic fieldset element. When toggleable option is enabled, a clickable element with button role is included inside the legend element, this button has{' '} + aria-controls to define the id of the content section along with aria-expanded for the visibility state. The value to read the button defaults to the value of the legend property and can be customized + by defining an aria-label or aria-labelledby via the toggleButtonProps property. +

+

+ The content uses region, defines an id that matches the aria-controls of the content toggle button and aria-labelledby referring to the id of the header. +

-
Content Toggle Button Keyboard Support
-
-
- - - - - - - - - - - - - - - - - - - - - - - - -
KeyFunction
tabMoves focus to the next the focusable element in the page tab sequence.
shift + tabMoves focus to the previous the focusable element in the page tab sequence.
enterToggles the visibility of the content.
spaceToggles the visibility of the content.
-
- +
Content Toggle Button Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the next the focusable element in the page tab sequence.
+ shift + tab + Moves focus to the previous the focusable element in the page tab sequence.
+ enter + Toggles the visibility of the content.
+ space + Toggles the visibility of the content.
+
+
Dependencies

None.

- - { - useLiveEditorTabs({ name: 'FieldsetDemo', sources: sources }) - } + {useLiveEditorTabs({ name: 'FieldsetDemo', sources: sources })} ); - -}) +}); export default FieldsetDoc; diff --git a/components/doc/fileupload/index.js b/components/doc/fileupload/index.js index f49dab5669..f9aa94288f 100644 --- a/components/doc/fileupload/index.js +++ b/components/doc/fileupload/index.js @@ -5,9 +5,8 @@ import { useLiveEditorTabs } from '../common/liveeditor'; import { CodeHighlight } from '../common/codehighlight'; const FileUploadDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -176,7 +175,7 @@ export class FileUploadDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useRef, useState } from 'react'; @@ -321,7 +320,7 @@ export const FileUploadDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useRef, useState } from 'react'; @@ -466,7 +465,7 @@ export const FileUploadDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -615,8 +614,8 @@ const FileUploadDemo = () => { ) } ` - } - }; + } + }; const extFiles = { 'public/upload.php': { @@ -627,119 +626,129 @@ echo '

Fake Upload Process

'; ?> ` } - } + }; return (
Import via Module
- -{` + + {` import { FileUpload } from 'primereact/fileupload'; `} - +
Import via CDN
- -{` + + {` `} - - -
Getting Started
-

FileUpload requires a url property as the upload target and a name to identify the files at backend.

- -{` + + +
Getting Started
+

+ FileUpload requires a url property as the upload target and a name to identify the files at backend. +

+ + {` `} - +
-
Multiple Uploads
-

Only one file can be selected at a time by default, to allow selecting multiple files at once enable multiple option.

+
Multiple Uploads
+

+ Only one file can be selected at a time by default, to allow selecting multiple files at once enable multiple option. +

- -{` + + {` `} - + -
DragDrop
-

File selection can also be done by dragging and dropping from the filesystem to the content section of the component.

+
DragDrop
+

File selection can also be done by dragging and dropping from the filesystem to the content section of the component.

-
Auto Uploads
-

When auto property is enabled, upload begins as soon as file selection is completed or a file is dropped on the drop area.

+
Auto Uploads
+

+ When auto property is enabled, upload begins as soon as file selection is completed or a file is dropped on the drop area. +

- -{` + + {` `} - - -
File Types
-

Selectable file types can be restricted with accept property, example below only allows images to be uploaded. Read more about other possible values here.

- -{` + + +
File Types
+

+ Selectable file types can be restricted with accept property, example below only allows images to be uploaded. Read more about other possible values{' '} + here. +

+ + {` `} - +
-
File Size
-

Maximium file size can be restricted using maxFileSize property defined in bytes.

+
File Size
+

+ Maximium file size can be restricted using maxFileSize property defined in bytes. +

- -{` + + {` `} - - -

In order to customize the default messages use invalidFileSizeMessageSummary and invalidFileSizeMessageDetail options. In summary messages, {0} placeholder refers to the filename and in detail message, the file size.

-
    -
  • - invalidFileSizeMessageSummary: '{0}: Invalid file size, ' -
  • -
  • - invalidFileSizeMessageDetail: string = 'maximum upload size is {0}.' -
  • -
- -
Request Customization
-

XHR request to upload the files can be customized using the onBeforeUpload callback that passes the xhr instance and FormData object as event parameters.

- -
Basic UI
-

FileUpload basic mode provides a simpler UI as an alternative to advanced mode.

- - -{` + + +

+ In order to customize the default messages use invalidFileSizeMessageSummary and invalidFileSizeMessageDetail options. In summary messages, {0} placeholder refers to the filename and in detail message, the file + size. +

+
    +
  • invalidFileSizeMessageSummary: '{0}: Invalid file size, '
  • +
  • invalidFileSizeMessageDetail: string = 'maximum upload size is {0}.'
  • +
+ +
Request Customization
+

XHR request to upload the files can be customized using the onBeforeUpload callback that passes the xhr instance and FormData object as event parameters.

+ +
Basic UI
+

FileUpload basic mode provides a simpler UI as an alternative to advanced mode.

+ + + {` `} - +
-
Custom Upload
-

Uploading implementation can be overriden by enabling customUpload property and defining a custom upload handler event.

- -{` +
Custom Upload
+

Uploading implementation can be overriden by enabling customUpload property and defining a custom upload handler event.

+ + {` `} - - -{` + + + {` const myUploader = (event) => { //event.files == files to upload } `} - +
-
ItemTemplate
-

Used to create custom item elements in the container.

- -{` +
ItemTemplate
+

Used to create custom item elements in the container.

+ + {` `} - - -{` + + + {` const customItemTemplate = (file, props) => { // file: Current file object. // options.onRemove: Event used to remove current file in the container. @@ -754,24 +763,24 @@ const customItemTemplate = (file, props) => { // options.props: component props. } `} - +
-
Button Options
-

Used to customize choose, upload and cancel buttons.

- -{` +
Button Options
+

Used to customize choose, upload and cancel buttons.

+ + {` const chooseOptions = {label: 'Choose', icon: 'pi pi-fw pi-plus'}; const uploadOptions = {label: 'Uplaod', icon: 'pi pi-upload', className: 'p-button-success'}; const cancelOptions = {label: 'Cancel', icon: 'pi pi-times', className: 'p-button-danger'}; `} - - -{` + + + {` `} - - -{` + + + {` const buttonOptions = { // label: The label of button. // icon: The icon of button. @@ -779,353 +788,371 @@ const buttonOptions = { // style: Style of button. } `} - - -
Properties
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
namestringnullName of the request parameter to identify the files at backend.
urlstringnullRemote url to upload the files.
modestringadvancedDefines the UI of the component, possible values are "advanced" and "basic".
multiplebooleanfalseUsed to select multiple files at once from file dialog.
acceptstringfalsePattern to restrict the allowed file types such as "image/*".
disabledbooleanfalseDisables the upload functionality.
autobooleanfalseWhen enabled, upload begins automatically after selection is completed.
maxFileSizenumbernullMaximum file size allowed in bytes.
invalidFileSizeMessageSummarystring"{0}: Invalid file size, "Summary message of the invalid fize size.
invalidFileSizeMessageDetailstring"maximum upload size is {0}."Detail message of the invalid fize size.
styleobjectnullInline style of the component.
classNamestringnullStyle class of the component.
withCredentialsbooleanfalseCross-site Access-Control requests should be made using credentials such as cookies, authorization headers or TLS client certificates.
previewWidthnumber50Width of the image thumbnail in pixels.
chooseLabelstringnullLabel of the choose button. Defaults to global value in Locale configuration.
uploadLabelstringnullLabel of the upload button. Defaults to global value in Locale configuration.
cancelLabelstringnullLabel of the cancel button. Defaults to global value in Locale configuration.
chooseOptionsobject (OptionsType)nullOptions used to customize the choose button. These options have "label", "icon", "className" and "style" properties.
uploadOptionsobject (OptionsType)nullOptions used to customize the upload button. These options have "label", "icon", "className" and "style" properties.
cancelOptionsobject (OptionsType)nullOptions used to customize the cancel button. These options have "label", "icon", "className" and "style" properties.
customUploadbooleanfalseWhether to use the default upload or a manual implementation defined in uploadHandler callback.
emptyTemplateanynullThe template of empty content in the container.
progressBarTemplateanynullThe template of progressBar content in the container.
itemTemplateanynullThe template of each item content in the container.
headerTemplateanynullThe template of the header.
headerStyleobjectnullInline style of the header.
headerClassNamestringnullStyle class of the header.
contentStyleobjectnullInline style of the content.
contentClassNamestringnullStyle class of the content.
-
- -
Events
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameParametersDescription
onBeforeUploadevent.xhr: XmlHttpRequest instance.
- event.formData: FormData object.
Callback to invoke before file upload begins to customize the request - such as post parameters before the files.
onBeforeSendevent.xhr: XmlHttpRequest instance.
- event.formData: FormData object.
Callback to invoke before file send begins to customize the request - such as adding headers.
onBeforeDropevent: DragEvent instance.Callback to invoke before files dropped. Return false from callback to prevent drop.
onBeforeSelectevent.originalEvent: Original browser event.
- event.target.files: List of selected files.
Callback to invoke before files are selected. Return false from callback to prevent selection.
onUploadevent.xhr: XmlHttpRequest instance.
- event.files: Uploaded files.
Callback to invoke when file upload is complete.
onErrorevent.xhr: XmlHttpRequest instance.
- event.files: Files that are not uploaded.
Callback to invoke if file upload fails.
onClear-Callback to invoke when files in queue are removed without uploading.
onSelectevent.originalEvent: Original browser event.
- event.target.files: List of selected files.
Callback to invoke when files are selected.
onProgressevent.originalEvent: Original browser event.
- event.progress: Calculated progress value.
Callback to invoke when files are being uploaded.
onValidationFailfile: Invalid file.Callback to invoke when a validation file fails.
uploadHandlerevent.files: List of selected files.
- event.options: Handler options.
Callback to invoke in custom upload mode to upload the files manually.
onRemoveevent.originalEvent: Original browser event.
- event.file: Selected file.
Callback to invoke when a file is removed without uploading using clear button of a file.
-
- -
Methods
-
- - - - - - - - - - - - - - - - - - - - -
NameParametersDescription
upload-Uploads the selected files.
clear-Clears the files list.
-
- -
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - -
NameElement
p-fileuploadContainer element.
p-fileupload-buttonbarHeader containing the buttons.
p-fileupload-contentContent section.
- -
Dependencies
-

None.

-
- +
+ +
Properties
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
namestringnullName of the request parameter to identify the files at backend.
urlstringnullRemote url to upload the files.
modestringadvancedDefines the UI of the component, possible values are "advanced" and "basic".
multiplebooleanfalseUsed to select multiple files at once from file dialog.
acceptstringfalsePattern to restrict the allowed file types such as "image/*".
disabledbooleanfalseDisables the upload functionality.
autobooleanfalseWhen enabled, upload begins automatically after selection is completed.
maxFileSizenumbernullMaximum file size allowed in bytes.
invalidFileSizeMessageSummarystring"{0}: Invalid file size, "Summary message of the invalid fize size.
invalidFileSizeMessageDetailstring"maximum upload size is {0}."Detail message of the invalid fize size.
styleobjectnullInline style of the component.
classNamestringnullStyle class of the component.
withCredentialsbooleanfalseCross-site Access-Control requests should be made using credentials such as cookies, authorization headers or TLS client certificates.
previewWidthnumber50Width of the image thumbnail in pixels.
chooseLabelstringnullLabel of the choose button. Defaults to global value in Locale configuration.
uploadLabelstringnullLabel of the upload button. Defaults to global value in Locale configuration.
cancelLabelstringnullLabel of the cancel button. Defaults to global value in Locale configuration.
chooseOptionsobject (OptionsType)nullOptions used to customize the choose button. These options have "label", "icon", "className" and "style" properties.
uploadOptionsobject (OptionsType)nullOptions used to customize the upload button. These options have "label", "icon", "className" and "style" properties.
cancelOptionsobject (OptionsType)nullOptions used to customize the cancel button. These options have "label", "icon", "className" and "style" properties.
customUploadbooleanfalseWhether to use the default upload or a manual implementation defined in uploadHandler callback.
emptyTemplateanynullThe template of empty content in the container.
progressBarTemplateanynullThe template of progressBar content in the container.
itemTemplateanynullThe template of each item content in the container.
headerTemplateanynullThe template of the header.
headerStyleobjectnullInline style of the header.
headerClassNamestringnullStyle class of the header.
contentStyleobjectnullInline style of the content.
contentClassNamestringnullStyle class of the content.
+
+ +
Events
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameParametersDescription
onBeforeUpload + event.xhr: XmlHttpRequest instance.
+ event.formData: FormData object. +
Callback to invoke before file upload begins to customize the request such as post parameters before the files.
onBeforeSend + event.xhr: XmlHttpRequest instance.
+ event.formData: FormData object. +
Callback to invoke before file send begins to customize the request such as adding headers.
onBeforeDropevent: DragEvent instance.Callback to invoke before files dropped. Return false from callback to prevent drop.
onBeforeSelect + event.originalEvent: Original browser event.
+ event.target.files: List of selected files. +
Callback to invoke before files are selected. Return false from callback to prevent selection.
onUpload + event.xhr: XmlHttpRequest instance. +
+ event.files: Uploaded files. +
Callback to invoke when file upload is complete.
onError + event.xhr: XmlHttpRequest instance. +
+ event.files: Files that are not uploaded. +
Callback to invoke if file upload fails.
onClear-Callback to invoke when files in queue are removed without uploading.
onSelect + event.originalEvent: Original browser event.
+ event.target.files: List of selected files. +
Callback to invoke when files are selected.
onProgress + event.originalEvent: Original browser event.
+ event.progress: Calculated progress value. +
Callback to invoke when files are being uploaded.
onValidationFailfile: Invalid file.Callback to invoke when a validation file fails.
uploadHandler + event.files: List of selected files. +
+ event.options: Handler options. +
Callback to invoke in custom upload mode to upload the files manually.
onRemove + event.originalEvent: Original browser event.
+ event.file: Selected file. +
Callback to invoke when a file is removed without uploading using clear button of a file.
+
+ +
Methods
+
+ + + + + + + + + + + + + + + + + + + + +
NameParametersDescription
upload-Uploads the selected files.
clear-Clears the files list.
+
+ +
Styling
+

+ Following is the list of structural style classes, for theming classes visit theming page. +

+
+ + + + + + + + + + + + + + + + + + + + + +
NameElement
p-fileuploadContainer element.
p-fileupload-buttonbarHeader containing the buttons.
p-fileupload-contentContent section.
+ +
Dependencies
+

None.

+
- { - useLiveEditorTabs({ name: 'FileUploadDemo', sources: sources, extFiles: extFiles }) - } + {useLiveEditorTabs({ name: 'FileUploadDemo', sources: sources, extFiles: extFiles })}
); -}) +}); export default FileUploadDoc; diff --git a/components/doc/floatlabel/index.js b/components/doc/floatlabel/index.js index 4f12e69041..3c0042d526 100644 --- a/components/doc/floatlabel/index.js +++ b/components/doc/floatlabel/index.js @@ -3,9 +3,8 @@ import { TabView } from '../../lib/tabview/TabView'; import { useLiveEditorTabs } from '../common/liveeditor'; const FloatLabelDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -264,7 +263,7 @@ export class FloatLabelDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -512,7 +511,7 @@ const FloatLabelDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -760,7 +759,7 @@ const FloatLabelDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -1025,18 +1024,13 @@ const FloatLabelDemo = () => { } ` } - } + }; return (
- - { - useLiveEditorTabs({ name: 'FloatLabelDemo', sources: sources, service: 'CountryService, NodeService', data: 'countries, treenodes' }) - } - + {useLiveEditorTabs({ name: 'FloatLabelDemo', sources: sources, service: 'CountryService, NodeService', data: 'countries, treenodes' })}
); - -}) +}); export default FloatLabelDoc; diff --git a/components/doc/galleria/index.js b/components/doc/galleria/index.js index 4c4cbbe551..fe2fd582b7 100644 --- a/components/doc/galleria/index.js +++ b/components/doc/galleria/index.js @@ -6,9 +6,8 @@ import { useLiveEditorTabs } from '../common/liveeditor'; import { DevelopmentSection } from '../common/developmentsection'; const GalleriaDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -52,10 +51,10 @@ export class GalleriaDemo extends Component { ); } ` - }, - 'hooks': { - tabName: 'Hooks Source', - content: ` + }, + hooks: { + tabName: 'Hooks Source', + content: ` import React, { useState, useEffect } from 'react'; import { PhotoService } from '../service/PhotoService'; import { Galleria } from 'primereact/galleria'; @@ -102,10 +101,10 @@ const GalleriaDemo = () => { ); } ` - }, - 'ts': { - tabName: 'TS Source', - content: ` + }, + ts: { + tabName: 'TS Source', + content: ` import React, { useState, useEffect } from 'react'; import { PhotoService } from '../service/PhotoService'; import { Galleria } from 'primereact/galleria'; @@ -152,14 +151,14 @@ const GalleriaDemo = () => { ); } ` - }, - 'browser': { - tabName: 'Browser Source', - imports: ` + }, + browser: { + tabName: 'Browser Source', + imports: ` `, - content: ` + content: ` const { useEffect, useState, useRef } = React; const { Galleria } = primereact.galleria; @@ -206,38 +205,38 @@ const GalleriaDemo = () => { ); } ` - } -} + } + }; return (
Import via Module
- -{` + + {` import { Galleria } from 'primereact/galleria'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started

Galleria requires a value as an array of objects and can either be used as a Controlled or Uncontrolled component.

- -{` + + {` `} - - -{` + + + {` const itemTemplate = (item) => { // custom item content } @@ -246,29 +245,32 @@ const thumbnailTemplate = (item) => { // custom thumbnail content } `} - +
Items per page
-

Number of items per page is defined using the numVisible property.

- -{` +

+ Number of items per page is defined using the numVisible property. +

+ + {` `} - +
Responsive
-

For responsive design, numVisible can be defined using the responsiveOptions property that should be an array of - objects whose breakpoint defines the max-width to apply the settings.

- -{` +

+ For responsive design, numVisible can be defined using the responsiveOptions property that should be an array of objects whose breakpoint defines the max-width to apply the settings. +

+ + {` `} - +
- -{` + + {` const responsiveOptions = [ { breakpoint: '1024px', @@ -284,37 +286,43 @@ const responsiveOptions = [ } ]; `} - +
Header and Footer
-

Custom content projection is available using the header and footer properties.

- -{` +

+ Custom content projection is available using the header and footer properties. +

+ + {` Header}> `} - +
Controlled vs Uncontrolled
-

In controlled mode, activeIndex and onItemChange properties need to be defined to control the first visible item.

+

+ In controlled mode, activeIndex and onItemChange properties need to be defined to control the first visible item. +

- -{` + + {` setActiveIndex(e.index)}> `} - +
Uncontrolled
-

In uncontrolled mode, no additional properties are required. Initial item can be provided using the activeItemIndex property in uncontrolled mode however it is evaluated at initial rendering and ignored in further updates. If you programmatically - need to update the first visible item index, prefer to use the component as controlled.

+

+ In uncontrolled mode, no additional properties are required. Initial item can be provided using the activeItemIndex property in uncontrolled mode however it is evaluated at initial rendering and ignored in further + updates. If you programmatically need to update the first visible item index, prefer to use the component as controlled. +

- -{` + + {` `} - +
Properties
@@ -500,7 +508,13 @@ const responsiveOptions = [ transitionOptions object null - The properties of CSSTransition can be customized, except for "nodeRef" and "in" properties. + + The properties of{' '} + + CSSTransition + {' '} + can be customized, except for "nodeRef" and "in" properties. + @@ -510,11 +524,11 @@ const responsiveOptions = [
- - - - - + + + + + @@ -541,10 +555,10 @@ const responsiveOptions = [
NameParametersDescription
NameParametersDescription
- - - - + + + + @@ -590,19 +604,29 @@ const responsiveOptions = [
Accessibility
Screen Reader
-

Galleria uses region role and since any attribute is passed to the main container element, attributes such as aria-label and aria-roledescription can be used as well. The slides container has aria-live attribute - set as "polite" if galleria is not in autoplay mode, otherwise "off" would be the value in autoplay.

- -

A slide has a group role with an aria-label that refers to the aria.slideNumber property of the locale API. Similarly aria.slide is used as the aria-roledescription of the item. - Inactive slides are hidden from the readers with aria-hidden.

- -

Next and Previous navigators are button elements with aria-label attributes referring to the aria.nextPageLabel and aria.firstPageLabel properties of the locale API by default respectively, - you may still use your own aria roles and attributes as any valid attribute is passed to the button elements implicitly by using nextButtonProps and prevButtonProps.

- -

Quick navigation elements and thumnbails follow the tab pattern. They are placed inside an element with a tablist role whereas each item has a tab role with aria-selected and aria-controls attributes. - The aria-label attribute of a quick navigation item refers to the aria.pageLabel of the locale API. Current page is marked with aria-current.

- -

In full screen mode, modal element uses dialog role with aria-modal enabled. The close button retrieves aria-label from the aria.close property of the locale API.

+

+ Galleria uses region role and since any attribute is passed to the main container element, attributes such as aria-label and aria-roledescription can be used as well. The slides container has{' '} + aria-live attribute set as "polite" if galleria is not in autoplay mode, otherwise "off" would be the value in autoplay. +

+ +

+ A slide has a group role with an aria-label that refers to the aria.slideNumber property of the locale API. Similarly aria.slide is used as the aria-roledescription{' '} + of the item. Inactive slides are hidden from the readers with aria-hidden. +

+ +

+ Next and Previous navigators are button elements with aria-label attributes referring to the aria.nextPageLabel and aria.firstPageLabel properties of the locale API by + default respectively, you may still use your own aria roles and attributes as any valid attribute is passed to the button elements implicitly by using nextButtonProps and prevButtonProps. +

+ +

+ Quick navigation elements and thumnbails follow the tab pattern. They are placed inside an element with a tablist role whereas each item has a tab role with aria-selected and aria-controls{' '} + attributes. The aria-label attribute of a quick navigation item refers to the aria.pageLabel of the locale API. Current page is marked with aria-current. +

+ +

+ In full screen mode, modal element uses dialog role with aria-modal enabled. The close button retrieves aria-label from the aria.close property of the locale API. +

Next/Prev Keyboard Support
@@ -615,15 +639,21 @@ const responsiveOptions = [
- + - + - + @@ -641,31 +671,45 @@ const responsiveOptions = [ - + - + - + - + - + - + - + @@ -676,12 +720,10 @@ const responsiveOptions = [
Dependencies

None.

- { - useLiveEditorTabs({ name: 'GalleriaDemo', sources: sources, service: 'PhotoService', data: 'photos' }) - } + {useLiveEditorTabs({ name: 'GalleriaDemo', sources: sources, service: 'PhotoService', data: 'photos' })} ); -}) +}); export default GalleriaDoc; diff --git a/components/doc/gmap/index.js b/components/doc/gmap/index.js index b0a1eb7ba0..00b968e76b 100644 --- a/components/doc/gmap/index.js +++ b/components/doc/gmap/index.js @@ -5,9 +5,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const GMapDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Sources', content: ` import React, { Component } from 'react'; @@ -162,7 +161,7 @@ export class GMapDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useEffect, useState, useRef } from 'react'; @@ -301,7 +300,7 @@ const GMapDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useEffect, useState, useRef } from 'react'; @@ -440,7 +439,7 @@ const GMapDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -584,7 +583,7 @@ const GMapDemo = () => { } ` } - } + }; const extFiles = { 'demo/GoogleMaps.js': { @@ -628,32 +627,32 @@ export const removeGoogleMaps = () => { }; ` } - } + }; return (
Import via Module
- -{` + + {` import { GMap } from 'primereact/gmap'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started

A map is initialized with options and dimensions. Refer to the google maps api for the list of available options.

- -{` + + {` const options = { center: {lat: 36.890257, lng: 30.707417}, zoom: 12 @@ -663,27 +662,26 @@ return ( ) `} - +
TypeScript

If you are using TypeScript you should install the Google Maps types.

- -{` + + {` // npm install types into devDependencies npm i -D @types/google.maps // yarn install types into devDependencies yarn add @types/google.maps --production=false `} - +
Overlays
-

GMap can display any type of overlay such as markers, polygons and circles. Overlay instances are bound using the overlays property array. Overlays are aware - of binding so whenever the array changes, gmap updates itself.

+

GMap can display any type of overlay such as markers, polygons and circles. Overlay instances are bound using the overlays property array. Overlays are aware of binding so whenever the array changes, gmap updates itself.

- -{` + + {` const options = { center: {lat: 36.890257, lng: 30.707417}, zoom: 12 @@ -705,13 +703,13 @@ return ( ) `} - +
Events

GMap provides common callbacks to hook into events including map click, overlay click and overlay dragging.

- -{` + + {` const onMapClick = (event) => { //event: MouseEvent of Google Maps api } @@ -741,14 +739,16 @@ return ( ) `} - +
Google Maps API
-

In case you need to access the map instance directly, use the getMap() method. In the following example, this.gmap.getMap() will provide the map instance. Alternative - is using onMapReady event as it passes the map instance as a parameter.

+

+ In case you need to access the map instance directly, use the getMap() method. In the following example, this.gmap.getMap() will provide the map instance. Alternative is using onMapReady event as it passes the map instance as + a parameter. +

- -{` + + {` const options = { center: {lat: 36.890257, lng: 30.707417}, zoom: 12 @@ -758,20 +758,20 @@ return ( ) `} - +
Properties
NameElement
NameElement
tab + tab + Moves focus through interactive elements in the carousel.
enter + enter + Activates navigation.
space + space + Activates navigation.
tab + tab + Moves focus through the active slide link.
enter + enter + Activates the focused slide link.
space + space + Activates the focused slide link.
right arrow + right arrow + Moves focus to the next slide link.
left arrow + left arrow + Moves focus to the previous slide link.
home + home + Moves focus to the first slide link.
end + end + Moves focus to the last slide link.
- - - - - - + + + + + + - + @@ -828,9 +828,11 @@ return ( - + map: Map instance
+ @@ -862,19 +864,18 @@ return (
Accessibility
-

Refer to the Google Maps documentation for more information about accessibility.

+

+ Refer to the Google Maps documentation for more information about accessibility. +

Dependencies

Google Maps script.

- - { - useLiveEditorTabs({ name: 'GMapDemo', sources: sources, extFiles: extFiles }) - } + {useLiveEditorTabs({ name: 'GMapDemo', sources: sources, extFiles: extFiles })} ); -}) +}); export default GMapDoc; diff --git a/components/doc/image/index.js b/components/doc/image/index.js index 5c92e51080..f7febba69b 100644 --- a/components/doc/image/index.js +++ b/components/doc/image/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const ImageDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -32,7 +31,7 @@ export class ImageDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React from 'react'; @@ -54,7 +53,7 @@ const ImageDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React from 'react'; @@ -76,7 +75,7 @@ const ImageDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -101,48 +100,51 @@ const ImageDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { Image } from 'primereact/image'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

Image is used as the native img element and supports all properties that the native element has.

+

+ Image is used as the native img element and supports all properties that the native element has. +

- -{` + + {` `} - +
Preview

Preview mode displays a modal layer when the image is clicked that provides transformation options such as rotating and zooming.

Templating
-

An eye icon is displayed by default when the image is hovered in preview mode. Use thetemplateprop for custom content.

+

+ An eye icon is displayed by default when the image is hovered in preview mode. Use thetemplateprop for custom content. +

- -{` + + {` `} - - +
Properties

Image passes any valid attribute to the underlying img element, additional attribute is the following.

@@ -217,7 +219,9 @@ import { Image } from 'primereact/image';
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

NameTypeDefaultDescription
NameTypeDefaultDescription
options object
onOverlayClickoriginalEvent: Google Maps MouseEvent
+
+ originalEvent: Google Maps MouseEvent
overlay: Clicked overlay
- map: Map instance
Callback to invoke when an overlay is clicked.
@@ -266,12 +270,18 @@ import { Image } from 'primereact/image';
Accessibility
Screen Reader
-

The preview button is a native button element with an aria-label that refers to the aria.zoomImage property of the locale API by default, with previewButtonProps - you may use your own aria roles and attributes as any valid attribute is passed to the button element implicitly.

+

+ The preview button is a native button element with an aria-label that refers to the aria.zoomImage property of the locale API by default, with previewButtonProps + you may use your own aria roles and attributes as any valid attribute is passed to the button element implicitly. +

-

When preview is active, dialog role with aria-modal is applied to the overlay image container.

+

+ When preview is active, dialog role with aria-modal is applied to the overlay image container. +

-

Button controls use aria.rotateRight, aria.rotateLeft, aria.zoomIn, aria.zoomOut and aria.close from the locale API as aria-label.

+

+ Button controls use aria.rotateRight, aria.rotateLeft, aria.zoomIn, aria.zoomOut and aria.close from the locale API as aria-label. +

ButtonBar Keyboard Support

When preview is activated, close button receives the initial focus.

@@ -285,19 +295,27 @@ import { Image } from 'primereact/image';
- + - + - + - + @@ -309,12 +327,10 @@ import { Image } from 'primereact/image';

None.

- { - useLiveEditorTabs({ name: 'ImageDemo', sources: sources }) - } + {useLiveEditorTabs({ name: 'ImageDemo', sources: sources })} ); -}) +}); export default ImageDoc; diff --git a/components/doc/inplace/index.js b/components/doc/inplace/index.js index c526d29955..09b0d66ece 100644 --- a/components/doc/inplace/index.js +++ b/components/doc/inplace/index.js @@ -6,11 +6,10 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const InplaceDoc = memo(() => { - - const sources = { - 'class': { - tabName: 'Class Source', - content: ` + const sources = { + class: { + tabName: 'Class Source', + content: ` import React, { Component } from 'react'; import { Inplace, InplaceDisplay, InplaceContent } from 'primereact/inplace'; import { InputText } from 'primereact/inputtext'; @@ -83,7 +82,7 @@ export class InplaceDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -148,7 +147,7 @@ const InplaceDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -213,7 +212,7 @@ const InplaceDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -284,34 +283,35 @@ const InplaceDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { Inplace } from 'primereact/inplace'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

Inplace requires InplaceDisplay and InplaceContent component as children to define the content to display in each state. Active state of the inplace - can either be managed as a Controlled or Uncontrolled component.

+

Inplace requires InplaceDisplay and InplaceContent component as children to define the content to display in each state. Active state of the inplace can either be managed as a Controlled or Uncontrolled component.

-

In controlled mode, active and onToggle properties need to be defined to control the active state.

- -{` +

+ In controlled mode, active and onToggle properties need to be defined to control the active state. +

+ + {` setActive(e.value)}> Click to Edit @@ -321,13 +321,15 @@ import { Inplace } from 'primereact/inplace'; `} - +
-

In uncontrolled mode, no additional properties are required. Initial state can be still be provided using the active property in uncontrolled mode however - it is evaluated at initial rendering and ignored in further updates. If you programmatically need to update the active state, prefer to use the component as controlled.

+

+ In uncontrolled mode, no additional properties are required. Initial state can be still be provided using the active property in uncontrolled mode however it is evaluated at initial rendering and ignored in further + updates. If you programmatically need to update the active state, prefer to use the component as controlled. +

- -{` + + {` Click to Edit @@ -337,12 +339,14 @@ import { Inplace } from 'primereact/inplace'; `} - +
Closable
-

closable property is handy within forms as it enables to get back to output mode after editing is completed using a button displayed next to the form field.

- -{` +

+ closable property is handy within forms as it enables to get back to output mode after editing is completed using a button displayed next to the form field. +

+ + {` Click to Edit @@ -352,13 +356,12 @@ import { Inplace } from 'primereact/inplace'; `} - +
Lazy Loading
-

Inplace allows lazy loading content so that the content gets initialized after getting opened instead of on load. Here is an example that loads, data of a table - if the user decides to open the inplace.

- -{` +

Inplace allows lazy loading content so that the content gets initialized after getting opened instead of on load. Here is an example that loads, data of a table if the user decides to open the inplace.

+ + {` const onOpen = () => { productService.getProductsSmall().then(data => setProducts(data)); } @@ -377,7 +380,7 @@ const onOpen = () => { `} - +
Properties
@@ -454,9 +457,10 @@ const onOpen = () => {
- + @@ -464,7 +468,9 @@ const onOpen = () => {
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

tab + tab + Moves focus through button bar.
enter + enter + Activates the button.
space + space + Activates the button.
esc + esc + Closes the image preview.
onToggleevent.originalEvent: browser event
- event.value: active state as a boolean -
+ event.originalEvent: browser event
+ event.value: active state as a boolean +
Callback to invoke when inplace is opened or closed.
@@ -491,66 +497,75 @@ const onOpen = () => {
Accessibility
- -
Screen Reader
-

Inplace component defines aria-live as "polite" by default, since any valid attribute is passed to the main container aria roles and attributes of the root element can be customized easily.

-

Display element uses button role in view mode by default, displayProps can be used for customizations like adding aria-label or aria-labelledby attributes - to describe the content of the view mode or even overriding the default role.

-

Closable inplace components displays a button with an aria-label that refers to the aria.close property of the locale API by default, you may use - closeButtonProps to customize the element and override the default aria-label.

- -
View Mode Keyboard Support
-
-
- - - - - - - - - - - - -
KeyFunction
enterSwitches to content.
-
- -
Close Button Keyboard Support
-
- - - - - - - - - - - - - - - - - -
KeyFunction
enterSwitches to display.
spaceSwitches to display.
-
- + +
Screen Reader
+

+ Inplace component defines aria-live as "polite" by default, since any valid attribute is passed to the main container aria roles and attributes of the root element can be customized easily. +

+

+ Display element uses button role in view mode by default, displayProps can be used for customizations like adding aria-label or aria-labelledby attributes to describe the content of the view + mode or even overriding the default role. +

+

+ Closable inplace components displays a button with an aria-label that refers to the aria.close property of the locale API by default, you may use + closeButtonProps to customize the element and override the default aria-label. +

+ +
View Mode Keyboard Support
+
+ + + + + + + + + + + + + +
KeyFunction
+ enter + Switches to content.
+
+ +
Close Button Keyboard Support
+
+ + + + + + + + + + + + + + + + + +
KeyFunction
+ enter + Switches to display.
+ space + Switches to display.
+
+
Dependencies

None.

- - { - useLiveEditorTabs({ name: 'InplaceDemo', sources: sources, service: 'ProductService', data: 'products-small' }) - } + {useLiveEditorTabs({ name: 'InplaceDemo', sources: sources, service: 'ProductService', data: 'products-small' })}
); -}) +}); export default InplaceDoc; diff --git a/components/doc/inputgroup/index.js b/components/doc/inputgroup/index.js index 43e07649a9..89f36a99e0 100644 --- a/components/doc/inputgroup/index.js +++ b/components/doc/inputgroup/index.js @@ -3,9 +3,8 @@ import { TabView } from '../../lib/tabview/TabView'; import { useLiveEditorTabs } from '../common/liveeditor'; const InputGroupDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -139,7 +138,7 @@ export class InputGroupDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hook Source', content: ` import React, { useState } from 'react'; @@ -265,7 +264,7 @@ const InputGroupDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -391,7 +390,7 @@ const InputGroupDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -523,18 +522,13 @@ const InputGroupDemo = () => { } ` } - } - + }; return (
- - { - useLiveEditorTabs({ name: 'InputGroupDemo', sources: sources }) - } - + {useLiveEditorTabs({ name: 'InputGroupDemo', sources: sources })}
); -}) +}); export default InputGroupDoc; diff --git a/components/doc/inputmask/index.js b/components/doc/inputmask/index.js index 11fa0edb37..530377e4fc 100644 --- a/components/doc/inputmask/index.js +++ b/components/doc/inputmask/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const InputMaskDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -70,7 +69,7 @@ export class InputMaskDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -124,7 +123,7 @@ const InputMaskDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -178,7 +177,7 @@ const InputMaskDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -235,7 +234,7 @@ const InputMaskDemo = () => { } ` } - } + }; return (
@@ -257,7 +256,9 @@ import { InputMask } from 'primereact/inputmask';
Getting Started
-

InputMask is used as a controlled component with value and onChange properties.

+

+ InputMask is used as a controlled component with value and onChange properties. +

{` @@ -269,15 +270,9 @@ import { InputMask } from 'primereact/inputmask';

Mask format can be a combination of the the following built-in definitions.

    -
  • - a - Alpha character (A-Z,a-z) -
  • -
  • - 9 - Numeric character (0-9) -
  • -
  • - * - Alpha numberic character (A-Z,a-z,0-9) -
  • +
  • a - Alpha character (A-Z,a-z)
  • +
  • 9 - Numeric character (0-9)
  • +
  • * - Alpha numberic character (A-Z,a-z,0-9)
@@ -287,7 +282,9 @@ import { InputMask } from 'primereact/inputmask';
SlotChar
-

Underscore is the default placeholder for a mask and this can be customized using slotChart option.

+

+ Underscore is the default placeholder for a mask and this can be customized using slotChart option. +

{` @@ -296,10 +293,10 @@ import { InputMask } from 'primereact/inputmask';
Optional Values
-

If the input does not complete the mask definition, it is cleared by default. - Use autoClear property to control this behavior. In addition, certain part of - a mask can be made optional by using ? symbol where anything after the question - mark becomes optional.

+

+ If the input does not complete the mask definition, it is cleared by default. Use autoClear property to control this behavior. In addition, certain part of a mask can be made optional by using ? symbol where anything + after the question mark becomes optional. +

{` @@ -461,14 +458,19 @@ import { InputMask } from 'primereact/inputmask'; onComplete - event: Browser event
- value: New value of the component + + event: Browser event +
+ value: New value of the component + Callback to invoke on when user completes the mask pattern. onChange - originalEvent: Browser event
- value: New value of the component + + originalEvent: Browser event
+ value: New value of the component + Callback to invoke on value change. @@ -476,7 +478,9 @@ import { InputMask } from 'primereact/inputmask';
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

@@ -499,11 +503,14 @@ import { InputMask } from 'primereact/inputmask';
Accessibility
- -
Screen Reader
-

InputMask component renders a native input element that implicitly includes any passed prop. Value to describe the component can either be provided via label tag combined with id prop or using aria-labelledby, aria-label props.

- -{` + +
Screen Reader
+

+ InputMask component renders a native input element that implicitly includes any passed prop. Value to describe the component can either be provided via label tag combined with id prop or using{' '} + aria-labelledby, aria-label props. +

+ + {` @@ -512,35 +519,35 @@ import { InputMask } from 'primereact/inputmask'; `} - -
Keyboard Support
-
-
- - - - - - - - - - - - -
KeyFunction
tabMoves focus to the input.
-
- + +
Keyboard Support
+
+ + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the input.
+
+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'InputMaskDemo', sources: sources }) - } + {useLiveEditorTabs({ name: 'InputMaskDemo', sources: sources })}
); -}) +}); export default InputMaskDoc; diff --git a/components/doc/inputnumber/index.js b/components/doc/inputnumber/index.js index 3b2bcf8b05..e2213f3e3c 100644 --- a/components/doc/inputnumber/index.js +++ b/components/doc/inputnumber/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const InputNumberDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -154,7 +153,7 @@ export class InputNumberDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -292,7 +291,7 @@ const InputNumberDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -430,7 +429,7 @@ const InputNumberDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` `, @@ -570,54 +569,63 @@ const InputNumberDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { InputNumber } from 'primereact/inputnumber'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

InputNumber is used as a controlled input with value and onValueChange properties. Component always provides a number type although formatting on the input is a string.

+

+ InputNumber is used as a controlled input with value and onValueChange properties. Component always provides a number type although formatting on the input is a string. +

- -{` + + {` setValue(e.value)} /> `} - +
Decimal Mode
-

Format is defined using the mode property, "decimal" is the default value allowing only integers when there is no other configuration.

- -{` +

+ Format is defined using the mode property, "decimal" is the default value allowing only integers when there is no other configuration. +

+ + {` setValue(e.value)} mode="decimal" /> `} - +
-

Fractions are configured with the minFractionDigits property. Optionally maxFractionDigits can be used to defined a boundary for the maximum digits.

- -{` +

+ Fractions are configured with the minFractionDigits property. Optionally maxFractionDigits can be used to defined a boundary for the maximum digits. +

+ + {` setValue1(e.value)} mode="decimal" minFractionDigits={2} /> setValue2(e.value)} mode="decimal" minFractionDigits={2} maxFractionDigits={2} /> `} - - -

locale option is available to set the localization information such as grouping and decimal symbols where default value is the browser locale. Locales are defined per BCP Language Tag.

- -{` + + +

+ locale option is available to set the localization information such as grouping and decimal symbols where default value is the browser locale. Locales are defined per{' '} + BCP Language Tag. +

+ + {` User Locale setValue1(e.value)} mode="decimal" minFractionDigits={2} /> @@ -630,13 +638,15 @@ German Locale Indian Locale setValue4(e.value)} mode="decimal" locale="en-IN" minFractionDigits={2} /> `} - +
Currency
-

Currency formatting is specified by setting the mode option to currency and currency property. In addition currencyDisplay option - allows how the currency is displayed, valid values are "symbol" (default) or "code".

- -{` +

+ Currency formatting is specified by setting the mode option to currency and currency property. In addition currencyDisplay option allows how the currency is displayed, valid values are "symbol" (default) + or "code". +

+ + {` United States setValue1(e.value)} mode="currency" currency="USD" locale="en-US" /> @@ -649,12 +659,14 @@ India Japan setValue4(e.value)} mode="currency" currency="JPY" locale="jp-JP"/> `} - +
Prefix and Suffix
-

Custom texts e.g. units can be placed before or after the input section with the prefix and suffix properties.

- -{` +

+ Custom texts e.g. units can be placed before or after the input section with the prefix and suffix properties. +

+ + {` Mile setValue1(e.value)} suffix=" mi" /> @@ -667,13 +679,15 @@ Expiry Temperature setValue4(e.value)} prefix="↑ " suffix="℃" min={0} max={40} /> `} - +
Buttons
-

Spinner buttons is enabled using the showButtons options and layout is defined with the buttonLayout. Default value is "stacked" whereas - "horizontal" and "stacked" are alternatives. Note that even there are no buttons, up and down arrow keys can be used to spin the values with keyboard.

- -{` +

+ Spinner buttons is enabled using the showButtons options and layout is defined with the buttonLayout. Default value is "stacked" whereas "horizontal" and "stacked" are alternatives. Note that even there are no + buttons, up and down arrow keys can be used to spin the values with keyboard. +

+ + {` Stacked setValue1(e.value)} showButtons mode="currency" currency="USD" /> @@ -685,24 +699,27 @@ Vertical setValue3(e.value)} mode="decimal" showButtons buttonLayout="vertical" style={{width: '6em'}} decrementButtonClassName="p-button-secondary" incrementButtonClassName="p-button-secondary" incrementButtonIcon="pi pi-plus" decrementButtonIcon="pi pi-minus" /> `} - +
Step
-

Step factor is 1 by default and can be customized with step option.

- -{` +

+ Step factor is 1 by default and can be customized with step option. +

+ + {` setValue(e.value)} step={0.25} /> `} - - +
Min and Max Boundaries
-

Value to be entered can be restricted by configuring the min and max options.

- -{` +

+ Value to be entered can be restricted by configuring the min and max options. +

+ + {` setValue1(e.value)} min={0} max={100} /> `} - +
Properties
@@ -774,8 +791,9 @@ Vertical localeMatcher string best fit - The locale matching algorithm to use. Possible values are "lookup" and "best fit"; the default is "best fit". - See Locale Negotation for details. + + The locale matching algorithm to use. Possible values are "lookup" and "best fit"; the default is "best fit". See{' '} + Locale Negotation for details. @@ -800,16 +818,19 @@ Vertical currency string null - The currency to use in currency formatting. Possible values are the ISO 4217 currency codes, - such as "USD" for the US dollar, "EUR" for the euro, or "CNY" for the Chinese RMB. - There is no default value; if the style is "currency", the currency property must be provided. + + The currency to use in currency formatting. Possible values are the ISO 4217 currency codes, such as "USD" for the US dollar, "EUR" for + the euro, or "CNY" for the Chinese RMB. There is no default value; if the style is "currency", the currency property must be provided. + currencyDisplay string symbol - How to display the currency in currency formatting. Possible values are "symbol" to use a localized currency symbol such as €, - ü"code" to use the ISO currency code, "name" to use a localized currency name such as "dollar"; the default is "symbol". + + How to display the currency in currency formatting. Possible values are "symbol" to use a localized currency symbol such as €, ü"code" to use the ISO currency code, "name" to use a localized currency name such + as "dollar"; the default is "symbol". + useGrouping @@ -821,17 +842,20 @@ Vertical minFractionDigits number null - The minimum number of fraction digits to use. Possible values are from 0 to 20; the default for plain number and percent formatting is 0; the default for currency formatting is the number of - minor unit digits provided by the ISO 4217 currency code list (2 if the list doesn't provide that information). + + The minimum number of fraction digits to use. Possible values are from 0 to 20; the default for plain number and percent formatting is 0; the default for currency formatting is the number of minor unit digits + provided by the ISO 4217 currency code list (2 if the list doesn't provide that information). + maxFractionDigits number null - The maximum number of fraction digits to use. Possible values are from 0 to 20; the default for plain - number formatting is the larger of minimumFractionDigits and 3; the default for currency formatting - is the larger of minimumFractionDigits and the number of minor unit digits provided by the ISO 4217 currency code list - (2 if the list doesn't provide that information). + + The maximum number of fraction digits to use. Possible values are from 0 to 20; the default for plain number formatting is the larger of minimumFractionDigits and 3; the default for currency formatting is the + larger of minimumFractionDigits and the number of minor unit digits provided by the ISO 4217 currency code list + (2 if the list doesn't provide that information). + id @@ -994,14 +1018,18 @@ Vertical onValueChange - event.originalEvent: Browser event
- event.value: New value + + event.originalEvent: Browser event
+ event.value: New value + Callback to invoke after validation check and value change. onChange - event.originalEvent: Browser event
- event.value: New value + + event.originalEvent: Browser event
+ event.value: New value + Callback to invoke on value change. @@ -1024,7 +1052,9 @@ Vertical
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

@@ -1070,18 +1100,19 @@ Vertical -
p-inputnumber-button-icon Button icon
Accessibility
- -
Screen Reader
-

Value to describe the component can either be provided via label tag combined with inputId prop or using aria-labelledby, aria-label props. - The input element uses spinbutton role in addition to the aria-valuemin, aria-valuemax and aria-valuenow attributes.

- -{` + +
Screen Reader
+

+ Value to describe the component can either be provided via label tag combined with inputId prop or using aria-labelledby, aria-label props. The input element uses spinbutton role in + addition to the aria-valuemin, aria-valuemax and aria-valuenow attributes. +

+ + {` @@ -1090,53 +1121,61 @@ Vertical `} - - -
Keyboard Support
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
KeyFunction
tabMoves focus to the input.
up arrowIncrements the value.
down arrowDecrements the value.
homeSet the minimum value if provided.
endSet the maximum value if provided.
-
-
+
+ +
Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the input.
+ up arrow + Increments the value.
+ down arrow + Decrements the value.
+ home + Set the minimum value if provided.
+ end + Set the maximum value if provided.
+
+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'InputNumberDemo', sources: sources }) - } + {useLiveEditorTabs({ name: 'InputNumberDemo', sources: sources })}
); -}) +}); export default InputNumberDoc; diff --git a/components/doc/inputswitch/index.js b/components/doc/inputswitch/index.js index f0b6a0a607..d0e9dc296d 100644 --- a/components/doc/inputswitch/index.js +++ b/components/doc/inputswitch/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const InputSwitchDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -40,7 +39,7 @@ export class InputSwitchDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -64,7 +63,7 @@ const InputSwitchDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -88,7 +87,7 @@ const InputSwitchDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -115,189 +114,198 @@ const InputSwitchDemo = () => { } ` } - } + }; return (
- - -
Import via Module
- -{` + + +
Import via Module
+ + {` import { InputSwitch } from 'primereact/inputswitch'; `} - +
-
Import via CDN
- -{` +
Import via CDN
+ + {` `} - +
-
Getting Started
-

InputSwitch is used as a controlled input with checked and onChange properties.

+
Getting Started
+

+ InputSwitch is used as a controlled input with checked and onChange properties. +

- -{` + + {` setValue(e.value)} /> `} - + -
Properties
-

Any valid attribute is passed to the root element implicitly, extended properties are as follows;

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
stylestringnullInline style of the element.
classNamestringnullStyle class of the element.
inputIdstringnullIdentifier of the input element.
namestringnullName of the input element.
tabIndexnumbernullIndex of the element in tabbing order.
checkedbooleanfalseSpecifies whether a inputswitch should be checked or not.
trueValueanytrueValue in checked state.
falseValueanyfalseValue in unchecked state.
disabledbooleanfalseWhen present, it specifies that the component should be disabled.
tooltipanynullContent of the tooltip.
tooltipOptionsobjectnullConfiguration of the tooltip, refer to the tooltip documentation for more information.
-
+
Properties
+

Any valid attribute is passed to the root element implicitly, extended properties are as follows;

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
stylestringnullInline style of the element.
classNamestringnullStyle class of the element.
inputIdstringnullIdentifier of the input element.
namestringnullName of the input element.
tabIndexnumbernullIndex of the element in tabbing order.
checkedbooleanfalseSpecifies whether a inputswitch should be checked or not.
trueValueanytrueValue in checked state.
falseValueanyfalseValue in unchecked state.
disabledbooleanfalseWhen present, it specifies that the component should be disabled.
tooltipanynullContent of the tooltip.
tooltipOptionsobjectnullConfiguration of the tooltip, refer to the tooltip documentation for more information.
+
-
Events
-
- - - - - - - - - - - - - - - - - - - - - - - - - -
NameParametersDescription
onChangeevent.originalEvent: Browser event
- event.value: Checked state as a boolean.
Callback to invoke on value change.
onFocusevent: Browser event.Callback to invoke when the element receives focus.
onBlurevent: Browser event.Callback to invoke when the element loses focus.
-
+
Events
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
NameParametersDescription
onChange + event.originalEvent: Browser event
+ event.value: Checked state as a boolean. +
Callback to invoke on value change.
onFocusevent: Browser event.Callback to invoke when the element receives focus.
onBlurevent: Browser event.Callback to invoke when the element loses focus.
+
-
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - -
NameElement
p-inputswitchContainer element.
p-inputswitch-checkedContainer element in active state.
p-inputswitch-sliderSlider element behind the handle.
-
+
Styling
+

+ Following is the list of structural style classes, for theming classes visit theming page. +

+
+ + + + + + + + + + + + + + + + + + + + + +
NameElement
p-inputswitchContainer element.
p-inputswitch-checkedContainer element in active state.
p-inputswitch-sliderSlider element behind the handle.
+
-
Accessibility
- -
Screen Reader
-

InputSwitch component uses a hidden native checkbox element with switch role internally that is only visible to screen readers. Value to describe the component can either be provided via label tag combined with inputId prop or using aria-labelledby, aria-label props.

- -{` +
Accessibility
+ +
Screen Reader
+

+ InputSwitch component uses a hidden native checkbox element with switch role internally that is only visible to screen readers. Value to describe the component can either be provided via label tag combined + with inputId prop or using aria-labelledby, aria-label props. +

+ + {` @@ -306,39 +314,41 @@ import { InputSwitch } from 'primereact/inputswitch'; `} - -
Keyboard Support
-
- - - - - - - - - - - - - - - - - -
KeyFunction
tabMoves focus to the switch.
spaceToggles the checked state.
-
-
-
Dependencies
-

None.

-
+ +
Keyboard Support
+
+ + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the switch.
+ space + Toggles the checked state.
+
+ +
Dependencies
+

None.

+ - { - useLiveEditorTabs({ name: 'InputSwitchDemo', sources: sources }) - } -
-
+ {useLiveEditorTabs({ name: 'InputSwitchDemo', sources: sources })} + + ); -}) +}); export default InputSwitchDoc; diff --git a/components/doc/inputtext/index.js b/components/doc/inputtext/index.js index 10ed361a26..0b348c718e 100644 --- a/components/doc/inputtext/index.js +++ b/components/doc/inputtext/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const InputTextDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -83,7 +82,7 @@ export class InputTextDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -150,7 +149,7 @@ const InputTextDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -216,8 +215,8 @@ const InputTextDemo = () => { ) } ` - }, - 'browser': { + }, + browser: { tabName: 'Browser Source', imports: ` `, @@ -286,50 +285,62 @@ const InputTextDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { InputText } from 'primereact/inputtext'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

InputText is used as a controlled input with value and onChange properties.

- -{` +

+ InputText is used as a controlled input with value and onChange properties. +

+ + {` setValue(e.target.value)} /> `} - +
Float Label
-

A floating label is implemented by wrapping the input and the label inside a container having .p-float-label style class.

- -{` +

+ A floating label is implemented by wrapping the input and the label inside a container having .p-float-label style class. +

+ + {` setValue(e.target.value)} /> `} - +
KeyFilter
-

InputText has built-in key filtering support to block certain keys, refer to keyfilter page for more information.

+

+ InputText has built-in key filtering support to block certain keys, refer to keyfilter page for more information. +

Properties
-

InputText passes any valid attribute to the underlying React HTMLInputElement element. Extended properties are as follows;

+

+ InputText passes any valid attribute to the underlying{' '} + + React HTMLInputElement + {' '} + element. Extended properties are as follows; +

@@ -370,7 +381,9 @@ import { InputText } from 'primereact/inputtext';
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

@@ -389,11 +402,14 @@ import { InputText } from 'primereact/inputtext';
Accessibility
- -
Screen Reader
-

InputText component renders a native input element that implicitly includes any passed prop. Value to describe the component can either be provided via label tag combined with id prop or using aria-labelledby, aria-label props.

- -{` + +
Screen Reader
+

+ InputText component renders a native input element that implicitly includes any passed prop. Value to describe the component can either be provided via label tag combined with id prop or using{' '} + aria-labelledby, aria-label props. +

+ + {` @@ -402,36 +418,35 @@ import { InputText } from 'primereact/inputtext'; `} - -
Keyboard Support
-
-
- - - - - - - - - - - - -
KeyFunction
tabMoves focus to the input.
-
- + +
Keyboard Support
+
+ + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the input.
+
+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'InputTextDemo', sources: sources }) - } - + {useLiveEditorTabs({ name: 'InputTextDemo', sources: sources })}
- ) -}) + ); +}); export default InputTextDoc; diff --git a/components/doc/inputtextarea/index.js b/components/doc/inputtextarea/index.js index 6bf4fa0e26..ba5672cb46 100644 --- a/components/doc/inputtextarea/index.js +++ b/components/doc/inputtextarea/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const InputTextareaDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, {Component} from 'react'; @@ -44,7 +43,7 @@ export class InputTextareaDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -71,8 +70,8 @@ const InputTextareaDemo = () => { ) } ` - }, - 'ts': { + }, + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -100,7 +99,7 @@ const InputTextareaDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -131,8 +130,7 @@ const InputTextareaDemo = () => { } ` } - } - + }; return (
@@ -154,7 +152,9 @@ import { InputTextarea } from 'primereact/inputtextarea';
Getting Started
-

Textarea is used as a controlled input with value and onChange properties.

+

+ Textarea is used as a controlled input with value and onChange properties. +

{` setValue(event.target.value)} /> @@ -205,7 +205,9 @@ import { InputTextarea } from 'primereact/inputtextarea';
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

@@ -224,11 +226,14 @@ import { InputTextarea } from 'primereact/inputtextarea';
Accessibility
- -
Screen Reader
-

InputTextarea component renders a native textarea element that implicitly includes any passed prop. Value to describe the component can either be provided via label tag combined with id prop or using aria-labelledby, aria-label props.

- -{` + +
Screen Reader
+

+ InputTextarea component renders a native textarea element that implicitly includes any passed prop. Value to describe the component can either be provided via label tag combined with id prop or using{' '} + aria-labelledby, aria-label props. +

+ + {` @@ -237,36 +242,36 @@ import { InputTextarea } from 'primereact/inputtextarea'; `} - - -
Keyboard Support
-
-
- - - - - - - - - - - - -
KeyFunction
tabMoves focus to the input.
-
- + + +
Keyboard Support
+
+ + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the input.
+
+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'InputTextareaDemo', sources: sources }) - } + {useLiveEditorTabs({ name: 'InputTextareaDemo', sources: sources })} - ) -}) + ); +}); export default InputTextareaDoc; diff --git a/components/doc/invalid/index.js b/components/doc/invalid/index.js index 58fee69216..cb0d885dd3 100644 --- a/components/doc/invalid/index.js +++ b/components/doc/invalid/index.js @@ -3,9 +3,8 @@ import { TabView } from '../../lib/tabview/TabView'; import { useLiveEditorTabs } from '../common/liveeditor'; const InvalidDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -210,7 +209,7 @@ export class InvalidDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -406,7 +405,7 @@ const InvalidDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -602,7 +601,7 @@ const InvalidDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -815,17 +814,13 @@ const InvalidDemo = () => { } ` } - } + }; return (
- - { - useLiveEditorTabs({ name: 'InvalidDemo', sources: sources, service: 'CountryService, NodeService', data: 'countries, treenodes' }) - } - + {useLiveEditorTabs({ name: 'InvalidDemo', sources: sources, service: 'CountryService, NodeService', data: 'countries, treenodes' })}
); -}) +}); export default InvalidDoc; diff --git a/components/doc/keyfilter/index.js b/components/doc/keyfilter/index.js index 7337cdaca5..7ca75f74f3 100644 --- a/components/doc/keyfilter/index.js +++ b/components/doc/keyfilter/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const KeyFilterDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, {Component} from 'react'; @@ -61,7 +60,7 @@ export class KeyFilterDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React from 'react'; @@ -112,7 +111,7 @@ const KeyFilterDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React from 'react'; @@ -163,7 +162,7 @@ const KeyFilterDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` `, @@ -216,35 +215,37 @@ const KeyFilterDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { InputText } from 'primereact/inputtext'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

KeyFilter property is integrated in input components such as InputText using the keyfilter property. The value of the filter - can either a built-in regular expression or a custom one. Following input only accepts integers.

+

+ KeyFilter property is integrated in input components such as InputText using the keyfilter property. The value of the filter can either a built-in regular expression or a custom one. Following input only accepts + integers. +

- -{` + + {` `} - +
Built-in Filters

Commonly used cases have their own built-in shortcuts.

@@ -261,26 +262,26 @@ import { InputText } from 'primereact/inputtext';
Custom Filter

A custom filter is enabled by binding a regular expression, an example that blocks special characters would be;

- -{` + + {` *!]+$/}/> `} - +
Accessibility
- -

Refer to InputText for accessibility as KeyFilter is a built-in add-on of the InputText.

-
+ +

+ Refer to InputText for accessibility as KeyFilter is a built-in add-on of the InputText. +

+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'KeyFilterDemo', sources: sources }) - } + {useLiveEditorTabs({ name: 'KeyFilterDemo', sources: sources })}
- ) -}) + ); +}); export default KeyFilterDoc; diff --git a/components/doc/knob/index.js b/components/doc/knob/index.js index c3a5cd5e3e..e796ab21b0 100644 --- a/components/doc/knob/index.js +++ b/components/doc/knob/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const KnobDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, {Component} from 'react'; @@ -116,7 +115,7 @@ export class KnobDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -206,7 +205,7 @@ const KnobDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -296,7 +295,7 @@ const KnobDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -389,165 +388,173 @@ const KnobDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { Knob } from 'primereact/knob'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started

Knob is used as a controlled input with value and onChange properties.

- -{` + + {` setValue(value)} /> `} - +
Minimum and Maximum
-

Boundaries are configured with the min and max values whose defaults are 0 and 100 respectively.

- -{` +

+ Boundaries are configured with the min and max values whose defaults are 0 and 100 respectively. +

+ + {` setValue(value)} /> `} - +
Step
-

Step factor is 1 by default and can be customized with step option.

- - {` +

+ Step factor is 1 by default and can be customized with step option. +

+ + {` setValue(value)} /> `} - +
Styling
-

valueColor defines the value color, rangeColor defines the range background and similarly textColor configures the color of the value text. - In addition, strokeWidth is used to determine the width of the stroke of range and value sections.

- -{` +

+ valueColor defines the value color, rangeColor defines the range background and similarly textColor configures the color of the value text. In addition, strokeWidth is used to determine the width of + the stroke of range and value sections. +

+ + {` setValue(value)} /> `} - +
Size
-

Default size of the Knob is 100 pixels for width and height, use the size property to customize it per your requirements.

- -{` +

+ Default size of the Knob is 100 pixels for width and height, use the size property to customize it per your requirements. +

+ + {` setValue(value)} /> `} - +
Properties

Any valid attribute is passed to the root element implicitly, extended properties are as follows;

- - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDefaultDescription
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
valuenumbernullValue of the component.
sizenumber100Size of the component in pixels.
disabledbooleanfalseWhen present, it specifies that the component should be disabled.
readOnlybooleanfalseWhen present, it specifies that the component value cannot be edited.
stepnumbernullStep factor to increment/decrement the value.
minnumber0Mininum boundary value.
maxnumber100Maximum boundary value.
valueColorstringnullBackground of the value.
rangeColorstringnullBackground color of the range.
textColorstringnullColor of the value text.
strokeWidthnumber14Width of the knob stroke.
showValuebooleantrueWhether the show the value inside the knob.
valueTemplatestring{value}Template string of the value.
idstringnullUnique identifier of the element.
valuenumbernullValue of the component.
sizenumber100Size of the component in pixels.
disabledbooleanfalseWhen present, it specifies that the component should be disabled.
readOnlybooleanfalseWhen present, it specifies that the component value cannot be edited.
stepnumbernullStep factor to increment/decrement the value.
minnumber0Mininum boundary value.
maxnumber100Maximum boundary value.
valueColorstringnullBackground of the value.
rangeColorstringnullBackground color of the range.
textColorstringnullColor of the value text.
strokeWidthnumber14Width of the knob stroke.
showValuebooleantrueWhether the show the value inside the knob.
valueTemplatestring{value}Template string of the value.
@@ -556,128 +563,140 @@ import { Knob } from 'primereact/knob';
- - - - - + + + + + - - - - - + + + + +
NameParametersDescription
NameParametersDescription
onChangevalue: New valueCallback to invoke when the value changes.
onChangevalue: New valueCallback to invoke when the value changes.
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
NameElement
p-knobContainer element.
p-knob-rangeRange element.
p-knob-valueValue element.
p-knob-textText element.
-
- -
Accessibility
- -
Screen Reader
-

Knob element component uses slider role in addition to the aria-valuemin, aria-valuemax and aria-valuenow attributes. Value to describe the component can be defined using - aria-labelledby and aria-label props.

- -{` -Number - - - -`} - -
Keyboard Support
+

+ Following is the list of structural style classes, for theming classes visit theming page. +

- - + + - - - - - - - - - - + + - - + + - - + + - - - - - - + +
KeyFunctionNameElement
tabMoves focus to the slider.
- - left arrow - down arrow - - Decrements the value.
- - right arrow - up arrow - - Increments the value.p-knobContainer element.
homeSet the minimum value.p-knob-rangeRange element.
endSet the maximum value.p-knob-valueValue element.
page upIncrements the value by 10 steps.
page downDecrements the value by 10 steps.p-knob-textText element.
-
+ +
Accessibility
+ +
Screen Reader
+

+ Knob element component uses slider role in addition to the aria-valuemin, aria-valuemax and aria-valuenow attributes. Value to describe the component can be defined using + aria-labelledby and aria-label props. +

+ + {` +Number + + + +`} + +
Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the slider.
+ + left arrow + down arrow + + Decrements the value.
+ + right arrow + up arrow + + Increments the value.
+ home + Set the minimum value.
+ end + Set the maximum value.
+ page up + Increments the value by 10 steps.
+ page down + Decrements the value by 10 steps.
+
+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'KnobDemo', sources: sources }) - } + {useLiveEditorTabs({ name: 'KnobDemo', sources: sources })}
- ) -}) + ); +}); export default KnobDoc; diff --git a/components/doc/listbox/index.js b/components/doc/listbox/index.js index 66d0ab8e43..e4bc438bf2 100644 --- a/components/doc/listbox/index.js +++ b/components/doc/listbox/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const ListBoxDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, {Component} from 'react'; @@ -122,7 +121,7 @@ export class ListBoxDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -226,7 +225,7 @@ const ListBoxDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -329,8 +328,8 @@ const ListBoxDemo = () => { ); } ` - }, - 'browser': { + }, + browser: { tabName: 'Browser Source', imports: ` @@ -437,36 +436,39 @@ const ListBoxDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { ListBox } from 'primereact/listbox'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

Listbox is used as a controlled component with value and onChange properties along with the options collection. There are two alternatives - of how to define the options property; One way is providing a collection of SelectItem instances having label-value pairs - whereas other way is providing an array of arbitrary objects along with the optionLabel and optionValue properties to specify the label/value field pair. - In addition, options can be simple primitive values such as a string array, in this case no optionLabel or optionValue is necessary.

- -

Options as SelectItems

- -{` +

+ Listbox is used as a controlled component with value and onChange properties along with the options collection. There are two alternatives of how to define the options property; One way is providing a collection + of SelectItem instances having label-value pairs whereas other way is providing an array of arbitrary objects along with the optionLabel and optionValue properties to specify the label/value field pair. In + addition, options can be simple primitive values such as a string array, in this case no optionLabel or optionValue is necessary. +

+ +

+ Options as SelectItems +

+ + {` const citySelectItems = [ {label: 'New York', value: 'NY'}, {label: 'Rome', value: 'RM'}, @@ -475,17 +477,19 @@ const citySelectItems = [ {label: 'Paris', value: 'PRS'} ]; `} - +
- -{` + + {` setCity(e.value)} /> `} - + -

Options as any type

- -{` +

+ Options as any type +

+ + {` const cities = [ {name: 'New York', code: 'NY'}, {name: 'Rome', code: 'RM'}, @@ -494,38 +498,44 @@ const cities = [ {name: 'Paris', code: 'PRS'} ]; `} - +
- -{` + + {` setCity(e.value)} /> setCity(e.value)} /> `} - -

When optionValue is not defined, value of an option refers to the option object itself.

+
+

+ When optionValue is not defined, value of an option refers to the option object itself. +

Selection
-

Listbox allows selection of either single or multiple items. In single case, model should be a single object reference whereas in multiple case should be an array. Multiple items can either be selected - using metaKey or toggled individually depending on the value of metaKeySelection property value which is false by default. On touch enabled - devices metaKeySelection is turned on automatically even when enabled.

+

+ Listbox allows selection of either single or multiple items. In single case, model should be a single object reference whereas in multiple case should be an array. Multiple items can either be selected using metaKey or toggled + individually depending on the value of metaKeySelection property value which is false by default. On touch enabled devices metaKeySelection is turned on automatically even when enabled. +

- -{` + + {` setCity(e.value)} multiple /> `} - +
Custom Content
-

Label of an option is used as the display text of an item by default, for custom content support define an itemTemplate property. Its value can be JSXElement, function or string. For custom filter support, define a filterTemplate function that gets the option instance as a parameter and returns the content for the filter element.

+

+ Label of an option is used as the display text of an item by default, for custom content support define an itemTemplate property. Its value can be JSXElement, function or string. For custom filter support, define a{' '} + filterTemplate function that gets the option instance as a parameter and returns the content for the filter element. +

- -{` + + {` setCity(e.value)} itemTemplate={itemTemplate} filter filterTemplate={filterTemplate}/> `} - + - -{` + + {` const [filterValue, setFilterValue] = useState(''); const filterInputRef = React.useRef(); @@ -556,30 +566,35 @@ const myFilterFunction = (event, options) => { options.filter(event); } `} - +
Filtering
-

Options can be filtered using an input field in the overlay by enabling the filter property. By default filtering is done against - label of the items and filterBy property is available to choose one or more properties of the options. In addition filterMatchMode can be utilized - to define the filtering algorithm, valid options are "contains" (default), "startsWith", "endsWith", "equals" and "notEquals". - Also, the filterValue and onFilterValueChange properties can be used to control the filter value.

- - -{` +

+ Options can be filtered using an input field in the overlay by enabling the filter property. By default filtering is done against label of the items and filterBy property is available to choose one or more + properties of the options. In addition filterMatchMode can be utilized to define the filtering algorithm, valid options are "contains" (default), "startsWith", "endsWith", "equals" and "notEquals". Also, the{' '} + filterValue and onFilterValueChange properties can be used to control the filter value. +

+ + + {` setCity(e.value)} filter /> `} - +
-

Filter input can be customized with the filterInputProps option that passes any property to the filter input element.

- -{` +

+ Filter input can be customized with the filterInputProps option that passes any property to the filter input element. +

+ + {` setCity(e.value)} filter filterInputProps={{className:'p-3', maxLength: 10}}/> `} - +
Grouping
-

Options groups are specified with the optionGroupLabel and optionGroupChildren properties.

- -{` +

+ Options groups are specified with the optionGroupLabel and optionGroupChildren properties. +

+ + {` const groupedCities = [ { label: 'Germany', code: 'DE', @@ -610,13 +625,13 @@ const groupedCities = [ } ]; `} - +
- -{` + + {` setSelectedGroupedCity(e.value)} optionLabel="label" optionGroupLabel="label" optionGroupChildren="items" /> `} - +
SelectItem API
@@ -788,8 +803,10 @@ const groupedCities = [ metaKeySelection boolean true - Defines how multiple items can be selected, when true metaKey needs to be pressed to select or unselect an item and when set to false selection of each item - can be toggled individually. On touch enabled devices, metaKeySelection is turned off automatically. + + Defines how multiple items can be selected, when true metaKey needs to be pressed to select or unselect an item and when set to false selection of each item can be toggled individually. On touch enabled + devices, metaKeySelection is turned off automatically. + filter @@ -855,7 +872,9 @@ const groupedCities = [ virtualScrollerOptions object null - Whether to use the virtualScroller feature. The properties of VirtualScroller component can be used like an object in it. + + Whether to use the virtualScroller feature. The properties of VirtualScroller component can be used like an object in it. + @@ -874,15 +893,17 @@ const groupedCities = [ onChange - event.originalEvent: Browser event
- event.value: Single value or an array of values depending on the selection mode
+ + event.originalEvent: Browser event
+ event.value: Single value or an array of values depending on the selection mode
Callback to invoke when value of listbox changes. onFilterValueChange - event.originalEvent: Browser event
- event.value: the filtered value
+ + event.originalEvent: Browser event
+ event.value: the filtered value
Callback to invoke when filter value changes. @@ -891,7 +912,9 @@ const groupedCities = [
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

@@ -926,95 +949,123 @@ const groupedCities = [
Accessibility
- -
Screen Reader
-

Value to describe the component can be provided aria-labelledby or aria-label props. The list element has a listbox role with the aria-multiselectable attribute that sets to true when multiple selection is enabled. - Each list item has an option role with aria-selected and aria-disabled as their attributes.

-

If filtering is enabled, filterInputProps can be defined to give aria-* props to the input element. Alternatively filterPlaceholder is usually utilized by the screen readers as well.

- -{` + +
Screen Reader
+

+ Value to describe the component can be provided aria-labelledby or aria-label props. The list element has a listbox role with the aria-multiselectable attribute that sets to true when multiple + selection is enabled. Each list item has an option role with aria-selected and aria-disabled as their attributes. +

+

+ If filtering is enabled, filterInputProps can be defined to give aria-* props to the input element. Alternatively filterPlaceholder is usually utilized by the screen readers as well. +

+ + {` Options `} - -
Keyboard Support
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
KeyFunction
tabMoves focus to the first selected option, if there is none then first option receives the focus.
up arrowMoves focus to the previous option.
down arrowMoves focus to the next option.
enterToggles the selected state of the focused option.
spaceToggles the selected state of the focused option.
homeMoves focus to the first option.
endMoves focus to the last option.
shift + down arrowMoves focus to the next option and toggles the selection state.
shift + up arrowMoves focus to the previous option and toggles the selection state.
shift + spaceSelects the items between the most recently selected option and the focused option.
control + shift + homeSelects the focused options and all the options up to the first one.
control + shift + endSelects the focused options and all the options down to the last one.
control + aSelects all options.
-
- + +
Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the first selected option, if there is none then first option receives the focus.
+ up arrow + Moves focus to the previous option.
+ down arrow + Moves focus to the next option.
+ enter + Toggles the selected state of the focused option.
+ space + Toggles the selected state of the focused option.
+ home + Moves focus to the first option.
+ end + Moves focus to the last option.
+ shift + down arrow + Moves focus to the next option and toggles the selection state.
+ shift + up arrow + Moves focus to the previous option and toggles the selection state.
+ shift + space + Selects the items between the most recently selected option and the focused option.
+ control + shift + home + Selects the focused options and all the options up to the first one.
+ control + shift + end + Selects the focused options and all the options down to the last one.
+ control + a + Selects all options.
+
+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'ListBoxDemo', sources: sources }) - } + {useLiveEditorTabs({ name: 'ListBoxDemo', sources: sources })}
); -}) +}); export default ListBoxDoc; diff --git a/components/doc/megamenu/index.js b/components/doc/megamenu/index.js index fc1778a5fc..b19016a8ed 100644 --- a/components/doc/megamenu/index.js +++ b/components/doc/megamenu/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const MegaMenuDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -155,7 +154,7 @@ export class MegaMenuDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React from 'react'; @@ -296,7 +295,7 @@ const MegaMenuDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React from 'react'; @@ -437,7 +436,7 @@ const MegaMenuDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -581,33 +580,35 @@ const MegaMenuDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { MegaMenu } from 'primereact/megamenu'; `} - +
Import via CDN
- -{` + + {` `} - +
MenuItem API
-

MegaMenu uses the common menu item api to define its items, visit MenuModel for details.

+

+ MegaMenu uses the common menu item api to define its items, visit MenuModel for details. +

MegaMenu requires a collection of menuitems as its model.

- -{` + + {` const items = [ { label: 'Videos', icon: 'pi pi-fw pi-video', @@ -721,33 +722,33 @@ const items = [ } ] `} - + - -{` + + {` `} - +
Orientation

Default orientation is "horizontal" with "vertical" as the alternative.

- -{` + + {` `} - +
Custom Content

The megamenu can display custom content by using the "start" and "end" properties.

- -{` + + {` } end={
- ) -}) + ); +}); export default MegaMenuDoc; diff --git a/components/doc/mention/index.js b/components/doc/mention/index.js index b84697e478..9cef845597 100644 --- a/components/doc/mention/index.js +++ b/components/doc/mention/index.js @@ -5,9 +5,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const MentionDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -148,7 +147,7 @@ export class MentionDemo extends Component { ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -275,7 +274,7 @@ const MentionDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -402,7 +401,7 @@ const MentionDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -533,38 +532,40 @@ const MentionDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { Mention } from 'primereact/mention'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

Mention is used as a controlled component with suggestions and onSearch properties.

+

+ Mention is used as a controlled component with suggestions and onSearch properties. +

- -{` + + {` `} - + - -{` + + {` const customers = // datasource const onSearch = (event) => { @@ -586,17 +587,17 @@ const onSearch = (event) => { }, 250); } `} - +
Trigger

It is used to define the expected keyword/s in the input field to mention someone or something.

- -{` + + {` `} - +
Properties

InputTextarea passes any attribute to the underlying textarea element, additional attributes are as follows;

@@ -723,7 +724,13 @@ const onSearch = (event) => { transitionOptions object null - The properties of CSSTransition can be customized, except for "nodeRef" and "in" properties. + + The properties of{' '} + + CSSTransition + {' '} + can be customized, except for "nodeRef" and "in" properties. + @@ -767,14 +774,17 @@ const onSearch = (event) => { onSearch - event.originalEvent: Browser event
+ + event.originalEvent: Browser event
event.trigger: Current trigger keyword. Callback to invoke when search. onSelect - event.originalEvent: Browser event
+ + event.originalEvent: Browser event +
event.suggestion: Selected item Callback to invoke when selection changes. @@ -820,14 +830,19 @@ const onSearch = (event) => {
Accessibility
- -
Screen Reader
-

Value to describe the component can either be provided via label tag combined with inputId prop or using aria-labelledby, aria-label props. The input element has combobox role - in addition to aria-autocomplete, aria-haspopup and aria-expanded attributes. The relation between the input and the popup is created with aria-controls and aria-activedescendant attribute is used - to instruct screen reader which option to read during keyboard navigation within the popup list.

-

The popup list has an id that refers to the aria-controls attribute of the input element and uses listbox as the role. Each list item has option role and an id to match the aria-activedescendant of the input element.

- -{` + +
Screen Reader
+

+ Value to describe the component can either be provided via label tag combined with inputId prop or using aria-labelledby, aria-label props. The input element has combobox role in addition + to aria-autocomplete, aria-haspopup and aria-expanded attributes. The relation between the input and the popup is created with aria-controls and aria-activedescendant attribute is used to + instruct screen reader which option to read during keyboard navigation within the popup list. +

+

+ The popup list has an id that refers to the aria-controls attribute of the input element and uses listbox as the role. Each list item has option role and an id to match the aria-activedescendant{' '} + of the input element. +

+ + {` @@ -836,60 +851,70 @@ const onSearch = (event) => { `} - -
Keyboard Support
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
KeyFunction
tabMoves focus to the input element when popup is not visible. - If the popup is open and an item is highlighted then popup gets closed, item gets selected and focus moves to the next focusable element.
up arrowHighlights the previous item if popup is visible.
down arrowHighlights the next item if popup is visible.
enterSelects the highlighted item and closes the popup if popup is visible.
homeHighlights the first item if popup is visible.
endHighlights the last item if popup is visible.
escapeHides the popup.
-
-
+
+
Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the input element when popup is not visible. If the popup is open and an item is highlighted then popup gets closed, item gets selected and focus moves to the next focusable element.
+ up arrow + Highlights the previous item if popup is visible.
+ down arrow + Highlights the next item if popup is visible.
+ enter + Selects the highlighted item and closes the popup if popup is visible.
+ home + Highlights the first item if popup is visible.
+ end + Highlights the last item if popup is visible.
+ escape + Hides the popup.
+
+
Dependencies

None.

- - { - useLiveEditorTabs({ name: 'MentionDemo', sources: sources, service: 'CustomerService', data: 'customers-small' }) - } + {useLiveEditorTabs({ name: 'MentionDemo', sources: sources, service: 'CustomerService', data: 'customers-small' })} - ) -}) + ); +}); export default MentionDoc; diff --git a/components/doc/menu/index.js b/components/doc/menu/index.js index e28d9e4c32..c83d47e51b 100644 --- a/components/doc/menu/index.js +++ b/components/doc/menu/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const MenuDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -80,7 +79,7 @@ export class MenuDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useRef } from 'react'; @@ -147,7 +146,7 @@ const MenuDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useRef } from 'react'; @@ -214,7 +213,7 @@ const MenuDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -285,51 +284,53 @@ const MenuDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { Menu } from 'primereact/menu'; `} - +
Import via CDN
- -{` + + {` `} - +
MenuModel API
-

Menu uses the common menumodel api to define its items, visit MenuModel API for details.

+

+ Menu uses the common menumodel api to define its items, visit MenuModel API for details. +

Getting Started

Menu requires a collection of menuitems as its model.

- -{` + + {` `} - + - -{` + + {` let items = [ {label: 'New', icon: 'pi pi-fw pi-plus'}, {label: 'Delete', icon: 'pi pi-fw pi-trash'} ]; `} - +
SubMenus

Menu supports one level of nesting via subitems of an item.

- -{` + + {` let items = [ { label: 'Options', @@ -343,17 +344,17 @@ let items = [ } ] `} - +
Popup Mode

Menu is inline by default whereas popup mode is supported by enabling popup property and calling toggle method with an event of the target.

- -{` + + {`
- ) -}) + ); +}); export default MenuDoc; diff --git a/components/doc/menubar/index.js b/components/doc/menubar/index.js index a8219fd5b6..0bc94e88be 100644 --- a/components/doc/menubar/index.js +++ b/components/doc/menubar/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const MenubarDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -164,7 +163,7 @@ export class MenubarDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React from 'react'; @@ -313,7 +312,7 @@ const MenubarDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React from 'react'; @@ -462,7 +461,7 @@ const MenubarDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -614,40 +613,42 @@ const MenubarDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { Menubar } from 'primereact/menubar'; `} - +
Import via CDN
- -{` + + {` `} - +
MenuItem API
-

Menubar uses the common menu item api to define its items, visit MenuModel for details.

+

+ Menubar uses the common menu item api to define its items, visit MenuModel for details. +

Getting Started

Menubar requires nested menuitems as its model.

- -{` + + {` `} - + - -{` + + {` const items = [ { label:'File', @@ -777,19 +778,19 @@ const items = [ } ]; `} - +
Custom Content

The menubar can display custom content by using the "start" and "end" properties.

- -{` + + {` } end={
- ) -}) + ); +}); export default MenubarDoc; diff --git a/components/doc/messages/index.js b/components/doc/messages/index.js index cf230842ea..f8fdaaa4ff 100644 --- a/components/doc/messages/index.js +++ b/components/doc/messages/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const MessagesDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -114,10 +113,10 @@ export class MessagesDemo extends Component { } } ` - }, - 'hooks': { - tabName: 'Hooks Source', - content: ` + }, + hooks: { + tabName: 'Hooks Source', + content: ` import React, { useEffect, useRef } from 'react'; import { Messages } from 'primereact/messages'; import { Message } from 'primereact/message'; @@ -215,10 +214,10 @@ const MessagesDemo = () => { ) } ` - }, - 'ts': { - tabName: 'TS Source', - content: ` + }, + ts: { + tabName: 'TS Source', + content: ` import React, { useEffect, useRef } from 'react'; import { Messages } from 'primereact/messages'; import { Message } from 'primereact/message'; @@ -316,14 +315,14 @@ const MessagesDemo = () => { ) } ` - }, - 'browser': { - tabName: 'Browser Source', - imports: ` + }, + browser: { + tabName: 'Browser Source', + imports: ` `, - content: ` + content: ` const { useEffect, useState, useRef } = React; const { Messages } = primereact.messages; const { Message } = primereact.message; @@ -422,46 +421,48 @@ const MessagesDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { Messages } from 'primereact/messages'; import { Message } from 'primereact/message'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

A single message is specified by the Message interface in PrimeReact that defines various properties such as severity, - summary and detail. Messages are displayed by using the show method on the ref of the Messages instance.

+

+ A single message is specified by the Message interface in PrimeReact that defines various properties such as severity, summary and detail. Messages are displayed by using the show method on the ref of the Messages + instance. +

Note that for animations, messages requires react-transition-group package.

- -{` + + {` `} - + - -{` + + {` messages.current.show({severity: 'success', summary: 'Success Message', detail: 'Order submitted'}); `} - +
Message API
@@ -534,8 +535,8 @@ messages.current.show({severity: 'success', summary: 'Success Message', detail:
Showing Messages

Show method accepts either a single message or an array of messages.

- -{` + + {`
); -}) +}); export default MessagesDoc; diff --git a/components/doc/multiselect/index.js b/components/doc/multiselect/index.js index 814d852198..1cb5a0b6f2 100644 --- a/components/doc/multiselect/index.js +++ b/components/doc/multiselect/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const MultiSelectDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -199,7 +198,7 @@ export class MultiSelectDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect, useRef } from 'react'; @@ -373,7 +372,7 @@ const MultiSelectDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect, useRef } from 'react'; @@ -547,7 +546,7 @@ const MultiSelectDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -726,7 +725,7 @@ const MultiSelectDemo = () => { } ` } - } + }; const extFiles = { 'demo/MultiSelectDemo.css': { @@ -754,36 +753,39 @@ const MultiSelectDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { MultiSelect } from 'primereact/multiselect'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

MultiSelect is used as a controlled component with value and onChange properties along with the options collection. There are two alternatives - of how to define the options property; One way is providing a collection of SelectItem instances having label-value pairs - whereas other way is providing an array of arbitrary objects along with the optionLabel and optionValue properties to specify the label/value field pair. In addition, - options can be simple primitive values such as a string array, in this case no optionLabel or optionValue is necessary.

- -

Options as SelectItems

- -{` +

+ MultiSelect is used as a controlled component with value and onChange properties along with the options collection. There are two alternatives of how to define the options property; One way is providing a + collection of SelectItem instances having label-value pairs whereas other way is providing an array of arbitrary objects along with the optionLabel and optionValue properties to specify the label/value + field pair. In addition, options can be simple primitive values such as a string array, in this case no optionLabel or optionValue is necessary. +

+ +

+ Options as SelectItems +

+ + {` const citySelectItems = [ {label: 'New York', value: 'NY'}, {label: 'Rome', value: 'RM'}, @@ -792,17 +794,19 @@ const citySelectItems = [ {label: 'Paris', value: 'PRS'} ]; `} - +
- -{` + + {` setCities(e.value)} /> `} - + -

Options as any type

- -{` +

+ Options as any type +

+ + {` const cities = [ {name: 'New York', code: 'NY'}, {name: 'Rome', code: 'RM'}, @@ -811,35 +815,42 @@ const cities = [ {name: 'Paris', code: 'PRS'} ]; `} - +
- -{` + + {` setCities(e.value)} /> setCities(e.value)} /> `} - -

When optionValue is not defined, value of an option refers to the option object itself.

+
+

+ When optionValue is not defined, value of an option refers to the option object itself. +

Chips Display
-

A comma separated list is used by default to display selected items whereas alternative chip mode is provided using the display property to visualize the items as tokens.

- -{` +

+ A comma separated list is used by default to display selected items whereas alternative chip mode is provided using the display property to visualize the items as tokens. +

+ + {` setSelectedCities(e.value)} /> `} - +
Custom Content
-

Label of an option is used as the display text of an item by default, for custom content support define an itemTemplate function that gets the option instance as a parameter and returns the content. For custom filter support define a filterTemplate function that gets the option instance as a parameter and returns the content for the filter element.

+

+ Label of an option is used as the display text of an item by default, for custom content support define an itemTemplate function that gets the option instance as a parameter and returns the content. For custom filter + support define a filterTemplate function that gets the option instance as a parameter and returns the content for the filter element. +

- -{` + + {` setCities(e.value)} itemTemplate={itemTemplate} filter filterTemplate={filterTemplate}/> `} - + - -{` + + {` const [filterValue, setFilterValue] = useState(''); const filterInputRef = useRef(); @@ -870,32 +881,36 @@ const myFilterFunction = (event, options) => { options.filter(event); } `} - -

selectedItemTemplate can be used to customize the selected values display instead of the default comma separated list.

+
+

+ selectedItemTemplate can be used to customize the selected values display instead of the default comma separated list. +

- -{` + + {` setCities(e.value)} selectedItemTemplate={selectedItemTemplate} /> `} - + - -{` + + {` selectedItemTemplate(option) { // custom selected item content } `} - + -

In addition panelHeaderTemplate and panelFooterTemplate can be used to customize the header and footer of panel.

- -{` +

+ In addition panelHeaderTemplate and panelFooterTemplate can be used to customize the header and footer of panel. +

+ + {` setCities(e.value)} panelHeaderTemplate={panelHeaderTemplate} panelFooterTemplate={panelFooterTemplate} /> `} - +
- -{` + + {` panelHeaderTemplate(options) { // options.className: Style class of the panel header. // options.checkboxElement: Default checkbox element created by the component. @@ -914,12 +929,14 @@ panelFooterTemplate(options) { // options.props: component props. } `} - +
Grouping
-

Options groups are specified with the optionGroupLabel and optionGroupChildren properties.

- -{` +

+ Options groups are specified with the optionGroupLabel and optionGroupChildren properties. +

+ + {` const groupedCities = [ { label: 'Germany', code: 'DE', @@ -950,24 +967,25 @@ const groupedCities = [ } ]; `} - +
- -{` + + {` setSelectedGroupedCities(e.value)} optionLabel="label" optionGroupLabel="label" optionGroupChildren="items" /> `} - +
Filtering
-

Options can be filtered using an input field in the overlay by enabling the filter property. By default filtering is done against - label of the items and filterBy property is available to choose one or more properties of the options. In addition filterMatchMode can be utilized - to define the filtering algorithm, valid options are "contains" (default), "startsWith", "endsWith", "equals" and "notEquals".

+

+ Options can be filtered using an input field in the overlay by enabling the filter property. By default filtering is done against label of the items and filterBy property is available to choose one or more + properties of the options. In addition filterMatchMode can be utilized to define the filtering algorithm, valid options are "contains" (default), "startsWith", "endsWith", "equals" and "notEquals". +

- -{` + + {` setCities(e.value)} filter/> `} - +
SelectItem API
@@ -1020,12 +1038,12 @@ const groupedCities = [
- - - - - - + + + + + + @@ -1248,7 +1266,9 @@ const groupedCities = [ - + @@ -1284,7 +1304,13 @@ const groupedCities = [ - + @@ -1302,7 +1328,9 @@ const groupedCities = [ - + @@ -1324,17 +1352,20 @@ const groupedCities = [
NameTypeDefaultDescription
NameTypeDefaultDescription
appendTo DOM element | string document.bodyDOM element instance where the overlay panel should be mounted. Valid values are any DOM Element and 'self'. The self value is used to render a component where it is located. + DOM element instance where the overlay panel should be mounted. Valid values are any DOM Element and 'self'. The self value is used to render a component where it is located. +
maxSelectedLabelstransitionOptions object nullThe properties of CSSTransition can be customized, except for "nodeRef" and "in" properties. + The properties of{' '} + + CSSTransition + {' '} + can be customized, except for "nodeRef" and "in" properties. +
dropdownIconvirtualScrollerOptions object nullWhether to use the virtualScroller feature. The properties of VirtualScroller component can be used like an object in it. + Whether to use the virtualScroller feature. The properties of VirtualScroller component can be used like an object in it. +
showSelectAll
- - - - - + + + + + - @@ -1360,14 +1391,20 @@ const groupedCities = [ - + - + @@ -1378,11 +1415,11 @@ const groupedCities = [
NameParametersDescription
NameParametersDescription
onChangeevent.originalEvent: Browser event
- event.value: Current selected values
+
+ event.originalEvent: Browser event +
+ event.value: Current selected values +
Callback to invoke when value changes.
onFilterevent.originalEvent: Browser event
- event.filter: Filter value.
+ event.originalEvent: Browser event +
+ event.filter: Filter value. +
Callback to invoke on filtering.
onSelectAllevent.originalEvent: Browser event
- event.checked: Whether all data is selected.
+ event.originalEvent: Browser event +
+ event.checked: Whether all data is selected. +
Callback to invoke when all data is selected.
- - - - - + + + + + @@ -1395,7 +1432,9 @@ const groupedCities = [
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

NameParametersDescription
NameParametersDescription
@@ -1454,189 +1493,240 @@ const groupedCities = [
Accessibility
- -
Screen Reader
-

Value to describe the component can either be provided with aria-labelledby or aria-label props. The multiselect component has a combobox role - in addition to aria-haspopup and aria-expanded attributes. The relation between the combobox and the popup is created with aria-controls attribute that refers to the id of the popup listbox.

-

The popup listbox uses listbox as the role with aria-multiselectable enabled. Each list item has an option role along with aria-label, aria-selected and aria-disabled attributes.

- -

Checkbox component at the header uses a hidden native checkbox element internally that is only visible to screen readers. Value to read is defined with the selectAll and unselectAll keys of the aria property from the locale API.

- -

If filtering is enabled, filterInputProps can be defined to give aria-* props to the input element.

- -

Close button uses close key of the aria property from the locale API as the aria-label by default, this can be overriden with the closeButtonProps.

- -{` + +
Screen Reader
+

+ Value to describe the component can either be provided with aria-labelledby or aria-label props. The multiselect component has a combobox role in addition to aria-haspopup and{' '} + aria-expanded attributes. The relation between the combobox and the popup is created with aria-controls attribute that refers to the id of the popup listbox. +

+

+ The popup listbox uses listbox as the role with aria-multiselectable enabled. Each list item has an option role along with aria-label, aria-selected and aria-disabled attributes. +

+ +

+ Checkbox component at the header uses a hidden native checkbox element internally that is only visible to screen readers. Value to read is defined with the selectAll and unselectAll keys of the aria{' '} + property from the locale API. +

+ +

+ If filtering is enabled, filterInputProps can be defined to give aria-* props to the input element. +

+ +

+ Close button uses close key of the aria property from the locale API as the aria-label by default, this can be overriden with the closeButtonProps. +

+ + {` Options `} - - -
Closed State Keyboard Support
-
-
- - - - - - - - - - - - - - - - - - - - - - - - -
KeyFunction
tabMoves focus to the multiselect element.
spaceOpens the popup and moves visual focus to the selected option, if there is none then first option receives the focus.
down arrowOpens the popup and moves visual focus to the selected option, if there is none then first option receives the focus.
up arrowOpens the popup and moves visual focus to the selected option, if there is none then first option receives the focus.
-
+ + +
Closed State Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the multiselect element.
+ space + Opens the popup and moves visual focus to the selected option, if there is none then first option receives the focus.
+ down arrow + Opens the popup and moves visual focus to the selected option, if there is none then first option receives the focus.
+ up arrow + Opens the popup and moves visual focus to the selected option, if there is none then first option receives the focus.
+
-
Popup Keyboard Support
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
KeyFunction
tabMoves focus to the next focusable element in the popup, if there is none then first focusable element receives the focus.
shift + tabMoves focus to the previous focusable element in the popup, if there is none then last focusable element receives the focus.
enterToggles the selection state of the focused option.
spaceToggles the selection state of the focused option.
escapeCloses the popup, moves focus to the multiselect element.
down arrowMoves focus to the next option, if there is none then visual focus does not change.
up arrowMoves focus to the previous option, if there is none then visual focus does not change.
homeMoves focus to the first option.
endMoves focus to the last option.
any printable characterMoves focus to the option whose label starts with the characters being typed if dropdown is not editable.
-
+
Popup Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the next focusable element in the popup, if there is none then first focusable element receives the focus.
+ shift + tab + Moves focus to the previous focusable element in the popup, if there is none then last focusable element receives the focus.
+ enter + Toggles the selection state of the focused option.
+ space + Toggles the selection state of the focused option.
+ escape + Closes the popup, moves focus to the multiselect element.
+ down arrow + Moves focus to the next option, if there is none then visual focus does not change.
+ up arrow + Moves focus to the previous option, if there is none then visual focus does not change.
+ home + Moves focus to the first option.
+ end + Moves focus to the last option.
+ any printable character + Moves focus to the option whose label starts with the characters being typed if dropdown is not editable.
+
-
Toggle All Checkbox Keyboard Support
-
- - - - - - - - - - - - - - - - - -
KeyFunction
spaceToggles the checked state.
escapeCloses the popup.
-
+
Toggle All Checkbox Keyboard Support
+
+ + + + + + + + + + + + + + + + + +
KeyFunction
+ space + Toggles the checked state.
+ escape + Closes the popup.
+
-
Filter Input Keyboard Support
-
- - - - - - - - - - - - - - - - - -
KeyFunction
enterCloses the popup and moves focus to the multiselect element.
escapeCloses the popup and moves focus to the multiselect element.
-
+
Filter Input Keyboard Support
+
+ + + + + + + + + + + + + + + + + +
KeyFunction
+ enter + Closes the popup and moves focus to the multiselect element.
+ escape + Closes the popup and moves focus to the multiselect element.
+
-
Close Button Keyboard Support
-
- - - - - - - - - - - - - - - - - - - - - -
KeyFunction
enterCloses the popup and moves focus to the multiselect element.
spaceCloses the popup and moves focus to the multiselect element.
escapeCloses the popup and moves focus to the multiselect element.
-
- +
Close Button Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ enter + Closes the popup and moves focus to the multiselect element.
+ space + Closes the popup and moves focus to the multiselect element.
+ escape + Closes the popup and moves focus to the multiselect element.
+
+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'MultiSelectDemo', sources: sources, extFiles: extFiles }) - } + {useLiveEditorTabs({ name: 'MultiSelectDemo', sources: sources, extFiles: extFiles })}
); -}) +}); export default MultiSelectDoc; diff --git a/components/doc/multistatecheckbox/index.js b/components/doc/multistatecheckbox/index.js index 2d53520a15..6454599820 100644 --- a/components/doc/multistatecheckbox/index.js +++ b/components/doc/multistatecheckbox/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const MultiStateCheckboxDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -45,7 +44,7 @@ export class MultiStateCheckboxDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -72,7 +71,7 @@ const MultiStateCheckboxDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -99,9 +98,9 @@ const MultiStateCheckboxDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', - imports: ` + imports: ` `, content: ` @@ -129,31 +128,33 @@ const MultiStateCheckboxDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { MultiStateCheckbox } from 'primereact/multistatecheckbox'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

MultiStateCheckbox is used as a controlled input with value, options and onChange properties. The optionValue field refers to the value of each option.

- -{` +

+ MultiStateCheckbox is used as a controlled input with value, options and onChange properties. The optionValue field refers to the value of each option. +

+ + {` const [value, setValue] = useState('public'); const options = [ { value: 'public', icon: 'pi pi-globe' }, @@ -161,257 +162,269 @@ const options = [ { value: 'private', icon: 'pi pi-lock' } ]; `} - +
- -{` + + {` setValue(e.value)} optionValue="value" /> `} - - -
Icons
-

Icon of each option is defined with the icon property of an option object. For templating use iconTemplate to render custom content inside the checkbox.

+
-
Option
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
iconstringnullThe icon of the option. This is optional. The iconTemplate property can be used instead.
styleobjectnullInline style of the checkbox element when the option is selected.
classNamestringnullStyle class of the checkbox element when the option is selected.
-
- -
Properties
-

Any valid attribute is passed to the root element implicitly, extended properties are as follows;

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
valueanynullValue of the MultiStateCheckbox.
optionsarraynullAn array to display as the available options.
optionValuestringnullProperty name to use as the value of an option, defaults to the option itself when not defined.
optionLabelstringnullProperty name to refer to the option label, used by screen readers only. Defaults to optionValue.
iconTemplateanynullTemplate of icon for the selected option.
dataKeystringnullA property to uniquely match the value in options for better performance.
stylestringnullInline style of the element.
classNamestringnullStyle class of the element.
disabledbooleanfalseWhen present, it specifies that the element value cannot be altered.
readOnlybooleanfalseWhen present, it specifies that the value cannot be changed.
tabIndexnumbernullIndex of the element in tabbing order.
emptybooleantrueIf false, the empty state is skipped in the chekbox.
tooltipanynullContent of the tooltip.
tooltipOptionsobjectnullConfiguration of the tooltip, refer to the tooltip documentation for more information.
-
+
Icons
+

+ Icon of each option is defined with the icon property of an option object. For templating use iconTemplate to render custom content inside the checkbox. +

-
Events
-
- - - - - - - - - - - - - - - -
NameParametersDescription
onChangeevent.originalEvent: Browser event
- event.value: Current Value -
Callback to invoke on value change
-
+
Option
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDefaultDescription
iconstringnull + The icon of the option. This is optional. The iconTemplate property can be used instead. +
styleobjectnullInline style of the checkbox element when the option is selected.
classNamestringnullStyle class of the checkbox element when the option is selected.
+
-
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
NameElement
p-chkboxContainer element
p-multistatechkboxContainer element
p-chkbox-boxContainer of icon.
p-chkbox-iconIcon element.
-
+
Properties
+

Any valid attribute is passed to the root element implicitly, extended properties are as follows;

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDefaultDescription
idstringnullUnique identifier of the element.
valueanynullValue of the MultiStateCheckbox.
optionsarraynullAn array to display as the available options.
optionValuestringnullProperty name to use as the value of an option, defaults to the option itself when not defined.
optionLabelstringnullProperty name to refer to the option label, used by screen readers only. Defaults to optionValue.
iconTemplateanynullTemplate of icon for the selected option.
dataKeystringnullA property to uniquely match the value in options for better performance.
stylestringnullInline style of the element.
classNamestringnullStyle class of the element.
disabledbooleanfalseWhen present, it specifies that the element value cannot be altered.
readOnlybooleanfalseWhen present, it specifies that the value cannot be changed.
tabIndexnumbernullIndex of the element in tabbing order.
emptybooleantrueIf false, the empty state is skipped in the chekbox.
tooltipanynullContent of the tooltip.
tooltipOptionsobjectnullConfiguration of the tooltip, refer to the tooltip documentation for more information.
+
-
Accessibility
- -
Screen Reader
-

MultiStateCheckbox component uses an element with checkbox role. Value to describe the component can either be provided with aria-labelledby or aria-label props. Component adds an element with - aria-live attribute that is only visible to screen readers to read the value displayed. Values to read are defined with the optionLabel property that defaults to optionValue if not defined. Unchecked state label on the other hand is - retrieved from nullLabel key of the aria property from the locale API. This is an example of a custom accessibility implementation as there is no one to one mapping between the component design and the WCAG specification.

- -{` -Access Type - +
Events
+
+ + + + + + + + + + + + + + + +
NameParametersDescription
onChange + event.originalEvent: Browser event
+ event.value: Current Value +
Callback to invoke on value change
+
- -`} -
-
Keyboard Support
+
Styling
+

+ Following is the list of structural style classes, for theming classes visit theming page. +

- - + + - - + + + + + + - - + + + + + +
KeyFunctionNameElement
tabMoves focus to the checkbox.p-chkboxContainer element
p-multistatechkboxContainer element
spaceToggles between the values.p-chkbox-boxContainer of icon.
p-chkbox-iconIcon element.
-
-
Dependencies
-

None.

-
- { - useLiveEditorTabs({ name: 'MultiStateCheckboxDemo', sources: sources }) - } -
-
- ) -}) +
Accessibility
+ +
Screen Reader
+

+ MultiStateCheckbox component uses an element with checkbox role. Value to describe the component can either be provided with aria-labelledby or aria-label props. Component adds an element with + aria-live attribute that is only visible to screen readers to read the value displayed. Values to read are defined with the optionLabel property that defaults to optionValue if not defined. Unchecked + state label on the other hand is retrieved from nullLabel key of the aria property from the locale API. This is an example of a custom accessibility implementation as there is no + one to one mapping between the component design and the WCAG specification. +

+ + {` +Access Type + + + +`} + +
Keyboard Support
+
+ + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the checkbox.
+ space + Toggles between the values.
+
+
+
Dependencies
+

None.

+
+ + {useLiveEditorTabs({ name: 'MultiStateCheckboxDemo', sources: sources })} +
+
+ ); +}); export default MultiStateCheckboxDoc; diff --git a/components/doc/orderlist/index.js b/components/doc/orderlist/index.js index a7294198c8..31387f276f 100644 --- a/components/doc/orderlist/index.js +++ b/components/doc/orderlist/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const OrderListDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -65,7 +64,7 @@ export class OrderListDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -111,7 +110,7 @@ const OrderListDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -157,7 +156,7 @@ const OrderListDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -262,61 +261,68 @@ const OrderListDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { OrderList } from 'primereact/orderlist'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

OrderList requires an array as its value, a template for its content where each item in the array can be accessed inside the template and onChange - callback to update the value after reorder. +

+ OrderList requires an array as its value, a template for its content where each item in the array can be accessed inside the template and onChange + callback to update the value after reorder.

- -{` + + {` setProducts(e.value)}> `} - +
DragDrop
-

Items can be reordered using drag and drop by enabling dragdrop property.

+

+ Items can be reordered using drag and drop by enabling dragdrop property. +

- -{` + + {` setProducts(e.value)}> `} - +
Filtering
-

Items can be filtered using an input field by enabling the filter property. By default filtering is done against - label of the items and filterBy property is available to choose one or more properties of the options. In addition filterMatchMode can be utilized - to define the filtering algorithm, valid options are "contains" (default), "startsWith", "endsWith", "equals" and "notEquals".

+

+ Items can be filtered using an input field by enabling the filter property. By default filtering is done against label of the items and filterBy property is available to choose one or more properties of the + options. In addition filterMatchMode can be utilized to define the filtering algorithm, valid options are "contains" (default), "startsWith", "endsWith", "equals" and "notEquals". +

- -{` + + {` `} - +
Custom Content
-

For custom content support define an itemTemplate function that gets the item instance as a parameter and returns the content. For custom filter support define a filterTemplate function that gets the option instance as a parameter and returns the content for the filter element.

+

+ For custom content support define an itemTemplate function that gets the item instance as a parameter and returns the content. For custom filter support define a filterTemplate function that gets the option + instance as a parameter and returns the content for the filter element. +

- -{` + + {` const [filterValue, setFilterValue] = useState(''); const filterInputRef = useRef(); @@ -347,24 +353,24 @@ const myFilterFunction = (event, options) => { options.filter(event); } `} - + - -{` + + {` `} - +
Properties
- - - - - - + + + + + + @@ -477,23 +483,27 @@ const myFilterFunction = (event, options) => {
NameTypeDefaultDescription
NameTypeDefaultDescription
- - - - - + + + + + - + - + @@ -521,7 +531,9 @@ const myFilterFunction = (event, options) => {
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

NameParametersDescription
NameParametersDescription
onChangeevent.originalEvent: Browser event
- event.value: Reordered list
+ event.originalEvent: Browser event
+ event.value: Reordered list +
Callback to invoke when list is reordered.
onFilterevent.originalEvent: Original event
- event.filter: Value of the filter input
+ event.originalEvent: Original event
+ event.filter: Value of the filter input +
Callback to invoke when the value is filtered.
@@ -560,119 +572,152 @@ const myFilterFunction = (event, options) => {
Accessibility
- -
Screen Reader
-

Value to describe the listbox can be provided with listProps by passing aria-labelledby or aria-label props. The list element has a listbox role with the aria-multiselectable attribute. - Each list item has an option role with aria-selected and aria-disabled as their attributes.

-

Controls buttons are button elements with an aria-label that refers to the aria.moveTop, aria.moveUp, aria.moveDown and aria.moveBottom properties of the locale API by default, alternatively you may use - moveTopButtonProps, moveUpButtonProps, moveDownButtonProps and moveBottomButtonProps to customize the buttons like overriding the default aria-label attributes.

- -{` + +
Screen Reader
+

+ Value to describe the listbox can be provided with listProps by passing aria-labelledby or aria-label props. The list element has a listbox role with the aria-multiselectable attribute. + Each list item has an option role with aria-selected and aria-disabled as their attributes. +

+

+ Controls buttons are button elements with an aria-label that refers to the aria.moveTop, aria.moveUp, aria.moveDown and aria.moveBottom properties of the{' '} + locale API by default, alternatively you may use + moveTopButtonProps, moveUpButtonProps, moveDownButtonProps and moveBottomButtonProps to customize the buttons like overriding the default aria-label attributes. +

+ + {` Options `} - -
ListBox Keyboard Support
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
KeyFunction
tabMoves focus to the first selected option, if there is none then first option receives the focus.
up arrowMoves focus to the previous option.
down arrowMoves focus to the next option.
enterToggles the selected state of the focused option.
spaceToggles the selected state of the focused option.
homeMoves focus to the first option.
endMoves focus to the last option.
shift + down arrowMoves focus to the next option and toggles the selection state.
shift + up arrowMoves focus to the previous option and toggles the selection state.
shift + spaceSelects the items between the most recently selected option and the focused option.
control + shift + homeSelects the focused options and all the options up to the first one.
control + shift + endSelects the focused options and all the options down to the first one.
control + aSelects all options.
-
- -
Buttons Keyboard Support
-
- - - - - - - - - - - - - - - - - -
KeyFunction
enterExecutes button action.
spaceExecutes button action.
-
- + +
ListBox Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the first selected option, if there is none then first option receives the focus.
+ up arrow + Moves focus to the previous option.
+ down arrow + Moves focus to the next option.
+ enter + Toggles the selected state of the focused option.
+ space + Toggles the selected state of the focused option.
+ home + Moves focus to the first option.
+ end + Moves focus to the last option.
+ shift + down arrow + Moves focus to the next option and toggles the selection state.
+ shift + up arrow + Moves focus to the previous option and toggles the selection state.
+ shift + space + Selects the items between the most recently selected option and the focused option.
+ control + shift + home + Selects the focused options and all the options up to the first one.
+ control + shift + end + Selects the focused options and all the options down to the first one.
+ control + a + Selects all options.
+
+ +
Buttons Keyboard Support
+
+ + + + + + + + + + + + + + + + + +
KeyFunction
+ enter + Executes button action.
+ space + Executes button action.
+
+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'OrderListDemo', sources: sources, service: 'ProductService', data: 'products-small', extFiles: extFiles }) - } + {useLiveEditorTabs({ name: 'OrderListDemo', sources: sources, service: 'ProductService', data: 'products-small', extFiles: extFiles })}
); -}) +}); export default OrderListDoc; diff --git a/components/doc/organizationchart/index.js b/components/doc/organizationchart/index.js index df5b7b3b6a..ec6f003c87 100644 --- a/components/doc/organizationchart/index.js +++ b/components/doc/organizationchart/index.js @@ -5,9 +5,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const OrganizationChartDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -158,7 +157,7 @@ export class OrganizationChartDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -297,7 +296,7 @@ const OrganizationChartDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -436,7 +435,7 @@ const OrganizationChartDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -579,7 +578,7 @@ const OrganizationChartDemo = () => { } ` } - } + }; const extFiles = { 'demo/OrganizationChartDemo.css': { @@ -627,31 +626,31 @@ const OrganizationChartDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { OrganizationChart } from 'primereact/organizationchart'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started

OrganizationChart requires a model of TreeNode as its value.

- -{` + + {` export const OrganizationChartDemo = () => { const data = [{ @@ -690,19 +689,19 @@ export const OrganizationChartDemo = () => { ) } `} - +
Templating

Label of the treenode is displayed inside the node content by default and templating enables further customization.

- -{` + + {` `} - + - -{` + + {` const nodeTemplate = (node) => { if (node.type === "person") { @@ -722,18 +721,21 @@ const nodeTemplate = (node) => { } } `} - +
Expand/Collapse State

In order to display a treenode as expanded by default, set "expanded" property as true in your model.

Selection
-

OrganizationChart supports two selection methods; single or multiple. Selection is enabled by setting selectionMode property to the corresponding mode, defining selection property along with selectionChange callback.

- -{` +

+ OrganizationChart supports two selection methods; single or multiple. Selection is enabled by setting selectionMode property to the corresponding mode, defining selection property along with{' '} + selectionChange callback. +

+ + {` setSelectedNode(event.data)}> `} - +
Properties
@@ -806,20 +808,26 @@ const nodeTemplate = (node) => { onNodeSelect - event.originalEvent: browser event
- event.node: Selected node instance. + + event.originalEvent: browser event
+ event.node: Selected node instance. + Callback to invoke when a node is selected. onNodeUnselect - event.originalEvent: browser event
- event.node: Unselected node instance. + + event.originalEvent: browser event
+ event.node: Unselected node instance. + Callback to invoke when a node is unselected. onSelectionChange - event.originalEvent: browser event
- event.data: New selection. + + event.originalEvent: browser event
+ event.data: New selection. + Callback to invoke when node selection changes. @@ -870,49 +878,54 @@ const nodeTemplate = (node) => {
Accessibility
- -
Screen Reader
-

Component currently uses a table based implementation and does not provide high level of screen reader support, - a nested list implementation replacement is planned with aria roles and attributes aligned to a tree widget for high level of reader support in the upcoming versions.

- -
Keyboard Support
-
- - - - - - - - - - - - - - - - - - - - - -
KeyFunction
tabMoves focus through the focusable elements within the chart.
enterToggles the expanded state of a node.
spaceToggles the expanded state of a node.
-
-
+ +
Screen Reader
+

+ Component currently uses a table based implementation and does not provide high level of screen reader support, a nested list implementation replacement is planned with aria roles and attributes aligned to a tree widget + for high level of reader support in the upcoming versions. +

+ +
Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus through the focusable elements within the chart.
+ enter + Toggles the expanded state of a node.
+ space + Toggles the expanded state of a node.
+
+
Dependencies

None.

-
- { - useLiveEditorTabs({ name: 'OrganizationChartDemo', sources: sources, extFiles: extFiles }) - } + {useLiveEditorTabs({ name: 'OrganizationChartDemo', sources: sources, extFiles: extFiles })}
); -}) +}); export default OrganizationChartDoc; diff --git a/components/doc/overlaypanel/index.js b/components/doc/overlaypanel/index.js index 94c1a01d2d..a175a8fc7f 100644 --- a/components/doc/overlaypanel/index.js +++ b/components/doc/overlaypanel/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const OverlayPanelDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -82,7 +81,7 @@ export class OverlayPanelDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect, useRef } from 'react'; @@ -151,7 +150,7 @@ const OverlayPanelDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect, useRef } from 'react'; @@ -273,7 +272,7 @@ type ProductItem = { }; ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -364,73 +363,74 @@ const OverlayPanelDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { OverlayPanel } from 'primereact/overlaypanel'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started

OverlayPanel is accessed via its reference where visibility is controlled using toggle, show and hide methods.

- -{` + + {`
); -}) +}); export default ProgressBarDoc; diff --git a/components/doc/progressspinner/index.js b/components/doc/progressspinner/index.js index 2648f9fa99..a79c1211a8 100644 --- a/components/doc/progressspinner/index.js +++ b/components/doc/progressspinner/index.js @@ -6,11 +6,10 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const ProgressSpinnerDoc = memo(() => { - - const sources = { - 'class': { - tabName: 'Class Source', - content: ` + const sources = { + class: { + tabName: 'Class Source', + content: ` import React, { Component } from 'react'; import { ProgressSpinner } from 'primereact/progressspinner'; @@ -32,7 +31,7 @@ export class ProgressSpinnerDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React from 'react'; @@ -53,7 +52,7 @@ const ProgressSpinnerDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React from 'react'; @@ -74,7 +73,7 @@ const ProgressSpinnerDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -98,39 +97,39 @@ const ProgressSpinnerDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { ProgressSpinner } from 'primereact/progressspinner'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started

ProgressSpinner is defined using ProgressSpinner element.

- -{` + + {` `} - +
Colors

Colors of the spinner can be changed by overriding the keyframes animation

- -{` + + {` @keyframes p-progress-spinner-color { 100%, 0% { @@ -148,7 +147,7 @@ import { ProgressSpinner } from 'primereact/progressspinner'; } } `} - +
Properties
@@ -202,14 +201,16 @@ import { ProgressSpinner } from 'primereact/progressspinner';
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

- - - - + + + + @@ -229,29 +230,29 @@ import { ProgressSpinner } from 'primereact/progressspinner';
Accessibility
- -
Screen Reader
-

ProgressSpinner components uses progressbar role. Value to describe the component can be defined using aria-labelledby and aria-label props.

- -{` + +
Screen Reader
+

+ ProgressSpinner components uses progressbar role. Value to describe the component can be defined using aria-labelledby and aria-label props. +

+ + {` `} - +
-
Keyboard Support
-

Component does not include any interactive elements.

-
+
Keyboard Support
+

Component does not include any interactive elements.

+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'ProgressSpinnerDemo', sources: sources }) - } + {useLiveEditorTabs({ name: 'ProgressSpinnerDemo', sources: sources })} - ) -}) + ); +}); export default ProgressSpinnerDoc; diff --git a/components/doc/radiobutton/index.js b/components/doc/radiobutton/index.js index a241d861aa..771d66b066 100644 --- a/components/doc/radiobutton/index.js +++ b/components/doc/radiobutton/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const RadioButtonDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -67,7 +66,7 @@ export class RadioButtonDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -116,7 +115,7 @@ const RadioButtonDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -165,7 +164,7 @@ const RadioButtonDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -217,35 +216,35 @@ const RadioButtonDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { RadioButton } from 'primereact/radiobutton'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started

RadioButton is used as a controlled input with checked and onChange properties.

- -{` + + {` setValue(e.value)} checked={value === 'val1'} /> setValue(e.value)} checked={value === 'val2'} /> `} - +
Properties

Any valid attribute is passed to the root element implicitly, extended properties are as follows;

@@ -343,9 +342,11 @@ import { RadioButton } from 'primereact/radiobutton';
- + event.checked: Checked state as a boolean. + @@ -353,7 +354,9 @@ import { RadioButton } from 'primereact/radiobutton';
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

NameElement
NameElement
onChangeevent.originalEvent: Original event
+
+ event.originalEvent: Original event
event.value: Value of the radiobutton
- event.checked: Checked state as a boolean.
Callback to invoke on radio button click.
@@ -384,11 +387,14 @@ import { RadioButton } from 'primereact/radiobutton';
Accessibility
- -
Screen Reader
-

RadioButton component uses a hidden native radio button element internally that is only visible to screen readers. Value to describe the component can either be provided via label tag combined with inputId prop or using aria-labelledby, aria-label props.

- -{` + +
Screen Reader
+

+ RadioButton component uses a hidden native radio button element internally that is only visible to screen readers. Value to describe the component can either be provided via label tag combined with inputId{' '} + prop or using aria-labelledby, aria-label props. +

+ + {` @@ -397,57 +403,59 @@ import { RadioButton } from 'primereact/radiobutton'; `} - -
Keyboard Support
-
-
- - - - - - - - - - - - - - - - - - - - - - - - -
KeyFunction
tabMoves focus to the checked radio button, if there is none within the group then first radio button receives the focus.
- - left arrow - up arrow - - Moves focus to the previous radio button, if there is none then last radio button receives the focus.
- - right arrow - down arrow - - Moves focus to the next radio button, if there is none then first radio button receives the focus.
spaceIf the focused radio button is unchecked, changes the state to checked.
-
- + +
Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the checked radio button, if there is none within the group then first radio button receives the focus.
+ + left arrow + up arrow + + Moves focus to the previous radio button, if there is none then last radio button receives the focus.
+ + right arrow + down arrow + + Moves focus to the next radio button, if there is none then first radio button receives the focus.
+ space + If the focused radio button is unchecked, changes the state to checked.
+
+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'RadioButtonDemo', sources: sources }) - } + {useLiveEditorTabs({ name: 'RadioButtonDemo', sources: sources })}
- ) -}) + ); +}); export default RadioButtonDoc; diff --git a/components/doc/rating/index.js b/components/doc/rating/index.js index 75a224e2f1..7f2ca44eb0 100644 --- a/components/doc/rating/index.js +++ b/components/doc/rating/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const RatingDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -47,7 +46,7 @@ export class RatingDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -77,7 +76,7 @@ const RatingDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -107,7 +106,7 @@ const RatingDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -140,53 +139,59 @@ const RatingDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { Rating } from 'primereact/rating'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

Rating is used a controlled input component with value and onChange properties.

+

+ Rating is used a controlled input component with value and onChange properties. +

- -{` + + {` setValue(e.value)} /> `} - +
Number of Stars
-

Number of stars to display is defined with stars property, default is 5.

+

+ Number of stars to display is defined with stars property, default is 5. +

- -{` + + {` setValue(e.value)} stars={5} /> `} - +
Cancel
-

A cancel icon is displayed to reset the value by default, set cancel as false to remove this option.

+

+ A cancel icon is displayed to reset the value by default, set cancel as false to remove this option. +

- -{` + + {` setValue(e.value)} cancel={5} /> `} - +
Properties

Any valid attribute is passed to the root element implicitly, extended properties are as follows;

@@ -278,7 +283,8 @@ import { Rating } from 'primereact/rating'; onChange - event.originalEvent: Browser event
+ + event.originalEvent: Browser event
event.value: selected value Callback to invoke on value change. @@ -319,61 +325,66 @@ import { Rating } from 'primereact/rating';
Accessibility
- -
Screen Reader
-

Rating component internally uses radio buttons that are only visible to screen readers. The value to read for item is retrieved from the locale API via star and stars of the aria property.

- -
Keyboard Support
-

Keyboard interaction is derived from the native browser handling of radio buttons in a group.

-
- - - - - - - - - - - - - - - - - - - - - - - - - -
KeyFunction
tabMoves focus to the star representing the value, if there is none then first star receives the focus.
- - left arrow - up arrow - - Moves focus to the previous star, if there is none then last radio button receives the focus.
- - right arrow - down arrow - - Moves focus to the next star, if there is none then first star receives the focus.
spaceIf the focused star does not represent the value, changes the value to the star value.
-
-
+ +
Screen Reader
+

+ Rating component internally uses radio buttons that are only visible to screen readers. The value to read for item is retrieved from the locale API via star and stars of the{' '} + aria property. +

+ +
Keyboard Support
+

Keyboard interaction is derived from the native browser handling of radio buttons in a group.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the star representing the value, if there is none then first star receives the focus.
+ + left arrow + up arrow + + Moves focus to the previous star, if there is none then last radio button receives the focus.
+ + right arrow + down arrow + + Moves focus to the next star, if there is none then first star receives the focus.
+ space + If the focused star does not represent the value, changes the value to the star value.
+
+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'RatingDemo', sources: sources }) - } + {useLiveEditorTabs({ name: 'RatingDemo', sources: sources })}
- ) -}) + ); +}); export default RatingDoc; diff --git a/components/doc/ripple/index.js b/components/doc/ripple/index.js index adf186d957..ab0dd76a97 100644 --- a/components/doc/ripple/index.js +++ b/components/doc/ripple/index.js @@ -5,9 +5,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const RippleDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -50,7 +49,7 @@ export class RippleDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React from 'react'; @@ -86,7 +85,7 @@ const RippleDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React from 'react'; @@ -122,7 +121,7 @@ const RippleDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -200,66 +199,73 @@ const RippleDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import PrimeReact from 'primereact/api'; import { Ripple } from 'primereact/ripple'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

Ripple effect is an optional animation for the supported components such as buttons. It is disabled by default and needs to be enabled at - your app's main container (e.g. App.js) using the PrimeReact class.

- -{` +

+ Ripple effect is an optional animation for the supported components such as buttons. It is disabled by default and needs to be enabled at your app's main container (e.g. App.js) using the PrimeReact class. +

+ + {` PrimeReact.ripple = true; `} - +
-

Note: That would be it to enable ripple on PrimeReact components, next section describes how to use it with your own components and standard elements.

+

+ Note: That would be it to enable ripple on PrimeReact components, next section describes how to use it with your own components and standard elements. +

Usage
-

Ripple is a component that needs to be imported and activated using PrimeReact.ripple = true

- -{` +

+ Ripple is a component that needs to be imported and activated using PrimeReact.ripple = true +

+ + {` import { Ripple } from 'primereact/ripple';
`} -
+
Styling
-

Default styling of the animation adds a shade of white. This can easily be customized using css that changes the color of .p-ink element.

- -{` +

+ Default styling of the animation adds a shade of white. This can easily be customized using css that changes the color of .p-ink element. +

+ + {`
`} -
+
- -{` + + {` .p-ripple.purple .p-ink { background: rgba(256,39,176,.3); } `} - +
Styling
@@ -288,23 +294,23 @@ import { Ripple } from 'primereact/ripple';
-
Screen Reader
-

Ripple element has the aria-hidden attribute as true so that it gets ignored by the screen readers.

+
Screen Reader
+

+ Ripple element has the aria-hidden attribute as true so that it gets ignored by the screen readers. +

-
Keyboard Support
-

Component does not include any interactive elements.

-
+
Keyboard Support
+

Component does not include any interactive elements.

+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'RippleDemo', sources: sources, extFiles: extFiles }) - } + {useLiveEditorTabs({ name: 'RippleDemo', sources: sources, extFiles: extFiles })}
); -}) +}); export default RippleDoc; diff --git a/components/doc/scrollpanel/index.js b/components/doc/scrollpanel/index.js index afa305f7d9..a81adb8e2b 100644 --- a/components/doc/scrollpanel/index.js +++ b/components/doc/scrollpanel/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const ScrollPanelDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -78,7 +77,7 @@ export class ScrollPanelDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React from 'react'; @@ -145,7 +144,7 @@ const ScrollPanelDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React from 'react'; @@ -211,8 +210,8 @@ const ScrollPanelDemo = () => { ) } ` - }, - 'browser': { + }, + browser: { tabName: 'Browser Source', imports: ` @@ -325,31 +324,31 @@ const ScrollPanelDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { ScrollPanel } from 'primereact/scrollpanel'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started

ScrollPanel is defined using dimensions for the scrollable viewport.

- -{` + + {` The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. His beloved son Michael has just come home from the war, but does not intend to become part of his father's business. @@ -357,12 +356,12 @@ import { ScrollPanel } from 'primereact/scrollpanel'; kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the family. `} - +
Customization

Look and feel can easily be customized, here is an example with a custom handle.

- -{` + + {` The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. His beloved son Michael has just come home from the war, but does not intend to become part of his father's business. @@ -370,10 +369,10 @@ import { ScrollPanel } from 'primereact/scrollpanel'; kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the family. `} - + - -{` + + {` .custom .p-scrollpanel-wrapper { border-right: 9px solid #f4f4f4; } @@ -388,7 +387,7 @@ import { ScrollPanel } from 'primereact/scrollpanel'; background-color: #135ba1; } `} - +
Properties
@@ -445,7 +444,9 @@ import { ScrollPanel } from 'primereact/scrollpanel';
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

@@ -483,52 +484,60 @@ import { ScrollPanel } from 'primereact/scrollpanel';
Accessibility
- -
Screen Reader
-

Scrollbars of the ScrollPanel has a scrollbar role along with the aria-controls attribute that refers to the id of the scrollable content container and the aria-orientation to indicate the orientation of scrolling.

+ +
Screen Reader
+

+ Scrollbars of the ScrollPanel has a scrollbar role along with the aria-controls attribute that refers to the id of the scrollable content container and the aria-orientation to indicate the + orientation of scrolling. +

-
Header Keyboard Support
-
- - - - - - - - - - - - - - - - - - - - - - - - - -
KeyFunction
down arrowScrolls content down when vertical scrolling is available.
up arrowScrolls content up when vertical scrolling is available.
leftScrolls content left when horizontal scrolling is available.
rightScrolls content right when horizontal scrolling is available.
-
-
+
Header Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ down arrow + Scrolls content down when vertical scrolling is available.
+ up arrow + Scrolls content up when vertical scrolling is available.
+ left + Scrolls content left when horizontal scrolling is available.
+ right + Scrolls content right when horizontal scrolling is available.
+
+
Dependencies

None.

-
- { - useLiveEditorTabs({ name: 'ScrollPanelDemo', sources: sources, extFiles: extFiles }) - } + {useLiveEditorTabs({ name: 'ScrollPanelDemo', sources: sources, extFiles: extFiles })}
); -}) +}); -export default ScrollPanelDoc +export default ScrollPanelDoc; diff --git a/components/doc/scrolltop/index.js b/components/doc/scrolltop/index.js index 499c1ff132..959e66d3ed 100644 --- a/components/doc/scrolltop/index.js +++ b/components/doc/scrolltop/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const ScrollTopDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -50,7 +49,7 @@ export class ScrollTopDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React from 'react'; @@ -90,7 +89,7 @@ export const ScrollTopDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React from 'react'; @@ -130,7 +129,7 @@ export const ScrollTopDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -196,52 +195,55 @@ const ScrollTopDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { ScrollTop } from 'primereact/scrolltop'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started

Without any configuration, ScrollTop listens window scroll.

- -{` + + {` `} - +
Threshold
-

When the vertical scroll position reaches a certain value, ScrollTop gets displayed. This value is - defined with the threshold property that defaults to 400.

- -{` +

+ When the vertical scroll position reaches a certain value, ScrollTop gets displayed. This value is defined with the threshold property that defaults to 400. +

+ + {` `} - +
Target Element
-

ScrollTop can also be assigned to its parent element by setting target as "parent".

- -{` +

+ ScrollTop can also be assigned to its parent element by setting target as "parent". +

+ + {`
Content that overflows to container
`} -
+
Properties

Any valid attribute is passed to the root element implicitly, extended properties are as follows;

@@ -284,7 +286,13 @@ import { ScrollTop } from 'primereact/scrolltop'; transitionOptions object null - The properties of CSSTransition can be customized, except for "nodeRef" and "in" properties. + + The properties of{' '} + + CSSTransition + {' '} + can be customized, except for "nodeRef" and "in" properties. + @@ -294,11 +302,11 @@ import { ScrollTop } from 'primereact/scrolltop';
- - - - - + + + + + @@ -316,7 +324,9 @@ import { ScrollTop } from 'primereact/scrolltop';
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

NameParametersDescription
NameParametersDescription
@@ -339,44 +349,48 @@ import { ScrollTop } from 'primereact/scrolltop';
Accessibility
- -
Screen Reader
-

ScrollTop uses a button element with an aria-label that refers to the aria.scrollTop property of the locale API by default, you may use - your own aria roles and attributes as any valid attribute is passed to the button element implicitly.

+ +
Screen Reader
+

+ ScrollTop uses a button element with an aria-label that refers to the aria.scrollTop property of the locale API by default, you may use your own aria roles and attributes as any + valid attribute is passed to the button element implicitly. +

-
Keyboard Support
-
-
- - - - - - - - - - - - - - - - -
KeyFunction
enterScrolls to top.
spaceScrolls to top.
-
- +
Keyboard Support
+
+ + + + + + + + + + + + + + + + + +
KeyFunction
+ enter + Scrolls to top.
+ space + Scrolls to top.
+
+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'ScrollTopDemo', sources: sources, extFiles: extFiles }) - } + {useLiveEditorTabs({ name: 'ScrollTopDemo', sources: sources, extFiles: extFiles })}
); -}) +}); export default ScrollTopDoc; diff --git a/components/doc/selectbutton/index.js b/components/doc/selectbutton/index.js index 883881f7e2..a87e246b02 100644 --- a/components/doc/selectbutton/index.js +++ b/components/doc/selectbutton/index.js @@ -5,9 +5,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const SelectButtonDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -62,7 +61,7 @@ export class SelectButtonDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -106,7 +105,7 @@ const SelectButtonDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -150,7 +149,7 @@ const SelectButtonDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -197,36 +196,39 @@ const SelectButtonDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { SelectButton } from 'primereact/selectbutton'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

Dropdown is used as a controlled component with value and onChange properties along with the options collection. There are two alternatives - of how to define the options property; One way is providing a collection of SelectItem instances having label-value pairs - whereas other way is providing an array of arbitrary objects along with the optionLabel and optionValue properties to specify the label/value field pair. In addition, - options can be simple primitive values such as a string array, in this case no optionLabel or optionValue is necessary.

- -

Options as SelectItems

- -{` +

+ Dropdown is used as a controlled component with value and onChange properties along with the options collection. There are two alternatives of how to define the options property; One way is providing a collection + of SelectItem instances having label-value pairs whereas other way is providing an array of arbitrary objects along with the optionLabel and optionValue properties to specify the label/value field pair. In + addition, options can be simple primitive values such as a string array, in this case no optionLabel or optionValue is necessary. +

+ +

+ Options as SelectItems +

+ + {` const citySelectItems = [ {label: 'New York', value: 'NY'}, {label: 'Rome', value: 'RM'}, @@ -235,17 +237,19 @@ const citySelectItems = [ {label: 'Paris', value: 'PRS'} ]; `} - +
- -{` + + {` setValue(e.value)}> `} - + -

Options as any type

- -{` +

+ Options as any type +

+ + {` const cities = [ {name: 'New York', code: 'NY'}, {name: 'Rome', code: 'RM'}, @@ -254,36 +258,42 @@ const cities = [ {name: 'Paris', code: 'PRS'} ]; `} - +
- -{` + + {` setValue(e.value)}> setValue(e.value)}> `} - -

When optionValue is not defined, value of an option refers to the option object itself.

+
+

+ When optionValue is not defined, value of an option refers to the option object itself. +

Multiple
-

SelectButton allows selecting only one item by default and setting multiple option enables choosing more than one item. In multiple case, model property should be an array.

+

+ SelectButton allows selecting only one item by default and setting multiple option enables choosing more than one item. In multiple case, model property should be an array. +

Custom Content
-

Options support templating using the itemTemplate property that references a function to render the content. Notice - the usage of optionLabel, although it is not rendered visually, it is still required to be used as the list key.

+

+ Options support templating using the itemTemplate property that references a function to render the content. Notice the usage of optionLabel, although it is not rendered visually, it is still required to be used as the + list key. +

- -{` + + {` setValue(e.value)} itemTemplate={itemTemplate} /> `} - + - -{` + + {` const itemTemplate = (option) => { // custom item content } `} - +
SelectItem API
@@ -457,8 +467,10 @@ const itemTemplate = (option) => { onChange - event.originalEvent: browser event
- event.value: Single value or an array of values that are selected. + + event.originalEvent: browser event
+ event.value: Single value or an array of values that are selected. + Callback to invoke on value change. @@ -466,44 +478,47 @@ const itemTemplate = (option) => {
Accessibility
- -
Screen Reader
-

The container element that wraps the buttons has a group role whereas each button element uses button role and aria-pressed is updated depending on selection state. - Value to describe an option is automatically set using the aria-label property that refers to the label of an option so it is still suggested to define a label even the option display - consists of presentational content like icons only.

- -
Keyboard Support
-
- - - - - - - - - - - - - - - - - -
KeyFunction
tabMoves focus to the buttons.
spaceToggles the checked state of a button.
-
-
+ +
Screen Reader
+

+ The container element that wraps the buttons has a group role whereas each button element uses button role and aria-pressed is updated depending on selection state. Value to describe an option is + automatically set using the aria-label property that refers to the label of an option so it is still suggested to define a label even the option display consists of presentational content like icons only. +

+ +
Keyboard Support
+
+ + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the buttons.
+ space + Toggles the checked state of a button.
+
+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'SelectButtonDemo', sources: sources }) - } + {useLiveEditorTabs({ name: 'SelectButtonDemo', sources: sources })}
); -}) +}); export default SelectButtonDoc; diff --git a/components/doc/sidebar/index.js b/components/doc/sidebar/index.js index 07a2acb6db..76b1baf9d4 100644 --- a/components/doc/sidebar/index.js +++ b/components/doc/sidebar/index.js @@ -5,9 +5,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const SidebarDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -80,7 +79,7 @@ export class SidebarDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -145,7 +144,7 @@ const SidebarDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -210,7 +209,7 @@ const SidebarDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -278,77 +277,83 @@ const SidebarDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { Sidebar } from 'primereact/sidebar'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

Sidebar is used as a container and visibility is controlled with visible property.

+

+ Sidebar is used as a container and visibility is controlled with visible property. +

- -{` + + {` setVisible(false)}> Content
- ) -}) + ); +}); export default SidebarDoc; diff --git a/components/doc/skeleton/index.js b/components/doc/skeleton/index.js index 90afcf13da..30b2209129 100644 --- a/components/doc/skeleton/index.js +++ b/components/doc/skeleton/index.js @@ -5,10 +5,9 @@ import { useLiveEditorTabs } from '../common/liveeditor'; import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; -const SkeletonDoc = memo( () => { - +const SkeletonDoc = memo(() => { const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from "react"; @@ -149,7 +148,7 @@ export class SkeletonDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React from 'react'; @@ -287,7 +286,7 @@ export const SkeletonDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React from "react"; @@ -425,7 +424,7 @@ export const SkeletonDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -583,63 +582,71 @@ const SkeletonDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { Skeleton } from 'primereact/skeleton'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started

Skeleton displays a rectangle in its simplest form.

- -{` + + {` `} - +
Circle
-

The other option is the circle by setting shape property as "circle".

- -{` +

+ The other option is the circle by setting shape property as "circle". +

+ + {` `} - +
Size
-

In order to customize the size, use width and height properties for rectangles and size for Circle and Square shapes.

- -{` +

+ In order to customize the size, use width and height properties for rectangles and size for Circle and Square shapes. +

+ + {` `} - +
Border Radius
-

The default border radius of a rectangle is specified by the theme and can be overriden using the borderRadius property.

- -{` +

+ The default border radius of a rectangle is specified by the theme and can be overriden using the borderRadius property. +

+ + {` `} - +
Animation
-

Animation can be turned of by setting animation to "none".

- -{` +

+ Animation can be turned of by setting animation to "none". +

+ + {` `} - +
Properties

Any valid attribute is passed to the root element implicitly, extended properties are as follows;

@@ -694,7 +701,9 @@ import { Skeleton } from 'primereact/skeleton';
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

@@ -722,23 +731,23 @@ import { Skeleton } from 'primereact/skeleton';
Accessibility
-
Screen Reader
-

Skeleton uses aria-hidden as "true" so that it gets ignored by screen readers, any valid attribute is passed to the root element so you may customize it further if required. If multiple skeletons are grouped inside a container, - you may use aria-busy on the container element as well to indicate the loading process.

- -
Keyboard Support
-

Component does not include any interactive elements.

+
Screen Reader
+

+ Skeleton uses aria-hidden as "true" so that it gets ignored by screen readers, any valid attribute is passed to the root element so you may customize it further if required. If multiple skeletons are grouped inside + a container, you may use aria-busy on the container element as well to indicate the loading process. +

+ +
Keyboard Support
+

Component does not include any interactive elements.

Dependencies

None.

- { - useLiveEditorTabs({ name: 'SkeletonDemo', sources: sources, extFiles: extFiles }) - } + {useLiveEditorTabs({ name: 'SkeletonDemo', sources: sources, extFiles: extFiles })} ); -}) +}); export default SkeletonDoc; diff --git a/components/doc/slidemenu/index.js b/components/doc/slidemenu/index.js index c6569e2660..b2c6fed061 100644 --- a/components/doc/slidemenu/index.js +++ b/components/doc/slidemenu/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const SlideMenuDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -169,7 +168,7 @@ export class SlideMenuDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useRef } from 'react'; @@ -324,7 +323,7 @@ const SlideMenuDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useRef } from 'react'; @@ -479,7 +478,7 @@ const SlideMenuDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -637,35 +636,37 @@ const SlideMenuDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { SlideMenu } from 'primereact/slidemenu'; `} - +
Import via CDN
- -{` + + {` `} - +
MenuItem API
-

Menu uses the common menumodel api to define its items, visit MenuModel API for details.

+

+ Menu uses the common menumodel api to define its items, visit MenuModel API for details. +

Getting Started

Menu requires a collection of menuitems as its model.

- -{` + + {` const items = [ { label:'File', @@ -798,34 +799,34 @@ const items = [ } ]; `} - + - -{` + + {` `} - - +
Popup Mode

SlideMenu is inline by default whereas popup mode is supported by enabling popup property and calling toggle method with an event of the target.

- -{` + + {` `} - +
Effects
-

The easing function to use is "ease-out" by default which can be customized using easing property. - See here for possible alternative values.

+

+ The easing function to use is "ease-out" by default which can be customized using easing property. See here for possible alternative values. +

- -{` + + {` `} - +
Properties
@@ -915,13 +916,21 @@ const items = [
- + - +
appendTo DOM element | string document.bodyDOM element instance where the overlay panel should be mounted. Valid values are any DOM Element and 'self'. The self value is used to render a component where it is located. + DOM element instance where the overlay panel should be mounted. Valid values are any DOM Element and 'self'. The self value is used to render a component where it is located. +
transitionOptions object nullThe properties of CSSTransition can be customized, except for "nodeRef" and "in" properties. + The properties of{' '} + + CSSTransition + {' '} + can be customized, except for "nodeRef" and "in" properties. +
@@ -987,10 +996,10 @@ const items = [
- - - - + + + + @@ -1035,82 +1044,107 @@ const items = [
Accessibility
-
Screen Reader
-

SlideMenu component uses the menubar role with aria-orientation set to "vertical" and the value to describe the menu can either be provided with aria-labelledby or aria-label props. Each list item has a presentation role - whereas anchor elements have a menuitem role with aria-label referring to the label of the item and aria-disabled defined if the item is disabled. A submenu within a SlideMenu uses the menu role with an aria-labelledby defined - as the id of the submenu root menuitem label. In addition, menuitems that open a submenu have aria-expanded and aria-controls to define the relation between the item and the submenu.

+
Screen Reader
+

+ SlideMenu component uses the menubar role with aria-orientation set to "vertical" and the value to describe the menu can either be provided with aria-labelledby or aria-label props. Each list + item has a presentation role whereas anchor elements have a menuitem role with aria-label referring to the label of the item and aria-disabled defined if the item is disabled. A submenu within a + SlideMenu uses the menu role with an aria-labelledby defined as the id of the submenu root menuitem label. In addition, menuitems that open a submenu have aria-expanded and aria-controls to + define the relation between the item and the submenu. +

-

In popup mode, the component implicitly manages the aria-expanded, aria-haspopup and aria-controls attributes of the target element to define the relation between the target and the popup.

+

+ In popup mode, the component implicitly manages the aria-expanded, aria-haspopup and aria-controls attributes of the target element to define the relation between the target and the popup. +

-
Keyboard Support
-
-
NameElement
NameElement
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
KeyFunction
tabAdd focus to the first item if focus moves in to the menu. If the focus is already within the menu, focus moves to the next focusable item in the page tab sequence.
shift + tabAdd focus to the last item if focus moves in to the menu. If the focus is already within the menu, focus moves to the previous focusable item in the page tab sequence.
enterIf menuitem has a submenu, toggles the visibility of the submenu otherwise activates the menuitem and closes all open overlays.
spaceIf menuitem has a submenu, toggles the visibility of the submenu otherwise activates the menuitem and closes all open overlays.
escapeIf focus is inside a popup submenu, closes the submenu and moves focus to the root item of the closed submenu.
down arrowMoves focus to the next menuitem within the submenu.
up arrowMoves focus to the previous menuitem within the submenu.
right arrowOpens a submenu if there is one available and moves focus to the first item.
left arrowCloses a submenu and moves focus to the root item of the closed submenu.
homeMoves focus to the first menuitem within the submenu.
endMoves focus to the last menuitem within the submenu.
-
- +
Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Add focus to the first item if focus moves in to the menu. If the focus is already within the menu, focus moves to the next focusable item in the page tab sequence.
+ shift + tab + Add focus to the last item if focus moves in to the menu. If the focus is already within the menu, focus moves to the previous focusable item in the page tab sequence.
+ enter + If menuitem has a submenu, toggles the visibility of the submenu otherwise activates the menuitem and closes all open overlays.
+ space + If menuitem has a submenu, toggles the visibility of the submenu otherwise activates the menuitem and closes all open overlays.
+ escape + If focus is inside a popup submenu, closes the submenu and moves focus to the root item of the closed submenu.
+ down arrow + Moves focus to the next menuitem within the submenu.
+ up arrow + Moves focus to the previous menuitem within the submenu.
+ right arrow + Opens a submenu if there is one available and moves focus to the first item.
+ left arrow + Closes a submenu and moves focus to the root item of the closed submenu.
+ home + Moves focus to the first menuitem within the submenu.
+ end + Moves focus to the last menuitem within the submenu.
+
+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'SlideMenuDemo', sources: sources }) - } + {useLiveEditorTabs({ name: 'SlideMenuDemo', sources: sources })}
- ) -}) + ); +}); export default SlideMenuDoc; diff --git a/components/doc/slider/index.js b/components/doc/slider/index.js index 55472f68ea..e1a057565d 100644 --- a/components/doc/slider/index.js +++ b/components/doc/slider/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const SliderDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -60,7 +59,7 @@ export class SliderDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -103,7 +102,7 @@ const SliderDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -146,7 +145,7 @@ const SliderDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -207,51 +206,57 @@ const SliderDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { Slider } from 'primereact/slider'; `} - + - < h5>Import via CDN - -{` +
Import via CDN
+ + {` `} - +
Getting Started
-

Slider is used as a controlled input with value and onChange properties.

+

+ Slider is used as a controlled input with value and onChange properties. +

- -{` + + {` setValue(e.value)} /> `} - +
Range
-

Range slider provides two handles to define two values. Enable range property and bind an array to implement a range slider.

- -{` +

+ Range slider provides two handles to define two values. Enable range property and bind an array to implement a range slider. +

+ + {` setRangeValues(e.value)} range /> `} - +
Orientation
-

Default layout of slider is horizontal, use orientation property for the alternative vertical mode.

- -{` +

+ Default layout of slider is horizontal, use orientation property for the alternative vertical mode. +

+ + {` setValue(e.value)} orientation="vertical" /> `} - +
Properties

Any valid attribute is passed to the root element implicitly, extended properties are as follows;

@@ -355,14 +360,16 @@ import { Slider } from 'primereact/slider'; onChange - event.originalEvent: Slide event
+ + event.originalEvent: Slide event
event.value: New value. Callback to invoke on value change via slide. onSlideEnd - event.originalEvent: Slide event
+ + event.originalEvent: Slide event
event.value: New value. Callback to invoke when slide ends. @@ -372,7 +379,9 @@ import { Slider } from 'primereact/slider';
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

@@ -395,80 +404,91 @@ import { Slider } from 'primereact/slider';
Accessibility
- -
Screen Reader
-

Slider element component uses slider role on the handle in addition to the aria-orientation, aria-valuemin, aria-valuemax and aria-valuenow attributes. Value to describe the component can be defined using - aria-labelledby and aria-label props.

- -{` + +
Screen Reader
+

+ Slider element component uses slider role on the handle in addition to the aria-orientation, aria-valuemin, aria-valuemax and aria-valuenow attributes. Value to describe the component can + be defined using + aria-labelledby and aria-label props. +

+ + {` Number `} - -
Keyboard Support
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
KeyFunction
tabMoves focus to the slider.
- - left arrow - up arrow - - Decrements the value.
- - right arrow - down arrow - - Increments the value.
homeSet the minimum value.
endSet the maximum value.
page upIncrements the value by 10 steps.
page downDecrements the value by 10 steps.
-
- + +
Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ tab + Moves focus to the slider.
+ + left arrow + up arrow + + Decrements the value.
+ + right arrow + down arrow + + Increments the value.
+ home + Set the minimum value.
+ end + Set the maximum value.
+ page up + Increments the value by 10 steps.
+ page down + Decrements the value by 10 steps.
+
+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'SliderDemo', sources: sources, extFiles: extFiles }) - } + {useLiveEditorTabs({ name: 'SliderDemo', sources: sources, extFiles: extFiles })}
); -}) +}); export default SliderDoc; diff --git a/components/doc/speeddial/index.js b/components/doc/speeddial/index.js index 3c58e4cd1a..63fe907f14 100644 --- a/components/doc/speeddial/index.js +++ b/components/doc/speeddial/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const SpeedDialDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -121,7 +120,7 @@ export class SpeedDialDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React from 'react'; @@ -230,7 +229,7 @@ export const SpeedDialDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React from 'react'; @@ -339,7 +338,7 @@ export const SpeedDialDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -453,7 +452,7 @@ const SpeedDialDemo = () => { } ` } - } + }; const extFiles = { 'demo/SpeedDialDemo.css': { @@ -528,33 +527,35 @@ const SpeedDialDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { SpeedDial } from 'primereact/speeddial'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

When pressed, a floating action button can display multiple primary actions that can be performed on a page. It has a collection of additional options defined by the model property. - SpeedDial's position is calculated according to the container element with the position type style.

+

+ When pressed, a floating action button can display multiple primary actions that can be performed on a page. It has a collection of additional options defined by the model property. SpeedDial's position is calculated + according to the container element with the position type style. +

- -{` + + {` export const SpeedDialDemo = () => { const items = [ @@ -586,16 +587,23 @@ export const SpeedDialDemo = () => { ); } `} - +
MenuModel API
-

SpeedDial uses the common MenuModel API to define the items, visit MenuModel API for details.

+

+ SpeedDial uses the common MenuModel API to define the items, visit MenuModel API for details. +

Type
-

SpeedDial has 4 types; linear, circle, semi-circle and quarter-circle.

+

+ SpeedDial has 4 types; linear, circle, semi-circle and quarter-circle. +

Direction
-

Specifies the opening direction of actions. For the linear and semi-circle types; up, down, left and right. For the quarter-circle type; up-left, up-right, down-left and down-right.

+

+ Specifies the opening direction of actions. For the linear and semi-circle types; up, down, left and right. For the quarter-circle type;{' '} + up-left, up-right, down-left and down-right. +

Properties

Any valid attribute is passed to the root element implicitly, extended properties are as follows;

@@ -770,7 +778,9 @@ export const SpeedDialDemo = () => {
Styling
-

Following is the list of structural style classes, for theming classes visit theming page.

+

+ Following is the list of structural style classes, for theming classes visit theming page. +

@@ -805,95 +815,113 @@ export const SpeedDialDemo = () => {
Accessibility
- -
Screen Reader
-

SpeedDial component renders a native button element that implicitly includes any passed prop. Text to describe the button can be defined with the aria-labelledby or aria-label props. - Addititonally the button includes includes aria-haspopup, aria-expanded for states along with aria-controls to define the relation between the popup and the button.

- -

The popup overlay uses menu role on the list and each action item has a menuitem role with an aria-label as the menuitem label. The id of the menu refers to the aria-controls of the button.

- - -{` + +
Screen Reader
+

+ SpeedDial component renders a native button element that implicitly includes any passed prop. Text to describe the button can be defined with the aria-labelledby or aria-label props. Addititonally the button + includes includes aria-haspopup, aria-expanded for states along with aria-controls to define the relation between the popup and the button. +

+ +

+ The popup overlay uses menu role on the list and each action item has a menuitem role with an aria-label as the menuitem label. The id of the menu refers to the aria-controls of the button. +

+ + + {` `} - - - -
Menu Button Keyboard Support
-
-
- - - - - - - - - - - - - - - - - - - - - - - - -
KeyFunction
enterToggles the visibility of the menu.
spaceToggles the visibility of the menu.
down arrowOpens the menu and moves focus to the first item.
up arrowOpens the menu and moves focus to the last item.
-
- -
Menu Keyboard Support
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
KeyFunction
enterActives the menuitem, closes the menu and sets focus on the menu button.
escapeCloses the menu and sets focus on the menu button.
arrow keysNavigates between the menu items.
homeMoves focus to the first item.
endMoves focus to the last item.
-
- + + +
Menu Button Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ enter + Toggles the visibility of the menu.
+ space + Toggles the visibility of the menu.
+ down arrow + Opens the menu and moves focus to the first item.
+ up arrow + Opens the menu and moves focus to the last item.
+
+ +
Menu Keyboard Support
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyFunction
+ enter + Actives the menuitem, closes the menu and sets focus on the menu button.
+ escape + Closes the menu and sets focus on the menu button.
+ arrow keys + Navigates between the menu items.
+ home + Moves focus to the first item.
+ end + Moves focus to the last item.
+
+
Dependencies

None.

- { - useLiveEditorTabs({ name: 'SpeedDialDemo', sources: sources, extFiles: extFiles }) - } - + {useLiveEditorTabs({ name: 'SpeedDialDemo', sources: sources, extFiles: extFiles })} - ) -}) + ); +}); export default SpeedDialDoc; diff --git a/components/doc/splitbutton/index.js b/components/doc/splitbutton/index.js index 93e58bbb51..177c460fc8 100644 --- a/components/doc/splitbutton/index.js +++ b/components/doc/splitbutton/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const SplitButtonDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -133,7 +132,7 @@ export class SplitButtonDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useRef } from 'react'; @@ -250,7 +249,7 @@ const SplitButtonDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useRef } from 'react'; @@ -367,7 +366,7 @@ const SplitButtonDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -488,31 +487,33 @@ const SplitButtonDemo = () => { } ` } - } + }; return (
Import via Module
- -{` + + {` import { SplitButton } from 'primereact/splitbutton'; `} - +
Import via CDN
- -{` + + {` `} - +
Getting Started
-

SplitButton has a default command button and a collection of additional options defined by the model property.

- -{` +

+ SplitButton has a default command button and a collection of additional options defined by the model property. +

+ + {` export const SplitButtonDemo = () => { const items = [ @@ -556,10 +557,12 @@ export const SplitButtonDemo = () => { } `} - +
MenuModel API
-

SplitButton uses the common MenuModel API to define the items, visit MenuModel API for details.

+

+ SplitButton uses the common MenuModel API to define the items, visit MenuModel API for details. +

Severity

Different color options are available as severity levels.

@@ -572,8 +575,8 @@ export const SplitButtonDemo = () => {
  • .p-button-danger
  • - -{` + + {` @@ -582,15 +585,15 @@ export const SplitButtonDemo = () => { `} - +
    Raised and Rounded Buttons

    SplitButton can be raised by having "p-button-raised" style class and similarly borders can be made rounded using "p-button-rounded" class.

    - -{` + + {` `} - +
    Properties
    @@ -692,7 +695,9 @@ export const SplitButtonDemo = () => { appendTo DOM element | string document.body - DOM element instance where the overlay panel should be mounted. Valid values are any DOM Element and 'self'. The self value is used to render a component where it is located. + + DOM element instance where the overlay panel should be mounted. Valid values are any DOM Element and 'self'. The self value is used to render a component where it is located. + tooltip @@ -716,7 +721,13 @@ export const SplitButtonDemo = () => { transitionOptions object null - The properties of CSSTransition can be customized, except for "nodeRef" and "in" properties. + + The properties of{' '} + + CSSTransition + {' '} + can be customized, except for "nodeRef" and "in" properties. + dropdownIcon @@ -771,7 +782,9 @@ export const SplitButtonDemo = () => {
    Styling
    -

    Following is the list of structural style classes, for theming classes visit theming page.

    +

    + Following is the list of structural style classes, for theming classes visit theming page. +

    @@ -798,117 +811,144 @@ export const SplitButtonDemo = () => {
    Accessibility
    - -
    Screen Reader
    -

    SplitButton component renders two native button elements, main button uses the label property to define aria-label by default which can be customized with buttonProps. - Dropdown button requires an explicit definition to describe it using menuButtonProps option and also includes aria-haspopup, aria-expanded for states along with aria-controls to define the relation between the popup and the button.

    - -

    The popup overlay uses menu role on the list and each action item has a menuitem role with an aria-label as the menuitem label. The id of the menu refers to the aria-controls of the dropdown button.

    - -{` + +
    Screen Reader
    +

    + SplitButton component renders two native button elements, main button uses the label property to define aria-label by default which can be customized with buttonProps. Dropdown button requires an explicit + definition to describe it using menuButtonProps option and also includes aria-haspopup, aria-expanded for states along with aria-controls to define the relation between the popup and the button. +

    + +

    + The popup overlay uses menu role on the list and each action item has a menuitem role with an aria-label as the menuitem label. The id of the menu refers to the aria-controls of the dropdown + button. +

    + + {` `} - -
    Main Button Keyboard Support
    -
    -
    - - - - - - - - - - - - - - - - -
    KeyFunction
    enterActivates the button.
    spaceActivates the button.
    -
    - -
    Menu Button Keyboard Support
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - -
    KeyFunction
    enterToggles the visibility of the menu.
    spaceToggles the visibility of the menu.
    down arrowOpens the menu and moves focus to the first item.
    up arrowOpens the menu and moves focus to the last item.
    -
    - -
    Menu Keyboard Support
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    KeyFunction
    enterActives the menuitem, closes the menu and sets focus on the menu button.
    escapeCloses the menu and sets focus on the menu button.
    down arrowMoves focus to the next item, if it is the last one then first item receives the focus.
    up arrowMoves focus to the previous item, if it is the first one then last item receives the focus.
    homeMoves focus to the first item.
    endMoves focus to the last item.
    -
    - + +
    Main Button Keyboard Support
    +
    + + + + + + + + + + + + + + + + + +
    KeyFunction
    + enter + Activates the button.
    + space + Activates the button.
    +
    + +
    Menu Button Keyboard Support
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    KeyFunction
    + enter + Toggles the visibility of the menu.
    + space + Toggles the visibility of the menu.
    + down arrow + Opens the menu and moves focus to the first item.
    + up arrow + Opens the menu and moves focus to the last item.
    +
    + +
    Menu Keyboard Support
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KeyFunction
    + enter + Actives the menuitem, closes the menu and sets focus on the menu button.
    + escape + Closes the menu and sets focus on the menu button.
    + down arrow + Moves focus to the next item, if it is the last one then first item receives the focus.
    + up arrow + Moves focus to the previous item, if it is the first one then last item receives the focus.
    + home + Moves focus to the first item.
    + end + Moves focus to the last item.
    +
    +
    Dependencies

    None.

    - { - useLiveEditorTabs({ name: 'SplitButtonDemo', sources: sources }) - } -
    + {useLiveEditorTabs({ name: 'SplitButtonDemo', sources: sources })} +
    - ) -}) + ); +}); export default SplitButtonDoc; diff --git a/components/doc/splitter/index.js b/components/doc/splitter/index.js index 8818dc7784..70b81cba26 100644 --- a/components/doc/splitter/index.js +++ b/components/doc/splitter/index.js @@ -5,9 +5,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const SplitterDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -73,7 +72,7 @@ export class SplitterDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React from 'react'; @@ -136,7 +135,7 @@ const SplitterDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React from 'react'; @@ -199,7 +198,7 @@ const SplitterDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -265,32 +264,32 @@ const SplitterDemo = () => { } ` } - } + }; return (
    Import via Module
    - -{` + + {` import { Splitter, SplitterPanel } from 'primereact/splitter'; `} - +
    Import via CDN
    - -{` + + {` `} - +
    Getting Started

    Splitter requires two SplitterPanel components to wrap.

    - -{` + + {` Panel 1 @@ -300,13 +299,15 @@ import { Splitter, SplitterPanel } from 'primereact/splitter'; `} - +
    Layout
    -

    Default orientation is configured with the layout property and default is the "horizontal" whereas other alternative is the "vertical".

    +

    + Default orientation is configured with the layout property and default is the "horizontal" whereas other alternative is the "vertical". +

    - -{` + + {` Panel 1 @@ -316,13 +317,15 @@ import { Splitter, SplitterPanel } from 'primereact/splitter'; `} - +
    Initial Sizes
    -

    When no size is defined, panels are split 50/50, use the size property to give relative widths e.g. 20/80.

    +

    + When no size is defined, panels are split 50/50, use the size property to give relative widths e.g. 20/80. +

    - -{` + + {` Panel 1 @@ -332,13 +335,13 @@ import { Splitter, SplitterPanel } from 'primereact/splitter'; `} - +
    Minimum Size

    Minimum size defines the lowest boundary for the size of a panel.

    - -{` + + {` Panel 1 @@ -348,13 +351,13 @@ import { Splitter, SplitterPanel } from 'primereact/splitter'; `} - +
    Nested Panels

    Splitters can be combined to create advanced layouts.

    - -{` + + {` Panel 1 @@ -378,15 +381,16 @@ import { Splitter, SplitterPanel } from 'primereact/splitter'; `} - +
    Stateful
    -

    Splitters can be configured as stateful so that when the user visits the page again, the adjusts sizes - can be restored. Define a stateKey to enable this feature. Default location of the state is - session storage and other option is the local storage which can be configured using the stateStorage property.

    +

    + Splitters can be configured as stateful so that when the user visits the page again, the adjusts sizes can be restored. Define a stateKey to enable this feature. Default location of the state is session storage and + other option is the local storage which can be configured using the stateStorage property. +

    - -{` + + {` Panel 1 @@ -396,108 +400,104 @@ import { Splitter, SplitterPanel } from 'primereact/splitter'; `} - +
    Properties of SplitterPanel
    -

    Any property as style and class are passed to the main container element. Following are the - additional properties to configure the component.

    +

    Any property as style and class are passed to the main container element. Following are the additional properties to configure the component.

    - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDefaultDescription
    NameTypeDefaultDescription
    sizenumbernullSize of the element relative to 100%.
    minSizenumbernullMinimum size of the element relative to 100%.
    styleobjectnullInline style of the component.
    classNamestringnullClassName of the component.
    sizenumbernullSize of the element relative to 100%.
    minSizenumbernullMinimum size of the element relative to 100%.
    styleobjectnullInline style of the component.
    classNamestringnullClassName of the component.
    Properties of Splitter
    -

    Any property as style and class are passed to the main container element. Following are the - additional properties to configure the component.

    +

    Any property as style and class are passed to the main container element. Following are the additional properties to configure the component.

    - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    NameTypeDefaultDescription
    NameTypeDefaultDescription
    idstringnullUnique identifier of the element.
    styleobjectnullInline style of the component.
    classNamestringnullClassName of the component.
    layoutstringhorizontalOrientation of the panels, valid values are "horizontal" and "vertical".
    gutterSizenumber4Size of the divider in pixels.
    stateKeystringnullStorage identifier of a stateful Splitter.
    stateStoragestringsessionDefines where a stateful splitter keeps its state, valid values are "session" - for sessionStorage and "local" for localStorage. -
    idstringnullUnique identifier of the element.
    styleobjectnullInline style of the component.
    classNamestringnullClassName of the component.
    layoutstringhorizontalOrientation of the panels, valid values are "horizontal" and "vertical".
    gutterSizenumber4Size of the divider in pixels.
    stateKeystringnullStorage identifier of a stateful Splitter.
    stateStoragestringsessionDefines where a stateful splitter keeps its state, valid values are "session" for sessionStorage and "local" for localStorage.
    @@ -506,116 +506,127 @@ import { Splitter, SplitterPanel } from 'primereact/splitter';
    - - - - - + + + + + - - - - - + + + + +
    NameParametersDescription
    NameParametersDescription
    onResizeEndevent.originalEvent: Browser event
    - event.sizes: Sizes of the panels as an array -
    Callback to invoke when resize ends.
    onResizeEnd + event.originalEvent: Browser event
    + event.sizes: Sizes of the panels as an array +
    Callback to invoke when resize ends.
    Styling

    Following is the list of structural style classes

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    NameElement
    p-splitterContainer element.
    p-splitterContainer element during resize.
    p-splitter-horizontalContainer element with horizontal layout.
    p-splitter-verticalContainer element with vertical layout.
    p-splitter-panelSplitter panel element.
    p-splitter-gutterGutter element to use when resizing the panels.
    p-splitter-gutter-handleHandl element of the gutter.
    -
    - -
    Accessibility
    - -
    Screen Reader
    -

    Splitter bar defines separator as the role with aria-orientation set to either horizontal or vertical.

    - -
    Keyboard Support
    - - + + - - + + + + + + + + + + - - + + - - + + - - + + - - + +
    KeyFunctionNameElement
    tabMoves focus through the splitter bar.p-splitterContainer element.
    p-splitterContainer element during resize.
    p-splitter-horizontalContainer element with horizontal layout.
    down arrowMoves a vertical splitter down.p-splitter-verticalContainer element with vertical layout.
    up arrowMoves a vertical splitter up.p-splitter-panelSplitter panel element.
    left arrowMoves a horizontal splitter to the left.p-splitter-gutterGutter element to use when resizing the panels.
    right arrowMoves a horizontal splitter to the right.p-splitter-gutter-handleHandl element of the gutter.
    -
    + +
    Accessibility
    + +
    Screen Reader
    +

    + Splitter bar defines separator as the role with aria-orientation set to either horizontal or vertical. +

    + +
    Keyboard Support
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KeyFunction
    + tab + Moves focus through the splitter bar.
    + down arrow + Moves a vertical splitter down.
    + up arrow + Moves a vertical splitter up.
    + left arrow + Moves a vertical splitter to the left.
    + right arrow + Moves a vertical splitter to the right.
    +
    +
    Dependencies

    None.

    - { - useLiveEditorTabs({ name: 'SplitterDemo', sources: sources }) - } + {useLiveEditorTabs({ name: 'SplitterDemo', sources: sources })}
    - ) -}) + ); +}); export default SplitterDoc; diff --git a/components/doc/steps/index.js b/components/doc/steps/index.js index f761e1985f..ddc59e0f7c 100644 --- a/components/doc/steps/index.js +++ b/components/doc/steps/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const StepsDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -70,7 +69,7 @@ export class StepsDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useRef } from 'react'; @@ -124,7 +123,7 @@ const StepsDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useRef } from 'react'; @@ -178,7 +177,7 @@ const StepsDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -239,7 +238,7 @@ const StepsDemo = () => { } ` } - } + }; const extFiles = { 'demo/StepsDemo.css': { @@ -287,34 +286,36 @@ const StepsDemo = () => { } ` } - } + }; return (
    Import via Module
    - -{` + + {` import { Steps } from 'primereact/steps'; `} - +
    Import via CDN
    - -{` + + {` `} - +
    MenuItem API
    -

    Steps uses the common menu item api to define its items, visit MenuModel for details.

    +

    + Steps uses the common menu item api to define its items, visit MenuModel for details. +

    Getting Started

    TabMenu requires a collection of menuitems as its model.

    - -{` + + {` const items = [ {label: 'Personal'}, {label: 'Seat'}, @@ -322,26 +323,28 @@ const items = [ {label: 'Confirmation'} ]; `} - + - -{` + + {` `} - +
    interactive
    -

    Items are readOnly by default, if you'd like to make them interactive then disable readonly, use command handlers of menuitem to respond to selection events and define activeIndex property along with the - onSelect event to use it as a controlled component.

    +

    + Items are readOnly by default, if you'd like to make them interactive then disable readonly, use command handlers of menuitem to respond to selection events and define activeIndex property along with the onSelect event to use + it as a controlled component. +

    - -{` + + {` setActiveIndex(e.index)} readOnly={false} /> `} - + - -{` + + {` const interactiveItems = [ { label: 'Personal', @@ -369,7 +372,7 @@ const interactiveItems = [ } ]; `} - +
    Properties
    @@ -436,9 +439,13 @@ const interactiveItems = [ onSelect - event.originalEvent: Browser event
    - event.item: Selected item instance
    - event.index: Index of selected item instance + + event.originalEvent: Browser event +
    + event.item: Selected item instance +
    + event.index: Index of selected item instance + Callback to invoke when the new step is selected. @@ -446,7 +453,9 @@ const interactiveItems = [
    Styling
    -

    Following is the list of structural style classes, for theming classes visit theming page.

    +

    + Following is the list of structural style classes, for theming classes visit theming page. +

    @@ -477,64 +486,78 @@ const interactiveItems = [
    Accessibility
    - -
    Screen Reader
    -

    Steps component uses the nav element and since any attribute is passed to the root implicitly aria-labelledby or aria-label can be used to describe the component. Inside an ordered list is used - where the current step item defines aria-current as "step".

    - -
    Keyboard Support
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    KeyFunction
    tabAdds focus to the active step when focus moves in to the component, if there is already a focused tab header then moves the focus out of the component based on the page tab sequence.
    enterActivates the focused step if readonly is not enabled.
    spaceActivates the focused step if readonly is not enabled.
    right arrowMoves focus to the next step if readonly is not enabled.
    left arrowMoves focus to the previous step if readonly is not enabled.
    homeMoves focus to the first step if readonly is not enabled.
    endMoves focus to the last step if readonly is not enabled.
    -
    - + +
    Screen Reader
    +

    + Steps component uses the nav element and since any attribute is passed to the root implicitly aria-labelledby or aria-label can be used to describe the component. Inside an ordered list is used where + the current step item defines aria-current as "step". +

    + +
    Keyboard Support
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KeyFunction
    + tab + Adds focus to the active step when focus moves in to the component, if there is already a focused tab header then moves the focus out of the component based on the page tab sequence.
    + enter + Activates the focused step if readonly is not enabled.
    + space + Activates the focused step if readonly is not enabled.
    + right arrow + Moves focus to the next step if readonly is not enabled.
    + left arrow + Moves focus to the previous step if readonly is not enabled.
    + home + Moves focus to the first step if readonly is not enabled.
    + end + Moves focus to the last step if readonly is not enabled.
    +
    +
    Dependencies

    None.

    - { - useLiveEditorTabs({ name: 'StepsDemo', sources: sources, extFiles: extFiles }) - } + {useLiveEditorTabs({ name: 'StepsDemo', sources: sources, extFiles: extFiles })}
    - ) -}) + ); +}); export default StepsDoc; diff --git a/components/doc/styleclass/index.js b/components/doc/styleclass/index.js index cc28bf27db..640fab014a 100644 --- a/components/doc/styleclass/index.js +++ b/components/doc/styleclass/index.js @@ -4,9 +4,8 @@ import { useLiveEditorTabs } from '../common/liveeditor'; import { CodeHighlight } from '../common/codehighlight'; const StyleClassDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -50,7 +49,7 @@ export class StyleClassDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useRef } from 'react'; @@ -88,7 +87,7 @@ const StyleClassDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useRef } from 'react'; @@ -126,7 +125,7 @@ const StyleClassDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -168,7 +167,7 @@ const StyleClassDemo = () => { } ` } - } + }; const extFiles = { 'demo/StyleClassDemo.css': { @@ -208,42 +207,48 @@ const StyleClassDemo = () => { } ` } - } + }; return (
    Import via Module
    - -{` + + {` import { StyleClass } from 'primereact/styleclass'; `} - +
    Import via CDN
    - -{` + + {` `} - +
    Getting Started
    -

    Required prop nodeRef needs to be bind to target's ref which is DOM element. StyleClass has two modes, toggleClassName to simply add-remove a class and enter/leave animations.

    - -

    ToggleClass

    - -{` +

    + Required prop nodeRef needs to be bind to target's ref which is DOM element. StyleClass has two modes, toggleClassName to simply add-remove a class and enter/leave animations. +

    + +

    + ToggleClass +

    + + {`
    - ) -}) + ); +}); export default TabMenuDoc; diff --git a/components/doc/tabview/index.js b/components/doc/tabview/index.js index 3056eaf1ea..3de01f6145 100644 --- a/components/doc/tabview/index.js +++ b/components/doc/tabview/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const TabViewDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -224,7 +223,7 @@ export class TabViewDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -427,7 +426,7 @@ const TabViewDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -630,7 +629,7 @@ const TabViewDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -856,35 +855,37 @@ const TabViewDemo = () => { } ` } - } + }; return (
    Import via Module
    - -{` + + {` import { TabView, TabPanel } from 'primereact/tabview'; `} - +
    Import via CDN
    - -{` + + {` `} - +
    Getting Started

    Tabview element consists of one or more TabPanel elements and can either be used as a Controlled or Uncontrolled component.

    Controlled Component
    -

    In controlled mode, activeIndex and onTabChange properties need to be defined to control the state.

    +

    + In controlled mode, activeIndex and onTabChange properties need to be defined to control the state. +

    - -{` + + {` const [activeIndex, setActiveIndex] = useState(0); setActiveIndex(e.index)}> @@ -899,14 +900,16 @@ const [activeIndex, setActiveIndex] = useState(0);
    `} - +
    Uncontrolled
    -

    In uncontrolled mode, no additional properties are required. Initial active tab can be provided using the activeIndex property in uncontrolled mode however it is evaluated at initial rendering and ignored in further updates. If you programmatically - need to update the active tab, prefer to use the component as controlled.

    +

    + In uncontrolled mode, no additional properties are required. Initial active tab can be provided using the activeIndex property in uncontrolled mode however it is evaluated at initial rendering and ignored in further + updates. If you programmatically need to update the active tab, prefer to use the component as controlled. +

    - -{` + + {` Content I @@ -919,22 +922,24 @@ const [activeIndex, setActiveIndex] = useState(0); `} - +
    Header Template
    -

    The header element is fully customizable on TabPanel. To make special header, an object can be given to the headerTemplate property as below.

    - -{` +

    + The header element is fully customizable on TabPanel. To make special header, an object can be given to the headerTemplate property as below. +

    + + {` Content I `} - +
    - - {` + + {` template: (options) => { // options.className: Style class of the default header element. // options.titleClassName: Style class of the title element. @@ -949,7 +954,7 @@ template: (options) => { // options.ariaControls: The value of aria-controls property. } `} - +
    Properties For TabPanel
    @@ -1116,9 +1121,10 @@ template: (options) => { onTabChange - event.originalEvent: Browser event
    - event.index: Index of the selected tab - + + event.originalEvent: Browser event
    + event.index: Index of the selected tab + Callback to invoke when an active tab is changed. @@ -1146,7 +1152,9 @@ template: (options) => {
    Styling
    -

    Following is the list of structural style classes, for theming classes visit theming page.

    +

    + Following is the list of structural style classes, for theming classes visit theming page. +

    @@ -1180,12 +1188,14 @@ template: (options) => {
    -
    Accessibility
    +
    Accessibility
    Screen Reader
    -

    TabView container is defined with the tablist role, as any attribute is passed to the container element aria-labelledby can be optionally used to specify an element to describe the TabView. Each tab header - has a tab role along with aria-selected state attribute and aria-controls to refer to the corresponding tab content element. The content element of each tab has tabpanel role, an id to match the - aria-controls of the header and aria-labelledby reference to the header as the accessible name.

    +

    + TabView container is defined with the tablist role, as any attribute is passed to the container element aria-labelledby can be optionally used to specify an element to describe the TabView. Each tab header + has a tab role along with aria-selected state attribute and aria-controls to refer to the corresponding tab content element. The content element of each tab has tabpanel role, an id to match the + aria-controls of the header and aria-labelledby reference to the header as the accessible name. +

    Tab Header Keyboard Support
    @@ -1198,49 +1208,59 @@ template: (options) => { - tab + + tab + Moves focus through the header. - enter + + enter + Activates the focused tab header. - space + + space + Activates the focused tab header. - right arrow + + right arrow + Moves focus to the next header. - left arrow + + left arrow + Moves focus to the previous header. - home + + home + Moves focus to the last header. - end + + end + Moves focus to the first header.
    -
    Dependencies

    None.

    - - { - useLiveEditorTabs({ name: 'TabViewDemo', sources: sources, extFiles: extFiles }) - } + {useLiveEditorTabs({ name: 'TabViewDemo', sources: sources, extFiles: extFiles })}
    ); -}) +}); export default TabViewDoc; diff --git a/components/doc/tag/index.js b/components/doc/tag/index.js index 5756a94d7f..a69f49fa0a 100644 --- a/components/doc/tag/index.js +++ b/components/doc/tag/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const TagDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -47,7 +46,7 @@ export class TagDemo extends Component { ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React from 'react'; @@ -83,7 +82,7 @@ export const TagDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React from 'react'; @@ -119,7 +118,7 @@ export const TagDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -158,41 +157,45 @@ const TagDemo = () => { } ` } - } + }; return (
    Import via Module
    - -{` + + {` import { Tag } from 'primereact/tag'; `} - +
    Import via CDN
    - -{` + + {` `} - +
    Getting Started
    -

    Content of the tag is specified using the value property.

    - -{` +

    + Content of the tag is specified using the value property. +

    + + {` `} - +
    Icon
    -

    An icon can also be configured to be displayed next to the value with the icon property.

    - -{` +

    + An icon can also be configured to be displayed next to the value with the icon property. +

    + + {` `} - +
    Severities

    Different color options are available as severity levels.

    @@ -206,13 +209,13 @@ import { Tag } from 'primereact/tag';
    Templating

    Content can easily be added like a child element.

    - -{` + + {` Content `} - +
    Properties

    Any valid attribute is passed to the root element implicitly, extended properties are as follows;

    @@ -256,7 +259,9 @@ import { Tag } from 'primereact/tag';
    Styling
    -

    Following is the list of structural style classes, for theming classes visit theming page.

    +

    + Following is the list of structural style classes, for theming classes visit theming page. +

    @@ -289,8 +294,10 @@ import { Tag } from 'primereact/tag';
    Accessibility
    Screen Reader
    -

    Tag does not include any roles and attributes by default, any attribute is passed to the root element so aria roles and attributes can be added if required. If the tags are dynamic, - aria-live may be utilized as well. In case badges need to be tabbable, tabIndex can be added to implement custom key handlers.

    +

    + Tag does not include any roles and attributes by default, any attribute is passed to the root element so aria roles and attributes can be added if required. If the tags are dynamic, + aria-live may be utilized as well. In case badges need to be tabbable, tabIndex can be added to implement custom key handlers. +

    Keyboard Support

    Component does not include any interactive elements.

    @@ -300,12 +307,10 @@ import { Tag } from 'primereact/tag';

    None.

    - { - useLiveEditorTabs({ name: 'TagDemo', sources: sources }) - } + {useLiveEditorTabs({ name: 'TagDemo', sources: sources })} ); -}) +}); export default TagDoc; diff --git a/components/doc/terminal/index.js b/components/doc/terminal/index.js index ec90a24ffc..9db88117b7 100644 --- a/components/doc/terminal/index.js +++ b/components/doc/terminal/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const TerminalDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -74,7 +73,7 @@ export class TerminalDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useEFfect } from 'react'; @@ -138,7 +137,7 @@ export const TerminalDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useEFfect } from 'react'; @@ -202,7 +201,7 @@ export const TerminalDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -270,7 +269,7 @@ const TerminalDemo = () => { } ` } - } + }; const extFiles = { 'demo/TerminalDemo.css': { @@ -293,35 +292,36 @@ const TerminalDemo = () => { } ` } - } + }; return (
    Import via Module
    - -{` + + {` import { Terminal } from 'primereact/terminal'; import { TerminalService } from 'primereact/terminalservice'; `} - +
    Import via CDN
    - -{` + + {` `} - +
    Getting Started
    -

    Commands are processed using an EventBus implementation called TerminalService. - Import this service into your component and subscribe to the command event to process the commands by - sending replies with the response event. Also, all commands can be cleared using the clear event

    +

    + Commands are processed using an EventBus implementation called TerminalService. Import this service into your component and subscribe to the command event to process the commands by sending replies with the{' '} + response event. Also, all commands can be cleared using the clear event +

    - -{` + + {` export const TerminalDemo = () => { const commandHandler = (text) => { @@ -372,7 +372,7 @@ export const TerminalDemo = () => { ); } `} - +
    Properties

    Any valid attribute is passed to the root element implicitly, extended properties are as follows;

    @@ -422,7 +422,9 @@ export const TerminalDemo = () => {
    Styling
    -

    Following is the list of structural style classes, for theming classes visit theming page.

    +

    + Following is the list of structural style classes, for theming classes visit theming page. +

    @@ -457,44 +459,48 @@ export const TerminalDemo = () => {
    Accessibility
    - -
    Screen Reader
    -

    Terminal component has an input element that can be described with aria-label or aria-labelledby props. The element that lists the previous commands has aria-live so that changes are received by the screen reader.

    - -
    Keyboard Support
    -
    -
    - - - - - - - - - - - - - - - - -
    KeyFunction
    tabMoves focus through the input element.
    enterExecutes the command when focus in on the input element.
    -
    - + +
    Screen Reader
    +

    + Terminal component has an input element that can be described with aria-label or aria-labelledby props. The element that lists the previous commands has aria-live so that changes are received by the + screen reader. +

    + +
    Keyboard Support
    +
    + + + + + + + + + + + + + + + + + +
    KeyFunction
    + tab + Moves focus through the input element.
    + enter + Executes the command when focus in on the input element.
    +
    +
    Dependencies

    None.

    - { - useLiveEditorTabs({ name: 'TerminalDemo', sources: sources, extFiles: extFiles }) - } - + {useLiveEditorTabs({ name: 'TerminalDemo', sources: sources, extFiles: extFiles })} - ) -}) + ); +}); export default TerminalDoc; diff --git a/components/doc/tieredmenu/index.js b/components/doc/tieredmenu/index.js index 2dd3309dd3..1693c27f6a 100644 --- a/components/doc/tieredmenu/index.js +++ b/components/doc/tieredmenu/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const TieredMenuDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -168,7 +167,7 @@ export class TieredMenuDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useRef } from 'react'; @@ -322,7 +321,7 @@ const TieredMenuDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useRef } from 'react'; @@ -476,7 +475,7 @@ const TieredMenuDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -633,34 +632,36 @@ const TieredMenuDemo = () => { } ` } - } + }; - return ( -
    - - -
    Import via Module
    - -{` + return ( +
    + + +
    Import via Module
    + + {` import { TieredMenu } from 'primereact/tieredmenu'; `} - + -
    Import via CDN
    - -{` +
    Import via CDN
    + + {` `} - +
    -
    MenuItem API
    -

    TieredMenu uses the common menu item api to define its items, visit MenuModel for details.

    +
    MenuItem API
    +

    + TieredMenu uses the common menu item api to define its items, visit MenuModel for details. +

    -
    Getting Started
    -

    Menu requires a collection of menuitems as its model.

    - -{` +
    Getting Started
    +

    Menu requires a collection of menuitems as its model.

    + + {` const items = [ { label:'File', @@ -793,23 +794,23 @@ const items = [ } ]; `} - +
    - -{` + + {` `} - +
    Popup Mode

    TieredMenu is inline by default whereas popup mode is supported by enabling popup property and calling toggle method with an event of the target.

    - -{` + + {`
    - ) -}) + ); +}); export default TieredMenuDoc; diff --git a/components/doc/timeline/index.js b/components/doc/timeline/index.js index d2f1bf5ac9..754ab8b49a 100644 --- a/components/doc/timeline/index.js +++ b/components/doc/timeline/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const TimelineDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -98,7 +97,7 @@ export class TimelineDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useRef } from 'react'; @@ -181,7 +180,7 @@ const TimelineDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useRef } from 'react'; @@ -265,7 +264,7 @@ const TieredMenuDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -353,7 +352,7 @@ const TimelineDemo = () => { } ` } - } + }; const extFiles = { 'demo/TimelineDemo.css': { @@ -390,32 +389,34 @@ const TimelineDemo = () => { } ` } - } + }; return (
    Import via Module
    - -{` + + {` import { Timeline } from 'primereact/timeline'; `} - +
    Import via CDN
    - -{` + + {` `} - +
    Getting Started
    -

    Timeline receives the events with the value property as a collection of arbitrary objects. In addition, content property is required to display the representation of an event. - Example below is a sample events array that is used throughout the documentation.

    - -{` +

    + Timeline receives the events with the value property as a collection of arbitrary objects. In addition, content property is required to display the representation of an event. Example below is a sample events + array that is used throughout the documentation. +

    + + {` const events = [ { status: 'Ordered', date: '15/10/2020 10:30', icon: 'pi pi-shopping-cart', color: '#9C27B0', image: 'game-controller.jpg' }, { status: 'Processing', date: '15/10/2020 14:00', icon: 'pi pi-cog', color: '#673AB7' }, @@ -423,52 +424,60 @@ const events = [ { status: 'Delivered', date: '16/10/2020 10:00', icon: 'pi pi-check', color: '#607D8B' } ]; `} - +
    - -{` + + {` item.status} /> `} - +
    Layout
    -

    Default layout of the timeline is vertical, setting layout to "horizontal" displays the items horizontally.

    - -{` +

    + Default layout of the timeline is vertical, setting layout to "horizontal" displays the items horizontally. +

    + + {` item.status} /> `} - +
    Alignment
    -

    Location of the timeline bar is defined using the align property.

    - -{` +

    + Location of the timeline bar is defined using the align property. +

    + + {` item.status} /> `} - +

    In addition, the "alternate" alignment option make the contents take turns around the timeline bar.

    - -{` + + {` item.status} /> `} - +
    Opposite
    -

    Content to be placed at the other side of the bar is defined with the opposite property.

    - -{` +

    + Content to be placed at the other side of the bar is defined with the opposite property. +

    + + {` item.status} content={(item) => {item.date}} /> `} - +
    Custom Markers
    -

    marker property allows placing a custom event marker instead of the default one. Below is an example with custom markers and content.

    - -{` +

    + marker property allows placing a custom event marker instead of the default one. Below is an example with custom markers and content. +

    + + {` } content={(item) => item.status}} /> `} - +
    Properties
    @@ -529,7 +538,9 @@ const events = [
    Styling
    -

    Following is the list of structural style classes, for theming classes visit theming page.

    +

    + Following is the list of structural style classes, for theming classes visit theming page. +

    @@ -601,25 +612,21 @@ const events = [
    Accessibility
    -
    Screen Reader
    -

    Timeline uses a semantic ordered list element to list the events. No specific role is enforced, still you may use any aria role and attributes - as any valid attribute is passed to the list element. -

    +
    Screen Reader
    +

    Timeline uses a semantic ordered list element to list the events. No specific role is enforced, still you may use any aria role and attributes as any valid attribute is passed to the list element.

    -
    Keyboard Support
    -

    Component does not include any interactive elements.

    -
    +
    Keyboard Support
    +

    Component does not include any interactive elements.

    +
    Dependencies

    None.

    - { - useLiveEditorTabs({ name: 'TimelineDemo', sources: sources, extFiles: extFiles }) - } + {useLiveEditorTabs({ name: 'TimelineDemo', sources: sources, extFiles: extFiles })} - ) -}) + ); +}); export default TimelineDoc; diff --git a/components/doc/toast/index.js b/components/doc/toast/index.js index 8d99ab81c0..277247cf9a 100644 --- a/components/doc/toast/index.js +++ b/components/doc/toast/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const ToastDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -134,7 +133,7 @@ export class ToastDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useRef } from 'react'; @@ -248,7 +247,7 @@ const ToastDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useRef } from 'react'; @@ -362,7 +361,7 @@ const ToastDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -498,44 +497,46 @@ const ToastDemo = () => { } ` } - } + }; return (
    Import via Module
    - -{` + + {` import { Toast } from 'primereact/toast'; `} - +
    Import via CDN
    - -{` + + {` `} - +
    Getting Started
    -

    A single message is represented by the Message interface in PrimeReact that defines various properties such as severity, - summary and detail. Messages are displayed by using the show method on the ref of the Toast instance.

    +

    + A single message is represented by the Message interface in PrimeReact that defines various properties such as severity, summary and detail. Messages are displayed by using the show method on the ref of the Toast + instance. +

    Note that for animations, toast requires react-transition-group package.

    - -{` + + {` `} - + - -{` + + {` toast.current.show({severity: 'success', summary: 'Success Message', detail: 'Order submitted'}); `} - +
    Message API
    @@ -632,8 +633,8 @@ toast.current.show({severity: 'success', summary: 'Success Message', detail: 'Or
    Showing Messages

    Show method accepts either a single message or an array of messages.

    - -{` + + {`
    - + - +
    transitionOptions object nullThe properties of CSSTransition can be customized, except for "nodeRef" and "in" properties. + The properties of{' '} + + CSSTransition + {' '} + can be customized, except for "nodeRef" and "in" properties. +
    appendTo DOM element | string selfDOM element instance where the component should be mounted. Valid values are any DOM Element and 'self'. The self value is used to render a component where it is located. + DOM element instance where the component should be mounted. Valid values are any DOM Element and 'self'. The self value is used to render a component where it is located. +
    @@ -818,7 +832,9 @@ toast.current.replace(newMessages);
    Styling
    -

    Following is the list of structural style classes, for theming classes visit theming page.

    +

    + Following is the list of structural style classes, for theming classes visit theming page. +

    @@ -862,48 +878,53 @@ toast.current.replace(newMessages);
    Accessibility
    -
    Screen Reader
    -

    Toast component use alert role that implicitly defines aria-live as "assertive" and aria-atomic as "true".

    - -

    Close element is a button with an aria-label that refers to the aria.close property of the locale API by default, you may use - closeButtonProps to customize the element and override the default aria-label.

    - -
    Close Button Keyboard Support
    -
    -
    - - - - - - - - - - - - - - - - -
    KeyFunction
    enterCloses the message.
    spaceCloses the message.
    -
    +
    Screen Reader
    +

    + Toast component use alert role that implicitly defines aria-live as "assertive" and aria-atomic as "true". +

    + +

    + Close element is a button with an aria-label that refers to the aria.close property of the locale API by default, you may use + closeButtonProps to customize the element and override the default aria-label. +

    + +
    Close Button Keyboard Support
    +
    + + + + + + + + + + + + + + + + + +
    KeyFunction
    + enter + Closes the message.
    + space + Closes the message.
    +
    Dependencies
    • react-transition-group
    -
    - { - useLiveEditorTabs({ name: 'ToastDemo', sources: sources, extFiles: extFiles }) - } + {useLiveEditorTabs({ name: 'ToastDemo', sources: sources, extFiles: extFiles })}
    ); -}) +}); export default ToastDoc; diff --git a/components/doc/togglebutton/index.js b/components/doc/togglebutton/index.js index 0895ece444..2ae8c3c65a 100644 --- a/components/doc/togglebutton/index.js +++ b/components/doc/togglebutton/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const ToggleButtonDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -41,7 +40,7 @@ export class ToggleButtonDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -64,10 +63,10 @@ const ToggleButtonDemo = () => { ); } ` - }, - 'ts': { - tabName: 'TS Source', - content: ` + }, + ts: { + tabName: 'TS Source', + content: ` import React, { useState } from 'react'; import { ToggleButton } from 'primereact/togglebutton'; @@ -89,7 +88,7 @@ const ToggleButtonDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -116,44 +115,48 @@ const ToggleButtonDemo = () => { } ` } - } + }; return (
    Import via Module
    - -{` + + {` import { ToggleButton } from 'primereact/togglebutton'; `} - +
    Import via CDN
    - -{` + + {` `} - +
    Getting Started
    -

    ToggleButton is used as a controlled input with checked and onChange properties.

    +

    + ToggleButton is used as a controlled input with checked and onChange properties. +

    - -{` + + {` setChecked1(e.value)} /> `} - +
    Labels and Icons
    -

    Icons and Labels can be customized using onLabel, offLabel, onIcon and offIcon properties.

    +

    + Icons and Labels can be customized using onLabel, offLabel, onIcon and offIcon properties. +

    - -{` + + {` setChecked2(e.value)} /> `} - +
    Properties

    Any valid attribute is passed to the root element implicitly, extended properties are as follows;

    @@ -257,8 +260,10 @@ import { ToggleButton } from 'primereact/togglebutton'; onChange - event.originalEvent: Browser event
    - event.value: Value as the checked state. + + event.originalEvent: Browser event
    + event.value: Value as the checked state. + Callback to invoke on value change. @@ -276,7 +281,9 @@ import { ToggleButton } from 'primereact/togglebutton';
    Styling
    -

    Following is the list of structural style classes, for theming classes visit theming page.

    +

    + Following is the list of structural style classes, for theming classes visit theming page. +

    @@ -303,50 +310,55 @@ import { ToggleButton } from 'primereact/togglebutton';
    Accessibility
    - -
    Screen Reader
    -

    ToggleButton component uses an element with button role and updates aria-pressed state for screen readers. Value to describe the component can be defined with aria-labelledby or aria-label props, it is highly suggested to use - either of these props as the component changes the label displayed which will result in screen readers to read different labels when the component receives focus. To prevent this, always provide an aria label that does not change related to state.

    - -{` + +
    Screen Reader
    +

    + ToggleButton component uses an element with button role and updates aria-pressed state for screen readers. Value to describe the component can be defined with aria-labelledby or aria-label{' '} + props, it is highly suggested to use either of these props as the component changes the label displayed which will result in screen readers to read different labels when the component receives focus. To prevent this, + always provide an aria label that does not change related to state. +

    + + {` Remember Me `} - -
    Keyboard Support
    -
    -
    - - - - - - - - - - - - - - - - -
    KeyFunction
    tabMoves focus to the button.
    spaceToggles the checked state.
    -
    - +
    +
    Keyboard Support
    +
    + + + + + + + + + + + + + + + + + +
    KeyFunction
    + tab + Moves focus to the button.
    + space + Toggles the checked state.
    +
    +
    Dependencies

    None.

    - { - useLiveEditorTabs({ name: 'ToggleButtonDemo', sources: sources }) - } + {useLiveEditorTabs({ name: 'ToggleButtonDemo', sources: sources })}
    ); -}) +}); export default ToggleButtonDoc; diff --git a/components/doc/toolbar/index.js b/components/doc/toolbar/index.js index 386841c092..2d817d3ced 100644 --- a/components/doc/toolbar/index.js +++ b/components/doc/toolbar/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const ToolbarDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -73,7 +72,7 @@ export class ToolbarDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React from 'react'; @@ -131,7 +130,7 @@ const ToolbarDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React from 'react'; @@ -189,7 +188,7 @@ const ToolbarDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -253,31 +252,33 @@ const ToolbarDemo = () => { } ` } - } + }; return (
    Import via Module
    - -{` + + {` import { Toolbar } from 'primereact/toolbar'; `} - +
    Import via CDN
    - -{` + + {` `} - +
    Getting Started
    -

    Toolbar provides left and right templates to place content at these sections.

    - -{` +

    + Toolbar provides left and right templates to place content at these sections. +

    + + {` const leftContents = (
    - ) -}) + ); +}); export default ToolbarDoc; diff --git a/components/doc/tooltip/index.js b/components/doc/tooltip/index.js index 8aabd3f538..5449e9c599 100644 --- a/components/doc/tooltip/index.js +++ b/components/doc/tooltip/index.js @@ -5,9 +5,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const TooltipDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -133,7 +132,7 @@ export class TooltipDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -251,7 +250,7 @@ const TooltipDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -369,7 +368,7 @@ const TooltipDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -548,57 +547,64 @@ const TooltipDemo = () => { } ` } - } + }; return (
    Import to use it as a component
    - -{` + + {` import { Tooltip } from 'primereact/tooltip'; `} - +
    Getting Started
    -

    Tooltip functionality is integrated within the the components that have support such as inputtext or buttons. Content is defined with the tooltip property.

    - -{` +

    + Tooltip functionality is integrated within the the components that have support such as inputtext or buttons. Content is defined with the tooltip property. +

    + + {`
    Styling
    -

    Following is the list of structural style classes, for theming classes visit theming page.

    +

    + Following is the list of structural style classes, for theming classes visit theming page. +

    @@ -2608,18 +2694,26 @@ export const TreeTableResponsiveDemo = () => {
    Accessibility
    Screen Reader
    -

    DataTable uses a treegrid element whose attributes can be extended with the tableProps option. This property allows passing aria roles and attributes like aria-label and aria-describedby to define the table for readers. Default - role of the table is table. Header, body and footer elements use rowgroup, rows use row role, header cells have columnheader and body cells use cell roles. Sortable headers utilizer aria-sort attribute - either set to "ascending" or "descending".

    +

    + DataTable uses a treegrid element whose attributes can be extended with the tableProps option. This property allows passing aria roles and attributes like aria-label and aria-describedby to + define the table for readers. Default role of the table is table. Header, body and footer elements use rowgroup, rows use row role, header cells have columnheader and body cells use cell{' '} + roles. Sortable headers utilizer aria-sort attribute either set to "ascending" or "descending". +

    -

    Row elements manage aria-expanded for state along with aria-posinset, aria-setsize and aria-level attribute to define the hierachy.

    +

    + Row elements manage aria-expanded for state along with aria-posinset, aria-setsize and aria-level attribute to define the hierachy. +

    -

    When selection is enabled, aria-selected is set to true on a row. In checkbox mode, the built-in checkbox component use checkbox role with aria-checked state attribute.

    +

    + When selection is enabled, aria-selected is set to true on a row. In checkbox mode, the built-in checkbox component use checkbox role with aria-checked state attribute. +

    Editable cells use custom templating so you need to manage aria roles and attributes manually if required.

    -

    Paginator is a standalone component used inside the DataTable, refer to the paginator for more information about the accessibility features.

    - +

    + Paginator is a standalone component used inside the DataTable, refer to the paginator for more information about the accessibility features. +

    +
    Sortable Headers Keyboard Support
    @@ -2631,15 +2725,21 @@ export const TreeTableResponsiveDemo = () => { - + - + - + @@ -2657,39 +2757,57 @@ export const TreeTableResponsiveDemo = () => { - - + - - + - + - + - + - + - + - + @@ -2699,15 +2817,12 @@ export const TreeTableResponsiveDemo = () => {
    Dependencies

    None.

    - - { - useLiveEditorTabs({ name: 'TreeTableDemo', sources: sources, service: 'NodeService', data: 'treetablenodes' }) - } + {useLiveEditorTabs({ name: 'TreeTableDemo', sources: sources, service: 'NodeService', data: 'treetablenodes' })} ); -}) +}); export default TreeTableDoc; diff --git a/components/doc/tristatecheckbox/index.js b/components/doc/tristatecheckbox/index.js index 0157bfad72..b0f5151333 100644 --- a/components/doc/tristatecheckbox/index.js +++ b/components/doc/tristatecheckbox/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const TriStateCheckboxDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -39,7 +38,7 @@ export class TriStateCheckboxDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -61,7 +60,7 @@ const TriStateCheckboxDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -83,7 +82,7 @@ const TriStateCheckboxDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -108,34 +107,36 @@ const TriStateCheckboxDemo = () => { } ` } - } + }; - return ( -
    - - -
    Import via Module
    - -{` + return ( +
    + + +
    Import via Module
    + + {` import { TriStateCheckbox } from 'primereact/tristatecheckbox'; `} - + -
    Import via CDN
    - -{` +
    Import via CDN
    + + {` `} - +
    -
    Getting Started
    -

    TriStateCheckbox is used as a controlled input with checked and onChange properties.

    - -{` +
    Getting Started
    +

    + TriStateCheckbox is used as a controlled input with checked and onChange properties. +

    + + {` setValue(e.value)} /> `} - +
    Properties

    Any valid attribute is passed to the root element implicitly, extended properties are as follows;

    @@ -221,7 +222,8 @@ import { TriStateCheckbox } from 'primereact/tristatecheckbox';
    - @@ -231,7 +233,9 @@ import { TriStateCheckbox } from 'primereact/tristatecheckbox';
    Styling
    -

    Following is the list of structural style classes, for theming classes visit theming page.

    +

    + Following is the list of structural style classes, for theming classes visit theming page. +

    tab + tab + Moves through the headers.
    enter + enter + Sorts the column.
    space + space + Sorts the column.
    tabMoves focus to the first selected node when focus enters the component, if there is none then first element receives the focus. If focus is already inside the component, moves focus to the next - focusable element in the page tab sequence. + + tab + + Moves focus to the first selected node when focus enters the component, if there is none then first element receives the focus. If focus is already inside the component, moves focus to the next focusable + element in the page tab sequence.
    shift + tabMoves focus to the last selected node when focus enters the component, if there is none then first element receives the focus. If focus is already inside the component, moves focus to the previous - focusable element in the page tab sequence. + + shift + tab + + Moves focus to the last selected node when focus enters the component, if there is none then first element receives the focus. If focus is already inside the component, moves focus to the previous focusable + element in the page tab sequence.
    enter + enter + Selects the focused treenode.
    space + space + Selects the focused treenode.
    down arrow + down arrow + Moves focus to the next treenode.
    up arrow + up arrow + Moves focus to the previous treenode.
    right arrow + right arrow + If node is closed, opens the node otherwise moves focus to the first child node.
    left arrow + left arrow + If node is open, closes the node otherwise moves focus to the parent node.
    onChangeevent.originalEvent: Browser event
    +
    + event.originalEvent: Browser event
    event.value: Current Value
    Callback to invoke on value change
    @@ -262,55 +266,61 @@ import { TriStateCheckbox } from 'primereact/tristatecheckbox';
    Accessibility
    - -
    Screen Reader
    -

    TriStateCheckbox component uses an element with checkbox role. Value to describe the component can either be provided with aria-labelledby or aria-label props. Component adds an element with - aria-live attribute that is only visible to screen readers to read the value displayed. Values to read are defined with the trueLabel, falseLabel and nullLabel keys of the aria - property from the locale API. This is an example of a custom accessibility implementation as there is no one to one mapping between the component design and the WCAG specification.

    - -{` + +
    Screen Reader
    +

    + TriStateCheckbox component uses an element with checkbox role. Value to describe the component can either be provided with aria-labelledby or aria-label props. Component adds an element with + aria-live attribute that is only visible to screen readers to read the value displayed. Values to read are defined with the trueLabel, falseLabel and nullLabel keys of the aria + property from the locale API. This is an example of a custom accessibility implementation as there is no one to one mapping between the component design and the WCAG specification. +

    + + {` Remember Me `} - -
    Keyboard Support
    -
    -
    - - - - - - - - - - - - - - - - - - - - -
    KeyFunction
    tabMoves focus to the checkbox.
    spaceToggles between the values.
    enterToggles between the values.
    -
    - + +
    Keyboard Support
    +
    + + + + + + + + + + + + + + + + + + + + + +
    KeyFunction
    + tab + Moves focus to the checkbox.
    + space + Toggles between the values.
    + enter + Toggles between the values.
    +
    +
    Dependencies

    None.

    - { - useLiveEditorTabs({ name: 'TriStateCheckboxDemo', sources: sources }) - } + {useLiveEditorTabs({ name: 'TriStateCheckboxDemo', sources: sources })} - ) -}) + ); +}); export default TriStateCheckboxDoc; diff --git a/components/doc/virtualscroller/index.js b/components/doc/virtualscroller/index.js index a8fd26b13d..637e20bbdf 100644 --- a/components/doc/virtualscroller/index.js +++ b/components/doc/virtualscroller/index.js @@ -6,9 +6,8 @@ import { CodeHighlight } from '../common/codehighlight'; import { DevelopmentSection } from '../common/developmentsection'; const VirtualScrollerDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -211,7 +210,7 @@ export class VirtualScrollerDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useEffect, useState, useRef } from 'react'; @@ -395,7 +394,7 @@ const VirtualScrollerDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useEffect, useState, useRef } from 'react'; @@ -579,7 +578,7 @@ const VirtualScrollerDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -769,7 +768,7 @@ const VirtualScrollerDemo = () => { } ` } - } + }; const extFiles = { 'demo/VirtualScrollerDemo.css': { @@ -804,39 +803,43 @@ const VirtualScrollerDemo = () => { } ` } - } + }; return (
    Import via Module
    - -{` + + {` import { VirtualScroller } from 'primereact/virtualscroller'; `} - +
    Import via CDN
    - -{` + + {` `} - +
    Getting Started
    -

    VirtualScroller is used to display huge data. It periodically adds special elements defined according to the scroll's position to the DOM. - The itemSize and itemTemplate properties are required on component. In addition, an initial array is required based on the total number of items to display.
    - VirtualScroller automatically calculates how many items will be displayed in the view according to itemSize using a specified scroll height. Its scroll height can be adjusted with scrollHeight property or height property of CSS.

    - -{` +

    + VirtualScroller is used to display huge data. It periodically adds special elements defined according to the scroll's position to the DOM. The itemSize and itemTemplate properties are required on component. In + addition, an initial array is required based on the total number of items to display. +
    + VirtualScroller automatically calculates how many items will be displayed in the view according to itemSize using a specified scroll height. Its scroll height can be adjusted with scrollHeight property or height + property of CSS. +

    + + {` `} - +
    - -{` + + {` const items = Array.from({ length: 100000 }).map((_, i) => \`Item #\${i}\`); const itemTemplate = (item, options) => { @@ -852,21 +855,22 @@ const itemTemplate = (item, options) => { return
    {item}
    ; } `} -
    +
    Loader
    -

    VirtualScroller has a special loader. It can be activated with the showLoader property. - In addition, loadingTemplate can be used to add custom loaders to item elements.

    - -{` +

    + VirtualScroller has a special loader. It can be activated with the showLoader property. In addition, loadingTemplate can be used to add custom loaders to item elements. +

    + + {` `} - +
    - -{` + + {` const loadingTemplate = (options) => { // options.index: Index of the item. // options.count: Total numbers of items. @@ -884,20 +888,22 @@ const loadingTemplate = (options) => { ); } `} - +
    Lazy
    -

    Lazy mode is handy to deal with large datasets, instead of loading the entire data, small chunks of data is loaded by invoking onLazyLoad callback.

    +

    + Lazy mode is handy to deal with large datasets, instead of loading the entire data, small chunks of data is loaded by invoking onLazyLoad callback. +

    - -{` + + {` `} - + - -{` + + {` const onLazyLoad = (event) => { setLazyLoading(true); @@ -919,19 +925,21 @@ const onLazyLoad = (event) => { }, Math.random() * 1000 + 250); } `} - +
    Content Template
    -

    VirtualScroller has a HTML div element to wrap the all items. But in some cases, it may be desirable to define a completely special wrapper element instead of the HTML div element. The contentTemplate property can be used for this. - This will be especially necessary to maintain the DOM layout and provide accessibility.

    - -{` +

    + VirtualScroller has a HTML div element to wrap the all items. But in some cases, it may be desirable to define a completely special wrapper element instead of the HTML div element. The contentTemplate property can be + used for this. This will be especially necessary to maintain the DOM layout and provide accessibility. +

    + + {` `} - +
    - -{` + + {` const contentTemplate = (options) => { // options.className: Class name of wrapper element. // options.contentRef: Ref of wrapper element. @@ -961,7 +969,7 @@ const itemTemplate = (item, options) => { return
  • {item}
  • } `} -
    +
    Properties
    @@ -1026,9 +1034,11 @@ const itemTemplate = (item, options) => { - + Default value is half the number of items shown in the view. + @@ -1130,14 +1140,18 @@ const itemTemplate = (item, options) => { - - @@ -1198,7 +1212,9 @@ const itemTemplate = (item, options) => {
    Styling
    -

    Following is the list of structural style classes, for theming classes visit theming page.

    +

    + Following is the list of structural style classes, for theming classes visit theming page. +

    numToleratedItems number nullDetermines how many additional elements to add to the DOM outside of the view.
    +
    + Determines how many additional elements to add to the DOM outside of the view.
    According to the scrolls made up and down, extra items are added in a certain algorithm in the form of multiples of this number.
    - Default value is half the number of items shown in the view.
    delay
    onScrollIndexChangeevent.first: First index of the new data range to be loaded.
    +
    + event.first: First index of the new data range to be loaded. +
    event.last: Last index of the new data range to be loaded.
    Callback to invoke when scroll position and item's range in view changes.
    onLazyLoadevent.first: First index of the new data range to be loaded.
    +
    + event.first: First index of the new data range to be loaded. +
    event.last: Last index of the new data range to be loaded.
    Callback to invoke in lazy mode to load new data.
    @@ -1226,26 +1242,24 @@ const itemTemplate = (item, options) => {
    Accessibility
    -
    Screen Reader
    -

    VirtualScroller uses a semantic list element to list the items. No specific role is enforced, still you may use any aria role and attributes - as any valid attribute is passed to the container element. List element can be also customized for accessibility using listProps property. -

    - -
    Keyboard Support
    -

    Component does not include any built-in interactive elements.

    +
    Screen Reader
    +

    + VirtualScroller uses a semantic list element to list the items. No specific role is enforced, still you may use any aria role and attributes as any valid attribute is passed to the container element. List element can be + also customized for accessibility using listProps property. +

    + +
    Keyboard Support
    +

    Component does not include any built-in interactive elements.

    Dependencies

    None.

    - - { - useLiveEditorTabs({ name: 'VirtualScrollerDemo', sources: sources, extFiles: extFiles }) - } + {useLiveEditorTabs({ name: 'VirtualScrollerDemo', sources: sources, extFiles: extFiles })} - ) -}) + ); +}); export default VirtualScrollerDoc; diff --git a/components/layout/analytics.js b/components/layout/analytics.js index 322c38b959..ea803ee14c 100644 --- a/components/layout/analytics.js +++ b/components/layout/analytics.js @@ -15,7 +15,7 @@ export default function Analytics() { return () => { router.events.off('routeChangeComplete', handleRouteChange); }; - }, [router.events]); + }, [router.events]); return ( <> diff --git a/components/layout/config.js b/components/layout/config.js index 00bc20cdd8..df60d4f7f7 100644 --- a/components/layout/config.js +++ b/components/layout/config.js @@ -1,31 +1,31 @@ import { classNames } from '../lib/utils/ClassNames'; -import {Button} from '../lib/button/Button'; -import {RadioButton} from '../lib/radiobutton/RadioButton'; -import {InputSwitch} from '../lib/inputswitch/InputSwitch'; -import {Badge} from '../lib/badge/Badge'; +import { Button } from '../lib/button/Button'; +import { RadioButton } from '../lib/radiobutton/RadioButton'; +import { InputSwitch } from '../lib/inputswitch/InputSwitch'; +import { Badge } from '../lib/badge/Badge'; import React, { useState, useRef, useEffect } from 'react'; import getConfig from 'next/config'; export default function Config(props) { const contextPath = getConfig().publicRuntimeConfig.contextPath; - const [active,setActive] = useState(false); - const [scale,setScale] = useState(14); - const [scales,setScales] = useState([12,13,14,15,16]); + const [active, setActive] = useState(false); + const [scale, setScale] = useState(14); + const [scales, setScales] = useState([12, 13, 14, 15, 16]); const toggleConfigurator = () => { - setActive(prevActive => !prevActive); - } + setActive((prevActive) => !prevActive); + }; const hideConfigurator = () => { setActive(false); - } + }; const onThemeChange = (theme, dark) => { - props.onThemeChange({theme, dark}); - } + props.onThemeChange({ theme, dark }); + }; const decrementScale = () => { - setScale(prevScale => --prevScale); - } + setScale((prevScale) => --prevScale); + }; const incrementScale = () => { - setScale(prevScale => ++prevScale); - } + setScale((prevScale) => ++prevScale); + }; const bindOutsideClickListener = () => { if (!outsideClickListener.current) { outsideClickListener.current = (event) => { @@ -35,16 +35,16 @@ export default function Config(props) { }; document.addEventListener('click', outsideClickListener.current); } - } + }; const unbindOutsideClickListener = () => { if (outsideClickListener.current) { document.removeEventListener('click', outsideClickListener.current); outsideClickListener.current = null; } - } + }; const isOutsideClicked = (event) => { return !(element.current.isSameNode(event.target) || element.current.contains(event.target)); - } + }; const element = useRef(); const outsideClickListener = useRef(); @@ -53,10 +53,8 @@ export default function Config(props) { }, [scale]); // eslint-disable-line react-hooks/exhaustive-deps useEffect(() => { - if (active) - bindOutsideClickListener(); - else - unbindOutsideClickListener(); + if (active) bindOutsideClickListener(); + else unbindOutsideClickListener(); return function unbind() { unbindOutsideClickListener(); @@ -82,11 +80,9 @@ export default function Config(props) {

    Component Scale

    @@ -108,31 +104,33 @@ export default function Config(props) { props.onRippleChange(e.value)} />

    Free Themes

    -

    Built-in component themes created by the PrimeReact Theme Designer.

    +

    + Built-in component themes created by the PrimeReact Theme Designer. +

    Bootstrap
    Blue
    Purple
    Blue
    Purple
    @@ -142,25 +140,25 @@ export default function Config(props) {
    Indigo
    Deep Purple
    Indigo
    - Deep Purple
    @@ -170,25 +168,25 @@ export default function Config(props) {
    Indigo
    Deep Purple
    Indigo
    Deep Purple
    @@ -198,7 +196,7 @@ export default function Config(props) {
    Tailwind Light
    @@ -208,59 +206,61 @@ export default function Config(props) {
    Blue
    -
    PrimeOne Design - 2022
    +
    + PrimeOne Design - 2022 +
    Lara Indigo
    Lara Blue
    Lara Purple
    Lara Teal
    Lara Indigo
    Lara Blue
    Lara Purple
    Lara Teal
    @@ -270,114 +270,116 @@ export default function Config(props) {
    Saga Blue
    Saga Green
    Saga Orange
    Saga Purple
    Vela Blue
    Vela Green
    Vela Orange
    Vela Purple
    Arya Blue
    Arya Green
    Arya Orange
    Arya Purple
    Premium Themes
    -

    Premium themes are only available exclusively for PrimeReact Theme Designer subscribers and therefore not included in PrimeReact core.

    +

    + Premium themes are only available exclusively for PrimeReact Theme Designer subscribers and therefore not included in PrimeReact core. +

    Soho Light
    Soho Dark
    Viva Light
    Viva Dark
    Mira
    Nano
    @@ -387,56 +389,58 @@ export default function Config(props) {
    Nova
    Nova Alt
    Nova Accent
    Luna Blue
    Luna Green
    Luna Amber
    Luna Pink
    Rhea

    Premium Create-React-App Templates

    -

    Beautifully crafted premium create-react-app application templates by the PrimeTek design team.

    +

    + Beautifully crafted premium create-react-app application templates by the PrimeTek design team. +

    diff --git a/components/layout/footer.js b/components/layout/footer.js index 8c58dde039..23b12e081a 100644 --- a/components/layout/footer.js +++ b/components/layout/footer.js @@ -1,11 +1,14 @@ export default function Footer() { + // eslint-disable-next-line @typescript-eslint/no-var-requires const version = require('../../package.json') && require('../../package.json').version; return (
    @@ -21,4 +24,4 @@ export default function Footer() {
    ); -} \ No newline at end of file +} diff --git a/components/layout/layout.js b/components/layout/layout.js index 6d5ff8c2c2..fdbddc4372 100644 --- a/components/layout/layout.js +++ b/components/layout/layout.js @@ -29,31 +29,29 @@ export default function Layout(props) { }); const onMenuButtonClick = () => { setSidebarActive(true); - } + }; const onMenuItemClick = () => { setSidebarActive(false); - } + }; const onMaskClick = () => { setSidebarActive(false); - } + }; const onThemeChange = (event) => { if (event.theme.startsWith('md')) { setRipple(true); } props.onThemeChange(event.theme, event.dark); - } + }; const onInputStyleChange = (value) => { setInputStyle(value); - } + }; const onRippleChange = (value) => { setRipple(value); - } + }; useEffect(() => { - if (sidebarActive) - document.body.classList.add('blocked-scroll'); - else - document.body.classList.remove('blocked-scroll'); + if (sidebarActive) document.body.classList.add('blocked-scroll'); + else document.body.classList.remove('blocked-scroll'); }, [sidebarActive]); // eslint-disable-line react-hooks/exhaustive-deps PrimeReact.ripple = true; @@ -87,23 +85,24 @@ export default function Layout(props) { {props.newsActive && } - + }} + >
    {props.children}
    - +
    - ) + ); } diff --git a/components/layout/menu.js b/components/layout/menu.js index e5f3127738..78d2cb489f 100644 --- a/components/layout/menu.js +++ b/components/layout/menu.js @@ -2,9 +2,9 @@ import Link from 'next/link'; import { classNames } from '../lib/utils/ClassNames'; import { CSSTransition } from 'react-transition-group'; import React, { useRef, useState } from 'react'; -import { useRouter } from 'next/router' +import { useRouter } from 'next/router'; import { InputText } from '../lib/inputtext/InputText'; -import MenuData from "./menu.json"; +import MenuData from './menu.json'; import getConfig from 'next/config'; export default function Menu(props) { @@ -17,7 +17,7 @@ export default function Menu(props) { let _activeSubmenus = { ...activeSubmenus }; _activeSubmenus[name] = _activeSubmenus[name] ? false : true; setActiveSubmenus(_activeSubmenus); - } + }; const isSubmenuActive = (name) => { if (activeSubmenus.hasOwnProperty(name)) { @@ -25,18 +25,16 @@ export default function Menu(props) { } return false; - } + }; const renderBadge = (item) => { const badge = item.badge; if (badge) { - return ( - {badge} - ); + return {badge}; } return null; - } + }; const renderLink = (item, linkProps) => { const { name, to, href } = item; @@ -49,17 +47,26 @@ export default function Menu(props) { ); if (href) - return {content} + return ( + + {content} + + ); else if (!to) - return + return ( + + ); return ( - {content} + + {content} + ); - } + }; const renderCategorySubmenuItems = (item, submenuKey) => { const cSubmenuRef = React.createRef(); @@ -68,84 +75,76 @@ export default function Menu(props) {
      - { - item.children.map((item, index) => { - const link = renderLink(item); - return ( -
    • - {link} -
    • - ); - }) - } + {item.children.map((item, index) => { + const link = renderLink(item); + return ( +
    • + {link} +
    • + ); + })}
    ); - } + }; const renderCategoryItem = (menuitem, menuitemIndex) => { if (menuitem.children) { return ( <> - { - menuitem.children.map((item, index) => { - const submenuKey = `${menuitemIndex}_${index}`; - const link = renderLink(item, { onClick: () => toggleSubmenu(item.name) }); + {menuitem.children.map((item, index) => { + const submenuKey = `${menuitemIndex}_${index}`; + const link = renderLink(item, { onClick: () => toggleSubmenu(item.name) }); - return ( - - {link} - {item.children && renderCategorySubmenuItems(item, submenuKey)} - - ) - }) - } + return ( + + {link} + {item.children && renderCategorySubmenuItems(item, submenuKey)} + + ); + })} ); } return null; - } + }; const renderMenu = () => { return ( <> - { - filteredMenu.map((menuitem, index) => { - const categoryItem = renderCategoryItem(menuitem, index); - const badge = renderBadge(menuitem); - - return ( - -
    - {menuitem.name} - {badge} -
    - {menuitem.children &&
    - {categoryItem} -
    } - {menuitem.banner &&
    + {filteredMenu.map((menuitem, index) => { + const categoryItem = renderCategoryItem(menuitem, index); + const badge = renderBadge(menuitem); + + return ( + +
    + {menuitem.name} + {badge} +
    + {menuitem.children &&
    {categoryItem}
    } + {menuitem.banner && ( +
    banner -
    } -
    - ) - }) - } +
    + )} +
    + ); + })} ); - } + }; const onSearchInputChange = (event) => { if (!MenuData.data) { setFilteredMenu([]); - } - else if (!event.target.value) { + } else if (!event.target.value) { setFilteredMenu(MenuData.data); - } - else if (MenuData.data) { + } else if (MenuData.data) { const searchVal = event.target.value && event.target.value.toLowerCase(); let _filteredMenu = []; for (let item of MenuData.data) { @@ -157,7 +156,7 @@ export default function Menu(props) { setFilteredMenu(_filteredMenu); } - } + }; const findFilteredItems = (item, searchVal) => { if (item) { @@ -179,7 +178,7 @@ export default function Menu(props) { return true; } } - } + }; const isFilterMatched = (item, searchVal) => { let matched = false; @@ -192,38 +191,37 @@ export default function Menu(props) { } return matched; - } + }; const onFilterOnOptions = (item, searchVal, optionKeys) => { if (item && optionKeys) { const isMatched = (val) => { if (searchVal.indexOf('&') < 0) { return val.toLowerCase().indexOf(searchVal) > -1; - } - else { - return searchVal.split('&').some(s => !!s && val.toLowerCase().indexOf(s) > -1); + } else { + return searchVal.split('&').some((s) => !!s && val.toLowerCase().indexOf(s) > -1); } }; - return optionKeys.some(optionKey => { + return optionKeys.some((optionKey) => { const value = item[optionKey]; - return value && (typeof value === 'string' ? isMatched(value) : value.filter(meta => isMatched(meta)).length > 0); + return value && (typeof value === 'string' ? isMatched(value) : value.filter((meta) => isMatched(meta)).length > 0); }); } return false; - } + }; const resetFilter = () => { setFilteredMenu(MenuData.data); searchInput.current.value = ''; searchInput.current.focus(); - } + }; const menuItems = renderMenu(); const showClearIcon = filteredMenu.length !== MenuData.data.length; - const sidebarClassName = classNames('layout-sidebar', { 'active': props.active }); + const sidebarClassName = classNames('layout-sidebar', { active: props.active }); const filterContentClassName = classNames('layout-sidebar-filter-content p-input-icon-left p-fluid', { 'p-input-icon-right': showClearIcon }); const searchInput = useRef(); @@ -246,4 +244,4 @@ export default function Menu(props) {
    ); -} \ No newline at end of file +} diff --git a/components/layout/topbar.js b/components/layout/topbar.js index 4a317a644d..ecd3ab2da0 100644 --- a/components/layout/topbar.js +++ b/components/layout/topbar.js @@ -6,81 +6,77 @@ import { VersionService } from '../../service/VersionService'; import getConfig from 'next/config'; export default function Topbar(props) { - const [activeMenuIndex,setActiveMenuIndex] = useState(null); - const [versions,setVersions] = useState([]); + const [activeMenuIndex, setActiveMenuIndex] = useState(null); + const [versions, setVersions] = useState([]); const onMenuButtonClick = () => { props.onMenuButtonClick(); - } + }; const resetMenuActive = () => { setActiveMenuIndex(null); - } + }; const toggleMenu = (index) => { - setActiveMenuIndex(prevActiveMenuIndex => prevActiveMenuIndex === index ? null : index); - } + setActiveMenuIndex((prevActiveMenuIndex) => (prevActiveMenuIndex === index ? null : index)); + }; const bindOutsideClickListener = () => { if (!outsideClickListener.current) { outsideClickListener.current = (event) => { - if ((activeMenuIndex != null && isOutsideTopbarMenuClicked(event))) { + if (activeMenuIndex != null && isOutsideTopbarMenuClicked(event)) { setActiveMenuIndex(null); } }; document.addEventListener('click', outsideClickListener.current); } - } + }; const unbindOutsideClickListener = () => { if (outsideClickListener.current) { document.removeEventListener('click', outsideClickListener.current); outsideClickListener.current = null; } - } + }; const isOutsideTopbarMenuClicked = (event) => { return !(topbarMenu.current.isSameNode(event.target) || topbarMenu.current.contains(event.target)); - } + }; const onThemeChange = (theme, dark) => { - props.onThemeChange({theme, dark}); + props.onThemeChange({ theme, dark }); resetMenuActive(); - } + }; useEffect(() => { - if (activeMenuIndex == null) - unbindOutsideClickListener(); - else - bindOutsideClickListener(); + if (activeMenuIndex == null) unbindOutsideClickListener(); + else bindOutsideClickListener(); return function unbind() { unbindOutsideClickListener(); - } + }; }, [activeMenuIndex]); // eslint-disable-line react-hooks/exhaustive-deps useEffect(() => { - versionService.getVersions().then(data => setVersions(data)); - },[]); // eslint-disable-line react-hooks/exhaustive-deps + versionService.getVersions().then((data) => setVersions(data)); + }, []); // eslint-disable-line react-hooks/exhaustive-deps const containerElement = useRef(null); const scrollListener = useRef(); const bindScrollListener = () => { scrollListener.current = () => { if (containerElement && containerElement.current) { - if (window.scrollY > 0) - containerElement.current.classList.add('layout-topbar-sticky'); - else - containerElement.current.classList.remove('layout-topbar-sticky'); + if (window.scrollY > 0) containerElement.current.classList.add('layout-topbar-sticky'); + else containerElement.current.classList.remove('layout-topbar-sticky'); } - } + }; window.addEventListener('scroll', scrollListener.current); - } + }; const unbindScrollListener = () => { if (scrollListener.current) { window.removeEventListener('scroll', scrollListener.current); scrollListener.current = null; } - } + }; useEffect(() => { bindScrollListener(); return function unbind() { unbindScrollListener(); - } + }; }, []); const topbarMenu = useRef(); @@ -122,21 +118,21 @@ export default function Topbar(props) { 'arya-green': 'arya-green.png', 'arya-orange': 'arya-orange.png', 'arya-purple': 'arya-purple.png', - 'nova': 'nova.png', + nova: 'nova.png', 'nova-alt': 'nova-alt.png', 'nova-accent': 'nova-accent.png', 'luna-blue': 'luna-blue.png', 'luna-green': 'luna-green.png', 'luna-pink': 'luna-pink.png', 'luna-amber': 'luna-amber.png', - 'rhea': 'rhea.png', + rhea: 'rhea.png', 'fluent-light': 'fluent-light.png', 'soho-light': 'soho-light.png', 'soho-dark': 'soho-dark.png', 'viva-light': 'viva-light.svg', 'viva-dark': 'viva-dark.svg', - 'mira': 'mira.jpg', - 'nano': 'nano.jpg', + mira: 'mira.jpg', + nano: 'nano.jpg', 'tailwind-light': 'tailwind-light.png' }; const contextPath = getConfig().publicRuntimeConfig.contextPath; @@ -152,147 +148,462 @@ export default function Topbar(props) {
    • - - + +
        -
      • THEMING
      • -
      • Guide
      • -
      • Designer
      • -
      • Visual Editor
      • -
      • Icons
      • -
      • Figma UI Kit
      • +
      • + THEMING +
      • +
      • + + + + Guide + + +
      • +
      • + + + Designer + +
      • +
      • + + + Visual Editor + +
      • +
      • + + + + Icons + + +
      • +
      • + + + + Figma UI Kit + + +
      • -
      • BOOTSTRAP
      • -
      • -
      • -
      • -
      • +
      • + BOOTSTRAP +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • -
      • MATERIAL DESIGN
      • -
      • -
      • -
      • -
      • +
      • + MATERIAL DESIGN +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • -
      • MATERIAL DESIGN COMPACT
      • -
      • -
      • -
      • -
      • +
      • + MATERIAL DESIGN COMPACT +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • -
      • TAILWIND
      • -
      • +
      • + TAILWIND +
      • +
      • + +
      • -
      • FLUENT UI
      • -
      • +
      • + FLUENT UI +
      • +
      • + +
      • -
      • PRIMEONE 2022
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • +
      • + PRIMEONE 2022 +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • -
      • PRIMEONE 2021
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • +
      • + PRIMEONE 2021 +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • -
      • PREMIUM
      • -
      • -
      • -
      • -
      • -
      • -
      • +
      • + PREMIUM +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • -
      • LEGACY
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • -
      • +
      • + LEGACY +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
      • +
      • + +
    • - - + + @@ -300,26 +611,24 @@ export default function Topbar(props) {
    • - - Blocks - + Blocks
    • - - -
        - { - versions.map(version => { - return ( -
      • - - {version.version} - -
      • - ) - }) - } + + + diff --git a/components/lib/accordion/Accordion.js b/components/lib/accordion/Accordion.js index 5e62688850..e34563a2a0 100644 --- a/components/lib/accordion/Accordion.js +++ b/components/lib/accordion/Accordion.js @@ -3,7 +3,7 @@ import { CSSTransition } from '../csstransition/CSSTransition'; import { useMountEffect } from '../hooks/Hooks'; import { classNames, IconUtils, ObjectUtils, UniqueComponentId } from '../utils/Utils'; -export const AccordionTab = () => { } +export const AccordionTab = () => {}; export const Accordion = React.forwardRef((props, ref) => { const [idState, setIdState] = React.useState(props.id); @@ -20,9 +20,8 @@ export const Accordion = React.forwardRef((props, ref) => { if (props.multiple) { const indexes = activeIndex || []; - newActiveIndex = selected ? indexes.filter(i => i !== index) : [...indexes, index]; - } - else { + newActiveIndex = selected ? indexes.filter((i) => i !== index) : [...indexes, index]; + } else { newActiveIndex = selected ? null : index; } @@ -34,18 +33,17 @@ export const Accordion = React.forwardRef((props, ref) => { originalEvent: event, index: newActiveIndex }); - } - else { + } else { setActiveIndexState(newActiveIndex); } } event.preventDefault(); - } + }; const isSelected = (index) => { - return props.multiple ? (activeIndex && activeIndex.some(i => i === index)) : activeIndex === index; - } + return props.multiple ? activeIndex && activeIndex.some((i) => i === index) : activeIndex === index; + }; React.useImperativeHandle(ref, () => ({ props, @@ -60,10 +58,15 @@ export const Accordion = React.forwardRef((props, ref) => { const createTabHeader = (tab, selected, index) => { const style = { ...(tab.props.style || {}), ...(tab.props.headerStyle || {}) }; - const className = classNames('p-accordion-header', { - 'p-highlight': selected, - 'p-disabled': tab.props.disabled - }, tab.props.headerClassName, tab.props.className); + const className = classNames( + 'p-accordion-header', + { + 'p-highlight': selected, + 'p-disabled': tab.props.disabled + }, + tab.props.headerClassName, + tab.props.className + ); const headerId = idState + '_header_' + index; const ariaControls = idState + '_content_' + index; const tabIndex = tab.props.disabled ? -1 : null; @@ -77,8 +80,8 @@ export const Accordion = React.forwardRef((props, ref) => { {header}
    - ) - } + ); + }; const createTabContent = (tab, selected, index) => { const style = { ...(tab.props.style || {}), ...(tab.props.contentStyle || {}) }; @@ -90,13 +93,11 @@ export const Accordion = React.forwardRef((props, ref) => { return (
    -
    - {tab.props.children} -
    +
    {tab.props.children}
    - ) - } + ); + }; const createTab = (tab, index) => { if (shouldUseTab(tab)) { @@ -114,15 +115,15 @@ export const Accordion = React.forwardRef((props, ref) => { {tabHeader} {tabContent}
    - ) + ); } return null; - } + }; const createTabs = () => { return React.Children.map(props.children, createTab); - } + }; const otherProps = ObjectUtils.findDiffKeys(props, Accordion.defaultProps); const className = classNames('p-accordion p-component', props.className); @@ -132,7 +133,7 @@ export const Accordion = React.forwardRef((props, ref) => {
    {tabs}
    - ) + ); }); AccordionTab.displayName = 'AccordionTab'; @@ -147,7 +148,7 @@ AccordionTab.defaultProps = { headerTemplate: null, contentStyle: null, contentClassName: null -} +}; Accordion.displayName = 'Accordion'; Accordion.defaultProps = { @@ -163,4 +164,4 @@ Accordion.defaultProps = { onTabOpen: null, onTabClose: null, onTabChange: null -} +}; diff --git a/components/lib/accordion/accordion.d.ts b/components/lib/accordion/accordion.d.ts index 5993a05c10..48a6a27062 100644 --- a/components/lib/accordion/accordion.d.ts +++ b/components/lib/accordion/accordion.d.ts @@ -17,7 +17,7 @@ interface AccordionTabProps { children?: React.ReactNode; } -export declare class AccordionTab extends React.Component { } +export declare class AccordionTab extends React.Component {} type AccordionActiveIndexType = number | number[] | undefined | null; @@ -39,6 +39,6 @@ export interface AccordionProps extends Omit { +export declare class Accordion extends React.Component { public getElement(): HTMLDivElement; } diff --git a/components/lib/api/Api.js b/components/lib/api/Api.js index 766e0673e7..a8bd14bd37 100644 --- a/components/lib/api/Api.js +++ b/components/lib/api/Api.js @@ -4,7 +4,7 @@ import { PrimeIcons } from './PrimeIcons'; import { MessageSeverity } from './MessageSeverity'; import { FilterMatchMode } from './FilterMatchMode'; import { FilterOperator } from './FilterOperator'; -import { FilterService } from './FilterService' +import { FilterService } from './FilterService'; export default PrimeReact; diff --git a/components/lib/api/FilterService.js b/components/lib/api/FilterService.js index bdf76bdbc1..6deb99d4d5 100644 --- a/components/lib/api/FilterService.js +++ b/components/lib/api/FilterService.js @@ -20,7 +20,7 @@ export const FilterService = { return filteredItems; }, filters: { - startsWith(value, filter, filterLocale) { + startsWith(value, filter, filterLocale) { if (filter === undefined || filter === null || filter.trim() === '') { return true; } @@ -85,10 +85,8 @@ export const FilterService = { return false; } - if (value.getTime && filter.getTime) - return value.getTime() === filter.getTime(); - else - return ObjectUtils.removeAccents(value.toString()).toLocaleLowerCase(filterLocale) === ObjectUtils.removeAccents(filter.toString()).toLocaleLowerCase(filterLocale); + if (value.getTime && filter.getTime) return value.getTime() === filter.getTime(); + else return ObjectUtils.removeAccents(value.toString()).toLocaleLowerCase(filterLocale) === ObjectUtils.removeAccents(filter.toString()).toLocaleLowerCase(filterLocale); }, notEquals(value, filter, filterLocale) { if (filter === undefined || filter === null || (typeof filter === 'string' && filter.trim() === '')) { @@ -99,10 +97,8 @@ export const FilterService = { return true; } - if (value.getTime && filter.getTime) - return value.getTime() !== filter.getTime(); - else - return ObjectUtils.removeAccents(value.toString()).toLocaleLowerCase(filterLocale) !== ObjectUtils.removeAccents(filter.toString()).toLocaleLowerCase(filterLocale); + if (value.getTime && filter.getTime) return value.getTime() !== filter.getTime(); + else return ObjectUtils.removeAccents(value.toString()).toLocaleLowerCase(filterLocale) !== ObjectUtils.removeAccents(filter.toString()).toLocaleLowerCase(filterLocale); }, in(value, filter) { if (filter === undefined || filter === null || filter.length === 0) { @@ -126,10 +122,8 @@ export const FilterService = { return false; } - if (value.getTime) - return filter[0].getTime() <= value.getTime() && value.getTime() <= filter[1].getTime(); - else - return filter[0] <= value && value <= filter[1]; + if (value.getTime) return filter[0].getTime() <= value.getTime() && value.getTime() <= filter[1].getTime(); + else return filter[0] <= value && value <= filter[1]; }, lt(value, filter) { if (filter === undefined || filter === null) { @@ -140,10 +134,8 @@ export const FilterService = { return false; } - if (value.getTime && filter.getTime) - return value.getTime() < filter.getTime(); - else - return value < filter; + if (value.getTime && filter.getTime) return value.getTime() < filter.getTime(); + else return value < filter; }, lte(value, filter) { if (filter === undefined || filter === null) { @@ -154,10 +146,8 @@ export const FilterService = { return false; } - if (value.getTime && filter.getTime) - return value.getTime() <= filter.getTime(); - else - return value <= filter; + if (value.getTime && filter.getTime) return value.getTime() <= filter.getTime(); + else return value <= filter; }, gt(value, filter) { if (filter === undefined || filter === null) { @@ -168,10 +158,8 @@ export const FilterService = { return false; } - if (value.getTime && filter.getTime) - return value.getTime() > filter.getTime(); - else - return value > filter; + if (value.getTime && filter.getTime) return value.getTime() > filter.getTime(); + else return value > filter; }, gte(value, filter) { if (filter === undefined || filter === null) { @@ -182,10 +170,8 @@ export const FilterService = { return false; } - if (value.getTime && filter.getTime) - return value.getTime() >= filter.getTime(); - else - return value >= filter; + if (value.getTime && filter.getTime) return value.getTime() >= filter.getTime(); + else return value >= filter; }, dateIs(value, filter) { if (filter === undefined || filter === null) { diff --git a/components/lib/api/Locale.js b/components/lib/api/Locale.js index ea2451583c..f094b7b2b1 100644 --- a/components/lib/api/Locale.js +++ b/components/lib/api/Locale.js @@ -1,7 +1,7 @@ import PrimeReact from './PrimeReact'; let locales = { - 'en': { + en: { startsWith: 'Starts with', contains: 'Contains', notContains: 'Not contains', @@ -31,9 +31,9 @@ let locales = { cancel: 'Cancel', dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], - dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], - monthNames: ['January','February','March','April','May','June','July','August','September','October','November','December'], - monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun','Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], + dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'], + monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], + monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], today: 'Today', weekHeader: 'Wk', firstDayOfWeek: 0, @@ -63,7 +63,7 @@ function locale(locale) { return { locale: PrimeReact.locale, options: locales[PrimeReact.locale] - } + }; } function addLocale(locale, options) { @@ -84,8 +84,7 @@ function localeOption(key, locale) { try { return localeOptions(_locale)[key]; - } - catch(error) { + } catch (error) { throw new Error(`The ${key} option is not found in the current locale('${_locale}').`); } } @@ -95,8 +94,7 @@ function ariaLabel(key) { try { return localeOptions(_locale)['aria'][key]; - } - catch(error) { + } catch (error) { throw new Error(`The ${key} option is not found in the current locale('${_locale}').`); } } diff --git a/components/lib/api/PrimeIcons.js b/components/lib/api/PrimeIcons.js index 7a17471a4b..14fed7527f 100644 --- a/components/lib/api/PrimeIcons.js +++ b/components/lib/api/PrimeIcons.js @@ -91,7 +91,7 @@ export const PrimeIcons = Object.freeze({ ENVELOPE: 'pi pi-envelope', EURO: 'pi pi-euro', EXCLAMATION_CIRCLE: 'pi pi-exclamation-circle', - EXCLAMATION_TRIANGLE : 'pi pi-exclamation-triangle', + EXCLAMATION_TRIANGLE: 'pi pi-exclamation-triangle', EXTERNAL_LINK: 'pi pi-external-link', EYE: 'pi pi-eye', EYE_SLASH: 'pi pi-eye-slash', diff --git a/components/lib/api/PrimeReact.js b/components/lib/api/PrimeReact.js index 76969c5b7b..7092318044 100644 --- a/components/lib/api/PrimeReact.js +++ b/components/lib/api/PrimeReact.js @@ -1,7 +1,6 @@ import { FilterMatchMode } from './FilterMatchMode'; export default class PrimeReact { - static ripple = false; static inputStyle = 'outlined'; @@ -24,30 +23,11 @@ export default class PrimeReact { menu: 1000, tooltip: 1100, toast: 1200 - } + }; static filterMatchModeOptions = { - text: [ - FilterMatchMode.STARTS_WITH, - FilterMatchMode.CONTAINS, - FilterMatchMode.NOT_CONTAINS, - FilterMatchMode.ENDS_WITH, - FilterMatchMode.EQUALS, - FilterMatchMode.NOT_EQUALS - ], - numeric: [ - FilterMatchMode.EQUALS, - FilterMatchMode.NOT_EQUALS, - FilterMatchMode.LESS_THAN, - FilterMatchMode.LESS_THAN_OR_EQUAL_TO, - FilterMatchMode.GREATER_THAN, - FilterMatchMode.GREATER_THAN_OR_EQUAL_TO - ], - date: [ - FilterMatchMode.DATE_IS, - FilterMatchMode.DATE_IS_NOT, - FilterMatchMode.DATE_BEFORE, - FilterMatchMode.DATE_AFTER - ] - } + text: [FilterMatchMode.STARTS_WITH, FilterMatchMode.CONTAINS, FilterMatchMode.NOT_CONTAINS, FilterMatchMode.ENDS_WITH, FilterMatchMode.EQUALS, FilterMatchMode.NOT_EQUALS], + numeric: [FilterMatchMode.EQUALS, FilterMatchMode.NOT_EQUALS, FilterMatchMode.LESS_THAN, FilterMatchMode.LESS_THAN_OR_EQUAL_TO, FilterMatchMode.GREATER_THAN, FilterMatchMode.GREATER_THAN_OR_EQUAL_TO], + date: [FilterMatchMode.DATE_IS, FilterMatchMode.DATE_IS_NOT, FilterMatchMode.DATE_BEFORE, FilterMatchMode.DATE_AFTER] + }; } diff --git a/components/lib/api/api.d.ts b/components/lib/api/api.d.ts index 3320482157..b880f320a1 100644 --- a/components/lib/api/api.d.ts +++ b/components/lib/api/api.d.ts @@ -35,7 +35,7 @@ declare const PrimeReact: APIOptions; export default PrimeReact; // Locale -export declare function locale(locale: string): { locale: string, options: object }; +export declare function locale(locale: string): { locale: string; options: object }; export declare function addLocale(locale: string, options: object): void; export declare function updateLocaleOption(key: string, value: any, locale: string): void; export declare function updateLocaleOptions(options: object, locale: string): void; @@ -136,7 +136,7 @@ export interface PrimeIconsOptions { readonly ENVELOPE: string; readonly EURO: string; readonly EXCLAMATION_CIRCLE: string; - readonly EXCLAMATION_TRIANGLE : string; + readonly EXCLAMATION_TRIANGLE: string; readonly EXTERNAL_LINK: string; readonly EYE: string; readonly EYE_SLASH: string; @@ -337,6 +337,6 @@ export declare namespace FilterService { dateIsNot(value: any, filter: string): boolean; dateBefore(value: any, filter: string): boolean; dateAfter(value: any, filter: string): boolean; - } + }; export function register(rule: string, fn: (...arg: any[]) => boolean): void; } diff --git a/components/lib/autocomplete/AutoComplete.js b/components/lib/autocomplete/AutoComplete.js index ceeb5e8a2e..233672fd21 100644 --- a/components/lib/autocomplete/AutoComplete.js +++ b/components/lib/autocomplete/AutoComplete.js @@ -8,576 +8,630 @@ import { Tooltip } from '../tooltip/Tooltip'; import { classNames, DomHandler, IconUtils, ObjectUtils, UniqueComponentId, ZIndexUtils } from '../utils/Utils'; import { AutoCompletePanel } from './AutoCompletePanel'; -export const AutoComplete = React.memo(React.forwardRef((props, ref) => { - const [idState, setIdState] = React.useState(props.id); - const [searchingState, setSearchingState] = React.useState(false); - const [focusedState, setFocusedState] = React.useState(false); - const [overlayVisibleState, setOverlayVisibleState] = React.useState(false); - const elementRef = React.useRef(null); - const overlayRef = React.useRef(null); - const inputRef = React.useRef(props.inputRef); - const multiContainerRef = React.useRef(null); - const virtualScrollerRef = React.useRef(null); - const timeout = React.useRef(null); - const selectedItem = React.useRef(null); - - const [bindOverlayListener, unbindOverlayListener] = useOverlayListener({ - target: elementRef, overlay: overlayRef, listener: (event, { type, valid }) => { - if (valid) { - (type === 'outside') ? !isInputClicked(event) && hide() : hide(); +export const AutoComplete = React.memo( + React.forwardRef((props, ref) => { + const [idState, setIdState] = React.useState(props.id); + const [searchingState, setSearchingState] = React.useState(false); + const [focusedState, setFocusedState] = React.useState(false); + const [overlayVisibleState, setOverlayVisibleState] = React.useState(false); + const elementRef = React.useRef(null); + const overlayRef = React.useRef(null); + const inputRef = React.useRef(props.inputRef); + const multiContainerRef = React.useRef(null); + const virtualScrollerRef = React.useRef(null); + const timeout = React.useRef(null); + const selectedItem = React.useRef(null); + + const [bindOverlayListener, unbindOverlayListener] = useOverlayListener({ + target: elementRef, + overlay: overlayRef, + listener: (event, { type, valid }) => { + if (valid) { + type === 'outside' ? !isInputClicked(event) && hide() : hide(); + } + }, + when: overlayVisibleState + }); + + const isInputClicked = (event) => { + return props.multiple ? event.target === multiContainerRef.current || multiContainerRef.current.contains(event.target) : event.target === inputRef.current; + }; + + const onInputChange = (event) => { + //Cancel the search request if user types within the timeout + if (timeout.current) { + clearTimeout(timeout.current); } - }, when: overlayVisibleState - }); - - const isInputClicked = (event) => { - return props.multiple ? event.target === multiContainerRef.current || multiContainerRef.current.contains(event.target) : event.target === inputRef.current; - } - - const onInputChange = (event) => { - //Cancel the search request if user types within the timeout - if (timeout.current) { - clearTimeout(timeout.current); - } - - const query = event.target.value; - if (!props.multiple) { - updateModel(event, query); - } - - if (ObjectUtils.isEmpty(query)) { - hide(); - props.onClear && props.onClear(event); - } - else { - if (query.length >= props.minLength) { - timeout.current = setTimeout(() => { - search(event, query, 'input'); - }, props.delay); + + const query = event.target.value; + if (!props.multiple) { + updateModel(event, query); } - else { + + if (ObjectUtils.isEmpty(query)) { hide(); + props.onClear && props.onClear(event); + } else { + if (query.length >= props.minLength) { + timeout.current = setTimeout(() => { + search(event, query, 'input'); + }, props.delay); + } else { + hide(); + } } - } - } - - const search = (event, query, source) => { - //allow empty string but not undefined or null - if (query === undefined || query === null) { - return; - } - - //do not search blank values on input change - if (source === 'input' && query.trim().length === 0) { - return; - } - - if (props.completeMethod) { - setSearchingState(true); - props.completeMethod({ - originalEvent: event, - query - }); - } - } - - const selectItem = (event, option, preventInputFocus) => { - if (props.multiple) { - inputRef.current.value = ''; - if (!isSelected(option)) { - const newValue = props.value ? [...props.value, option] : [option]; - updateModel(event, newValue); + }; + + const search = (event, query, source) => { + //allow empty string but not undefined or null + if (query === undefined || query === null) { + return; } - } - else { - updateInputField(option); - updateModel(event, option); - } - - if (props.onSelect) { - props.onSelect({ - originalEvent: event, - value: option - }) - } - if (!preventInputFocus) { - DomHandler.focus(inputRef.current); - hide(); - } - } - - const updateModel = (event, value) => { - // #2176 only call change if value actually changed - if (selectedItem && selectedItem.current === value) { - return; - } - if (props.onChange) { - props.onChange({ - originalEvent: event, - value, - stopPropagation: () => { }, - preventDefault: () => { }, - target: { - name: props.name, - id: idState, - value + //do not search blank values on input change + if (source === 'input' && query.trim().length === 0) { + return; + } + + if (props.completeMethod) { + setSearchingState(true); + props.completeMethod({ + originalEvent: event, + query + }); + } + }; + + const selectItem = (event, option, preventInputFocus) => { + if (props.multiple) { + inputRef.current.value = ''; + if (!isSelected(option)) { + const newValue = props.value ? [...props.value, option] : [option]; + updateModel(event, newValue); } - }); - } + } else { + updateInputField(option); + updateModel(event, option); + } - selectedItem.current = value; - } + if (props.onSelect) { + props.onSelect({ + originalEvent: event, + value: option + }); + } - const formatValue = (value) => { - if (value) { - if (props.selectedItemTemplate && (props.multiple ? isSelected(value) : findOptionIndex(value) > -1)) { - const resolvedFieldData = ObjectUtils.getJSXElement(props.selectedItemTemplate, value); - return resolvedFieldData ? resolvedFieldData : value; + if (!preventInputFocus) { + DomHandler.focus(inputRef.current); + hide(); } - else if (props.field) { - const resolvedFieldData = ObjectUtils.resolveFieldData(value, props.field); - return resolvedFieldData !== null && resolvedFieldData !== undefined ? resolvedFieldData : value; + }; + + const updateModel = (event, value) => { + // #2176 only call change if value actually changed + if (selectedItem && selectedItem.current === value) { + return; } - else { - return value; + if (props.onChange) { + props.onChange({ + originalEvent: event, + value, + stopPropagation: () => {}, + preventDefault: () => {}, + target: { + name: props.name, + id: idState, + value + } + }); } - } - - return ''; - } - - const updateInputField = (value) => { - inputRef.current.value = formatValue(value); - } - - const show = () => { - setOverlayVisibleState(true); - } - - const hide = () => { - setOverlayVisibleState(false); - setSearchingState(false); - } - - const onOverlayEnter = () => { - ZIndexUtils.set('overlay', overlayRef.current, PrimeReact.autoZIndex, PrimeReact.zIndex['overlay']); - alignOverlay(); - } - - const onOverlayEntering = () => { - if (props.autoHighlight && props.suggestions && props.suggestions.length) { - const element = getScrollableElement().firstChild.firstChild; - DomHandler.addClass(element, 'p-highlight'); - } - } - - const onOverlayEntered = () => { - bindOverlayListener(); - props.onShow && props.onShow(); - } - - const onOverlayExit = () => { - unbindOverlayListener(); - } - - const onOverlayExited = () => { - ZIndexUtils.clear(overlayRef.current); - - props.onHide && props.onHide(); - } - - const alignOverlay = () => { - const target = props.multiple ? multiContainerRef.current : inputRef.current; - DomHandler.alignOverlay(overlayRef.current, target, props.appendTo || PrimeReact.appendTo); - } - - const onPanelClick = (event) => { - OverlayService.emit('overlay-click', { - originalEvent: event, - target: elementRef.current - }); - } - const onDropdownClick = (event) => { - if (props.dropdownAutoFocus) { - DomHandler.focus(inputRef.current, props.dropdownAutoFocus); - } + selectedItem.current = value; + }; + + const formatValue = (value) => { + if (value) { + if (props.selectedItemTemplate && (props.multiple ? isSelected(value) : findOptionIndex(value) > -1)) { + const resolvedFieldData = ObjectUtils.getJSXElement(props.selectedItemTemplate, value); + return resolvedFieldData ? resolvedFieldData : value; + } else if (props.field) { + const resolvedFieldData = ObjectUtils.resolveFieldData(value, props.field); + return resolvedFieldData !== null && resolvedFieldData !== undefined ? resolvedFieldData : value; + } else { + return value; + } + } - if (props.dropdownMode === 'blank') - search(event, '', 'dropdown'); - else if (props.dropdownMode === 'current') - search(event, inputRef.current.value, 'dropdown'); + return ''; + }; - if (props.onDropdownClick) { - props.onDropdownClick({ - originalEvent: event, - query: inputRef.current.value - }); - } - } + const updateInputField = (value) => { + inputRef.current.value = formatValue(value); + }; - const removeItem = (event, index) => { - const removedValue = props.value[index]; - const newValue = props.value.filter((_, i) => (index !== i)); - updateModel(event, newValue); + const show = () => { + setOverlayVisibleState(true); + }; + + const hide = () => { + setOverlayVisibleState(false); + setSearchingState(false); + }; + + const onOverlayEnter = () => { + ZIndexUtils.set('overlay', overlayRef.current, PrimeReact.autoZIndex, PrimeReact.zIndex['overlay']); + alignOverlay(); + }; + + const onOverlayEntering = () => { + if (props.autoHighlight && props.suggestions && props.suggestions.length) { + const element = getScrollableElement().firstChild.firstChild; + DomHandler.addClass(element, 'p-highlight'); + } + }; - if (props.onUnselect) { - props.onUnselect({ + const onOverlayEntered = () => { + bindOverlayListener(); + props.onShow && props.onShow(); + }; + + const onOverlayExit = () => { + unbindOverlayListener(); + }; + + const onOverlayExited = () => { + ZIndexUtils.clear(overlayRef.current); + + props.onHide && props.onHide(); + }; + + const alignOverlay = () => { + const target = props.multiple ? multiContainerRef.current : inputRef.current; + DomHandler.alignOverlay(overlayRef.current, target, props.appendTo || PrimeReact.appendTo); + }; + + const onPanelClick = (event) => { + OverlayService.emit('overlay-click', { originalEvent: event, - value: removedValue + target: elementRef.current }); - } - } - - const onInputKeyDown = (event) => { - if (overlayVisibleState) { - let highlightItem = DomHandler.findSingle(overlayRef.current, 'li.p-highlight'); - - switch (event.which) { - //down - case 40: - if (highlightItem) { - let nextElement = findNextItem(highlightItem); - if (nextElement) { - DomHandler.addClass(nextElement, 'p-highlight'); - DomHandler.removeClass(highlightItem, 'p-highlight'); - DomHandler.scrollInView(getScrollableElement(), nextElement); - } - } - else { - highlightItem = DomHandler.findSingle(overlayRef.current, 'li'); - if (DomHandler.hasClass(highlightItem, 'p-autocomplete-item-group')) { - highlightItem = findNextItem(highlightItem); + }; + + const onDropdownClick = (event) => { + if (props.dropdownAutoFocus) { + DomHandler.focus(inputRef.current, props.dropdownAutoFocus); + } + + if (props.dropdownMode === 'blank') search(event, '', 'dropdown'); + else if (props.dropdownMode === 'current') search(event, inputRef.current.value, 'dropdown'); + + if (props.onDropdownClick) { + props.onDropdownClick({ + originalEvent: event, + query: inputRef.current.value + }); + } + }; + + const removeItem = (event, index) => { + const removedValue = props.value[index]; + const newValue = props.value.filter((_, i) => index !== i); + updateModel(event, newValue); + + if (props.onUnselect) { + props.onUnselect({ + originalEvent: event, + value: removedValue + }); + } + }; + + const onInputKeyDown = (event) => { + if (overlayVisibleState) { + let highlightItem = DomHandler.findSingle(overlayRef.current, 'li.p-highlight'); + + switch (event.which) { + //down + case 40: + if (highlightItem) { + let nextElement = findNextItem(highlightItem); + if (nextElement) { + DomHandler.addClass(nextElement, 'p-highlight'); + DomHandler.removeClass(highlightItem, 'p-highlight'); + DomHandler.scrollInView(getScrollableElement(), nextElement); + } + } else { + highlightItem = DomHandler.findSingle(overlayRef.current, 'li'); + if (DomHandler.hasClass(highlightItem, 'p-autocomplete-item-group')) { + highlightItem = findNextItem(highlightItem); + } + + if (highlightItem) { + DomHandler.addClass(highlightItem, 'p-highlight'); + } } + event.preventDefault(); + break; + + //up + case 38: if (highlightItem) { - DomHandler.addClass(highlightItem, 'p-highlight'); + let previousElement = findPrevItem(highlightItem); + if (previousElement) { + DomHandler.addClass(previousElement, 'p-highlight'); + DomHandler.removeClass(highlightItem, 'p-highlight'); + DomHandler.scrollInView(getScrollableElement(), previousElement); + } } - } - event.preventDefault(); - break; - - //up - case 38: - if (highlightItem) { - let previousElement = findPrevItem(highlightItem); - if (previousElement) { - DomHandler.addClass(previousElement, 'p-highlight'); - DomHandler.removeClass(highlightItem, 'p-highlight'); - DomHandler.scrollInView(getScrollableElement(), previousElement); + event.preventDefault(); + break; + + //enter + case 13: + if (highlightItem) { + selectHighlightItem(event, highlightItem); + hide(); + event.preventDefault(); } - } - event.preventDefault(); - break; + break; - //enter - case 13: - if (highlightItem) { - selectHighlightItem(event, highlightItem); + //escape + case 27: hide(); event.preventDefault(); - } - - break; + break; - //escape - case 27: - hide(); - event.preventDefault(); - break; - - //tab - case 9: - if (highlightItem) { - selectHighlightItem(event, highlightItem); - } + //tab + case 9: + if (highlightItem) { + selectHighlightItem(event, highlightItem); + } - hide(); - break; + hide(); + break; - default: - break; + default: + break; + } } - } - - if (props.multiple) { - switch (event.which) { - //backspace - case 8: - if (props.value && props.value.length && !inputRef.current.value) { - const removedValue = props.value[props.value.length - 1]; - const newValue = props.value.slice(0, -1); - - updateModel(event, newValue); - - if (props.onUnselect) { - props.onUnselect({ - originalEvent: event, - value: removedValue - }) + + if (props.multiple) { + switch (event.which) { + //backspace + case 8: + if (props.value && props.value.length && !inputRef.current.value) { + const removedValue = props.value[props.value.length - 1]; + const newValue = props.value.slice(0, -1); + + updateModel(event, newValue); + + if (props.onUnselect) { + props.onUnselect({ + originalEvent: event, + value: removedValue + }); + } } - } - break; + break; - default: - break; + default: + break; + } } - } - } - - const selectHighlightItem = (event, item) => { - if (props.optionGroupLabel) { - const optionGroup = props.suggestions[item.dataset.group]; - selectItem(event, getOptionGroupChildren(optionGroup)[item.dataset.index]); - } - else { - selectItem(event, props.suggestions[DomHandler.index(item)]); - } - } - - const findNextItem = (item) => { - const nextItem = item.nextElementSibling; - - return nextItem ? (DomHandler.hasClass(nextItem, 'p-autocomplete-item-group') ? findNextItem(nextItem) : nextItem) : null; - } - - const findPrevItem = (item) => { - let prevItem = item.previousElementSibling; - - return prevItem ? (DomHandler.hasClass(prevItem, 'p-autocomplete-item-group') ? findPrevItem(prevItem) : prevItem) : null; - } - - const onInputFocus = (event) => { - setFocusedState(true); - props.onFocus && props.onFocus(event); - } - - const forceItemSelection = (event) => { - const inputValue = event.target.value.trim(); - const item = (props.suggestions || []).find(it => { - const value = props.field ? ObjectUtils.resolveFieldData(it, props.field) : it; - return value && inputValue === value.trim(); - }); + }; + + const selectHighlightItem = (event, item) => { + if (props.optionGroupLabel) { + const optionGroup = props.suggestions[item.dataset.group]; + selectItem(event, getOptionGroupChildren(optionGroup)[item.dataset.index]); + } else { + selectItem(event, props.suggestions[DomHandler.index(item)]); + } + }; - if (item) { - selectItem(event, item, true); - } - else { - inputRef.current.value = ''; - updateModel(event, null); + const findNextItem = (item) => { + const nextItem = item.nextElementSibling; - props.onClear && props.onClear(event); - } - } + return nextItem ? (DomHandler.hasClass(nextItem, 'p-autocomplete-item-group') ? findNextItem(nextItem) : nextItem) : null; + }; - const onInputBlur = (event) => { - setFocusedState(false); + const findPrevItem = (item) => { + let prevItem = item.previousElementSibling; - if (props.forceSelection) { - forceItemSelection(event); - } + return prevItem ? (DomHandler.hasClass(prevItem, 'p-autocomplete-item-group') ? findPrevItem(prevItem) : prevItem) : null; + }; - props.onBlur && props.onBlur(event); - } + const onInputFocus = (event) => { + setFocusedState(true); + props.onFocus && props.onFocus(event); + }; - const onMultiContainerClick = (event) => { - DomHandler.focus(inputRef.current); + const forceItemSelection = (event) => { + const inputValue = event.target.value.trim(); + const item = (props.suggestions || []).find((it) => { + const value = props.field ? ObjectUtils.resolveFieldData(it, props.field) : it; + return value && inputValue === value.trim(); + }); + + if (item) { + selectItem(event, item, true); + } else { + inputRef.current.value = ''; + updateModel(event, null); - props.onClick && props.onClick(event); - } + props.onClear && props.onClear(event); + } + }; - const onMultiInputFocus = (event) => { - onInputFocus(event); - DomHandler.addClass(multiContainerRef.current, 'p-focus'); - } + const onInputBlur = (event) => { + setFocusedState(false); - const onMultiInputBlur = (event) => { - onInputBlur(event); - DomHandler.removeClass(multiContainerRef.current, 'p-focus'); - } + if (props.forceSelection) { + forceItemSelection(event); + } - const isSelected = (val) => { - return props.value ? props.value.some(v => ObjectUtils.equals(v, val)) : false; - } + props.onBlur && props.onBlur(event); + }; - const findOptionIndex = (option) => { - return props.suggestions ? props.suggestions.findIndex(s => ObjectUtils.equals(s, option)) : -1; - } + const onMultiContainerClick = (event) => { + DomHandler.focus(inputRef.current); - const getScrollableElement = () => { - return virtualScrollerRef.current ? overlayRef.current.firstChild : overlayRef.current; - } + props.onClick && props.onClick(event); + }; - const getOptionGroupLabel = (optionGroup) => { - return props.optionGroupLabel ? ObjectUtils.resolveFieldData(optionGroup, props.optionGroupLabel) : optionGroup; - } + const onMultiInputFocus = (event) => { + onInputFocus(event); + DomHandler.addClass(multiContainerRef.current, 'p-focus'); + }; - const getOptionGroupChildren = (optionGroup) => { - return ObjectUtils.resolveFieldData(optionGroup, props.optionGroupChildren); - } + const onMultiInputBlur = (event) => { + onInputBlur(event); + DomHandler.removeClass(multiContainerRef.current, 'p-focus'); + }; - React.useEffect(() => { - ObjectUtils.combinedRefs(inputRef, props.inputRef); - }, [inputRef, props.inputRef]); + const isSelected = (val) => { + return props.value ? props.value.some((v) => ObjectUtils.equals(v, val)) : false; + }; - useMountEffect(() => { - if (!idState) { - setIdState(UniqueComponentId()); - } + const findOptionIndex = (option) => { + return props.suggestions ? props.suggestions.findIndex((s) => ObjectUtils.equals(s, option)) : -1; + }; - if (props.autoFocus) { - DomHandler.focus(inputRef.current, props.autoFocus); - } - }); + const getScrollableElement = () => { + return virtualScrollerRef.current ? overlayRef.current.firstChild : overlayRef.current; + }; - useUpdateEffect(() => { - if (searchingState) { - ObjectUtils.isNotEmpty(props.suggestions) ? show() : hide(); - setSearchingState(false); - } - }, [props.suggestions]); - - useUpdateEffect(() => { - if (inputRef.current && !props.multiple) { - updateInputField(props.value); - } - }); - - useUnmountEffect(() => { - if (timeout.current) { - clearTimeout(timeout.current); - } - - ZIndexUtils.clear(overlayRef.current); - }); - - React.useImperativeHandle(ref, () => ({ - props, - search, - getElement: () => elementRef.current, - getOverlay: () => overlayRef.current, - getInput: () => inputRef.current, - getVirtualScroller: () => virtualScrollerRef.current - })); - - const createSimpleAutoComplete = () => { - const value = formatValue(props.value); - const ariaControls = overlayVisibleState ? idState + '_list' : null; - const className = classNames('p-autocomplete-input', props.inputClassName, { - 'p-autocomplete-dd-input': props.dropdown + const getOptionGroupLabel = (optionGroup) => { + return props.optionGroupLabel ? ObjectUtils.resolveFieldData(optionGroup, props.optionGroupLabel) : optionGroup; + }; + + const getOptionGroupChildren = (optionGroup) => { + return ObjectUtils.resolveFieldData(optionGroup, props.optionGroupChildren); + }; + + React.useEffect(() => { + ObjectUtils.combinedRefs(inputRef, props.inputRef); + }, [inputRef, props.inputRef]); + + useMountEffect(() => { + if (!idState) { + setIdState(UniqueComponentId()); + } + + if (props.autoFocus) { + DomHandler.focus(inputRef.current, props.autoFocus); + } }); - return ( - - ) - } - - const createChips = () => { - if (ObjectUtils.isNotEmpty(props.value)) { - return props.value.map((val, index) => { - const key = index + 'multi-item'; - return ( -
  • - {formatValue(val)} - {!props.disabled && IconUtils.getJSXIcon(props.removeIcon, { className: 'p-autocomplete-token-icon', onClick: (e) => removeItem(e, index) }, { props })} -
  • - ) - }) - } - - return null; - } - - const createMultiInput = () => { - const ariaControls = overlayVisibleState ? idState + '_list' : null; + useUpdateEffect(() => { + if (searchingState) { + ObjectUtils.isNotEmpty(props.suggestions) ? show() : hide(); + setSearchingState(false); + } + }, [props.suggestions]); - return ( -
  • - -
  • - ) - } - - const createMultipleAutoComplete = () => { - const className = classNames('p-autocomplete-multiple-container p-component p-inputtext', { - 'p-disabled': props.disabled + useUpdateEffect(() => { + if (inputRef.current && !props.multiple) { + updateInputField(props.value); + } }); - const tokens = createChips(); - const input = createMultiInput(); + + useUnmountEffect(() => { + if (timeout.current) { + clearTimeout(timeout.current); + } + + ZIndexUtils.clear(overlayRef.current); + }); + + React.useImperativeHandle(ref, () => ({ + props, + search, + getElement: () => elementRef.current, + getOverlay: () => overlayRef.current, + getInput: () => inputRef.current, + getVirtualScroller: () => virtualScrollerRef.current + })); + + const createSimpleAutoComplete = () => { + const value = formatValue(props.value); + const ariaControls = overlayVisibleState ? idState + '_list' : null; + const className = classNames('p-autocomplete-input', props.inputClassName, { + 'p-autocomplete-dd-input': props.dropdown + }); + + return ( + + ); + }; + + const createChips = () => { + if (ObjectUtils.isNotEmpty(props.value)) { + return props.value.map((val, index) => { + const key = index + 'multi-item'; + return ( +
  • + {formatValue(val)} + {!props.disabled && IconUtils.getJSXIcon(props.removeIcon, { className: 'p-autocomplete-token-icon', onClick: (e) => removeItem(e, index) }, { props })} +
  • + ); + }); + } + + return null; + }; + + const createMultiInput = () => { + const ariaControls = overlayVisibleState ? idState + '_list' : null; + + return ( +
  • + +
  • + ); + }; + + const createMultipleAutoComplete = () => { + const className = classNames('p-autocomplete-multiple-container p-component p-inputtext', { + 'p-disabled': props.disabled + }); + const tokens = createChips(); + const input = createMultiInput(); + + return ( +
      + {tokens} + {input} +
    + ); + }; + + const createDropdown = () => { + if (props.dropdown) { + return
    - ) + ); }); Avatar.displayName = 'Avatar'; @@ -55,4 +57,4 @@ Avatar.defaultProps = { template: null, imageAlt: 'avatar', onImageError: null -} +}; diff --git a/components/lib/avatar/avatar.d.ts b/components/lib/avatar/avatar.d.ts index ead9dca3f8..1ab254ab92 100644 --- a/components/lib/avatar/avatar.d.ts +++ b/components/lib/avatar/avatar.d.ts @@ -20,6 +20,6 @@ export interface AvatarProps extends Omit { +export declare class Avatar extends React.Component { public getElement(): HTMLDivElement; } diff --git a/components/lib/avatargroup/AvatarGroup.js b/components/lib/avatargroup/AvatarGroup.js index b75e6c038f..74039e7d89 100644 --- a/components/lib/avatargroup/AvatarGroup.js +++ b/components/lib/avatargroup/AvatarGroup.js @@ -15,7 +15,7 @@ export const AvatarGroup = React.forwardRef((props, ref) => {
    {props.children}
    - ) + ); }); AvatarGroup.displayName = 'AvatarGroup'; @@ -23,4 +23,4 @@ AvatarGroup.defaultProps = { __TYPE: 'AvatarGroup', style: null, className: null -} +}; diff --git a/components/lib/avatargroup/avatargroup.d.ts b/components/lib/avatargroup/avatargroup.d.ts index 7bf1b26767..89773edaef 100644 --- a/components/lib/avatargroup/avatargroup.d.ts +++ b/components/lib/avatargroup/avatargroup.d.ts @@ -4,6 +4,6 @@ export interface AvatarGroupProps extends Omit { +export declare class AvatarGroup extends React.Component { public getElement(): HTMLDivElement; } diff --git a/components/lib/badge/Badge.js b/components/lib/badge/Badge.js index 9cbfaee1de..eeb525e590 100644 --- a/components/lib/badge/Badge.js +++ b/components/lib/badge/Badge.js @@ -1,28 +1,34 @@ import * as React from 'react'; import { classNames, ObjectUtils } from '../utils/Utils'; -export const Badge = React.memo(React.forwardRef((props, ref) => { - const elementRef = React.useRef(null); - const otherProps = ObjectUtils.findDiffKeys(props, Badge.defaultProps); - const className = classNames('p-badge p-component', { - 'p-badge-no-gutter': ObjectUtils.isNotEmpty(props.value) && String(props.value).length === 1, - 'p-badge-dot': ObjectUtils.isEmpty(props.value), - 'p-badge-lg': props.size === 'large', - 'p-badge-xl': props.size === 'xlarge', - [`p-badge-${props.severity}`]: props.severity !== null - }, props.className); +export const Badge = React.memo( + React.forwardRef((props, ref) => { + const elementRef = React.useRef(null); + const otherProps = ObjectUtils.findDiffKeys(props, Badge.defaultProps); + const className = classNames( + 'p-badge p-component', + { + 'p-badge-no-gutter': ObjectUtils.isNotEmpty(props.value) && String(props.value).length === 1, + 'p-badge-dot': ObjectUtils.isEmpty(props.value), + 'p-badge-lg': props.size === 'large', + 'p-badge-xl': props.size === 'xlarge', + [`p-badge-${props.severity}`]: props.severity !== null + }, + props.className + ); - React.useImperativeHandle(ref, () => ({ - props, - getElement: () => elementRef.current - })); + React.useImperativeHandle(ref, () => ({ + props, + getElement: () => elementRef.current + })); - return ( - - {props.value} - - ) -})); + return ( + + {props.value} + + ); + }) +); Badge.displayName = 'Badge'; Badge.defaultProps = { @@ -32,4 +38,4 @@ Badge.defaultProps = { size: null, style: null, className: null -} +}; diff --git a/components/lib/badge/badge.d.ts b/components/lib/badge/badge.d.ts index a4ff0d4e05..204d2da345 100644 --- a/components/lib/badge/badge.d.ts +++ b/components/lib/badge/badge.d.ts @@ -13,4 +13,4 @@ export interface BadgeProps extends Omit { public getElement(): HTMLSpanElement; - } +} diff --git a/components/lib/blockui/BlockUI.js b/components/lib/blockui/BlockUI.js index eb0a2a3e8c..be2a47f48e 100644 --- a/components/lib/blockui/BlockUI.js +++ b/components/lib/blockui/BlockUI.js @@ -11,7 +11,7 @@ export const BlockUI = React.forwardRef((props, ref) => { const block = () => { setVisibleState(true); - } + }; const unblock = () => { const callback = () => { @@ -19,7 +19,7 @@ export const BlockUI = React.forwardRef((props, ref) => { props.fullScreen && DomHandler.removeClass(document.body, 'p-overflow-hidden'); props.onUnblocked && props.onUnblocked(); - } + }; if (maskRef.current) { DomHandler.addClass(maskRef.current, 'p-component-overlay-leave'); @@ -27,11 +27,10 @@ export const BlockUI = React.forwardRef((props, ref) => { ZIndexUtils.clear(maskRef.current); callback(); }); - } - else { + } else { callback(); } - } + }; const onPortalMounted = () => { if (props.fullScreen) { @@ -45,7 +44,7 @@ export const BlockUI = React.forwardRef((props, ref) => { } props.onBlocked && props.onBlocked(); - } + }; useMountEffect(() => { visibleState && block(); @@ -73,9 +72,13 @@ export const BlockUI = React.forwardRef((props, ref) => { const createMask = () => { if (visibleState) { const appendTo = props.fullScreen ? document.body : 'self'; - const className = classNames('p-blockui p-component-overlay p-component-overlay-enter', { - 'p-blockui-document': props.fullScreen - }, props.className); + const className = classNames( + 'p-blockui p-component-overlay p-component-overlay-enter', + { + 'p-blockui-document': props.fullScreen + }, + props.className + ); const content = props.template ? ObjectUtils.getJSXElement(props.template, props) : null; const mask = (
    @@ -83,11 +86,11 @@ export const BlockUI = React.forwardRef((props, ref) => {
    ); - return + return ; } return null; - } + }; const otherProps = ObjectUtils.findDiffKeys(props, BlockUI.defaultProps); const mask = createMask(); @@ -97,7 +100,7 @@ export const BlockUI = React.forwardRef((props, ref) => { {props.children} {mask}
    - ) + ); }); BlockUI.displayName = 'BlockUI'; @@ -113,4 +116,4 @@ BlockUI.defaultProps = { template: null, onBlocked: null, onUnblocked: null -} +}; diff --git a/components/lib/breadcrumb/BreadCrumb.js b/components/lib/breadcrumb/BreadCrumb.js index 4f1617590c..53696a04a3 100644 --- a/components/lib/breadcrumb/BreadCrumb.js +++ b/components/lib/breadcrumb/BreadCrumb.js @@ -1,137 +1,139 @@ import * as React from 'react'; import { classNames, IconUtils, ObjectUtils } from '../utils/Utils'; -export const BreadCrumb = React.memo(React.forwardRef((props, ref) => { - const elementRef = React.useRef(null); - - const itemClick = (event, item) => { - if (item.disabled) { - event.preventDefault(); - return; - } - - if (!item.url) { - event.preventDefault(); - } - - if (item.command) { - item.command({ - originalEvent: event, - item - }); - } - } - - const createHome = () => { - const home = props.home; - - if (home) { - const { icon: _icon, target, url, disabled, style, className: _className, template } = home; - const className = classNames('p-breadcrumb-home', { 'p-disabled': disabled }, _className); - const icon = IconUtils.getJSXIcon(_icon, { className: 'p-menuitem-icon' }, { props }); +export const BreadCrumb = React.memo( + React.forwardRef((props, ref) => { + const elementRef = React.useRef(null); + + const itemClick = (event, item) => { + if (item.disabled) { + event.preventDefault(); + return; + } + + if (!item.url) { + event.preventDefault(); + } + + if (item.command) { + item.command({ + originalEvent: event, + item + }); + } + }; + + const createHome = () => { + const home = props.home; + + if (home) { + const { icon: _icon, target, url, disabled, style, className: _className, template } = home; + const className = classNames('p-breadcrumb-home', { 'p-disabled': disabled }, _className); + const icon = IconUtils.getJSXIcon(_icon, { className: 'p-menuitem-icon' }, { props }); + + let content = ( + itemClick(event, home)}> + {icon} + + ); + + if (template) { + const defaultContentOptions = { + onClick: (event) => itemClick(event, home), + className: 'p-menuitem-link', + labelClassName: 'p-menuitem-text', + element: content, + props + }; + + content = ObjectUtils.getJSXElement(template, home, defaultContentOptions); + } + + return ( +
  • + {content} +
  • + ); + } + + return null; + }; + const createSeparator = () => { + return
  • ; + }; + + const createMenuitem = (item) => { + const className = classNames(item.className, { 'p-disabled': item.disabled }); + const label = item.label && {item.label}; let content = ( - itemClick(event, home)}> - {icon} + itemClick(event, item)} aria-disabled={item.disabled}> + {label} - ) + ); - if (template) { + if (item.template) { const defaultContentOptions = { - onClick: (event) => itemClick(event, home), + onClick: (event) => itemClick(event, item), className: 'p-menuitem-link', labelClassName: 'p-menuitem-text', element: content, props }; - content = ObjectUtils.getJSXElement(template, home, defaultContentOptions); + content = ObjectUtils.getJSXElement(item.template, item, defaultContentOptions); } return ( -
  • +
  • {content}
  • - ) - } - - return null; - } - - const createSeparator = () => { - return
  • - } - - const createMenuitem = (item) => { - const className = classNames(item.className, { 'p-disabled': item.disabled }); - const label = item.label && {item.label}; - let content = ( - itemClick(event, item)} aria-disabled={item.disabled}> - {label} - - ); - - if (item.template) { - const defaultContentOptions = { - onClick: (event) => itemClick(event, item), - className: 'p-menuitem-link', - labelClassName: 'p-menuitem-text', - element: content, - props + ); + }; + + const createMenuitems = () => { + if (props.model) { + const items = props.model.map((item, index) => { + const menuitem = createMenuitem(item); + const separator = index === props.model.length - 1 ? null : createSeparator(); + const key = item.label + '_' + index; + + return ( + + {menuitem} + {separator} + + ); + }); + + return items; } - content = ObjectUtils.getJSXElement(item.template, item, defaultContentOptions); - } + return null; + }; - return ( -
  • - {content} -
  • - ) - } - - const createMenuitems = () => { - if (props.model) { - const items = props.model.map((item, index) => { - const menuitem = createMenuitem(item); - const separator = (index === props.model.length - 1) ? null : createSeparator(); - const key = item.label + '_' + index; + React.useImperativeHandle(ref, () => ({ + props, + getElement: () => elementRef.current + })); - return ( - - {menuitem} - {separator} - - ) - }); - - return items; - } - - return null; - } - - React.useImperativeHandle(ref, () => ({ - props, - getElement: () => elementRef.current - })); - - const otherProps = ObjectUtils.findDiffKeys(props, BreadCrumb.defaultProps); - const className = classNames('p-breadcrumb p-component', props.className); - const home = createHome(); - const items = createMenuitems(); - const separator = createSeparator(); - - return ( - - ) -})); + const otherProps = ObjectUtils.findDiffKeys(props, BreadCrumb.defaultProps); + const className = classNames('p-breadcrumb p-component', props.className); + const home = createHome(); + const items = createMenuitems(); + const separator = createSeparator(); + + return ( + + ); + }) +); BreadCrumb.displayName = 'BreadCrumb'; BreadCrumb.defaultProps = { @@ -141,4 +143,4 @@ BreadCrumb.defaultProps = { home: null, style: null, className: null -} +}; diff --git a/components/lib/breadcrumb/breadcrumb.d.ts b/components/lib/breadcrumb/breadcrumb.d.ts index b1f446ef53..8737312cfc 100644 --- a/components/lib/breadcrumb/breadcrumb.d.ts +++ b/components/lib/breadcrumb/breadcrumb.d.ts @@ -7,6 +7,6 @@ export interface BreadCrumbProps extends Omit { +export declare class BreadCrumb extends React.Component { public getElement(): HTMLElement; } diff --git a/components/lib/button/Button.js b/components/lib/button/Button.js index 1ef9947809..c12ef1a224 100644 --- a/components/lib/button/Button.js +++ b/components/lib/button/Button.js @@ -3,71 +3,73 @@ import { Ripple } from '../ripple/Ripple'; import { Tooltip } from '../tooltip/Tooltip'; import { classNames, IconUtils, ObjectUtils } from '../utils/Utils'; -export const Button = React.memo(React.forwardRef((props, ref) => { - const elementRef = React.useRef(ref); +export const Button = React.memo( + React.forwardRef((props, ref) => { + const elementRef = React.useRef(ref); - React.useEffect(() => { - ObjectUtils.combinedRefs(elementRef, ref); - }, [elementRef, ref]); + React.useEffect(() => { + ObjectUtils.combinedRefs(elementRef, ref); + }, [elementRef, ref]); - const createIcon = () => { - const icon = props.loading ? props.loadingIcon : props.icon; - const className = classNames('p-button-icon p-c', { - 'p-button-loading-icon': props.loading, - [`p-button-icon-${props.iconPos}`]: props.label - }); + const createIcon = () => { + const icon = props.loading ? props.loadingIcon : props.icon; + const className = classNames('p-button-icon p-c', { + 'p-button-loading-icon': props.loading, + [`p-button-icon-${props.iconPos}`]: props.label + }); - return IconUtils.getJSXIcon(icon, { className }, { props }); - } + return IconUtils.getJSXIcon(icon, { className }, { props }); + }; - const createLabel = () => { - if (props.label) { - return {props.label} - } + const createLabel = () => { + if (props.label) { + return {props.label}; + } - return !props.children && !props.label && - } + return !props.children && !props.label && ; + }; - const createBadge = () => { - if (props.badge) { - const badgeClassName = classNames('p-badge', props.badgeClassName); + const createBadge = () => { + if (props.badge) { + const badgeClassName = classNames('p-badge', props.badgeClassName); - return {props.badge} - } + return {props.badge}; + } - return null; - } + return null; + }; - const hasTooltip = ObjectUtils.isNotEmpty(props.tooltip); - const disabled = props.disabled || props.loading; - const otherProps = ObjectUtils.findDiffKeys(props, Button.defaultProps); - const className = classNames('p-button p-component', props.className, { - 'p-button-icon-only': (props.icon || (props.loading && props.loadingIcon)) && !props.label, - 'p-button-vertical': (props.iconPos === 'top' || props.iconPos === 'bottom') && props.label, - 'p-disabled': disabled, - 'p-button-loading': props.loading, - 'p-button-loading-label-only': props.loading && !props.icon && props.label, - [`p-button-loading-${props.iconPos}`]: props.loading && props.loadingIcon && props.label - }); + const hasTooltip = ObjectUtils.isNotEmpty(props.tooltip); + const disabled = props.disabled || props.loading; + const otherProps = ObjectUtils.findDiffKeys(props, Button.defaultProps); + const className = classNames('p-button p-component', props.className, { + 'p-button-icon-only': (props.icon || (props.loading && props.loadingIcon)) && !props.label, + 'p-button-vertical': (props.iconPos === 'top' || props.iconPos === 'bottom') && props.label, + 'p-disabled': disabled, + 'p-button-loading': props.loading, + 'p-button-loading-label-only': props.loading && !props.icon && props.label, + [`p-button-loading-${props.iconPos}`]: props.loading && props.loadingIcon && props.label + }); - const icon = createIcon(); - const label = createLabel(); - const badge = createBadge(); - const defaultAriaLabel = (props.label ? props.label + (props.badge ? ' ' + props.badge : '') : props['aria-label']); + const icon = createIcon(); + const label = createLabel(); + const badge = createBadge(); + const defaultAriaLabel = props.label ? props.label + (props.badge ? ' ' + props.badge : '') : props['aria-label']; - return ( - <> - - {hasTooltip && } - - ) -})); + return ( + <> + + {hasTooltip && } + + ); + }) +); Button.displayName = 'Button'; Button.defaultProps = { @@ -82,4 +84,4 @@ Button.defaultProps = { disabled: false, loading: false, loadingIcon: 'pi pi-spinner pi-spin' -} +}; diff --git a/components/lib/button/button.d.ts b/components/lib/button/button.d.ts index 81a6020fda..5586aff043 100644 --- a/components/lib/button/button.d.ts +++ b/components/lib/button/button.d.ts @@ -4,7 +4,7 @@ import { IconType } from '../utils'; type ButtonPositionType = 'top' | 'bottom' | 'left' | 'right'; -export interface ButtonProps extends Omit, HTMLButtonElement>, 'disabled'|'ref'> { +export interface ButtonProps extends Omit, HTMLButtonElement>, 'disabled' | 'ref'> { label?: string; icon?: IconType; iconPos?: ButtonPositionType; @@ -18,6 +18,6 @@ export interface ButtonProps extends Omit { +export declare class Button extends React.Component { public getElement(): HTMLButtonElement; } diff --git a/components/lib/calendar/Calendar.js b/components/lib/calendar/Calendar.js index bc0db37a6c..9000885bf6 100644 --- a/components/lib/calendar/Calendar.js +++ b/components/lib/calendar/Calendar.js @@ -8,3152 +8,3112 @@ import { DomHandler, ObjectUtils, classNames, mask, ZIndexUtils, UniqueComponent import { Ripple } from '../ripple/Ripple'; import { CalendarPanel } from './CalendarPanel'; -export const Calendar = React.memo(React.forwardRef((props, ref) => { - const [focusedState, setFocusedState] = React.useState(false); - const [overlayVisibleState, setOverlayVisibleState] = React.useState(false); - const [viewDateState, setViewDateState] = React.useState(null); - const elementRef = React.useRef(null); - const overlayRef = React.useRef(null); - const inputRef = React.useRef(props.inputRef); - const navigation = React.useRef(null); - const ignoreFocusFunctionality = React.useRef(false); - const isKeydown = React.useRef(false); - const timePickerTimer = React.useRef(null); - const viewStateChanged = React.useRef(false); - const touchUIMask = React.useRef(null); - const overlayEventListener = React.useRef(null); - const touchUIMaskClickListener = React.useRef(null); - const isOverlayClicked = React.useRef(false); - const ignoreMaskChange = React.useRef(false); - - const [currentView, setCurrentView] = React.useState('date') - const [currentMonth, setCurrentMonth] = React.useState(null); - const [currentYear, setCurrentYear] = React.useState(null); - const [yearOptions, setYearOptions] = React.useState([]); - - const previousValue = usePrevious(props.value); - const visible = props.inline || (props.onVisibleChange ? props.visible : overlayVisibleState); - const attributeSelector = UniqueComponentId(); - - const [bindOverlayListener, unbindOverlayListener] = useOverlayListener({ - target: elementRef, overlay: overlayRef, listener: (event, { type, valid }) => { - if (valid) { - (type === 'outside') ? - (!isOverlayClicked.current && !isNavIconClicked(event.target)) && hide('outside') : hide(); - } - - isOverlayClicked.current = false; - }, when: !(props.touchUI || props.inline) && visible - }); - - const getDateFormat = () => { - return props.dateFormat || localeOption('dateFormat', props.locale); - } - - const onInputFocus = (event) => { - if (ignoreFocusFunctionality.current) { - setFocusedState(true); - ignoreFocusFunctionality.current = false; - } - else { - if (props.showOnFocus && !visible) { - show(); - } - - setFocusedState(true); - props.onFocus && props.onFocus(event); - } - } - - const onInputBlur = (event) => { - setFocusedState(false); - !props.keepInvalid && updateInputfield(props.value); - props.onBlur && props.onBlur(event); - } - - const onInputKeyDown = (event) => { - isKeydown.current = true; - - switch (event.which) { - //escape - case 27: { - hide(); - break; - } - - //tab - case 9: { - visible && trapFocus(event); - props.touchUI && disableModality(); - break; - } - - default: - //no op - break; - } - } - - const onUserInput = (event) => { - // IE 11 Workaround for input placeholder - if (!isKeydown.current) { - return; - } - isKeydown.current = false; - - updateValueOnInput(event, event.target.value); - props.onInput && props.onInput(event); - } - - const updateValueOnInput = (event, rawValue) => { - try { - const value = parseValueFromString(rawValue); - if (isValidSelection(value)) { - updateModel(event, value); - updateViewDate(event, value.length ? value[0] : value); - } - } - catch (err) { - //invalid date - const value = props.keepInvalid ? rawValue : null; - updateModel(event, value); - } - } - - const reFocusInputField = () => { - if (!props.inline && inputRef.current) { - ignoreFocusFunctionality.current = true; - DomHandler.focus(inputRef.current); - } - } - - const isValidSelection = (value) => { - let isValid = true; - if (isSingleSelection()) { - if (!(isSelectable(value.getDate(), value.getMonth(), value.getFullYear(), false) && isSelectableTime(value))) { - isValid = false; - } - } - else if (value.every(v => (isSelectable(v.getDate(), v.getMonth(), v.getFullYear(), false) && isSelectableTime(v)))) { - if (isRangeSelection()) { - isValid = value.length > 1 && value[1] > value[0] ? true : false; - } - } - - return isValid; - } - - const onButtonClick = () => { - visible ? hide() : show(); - } - - const onPrevButtonClick = (event) => { - navigation.current = { backward: true, button: true }; - navBackward(event); - } - - const onNextButtonClick = (event) => { - navigation.current = { backward: false, button: true }; - navForward(event); - } - - const onContainerButtonKeydown = (event) => { - switch (event.which) { - //tab - case 9: - trapFocus(event); - break; - - //escape - case 27: - hide(null, reFocusInputField); - event.preventDefault(); - break; +export const Calendar = React.memo( + React.forwardRef((props, ref) => { + const [focusedState, setFocusedState] = React.useState(false); + const [overlayVisibleState, setOverlayVisibleState] = React.useState(false); + const [viewDateState, setViewDateState] = React.useState(null); + const elementRef = React.useRef(null); + const overlayRef = React.useRef(null); + const inputRef = React.useRef(props.inputRef); + const navigation = React.useRef(null); + const ignoreFocusFunctionality = React.useRef(false); + const isKeydown = React.useRef(false); + const timePickerTimer = React.useRef(null); + const viewStateChanged = React.useRef(false); + const touchUIMask = React.useRef(null); + const overlayEventListener = React.useRef(null); + const touchUIMaskClickListener = React.useRef(null); + const isOverlayClicked = React.useRef(false); + const ignoreMaskChange = React.useRef(false); + + const [currentView, setCurrentView] = React.useState('date'); + const [currentMonth, setCurrentMonth] = React.useState(null); + const [currentYear, setCurrentYear] = React.useState(null); + const [yearOptions, setYearOptions] = React.useState([]); + + const previousValue = usePrevious(props.value); + const visible = props.inline || (props.onVisibleChange ? props.visible : overlayVisibleState); + const attributeSelector = UniqueComponentId(); + + const [bindOverlayListener, unbindOverlayListener] = useOverlayListener({ + target: elementRef, + overlay: overlayRef, + listener: (event, { type, valid }) => { + if (valid) { + type === 'outside' ? !isOverlayClicked.current && !isNavIconClicked(event.target) && hide('outside') : hide(); + } + + isOverlayClicked.current = false; + }, + when: !(props.touchUI || props.inline) && visible + }); - default: - //Noop - break; - } - } + const getDateFormat = () => { + return props.dateFormat || localeOption('dateFormat', props.locale); + }; - const trapFocus = (event) => { - event.preventDefault(); - const focusableElements = DomHandler.getFocusableElements(overlayRef.current); + const onInputFocus = (event) => { + if (ignoreFocusFunctionality.current) { + setFocusedState(true); + ignoreFocusFunctionality.current = false; + } else { + if (props.showOnFocus && !visible) { + show(); + } - if (focusableElements && focusableElements.length > 0) { - if (!document.activeElement) { - focusableElements[0].focus(); + setFocusedState(true); + props.onFocus && props.onFocus(event); } - else { - const focusedIndex = focusableElements.indexOf(document.activeElement); + }; - if (event.shiftKey) { - if (focusedIndex === -1 || focusedIndex === 0) - focusableElements[focusableElements.length - 1].focus(); - else - focusableElements[focusedIndex - 1].focus(); + const onInputBlur = (event) => { + setFocusedState(false); + !props.keepInvalid && updateInputfield(props.value); + props.onBlur && props.onBlur(event); + }; + + const onInputKeyDown = (event) => { + isKeydown.current = true; + + switch (event.which) { + //escape + case 27: { + hide(); + break; } - else { - if (focusedIndex === -1 || focusedIndex === (focusableElements.length - 1)) - focusableElements[0].focus(); - else - focusableElements[focusedIndex + 1].focus(); + + //tab + case 9: { + visible && trapFocus(event); + props.touchUI && disableModality(); + break; } + + default: + //no op + break; } - } - } + }; - const updateFocus = () => { - if (navigation.current) { - if (navigation.current.button) { - initFocusableCell(); + const onUserInput = (event) => { + // IE 11 Workaround for input placeholder + if (!isKeydown.current) { + return; + } + isKeydown.current = false; - if (navigation.current.backward) - DomHandler.findSingle(overlayRef.current, '.p-datepicker-prev').focus(); - else - DomHandler.findSingle(overlayRef.current, '.p-datepicker-next').focus(); - } - else { - let cell; - if (navigation.current.backward) { - let cells = DomHandler.find(overlayRef.current, '.p-datepicker-calendar td span:not(.p-disabled)'); - cell = cells[cells.length - 1]; - } - else { - cell = DomHandler.findSingle(overlayRef.current, '.p-datepicker-calendar td span:not(.p-disabled)'); - } - - if (cell) { - cell.tabIndex = '0'; - cell.focus(); - } - } - - navigation.current = null; - } - else { - initFocusableCell(); - } - } - - const initFocusableCell = () => { - let cell; - if (props.view === 'month') { - const cells = DomHandler.find(overlayRef.current, '.p-monthpicker .p-monthpicker-month'); - const selectedCell = DomHandler.findSingle(overlayRef.current, '.p-monthpicker .p-monthpicker-month.p-highlight'); - cells.forEach(cell => cell.tabIndex = -1); - cell = selectedCell || cells[0]; - } - else { - cell = DomHandler.findSingle(overlayRef.current, 'span.p-highlight'); - if (!cell) { - const todayCell = DomHandler.findSingle(overlayRef.current, 'td.p-datepicker-today span:not(.p-disabled)'); - cell = todayCell || DomHandler.findSingle(overlayRef.current, '.p-datepicker-calendar td span:not(.p-disabled)'); - } - } - - if (cell) { - cell.tabIndex = '0'; - } - } - - const navBackward = (event) => { - if (props.disabled) { - event.preventDefault(); - return; - } + updateValueOnInput(event, event.target.value); + props.onInput && props.onInput(event); + }; - let newViewDate = new Date(getViewDate().getTime()); - newViewDate.setDate(1); + const updateValueOnInput = (event, rawValue) => { + try { + const value = parseValueFromString(rawValue); + if (isValidSelection(value)) { + updateModel(event, value); + updateViewDate(event, value.length ? value[0] : value); + } + } catch (err) { + //invalid date + const value = props.keepInvalid ? rawValue : null; + updateModel(event, value); + } + }; - if (currentView === 'date') { - if (newViewDate.getMonth() === 0) { - newViewDate.setMonth(11); - newViewDate.setFullYear(decrementYear()); - setCurrentMonth(11); + const reFocusInputField = () => { + if (!props.inline && inputRef.current) { + ignoreFocusFunctionality.current = true; + DomHandler.focus(inputRef.current); } - else { - newViewDate.setMonth(newViewDate.getMonth() - 1); - setCurrentMonth(prevState => prevState - 1) + }; + + const isValidSelection = (value) => { + let isValid = true; + if (isSingleSelection()) { + if (!(isSelectable(value.getDate(), value.getMonth(), value.getFullYear(), false) && isSelectableTime(value))) { + isValid = false; + } + } else if (value.every((v) => isSelectable(v.getDate(), v.getMonth(), v.getFullYear(), false) && isSelectableTime(v))) { + if (isRangeSelection()) { + isValid = value.length > 1 && value[1] > value[0] ? true : false; + } } - } - else if (currentView === 'month') { - let newYear = newViewDate.getFullYear() - 1; - if (props.yearNavigator) { - const minYear = parseInt(props.yearRange.split(':')[0], 10); + return isValid; + }; + + const onButtonClick = () => { + visible ? hide() : show(); + }; + + const onPrevButtonClick = (event) => { + navigation.current = { backward: true, button: true }; + navBackward(event); + }; + + const onNextButtonClick = (event) => { + navigation.current = { backward: false, button: true }; + navForward(event); + }; + + const onContainerButtonKeydown = (event) => { + switch (event.which) { + //tab + case 9: + trapFocus(event); + break; + + //escape + case 27: + hide(null, reFocusInputField); + event.preventDefault(); + break; + + default: + //Noop + break; + } + }; + + const trapFocus = (event) => { + event.preventDefault(); + const focusableElements = DomHandler.getFocusableElements(overlayRef.current); + + if (focusableElements && focusableElements.length > 0) { + if (!document.activeElement) { + focusableElements[0].focus(); + } else { + const focusedIndex = focusableElements.indexOf(document.activeElement); - if (newYear < minYear) { - newYear = minYear; + if (event.shiftKey) { + if (focusedIndex === -1 || focusedIndex === 0) focusableElements[focusableElements.length - 1].focus(); + else focusableElements[focusedIndex - 1].focus(); + } else { + if (focusedIndex === -1 || focusedIndex === focusableElements.length - 1) focusableElements[0].focus(); + else focusableElements[focusedIndex + 1].focus(); + } } } + }; - newViewDate.setFullYear(newYear); - } + const updateFocus = () => { + if (navigation.current) { + if (navigation.current.button) { + initFocusableCell(); - if (currentView === 'month') { - newViewDate.setFullYear(decrementYear()); - } - else if (currentView === 'year') { - newViewDate.setFullYear(decrementDecade()); - } + if (navigation.current.backward) DomHandler.findSingle(overlayRef.current, '.p-datepicker-prev').focus(); + else DomHandler.findSingle(overlayRef.current, '.p-datepicker-next').focus(); + } else { + let cell; + if (navigation.current.backward) { + let cells = DomHandler.find(overlayRef.current, '.p-datepicker-calendar td span:not(.p-disabled)'); + cell = cells[cells.length - 1]; + } else { + cell = DomHandler.findSingle(overlayRef.current, '.p-datepicker-calendar td span:not(.p-disabled)'); + } - updateViewDate(event, newViewDate); + if (cell) { + cell.tabIndex = '0'; + cell.focus(); + } + } - event.preventDefault(); - } + navigation.current = null; + } else { + initFocusableCell(); + } + }; - const navForward = (event) => { - if (props.disabled) { - event.preventDefault(); - return; - } + const initFocusableCell = () => { + let cell; + if (props.view === 'month') { + const cells = DomHandler.find(overlayRef.current, '.p-monthpicker .p-monthpicker-month'); + const selectedCell = DomHandler.findSingle(overlayRef.current, '.p-monthpicker .p-monthpicker-month.p-highlight'); + cells.forEach((cell) => (cell.tabIndex = -1)); + cell = selectedCell || cells[0]; + } else { + cell = DomHandler.findSingle(overlayRef.current, 'span.p-highlight'); + if (!cell) { + const todayCell = DomHandler.findSingle(overlayRef.current, 'td.p-datepicker-today span:not(.p-disabled)'); + cell = todayCell || DomHandler.findSingle(overlayRef.current, '.p-datepicker-calendar td span:not(.p-disabled)'); + } + } - let newViewDate = new Date(getViewDate().getTime()); - newViewDate.setDate(1); + if (cell) { + cell.tabIndex = '0'; + } + }; - if (currentView === 'date') { - if (newViewDate.getMonth() === 11) { - newViewDate.setMonth(0); - newViewDate.setFullYear(incrementYear()); - setCurrentMonth(0); + const navBackward = (event) => { + if (props.disabled) { + event.preventDefault(); + return; + } + + let newViewDate = new Date(getViewDate().getTime()); + newViewDate.setDate(1); + + if (currentView === 'date') { + if (newViewDate.getMonth() === 0) { + newViewDate.setMonth(11); + newViewDate.setFullYear(decrementYear()); + setCurrentMonth(11); + } else { + newViewDate.setMonth(newViewDate.getMonth() - 1); + setCurrentMonth((prevState) => prevState - 1); + } + } else if (currentView === 'month') { + let newYear = newViewDate.getFullYear() - 1; + + if (props.yearNavigator) { + const minYear = parseInt(props.yearRange.split(':')[0], 10); + + if (newYear < minYear) { + newYear = minYear; + } + } + + newViewDate.setFullYear(newYear); } - else { - newViewDate.setMonth(newViewDate.getMonth() + 1); - setCurrentMonth(prevState => prevState + 1) + + if (currentView === 'month') { + newViewDate.setFullYear(decrementYear()); + } else if (currentView === 'year') { + newViewDate.setFullYear(decrementDecade()); } - } - else if (currentView === 'month') { - let newYear = newViewDate.getFullYear() + 1; - if (props.yearNavigator) { - const maxYear = parseInt(props.yearRange.split(':')[1], 10); + updateViewDate(event, newViewDate); + + event.preventDefault(); + }; + + const navForward = (event) => { + if (props.disabled) { + event.preventDefault(); + return; + } + + let newViewDate = new Date(getViewDate().getTime()); + newViewDate.setDate(1); - if (newYear > maxYear) { - newYear = maxYear; + if (currentView === 'date') { + if (newViewDate.getMonth() === 11) { + newViewDate.setMonth(0); + newViewDate.setFullYear(incrementYear()); + setCurrentMonth(0); + } else { + newViewDate.setMonth(newViewDate.getMonth() + 1); + setCurrentMonth((prevState) => prevState + 1); + } + } else if (currentView === 'month') { + let newYear = newViewDate.getFullYear() + 1; + + if (props.yearNavigator) { + const maxYear = parseInt(props.yearRange.split(':')[1], 10); + + if (newYear > maxYear) { + newYear = maxYear; + } } + + newViewDate.setFullYear(newYear); } - newViewDate.setFullYear(newYear); - } + if (currentView === 'month') { + newViewDate.setFullYear(incrementYear()); + } else if (currentView === 'year') { + newViewDate.setFullYear(incrementDecade()); + } - if (currentView === 'month') { - newViewDate.setFullYear(incrementYear()); - } - else if (currentView === 'year') { - newViewDate.setFullYear(incrementDecade()); - } + updateViewDate(event, newViewDate); - updateViewDate(event, newViewDate); + event.preventDefault(); + }; - event.preventDefault(); - } + const populateYearOptions = (start, end) => { + let _yearOptions = []; - const populateYearOptions = (start, end) => { - let _yearOptions = []; + for (let i = start; i <= end; i++) { + yearOptions.push(i); + } - for (let i = start; i <= end; i++) { - yearOptions.push(i); - } + setYearOptions(_yearOptions); + }; + + const decrementYear = () => { + const _currentYear = currentYear - 1; + setCurrentYear(_currentYear); - setYearOptions(_yearOptions) - } + if (props.yearNavigator && _currentYear < yearOptions[0]) { + let difference = yearOptions[yearOptions.length - 1] - yearOptions[0]; + populateYearOptions(yearOptions[0] - difference, yearOptions[yearOptions.length - 1] - difference); + } + return _currentYear; + }; - const decrementYear = () => { - const _currentYear = currentYear - 1 - setCurrentYear(_currentYear); + const incrementYear = () => { + const _currentYear = currentYear + 1; + setCurrentYear(_currentYear); - if (props.yearNavigator && _currentYear < yearOptions[0]) { - let difference = yearOptions[yearOptions.length - 1] - yearOptions[0]; - populateYearOptions(yearOptions[0] - difference, yearOptions[yearOptions.length - 1] - difference); - } - return _currentYear; - } + if (props.yearNavigator && _currentYear.current > yearOptions[yearOptions.length - 1]) { + let difference = yearOptions[yearOptions.length - 1] - yearOptions[0]; + populateYearOptions(yearOptions[0] + difference, yearOptions[yearOptions.length - 1] + difference); + } + return _currentYear; + }; - const incrementYear = () => { - const _currentYear = currentYear + 1 - setCurrentYear(_currentYear); + const onMonthDropdownChange = (event, value) => { + const currentViewDate = getViewDate(); + let newViewDate = new Date(currentViewDate.getTime()); + newViewDate.setMonth(parseInt(value, 10)); - if (props.yearNavigator && _currentYear.current > yearOptions[yearOptions.length - 1]) { - let difference = yearOptions[yearOptions.length - 1] - yearOptions[0]; - populateYearOptions(yearOptions[0] + difference, yearOptions[yearOptions.length - 1] + difference); - } - return _currentYear; - } + updateViewDate(event, newViewDate); + }; - const onMonthDropdownChange = (event, value) => { - const currentViewDate = getViewDate(); - let newViewDate = new Date(currentViewDate.getTime()); - newViewDate.setMonth(parseInt(value, 10)); + const onYearDropdownChange = (event, value) => { + const currentViewDate = getViewDate(); + let newViewDate = new Date(currentViewDate.getTime()); + newViewDate.setFullYear(parseInt(value, 10)); - updateViewDate(event, newViewDate); - } + updateViewDate(event, newViewDate); + }; - const onYearDropdownChange = (event, value) => { - const currentViewDate = getViewDate(); - let newViewDate = new Date(currentViewDate.getTime()); - newViewDate.setFullYear(parseInt(value, 10)); + const onTodayButtonClick = (event) => { + const today = new Date(); + const dateMeta = { day: today.getDate(), month: today.getMonth(), year: today.getFullYear(), today: true, selectable: true }; + const timeMeta = { hours: today.getHours(), minutes: today.getMinutes(), seconds: today.getSeconds(), milliseconds: today.getMilliseconds() }; - updateViewDate(event, newViewDate); - } + updateViewDate(event, today); + onDateSelect(event, dateMeta, timeMeta); - const onTodayButtonClick = (event) => { - const today = new Date(); - const dateMeta = { day: today.getDate(), month: today.getMonth(), year: today.getFullYear(), today: true, selectable: true }; - const timeMeta = { hours: today.getHours(), minutes: today.getMinutes(), seconds: today.getSeconds(), milliseconds: today.getMilliseconds() }; + props.onTodayButtonClick && props.onTodayButtonClick(event); + }; - updateViewDate(event, today); - onDateSelect(event, dateMeta, timeMeta); + const onClearButtonClick = (event) => { + updateModel(event, null); + updateInputfield(null); + hide(); - props.onTodayButtonClick && props.onTodayButtonClick(event); - } + props.onClearButtonClick && props.onClearButtonClick(event); + }; - const onClearButtonClick = (event) => { - updateModel(event, null); - updateInputfield(null); - hide(); + const onPanelClick = (event) => { + if (!props.inline) { + OverlayService.emit('overlay-click', { + originalEvent: event, + target: elementRef.current + }); + } + }; - props.onClearButtonClick && props.onClearButtonClick(event); - } + const onPanelMouseUp = (event) => { + onPanelClick(event); + }; - const onPanelClick = (event) => { - if (!props.inline) { - OverlayService.emit('overlay-click', { - originalEvent: event, - target: elementRef.current - }); - } - } + const onTimePickerElementMouseDown = (event, type, direction) => { + if (!props.disabled) { + repeat(event, null, type, direction); + event.preventDefault(); + } + }; - const onPanelMouseUp = (event) => { - onPanelClick(event); - } + const onTimePickerElementMouseUp = () => { + if (!props.disabled) { + clearTimePickerTimer(); + } + }; - const onTimePickerElementMouseDown = (event, type, direction) => { - if (!props.disabled) { - repeat(event, null, type, direction); - event.preventDefault(); - } - } + const onTimePickerElementMouseLeave = () => { + if (!props.disabled) { + clearTimePickerTimer(); + } + }; - const onTimePickerElementMouseUp = () => { - if (!props.disabled) { + const repeat = (event, interval, type, direction) => { clearTimePickerTimer(); - } - } + timePickerTimer.current = setTimeout(() => { + repeat(event, 100, type, direction); + }, interval || 500); + + switch (type) { + case 0: + if (direction === 1) incrementHour(event); + else decrementHour(event); + break; - const onTimePickerElementMouseLeave = () => { - if (!props.disabled) { - clearTimePickerTimer(); - } - } - - const repeat = (event, interval, type, direction) => { - clearTimePickerTimer(); - timePickerTimer.current = setTimeout(() => { - repeat(event, 100, type, direction); - }, interval || 500); - - switch (type) { - case 0: - if (direction === 1) - incrementHour(event); - else - decrementHour(event); - break; - - case 1: - if (direction === 1) - incrementMinute(event); - else - decrementMinute(event); - break; - - case 2: - if (direction === 1) - incrementSecond(event); - else - decrementSecond(event); - break; - - case 3: - if (direction === 1) - incrementMilliSecond(event); - else - decrementMilliSecond(event); - break; - - default: - break; - } - } - - const clearTimePickerTimer = () => { - if (timePickerTimer.current) { - clearTimeout(timePickerTimer.current); - } - } - - const incrementHour = (event) => { - const currentTime = getCurrentDateTime(); - const currentHour = currentTime.getHours(); - let newHour = currentHour + props.stepHour; - newHour = (newHour >= 24) ? (newHour - 24) : newHour; - - if (validateHour(newHour, currentTime)) { - if (props.maxDate && props.maxDate.toDateString() === currentTime.toDateString() && props.maxDate.getHours() === newHour) { - if (props.maxDate.getMinutes() < currentTime.getMinutes()) { - if (props.maxDate.getSeconds() < currentTime.getSeconds()) { - if (props.maxDate.getMilliseconds() < currentTime.getMilliseconds()) { - updateTime(event, newHour, props.maxDate.getMinutes(), props.maxDate.getSeconds(), props.maxDate.getMilliseconds()); - } - else { - updateTime(event, newHour, props.maxDate.getMinutes(), props.maxDate.getSeconds(), currentTime.getMilliseconds()); - } - } - else { - updateTime(event, newHour, props.maxDate.getMinutes(), currentTime.getSeconds(), currentTime.getMilliseconds()); - } - } - else if (props.maxDate.getMinutes() === currentTime.getMinutes()) { - if (props.maxDate.getSeconds() < currentTime.getSeconds()) { - if (props.maxDate.getMilliseconds() < currentTime.getMilliseconds()) { - updateTime(event, newHour, props.maxDate.getMinutes(), props.maxDate.getSeconds(), props.maxDate.getMilliseconds()); + case 1: + if (direction === 1) incrementMinute(event); + else decrementMinute(event); + break; + + case 2: + if (direction === 1) incrementSecond(event); + else decrementSecond(event); + break; + + case 3: + if (direction === 1) incrementMilliSecond(event); + else decrementMilliSecond(event); + break; + + default: + break; + } + }; + + const clearTimePickerTimer = () => { + if (timePickerTimer.current) { + clearTimeout(timePickerTimer.current); + } + }; + + const incrementHour = (event) => { + const currentTime = getCurrentDateTime(); + const currentHour = currentTime.getHours(); + let newHour = currentHour + props.stepHour; + newHour = newHour >= 24 ? newHour - 24 : newHour; + + if (validateHour(newHour, currentTime)) { + if (props.maxDate && props.maxDate.toDateString() === currentTime.toDateString() && props.maxDate.getHours() === newHour) { + if (props.maxDate.getMinutes() < currentTime.getMinutes()) { + if (props.maxDate.getSeconds() < currentTime.getSeconds()) { + if (props.maxDate.getMilliseconds() < currentTime.getMilliseconds()) { + updateTime(event, newHour, props.maxDate.getMinutes(), props.maxDate.getSeconds(), props.maxDate.getMilliseconds()); + } else { + updateTime(event, newHour, props.maxDate.getMinutes(), props.maxDate.getSeconds(), currentTime.getMilliseconds()); + } + } else { + updateTime(event, newHour, props.maxDate.getMinutes(), currentTime.getSeconds(), currentTime.getMilliseconds()); } - else { - updateTime(event, newHour, props.maxDate.getMinutes(), props.maxDate.getSeconds(), currentTime.getMilliseconds()); + } else if (props.maxDate.getMinutes() === currentTime.getMinutes()) { + if (props.maxDate.getSeconds() < currentTime.getSeconds()) { + if (props.maxDate.getMilliseconds() < currentTime.getMilliseconds()) { + updateTime(event, newHour, props.maxDate.getMinutes(), props.maxDate.getSeconds(), props.maxDate.getMilliseconds()); + } else { + updateTime(event, newHour, props.maxDate.getMinutes(), props.maxDate.getSeconds(), currentTime.getMilliseconds()); + } + } else { + updateTime(event, newHour, props.maxDate.getMinutes(), currentTime.getSeconds(), currentTime.getMilliseconds()); } + } else { + updateTime(event, newHour, currentTime.getMinutes(), currentTime.getSeconds(), currentTime.getMilliseconds()); } - else { - updateTime(event, newHour, props.maxDate.getMinutes(), currentTime.getSeconds(), currentTime.getMilliseconds()); - } - } - else { + } else { updateTime(event, newHour, currentTime.getMinutes(), currentTime.getSeconds(), currentTime.getMilliseconds()); } } - else { - updateTime(event, newHour, currentTime.getMinutes(), currentTime.getSeconds(), currentTime.getMilliseconds()); - } - } - - event.preventDefault(); - } - const decrementHour = (event) => { - const currentTime = getCurrentDateTime(); - const currentHour = currentTime.getHours(); - let newHour = currentHour - props.stepHour; - newHour = (newHour < 0) ? (newHour + 24) : newHour; + event.preventDefault(); + }; - if (validateHour(newHour, currentTime)) { - if (props.minDate && props.minDate.toDateString() === currentTime.toDateString() && props.minDate.getHours() === newHour) { - if (props.minDate.getMinutes() > currentTime.getMinutes()) { - if (props.minDate.getSeconds() > currentTime.getSeconds()) { - if (props.minDate.getMilliseconds() > currentTime.getMilliseconds()) { - updateTime(event, newHour, props.minDate.getMinutes(), props.minDate.getSeconds(), props.minDate.getMilliseconds()); - } - else { - updateTime(event, newHour, props.minDate.getMinutes(), props.minDate.getSeconds(), currentTime.getMilliseconds()); - } - } - else { - updateTime(event, newHour, props.minDate.getMinutes(), currentTime.getSeconds(), currentTime.getMilliseconds()); - } - } - else if (props.minDate.getMinutes() === currentTime.getMinutes()) { - if (props.minDate.getSeconds() > currentTime.getSeconds()) { - if (props.minDate.getMilliseconds() > currentTime.getMilliseconds()) { - updateTime(event, newHour, props.minDate.getMinutes(), props.minDate.getSeconds(), props.minDate.getMilliseconds()); + const decrementHour = (event) => { + const currentTime = getCurrentDateTime(); + const currentHour = currentTime.getHours(); + let newHour = currentHour - props.stepHour; + newHour = newHour < 0 ? newHour + 24 : newHour; + + if (validateHour(newHour, currentTime)) { + if (props.minDate && props.minDate.toDateString() === currentTime.toDateString() && props.minDate.getHours() === newHour) { + if (props.minDate.getMinutes() > currentTime.getMinutes()) { + if (props.minDate.getSeconds() > currentTime.getSeconds()) { + if (props.minDate.getMilliseconds() > currentTime.getMilliseconds()) { + updateTime(event, newHour, props.minDate.getMinutes(), props.minDate.getSeconds(), props.minDate.getMilliseconds()); + } else { + updateTime(event, newHour, props.minDate.getMinutes(), props.minDate.getSeconds(), currentTime.getMilliseconds()); + } + } else { + updateTime(event, newHour, props.minDate.getMinutes(), currentTime.getSeconds(), currentTime.getMilliseconds()); } - else { - updateTime(event, newHour, props.minDate.getMinutes(), props.minDate.getSeconds(), currentTime.getMilliseconds()); + } else if (props.minDate.getMinutes() === currentTime.getMinutes()) { + if (props.minDate.getSeconds() > currentTime.getSeconds()) { + if (props.minDate.getMilliseconds() > currentTime.getMilliseconds()) { + updateTime(event, newHour, props.minDate.getMinutes(), props.minDate.getSeconds(), props.minDate.getMilliseconds()); + } else { + updateTime(event, newHour, props.minDate.getMinutes(), props.minDate.getSeconds(), currentTime.getMilliseconds()); + } + } else { + updateTime(event, newHour, props.minDate.getMinutes(), currentTime.getSeconds(), currentTime.getMilliseconds()); } + } else { + updateTime(event, newHour, currentTime.getMinutes(), currentTime.getSeconds(), currentTime.getMilliseconds()); } - else { - updateTime(event, newHour, props.minDate.getMinutes(), currentTime.getSeconds(), currentTime.getMilliseconds()); - } - } - else { + } else { updateTime(event, newHour, currentTime.getMinutes(), currentTime.getSeconds(), currentTime.getMilliseconds()); } } - else { - updateTime(event, newHour, currentTime.getMinutes(), currentTime.getSeconds(), currentTime.getMilliseconds()); - } - } - event.preventDefault(); - } + event.preventDefault(); + }; - const doStepMinute = (currentMinute, step) => { - if (props.stepMinute <= 1) { - return step ? currentMinute + step : currentMinute; - } - if (!step) { - step = props.stepMinute; - if (currentMinute % step === 0) { - return currentMinute; + const doStepMinute = (currentMinute, step) => { + if (props.stepMinute <= 1) { + return step ? currentMinute + step : currentMinute; + } + if (!step) { + step = props.stepMinute; + if (currentMinute % step === 0) { + return currentMinute; + } } - } - return Math.floor((currentMinute + step) / step) * step; - } + return Math.floor((currentMinute + step) / step) * step; + }; - const incrementMinute = (event) => { - const currentTime = getCurrentDateTime(); - const currentMinute = currentTime.getMinutes(); - let newMinute = doStepMinute(currentMinute, props.stepMinute); - newMinute = (newMinute > 59) ? (newMinute - 60) : newMinute; + const incrementMinute = (event) => { + const currentTime = getCurrentDateTime(); + const currentMinute = currentTime.getMinutes(); + let newMinute = doStepMinute(currentMinute, props.stepMinute); + newMinute = newMinute > 59 ? newMinute - 60 : newMinute; - if (validateMinute(newMinute, currentTime)) { - if (props.maxDate && props.maxDate.toDateString() === currentTime.toDateString() && props.maxDate.getMinutes() === newMinute) { - if (props.maxDate.getSeconds() < currentTime.getSeconds()) { - if (props.maxDate.getMilliseconds() < currentTime.getMilliseconds()) { - updateTime(event, currentTime.getHours(), newMinute, props.maxDate.getSeconds(), props.maxDate.getMilliseconds()); - } - else { - updateTime(event, currentTime.getHours(), newMinute, props.maxDate.getSeconds(), currentTime.getMilliseconds()); + if (validateMinute(newMinute, currentTime)) { + if (props.maxDate && props.maxDate.toDateString() === currentTime.toDateString() && props.maxDate.getMinutes() === newMinute) { + if (props.maxDate.getSeconds() < currentTime.getSeconds()) { + if (props.maxDate.getMilliseconds() < currentTime.getMilliseconds()) { + updateTime(event, currentTime.getHours(), newMinute, props.maxDate.getSeconds(), props.maxDate.getMilliseconds()); + } else { + updateTime(event, currentTime.getHours(), newMinute, props.maxDate.getSeconds(), currentTime.getMilliseconds()); + } + } else { + updateTime(event, currentTime.getHours(), newMinute, currentTime.getSeconds(), currentTime.getMilliseconds()); } - } - else { + } else { updateTime(event, currentTime.getHours(), newMinute, currentTime.getSeconds(), currentTime.getMilliseconds()); } } - else { - updateTime(event, currentTime.getHours(), newMinute, currentTime.getSeconds(), currentTime.getMilliseconds()); - } - } - event.preventDefault(); - } + event.preventDefault(); + }; - const decrementMinute = (event) => { - const currentTime = getCurrentDateTime(); - const currentMinute = currentTime.getMinutes(); - let newMinute = doStepMinute(currentMinute, -props.stepMinute); - newMinute = (newMinute < 0) ? (newMinute + 60) : newMinute; + const decrementMinute = (event) => { + const currentTime = getCurrentDateTime(); + const currentMinute = currentTime.getMinutes(); + let newMinute = doStepMinute(currentMinute, -props.stepMinute); + newMinute = newMinute < 0 ? newMinute + 60 : newMinute; - if (validateMinute(newMinute, currentTime)) { - if (props.minDate && props.minDate.toDateString() === currentTime.toDateString() && props.minDate.getMinutes() === newMinute) { - if (props.minDate.getSeconds() > currentTime.getSeconds()) { - if (props.minDate.getMilliseconds() > currentTime.getMilliseconds()) { - updateTime(event, currentTime.getHours(), newMinute, props.minDate.getSeconds(), props.minDate.getMilliseconds()); - } - else { - updateTime(event, currentTime.getHours(), newMinute, props.minDate.getSeconds(), currentTime.getMilliseconds()); + if (validateMinute(newMinute, currentTime)) { + if (props.minDate && props.minDate.toDateString() === currentTime.toDateString() && props.minDate.getMinutes() === newMinute) { + if (props.minDate.getSeconds() > currentTime.getSeconds()) { + if (props.minDate.getMilliseconds() > currentTime.getMilliseconds()) { + updateTime(event, currentTime.getHours(), newMinute, props.minDate.getSeconds(), props.minDate.getMilliseconds()); + } else { + updateTime(event, currentTime.getHours(), newMinute, props.minDate.getSeconds(), currentTime.getMilliseconds()); + } + } else { + updateTime(event, currentTime.getHours(), newMinute, currentTime.getSeconds(), currentTime.getMilliseconds()); } - } - else { + } else { updateTime(event, currentTime.getHours(), newMinute, currentTime.getSeconds(), currentTime.getMilliseconds()); } } - else { - updateTime(event, currentTime.getHours(), newMinute, currentTime.getSeconds(), currentTime.getMilliseconds()); - } - } - event.preventDefault(); - } + event.preventDefault(); + }; - const incrementSecond = (event) => { - const currentTime = getCurrentDateTime(); - const currentSecond = currentTime.getSeconds(); - let newSecond = currentSecond + props.stepSecond; - newSecond = (newSecond > 59) ? (newSecond - 60) : newSecond; + const incrementSecond = (event) => { + const currentTime = getCurrentDateTime(); + const currentSecond = currentTime.getSeconds(); + let newSecond = currentSecond + props.stepSecond; + newSecond = newSecond > 59 ? newSecond - 60 : newSecond; - if (validateSecond(newSecond, currentTime)) { - if (props.maxDate && props.maxDate.toDateString() === currentTime.toDateString() && props.maxDate.getSeconds() === newSecond) { - if (props.maxDate.getMilliseconds() < currentTime.getMilliseconds()) { - updateTime(event, currentTime.getHours(), currentTime.getMinutes(), newSecond, props.maxDate.getMilliseconds()); - } - else { + if (validateSecond(newSecond, currentTime)) { + if (props.maxDate && props.maxDate.toDateString() === currentTime.toDateString() && props.maxDate.getSeconds() === newSecond) { + if (props.maxDate.getMilliseconds() < currentTime.getMilliseconds()) { + updateTime(event, currentTime.getHours(), currentTime.getMinutes(), newSecond, props.maxDate.getMilliseconds()); + } else { + updateTime(event, currentTime.getHours(), currentTime.getMinutes(), newSecond, currentTime.getMilliseconds()); + } + } else { updateTime(event, currentTime.getHours(), currentTime.getMinutes(), newSecond, currentTime.getMilliseconds()); } } - else { - updateTime(event, currentTime.getHours(), currentTime.getMinutes(), newSecond, currentTime.getMilliseconds()); - } - } - event.preventDefault(); - } + event.preventDefault(); + }; - const decrementSecond = (event) => { - const currentTime = getCurrentDateTime(); - const currentSecond = currentTime.getSeconds(); - let newSecond = currentSecond - props.stepSecond; - newSecond = (newSecond < 0) ? (newSecond + 60) : newSecond; + const decrementSecond = (event) => { + const currentTime = getCurrentDateTime(); + const currentSecond = currentTime.getSeconds(); + let newSecond = currentSecond - props.stepSecond; + newSecond = newSecond < 0 ? newSecond + 60 : newSecond; - if (validateSecond(newSecond, currentTime)) { - if (props.minDate && props.minDate.toDateString() === currentTime.toDateString() && props.minDate.getSeconds() === newSecond) { - if (props.minDate.getMilliseconds() > currentTime.getMilliseconds()) { - updateTime(event, currentTime.getHours(), currentTime.getMinutes(), newSecond, props.minDate.getMilliseconds()); - } - else { + if (validateSecond(newSecond, currentTime)) { + if (props.minDate && props.minDate.toDateString() === currentTime.toDateString() && props.minDate.getSeconds() === newSecond) { + if (props.minDate.getMilliseconds() > currentTime.getMilliseconds()) { + updateTime(event, currentTime.getHours(), currentTime.getMinutes(), newSecond, props.minDate.getMilliseconds()); + } else { + updateTime(event, currentTime.getHours(), currentTime.getMinutes(), newSecond, currentTime.getMilliseconds()); + } + } else { updateTime(event, currentTime.getHours(), currentTime.getMinutes(), newSecond, currentTime.getMilliseconds()); } } - else { - updateTime(event, currentTime.getHours(), currentTime.getMinutes(), newSecond, currentTime.getMilliseconds()); - } - } - event.preventDefault(); - } + event.preventDefault(); + }; - const incrementMilliSecond = (event) => { - const currentTime = getCurrentDateTime(); - const currentMillisecond = currentTime.getMilliseconds(); - let newMillisecond = currentMillisecond + props.stepMillisec; - newMillisecond = (newMillisecond > 999) ? (newMillisecond - 1000) : newMillisecond; + const incrementMilliSecond = (event) => { + const currentTime = getCurrentDateTime(); + const currentMillisecond = currentTime.getMilliseconds(); + let newMillisecond = currentMillisecond + props.stepMillisec; + newMillisecond = newMillisecond > 999 ? newMillisecond - 1000 : newMillisecond; - if (validateMillisecond(newMillisecond, currentTime)) { - updateTime(event, currentTime.getHours(), currentTime.getMinutes(), currentTime.getSeconds(), newMillisecond); - } + if (validateMillisecond(newMillisecond, currentTime)) { + updateTime(event, currentTime.getHours(), currentTime.getMinutes(), currentTime.getSeconds(), newMillisecond); + } - event.preventDefault(); - } + event.preventDefault(); + }; - const decrementMilliSecond = (event) => { - const currentTime = getCurrentDateTime(); - const currentMillisecond = currentTime.getMilliseconds(); - let newMillisecond = currentMillisecond - props.stepMillisec; - newMillisecond = (newMillisecond < 0) ? (newMillisecond + 999) : newMillisecond; + const decrementMilliSecond = (event) => { + const currentTime = getCurrentDateTime(); + const currentMillisecond = currentTime.getMilliseconds(); + let newMillisecond = currentMillisecond - props.stepMillisec; + newMillisecond = newMillisecond < 0 ? newMillisecond + 999 : newMillisecond; - if (validateMillisecond(newMillisecond, currentTime)) { - updateTime(event, currentTime.getHours(), currentTime.getMinutes(), currentTime.getSeconds(), newMillisecond); - } + if (validateMillisecond(newMillisecond, currentTime)) { + updateTime(event, currentTime.getHours(), currentTime.getMinutes(), currentTime.getSeconds(), newMillisecond); + } - event.preventDefault(); - } + event.preventDefault(); + }; - const toggleAmPm = (event) => { - const currentTime = getCurrentDateTime(); - const currentHour = currentTime.getHours(); - const newHour = (currentHour >= 12) ? currentHour - 12 : currentHour + 12; + const toggleAmPm = (event) => { + const currentTime = getCurrentDateTime(); + const currentHour = currentTime.getHours(); + const newHour = currentHour >= 12 ? currentHour - 12 : currentHour + 12; - if (validateHour(convertTo24Hour(newHour, !(currentHour > 11)), currentTime)) { - updateTime(event, newHour, currentTime.getMinutes(), currentTime.getSeconds(), currentTime.getMilliseconds()); - } + if (validateHour(convertTo24Hour(newHour, !(currentHour > 11)), currentTime)) { + updateTime(event, newHour, currentTime.getMinutes(), currentTime.getSeconds(), currentTime.getMilliseconds()); + } - event.preventDefault(); - } + event.preventDefault(); + }; - const getViewDate = (date) => { - let propValue = props.value; - let viewDate = date || (props.onViewDateChange ? props.viewDate : viewDateState); - if (Array.isArray(propValue)) { - propValue = propValue[0]; - } + const getViewDate = (date) => { + let propValue = props.value; + let viewDate = date || (props.onViewDateChange ? props.viewDate : viewDateState); + if (Array.isArray(propValue)) { + propValue = propValue[0]; + } - return viewDate && isValidDate(viewDate) ? viewDate : (propValue && isValidDate(propValue) ? propValue : new Date()); - } + return viewDate && isValidDate(viewDate) ? viewDate : propValue && isValidDate(propValue) ? propValue : new Date(); + }; - const getCurrentDateTime = () => { - if (isSingleSelection()) { - return (props.value && props.value instanceof Date) ? props.value : getViewDate(); - } - else if (isMultipleSelection()) { - if (props.value && props.value.length) { - return props.value[props.value.length - 1]; - } - } - else if (isRangeSelection()) { - if (props.value && props.value.length) { - let startDate = props.value[0]; - let endDate = props.value[1]; + const getCurrentDateTime = () => { + if (isSingleSelection()) { + return props.value && props.value instanceof Date ? props.value : getViewDate(); + } else if (isMultipleSelection()) { + if (props.value && props.value.length) { + return props.value[props.value.length - 1]; + } + } else if (isRangeSelection()) { + if (props.value && props.value.length) { + let startDate = props.value[0]; + let endDate = props.value[1]; - return endDate || startDate; + return endDate || startDate; + } } - } - return new Date(); - } + return new Date(); + }; - const isValidDate = (date) => { - return date instanceof Date && !isNaN(date); - } + const isValidDate = (date) => { + return date instanceof Date && !isNaN(date); + }; - const convertTo24Hour = (hour, pm) => { - if (props.hourFormat == '12') { - return hour === 12 ? (pm ? 12 : 0) : (pm ? hour + 12 : hour); - } + const convertTo24Hour = (hour, pm) => { + if (props.hourFormat == '12') { + return hour === 12 ? (pm ? 12 : 0) : pm ? hour + 12 : hour; + } - return hour; - } + return hour; + }; - const validateHour = (hour, value) => { - let valid = true; - let valueDateString = value ? value.toDateString() : null; + const validateHour = (hour, value) => { + let valid = true; + let valueDateString = value ? value.toDateString() : null; - if (props.minDate && valueDateString && props.minDate.toDateString() === valueDateString) { - if (props.minDate.getHours() > hour) { - valid = false; + if (props.minDate && valueDateString && props.minDate.toDateString() === valueDateString) { + if (props.minDate.getHours() > hour) { + valid = false; + } } - } - if (props.maxDate && valueDateString && props.maxDate.toDateString() === valueDateString) { - if (props.maxDate.getHours() < hour) { - valid = false; + if (props.maxDate && valueDateString && props.maxDate.toDateString() === valueDateString) { + if (props.maxDate.getHours() < hour) { + valid = false; + } } - } - return valid; - } + return valid; + }; - const validateMinute = (minute, value) => { - let valid = true; - let valueDateString = value ? value.toDateString() : null; + const validateMinute = (minute, value) => { + let valid = true; + let valueDateString = value ? value.toDateString() : null; - if (props.minDate && valueDateString && props.minDate.toDateString() === valueDateString) { - if (value.getHours() === props.minDate.getHours()) { - if (props.minDate.getMinutes() > minute) { - valid = false; + if (props.minDate && valueDateString && props.minDate.toDateString() === valueDateString) { + if (value.getHours() === props.minDate.getHours()) { + if (props.minDate.getMinutes() > minute) { + valid = false; + } } } - } - if (props.maxDate && valueDateString && props.maxDate.toDateString() === valueDateString) { - if (value.getHours() === props.maxDate.getHours()) { - if (props.maxDate.getMinutes() < minute) { - valid = false; + if (props.maxDate && valueDateString && props.maxDate.toDateString() === valueDateString) { + if (value.getHours() === props.maxDate.getHours()) { + if (props.maxDate.getMinutes() < minute) { + valid = false; + } } } - } - return valid; - } + return valid; + }; - const validateSecond = (second, value) => { - let valid = true; - let valueDateString = value ? value.toDateString() : null; + const validateSecond = (second, value) => { + let valid = true; + let valueDateString = value ? value.toDateString() : null; - if (props.minDate && valueDateString && props.minDate.toDateString() === valueDateString) { - if (value.getHours() === props.minDate.getHours() && value.getMinutes() === props.minDate.getMinutes()) { - if (props.minDate.getSeconds() > second) { - valid = false; + if (props.minDate && valueDateString && props.minDate.toDateString() === valueDateString) { + if (value.getHours() === props.minDate.getHours() && value.getMinutes() === props.minDate.getMinutes()) { + if (props.minDate.getSeconds() > second) { + valid = false; + } } } - } - if (props.maxDate && valueDateString && props.maxDate.toDateString() === valueDateString) { - if (value.getHours() === props.maxDate.getHours() && value.getMinutes() === props.maxDate.getMinutes()) { - if (props.maxDate.getSeconds() < second) { - valid = false; + if (props.maxDate && valueDateString && props.maxDate.toDateString() === valueDateString) { + if (value.getHours() === props.maxDate.getHours() && value.getMinutes() === props.maxDate.getMinutes()) { + if (props.maxDate.getSeconds() < second) { + valid = false; + } } } - } - return valid; - } + return valid; + }; - const validateMillisecond = (millisecond, value) => { - let valid = true; - let valueDateString = value ? value.toDateString() : null; + const validateMillisecond = (millisecond, value) => { + let valid = true; + let valueDateString = value ? value.toDateString() : null; - if (props.minDate && valueDateString && props.minDate.toDateString() === valueDateString) { - if (value.getHours() === props.minDate.getHours() && value.getSeconds() === props.minDate.getSeconds() && value.getMinutes() === props.minDate.getMinutes()) { - if (props.minDate.getMilliseconds() > millisecond) { - valid = false; + if (props.minDate && valueDateString && props.minDate.toDateString() === valueDateString) { + if (value.getHours() === props.minDate.getHours() && value.getSeconds() === props.minDate.getSeconds() && value.getMinutes() === props.minDate.getMinutes()) { + if (props.minDate.getMilliseconds() > millisecond) { + valid = false; + } } } - } - if (props.maxDate && valueDateString && props.maxDate.toDateString() === valueDateString) { - if (value.getHours() === props.maxDate.getHours() && value.getSeconds() === props.maxDate.getSeconds() && value.getMinutes() === props.maxDate.getMinutes()) { - if (props.maxDate.getMilliseconds() < millisecond) { - valid = false; + if (props.maxDate && valueDateString && props.maxDate.toDateString() === valueDateString) { + if (value.getHours() === props.maxDate.getHours() && value.getSeconds() === props.maxDate.getSeconds() && value.getMinutes() === props.maxDate.getMinutes()) { + if (props.maxDate.getMilliseconds() < millisecond) { + valid = false; + } } } - } - return valid; - } + return valid; + }; - const validateDate = (value) => { - if (props.yearNavigator) { - let viewYear = value.getFullYear(); + const validateDate = (value) => { + if (props.yearNavigator) { + let viewYear = value.getFullYear(); - const minRangeYear = props.yearRange ? parseInt(props.yearRange.split(':')[0], 10) : null; - const maxRangeYear = props.yearRange ? parseInt(props.yearRange.split(':')[1], 10) : null; - const minYear = props.minDate && minRangeYear != null ? Math.max(props.minDate.getFullYear(), minRangeYear) : props.minDate || minRangeYear; - const maxYear = props.maxDate && maxRangeYear != null ? Math.min(props.maxDate.getFullYear(), maxRangeYear) : props.maxDate || maxRangeYear; + const minRangeYear = props.yearRange ? parseInt(props.yearRange.split(':')[0], 10) : null; + const maxRangeYear = props.yearRange ? parseInt(props.yearRange.split(':')[1], 10) : null; + const minYear = props.minDate && minRangeYear != null ? Math.max(props.minDate.getFullYear(), minRangeYear) : props.minDate || minRangeYear; + const maxYear = props.maxDate && maxRangeYear != null ? Math.min(props.maxDate.getFullYear(), maxRangeYear) : props.maxDate || maxRangeYear; - if (minYear && minYear > viewYear) { - viewYear = minYear; - } - if (maxYear && maxYear < viewYear) { - viewYear = maxYear + if (minYear && minYear > viewYear) { + viewYear = minYear; + } + if (maxYear && maxYear < viewYear) { + viewYear = maxYear; + } + + value.setFullYear(viewYear); } - value.setFullYear(viewYear); - } + if (props.monthNavigator && props.view !== 'month') { + let viewMonth = value.getMonth(); + let viewMonthWithMinMax = parseInt((isInMinYear(value) && Math.max(props.minDate.getMonth(), viewMonth).toString()) || (isInMaxYear(value) && Math.min(props.maxDate.getMonth(), viewMonth).toString()) || viewMonth); - if (props.monthNavigator && props.view !== 'month') { - let viewMonth = value.getMonth(); - let viewMonthWithMinMax = parseInt((isInMinYear(value) && Math.max(props.minDate.getMonth(), viewMonth).toString()) || (isInMaxYear(value) && Math.min(props.maxDate.getMonth(), viewMonth).toString()) || viewMonth); + value.setMonth(viewMonthWithMinMax); + } + }; - value.setMonth(viewMonthWithMinMax); - } - } + const updateTime = (event, hour, minute, second, millisecond) => { + let newDateTime = getCurrentDateTime(); - const updateTime = (event, hour, minute, second, millisecond) => { - let newDateTime = getCurrentDateTime(); + newDateTime.setHours(hour); + newDateTime.setMinutes(minute); + newDateTime.setSeconds(second); + newDateTime.setMilliseconds(millisecond); - newDateTime.setHours(hour); - newDateTime.setMinutes(minute); - newDateTime.setSeconds(second); - newDateTime.setMilliseconds(millisecond); + if (isMultipleSelection()) { + if (props.value && props.value.length) { + let value = [...props.value]; + value[value.length - 1] = newDateTime; - if (isMultipleSelection()) { - if (props.value && props.value.length) { - let value = [...props.value]; - value[value.length - 1] = newDateTime; + newDateTime = value; + } else { + newDateTime = [newDateTime]; + } + } else if (isRangeSelection()) { + if (props.value && props.value.length) { + let startDate = props.value[0]; + let endDate = props.value[1]; - newDateTime = value; - } - else { - newDateTime = [newDateTime]; + newDateTime = endDate ? [startDate, newDateTime] : [newDateTime, null]; + } else { + newDateTime = [newDateTime, null]; + } } - } - else if (isRangeSelection()) { - if (props.value && props.value.length) { - let startDate = props.value[0]; - let endDate = props.value[1]; - newDateTime = endDate ? [startDate, newDateTime] : [newDateTime, null]; - } - else { - newDateTime = [newDateTime, null]; + updateModel(event, newDateTime); + + if (props.onSelect) { + props.onSelect({ + originalEvent: event, + value: newDateTime + }); } - } - updateModel(event, newDateTime); + updateInputfield(newDateTime); + }; - if (props.onSelect) { - props.onSelect({ - originalEvent: event, - value: newDateTime - }); - } + const updateViewDate = (event, value) => { + validateDate(value); - updateInputfield(newDateTime); - } + if (props.onViewDateChange) { + props.onViewDateChange({ + originalEvent: event, + value + }); + } else { + viewStateChanged.current = true; + setViewDateState(value); + } + setCurrentMonth(value.getMonth()); + setCurrentYear(value.getFullYear()); + }; - const updateViewDate = (event, value) => { - validateDate(value); + const setNavigationState = (newViewDate) => { + if (!props.showMinMaxRange || props.view !== 'date' || !overlayRef.current) { + return; + } - if (props.onViewDateChange) { - props.onViewDateChange({ - originalEvent: event, - value - }); - } - else { - viewStateChanged.current = true; - setViewDateState(value); - } - setCurrentMonth(value.getMonth()); - setCurrentYear(value.getFullYear()); - } - - const setNavigationState = (newViewDate) => { - if (!props.showMinMaxRange || props.view !== 'date' || !overlayRef.current) { - return; - } - - const navPrev = DomHandler.findSingle(overlayRef.current, '.p-datepicker-prev'); - const navNext = DomHandler.findSingle(overlayRef.current, '.p-datepicker-next'); - - if (props.disabled) { - DomHandler.addClass(navPrev, 'p-disabled'); - DomHandler.addClass(navNext, 'p-disabled'); - return; - } - - // previous (check first day of month at 00:00:00) - if (props.minDate) { - let firstDayOfMonth = new Date(newViewDate.getTime()); - if (firstDayOfMonth.getMonth() === 0) { - firstDayOfMonth.setMonth(11, 1); - firstDayOfMonth.setFullYear(firstDayOfMonth.getFullYear() - 1); - } - else { - firstDayOfMonth.setMonth(firstDayOfMonth.getMonth() - 1, 1); - } - firstDayOfMonth.setHours(0); - firstDayOfMonth.setMinutes(0); - firstDayOfMonth.setSeconds(0); - if (props.minDate > firstDayOfMonth) { + const navPrev = DomHandler.findSingle(overlayRef.current, '.p-datepicker-prev'); + const navNext = DomHandler.findSingle(overlayRef.current, '.p-datepicker-next'); + + if (props.disabled) { DomHandler.addClass(navPrev, 'p-disabled'); - } else { - DomHandler.removeClass(navPrev, 'p-disabled'); + DomHandler.addClass(navNext, 'p-disabled'); + return; } - } - // next (check last day of month at 11:59:59) - if (props.maxDate) { - let lastDayOfMonth = new Date(newViewDate.getTime()); - if (lastDayOfMonth.getMonth() === 11) { - lastDayOfMonth.setMonth(0, 1); - lastDayOfMonth.setFullYear(lastDayOfMonth.getFullYear() + 1); + // previous (check first day of month at 00:00:00) + if (props.minDate) { + let firstDayOfMonth = new Date(newViewDate.getTime()); + if (firstDayOfMonth.getMonth() === 0) { + firstDayOfMonth.setMonth(11, 1); + firstDayOfMonth.setFullYear(firstDayOfMonth.getFullYear() - 1); + } else { + firstDayOfMonth.setMonth(firstDayOfMonth.getMonth() - 1, 1); + } + firstDayOfMonth.setHours(0); + firstDayOfMonth.setMinutes(0); + firstDayOfMonth.setSeconds(0); + if (props.minDate > firstDayOfMonth) { + DomHandler.addClass(navPrev, 'p-disabled'); + } else { + DomHandler.removeClass(navPrev, 'p-disabled'); + } } - else { - lastDayOfMonth.setMonth(lastDayOfMonth.getMonth() + 1, 1); + + // next (check last day of month at 11:59:59) + if (props.maxDate) { + let lastDayOfMonth = new Date(newViewDate.getTime()); + if (lastDayOfMonth.getMonth() === 11) { + lastDayOfMonth.setMonth(0, 1); + lastDayOfMonth.setFullYear(lastDayOfMonth.getFullYear() + 1); + } else { + lastDayOfMonth.setMonth(lastDayOfMonth.getMonth() + 1, 1); + } + lastDayOfMonth.setHours(0); + lastDayOfMonth.setMinutes(0); + lastDayOfMonth.setSeconds(0); + lastDayOfMonth.setSeconds(-1); + if (props.maxDate < lastDayOfMonth) { + DomHandler.addClass(navNext, 'p-disabled'); + } else { + DomHandler.removeClass(navNext, 'p-disabled'); + } } - lastDayOfMonth.setHours(0); - lastDayOfMonth.setMinutes(0); - lastDayOfMonth.setSeconds(0) - lastDayOfMonth.setSeconds(-1); - if (props.maxDate < lastDayOfMonth) { - DomHandler.addClass(navNext, 'p-disabled'); - } else { - DomHandler.removeClass(navNext, 'p-disabled'); - } - } - } - - const onDateCellKeydown = (event, date, groupIndex) => { - const cellContent = event.currentTarget; - const cell = cellContent.parentElement; - - switch (event.which) { - //down arrow - case 40: { - cellContent.tabIndex = '-1'; - let cellIndex = DomHandler.index(cell); - let nextRow = cell.parentElement.nextElementSibling; - if (nextRow) { - let focusCell = nextRow.children[cellIndex].children[0]; - if (DomHandler.hasClass(focusCell, 'p-disabled')) { + }; + + const onDateCellKeydown = (event, date, groupIndex) => { + const cellContent = event.currentTarget; + const cell = cellContent.parentElement; + + switch (event.which) { + //down arrow + case 40: { + cellContent.tabIndex = '-1'; + let cellIndex = DomHandler.index(cell); + let nextRow = cell.parentElement.nextElementSibling; + if (nextRow) { + let focusCell = nextRow.children[cellIndex].children[0]; + if (DomHandler.hasClass(focusCell, 'p-disabled')) { + navigation.current = { backward: false }; + navForward(event); + } else { + nextRow.children[cellIndex].children[0].tabIndex = '0'; + nextRow.children[cellIndex].children[0].focus(); + } + } else { navigation.current = { backward: false }; navForward(event); } - else { - nextRow.children[cellIndex].children[0].tabIndex = '0'; - nextRow.children[cellIndex].children[0].focus(); - } - } - else { - navigation.current = { backward: false }; - navForward(event); + event.preventDefault(); + break; } - event.preventDefault(); - break; - } - //up arrow - case 38: { - cellContent.tabIndex = '-1'; - let cellIndex = DomHandler.index(cell); - let prevRow = cell.parentElement.previousElementSibling; - if (prevRow) { - let focusCell = prevRow.children[cellIndex].children[0]; - if (DomHandler.hasClass(focusCell, 'p-disabled')) { + //up arrow + case 38: { + cellContent.tabIndex = '-1'; + let cellIndex = DomHandler.index(cell); + let prevRow = cell.parentElement.previousElementSibling; + if (prevRow) { + let focusCell = prevRow.children[cellIndex].children[0]; + if (DomHandler.hasClass(focusCell, 'p-disabled')) { + navigation.current = { backward: true }; + navBackward(event); + } else { + focusCell.tabIndex = '0'; + focusCell.focus(); + } + } else { navigation.current = { backward: true }; navBackward(event); } - else { - focusCell.tabIndex = '0'; - focusCell.focus(); + event.preventDefault(); + break; + } + + //left arrow + case 37: { + cellContent.tabIndex = '-1'; + let prevCell = cell.previousElementSibling; + if (prevCell) { + let focusCell = prevCell.children[0]; + if (DomHandler.hasClass(focusCell, 'p-disabled')) { + navigateToMonth(true, groupIndex, event); + } else { + focusCell.tabIndex = '0'; + focusCell.focus(); + } + } else { + navigateToMonth(true, groupIndex, event); } + event.preventDefault(); + break; } - else { + + //right arrow + case 39: { + cellContent.tabIndex = '-1'; + let nextCell = cell.nextElementSibling; + if (nextCell) { + let focusCell = nextCell.children[0]; + if (DomHandler.hasClass(focusCell, 'p-disabled')) { + navigateToMonth(false, groupIndex, event); + } else { + focusCell.tabIndex = '0'; + focusCell.focus(); + } + } else { + navigateToMonth(false, groupIndex, event); + } + event.preventDefault(); + break; + } + + //enter + case 13: { + onDateSelect(event, date); + event.preventDefault(); + break; + } + + //escape + case 27: { + hide(null, reFocusInputField); + event.preventDefault(); + break; + } + + //tab + case 9: { + trapFocus(event); + break; + } + + default: + //no op + break; + } + }; + + const navigateToMonth = (prev, groupIndex, event) => { + if (prev) { + if (props.numberOfMonths === 1 || groupIndex === 0) { navigation.current = { backward: true }; navBackward(event); + } else { + const prevMonthContainer = overlayRef.current.children[groupIndex - 1]; + const cells = DomHandler.find(prevMonthContainer, '.p-datepicker-calendar td span:not(.p-disabled)'); + const focusCell = cells[cells.length - 1]; + focusCell.tabIndex = '0'; + focusCell.focus(); + } + } else { + if (props.numberOfMonths === 1 || groupIndex === props.numberOfMonths - 1) { + navigation.current = { backward: false }; + navForward(event); + } else { + const nextMonthContainer = overlayRef.current.children[groupIndex + 1]; + const focusCell = DomHandler.findSingle(nextMonthContainer, '.p-datepicker-calendar td span:not(.p-disabled)'); + focusCell.tabIndex = '0'; + focusCell.focus(); } - event.preventDefault(); - break; } + }; - //left arrow - case 37: { - cellContent.tabIndex = '-1'; - let prevCell = cell.previousElementSibling; - if (prevCell) { - let focusCell = prevCell.children[0]; - if (DomHandler.hasClass(focusCell, 'p-disabled')) { - navigateToMonth(true, groupIndex, event); + const onMonthCellKeydown = (event, index) => { + const cell = event.currentTarget; + + switch (event.which) { + //arrows + case 38: + case 40: { + cell.tabIndex = '-1'; + const cells = cell.parentElement.children; + const cellIndex = DomHandler.index(cell); + const nextCell = cells[event.which === 40 ? cellIndex + 3 : cellIndex - 3]; + if (nextCell) { + nextCell.tabIndex = '0'; + nextCell.focus(); } - else { - focusCell.tabIndex = '0'; - focusCell.focus(); - } - } - else { - navigateToMonth(true, groupIndex, event); + event.preventDefault(); + break; } - event.preventDefault(); - break; - } - //right arrow - case 39: { - cellContent.tabIndex = '-1'; - let nextCell = cell.nextElementSibling; - if (nextCell) { - let focusCell = nextCell.children[0]; - if (DomHandler.hasClass(focusCell, 'p-disabled')) { - navigateToMonth(false, groupIndex, event); + //left arrow + case 37: { + cell.tabIndex = '-1'; + const prevCell = cell.previousElementSibling; + if (prevCell) { + prevCell.tabIndex = '0'; + prevCell.focus(); } - else { - focusCell.tabIndex = '0'; - focusCell.focus(); + event.preventDefault(); + break; + } + + //right arrow + case 39: { + cell.tabIndex = '-1'; + const nextCell = cell.nextElementSibling; + if (nextCell) { + nextCell.tabIndex = '0'; + nextCell.focus(); } + event.preventDefault(); + break; } - else { - navigateToMonth(false, groupIndex, event); + + //enter + case 13: { + onMonthSelect(event, index); + event.preventDefault(); + break; } - event.preventDefault(); - break; + + //escape + case 27: { + hide(null, reFocusInputField); + event.preventDefault(); + break; + } + + //tab + case 9: { + trapFocus(event); + break; + } + + default: + //no op + break; } + }; - //enter - case 13: { - onDateSelect(event, date); + const onDateSelect = (event, dateMeta, timeMeta) => { + if (props.disabled || !dateMeta.selectable) { event.preventDefault(); - break; + return; } - //escape - case 27: { - hide(null, reFocusInputField) - event.preventDefault(); - break; - } - - //tab - case 9: { - trapFocus(event); - break; - } - - default: - //no op - break; - } - } - - const navigateToMonth = (prev, groupIndex, event) => { - if (prev) { - if (props.numberOfMonths === 1 || (groupIndex === 0)) { - navigation.current = { backward: true }; - navBackward(event); - } - else { - const prevMonthContainer = overlayRef.current.children[groupIndex - 1]; - const cells = DomHandler.find(prevMonthContainer, '.p-datepicker-calendar td span:not(.p-disabled)'); - const focusCell = cells[cells.length - 1]; - focusCell.tabIndex = '0'; - focusCell.focus(); - } - } - else { - if (props.numberOfMonths === 1 || (groupIndex === props.numberOfMonths - 1)) { - navigation.current = { backward: false }; - navForward(event); - } - else { - const nextMonthContainer = overlayRef.current.children[groupIndex + 1]; - const focusCell = DomHandler.findSingle(nextMonthContainer, '.p-datepicker-calendar td span:not(.p-disabled)'); - focusCell.tabIndex = '0'; - focusCell.focus(); - } - } - } - - - const onMonthCellKeydown = (event, index) => { - const cell = event.currentTarget; - - switch (event.which) { - //arrows - case 38: - case 40: { - cell.tabIndex = '-1'; - const cells = cell.parentElement.children; - const cellIndex = DomHandler.index(cell); - const nextCell = cells[event.which === 40 ? cellIndex + 3 : cellIndex - 3]; - if (nextCell) { - nextCell.tabIndex = '0'; - nextCell.focus(); + DomHandler.find(overlayRef.current, '.p-datepicker-calendar td span:not(.p-disabled)').forEach((cell) => (cell.tabIndex = -1)); + event.currentTarget.focus(); + + if (isMultipleSelection()) { + if (isSelected(dateMeta)) { + let value = props.value.filter((date, i) => { + return !isDateEquals(date, dateMeta); + }); + updateModel(event, value); + updateInputfield(value); + } else if (!props.maxDateCount || !props.value || props.maxDateCount > props.value.length) { + selectDate(event, dateMeta, timeMeta); } - event.preventDefault(); - break; + } else { + selectDate(event, dateMeta, timeMeta); } - //left arrow - case 37: { - cell.tabIndex = '-1'; - const prevCell = cell.previousElementSibling; - if (prevCell) { - prevCell.tabIndex = '0'; - prevCell.focus(); + if (!props.inline && isSingleSelection() && (!props.showTime || props.hideOnDateTimeSelect)) { + setTimeout(() => { + hide('dateselect'); + }, 100); + + if (touchUIMask.current) { + disableModality(); } - event.preventDefault(); - break; } - //right arrow - case 39: { - cell.tabIndex = '-1'; - const nextCell = cell.nextElementSibling; - if (nextCell) { - nextCell.tabIndex = '0'; - nextCell.focus(); + event.preventDefault(); + }; + + const selectTime = (date, timeMeta) => { + if (props.showTime) { + let hours, minutes, seconds, milliseconds; + + if (timeMeta) { + ({ hours, minutes, seconds, milliseconds } = timeMeta); + } else { + let time = getCurrentDateTime(); + [hours, minutes, seconds, milliseconds] = [time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds()]; } - event.preventDefault(); - break; - } - //enter - case 13: { - onMonthSelect(event, index); - event.preventDefault(); - break; + date.setHours(hours); + date.setMinutes(minutes); + date.setSeconds(seconds); + date.setMilliseconds(milliseconds); } + }; - //escape - case 27: { - hide(null, reFocusInputField); - event.preventDefault(); - break; + const selectDate = (event, dateMeta, timeMeta) => { + let date = new Date(dateMeta.year, dateMeta.month, dateMeta.day); + + selectTime(date, timeMeta); + + if (props.minDate && props.minDate > date) { + date = props.minDate; } - //tab - case 9: { - trapFocus(event); - break; + if (props.maxDate && props.maxDate < date) { + date = props.maxDate; } - default: - //no op - break; - } - } + let selectedValues = date; - const onDateSelect = (event, dateMeta, timeMeta) => { - if (props.disabled || !dateMeta.selectable) { - event.preventDefault(); - return; - } + if (isSingleSelection()) { + updateModel(event, date); + } else if (isMultipleSelection()) { + selectedValues = props.value ? [...props.value, date] : [date]; + updateModel(event, selectedValues); + } else if (isRangeSelection()) { + if (props.value && props.value.length) { + let startDate = props.value[0]; + let endDate = props.value[1]; + + if (!endDate) { + if (date.getTime() >= startDate.getTime()) { + endDate = date; + } else { + endDate = startDate; + startDate = date; + } + } else { + startDate = date; + endDate = null; + } - DomHandler.find(overlayRef.current, '.p-datepicker-calendar td span:not(.p-disabled)').forEach(cell => cell.tabIndex = -1); - event.currentTarget.focus(); + selectedValues = [startDate, endDate]; + updateModel(event, selectedValues); + } else { + selectedValues = [date, null]; + updateModel(event, selectedValues); + } + } - if (isMultipleSelection()) { - if (isSelected(dateMeta)) { - let value = props.value.filter((date, i) => { - return !isDateEquals(date, dateMeta); + if (props.onSelect) { + props.onSelect({ + originalEvent: event, + value: date }); - updateModel(event, value); - updateInputfield(value); - } - else if (!props.maxDateCount || !props.value || props.maxDateCount > props.value.length) { - selectDate(event, dateMeta, timeMeta); } - } - else { - selectDate(event, dateMeta, timeMeta); - } - if (!props.inline && isSingleSelection() && (!props.showTime || props.hideOnDateTimeSelect)) { - setTimeout(() => { - hide('dateselect'); - }, 100); + updateInputfield(selectedValues); + }; - if (touchUIMask.current) { - disableModality(); - } - } + const decrementDecade = () => { + const _currentYear = currentYear - 10; + setCurrentYear(_currentYear); + return _currentYear; + }; + + const incrementDecade = () => { + const _currentYear = currentYear + 10; + setCurrentYear(_currentYear); + return _currentYear; + }; + + const switchToMonthView = (event) => { + setCurrentView('month'); + event.preventDefault(); + }; - event.preventDefault(); - } + const switchToYearView = (event) => { + setCurrentView('year'); + event.preventDefault(); + }; - const selectTime = (date, timeMeta) => { - if (props.showTime) { - let hours, minutes, seconds, milliseconds; + const onMonthSelect = (event, month) => { + if (props.view === 'month') { + onDateSelect(event, { year: currentYear, month: month, day: 1, selectable: true }); + event.preventDefault(); + } else { + setCurrentMonth(month); + createMonthsMeta(month, currentYear); + const currentDate = new Date(getCurrentDateTime().getTime()); + currentDate.setDate(1); // #2948 always set to 1st of month + currentDate.setMonth(month); + currentDate.setYear(currentYear); - if (timeMeta) { - ({ hours, minutes, seconds, milliseconds } = timeMeta); - } - else { - let time = getCurrentDateTime(); - [hours, minutes, seconds, milliseconds] = [time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds()]; + setViewDateState(currentDate); + setCurrentView('date'); + props.onMonthChange && props.onMonthChange({ month: month + 1, year: currentYear }); } + }; - date.setHours(hours); - date.setMinutes(minutes); - date.setSeconds(seconds); - date.setMilliseconds(milliseconds); - } - } - - const selectDate = (event, dateMeta, timeMeta) => { - let date = new Date(dateMeta.year, dateMeta.month, dateMeta.day); + const onYearSelect = (event, year) => { + if (props.view === 'year') { + onDateSelect(event, { year: year, month: 0, day: 1, selectable: true }); + } else { + setCurrentYear(year); + setCurrentView('month'); + props.onMonthChange && props.onMonthChange({ month: currentMonth + 1, year: year }); + } + }; - selectTime(date, timeMeta); + const updateModel = (event, value) => { + if (props.onChange) { + const newValue = value && value instanceof Date ? new Date(value.getTime()) : value; + viewStateChanged.current = true; - if (props.minDate && props.minDate > date) { - date = props.minDate; - } + props.onChange({ + originalEvent: event, + value: newValue, + stopPropagation: () => {}, + preventDefault: () => {}, + target: { + name: props.name, + id: props.id, + value: newValue + } + }); + } + }; - if (props.maxDate && props.maxDate < date) { - date = props.maxDate; - } + const show = (type) => { + if (props.onVisibleChange) { + props.onVisibleChange({ + visible: true, + type + }); + } else { + setOverlayVisibleState(true); + overlayEventListener.current = (e) => { + if (!isOutsideClicked(e)) { + isOverlayClicked.current = true; + } + }; - let selectedValues = date; + OverlayService.on('overlay-click', overlayEventListener.current); + } + }; - if (isSingleSelection()) { - updateModel(event, date); - } - else if (isMultipleSelection()) { - selectedValues = props.value ? [...props.value, date] : [date]; - updateModel(event, selectedValues); - } - else if (isRangeSelection()) { - if (props.value && props.value.length) { - let startDate = props.value[0]; - let endDate = props.value[1]; + const hide = (type, callback) => { + const _hideCallback = () => { + viewStateChanged.current = false; + ignoreFocusFunctionality.current = false; + isOverlayClicked.current = false; - if (!endDate) { - if (date.getTime() >= startDate.getTime()) { - endDate = date; - } - else { - endDate = startDate; - startDate = date; - } - } - else { - startDate = date; - endDate = null; - } + callback && callback(); - selectedValues = [startDate, endDate]; - updateModel(event, selectedValues); + OverlayService.off('overlay-click', overlayEventListener.current); + overlayEventListener.current = null; + }; + + props.touchUI && disableModality(); + + if (props.onVisibleChange) { + props.onVisibleChange({ + visible: false, + type, + callback: _hideCallback + }); + } else { + setOverlayVisibleState(false); + _hideCallback(); } - else { - selectedValues = [date, null]; - updateModel(event, selectedValues); + }; + + const onOverlayEnter = () => { + if (props.autoZIndex) { + const key = props.touchUI ? 'modal' : 'overlay'; + ZIndexUtils.set(key, overlayRef.current, PrimeReact.autoZIndex, props.baseZIndex || PrimeReact.zIndex[key]); } - } - if (props.onSelect) { - props.onSelect({ - originalEvent: event, - value: date - }); - } + alignOverlay(); + }; - updateInputfield(selectedValues); - } + const onOverlayEntered = () => { + bindOverlayListener(); + props.onShow && props.onShow(); + }; - const decrementDecade = () => { - const _currentYear = currentYear - 10; - setCurrentYear(_currentYear); - return _currentYear; - } + const onOverlayExit = () => { + unbindOverlayListener(); + }; - const incrementDecade = () => { - const _currentYear = currentYear + 10; - setCurrentYear(_currentYear); - return _currentYear; - } + const onOverlayExited = () => { + ZIndexUtils.clear(overlayRef.current); - const switchToMonthView = (event) => { - setCurrentView('month') - event.preventDefault(); - } + props.onHide && props.onHide(); + }; + const appendDisabled = () => { + return props.appendTo === 'self' || props.inline; + }; - const switchToYearView = (event) => { - setCurrentView('year'); - event.preventDefault(); - } + const alignOverlay = () => { + if (props.touchUI) { + enableModality(); + } else if (overlayRef && overlayRef.current && inputRef && inputRef.current) { + DomHandler.alignOverlay(overlayRef.current, inputRef.current, props.appendTo || PrimeReact.appendTo); - const onMonthSelect = (event, month) => { - if (props.view === 'month') { - onDateSelect(event, { year: currentYear, month: month, day: 1, selectable: true }); - event.preventDefault(); - } - else { - setCurrentMonth(month); - createMonthsMeta(month, currentYear); - const currentDate = new Date(getCurrentDateTime().getTime()); - currentDate.setDate(1); // #2948 always set to 1st of month - currentDate.setMonth(month); - currentDate.setYear(currentYear); - - setViewDateState(currentDate); - setCurrentView('date'); - props.onMonthChange && props.onMonthChange({ month: month + 1, year: currentYear }); - } - } - - const onYearSelect = (event, year) => { - if (props.view === 'year') { - onDateSelect(event, { year: year, month: 0, day: 1, selectable: true }); - } - else { - setCurrentYear(year); - setCurrentView('month'); - props.onMonthChange && props.onMonthChange({ month: currentMonth + 1, year: year }); - } - } - - const updateModel = (event, value) => { - if (props.onChange) { - const newValue = (value && value instanceof Date) ? new Date(value.getTime()) : value; - viewStateChanged.current = true; - - props.onChange({ - originalEvent: event, - value: newValue, - stopPropagation: () => { }, - preventDefault: () => { }, - target: { - name: props.name, - id: props.id, - value: newValue - } - }); - } - } - - const show = (type) => { - if (props.onVisibleChange) { - props.onVisibleChange({ - visible: true, - type - }); - } - else { - setOverlayVisibleState(true); - overlayEventListener.current = (e) => { - if (!isOutsideClicked(e)) { - isOverlayClicked.current = true; + if (appendDisabled()) { + DomHandler.relativePosition(overlayRef.current, inputRef.current); + } else { + if (currentView === 'date') { + overlayRef.current.style.width = DomHandler.getOuterWidth(overlayRef.current) + 'px'; + overlayRef.current.style.minWidth = DomHandler.getOuterWidth(inputRef.current) + 'px'; + } else { + overlayRef.current.style.width = DomHandler.getOuterWidth(inputRef.current) + 'px'; + } + + DomHandler.absolutePosition(overlayRef.current, inputRef.current); } - }; + } + }; - OverlayService.on('overlay-click', overlayEventListener.current); - } - } + const enableModality = () => { + if (!touchUIMask.current) { + touchUIMask.current = document.createElement('div'); + touchUIMask.current.style.zIndex = String(ZIndexUtils.get(overlayRef.current) - 1); + DomHandler.addMultipleClasses(touchUIMask.current, 'p-component-overlay p-datepicker-mask p-datepicker-mask-scrollblocker p-component-overlay-enter'); - const hide = (type, callback) => { - const _hideCallback = () => { - viewStateChanged.current = false; - ignoreFocusFunctionality.current = false; - isOverlayClicked.current = false; + touchUIMaskClickListener.current = () => { + disableModality(); + hide(); + }; + touchUIMask.current.addEventListener('click', touchUIMaskClickListener.current); - callback && callback(); + document.body.appendChild(touchUIMask.current); + DomHandler.addClass(document.body, 'p-overflow-hidden'); + } + }; - OverlayService.off('overlay-click', overlayEventListener.current); - overlayEventListener.current = null; + const disableModality = () => { + if (touchUIMask.current) { + DomHandler.addClass(touchUIMask.current, 'p-component-overlay-leave'); + touchUIMask.current.addEventListener('animationend', () => { + destroyMask(); + }); + } }; - props.touchUI && disableModality(); + const destroyMask = () => { + if (touchUIMask.current) { + touchUIMask.current.removeEventListener('click', touchUIMaskClickListener.current); + touchUIMaskClickListener.current = null; + document.body.removeChild(touchUIMask.current); + touchUIMask.current = null; + } + + let bodyChildren = document.body.children; + let hasBlockerMasks; + for (let i = 0; i < bodyChildren.length; i++) { + let bodyChild = bodyChildren[i]; + if (DomHandler.hasClass(bodyChild, 'p-datepicker-mask-scrollblocker')) { + hasBlockerMasks = true; + break; + } + } - if (props.onVisibleChange) { - props.onVisibleChange({ - visible: false, - type, - callback: _hideCallback - }); - } - else { - setOverlayVisibleState(false); - _hideCallback(); - } - } + if (!hasBlockerMasks) { + DomHandler.removeClass(document.body, 'p-overflow-hidden'); + } + }; - const onOverlayEnter = () => { - if (props.autoZIndex) { - const key = props.touchUI ? 'modal' : 'overlay'; - ZIndexUtils.set(key, overlayRef.current, PrimeReact.autoZIndex, props.baseZIndex || PrimeReact.zIndex[key]); - } + const isOutsideClicked = (event) => { + return elementRef.current && !(elementRef.current.isSameNode(event.target) || isNavIconClicked(event.target) || elementRef.current.contains(event.target) || (overlayRef.current && overlayRef.current.contains(event.target))); + }; - alignOverlay(); - } + const isNavIconClicked = (target) => { + return DomHandler.hasClass(target, 'p-datepicker-prev') || DomHandler.hasClass(target, 'p-datepicker-prev-icon') || DomHandler.hasClass(target, 'p-datepicker-next') || DomHandler.hasClass(target, 'p-datepicker-next-icon'); + }; - const onOverlayEntered = () => { - bindOverlayListener(); - props.onShow && props.onShow(); - } + const getFirstDayOfMonthIndex = (month, year) => { + let day = new Date(); + day.setDate(1); + day.setMonth(month); + day.setFullYear(year); - const onOverlayExit = () => { - unbindOverlayListener(); - } + let dayIndex = day.getDay() + getSundayIndex(); + return dayIndex >= 7 ? dayIndex - 7 : dayIndex; + }; - const onOverlayExited = () => { - ZIndexUtils.clear(overlayRef.current); + const getDaysCountInMonth = (month, year) => { + return 32 - daylightSavingAdjust(new Date(year, month, 32)).getDate(); + }; - props.onHide && props.onHide(); - } + const getDaysCountInPrevMonth = (month, year) => { + let prev = getPreviousMonthAndYear(month, year); + return getDaysCountInMonth(prev.month, prev.year); + }; - const appendDisabled = () => { - return props.appendTo === 'self' || props.inline; - } + const daylightSavingAdjust = (date) => { + if (!date) { + return null; + } - const alignOverlay = () => { - if (props.touchUI) { - enableModality(); - } + date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0); - else if (overlayRef && overlayRef.current && inputRef && inputRef.current) { - DomHandler.alignOverlay(overlayRef.current, inputRef.current, props.appendTo || PrimeReact.appendTo); + return date; + }; - if (appendDisabled()) { - DomHandler.relativePosition(overlayRef.current, inputRef.current); - } - else { - if (currentView === 'date') { - overlayRef.current.style.width = DomHandler.getOuterWidth(overlayRef.current) + 'px'; - overlayRef.current.style.minWidth = DomHandler.getOuterWidth(inputRef.current) + 'px'; - } - else { - overlayRef.current.style.width = DomHandler.getOuterWidth(inputRef.current) + 'px'; - } + const getPreviousMonthAndYear = (month, year) => { + let m, y; - DomHandler.absolutePosition(overlayRef.current, inputRef.current); + if (month === 0) { + m = 11; + y = year - 1; + } else { + m = month - 1; + y = year; } - } - } - const enableModality = () => { - if (!touchUIMask.current) { - touchUIMask.current = document.createElement('div'); - touchUIMask.current.style.zIndex = String(ZIndexUtils.get(overlayRef.current) - 1); - DomHandler.addMultipleClasses(touchUIMask.current, 'p-component-overlay p-datepicker-mask p-datepicker-mask-scrollblocker p-component-overlay-enter'); + return { month: m, year: y }; + }; - touchUIMaskClickListener.current = () => { - disableModality(); - hide(); - }; - touchUIMask.current.addEventListener('click', touchUIMaskClickListener.current); - - document.body.appendChild(touchUIMask.current); - DomHandler.addClass(document.body, 'p-overflow-hidden'); - } - } - - const disableModality = () => { - if (touchUIMask.current) { - DomHandler.addClass(touchUIMask.current, 'p-component-overlay-leave'); - touchUIMask.current.addEventListener('animationend', () => { - destroyMask(); - }); - } - } - - const destroyMask = () => { - if (touchUIMask.current) { - touchUIMask.current.removeEventListener('click', touchUIMaskClickListener.current); - touchUIMaskClickListener.current = null; - document.body.removeChild(touchUIMask.current); - touchUIMask.current = null; - } - - let bodyChildren = document.body.children; - let hasBlockerMasks; - for (let i = 0; i < bodyChildren.length; i++) { - let bodyChild = bodyChildren[i]; - if (DomHandler.hasClass(bodyChild, 'p-datepicker-mask-scrollblocker')) { - hasBlockerMasks = true; - break; - } - } - - if (!hasBlockerMasks) { - DomHandler.removeClass(document.body, 'p-overflow-hidden'); - } - } - - const isOutsideClicked = (event) => { - return elementRef.current && !(elementRef.current.isSameNode(event.target) || isNavIconClicked(event.target) || - elementRef.current.contains(event.target) || (overlayRef.current && overlayRef.current.contains(event.target))); - } - - const isNavIconClicked = (target) => { - return (DomHandler.hasClass(target, 'p-datepicker-prev') || DomHandler.hasClass(target, 'p-datepicker-prev-icon') - || DomHandler.hasClass(target, 'p-datepicker-next') || DomHandler.hasClass(target, 'p-datepicker-next-icon')); - } - - const getFirstDayOfMonthIndex = (month, year) => { - let day = new Date(); - day.setDate(1); - day.setMonth(month); - day.setFullYear(year); - - let dayIndex = day.getDay() + getSundayIndex(); - return dayIndex >= 7 ? dayIndex - 7 : dayIndex; - } - - const getDaysCountInMonth = (month, year) => { - return 32 - daylightSavingAdjust(new Date(year, month, 32)).getDate(); - } - - const getDaysCountInPrevMonth = (month, year) => { - let prev = getPreviousMonthAndYear(month, year); - return getDaysCountInMonth(prev.month, prev.year); - } - - const daylightSavingAdjust = (date) => { - if (!date) { - return null; - } - - date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0); - - return date; - } - - const getPreviousMonthAndYear = (month, year) => { - let m, y; - - if (month === 0) { - m = 11; - y = year - 1; - } - else { - m = month - 1; - y = year; - } - - return { 'month': m, 'year': y }; - } - - const getNextMonthAndYear = (month, year) => { - let m, y; - - if (month === 11) { - m = 0; - y = year + 1; - } - else { - m = month + 1; - y = year; - } - - return { 'month': m, 'year': y }; - } - - const getSundayIndex = () => { - const firstDayOfWeek = localeOption('firstDayOfWeek', props.locale); - return firstDayOfWeek > 0 ? 7 - firstDayOfWeek : 0; - } - - const createWeekDaysMeta = () => { - let weekDays = []; - let { firstDayOfWeek: dayIndex, dayNamesMin } = localeOptions(props.locale); - for (let i = 0; i < 7; i++) { - weekDays.push(dayNamesMin[dayIndex]); - dayIndex = (dayIndex === 6) ? 0 : ++dayIndex; - } - - return weekDays; - } - - const createMonthsMeta = (month, year) => { - let months = []; - for (let i = 0; i < props.numberOfMonths; i++) { - let m = month + i; - let y = year; - if (m > 11) { - m = m % 11 - 1; + const getNextMonthAndYear = (month, year) => { + let m, y; + + if (month === 11) { + m = 0; y = year + 1; + } else { + m = month + 1; + y = year; } - months.push(createMonthMeta(m, y)); - } + return { month: m, year: y }; + }; - return months; - } + const getSundayIndex = () => { + const firstDayOfWeek = localeOption('firstDayOfWeek', props.locale); + return firstDayOfWeek > 0 ? 7 - firstDayOfWeek : 0; + }; - const createMonthMeta = (month, year) => { - let dates = []; - let firstDay = getFirstDayOfMonthIndex(month, year); - let daysLength = getDaysCountInMonth(month, year); - let prevMonthDaysLength = getDaysCountInPrevMonth(month, year); - let dayNo = 1; - let today = new Date(); - let weekNumbers = []; - let monthRows = Math.ceil((daysLength + firstDay) / 7); + const createWeekDaysMeta = () => { + let weekDays = []; + let { firstDayOfWeek: dayIndex, dayNamesMin } = localeOptions(props.locale); + for (let i = 0; i < 7; i++) { + weekDays.push(dayNamesMin[dayIndex]); + dayIndex = dayIndex === 6 ? 0 : ++dayIndex; + } - for (let i = 0; i < monthRows; i++) { - let week = []; + return weekDays; + }; - if (i === 0) { - for (let j = (prevMonthDaysLength - firstDay + 1); j <= prevMonthDaysLength; j++) { - let prev = getPreviousMonthAndYear(month, year); - week.push({ - day: j, month: prev.month, year: prev.year, otherMonth: true, - today: isToday(today, j, prev.month, prev.year), selectable: isSelectable(j, prev.month, prev.year, true) - }); + const createMonthsMeta = (month, year) => { + let months = []; + for (let i = 0; i < props.numberOfMonths; i++) { + let m = month + i; + let y = year; + if (m > 11) { + m = (m % 11) - 1; + y = year + 1; } - let remainingDaysLength = 7 - week.length; - for (let j = 0; j < remainingDaysLength; j++) { - week.push({ - day: dayNo, month: month, year: year, today: isToday(today, dayNo, month, year), - selectable: isSelectable(dayNo, month, year, false) - }); - dayNo++; - } + months.push(createMonthMeta(m, y)); } - else { - for (let j = 0; j < 7; j++) { - if (dayNo > daysLength) { - let next = getNextMonthAndYear(month, year); + + return months; + }; + + const createMonthMeta = (month, year) => { + let dates = []; + let firstDay = getFirstDayOfMonthIndex(month, year); + let daysLength = getDaysCountInMonth(month, year); + let prevMonthDaysLength = getDaysCountInPrevMonth(month, year); + let dayNo = 1; + let today = new Date(); + let weekNumbers = []; + let monthRows = Math.ceil((daysLength + firstDay) / 7); + + for (let i = 0; i < monthRows; i++) { + let week = []; + + if (i === 0) { + for (let j = prevMonthDaysLength - firstDay + 1; j <= prevMonthDaysLength; j++) { + let prev = getPreviousMonthAndYear(month, year); week.push({ - day: dayNo - daysLength, month: next.month, year: next.year, otherMonth: true, - today: isToday(today, dayNo - daysLength, next.month, next.year), - selectable: isSelectable((dayNo - daysLength), next.month, next.year, true) + day: j, + month: prev.month, + year: prev.year, + otherMonth: true, + today: isToday(today, j, prev.month, prev.year), + selectable: isSelectable(j, prev.month, prev.year, true) }); } - else { + + let remainingDaysLength = 7 - week.length; + for (let j = 0; j < remainingDaysLength; j++) { week.push({ - day: dayNo, month: month, year: year, today: isToday(today, dayNo, month, year), + day: dayNo, + month: month, + year: year, + today: isToday(today, dayNo, month, year), selectable: isSelectable(dayNo, month, year, false) }); + dayNo++; + } + } else { + for (let j = 0; j < 7; j++) { + if (dayNo > daysLength) { + let next = getNextMonthAndYear(month, year); + week.push({ + day: dayNo - daysLength, + month: next.month, + year: next.year, + otherMonth: true, + today: isToday(today, dayNo - daysLength, next.month, next.year), + selectable: isSelectable(dayNo - daysLength, next.month, next.year, true) + }); + } else { + week.push({ + day: dayNo, + month: month, + year: year, + today: isToday(today, dayNo, month, year), + selectable: isSelectable(dayNo, month, year, false) + }); + } + + dayNo++; } + } - dayNo++; + if (props.showWeek) { + weekNumbers.push(getWeekNumber(new Date(week[0].year, week[0].month, week[0].day))); } + + dates.push(week); } - if (props.showWeek) { - weekNumbers.push(getWeekNumber(new Date(week[0].year, week[0].month, week[0].day))); - } - - dates.push(week); - } - - return { - month: month, - year: year, - dates: dates, - weekNumbers: weekNumbers - } - } - - const getWeekNumber = (date) => { - let checkDate = new Date(date.getTime()); - checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); - let time = checkDate.getTime(); - checkDate.setMonth(0); - checkDate.setDate(1); - return Math.floor(Math.round((time - checkDate.getTime()) / 86400000) / 7) + 1; - } - - const isSelectable = (day, month, year, otherMonth) => { - let validMin = true; - let validMax = true; - let validDate = true; - let validDay = true; - let validMonth = true; - - if (props.minDate) { - if (props.minDate.getFullYear() > year) { - validMin = false; - } - else if (props.minDate.getFullYear() === year) { - if (props.minDate.getMonth() > month) { + return { + month: month, + year: year, + dates: dates, + weekNumbers: weekNumbers + }; + }; + + const getWeekNumber = (date) => { + let checkDate = new Date(date.getTime()); + checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); + let time = checkDate.getTime(); + checkDate.setMonth(0); + checkDate.setDate(1); + return Math.floor(Math.round((time - checkDate.getTime()) / 86400000) / 7) + 1; + }; + + const isSelectable = (day, month, year, otherMonth) => { + let validMin = true; + let validMax = true; + let validDate = true; + let validDay = true; + let validMonth = true; + + if (props.minDate) { + if (props.minDate.getFullYear() > year) { validMin = false; - } - else if (props.minDate.getMonth() === month) { - if (props.minDate.getDate() > day) { + } else if (props.minDate.getFullYear() === year) { + if (props.minDate.getMonth() > month) { validMin = false; + } else if (props.minDate.getMonth() === month) { + if (props.minDate.getDate() > day) { + validMin = false; + } } } } - } - if (props.maxDate) { - if (props.maxDate.getFullYear() < year) { - validMax = false; - } - else if (props.maxDate.getFullYear() === year) { - if (props.maxDate.getMonth() < month) { + if (props.maxDate) { + if (props.maxDate.getFullYear() < year) { validMax = false; - } - else if (props.maxDate.getMonth() === month) { - if (props.maxDate.getDate() < day) { + } else if (props.maxDate.getFullYear() === year) { + if (props.maxDate.getMonth() < month) { validMax = false; + } else if (props.maxDate.getMonth() === month) { + if (props.maxDate.getDate() < day) { + validMax = false; + } } } } - } - if (props.disabledDates) { - validDate = !isDateDisabled(day, month, year); - } + if (props.disabledDates) { + validDate = !isDateDisabled(day, month, year); + } - if (props.disabledDays) { - validDay = !isDayDisabled(day, month, year) - } + if (props.disabledDays) { + validDay = !isDayDisabled(day, month, year); + } - if (props.selectOtherMonths === false && otherMonth) { - validMonth = false; - } + if (props.selectOtherMonths === false && otherMonth) { + validMonth = false; + } - return validMin && validMax && validDate && validDay && validMonth; - } + return validMin && validMax && validDate && validDay && validMonth; + }; - const isSelectableTime = (value) => { - let validMin = true; - let validMax = true; + const isSelectableTime = (value) => { + let validMin = true; + let validMax = true; - if (props.minDate && props.minDate.toDateString() === value.toDateString()) { - if (props.minDate.getHours() > value.getHours()) { - validMin = false; - } - else if (props.minDate.getHours() === value.getHours()) { - if (props.minDate.getMinutes() > value.getMinutes()) { + if (props.minDate && props.minDate.toDateString() === value.toDateString()) { + if (props.minDate.getHours() > value.getHours()) { validMin = false; - } - else if (props.minDate.getMinutes() === value.getMinutes()) { - if (props.minDate.getSeconds() > value.getSeconds()) { + } else if (props.minDate.getHours() === value.getHours()) { + if (props.minDate.getMinutes() > value.getMinutes()) { validMin = false; - } - else if (props.minDate.getSeconds() === value.getSeconds()) { - if (props.minDate.getMilliseconds() > value.getMilliseconds()) { + } else if (props.minDate.getMinutes() === value.getMinutes()) { + if (props.minDate.getSeconds() > value.getSeconds()) { validMin = false; + } else if (props.minDate.getSeconds() === value.getSeconds()) { + if (props.minDate.getMilliseconds() > value.getMilliseconds()) { + validMin = false; + } } } } } - } - if (props.maxDate && props.maxDate.toDateString() === value.toDateString()) { - if (props.maxDate.getHours() < value.getHours()) { - validMax = false; - } - else if (props.maxDate.getHours() === value.getHours()) { - if (props.maxDate.getMinutes() < value.getMinutes()) { + if (props.maxDate && props.maxDate.toDateString() === value.toDateString()) { + if (props.maxDate.getHours() < value.getHours()) { validMax = false; - } - else if (props.maxDate.getMinutes() === value.getMinutes()) { - if (props.maxDate.getSeconds() < value.getSeconds()) { + } else if (props.maxDate.getHours() === value.getHours()) { + if (props.maxDate.getMinutes() < value.getMinutes()) { validMax = false; - } - else if (props.maxDate.getSeconds() === value.getSeconds()) { - if (props.maxDate.getMilliseconds() < value.getMilliseconds()) { + } else if (props.maxDate.getMinutes() === value.getMinutes()) { + if (props.maxDate.getSeconds() < value.getSeconds()) { validMax = false; + } else if (props.maxDate.getSeconds() === value.getSeconds()) { + if (props.maxDate.getMilliseconds() < value.getMilliseconds()) { + validMax = false; + } } } } } - } - return validMin && validMax; - } + return validMin && validMax; + }; - const isSelected = (dateMeta) => { - if (props.value) { - if (isSingleSelection()) { - return isDateEquals(props.value, dateMeta); - } - else if (isMultipleSelection()) { - let selected = false; - for (let date of props.value) { - selected = isDateEquals(date, dateMeta); - if (selected) { - break; + const isSelected = (dateMeta) => { + if (props.value) { + if (isSingleSelection()) { + return isDateEquals(props.value, dateMeta); + } else if (isMultipleSelection()) { + let selected = false; + for (let date of props.value) { + selected = isDateEquals(date, dateMeta); + if (selected) { + break; + } } - } - return selected; - } - else if (isRangeSelection()) { - if (props.value[1]) - return isDateEquals(props.value[0], dateMeta) || isDateEquals(props.value[1], dateMeta) || isDateBetween(props.value[0], props.value[1], dateMeta); - else { - return isDateEquals(props.value[0], dateMeta); + return selected; + } else if (isRangeSelection()) { + if (props.value[1]) return isDateEquals(props.value[0], dateMeta) || isDateEquals(props.value[1], dateMeta) || isDateBetween(props.value[0], props.value[1], dateMeta); + else { + return isDateEquals(props.value[0], dateMeta); + } } + } else { + return false; } - } - else { - return false; - } - } + }; - const isComparable = () => { - return props.value != null && typeof props.value !== 'string'; - } + const isComparable = () => { + return props.value != null && typeof props.value !== 'string'; + }; - const isMonthSelected = (month) => { - if (isComparable()) { - let value = isRangeSelection() ? props.value[0] : props.value; + const isMonthSelected = (month) => { + if (isComparable()) { + let value = isRangeSelection() ? props.value[0] : props.value; - return !isMultipleSelection() ? (value.getMonth() === month && value.getFullYear() === currentYear) : false; - } + return !isMultipleSelection() ? value.getMonth() === month && value.getFullYear() === currentYear : false; + } - return false; - } + return false; + }; - const isYearSelected = (year) => { - if (isComparable()) { - let value = isRangeSelection() ? props.value[0] : props.value; + const isYearSelected = (year) => { + if (isComparable()) { + let value = isRangeSelection() ? props.value[0] : props.value; - return !isMultipleSelection() && isComparable() ? (value.getFullYear() === year) : false; - } + return !isMultipleSelection() && isComparable() ? value.getFullYear() === year : false; + } - return false; - } + return false; + }; - const switchViewButtonDisabled = () => { - return props.numberOfMonths > 1 || props.disabled; - } + const switchViewButtonDisabled = () => { + return props.numberOfMonths > 1 || props.disabled; + }; - const isDateEquals = (value, dateMeta) => { - if (value && value instanceof Date) - return value.getDate() === dateMeta.day && value.getMonth() === dateMeta.month && value.getFullYear() === dateMeta.year; - else - return false; - } + const isDateEquals = (value, dateMeta) => { + if (value && value instanceof Date) return value.getDate() === dateMeta.day && value.getMonth() === dateMeta.month && value.getFullYear() === dateMeta.year; + else return false; + }; - const isDateBetween = (start, end, dateMeta) => { - let between = false; - if (start && end) { - let date = new Date(dateMeta.year, dateMeta.month, dateMeta.day); - return start.getTime() <= date.getTime() && end.getTime() >= date.getTime(); - } + const isDateBetween = (start, end, dateMeta) => { + let between = false; + if (start && end) { + let date = new Date(dateMeta.year, dateMeta.month, dateMeta.day); + return start.getTime() <= date.getTime() && end.getTime() >= date.getTime(); + } - return between; - } + return between; + }; - const isSingleSelection = () => { - return props.selectionMode === 'single'; - } + const isSingleSelection = () => { + return props.selectionMode === 'single'; + }; - const isRangeSelection = () => { - return props.selectionMode === 'range'; - } + const isRangeSelection = () => { + return props.selectionMode === 'range'; + }; - const isMultipleSelection = () => { - return props.selectionMode === 'multiple'; - } + const isMultipleSelection = () => { + return props.selectionMode === 'multiple'; + }; - const isToday = (today, day, month, year) => { - return today.getDate() === day && today.getMonth() === month && today.getFullYear() === year; - } + const isToday = (today, day, month, year) => { + return today.getDate() === day && today.getMonth() === month && today.getFullYear() === year; + }; - const isDateDisabled = (day, month, year) => { - return props.disabledDates ? props.disabledDates.some(d => d.getFullYear() === year && d.getMonth() === month && d.getDate() === day) : false; - } + const isDateDisabled = (day, month, year) => { + return props.disabledDates ? props.disabledDates.some((d) => d.getFullYear() === year && d.getMonth() === month && d.getDate() === day) : false; + }; - const isDayDisabled = (day, month, year) => { - if (props.disabledDays) { - let weekday = new Date(year, month, day); - let weekdayNumber = weekday.getDay(); + const isDayDisabled = (day, month, year) => { + if (props.disabledDays) { + let weekday = new Date(year, month, day); + let weekdayNumber = weekday.getDay(); - return props.disabledDays.indexOf(weekdayNumber) !== -1; - } + return props.disabledDays.indexOf(weekdayNumber) !== -1; + } - return false; - } + return false; + }; - const updateInputfield = (value) => { - if (!inputRef.current) { - return; - } + const updateInputfield = (value) => { + if (!inputRef.current) { + return; + } - let formattedValue = ''; + let formattedValue = ''; - if (value) { - try { - if (isSingleSelection()) { - formattedValue = isValidDate(value) ? formatDateTime(value) : ''; - } - else if (isMultipleSelection()) { - for (let i = 0; i < value.length; i++) { - let selectedValue = value[i]; - let dateAsString = isValidDate(selectedValue) ? formatDateTime(selectedValue) : ''; - formattedValue += dateAsString; - if (i !== (value.length - 1)) { - formattedValue += ', '; + if (value) { + try { + if (isSingleSelection()) { + formattedValue = isValidDate(value) ? formatDateTime(value) : ''; + } else if (isMultipleSelection()) { + for (let i = 0; i < value.length; i++) { + let selectedValue = value[i]; + let dateAsString = isValidDate(selectedValue) ? formatDateTime(selectedValue) : ''; + formattedValue += dateAsString; + if (i !== value.length - 1) { + formattedValue += ', '; + } + } + } else if (isRangeSelection()) { + if (value && value.length) { + let startDate = value[0]; + let endDate = value[1]; + + formattedValue = isValidDate(startDate) ? formatDateTime(startDate) : ''; + if (endDate) { + formattedValue += isValidDate(endDate) ? ' - ' + formatDateTime(endDate) : ''; + } } } + } catch (err) { + formattedValue = value; } - else if (isRangeSelection()) { - if (value && value.length) { - let startDate = value[0]; - let endDate = value[1]; + } + + inputRef.current.value = formattedValue; + }; + + const formatDateTime = (date) => { + let formattedValue = null; + if (date) { + if (props.timeOnly) { + formattedValue = formatTime(date); + } else { + formattedValue = formatDate(date, getDateFormat()); + if (props.showTime) { + formattedValue += ' ' + formatTime(date); + } + } + } - formattedValue = isValidDate(startDate) ? formatDateTime(startDate) : ''; - if (endDate) { - formattedValue += (isValidDate(endDate) ? ' - ' + formatDateTime(endDate) : ''); + return formattedValue; + }; + + const formatDate = (date, format) => { + if (!date) { + return ''; + } + + let iFormat; + const lookAhead = (match) => { + const matches = iFormat + 1 < format.length && format.charAt(iFormat + 1) === match; + if (matches) { + iFormat++; + } + return matches; + }, + formatNumber = (match, value, len) => { + let num = '' + value; + if (lookAhead(match)) { + while (num.length < len) { + num = '0' + num; + } + } + return num; + }, + formatName = (match, value, shortNames, longNames) => { + return lookAhead(match) ? longNames[value] : shortNames[value]; + }; + let output = ''; + let literal = false; + const { dayNamesShort, dayNames, monthNamesShort, monthNames } = localeOptions(props.locale); + + if (date) { + for (iFormat = 0; iFormat < format.length; iFormat++) { + if (literal) { + if (format.charAt(iFormat) === "'" && !lookAhead("'")) { + literal = false; + } else { + output += format.charAt(iFormat); + } + } else { + switch (format.charAt(iFormat)) { + case 'd': + output += formatNumber('d', date.getDate(), 2); + break; + case 'D': + output += formatName('D', date.getDay(), dayNamesShort, dayNames); + break; + case 'o': + output += formatNumber('o', Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3); + break; + case 'm': + output += formatNumber('m', date.getMonth() + 1, 2); + break; + case 'M': + output += formatName('M', date.getMonth(), monthNamesShort, monthNames); + break; + case 'y': + output += lookAhead('y') ? date.getFullYear() : (date.getFullYear() % 100 < 10 ? '0' : '') + (date.getFullYear() % 100); + break; + case '@': + output += date.getTime(); + break; + case '!': + output += date.getTime() * 10000 + ticksTo1970; + break; + case "'": + if (lookAhead("'")) { + output += "'"; + } else { + literal = true; + } + break; + default: + output += format.charAt(iFormat); } } } } - catch (err) { - formattedValue = value; + return output; + }; + + const formatTime = (date) => { + if (!date) { + return ''; + } + + let output = ''; + let hours = date.getHours(); + let minutes = date.getMinutes(); + let seconds = date.getSeconds(); + let milliseconds = date.getMilliseconds(); + + if (props.hourFormat === '12' && hours > 11 && hours !== 12) { + hours -= 12; } - } - inputRef.current.value = formattedValue; - } + if (props.hourFormat === '12') { + output += hours === 0 ? 12 : hours < 10 ? '0' + hours : hours; + } else { + output += hours < 10 ? '0' + hours : hours; + } + output += ':'; + output += minutes < 10 ? '0' + minutes : minutes; - const formatDateTime = (date) => { - let formattedValue = null; - if (date) { - if (props.timeOnly) { - formattedValue = formatTime(date); + if (props.showSeconds) { + output += ':'; + output += seconds < 10 ? '0' + seconds : seconds; + } + + if (props.showMillisec) { + output += '.'; + output += milliseconds < 100 ? (milliseconds < 10 ? '00' : '0') + milliseconds : milliseconds; + } + + if (props.hourFormat === '12') { + output += date.getHours() > 11 ? ' PM' : ' AM'; + } + + return output; + }; + + const parseValueFromString = (text) => { + if (!text || text.trim().length === 0) { + return null; + } + + let value; + + if (isSingleSelection()) { + value = parseDateTime(text); + } else if (isMultipleSelection()) { + let tokens = text.split(','); + value = []; + for (let token of tokens) { + value.push(parseDateTime(token.trim())); + } + } else if (isRangeSelection()) { + let tokens = text.split(' - '); + value = []; + for (let i = 0; i < tokens.length; i++) { + value[i] = parseDateTime(tokens[i].trim()); + } } - else { - formattedValue = formatDate(date, getDateFormat()); + + return value; + }; + + const parseDateTime = (text) => { + let date; + let parts = text.split(' '); + + if (props.timeOnly) { + date = new Date(); + populateTime(date, parts[0], parts[1]); + } else { if (props.showTime) { - formattedValue += ' ' + formatTime(date); + date = parseDate(parts[0], getDateFormat()); + populateTime(date, parts[1], parts[2]); + } else { + date = parseDate(text, getDateFormat()); } } - } - return formattedValue; - } + return date; + }; + + const populateTime = (value, timeString, ampm) => { + if (props.hourFormat === '12' && ampm !== 'PM' && ampm !== 'AM') { + throw new Error('Invalid Time'); + } + + let time = parseTime(timeString, ampm); + value.setHours(time.hour); + value.setMinutes(time.minute); + value.setSeconds(time.second); + value.setMilliseconds(time.millisecond); + }; - const formatDate = (date, format) => { - if (!date) { - return ''; - } + const parseTime = (value, ampm) => { + value = props.showMillisec ? value.replace('.', ':') : value; + let tokens = value.split(':'); + let validTokenLength = props.showSeconds ? 3 : 2; + validTokenLength = props.showMillisec ? validTokenLength + 1 : validTokenLength; - let iFormat; - const lookAhead = (match) => { - const matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match); - if (matches) { - iFormat++; + if (tokens.length !== validTokenLength || tokens[0].length !== 2 || tokens[1].length !== 2 || (props.showSeconds && tokens[2].length !== 2) || (props.showMillisec && tokens[3].length !== 3)) { + throw new Error('Invalid time'); } - return matches; - }, - formatNumber = (match, value, len) => { - let num = '' + value; - if (lookAhead(match)) { - while (num.length < len) { - num = '0' + num; - } + + let h = parseInt(tokens[0], 10); + let m = parseInt(tokens[1], 10); + let s = props.showSeconds ? parseInt(tokens[2], 10) : null; + let ms = props.showMillisec ? parseInt(tokens[3], 10) : null; + + if (isNaN(h) || isNaN(m) || h > 23 || m > 59 || (props.hourFormat === '12' && h > 12) || (props.showSeconds && (isNaN(s) || s > 59)) || (props.showMillisec && (isNaN(s) || s > 1000))) { + throw new Error('Invalid time'); + } else { + if (props.hourFormat === '12' && h !== 12 && ampm === 'PM') { + h += 12; } - return num; - }, - formatName = (match, value, shortNames, longNames) => { - return (lookAhead(match) ? longNames[value] : shortNames[value]); - }; - let output = ''; - let literal = false; - const { dayNamesShort, dayNames, monthNamesShort, monthNames } = localeOptions(props.locale); - if (date) { + return { hour: h, minute: m, second: s, millisecond: ms }; + } + }; + + // Ported from jquery-ui datepicker parseDate + const parseDate = (value, format) => { + if (format == null || value == null) { + throw new Error('Invalid arguments'); + } + + value = typeof value === 'object' ? value.toString() : value + ''; + if (value === '') { + return null; + } + + let iFormat, + dim, + extra, + iValue = 0, + shortYearCutoff = typeof props.shortYearCutoff !== 'string' ? props.shortYearCutoff : (new Date().getFullYear() % 100) + parseInt(props.shortYearCutoff, 10), + year = -1, + month = -1, + day = -1, + doy = -1, + literal = false, + date, + lookAhead = (match) => { + let matches = iFormat + 1 < format.length && format.charAt(iFormat + 1) === match; + if (matches) { + iFormat++; + } + return matches; + }, + getNumber = (match) => { + let isDoubled = lookAhead(match), + size = match === '@' ? 14 : match === '!' ? 20 : match === 'y' && isDoubled ? 4 : match === 'o' ? 3 : 2, + minSize = match === 'y' ? size : 1, + digits = new RegExp('^\\d{' + minSize + ',' + size + '}'), + num = value.substring(iValue).match(digits); + if (!num) { + throw new Error('Missing number at position ' + iValue); + } + iValue += num[0].length; + return parseInt(num[0], 10); + }, + getName = (match, shortNames, longNames) => { + let index = -1; + let arr = lookAhead(match) ? longNames : shortNames; + let names = []; + + for (let i = 0; i < arr.length; i++) { + names.push([i, arr[i]]); + } + names.sort((a, b) => { + return -(a[1].length - b[1].length); + }); + + for (let i = 0; i < names.length; i++) { + let name = names[i][1]; + if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) { + index = names[i][0]; + iValue += name.length; + break; + } + } + + if (index !== -1) { + return index + 1; + } else { + throw new Error('Unknown name at position ' + iValue); + } + }, + checkLiteral = () => { + if (value.charAt(iValue) !== format.charAt(iFormat)) { + throw new Error('Unexpected literal at position ' + iValue); + } + iValue++; + }; + + if (props.view === 'month') { + day = 1; + } + + const { dayNamesShort, dayNames, monthNamesShort, monthNames } = localeOptions(props.locale); + for (iFormat = 0; iFormat < format.length; iFormat++) { if (literal) { - if (format.charAt(iFormat) === '\'' && !lookAhead('\'')) { + if (format.charAt(iFormat) === "'" && !lookAhead("'")) { literal = false; } else { - output += format.charAt(iFormat); + checkLiteral(); } } else { switch (format.charAt(iFormat)) { case 'd': - output += formatNumber('d', date.getDate(), 2); + day = getNumber('d'); break; case 'D': - output += formatName('D', date.getDay(), dayNamesShort, dayNames); + getName('D', dayNamesShort, dayNames); break; case 'o': - output += formatNumber('o', - Math.round(( - new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() - - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3); + doy = getNumber('o'); break; case 'm': - output += formatNumber('m', date.getMonth() + 1, 2); + month = getNumber('m'); break; case 'M': - output += formatName('M', date.getMonth(), monthNamesShort, monthNames); + month = getName('M', monthNamesShort, monthNames); break; case 'y': - output += lookAhead('y') ? date.getFullYear() : (date.getFullYear() % 100 < 10 ? '0' : '') + (date.getFullYear() % 100); + year = getNumber('y'); break; case '@': - output += date.getTime(); + date = new Date(getNumber('@')); + year = date.getFullYear(); + month = date.getMonth() + 1; + day = date.getDate(); break; case '!': - output += date.getTime() * 10000 + ticksTo1970; + date = new Date((getNumber('!') - ticksTo1970) / 10000); + year = date.getFullYear(); + month = date.getMonth() + 1; + day = date.getDate(); break; - case '\'': - if (lookAhead('\'')) { - output += '\''; + case "'": + if (lookAhead("'")) { + checkLiteral(); } else { literal = true; } break; default: - output += format.charAt(iFormat); - } - } - } - } - return output; - } - - const formatTime = (date) => { - if (!date) { - return ''; - } - - let output = ''; - let hours = date.getHours(); - let minutes = date.getMinutes(); - let seconds = date.getSeconds(); - let milliseconds = date.getMilliseconds(); - - if (props.hourFormat === '12' && hours > 11 && hours !== 12) { - hours -= 12; - } - - if (props.hourFormat === '12') { - output += hours === 0 ? 12 : (hours < 10) ? '0' + hours : hours; - } - else { - output += (hours < 10) ? '0' + hours : hours; - } - output += ':'; - output += (minutes < 10) ? '0' + minutes : minutes; - - if (props.showSeconds) { - output += ':'; - output += (seconds < 10) ? '0' + seconds : seconds; - } - - if (props.showMillisec) { - output += '.'; - output += milliseconds < 100 ? (milliseconds < 10 ? '00' : '0') + milliseconds : milliseconds; - } - - if (props.hourFormat === '12') { - output += date.getHours() > 11 ? ' PM' : ' AM'; - } - - return output; - } - - const parseValueFromString = (text) => { - if (!text || text.trim().length === 0) { - return null; - } - - let value; - - if (isSingleSelection()) { - value = parseDateTime(text); - } - else if (isMultipleSelection()) { - let tokens = text.split(','); - value = []; - for (let token of tokens) { - value.push(parseDateTime(token.trim())); - } - } - else if (isRangeSelection()) { - let tokens = text.split(' - '); - value = []; - for (let i = 0; i < tokens.length; i++) { - value[i] = parseDateTime(tokens[i].trim()); - } - } - - return value; - } - - const parseDateTime = (text) => { - let date; - let parts = text.split(' '); - - if (props.timeOnly) { - date = new Date(); - populateTime(date, parts[0], parts[1]); - } - else { - if (props.showTime) { - date = parseDate(parts[0], getDateFormat()); - populateTime(date, parts[1], parts[2]); - } - else { - date = parseDate(text, getDateFormat()); - } - } - - return date; - } - - const populateTime = (value, timeString, ampm) => { - if (props.hourFormat === '12' && (ampm !== 'PM' && ampm !== 'AM')) { - throw new Error('Invalid Time'); - } - - let time = parseTime(timeString, ampm); - value.setHours(time.hour); - value.setMinutes(time.minute); - value.setSeconds(time.second); - value.setMilliseconds(time.millisecond); - } - - const parseTime = (value, ampm) => { - value = props.showMillisec ? value.replace('.', ':') : value; - let tokens = value.split(':'); - let validTokenLength = props.showSeconds ? 3 : 2; - validTokenLength = props.showMillisec ? validTokenLength + 1 : validTokenLength; - - if (tokens.length !== validTokenLength || tokens[0].length !== 2 || tokens[1].length !== 2 || - (props.showSeconds && tokens[2].length !== 2) || - (props.showMillisec && tokens[3].length !== 3)) { - throw new Error('Invalid time'); - } - - let h = parseInt(tokens[0], 10); - let m = parseInt(tokens[1], 10); - let s = props.showSeconds ? parseInt(tokens[2], 10) : null; - let ms = props.showMillisec ? parseInt(tokens[3], 10) : null; - - if (isNaN(h) || isNaN(m) || h > 23 || m > 59 || (props.hourFormat === '12' && h > 12) || - (props.showSeconds && (isNaN(s) || s > 59)) || - (props.showMillisec && (isNaN(s) || s > 1000))) { - throw new Error('Invalid time'); - } - else { - if (props.hourFormat === '12' && h !== 12 && ampm === 'PM') { - h += 12; - } - - return { hour: h, minute: m, second: s, millisecond: ms }; - } - } - - // Ported from jquery-ui datepicker parseDate - const parseDate = (value, format) => { - if (format == null || value == null) { - throw new Error('Invalid arguments'); - } - - value = (typeof value === "object" ? value.toString() : value + ""); - if (value === "") { - return null; - } - - let iFormat, dim, extra, - iValue = 0, - shortYearCutoff = (typeof props.shortYearCutoff !== "string" ? props.shortYearCutoff : new Date().getFullYear() % 100 + parseInt(props.shortYearCutoff, 10)), - year = -1, - month = -1, - day = -1, - doy = -1, - literal = false, - date, - lookAhead = (match) => { - let matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match); - if (matches) { - iFormat++; - } - return matches; - }, - getNumber = (match) => { - let isDoubled = lookAhead(match), - size = (match === "@" ? 14 : (match === "!" ? 20 : - (match === "y" && isDoubled ? 4 : (match === "o" ? 3 : 2)))), - minSize = (match === "y" ? size : 1), - digits = new RegExp("^\\d{" + minSize + "," + size + "}"), - num = value.substring(iValue).match(digits); - if (!num) { - throw new Error('Missing number at position ' + iValue); - } - iValue += num[0].length; - return parseInt(num[0], 10); - }, - getName = (match, shortNames, longNames) => { - let index = -1; - let arr = lookAhead(match) ? longNames : shortNames; - let names = []; - - for (let i = 0; i < arr.length; i++) { - names.push([i, arr[i]]); - } - names.sort((a, b) => { - return -(a[1].length - b[1].length); - }); - - for (let i = 0; i < names.length; i++) { - let name = names[i][1]; - if (value.substr(iValue, name.length).toLowerCase() === name.toLowerCase()) { - index = names[i][0]; - iValue += name.length; - break; + checkLiteral(); } } + } - if (index !== -1) { - return index + 1; - } else { - throw new Error('Unknown name at position ' + iValue); - } - }, - checkLiteral = () => { - if (value.charAt(iValue) !== format.charAt(iFormat)) { - throw new Error('Unexpected literal at position ' + iValue); + if (iValue < value.length) { + extra = value.substr(iValue); + if (!/^\s+/.test(extra)) { + throw new Error('Extra/unparsed characters found in date: ' + extra); } - iValue++; - }; - - if (props.view === 'month') { - day = 1; - } + } - const { dayNamesShort, dayNames, monthNamesShort, monthNames } = localeOptions(props.locale); + if (year === -1) { + year = new Date().getFullYear(); + } else if (year < 100) { + year += new Date().getFullYear() - (new Date().getFullYear() % 100) + (year <= shortYearCutoff ? 0 : -100); + } - for (iFormat = 0; iFormat < format.length; iFormat++) { - if (literal) { - if (format.charAt(iFormat) === "'" && !lookAhead("'")) { - literal = false; - } else { - checkLiteral(); - } - } else { - switch (format.charAt(iFormat)) { - case "d": - day = getNumber("d"); - break; - case "D": - getName("D", dayNamesShort, dayNames); - break; - case "o": - doy = getNumber("o"); - break; - case "m": - month = getNumber("m"); - break; - case "M": - month = getName("M", monthNamesShort, monthNames); + if (doy > -1) { + month = 1; + day = doy; + do { + dim = getDaysCountInMonth(year, month - 1); + if (day <= dim) { break; - case "y": - year = getNumber("y"); - break; - case "@": - date = new Date(getNumber("@")); - year = date.getFullYear(); - month = date.getMonth() + 1; - day = date.getDate(); - break; - case "!": - date = new Date((getNumber("!") - ticksTo1970) / 10000); - year = date.getFullYear(); - month = date.getMonth() + 1; - day = date.getDate(); - break; - case "'": - if (lookAhead("'")) { - checkLiteral(); - } else { - literal = true; - } - break; - default: - checkLiteral(); - } + } + month++; + day -= dim; + } while (true); } - } - if (iValue < value.length) { - extra = value.substr(iValue); - if (!/^\s+/.test(extra)) { - throw new Error('Extra/unparsed characters found in date: ' + extra); + date = daylightSavingAdjust(new Date(year, month - 1, day)); + if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) { + throw new Error('Invalid date'); // E.g. 31/02/00 } - } - if (year === -1) { - year = new Date().getFullYear(); - } else if (year < 100) { - year += new Date().getFullYear() - new Date().getFullYear() % 100 + - (year <= shortYearCutoff ? 0 : -100); - } + return date; + }; - if (doy > -1) { - month = 1; - day = doy; - do { - dim = getDaysCountInMonth(year, month - 1); - if (day <= dim) { - break; - } - month++; - day -= dim; - } while (true); - } + const isInMinYear = (viewDate) => { + return props.minDate && props.minDate.getFullYear() === viewDate.getFullYear(); + }; + + const isInMaxYear = (viewDate) => { + return props.maxDate && props.maxDate.getFullYear() === viewDate.getFullYear(); + }; - date = daylightSavingAdjust(new Date(year, month - 1, day)); - if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) { - throw new Error('Invalid date'); // E.g. 31/02/00 - } + React.useEffect(() => { + ObjectUtils.combinedRefs(inputRef, props.inputRef); + }, [inputRef, props.inputRef]); - return date; - } + useMountEffect(() => { + let unbindMaskEvents = null; + let viewDate = getViewDate(props.viewDate); + validateDate(viewDate); + setViewDateState(viewDate); - const isInMinYear = (viewDate) => { - return props.minDate && props.minDate.getFullYear() === viewDate.getFullYear(); - } + setCurrentMonth(viewDate.getMonth()); + setCurrentYear(viewDate.getFullYear()); + setCurrentView(props.view); - const isInMaxYear = (viewDate) => { - return props.maxDate && props.maxDate.getFullYear() === viewDate.getFullYear(); - } + if (props.inline) { + overlayRef && overlayRef.current.setAttribute(attributeSelector, ''); - React.useEffect(() => { - ObjectUtils.combinedRefs(inputRef, props.inputRef); - }, [inputRef, props.inputRef]); + if (!props.disabled) { + initFocusableCell(); + if (props.numberOfMonths === 1) { + overlayRef.current.style.width = DomHandler.getOuterWidth(overlayRef.current) + 'px'; + } + } + } else if (props.mask) { + unbindMaskEvents = mask(inputRef.current, { + mask: props.mask, + readOnly: props.readOnlyInput || props.disabled, + onChange: (e) => { + !ignoreMaskChange.current && updateValueOnInput(e.originalEvent, e.value); + ignoreMaskChange.current = false; + }, + onBlur: () => { + ignoreMaskChange.current = true; + } + }).unbindEvents; + } - useMountEffect(() => { - let unbindMaskEvents = null; - let viewDate = getViewDate(props.viewDate); - validateDate(viewDate); - setViewDateState(viewDate); + if (props.value) { + updateInputfield(props.value); + } - setCurrentMonth(viewDate.getMonth()); - setCurrentYear(viewDate.getFullYear()); - setCurrentView(props.view); + return () => { + props.mask && unbindMaskEvents(); + }; + }); - if (props.inline) { - overlayRef && overlayRef.current.setAttribute(attributeSelector, ''); + useUpdateEffect(() => { + setCurrentView(props.view); + }, [props.view]); - if (!props.disabled) { - initFocusableCell(); - if (props.numberOfMonths === 1) { - overlayRef.current.style.width = DomHandler.getOuterWidth(overlayRef.current) + 'px'; - } - } - } - else if (props.mask) { - unbindMaskEvents = mask(inputRef.current, { - mask: props.mask, - readOnly: props.readOnlyInput || props.disabled, - onChange: (e) => { - !ignoreMaskChange.current && updateValueOnInput(e.originalEvent, e.value); - ignoreMaskChange.current = false; - }, - onBlur: () => { - ignoreMaskChange.current = true; + useUpdateEffect(() => { + if (!props.onViewDateChange && !viewStateChanged.current) { + let propValue = props.value; + if (Array.isArray(propValue)) { + propValue = propValue[0]; } - }).unbindEvents; - } - if (props.value) { - updateInputfield(props.value); - } + let prevPropValue = previousValue; + if (Array.isArray(prevPropValue)) { + prevPropValue = prevPropValue[0]; + } - return () => { - props.mask && unbindMaskEvents(); - } - }); + if ((!prevPropValue && propValue) || (propValue && propValue instanceof Date && propValue.getTime() !== prevPropValue.getTime())) { + let viewDate = props.viewDate && isValidDate(props.viewDate) ? props.viewDate : propValue && isValidDate(propValue) ? propValue : new Date(); - useUpdateEffect(() => { - setCurrentView(props.view); - }, [props.view]) + validateDate(viewDate); - useUpdateEffect(() => { - if (!props.onViewDateChange && !viewStateChanged.current) { - let propValue = props.value; - if (Array.isArray(propValue)) { - propValue = propValue[0]; + setViewDateState(viewDate); + viewStateChanged.current = true; + } } + }, [props.onViewDateChange, props.value]); - let prevPropValue = previousValue; - if (Array.isArray(prevPropValue)) { - prevPropValue = prevPropValue[0]; + useUpdateEffect(() => { + if (previousValue !== props.value && (!viewStateChanged || !visible)) { + updateInputfield(props.value); } + }, [props.value, visible]); - if ((!prevPropValue && propValue) || (propValue && propValue instanceof Date && propValue.getTime() !== prevPropValue.getTime())) { - let viewDate = props.viewDate && isValidDate(props.viewDate) ? - props.viewDate : (propValue && isValidDate(propValue) ? propValue : new Date()); - - validateDate(viewDate); + useUpdateEffect(() => { + updateInputfield(props.value); + }, [props.dateFormat, props.hourFormat, props.timeOnly, props.showSeconds, props.showMillisec]); - setViewDateState(viewDate); - viewStateChanged.current = true; + useUpdateEffect(() => { + if (overlayRef.current) { + setNavigationState(viewDateState); + updateFocus(); } - } - }, [props.onViewDateChange, props.value]); + }); - useUpdateEffect(() => { - if (previousValue !== props.value && (!viewStateChanged || !visible)) { - updateInputfield(props.value); - } - }, [props.value, visible]); - - useUpdateEffect(() => { - updateInputfield(props.value); - }, [props.dateFormat, props.hourFormat, props.timeOnly, props.showSeconds, props.showMillisec]); - - useUpdateEffect(() => { - if (overlayRef.current) { - setNavigationState(viewDateState); - updateFocus(); - } - }); - - useUnmountEffect(() => { - if (touchUIMask.current) { - disableModality(); - touchUIMask.current = null; - } - - ZIndexUtils.clear(overlayRef.current); - }); - - React.useImperativeHandle(ref, () => ({ - props, - show, - hide, - getCurrentDateTime, - getViewDate, - updateViewDate, - getElement: () => elementRef.current, - getOverlay: () => overlayRef.current, - getInput: () => inputRef.current - })); - - const createBackwardNavigator = (isVisible) => { - const navigatorProps = isVisible ? { 'onClick': onPrevButtonClick, 'onKeyDown': e => onContainerButtonKeydown(e) } : { 'style': { visibility: 'hidden' } }; - return ( - - ) - } - - const createForwardNavigator = (isVisible) => { - const navigatorProps = isVisible ? { 'onClick': onNextButtonClick, 'onKeyDown': e => onContainerButtonKeydown(e) } : { 'style': { visibility: 'hidden' } }; - return ( - - ) - } + useUnmountEffect(() => { + if (touchUIMask.current) { + disableModality(); + touchUIMask.current = null; + } - const createTitleMonthElement = (month) => { - const monthNames = localeOption('monthNames', props.locale); + ZIndexUtils.clear(overlayRef.current); + }); - if (props.monthNavigator && props.view !== 'month') { - const viewDate = getViewDate(); - const viewMonth = viewDate.getMonth(); - const displayedMonthOptions = monthNames.map((month, index) => ((!isInMinYear(viewDate) || index >= props.minDate.getMonth()) && (!isInMaxYear(viewDate) || index <= props.maxDate.getMonth())) ? { label: month, value: index, index } : null).filter(option => !!option); - const displayedMonthNames = displayedMonthOptions.map(option => option.label); - const content = ( - + React.useImperativeHandle(ref, () => ({ + props, + show, + hide, + getCurrentDateTime, + getViewDate, + updateViewDate, + getElement: () => elementRef.current, + getOverlay: () => overlayRef.current, + getInput: () => inputRef.current + })); + + const createBackwardNavigator = (isVisible) => { + const navigatorProps = isVisible ? { onClick: onPrevButtonClick, onKeyDown: (e) => onContainerButtonKeydown(e) } : { style: { visibility: 'hidden' } }; + return ( + ); + }; - if (props.monthNavigatorTemplate) { - const defaultContentOptions = { - onChange: onMonthDropdownChange, - className: 'p-datepicker-month', - value: viewMonth, - names: displayedMonthNames, - options: displayedMonthOptions, - element: content, - props - }; + const createForwardNavigator = (isVisible) => { + const navigatorProps = isVisible ? { onClick: onNextButtonClick, onKeyDown: (e) => onContainerButtonKeydown(e) } : { style: { visibility: 'hidden' } }; + return ( + + ); + }; - return ObjectUtils.getJSXElement(props.monthNavigatorTemplate, defaultContentOptions); + const createTitleMonthElement = (month) => { + const monthNames = localeOption('monthNames', props.locale); + + if (props.monthNavigator && props.view !== 'month') { + const viewDate = getViewDate(); + const viewMonth = viewDate.getMonth(); + const displayedMonthOptions = monthNames + .map((month, index) => ((!isInMinYear(viewDate) || index >= props.minDate.getMonth()) && (!isInMaxYear(viewDate) || index <= props.maxDate.getMonth()) ? { label: month, value: index, index } : null)) + .filter((option) => !!option); + const displayedMonthNames = displayedMonthOptions.map((option) => option.label); + const content = ( + + ); + + if (props.monthNavigatorTemplate) { + const defaultContentOptions = { + onChange: onMonthDropdownChange, + className: 'p-datepicker-month', + value: viewMonth, + names: displayedMonthNames, + options: displayedMonthOptions, + element: content, + props + }; + + return ObjectUtils.getJSXElement(props.monthNavigatorTemplate, defaultContentOptions); + } + + return content; } - return content; - } - - return currentView === 'date' && - } - - const createTitleYearElement = () => { - if (props.yearNavigator) { - let yearOptions = []; - const years = props.yearRange.split(':'); - const yearStart = parseInt(years[0], 10); - const yearEnd = parseInt(years[1], 10); + return ( + currentView === 'date' && ( + + ) + ); + }; - for (let i = yearStart; i <= yearEnd; i++) { - yearOptions.push(i); + const createTitleYearElement = () => { + if (props.yearNavigator) { + let yearOptions = []; + const years = props.yearRange.split(':'); + const yearStart = parseInt(years[0], 10); + const yearEnd = parseInt(years[1], 10); + + for (let i = yearStart; i <= yearEnd; i++) { + yearOptions.push(i); + } + + const viewDate = getViewDate(); + const viewYear = viewDate.getFullYear(); + const displayedYearNames = yearOptions.filter((year) => !(props.minDate && props.minDate.getFullYear() > year) && !(props.maxDate && props.maxDate.getFullYear() < year)); + const content = ( + + ); + + if (props.yearNavigatorTemplate) { + const options = displayedYearNames.map((name, i) => ({ label: name, value: name, index: i })); + const defaultContentOptions = { + onChange: onYearDropdownChange, + className: 'p-datepicker-year', + value: viewYear, + names: displayedYearNames, + options, + element: content, + props + }; + + return ObjectUtils.getJSXElement(props.yearNavigatorTemplate, defaultContentOptions); + } + + return content; } - const viewDate = getViewDate(); - const viewYear = viewDate.getFullYear(); - const displayedYearNames = yearOptions.filter(year => (!(props.minDate && props.minDate.getFullYear() > year) && !(props.maxDate && props.maxDate.getFullYear() < year))); - const content = ( - + return ( + currentView !== 'year' && ( + + ) ); + }; - if (props.yearNavigatorTemplate) { - const options = displayedYearNames.map((name, i) => ({ label: name, value: name, index: i })); - const defaultContentOptions = { - onChange: onYearDropdownChange, - className: 'p-datepicker-year', - value: viewYear, - names: displayedYearNames, - options, - element: content, - props - }; + const createTitleDecadeElement = () => { + const years = yearPickerValues(); - return ObjectUtils.getJSXElement(props.yearNavigatorTemplate, defaultContentOptions); + if (currentView === 'year') { + return {props.decadeTemplate ? props.decadeTemplate(years) : {`${yearPickerValues()[0]} - ${yearPickerValues()[yearPickerValues().length - 1]}`}}; } - return content; - } + return null; + }; + + const createTitle = (monthMetaData) => { + const month = createTitleMonthElement(monthMetaData.month); + const year = createTitleYearElement(monthMetaData.year); + const decade = createTitleDecadeElement(); + return ( +
    + {month} + {year} + {decade} +
    + ); + }; + const createDayNames = (weekDays) => { + const dayNames = weekDays.map((weekDay, index) => ( +
    + )); + + if (props.showWeek) { + const weekHeader = ( + + ); - return currentView !== 'year' && - } + return [weekHeader, ...dayNames]; + } - const createTitleDecadeElement = () => { - const years = yearPickerValues(); + return dayNames; + }; - if (currentView === 'year') { + const createDateCellContent = (date, className, groupIndex) => { + const content = props.dateTemplate ? props.dateTemplate(date) : date.day; return ( - - {props.decadeTemplate ? props.decadeTemplate(years) : {`${yearPickerValues()[0]} - ${yearPickerValues()[yearPickerValues().length - 1]}`}} + onDateSelect(e, date)} onKeyDown={(e) => onDateCellKeydown(e, date, groupIndex)}> + {content} + - ) - } - - return null; - } + ); + }; - const createTitle = (monthMetaData) => { - const month = createTitleMonthElement(monthMetaData.month); - const year = createTitleYearElement(monthMetaData.year); - const decade = createTitleDecadeElement(); + const createWeek = (weekDates, weekNumber, groupIndex) => { + const week = weekDates.map((date) => { + const selected = isSelected(date); + const cellClassName = classNames({ 'p-datepicker-other-month': date.otherMonth, 'p-datepicker-today': date.today }); + const dateClassName = classNames({ 'p-highlight': selected, 'p-disabled': !date.selectable }); + const content = date.otherMonth && !props.showOtherMonths ? null : createDateCellContent(date, dateClassName, groupIndex); + + return ( + + ); + }); - return ( -
    - {month} - {year} - {decade} -
    - ) - } - - const createDayNames = (weekDays) => { - const dayNames = weekDays.map((weekDay, index) => ( -
    - )); - - if (props.showWeek) { - const weekHeader = ( - - ); + if (props.showWeek) { + const weekNumberCell = ( + + ); - return [weekHeader, ...dayNames]; - } + return [weekNumberCell, ...week]; + } - return dayNames; - } + return week; + }; - const createDateCellContent = (date, className, groupIndex) => { - const content = props.dateTemplate ? props.dateTemplate(date) : date.day; - return ( - onDateSelect(e, date)} onKeyDown={e => onDateCellKeydown(e, date, groupIndex)}> - {content} - - - ) - } + const createDates = (monthMetaData, groupIndex) => { + return monthMetaData.dates.map((weekDates, index) => {createWeek(weekDates, monthMetaData.weekNumbers[index], groupIndex)}); + }; - const createWeek = (weekDates, weekNumber, groupIndex) => { - const week = weekDates.map((date) => { - const selected = isSelected(date); - const cellClassName = classNames({ 'p-datepicker-other-month': date.otherMonth, 'p-datepicker-today': date.today }); - const dateClassName = classNames({ 'p-highlight': selected, 'p-disabled': !date.selectable }); - const content = (date.otherMonth && !props.showOtherMonths) ? null : createDateCellContent(date, dateClassName, groupIndex); + const createDateViewGrid = (monthMetaData, weekDays, groupIndex) => { + const dayNames = createDayNames(weekDays); + const dates = createDates(monthMetaData, groupIndex); return ( - - ) - }); - - if (props.showWeek) { - const weekNumberCell = ( - + currentView === 'date' && ( +
    +
    + {weekDay} + + {localeOption('weekHeader', props.locale)} + + {content} + - {weekDay} - - {localeOption('weekHeader', props.locale)} - + {weekNumber} +
    - {content} - - - {weekNumber} - -
    + + {dayNames} + + {dates} +
    +
    + ) ); + }; - return [weekNumberCell, ...week]; - } + const createMonth = (monthMetaData, index) => { + const weekDays = createWeekDaysMeta(); + const backwardNavigator = createBackwardNavigator(index === 0); + const forwardNavigator = createForwardNavigator(props.numberOfMonths === 1 || index === props.numberOfMonths - 1); + const title = createTitle(monthMetaData); - return week; - } + const dateViewGrid = createDateViewGrid(monthMetaData, weekDays, index); + const header = props.headerTemplate ? props.headerTemplate() : null; - const createDates = (monthMetaData, groupIndex) => { - return monthMetaData.dates.map((weekDates, index) => ( - - {createWeek(weekDates, monthMetaData.weekNumbers[index], groupIndex)} - - )); - } + return ( +
    +
    + {header} + {backwardNavigator} + {title} + {forwardNavigator} +
    + {dateViewGrid} +
    + ); + }; - const createDateViewGrid = (monthMetaData, weekDays, groupIndex) => { - const dayNames = createDayNames(weekDays); - const dates = createDates(monthMetaData, groupIndex); + const createMonths = (monthsMetaData) => { + const groups = monthsMetaData.map(createMonth); - return ( - currentView === 'date' &&
    - - - - {dayNames} - - - - {dates} - -
    -
    - ) - } - - const createMonth = (monthMetaData, index) => { - const weekDays = createWeekDaysMeta(); - const backwardNavigator = createBackwardNavigator((index === 0)); - const forwardNavigator = createForwardNavigator((props.numberOfMonths === 1) || (index === props.numberOfMonths - 1)); - const title = createTitle(monthMetaData); - - const dateViewGrid = createDateViewGrid(monthMetaData, weekDays, index); - const header = props.headerTemplate ? props.headerTemplate() : null; + return
    {groups}
    ; + }; - return ( -
    -
    - {header} - {backwardNavigator} - {title} - {forwardNavigator} -
    - {dateViewGrid} -
    - ) - } + const createDateView = () => { + const viewDate = getViewDate(); + const monthsMetaData = createMonthsMeta(viewDate.getMonth(), viewDate.getFullYear()); + const months = createMonths(monthsMetaData); - const createMonths = (monthsMetaData) => { - const groups = monthsMetaData.map(createMonth); + return months; + }; - return ( -
    - {groups} -
    - ) - } + const createMonthViewMonth = (index) => { + const className = classNames('p-monthpicker-month', { 'p-highlight': isMonthSelected(index), 'p-disabled': !isSelectable(1, index, currentYear) }); + const monthNamesShort = localeOption('monthNamesShort', props.locale); + const monthName = monthNamesShort[index]; - const createDateView = () => { - const viewDate = getViewDate(); - const monthsMetaData = createMonthsMeta(viewDate.getMonth(), viewDate.getFullYear()); - const months = createMonths(monthsMetaData); + return ( + onMonthSelect(event, index)} onKeyDown={(event) => onMonthCellKeydown(event, index)}> + {monthName} + + + ); + }; - return months; - } + const createMonthViewMonths = () => { + let months = []; + for (let i = 0; i <= 11; i++) { + months.push(createMonthViewMonth(i)); + } - const createMonthViewMonth = (index) => { - const className = classNames('p-monthpicker-month', { 'p-highlight': isMonthSelected(index), 'p-disabled': !isSelectable(1, index, currentYear) }); - const monthNamesShort = localeOption('monthNamesShort', props.locale); - const monthName = monthNamesShort[index]; + return months; + }; - return ( - onMonthSelect(event, index)} onKeyDown={event => onMonthCellKeydown(event, index)}> - {monthName} - - - ) - } - - const createMonthViewMonths = () => { - let months = []; - for (let i = 0; i <= 11; i++) { - months.push(createMonthViewMonth(i)); - } - - return months; - } - - const monthPickerValues = () => { - let monthPickerValues = []; - const monthNamesShort = localeOption('monthNamesShort', props.locale); - for (let i = 0; i <= 11; i++) { - monthPickerValues.push(monthNamesShort[i]); - } - - return monthPickerValues; - } - - const yearPickerValues = () => { - let yearPickerValues = []; - let base = currentYear - (currentYear % 10); - for (let i = 0; i < 10; i++) { - yearPickerValues.push(base + i); - } - - return yearPickerValues; - } - - const createMonthYearView = () => { - const backwardNavigator = createBackwardNavigator(true); - const forwardNavigator = createForwardNavigator(true); - const yearElement = createTitleYearElement(getViewDate().getFullYear()); - const decade = createTitleDecadeElement(); + const monthPickerValues = () => { + let monthPickerValues = []; + const monthNamesShort = localeOption('monthNamesShort', props.locale); + for (let i = 0; i <= 11; i++) { + monthPickerValues.push(monthNamesShort[i]); + } - return ( - <> -
    -
    -
    - {backwardNavigator} -
    - {yearElement} - {decade} -
    - {forwardNavigator} -
    -
    -
    - - ) - } + return monthPickerValues; + }; - const createDatePicker = () => { - if (!props.timeOnly) { - if (props.view === 'date') { - return createDateView(); + const yearPickerValues = () => { + let yearPickerValues = []; + let base = currentYear - (currentYear % 10); + for (let i = 0; i < 10; i++) { + yearPickerValues.push(base + i); } - else { - return createMonthYearView(); - } - } - - return null; - } - const createHourPicker = () => { - let currentTime = getCurrentDateTime(); - let hour = currentTime.getHours(); + return yearPickerValues; + }; - if (props.hourFormat === '12') { - if (hour === 0) - hour = 12; - else if (hour > 11 && hour !== 12) - hour = hour - 12; - } + const createMonthYearView = () => { + const backwardNavigator = createBackwardNavigator(true); + const forwardNavigator = createForwardNavigator(true); + const yearElement = createTitleYearElement(getViewDate().getFullYear()); + const decade = createTitleDecadeElement(); - const hourDisplay = hour < 10 ? '0' + hour : hour; + return ( + <> +
    +
    +
    + {backwardNavigator} +
    + {yearElement} + {decade} +
    + {forwardNavigator} +
    +
    +
    + + ); + }; + const createDatePicker = () => { + if (!props.timeOnly) { + if (props.view === 'date') { + return createDateView(); + } else { + return createMonthYearView(); + } + } - return ( -
    - - {hourDisplay} - -
    - ) - } + return null; + }; - const createMinutePicker = () => { - const currentTime = getCurrentDateTime(); - const minute = currentTime.getMinutes(); - const minuteDisplay = minute < 10 ? '0' + minute : minute; + const createHourPicker = () => { + let currentTime = getCurrentDateTime(); + let hour = currentTime.getHours(); - return ( -
    - - {minuteDisplay} - -
    - ) - } + if (props.hourFormat === '12') { + if (hour === 0) hour = 12; + else if (hour > 11 && hour !== 12) hour = hour - 12; + } - const createSecondPicker = () => { - if (props.showSeconds) { - const currentTime = getCurrentDateTime(); - const second = currentTime.getSeconds(); - const secondDisplay = second < 10 ? '0' + second : second; + const hourDisplay = hour < 10 ? '0' + hour : hour; return ( -
    - - {secondDisplay} -
    - ) - } - - return null; - } + ); + }; - const createMiliSecondPicker = () => { - if (props.showMillisec) { + const createMinutePicker = () => { const currentTime = getCurrentDateTime(); - const millisecond = currentTime.getMilliseconds(); - const millisecondDisplay = millisecond < 100 ? (millisecond < 10 ? '00' : '0') + millisecond : millisecond; + const minute = currentTime.getMinutes(); + const minuteDisplay = minute < 10 ? '0' + minute : minute; return ( -
    - - {millisecondDisplay} -
    - ) - } + ); + }; - return null; - } + const createSecondPicker = () => { + if (props.showSeconds) { + const currentTime = getCurrentDateTime(); + const second = currentTime.getSeconds(); + const secondDisplay = second < 10 ? '0' + second : second; + + return ( +
    + + {secondDisplay} + +
    + ); + } - const createAmPmPicker = () => { - if (props.hourFormat === '12') { - const currentTime = getCurrentDateTime(); - const hour = currentTime.getHours(); - const display = hour > 11 ? 'PM' : 'AM'; + return null; + }; - return ( -
    - - {display} - -
    - ) - } + const createMiliSecondPicker = () => { + if (props.showMillisec) { + const currentTime = getCurrentDateTime(); + const millisecond = currentTime.getMilliseconds(); + const millisecondDisplay = millisecond < 100 ? (millisecond < 10 ? '00' : '0') + millisecond : millisecond; + + return ( +
    + + {millisecondDisplay} + +
    + ); + } + + return null; + }; - return null; - } + const createAmPmPicker = () => { + if (props.hourFormat === '12') { + const currentTime = getCurrentDateTime(); + const hour = currentTime.getHours(); + const display = hour > 11 ? 'PM' : 'AM'; + + return ( +
    + + {display} + +
    + ); + } - const createSeparator = (separator) => { - return ( -
    - {separator} -
    - ) - } - - const createTimePicker = () => { - if ((props.showTime || props.timeOnly) && currentView === 'date') { + return null; + }; + + const createSeparator = (separator) => { return ( -
    - {createHourPicker()} - {createSeparator(':')} - {createMinutePicker()} - {props.showSeconds && createSeparator(':')} - {createSecondPicker()} - {props.showMillisec && createSeparator('.')} - {createMiliSecondPicker()} - {props.hourFormat === '12' && createSeparator(':')} - {createAmPmPicker()} +
    + {separator}
    - ) - } + ); + }; - return null; - } + const createTimePicker = () => { + if ((props.showTime || props.timeOnly) && currentView === 'date') { + return ( +
    + {createHourPicker()} + {createSeparator(':')} + {createMinutePicker()} + {props.showSeconds && createSeparator(':')} + {createSecondPicker()} + {props.showMillisec && createSeparator('.')} + {createMiliSecondPicker()} + {props.hourFormat === '12' && createSeparator(':')} + {createAmPmPicker()} +
    + ); + } - const createInputElement = () => { - if (!props.inline) { - return ( - - ) - } + return null; + }; + + const createInputElement = () => { + if (!props.inline) { + return ( + + ); + } - return null; - } + return null; + }; + + const createButton = () => { + if (props.showIcon) { + return
    - ) - } + return ( +
    +
    + ); + } - return null; - } + return null; + }; - const createFooter = () => { - if (props.footerTemplate) { - const content = props.footerTemplate(); + const createFooter = () => { + if (props.footerTemplate) { + const content = props.footerTemplate(); - return ( -
    - {content} -
    - ) - } - - return null; - } - - const createMonthPicker = () => { - if (currentView === 'month') { - return
    - { - monthPickerValues().map((m, i) => { - return onMonthSelect(event, i)} key={`month${i + 1}`} className={classNames('p-monthpicker-month', { 'p-highlight': isMonthSelected(i), 'p-disabled': !isSelectable(1, i, currentYear) })}> - {m} - - }) - } -
    - } - - return null; - } - - const createYearPicker = () => { - if (currentView === 'year') { - return
    - { - yearPickerValues().map((y, i) => { - return onYearSelect(event, y)} key={`year${i + 1}`} className={classNames('p-yearpicker-year', { 'p-highlight': isYearSelected(y) })}> - {y} - - }) - } -
    - } - - return null; - } - - const otherProps = ObjectUtils.findDiffKeys(props, Calendar.defaultProps); - const className = classNames('p-calendar p-component p-inputwrapper', props.className, { - [`p-calendar-w-btn p-calendar-w-btn-${props.iconPos}`]: props.showIcon, - 'p-calendar-disabled': props.disabled, - 'p-calendar-timeonly': props.timeOnly, - 'p-inputwrapper-filled': props.value || (DomHandler.hasClass(inputRef.current, 'p-filled') && inputRef.current.value !== ''), - 'p-inputwrapper-focus': focusedState - }); - const panelClassName = classNames('p-datepicker p-component', props.panelClassName, { - 'p-datepicker-inline': props.inline, - 'p-disabled': props.disabled, - 'p-datepicker-timeonly': props.timeOnly, - 'p-datepicker-multiple-month': props.numberOfMonths > 1, - 'p-datepicker-monthpicker': (currentView === 'month'), - 'p-datepicker-touch-ui': props.touchUI - }); - const content = createContent(); - const datePicker = createDatePicker(); - const timePicker = createTimePicker(); - const buttonBar = createButtonBar(); - const footer = createFooter(); - const monthPicker = createMonthPicker(); - const yearPicker = createYearPicker(); - - return ( - - {content} - - {datePicker} - {timePicker} - {monthPicker} - {yearPicker} - {buttonBar} - {footer} - - - ) -})); + return
    {content}
    ; + } + + return null; + }; + + const createMonthPicker = () => { + if (currentView === 'month') { + return ( +
    + {monthPickerValues().map((m, i) => { + return ( + onMonthSelect(event, i)} key={`month${i + 1}`} className={classNames('p-monthpicker-month', { 'p-highlight': isMonthSelected(i), 'p-disabled': !isSelectable(1, i, currentYear) })}> + {m} + + ); + })} +
    + ); + } + + return null; + }; + + const createYearPicker = () => { + if (currentView === 'year') { + return ( +
    + {yearPickerValues().map((y, i) => { + return ( + onYearSelect(event, y)} key={`year${i + 1}`} className={classNames('p-yearpicker-year', { 'p-highlight': isYearSelected(y) })}> + {y} + + ); + })} +
    + ); + } + + return null; + }; + + const otherProps = ObjectUtils.findDiffKeys(props, Calendar.defaultProps); + const className = classNames('p-calendar p-component p-inputwrapper', props.className, { + [`p-calendar-w-btn p-calendar-w-btn-${props.iconPos}`]: props.showIcon, + 'p-calendar-disabled': props.disabled, + 'p-calendar-timeonly': props.timeOnly, + 'p-inputwrapper-filled': props.value || (DomHandler.hasClass(inputRef.current, 'p-filled') && inputRef.current.value !== ''), + 'p-inputwrapper-focus': focusedState + }); + const panelClassName = classNames('p-datepicker p-component', props.panelClassName, { + 'p-datepicker-inline': props.inline, + 'p-disabled': props.disabled, + 'p-datepicker-timeonly': props.timeOnly, + 'p-datepicker-multiple-month': props.numberOfMonths > 1, + 'p-datepicker-monthpicker': currentView === 'month', + 'p-datepicker-touch-ui': props.touchUI + }); + const content = createContent(); + const datePicker = createDatePicker(); + const timePicker = createTimePicker(); + const buttonBar = createButtonBar(); + const footer = createFooter(); + const monthPicker = createMonthPicker(); + const yearPicker = createYearPicker(); + + return ( + + {content} + + {datePicker} + {timePicker} + {monthPicker} + {yearPicker} + {buttonBar} + {footer} + + + ); + }) +); Calendar.displayName = 'Calendar'; Calendar.defaultProps = { @@ -3241,4 +3201,4 @@ Calendar.defaultProps = { onShow: null, onHide: null, onMonthChange: null -} +}; diff --git a/components/lib/calendar/CalendarPanel.js b/components/lib/calendar/CalendarPanel.js index 8b2702a0c3..41de50172e 100644 --- a/components/lib/calendar/CalendarPanel.js +++ b/components/lib/calendar/CalendarPanel.js @@ -3,17 +3,26 @@ import { CSSTransition } from '../csstransition/CSSTransition'; import { Portal } from '../portal/Portal'; export const CalendarPanel = React.forwardRef((props, ref) => { - const createElement = () => { return ( - +
    {props.children}
    - ) - } + ); + }; const element = createElement(); diff --git a/components/lib/calendar/calendar.d.ts b/components/lib/calendar/calendar.d.ts index d5fca7169d..2473fc3b0b 100644 --- a/components/lib/calendar/calendar.d.ts +++ b/components/lib/calendar/calendar.d.ts @@ -55,10 +55,7 @@ interface CalendarVisibleChangeParams { callback?(): void; } -type CalendarNavigatorTemplateChangeCallback = ( - event: React.SyntheticEvent, - value: string | number | undefined | null -) => void; +type CalendarNavigatorTemplateChangeCallback = (event: React.SyntheticEvent, value: string | number | undefined | null) => void; interface CalendarNavigatorTemplateParams { onChange: CalendarNavigatorTemplateChangeCallback; @@ -151,7 +148,7 @@ export interface CalendarProps { onInput?(event: React.FormEvent): void; onSelect?(e: CalendarSelectParams): void; onChange?(e: CalendarChangeParams): void; - onMonthChange?(e: CalendarMonthChangeParams): void + onMonthChange?(e: CalendarMonthChangeParams): void; onViewDateChange?(e: CalendarViewChangeParams): void; onTodayButtonClick?(event: React.MouseEvent): void; onClearButtonClick?(event: React.MouseEvent): void; diff --git a/components/lib/captcha/Captcha.js b/components/lib/captcha/Captcha.js index 7b83b98cb1..965442b600 100644 --- a/components/lib/captcha/Captcha.js +++ b/components/lib/captcha/Captcha.js @@ -2,95 +2,97 @@ import * as React from 'react'; import { useMountEffect, useUnmountEffect } from '../hooks/Hooks'; import { ObjectUtils } from '../utils/Utils'; -export const Captcha = React.memo(React.forwardRef((props, ref) => { - const elementRef = React.useRef(null); - const instance = React.useRef(null); - const recaptchaScript = React.useRef(null); - const isCaptchaLoaded = React.useRef(false); - - const init = () => { - instance.current = (window).grecaptcha.render(elementRef.current, { - 'sitekey': props.siteKey, - 'theme': props.theme, - 'type': props.type, - 'size': props.size, - 'tabindex': props.tabIndex, - 'hl': props.language, - 'callback': recaptchaCallback, - 'expired-callback': recaptchaExpiredCallback - }); - } - - const reset = () => { - !!instance.current && (window).grecaptcha.reset(instance.current); - } - - const getResponse = () => { - return !!instance.current ? (window).grecaptcha.getResponse(instance.current) : null; - } - - const recaptchaCallback = (response) => { - props.onResponse && props.onResponse({ response }); - } - - const recaptchaExpiredCallback = () => { - props.onExpire && props.onExpire(); - } - - const addRecaptchaScript = () => { - recaptchaScript.current = null; - if (!(window).grecaptcha) { - let head = document.head || document.getElementsByTagName('head')[0]; - let script = document.createElement('script'); - script.src = 'https://www.google.com/recaptcha/api.js?render=explicit'; - script.async = true; - script.defer = true; - script.onload = () => { - if (!(window).grecaptcha) { - // eslint-disable-next-line no-console - console.warn('Recaptcha is not loaded'); - return; - } - - window.grecaptcha.ready(() => { - init(); - }); +export const Captcha = React.memo( + React.forwardRef((props, ref) => { + const elementRef = React.useRef(null); + const instance = React.useRef(null); + const recaptchaScript = React.useRef(null); + const isCaptchaLoaded = React.useRef(false); + + const init = () => { + instance.current = window.grecaptcha.render(elementRef.current, { + sitekey: props.siteKey, + theme: props.theme, + type: props.type, + size: props.size, + tabindex: props.tabIndex, + hl: props.language, + callback: recaptchaCallback, + 'expired-callback': recaptchaExpiredCallback + }); + }; + + const reset = () => { + !!instance.current && window.grecaptcha.reset(instance.current); + }; + + const getResponse = () => { + return !!instance.current ? window.grecaptcha.getResponse(instance.current) : null; + }; + + const recaptchaCallback = (response) => { + props.onResponse && props.onResponse({ response }); + }; + + const recaptchaExpiredCallback = () => { + props.onExpire && props.onExpire(); + }; + + const addRecaptchaScript = () => { + recaptchaScript.current = null; + if (!window.grecaptcha) { + let head = document.head || document.getElementsByTagName('head')[0]; + let script = document.createElement('script'); + script.src = 'https://www.google.com/recaptcha/api.js?render=explicit'; + script.async = true; + script.defer = true; + script.onload = () => { + if (!window.grecaptcha) { + // eslint-disable-next-line no-console + console.warn('Recaptcha is not loaded'); + return; + } + + window.grecaptcha.ready(() => { + init(); + }); + }; + recaptchaScript.current = script; + + head.appendChild(recaptchaScript.current); } - recaptchaScript.current = script; + }; - head.appendChild(recaptchaScript.current); - } - } + useMountEffect(() => { + if (!isCaptchaLoaded.current) { + addRecaptchaScript(); - useMountEffect(() => { - if (!isCaptchaLoaded.current) { - addRecaptchaScript(); + if (window.grecaptcha) { + init(); + } - if ((window).grecaptcha) { - init(); + isCaptchaLoaded.current = true; } + }); - isCaptchaLoaded.current = true; - } - }); - - useUnmountEffect(() => { - if (recaptchaScript.current && recaptchaScript.current.parentNode) { - recaptchaScript.current.parentNode.removeChild(recaptchaScript.current); - } - }); + useUnmountEffect(() => { + if (recaptchaScript.current && recaptchaScript.current.parentNode) { + recaptchaScript.current.parentNode.removeChild(recaptchaScript.current); + } + }); - React.useImperativeHandle(ref, () => ({ - props, - reset, - getResponse, - getElement: () => elementRef.current - })); + React.useImperativeHandle(ref, () => ({ + props, + reset, + getResponse, + getElement: () => elementRef.current + })); - const otherProps = ObjectUtils.findDiffKeys(props, Captcha.defaultProps); + const otherProps = ObjectUtils.findDiffKeys(props, Captcha.defaultProps); - return
    -})); + return
    ; + }) +); Captcha.displayName = 'Captcha'; Captcha.defaultProps = { @@ -104,4 +106,4 @@ Captcha.defaultProps = { language: 'en', onResponse: null, onExpire: null -} +}; diff --git a/components/lib/card/Card.js b/components/lib/card/Card.js index e374b4aa51..e8a68febe8 100644 --- a/components/lib/card/Card.js +++ b/components/lib/card/Card.js @@ -2,21 +2,20 @@ import * as React from 'react'; import { classNames, ObjectUtils } from '../utils/Utils'; export const Card = React.forwardRef((props, ref) => { - const elementRef = React.useRef(ref); const createHeader = () => { if (props.header) { - return
    {ObjectUtils.getJSXElement(props.header, props)}
    + return
    {ObjectUtils.getJSXElement(props.header, props)}
    ; } return null; - } + }; const createBody = () => { - const title = props.title &&
    {ObjectUtils.getJSXElement(props.title, props)}
    - const subTitle = props.subTitle &&
    {ObjectUtils.getJSXElement(props.subTitle, props)}
    - const children = props.children &&
    {props.children}
    + const title = props.title &&
    {ObjectUtils.getJSXElement(props.title, props)}
    ; + const subTitle = props.subTitle &&
    {ObjectUtils.getJSXElement(props.subTitle, props)}
    ; + const children = props.children &&
    {props.children}
    ; const footer = props.footer &&
    {ObjectUtils.getJSXElement(props.footer, props)}
    ; return ( @@ -26,8 +25,8 @@ export const Card = React.forwardRef((props, ref) => { {children} {footer}
    - ) - } + ); + }; React.useEffect(() => { ObjectUtils.combinedRefs(elementRef, ref); @@ -43,7 +42,7 @@ export const Card = React.forwardRef((props, ref) => { {header} {body} - ) + ); }); Card.displayName = 'Card'; @@ -56,4 +55,4 @@ Card.defaultProps = { subTitle: null, style: null, className: null -} +}; diff --git a/components/lib/card/card.d.ts b/components/lib/card/card.d.ts index 1d7efd1c49..2029da822e 100644 --- a/components/lib/card/card.d.ts +++ b/components/lib/card/card.d.ts @@ -10,4 +10,4 @@ export interface CardProps extends Omit { } +export declare class Card extends React.Component {} diff --git a/components/lib/carousel/Carousel.js b/components/lib/carousel/Carousel.js index e24dfa5dc6..06f9e9fa1b 100644 --- a/components/lib/carousel/Carousel.js +++ b/components/lib/carousel/Carousel.js @@ -13,555 +13,531 @@ const CarouselItem = React.memo((props) => { 'p-carousel-item-end': props.end }); - return ( -
    - {content} -
    - ) + return
    {content}
    ; }); -export const Carousel = React.memo(React.forwardRef((props, ref) => { - const [numVisibleState, setNumVisibleState] = React.useState(props.numVisible); - const [numScrollState, setNumScrollState] = React.useState(props.numScroll); - const [totalShiftedItemsState, setTotalShiftedItemsState] = React.useState((props.page * props.numScroll) * -1); - const [pageState, setPageState] = React.useState(props.page); - const elementRef = React.useRef(null); - const itemsContainerRef = React.useRef(null); - const remainingItems = React.useRef(0); - const allowAutoplay = React.useRef(!!props.autoplayInterval); - const attributeSelector = React.useRef(''); - const swipeThreshold = React.useRef(20); - const startPos = React.useRef(null); - const interval = React.useRef(null); - const carouselStyle = React.useRef(null); - const isRemainingItemsAdded = React.useRef(false); - const responsiveOptions = React.useRef(null); - const prevNumScroll = usePrevious(numScrollState); - const prevNumVisible = usePrevious(numVisibleState); - const prevValue = usePrevious(props.value); - const prevPage = usePrevious(props.page); - const isVertical = props.orientation === 'vertical'; - const circular = props.circular || !!props.autoplayInterval; - const isCircular = circular && props.value && props.value.length >= numVisibleState; - const currentPage = props.onPageChange ? props.page : pageState; - const totalIndicators = props.value ? Math.max(Math.ceil((props.value.length - numVisibleState) / numScrollState) + 1, 0) : 0; - const isAutoplay = totalIndicators && props.autoplayInterval && allowAutoplay.current; - - const [bindWindowResizeListener,] = useResizeListener({ - listener: () => { - calculatePosition(); - }, when: props.responsiveOptions - }); +export const Carousel = React.memo( + React.forwardRef((props, ref) => { + const [numVisibleState, setNumVisibleState] = React.useState(props.numVisible); + const [numScrollState, setNumScrollState] = React.useState(props.numScroll); + const [totalShiftedItemsState, setTotalShiftedItemsState] = React.useState(props.page * props.numScroll * -1); + const [pageState, setPageState] = React.useState(props.page); + const elementRef = React.useRef(null); + const itemsContainerRef = React.useRef(null); + const remainingItems = React.useRef(0); + const allowAutoplay = React.useRef(!!props.autoplayInterval); + const attributeSelector = React.useRef(''); + const swipeThreshold = React.useRef(20); + const startPos = React.useRef(null); + const interval = React.useRef(null); + const carouselStyle = React.useRef(null); + const isRemainingItemsAdded = React.useRef(false); + const responsiveOptions = React.useRef(null); + const prevNumScroll = usePrevious(numScrollState); + const prevNumVisible = usePrevious(numVisibleState); + const prevValue = usePrevious(props.value); + const prevPage = usePrevious(props.page); + const isVertical = props.orientation === 'vertical'; + const circular = props.circular || !!props.autoplayInterval; + const isCircular = circular && props.value && props.value.length >= numVisibleState; + const currentPage = props.onPageChange ? props.page : pageState; + const totalIndicators = props.value ? Math.max(Math.ceil((props.value.length - numVisibleState) / numScrollState) + 1, 0) : 0; + const isAutoplay = totalIndicators && props.autoplayInterval && allowAutoplay.current; + + const [bindWindowResizeListener] = useResizeListener({ + listener: () => { + calculatePosition(); + }, + when: props.responsiveOptions + }); - const step = (dir, page) => { - let totalShiftedItems = totalShiftedItemsState; - if (page != null) { - totalShiftedItems = (numScrollState * page) * -1; + const step = (dir, page) => { + let totalShiftedItems = totalShiftedItemsState; + if (page != null) { + totalShiftedItems = numScrollState * page * -1; - if (isCircular) { - totalShiftedItems -= numVisibleState; - } + if (isCircular) { + totalShiftedItems -= numVisibleState; + } - isRemainingItemsAdded.current = false; - } - else { - totalShiftedItems += (numScrollState * dir); - if (isRemainingItemsAdded.current) { - totalShiftedItems += remainingItems.current - (numScrollState * dir); isRemainingItemsAdded.current = false; + } else { + totalShiftedItems += numScrollState * dir; + if (isRemainingItemsAdded.current) { + totalShiftedItems += remainingItems.current - numScrollState * dir; + isRemainingItemsAdded.current = false; + } + + const originalShiftedItems = isCircular ? totalShiftedItems + numVisibleState : totalShiftedItems; + page = Math.abs(Math.floor(originalShiftedItems / numScrollState)); } - const originalShiftedItems = isCircular ? (totalShiftedItems + numVisibleState) : totalShiftedItems; - page = Math.abs(Math.floor(originalShiftedItems / numScrollState)); - } - - if (isCircular && pageState === (totalIndicators - 1) && dir === -1) { - totalShiftedItems = -1 * (props.value.length + numVisibleState); - page = 0; - } - else if (isCircular && pageState === 0 && dir === 1) { - totalShiftedItems = 0; - page = (totalIndicators - 1); - } - else if (page === (totalIndicators - 1) && remainingItems.current > 0) { - totalShiftedItems += ((remainingItems.current * -1) - (numScrollState * dir)); - isRemainingItemsAdded.current = true; - } - - if (itemsContainerRef.current) { - DomHandler.removeClass(itemsContainerRef.current, 'p-items-hidden'); - changePosition(totalShiftedItems); - itemsContainerRef.current.style.transition = 'transform 500ms ease 0s'; - } - - if (props.onPageChange) { - setTotalShiftedItemsState(totalShiftedItems); - props.onPageChange({ - page - }) - } - else { - setPageState(page); - setTotalShiftedItemsState(totalShiftedItems); - } - } - - const calculatePosition = () => { - if (itemsContainerRef.current && responsiveOptions.current) { - let windowWidth = window.innerWidth; - let matchedResponsiveData = { - numVisible: props.numVisible, - numScroll: props.numScroll + if (isCircular && pageState === totalIndicators - 1 && dir === -1) { + totalShiftedItems = -1 * (props.value.length + numVisibleState); + page = 0; + } else if (isCircular && pageState === 0 && dir === 1) { + totalShiftedItems = 0; + page = totalIndicators - 1; + } else if (page === totalIndicators - 1 && remainingItems.current > 0) { + totalShiftedItems += remainingItems.current * -1 - numScrollState * dir; + isRemainingItemsAdded.current = true; } - for (let i = 0; i < responsiveOptions.current.length; i++) { - let res = responsiveOptions.current[i]; + if (itemsContainerRef.current) { + DomHandler.removeClass(itemsContainerRef.current, 'p-items-hidden'); + changePosition(totalShiftedItems); + itemsContainerRef.current.style.transition = 'transform 500ms ease 0s'; + } - if (parseInt(res.breakpoint, 10) >= windowWidth) { - matchedResponsiveData = res; - } + if (props.onPageChange) { + setTotalShiftedItemsState(totalShiftedItems); + props.onPageChange({ + page + }); + } else { + setPageState(page); + setTotalShiftedItemsState(totalShiftedItems); } + }; - if (numScrollState !== matchedResponsiveData.numScroll) { - let page = Math.floor((currentPage * numScrollState) / matchedResponsiveData.numScroll); - let totalShiftedItems = (matchedResponsiveData.numScroll * page) * -1; + const calculatePosition = () => { + if (itemsContainerRef.current && responsiveOptions.current) { + let windowWidth = window.innerWidth; + let matchedResponsiveData = { + numVisible: props.numVisible, + numScroll: props.numScroll + }; - if (isCircular) { - totalShiftedItems -= matchedResponsiveData.numVisible; + for (let i = 0; i < responsiveOptions.current.length; i++) { + let res = responsiveOptions.current[i]; + + if (parseInt(res.breakpoint, 10) >= windowWidth) { + matchedResponsiveData = res; + } } - setTotalShiftedItemsState(totalShiftedItems); - setNumScrollState(matchedResponsiveData.numScroll); + if (numScrollState !== matchedResponsiveData.numScroll) { + let page = Math.floor((currentPage * numScrollState) / matchedResponsiveData.numScroll); + let totalShiftedItems = matchedResponsiveData.numScroll * page * -1; + + if (isCircular) { + totalShiftedItems -= matchedResponsiveData.numVisible; + } - if (props.onPageChange) { - props.onPageChange({ - page - }) + setTotalShiftedItemsState(totalShiftedItems); + setNumScrollState(matchedResponsiveData.numScroll); + + if (props.onPageChange) { + props.onPageChange({ + page + }); + } else { + setPageState(page); + } } - else { - setPageState(page); + + if (numVisibleState !== matchedResponsiveData.numVisible) { + setNumVisibleState(matchedResponsiveData.numVisible); } } + }; - if (numVisibleState !== matchedResponsiveData.numVisible) { - setNumVisibleState(matchedResponsiveData.numVisible); + const navBackward = (e, page) => { + if (circular || currentPage !== 0) { + step(1, page); } - } - } - - const navBackward = (e, page) => { - if (circular || currentPage !== 0) { - step(1, page); - } - - allowAutoplay.current = false; - if (e.cancelable) { - e.preventDefault(); - } - } - - const navForward = (e, page) => { - if (circular || currentPage < (totalIndicators - 1)) { - step(-1, page); - } - - allowAutoplay.current = false; - if (e.cancelable) { - e.preventDefault(); - } - } - - const onDotClick = (e, page) => { - if (page > currentPage) { - navForward(e, page); - } - else if (page < currentPage) { - navBackward(e, page); - } - } - - const onTransitionEnd = (e) => { - if (itemsContainerRef.current && e.propertyName === 'transform') { - DomHandler.addClass(itemsContainerRef.current, 'p-items-hidden'); - itemsContainerRef.current.style.transition = ''; - - if ((pageState === 0 || pageState === (totalIndicators - 1)) && isCircular) { - changePosition(totalShiftedItemsState); + + allowAutoplay.current = false; + if (e.cancelable) { + e.preventDefault(); } - } - } + }; - const onTouchStart = (e) => { - const touchobj = e.changedTouches[0]; + const navForward = (e, page) => { + if (circular || currentPage < totalIndicators - 1) { + step(-1, page); + } - startPos.current = { - x: touchobj.pageX, - y: touchobj.pageY + allowAutoplay.current = false; + if (e.cancelable) { + e.preventDefault(); + } }; - } - - const onTouchMove = (e) => { - if (e.cancelable) { - e.preventDefault(); - } - } - - const onTouchEnd = (e) => { - const touchobj = e.changedTouches[0]; - - if (isVertical) { - changePageOnTouch(e, (touchobj.pageY - startPos.current.y)); - } - else { - changePageOnTouch(e, (touchobj.pageX - startPos.current.x)); - } - } - - const changePageOnTouch = (e, diff) => { - if (Math.abs(diff) > swipeThreshold) { - if (diff < 0) { // left - navForward(e); + + const onDotClick = (e, page) => { + if (page > currentPage) { + navForward(e, page); + } else if (page < currentPage) { + navBackward(e, page); } - else { // right - navBackward(e); + }; + + const onTransitionEnd = (e) => { + if (itemsContainerRef.current && e.propertyName === 'transform') { + DomHandler.addClass(itemsContainerRef.current, 'p-items-hidden'); + itemsContainerRef.current.style.transition = ''; + + if ((pageState === 0 || pageState === totalIndicators - 1) && isCircular) { + changePosition(totalShiftedItemsState); + } } - } - } + }; + + const onTouchStart = (e) => { + const touchobj = e.changedTouches[0]; - const startAutoplay = () => { - interval.current = setInterval(() => { - if (pageState === (totalIndicators - 1)) { - step(-1, 0); + startPos.current = { + x: touchobj.pageX, + y: touchobj.pageY + }; + }; + + const onTouchMove = (e) => { + if (e.cancelable) { + e.preventDefault(); } - else { - step(-1, pageState + 1); + }; + + const onTouchEnd = (e) => { + const touchobj = e.changedTouches[0]; + + if (isVertical) { + changePageOnTouch(e, touchobj.pageY - startPos.current.y); + } else { + changePageOnTouch(e, touchobj.pageX - startPos.current.x); + } + }; + + const changePageOnTouch = (e, diff) => { + if (Math.abs(diff) > swipeThreshold) { + if (diff < 0) { + // left + navForward(e); + } else { + // right + navBackward(e); + } } - }, props.autoplayInterval); - } + }; - const stopAutoplay = () => { - if (interval.current) { - clearInterval(interval.current); - } - } + const startAutoplay = () => { + interval.current = setInterval(() => { + if (pageState === totalIndicators - 1) { + step(-1, 0); + } else { + step(-1, pageState + 1); + } + }, props.autoplayInterval); + }; - const createStyle = () => { - if (!carouselStyle.current) { - carouselStyle.current = DomHandler.createInlineStyle(PrimeReact.nonce); - } + const stopAutoplay = () => { + if (interval.current) { + clearInterval(interval.current); + } + }; + + const createStyle = () => { + if (!carouselStyle.current) { + carouselStyle.current = DomHandler.createInlineStyle(PrimeReact.nonce); + } - let innerHTML = ` + let innerHTML = ` .p-carousel[${attributeSelector.current}] .p-carousel-item { - flex: 1 0 ${(100 / numVisibleState)}% + flex: 1 0 ${100 / numVisibleState}% } `; - if (props.responsiveOptions) { - responsiveOptions.current = [...props.responsiveOptions]; - responsiveOptions.current.sort((data1, data2) => { - const value1 = data1.breakpoint; - const value2 = data2.breakpoint; - return ObjectUtils.sort(value1, value2, -1, PrimeReact.locale, PrimeReact.nullSortOrder); - }); + if (props.responsiveOptions) { + responsiveOptions.current = [...props.responsiveOptions]; + responsiveOptions.current.sort((data1, data2) => { + const value1 = data1.breakpoint; + const value2 = data2.breakpoint; + return ObjectUtils.sort(value1, value2, -1, PrimeReact.locale, PrimeReact.nullSortOrder); + }); - for (let i = 0; i < responsiveOptions.current.length; i++) { - let res = responsiveOptions.current[i]; + for (let i = 0; i < responsiveOptions.current.length; i++) { + let res = responsiveOptions.current[i]; - innerHTML += ` + innerHTML += ` @media screen and (max-width: ${res.breakpoint}) { .p-carousel[${attributeSelector.current}] .p-carousel-item { - flex: 1 0 ${(100 / res.numVisible)}% + flex: 1 0 ${100 / res.numVisible}% } } - ` + `; + } } - } - - carouselStyle.current.innerHTML = innerHTML; - } - - const changePosition = (totalShiftedItems) => { - if (itemsContainerRef.current) { - itemsContainerRef.current.style.transform = isVertical ? `translate3d(0, ${totalShiftedItems * (100 / numVisibleState)}%, 0)` : `translate3d(${totalShiftedItems * (100 / numVisibleState)}%, 0, 0)`; - } - } - - React.useImperativeHandle(ref, () => ({ - props, - getElement: () => elementRef.current - })); - - useMountEffect(() => { - if (elementRef.current) { - attributeSelector.current = UniqueComponentId(); - elementRef.current.setAttribute(attributeSelector.current, ''); - } - - createStyle(); - calculatePosition(); - changePosition(totalShiftedItemsState); - bindWindowResizeListener(); - }); - useUpdateEffect(() => { - let stateChanged = false; - let totalShiftedItems = totalShiftedItemsState; + carouselStyle.current.innerHTML = innerHTML; + }; - if (props.autoplayInterval) { - stopAutoplay(); - } + const changePosition = (totalShiftedItems) => { + if (itemsContainerRef.current) { + itemsContainerRef.current.style.transform = isVertical ? `translate3d(0, ${totalShiftedItems * (100 / numVisibleState)}%, 0)` : `translate3d(${totalShiftedItems * (100 / numVisibleState)}%, 0, 0)`; + } + }; - if (prevNumScroll !== numScrollState || prevNumVisible !== numVisibleState || (props.value && prevValue && prevValue.length !== props.value.length)) { - remainingItems.current = (props.value.length - numVisibleState) % numScrollState; + React.useImperativeHandle(ref, () => ({ + props, + getElement: () => elementRef.current + })); - let page = currentPage; - if (totalIndicators !== 0 && page >= totalIndicators) { - page = totalIndicators - 1; + useMountEffect(() => { + if (elementRef.current) { + attributeSelector.current = UniqueComponentId(); + elementRef.current.setAttribute(attributeSelector.current, ''); + } - if (props.onPageChange) { - props.onPageChange({ - page - }) - } - else { - setPageState(page); - } + createStyle(); + calculatePosition(); + changePosition(totalShiftedItemsState); + bindWindowResizeListener(); + }); - stateChanged = true; - } + useUpdateEffect(() => { + let stateChanged = false; + let totalShiftedItems = totalShiftedItemsState; - totalShiftedItems = (page * numScrollState) * -1; - if (isCircular) { - totalShiftedItems -= numVisibleState; + if (props.autoplayInterval) { + stopAutoplay(); } - if (page === (totalIndicators - 1) && remainingItems.current > 0) { - totalShiftedItems += (-1 * remainingItems.current) + numScrollState; - isRemainingItemsAdded.current = true; - } - else { - isRemainingItemsAdded.current = false; - } + if (prevNumScroll !== numScrollState || prevNumVisible !== numVisibleState || (props.value && prevValue && prevValue.length !== props.value.length)) { + remainingItems.current = (props.value.length - numVisibleState) % numScrollState; - if (totalShiftedItems !== totalShiftedItemsState) { - setTotalShiftedItemsState(totalShiftedItems); - stateChanged = true; - } + let page = currentPage; + if (totalIndicators !== 0 && page >= totalIndicators) { + page = totalIndicators - 1; - changePosition(totalShiftedItems); - } + if (props.onPageChange) { + props.onPageChange({ + page + }); + } else { + setPageState(page); + } - if (isCircular) { - if (pageState === 0) { - totalShiftedItems = -1 * numVisibleState; - } - else if (totalShiftedItems === 0) { - totalShiftedItems = -1 * props.value.length; - if (remainingItems.current > 0) { + stateChanged = true; + } + + totalShiftedItems = page * numScrollState * -1; + if (isCircular) { + totalShiftedItems -= numVisibleState; + } + + if (page === totalIndicators - 1 && remainingItems.current > 0) { + totalShiftedItems += -1 * remainingItems.current + numScrollState; isRemainingItemsAdded.current = true; + } else { + isRemainingItemsAdded.current = false; } - } - if (totalShiftedItems !== totalShiftedItemsState) { - setTotalShiftedItemsState(totalShiftedItems); - stateChanged = true; + if (totalShiftedItems !== totalShiftedItemsState) { + setTotalShiftedItemsState(totalShiftedItems); + stateChanged = true; + } + + changePosition(totalShiftedItems); } - } - if (prevPage !== props.page) { - if (props.page > prevPage && props.page <= (totalIndicators - 1)) { - step(-1, props.page); + if (isCircular) { + if (pageState === 0) { + totalShiftedItems = -1 * numVisibleState; + } else if (totalShiftedItems === 0) { + totalShiftedItems = -1 * props.value.length; + if (remainingItems.current > 0) { + isRemainingItemsAdded.current = true; + } + } + + if (totalShiftedItems !== totalShiftedItemsState) { + setTotalShiftedItemsState(totalShiftedItems); + stateChanged = true; + } } - else if (props.page < prevPage) { - step(1, props.page); + + if (prevPage !== props.page) { + if (props.page > prevPage && props.page <= totalIndicators - 1) { + step(-1, props.page); + } else if (props.page < prevPage) { + step(1, props.page); + } } - } - if (!stateChanged && isAutoplay) { - startAutoplay(); - } - }); + if (!stateChanged && isAutoplay) { + startAutoplay(); + } + }); - useUnmountEffect(() => { - if (props.autoplayInterval) { - stopAutoplay(); - } - }); + useUnmountEffect(() => { + if (props.autoplayInterval) { + stopAutoplay(); + } + }); - const createItems = () => { - if (props.value && props.value.length) { - let clonedItemsForStarting = null; - let clonedItemsForFinishing = null; + const createItems = () => { + if (props.value && props.value.length) { + let clonedItemsForStarting = null; + let clonedItemsForFinishing = null; - if (isCircular) { - let clonedElements = null; + if (isCircular) { + let clonedElements = null; + + clonedElements = props.value.slice(-1 * numVisibleState); + clonedItemsForStarting = clonedElements.map((item, index) => { + const isActive = totalShiftedItemsState * -1 === props.value.length + numVisibleState; + const start = index === 0; + const end = index === clonedElements.length - 1; + const key = index + '_scloned'; + + return ; + }); + + clonedElements = props.value.slice(0, numVisibleState); + clonedItemsForFinishing = clonedElements.map((item, index) => { + const isActive = totalShiftedItemsState === 0; + const start = index === 0; + const end = index === clonedElements.length - 1; + const key = index + '_fcloned'; + + return ; + }); + } - clonedElements = props.value.slice(-1 * numVisibleState); - clonedItemsForStarting = clonedElements.map((item, index) => { - const isActive = (totalShiftedItemsState * -1) === (props.value.length + numVisibleState); - const start = index === 0; - const end = index === (clonedElements.length - 1); - const key = index + '_scloned'; + const items = props.value.map((item, index) => { + const firstIndex = isCircular ? -1 * (totalShiftedItemsState + numVisibleState) : totalShiftedItemsState * -1; + const lastIndex = firstIndex + numVisibleState - 1; + const isActive = firstIndex <= index && lastIndex >= index; + const start = firstIndex === index; + const end = lastIndex === index; - return + return ; }); - clonedElements = props.value.slice(0, numVisibleState); - clonedItemsForFinishing = clonedElements.map((item, index) => { - const isActive = totalShiftedItemsState === 0; - const start = index === 0; - const end = index === (clonedElements.length - 1); - const key = index + '_fcloned'; + return ( + <> + {clonedItemsForStarting} + {items} + {clonedItemsForFinishing} + + ); + } + }; - return - }); + const createHeader = () => { + if (props.header) { + return
    {props.header}
    ; } - const items = props.value.map((item, index) => { - const firstIndex = isCircular ? (-1 * (totalShiftedItemsState + numVisibleState)) : (totalShiftedItemsState * -1); - const lastIndex = firstIndex + numVisibleState - 1; - const isActive = firstIndex <= index && lastIndex >= index; - const start = firstIndex === index; - const end = lastIndex === index; + return null; + }; - return - }); + const createFooter = () => { + if (props.footer) { + return
    {props.footer}
    ; + } - return ( - <> - {clonedItemsForStarting} - {items} - {clonedItemsForFinishing} - - ) - } - } - - const createHeader = () => { - if (props.header) { - return ( -
    - {props.header} -
    - ) - } + return null; + }; - return null; - } + const createContent = () => { + const items = createItems(); + const height = isVertical ? props.verticalViewPortHeight : 'auto'; + const backwardNavigator = createBackwardNavigator(); + const forwardNavigator = createForwardNavigator(); + const className = classNames('p-carousel-container', props.containerClassName); - const createFooter = () => { - if (props.footer) { return ( -
    - {props.footer} +
    + {backwardNavigator} +
    +
    + {items} +
    +
    + {forwardNavigator}
    - ) - } + ); + }; - return null; - } + const createBackwardNavigator = () => { + const isDisabled = (!circular || (props.value && props.value.length < numVisibleState)) && currentPage === 0; + const className = classNames('p-carousel-prev p-link', { + 'p-disabled': isDisabled + }); + const iconClassName = classNames('p-carousel-prev-icon pi', { + 'pi-chevron-left': !isVertical, + 'pi-chevron-up': isVertical + }); - const createContent = () => { - const items = createItems(); - const height = isVertical ? props.verticalViewPortHeight : 'auto'; - const backwardNavigator = createBackwardNavigator(); - const forwardNavigator = createForwardNavigator(); - const className = classNames('p-carousel-container', props.containerClassName); + return
    - ) - - if (getPropValue('footer')) { - const defaultContentOptions = { - accept, - reject, - className: 'p-confirm-popup-footer', - acceptClassName, - rejectClassName, - acceptLabel, - rejectLabel, - element: content, - props: getCurrentProps() - }; + useUnmountEffect(() => { + if (overlayEventListener.current) { + OverlayService.off('overlay-click', overlayEventListener.current); + overlayEventListener.current = null; + } - return ObjectUtils.getJSXElement(getPropValue('footer'), defaultContentOptions); - } + OverlayService.off('confirm-popup', confirm); + ZIndexUtils.clear(overlayRef.current); + }); - return content; - } + React.useImperativeHandle(ref, () => ({ + props, + confirm + })); - const createElement = () => { - const otherProps = ObjectUtils.findDiffKeys(props, ConfirmPopup.defaultProps); - const className = classNames('p-confirm-popup p-component', getPropValue('className')); - const content = createContent(); - const footer = createFooter(); + const createContent = () => { + const currentProps = getCurrentProps(); + const message = ObjectUtils.getJSXElement(getPropValue('message'), currentProps); + const icon = IconUtils.getJSXIcon(getPropValue('icon'), { className: 'p-confirm-popup-icon' }, { props: currentProps }); - return ( - -
    - {content} - {footer} + return ( +
    + {icon} + {message}
    - - ) - } - - const element = createElement(); + ); + }; + + const createFooter = () => { + const acceptClassName = classNames('p-confirm-popup-accept p-button-sm', getPropValue('acceptClassName')); + const rejectClassName = classNames( + 'p-confirm-popup-reject p-button-sm', + { + 'p-button-text': !getPropValue('rejectClassName') + }, + getPropValue('rejectClassName') + ); + + const content = ( +
    +
    + ); + + if (getPropValue('footer')) { + const defaultContentOptions = { + accept, + reject, + className: 'p-confirm-popup-footer', + acceptClassName, + rejectClassName, + acceptLabel, + rejectLabel, + element: content, + props: getCurrentProps() + }; + + return ObjectUtils.getJSXElement(getPropValue('footer'), defaultContentOptions); + } - return -})); + return content; + }; + + const createElement = () => { + const otherProps = ObjectUtils.findDiffKeys(props, ConfirmPopup.defaultProps); + const className = classNames('p-confirm-popup p-component', getPropValue('className')); + const content = createContent(); + const footer = createFooter(); + + return ( + +
    + {content} + {footer} +
    +
    + ); + }; + + const element = createElement(); + + return ; + }) +); ConfirmPopup.displayName = 'ConfirmPopup'; ConfirmPopup.defaultProps = { @@ -274,4 +292,4 @@ ConfirmPopup.defaultProps = { accept: null, reject: null, transitionOptions: null -} +}; diff --git a/components/lib/contextmenu/ContextMenu.js b/components/lib/contextmenu/ContextMenu.js index 8d78f53537..987a9ebac2 100644 --- a/components/lib/contextmenu/ContextMenu.js +++ b/components/lib/contextmenu/ContextMenu.js @@ -6,188 +6,200 @@ import { Portal } from '../portal/Portal'; import { classNames, DomHandler, ObjectUtils, ZIndexUtils } from '../utils/Utils'; import { ContextMenuSub } from './ContextMenuSub'; -export const ContextMenu = React.memo(React.forwardRef((props, ref) => { - const [visibleState, setVisibleState] = React.useState(false); - const [reshowState, setReshowState] = React.useState(false); - const [resetMenuState, setResetMenuState] = React.useState(false); - const menuRef = React.useRef(null); - const currentEvent = React.useRef(null); - - const [bindDocumentClickListener, unbindDocumentClickListener] = useEventListener({ - type: 'click', listener: event => { - if (isOutsideClicked(event) && event.button !== 2) { - hide(event); - setResetMenuState(true); - } - } - }); - - const [bindDocumentContextMenuListener,] = useEventListener({ - type: 'contextmenu', listener: event => { - show(event); - } - }); - - const [bindDocumentResizeListener, unbindDocumentResizeListener] = useResizeListener({ - listener: event => { - if (visibleState && !DomHandler.isTouchDevice()) { - hide(event); +export const ContextMenu = React.memo( + React.forwardRef((props, ref) => { + const [visibleState, setVisibleState] = React.useState(false); + const [reshowState, setReshowState] = React.useState(false); + const [resetMenuState, setResetMenuState] = React.useState(false); + const menuRef = React.useRef(null); + const currentEvent = React.useRef(null); + + const [bindDocumentClickListener, unbindDocumentClickListener] = useEventListener({ + type: 'click', + listener: (event) => { + if (isOutsideClicked(event) && event.button !== 2) { + hide(event); + setResetMenuState(true); + } } - } - }); - - const onMenuClick = () => { - setResetMenuState(false); - } - - const onMenuMouseEnter = () => { - setResetMenuState(false); - } - - const show = (event) => { - event.stopPropagation(); - event.preventDefault(); - - currentEvent.current = event; - - if (visibleState) { - setReshowState(true); - } - else { - setVisibleState(true); - props.onShow && props.onShow(currentEvent.current); - } - } - - const hide = (event) => { - currentEvent.current = event; - - setVisibleState(false); - setReshowState(false); - props.onHide && props.onHide(currentEvent.current); - } - - const onEnter = () => { - if (props.autoZIndex) { - ZIndexUtils.set('menu', menuRef.current, PrimeReact.autoZIndex, props.baseZIndex || PrimeReact.zIndex['menu']); - } - - position(currentEvent.current); - } - - const onEntered = () => { - bindDocumentListeners(); - } - - const onExit = () => { - unbindDocumentListeners(); - ZIndexUtils.clear(menuRef.current); - } - - const onExited = () => { - ZIndexUtils.clear(menuRef.current); - } - - const position = (event) => { - if (event) { - let left = event.pageX + 1; - let top = event.pageY + 1; - let width = menuRef.current.offsetParent ? menuRef.current.offsetWidth : DomHandler.getHiddenElementOuterWidth(menuRef.current); - let height = menuRef.current.offsetParent ? menuRef.current.offsetHeight : DomHandler.getHiddenElementOuterHeight(menuRef.current); - let viewport = DomHandler.getViewport(); - - //flip - if (left + width - document.body.scrollLeft > viewport.width) { - left -= width; + }); + + const [bindDocumentContextMenuListener] = useEventListener({ + type: 'contextmenu', + listener: (event) => { + show(event); } + }); - //flip - if (top + height - document.body.scrollTop > viewport.height) { - top -= height; + const [bindDocumentResizeListener, unbindDocumentResizeListener] = useResizeListener({ + listener: (event) => { + if (visibleState && !DomHandler.isTouchDevice()) { + hide(event); + } } + }); + + const onMenuClick = () => { + setResetMenuState(false); + }; + + const onMenuMouseEnter = () => { + setResetMenuState(false); + }; - //fit - if (left < document.body.scrollLeft) { - left = document.body.scrollLeft; + const show = (event) => { + event.stopPropagation(); + event.preventDefault(); + + currentEvent.current = event; + + if (visibleState) { + setReshowState(true); + } else { + setVisibleState(true); + props.onShow && props.onShow(currentEvent.current); } + }; + + const hide = (event) => { + currentEvent.current = event; - //fit - if (top < document.body.scrollTop) { - top = document.body.scrollTop; + setVisibleState(false); + setReshowState(false); + props.onHide && props.onHide(currentEvent.current); + }; + + const onEnter = () => { + if (props.autoZIndex) { + ZIndexUtils.set('menu', menuRef.current, PrimeReact.autoZIndex, props.baseZIndex || PrimeReact.zIndex['menu']); } - menuRef.current.style.left = left + 'px'; - menuRef.current.style.top = top + 'px'; - } - } + position(currentEvent.current); + }; + + const onEntered = () => { + bindDocumentListeners(); + }; + + const onExit = () => { + unbindDocumentListeners(); + ZIndexUtils.clear(menuRef.current); + }; + + const onExited = () => { + ZIndexUtils.clear(menuRef.current); + }; + + const position = (event) => { + if (event) { + let left = event.pageX + 1; + let top = event.pageY + 1; + let width = menuRef.current.offsetParent ? menuRef.current.offsetWidth : DomHandler.getHiddenElementOuterWidth(menuRef.current); + let height = menuRef.current.offsetParent ? menuRef.current.offsetHeight : DomHandler.getHiddenElementOuterHeight(menuRef.current); + let viewport = DomHandler.getViewport(); + + //flip + if (left + width - document.body.scrollLeft > viewport.width) { + left -= width; + } + + //flip + if (top + height - document.body.scrollTop > viewport.height) { + top -= height; + } + + //fit + if (left < document.body.scrollLeft) { + left = document.body.scrollLeft; + } + + //fit + if (top < document.body.scrollTop) { + top = document.body.scrollTop; + } + + menuRef.current.style.left = left + 'px'; + menuRef.current.style.top = top + 'px'; + } + }; - const onLeafClick = (event) => { - setResetMenuState(true); - hide(event); + const onLeafClick = (event) => { + setResetMenuState(true); + hide(event); - event.stopPropagation(); - } + event.stopPropagation(); + }; - const isOutsideClicked = (event) => { - return menuRef && menuRef.current && !(menuRef.current.isSameNode(event.target) || menuRef.current.contains(event.target)); - } + const isOutsideClicked = (event) => { + return menuRef && menuRef.current && !(menuRef.current.isSameNode(event.target) || menuRef.current.contains(event.target)); + }; - const bindDocumentListeners = () => { - bindDocumentResizeListener(); - bindDocumentClickListener(); - } + const bindDocumentListeners = () => { + bindDocumentResizeListener(); + bindDocumentClickListener(); + }; - const unbindDocumentListeners = () => { - unbindDocumentResizeListener(); - unbindDocumentClickListener(); - } + const unbindDocumentListeners = () => { + unbindDocumentResizeListener(); + unbindDocumentClickListener(); + }; - useMountEffect(() => { - if (props.global) { - bindDocumentContextMenuListener(); - } - }); + useMountEffect(() => { + if (props.global) { + bindDocumentContextMenuListener(); + } + }); - useUpdateEffect(() => { - if (visibleState) { - setVisibleState(false); - setReshowState(false); - setResetMenuState(true); - } - else if (!reshowState && !visibleState && resetMenuState) { - show(currentEvent.current); - } - }, [reshowState]); - - useUnmountEffect(() => { - ZIndexUtils.clear(menuRef.current); - }); - - React.useImperativeHandle(ref, () => ({ - props, - show, - hide, - getElement: () => menuRef.current - })); - - const createContextMenu = () => { - const otherProps = ObjectUtils.findDiffKeys(props, ContextMenu.defaultProps); - const className = classNames('p-contextmenu p-component', props.className); - - return ( - -
    - -
    -
    - ) - } - - const element = createContextMenu(); - - return -})); + useUpdateEffect(() => { + if (visibleState) { + setVisibleState(false); + setReshowState(false); + setResetMenuState(true); + } else if (!reshowState && !visibleState && resetMenuState) { + show(currentEvent.current); + } + }, [reshowState]); + + useUnmountEffect(() => { + ZIndexUtils.clear(menuRef.current); + }); + + React.useImperativeHandle(ref, () => ({ + props, + show, + hide, + getElement: () => menuRef.current + })); + + const createContextMenu = () => { + const otherProps = ObjectUtils.findDiffKeys(props, ContextMenu.defaultProps); + const className = classNames('p-contextmenu p-component', props.className); + + return ( + +
    + +
    +
    + ); + }; + + const element = createContextMenu(); + + return ; + }) +); ContextMenu.displayName = 'ContextMenu'; ContextMenu.defaultProps = { @@ -203,4 +215,4 @@ ContextMenu.defaultProps = { transitionOptions: null, onShow: null, onHide: null -} +}; diff --git a/components/lib/contextmenu/ContextMenuSub.js b/components/lib/contextmenu/ContextMenuSub.js index 031b9626d9..faadcd4897 100644 --- a/components/lib/contextmenu/ContextMenuSub.js +++ b/components/lib/contextmenu/ContextMenuSub.js @@ -19,7 +19,7 @@ export const ContextMenuSub = React.memo((props) => { return; } setActiveItemState(item); - } + }; const onItemClick = (event, item) => { if (item.disabled) { @@ -41,44 +41,43 @@ export const ContextMenuSub = React.memo((props) => { if (!item.items) { props.onLeafClick(event); } - } + }; const position = () => { const parentItem = submenuRef.current.parentElement; - const containerOffset = DomHandler.getOffset(submenuRef.current.parentElement) + const containerOffset = DomHandler.getOffset(submenuRef.current.parentElement); const viewport = DomHandler.getViewport(); const sublistWidth = submenuRef.current.offsetParent ? submenuRef.current.offsetWidth : DomHandler.getHiddenElementOuterWidth(submenuRef.current); const itemOuterWidth = DomHandler.getOuterWidth(parentItem.children[0]); submenuRef.current.style.top = '0px'; - if ((parseInt(containerOffset.left, 10) + itemOuterWidth + sublistWidth) > (viewport.width - DomHandler.calculateScrollbarWidth())) { + if (parseInt(containerOffset.left, 10) + itemOuterWidth + sublistWidth > viewport.width - DomHandler.calculateScrollbarWidth()) { submenuRef.current.style.left = -1 * sublistWidth + 'px'; - } - else { + } else { submenuRef.current.style.left = itemOuterWidth + 'px'; } - } + }; const onEnter = () => { position(); - } + }; useUpdateEffect(() => { active && position(); }); const createSeparator = (index) => { - return
  • - } + return
  • ; + }; const createSubmenu = (item) => { if (item.items) { - return + return ; } return null; - } + }; const createMenuItem = (item, index) => { const active = activeItemState === item; @@ -92,8 +91,7 @@ export const ContextMenuSub = React.memo((props) => { const submenuIcon = item.items && ; const submenu = createSubmenu(item); let content = ( - onItemClick(event, item, index)} role="menuitem" - aria-haspopup={item.items != null} aria-disabled={item.disabled}> + onItemClick(event, item, index)} role="menuitem" aria-haspopup={item.items != null} aria-disabled={item.disabled}> {icon} {label} {submenuIcon} @@ -121,16 +119,16 @@ export const ContextMenuSub = React.memo((props) => { {content} {submenu} - ) - } + ); + }; const createItem = (item, index) => { return item.separator ? createSeparator(index) : createMenuItem(item, index); - } + }; const createMenu = () => { return props.model ? props.model.map(createItem) : null; - } + }; const className = classNames({ 'p-submenu-list': !props.root @@ -143,7 +141,7 @@ export const ContextMenuSub = React.memo((props) => { {submenu} - ) + ); }); ContextMenuSub.displayName = 'ContextMenuSub'; diff --git a/components/lib/csstransition/CSSTransition.js b/components/lib/csstransition/CSSTransition.js index 8651720d3e..fabf276d30 100644 --- a/components/lib/csstransition/CSSTransition.js +++ b/components/lib/csstransition/CSSTransition.js @@ -10,43 +10,43 @@ export const CSSTransition = React.forwardRef((props, ref) => { const onEnter = (node, isAppearing) => { props.onEnter && props.onEnter(node, isAppearing); // component props.options && props.options.onEnter && props.options.onEnter(node, isAppearing); // user option - } + }; const onEntering = (node, isAppearing) => { props.onEntering && props.onEntering(node, isAppearing); // component props.options && props.options.onEntering && props.options.onEntering(node, isAppearing); // user option - } + }; const onEntered = (node, isAppearing) => { props.onEntered && props.onEntered(node, isAppearing); // component props.options && props.options.onEntered && props.options.onEntered(node, isAppearing); // user option - } + }; const onExit = (node) => { props.onExit && props.onExit(node); // component props.options && props.options.onExit && props.options.onExit(node); // user option - } + }; const onExiting = (node) => { props.onExiting && props.onExiting(node); // component props.options && props.options.onExiting && props.options.onExiting(node); // user option - } + }; const onExited = (node) => { props.onExited && props.onExited(node); // component props.options && props.options.onExited && props.options.onExited(node); // user option - } + }; useUpdateEffect(() => { - if (disabled) { // no animation + if (disabled) { + // no animation const node = ObjectUtils.getRefElement(props.nodeRef); if (props.in) { onEnter(node, true); onEntering(node, true); onEntered(node, true); - } - else { + } else { onExit(node); onExiting(node); onExited(node); @@ -56,21 +56,16 @@ export const CSSTransition = React.forwardRef((props, ref) => { if (disabled) { return props.in ? props.children : null; - } - else { + } else { const immutableProps = { nodeRef: props.nodeRef, in: props.in, onEnter: onEnter, onEntering: onEntering, onEntered: onEntered, onExit: onExit, onExiting: onExiting, onExited: onExited }; const mutableProps = { classNames: props.classNames, timeout: props.timeout, unmountOnExit: props.unmountOnExit }; const mergedProps = { ...mutableProps, ...(props.options || {}), ...immutableProps }; - return ( - - {props.children} - - ) + return {props.children}; } }); CSSTransition.displayName = 'CSSTransition'; CSSTransition.defaultProps = { __TYPE: 'CSSTransition' -} +}; diff --git a/components/lib/csstransition/csstransition.d.ts b/components/lib/csstransition/csstransition.d.ts index fbeb684245..70833394e4 100644 --- a/components/lib/csstransition/csstransition.d.ts +++ b/components/lib/csstransition/csstransition.d.ts @@ -3,6 +3,6 @@ import { CSSTransitionProps as ReactCSSTransitionProps } from 'react-transition- export type CSSTransitionProps = ReactCSSTransitionProps & { disabled?: boolean; -} +}; -export declare class CSSTransition extends React.Component, any> { } +export declare class CSSTransition extends React.Component, any> {} diff --git a/components/lib/datascroller/DataScroller.js b/components/lib/datascroller/DataScroller.js index e5040793bb..38784cc791 100644 --- a/components/lib/datascroller/DataScroller.js +++ b/components/lib/datascroller/DataScroller.js @@ -3,213 +3,205 @@ import { localeOption } from '../api/Api'; import { useMountEffect, useUnmountEffect, useUpdateEffect } from '../hooks/Hooks'; import { classNames, ObjectUtils } from '../utils/Utils'; -export const DataScroller = React.memo(React.forwardRef((props, ref) => { - const [dataToRenderState, setDataToRenderState] = React.useState([]); - const elementRef = React.useRef(null); - const contentRef = React.useRef(null); - const value = React.useRef(props.value); - const dataToRender = React.useRef([]); - const first = React.useRef(0); - const scrollFunction = React.useRef(null); - - const handleDataChange = () => { - if (props.lazy) { - dataToRender.current = value.current; +export const DataScroller = React.memo( + React.forwardRef((props, ref) => { + const [dataToRenderState, setDataToRenderState] = React.useState([]); + const elementRef = React.useRef(null); + const contentRef = React.useRef(null); + const value = React.useRef(props.value); + const dataToRender = React.useRef([]); + const first = React.useRef(0); + const scrollFunction = React.useRef(null); + + const handleDataChange = () => { + if (props.lazy) { + dataToRender.current = value.current; + setDataToRenderState([...dataToRender.current]); + } else { + load(); + } + }; + + const load = () => { + if (props.lazy) { + if (props.onLazyLoad) { + props.onLazyLoad(createLazyLoadMetadata()); + } + + first.current += props.rows; + } else { + if (value.current) { + for (let i = first.current; i < first.current + props.rows; i++) { + if (i >= value.current.length) { + break; + } + + dataToRender.current.push(value.current[i]); + } + + if (value.current.length !== 0) { + first.current += props.rows; + } + + setDataToRenderState([...dataToRender.current]); + } + } + }; + + const reset = () => { + first.current = 0; + dataToRender.current = []; setDataToRenderState([...dataToRender.current]); - } - else { load(); - } - } + }; - const load = () => { - if (props.lazy) { - if (props.onLazyLoad) { - props.onLazyLoad(createLazyLoadMetadata()); - } + const isEmpty = () => { + return !dataToRender.current || dataToRender.current.length === 0; + }; + + const createLazyLoadMetadata = () => { + return { + first: first.current, + rows: props.rows + }; + }; + + const bindScrollListener = () => { + if (props.inline) { + scrollFunction.current = () => { + let scrollTop = contentRef.current.scrollTop, + scrollHeight = contentRef.current.scrollHeight, + viewportHeight = contentRef.current.clientHeight; - first.current += props.rows; - } - else { - if (value.current) { - for (let i = first.current; i < (first.current + props.rows); i++) { - if (i >= value.current.length) { - break; + if (scrollTop >= scrollHeight * props.buffer - viewportHeight) { + load(); + } + }; + + contentRef.current.addEventListener('scroll', scrollFunction.current); + } else { + scrollFunction.current = () => { + let docBody = document.body, + docElement = document.documentElement, + scrollTop = window.pageYOffset || document.documentElement.scrollTop, + winHeight = docElement.clientHeight, + docHeight = Math.max(docBody.scrollHeight, docBody.offsetHeight, winHeight, docElement.scrollHeight, docElement.offsetHeight); + + if (scrollTop >= docHeight * props.buffer - winHeight) { + load(); } + }; - dataToRender.current.push(value.current[i]); - } + window.addEventListener('scroll', scrollFunction.current); + } + }; - if (value.current.length !== 0) { - first.current += props.rows; + const unbindScrollListener = () => { + if (scrollFunction.current) { + if (props.inline && contentRef.current) { + contentRef.current.removeEventListener('scroll', scrollFunction.current); + } else if (!props.loader) { + window.removeEventListener('scroll', scrollFunction.current); } - - setDataToRenderState([...dataToRender.current]); } - } - } - - const reset = () => { - first.current = 0; - dataToRender.current = []; - setDataToRenderState([...dataToRender.current]); - load(); - } - - const isEmpty = () => { - return !dataToRender.current || (dataToRender.current.length === 0); - } - - const createLazyLoadMetadata = () => { - return { - first: first.current, - rows: props.rows + + scrollFunction.current = null; }; - } - const bindScrollListener = () => { - if (props.inline) { - scrollFunction.current = () => { - let scrollTop = contentRef.current.scrollTop, - scrollHeight = contentRef.current.scrollHeight, - viewportHeight = contentRef.current.clientHeight; + useMountEffect(() => { + load(); - if ((scrollTop >= ((scrollHeight * props.buffer) - (viewportHeight)))) { - load(); - } + if (!props.loader) { + bindScrollListener(); } + }); - contentRef.current.addEventListener('scroll', scrollFunction.current); - } - else { - scrollFunction.current = () => { - let docBody = document.body, - docElement = document.documentElement, - scrollTop = (window.pageYOffset || document.documentElement.scrollTop), - winHeight = docElement.clientHeight, - docHeight = Math.max(docBody.scrollHeight, docBody.offsetHeight, winHeight, docElement.scrollHeight, docElement.offsetHeight); - - if (scrollTop >= ((docHeight * props.buffer) - winHeight)) { - load(); - } + useUpdateEffect(() => { + if (props.value) { + value.current = props.value; + + first.current = 0; + dataToRender.current = []; + handleDataChange(); } + }, [props.value]); - window.addEventListener('scroll', scrollFunction.current); - } - } + useUpdateEffect(() => { + if (props.loader) { + unbindScrollListener(); + } + }, [props.loader]); - const unbindScrollListener = () => { - if (scrollFunction.current) { - if (props.inline && contentRef.current) { - contentRef.current.removeEventListener('scroll', scrollFunction.current); + useUnmountEffect(() => { + if (scrollFunction.current) { + unbindScrollListener(); + } + }); + + React.useImperativeHandle(ref, () => ({ + props, + load, + reset, + getElement: () => elementRef.current, + getContent: () => contentRef.current + })); + + const createHeader = () => { + if (props.header) { + return
    {props.header}
    ; } - else if (!props.loader) { - window.removeEventListener('scroll', scrollFunction.current); + + return null; + }; + + const createFooter = () => { + if (props.footer) { + return
    {props.footer}
    ; } - } - scrollFunction.current = null; - } + return null; + }; - useMountEffect(() => { - load(); + const createItem = (_value, index) => { + const content = props.itemTemplate ? props.itemTemplate(_value) : _value; - if (!props.loader) { - bindScrollListener(); - } - }); + return
  • {content}
  • ; + }; - useUpdateEffect(() => { - if (props.value) { - value.current = props.value; + const createEmptyMessage = () => { + const content = ObjectUtils.getJSXElement(props.emptyMessage, props) || localeOption('emptyMessage'); - first.current = 0; - dataToRender.current = []; - handleDataChange(); - } - }, [props.value]); - - useUpdateEffect(() => { - if (props.loader) { - unbindScrollListener(); - } - }, [props.loader]); - - useUnmountEffect(() => { - if (scrollFunction.current) { - unbindScrollListener(); - } - }); - - React.useImperativeHandle(ref, () => ({ - props, - load, - reset, - getElement: () => elementRef.current, - getContent: () => contentRef.current - })); - - const createHeader = () => { - if (props.header) { - return
    {props.header}
    - } - - return null; - } - - const createFooter = () => { - if (props.footer) { - return
    {props.footer}
    - } - - return null; - } - - const createItem = (_value, index) => { - const content = props.itemTemplate ? props.itemTemplate(_value) : _value; + return
  • {content}
  • ; + }; - return ( -
  • - {content} -
  • - ) - } + const createContent = () => { + const content = ObjectUtils.isNotEmpty(dataToRenderState) ? dataToRenderState.map(createItem) : createEmptyMessage(); - const createEmptyMessage = () => { - const content = ObjectUtils.getJSXElement(props.emptyMessage, props) || localeOption('emptyMessage'); + return ( +
    +
      {content}
    +
    + ); + }; - return
  • {content}
  • - } + const otherProps = ObjectUtils.findDiffKeys(props, DataScroller.defaultProps); + const className = classNames('p-datascroller p-component', props.className, { + 'p-datascroller-inline': props.inline + }); - const createContent = () => { - const content = ObjectUtils.isNotEmpty(dataToRenderState) ? dataToRenderState.map(createItem) : createEmptyMessage(); + const header = createHeader(); + const footer = createFooter(); + const content = createContent(); return ( -
    -
      - {content} -
    +
    + {header} + {content} + {footer}
    - ) - } - - const otherProps = ObjectUtils.findDiffKeys(props, DataScroller.defaultProps); - const className = classNames('p-datascroller p-component', props.className, { - 'p-datascroller-inline': props.inline - }); - - const header = createHeader(); - const footer = createFooter(); - const content = createContent(); - - return ( -
    - {header} - {content} - {footer} -
    - ) -})); + ); + }) +); DataScroller.displayName = 'DataScroller'; DataScroller.defaultProps = { @@ -229,4 +221,4 @@ DataScroller.defaultProps = { header: null, footer: null, lazy: false -} +}; diff --git a/components/lib/datatable/BodyCell.js b/components/lib/datatable/BodyCell.js index 8f8b9680c0..e31f8ab262 100644 --- a/components/lib/datatable/BodyCell.js +++ b/components/lib/datatable/BodyCell.js @@ -19,16 +19,18 @@ export const BodyCell = React.memo((props) => { const getColumnProp = (prop) => (props.column ? props.column.props[prop] : null); const field = getColumnProp('field') || `field_${props.index}`; - const editingKey = props.dataKey ? (props.rowData[props.dataKey] || props.rowIndex) : props.rowIndex; + const editingKey = props.dataKey ? props.rowData[props.dataKey] || props.rowIndex : props.rowIndex; const [bindDocumentClickListener, unbindDocumentClickListener] = useEventListener({ - type: 'click', listener: (e) => { + type: 'click', + listener: (e) => { if (!selfClick.current && isOutsideClicked(e.target)) { switchCellToViewMode(e, true); } selfClick.current = false; - }, options: true + }, + options: true }); if (props.editMode === 'row' && props.editing !== editingState) { @@ -37,34 +39,34 @@ export const BodyCell = React.memo((props) => { const isEditable = () => { return getColumnProp('editor'); - } + }; const isSelected = () => { - return props.selection ? (props.selection instanceof Array ? findIndex(props.selection) > -1 : equals(props.selection)) : false - } + return props.selection ? (props.selection instanceof Array ? findIndex(props.selection) > -1 : equals(props.selection)) : false; + }; const equalsData = (data) => { - return props.compareSelectionBy === 'equals' ? (data === props.rowData) : ObjectUtils.equals(data, props.rowData, props.dataKey); - } + return props.compareSelectionBy === 'equals' ? data === props.rowData : ObjectUtils.equals(data, props.rowData, props.dataKey); + }; const equals = (selectedCell) => { return (selectedCell.rowIndex === props.rowIndex || equalsData(selectedCell.rowData)) && (selectedCell.field === field || selectedCell.cellIndex === props.index); - } + }; const isOutsideClicked = (target) => { return elementRef.current && !(elementRef.current.isSameNode(target) || elementRef.current.contains(target)); - } + }; const getVirtualScrollerOption = (option) => { return props.virtualScrollerOptions ? props.virtualScrollerOptions[option] : null; - } + }; const getStyle = () => { const bodyStyle = getColumnProp('bodyStyle'); const columnStyle = getColumnProp('style'); return getColumnProp('frozen') ? Object.assign({}, columnStyle, bodyStyle, styleObjectState) : Object.assign({}, columnStyle, bodyStyle); - } + }; const getCellParams = () => { return { @@ -76,32 +78,32 @@ export const BodyCell = React.memo((props) => { selected: isSelected(), column: props.column, props - } - } + }; + }; const getCellCallbackParams = (event) => { const params = getCellParams(); return { originalEvent: event, ...params - } - } + }; + }; const resolveFieldData = (data) => { return ObjectUtils.resolveFieldData(data || props.rowData, field); - } + }; const getEditingRowData = () => { return props.editingMeta && props.editingMeta[editingKey] ? props.editingMeta[editingKey].data : props.rowData; - } + }; const getTabIndex = (cellSelected) => { - return props.allowCellSelection ? (cellSelected ? 0 : (props.rowIndex === 0 && props.index === 0 ? props.tabIndex : -1)) : null; - } + return props.allowCellSelection ? (cellSelected ? 0 : props.rowIndex === 0 && props.index === 0 ? props.tabIndex : -1) : null; + }; const findIndex = (collection) => { - return (collection || []).findIndex(data => equals(data)); - } + return (collection || []).findIndex((data) => equals(data)); + }; const closeCell = (event) => { const params = getCellCallbackParams(event); @@ -119,7 +121,7 @@ export const BodyCell = React.memo((props) => { overlayEventListener.current = null; selfClick.current = false; }, 1); - } + }; const switchCellToViewMode = (event, submit) => { const callbackParams = getCellCallbackParams(event); @@ -146,44 +148,43 @@ export const BodyCell = React.memo((props) => { } closeCell(event); - } - else { + } else { event.preventDefault(); } - } + }; const findNextSelectableCell = (cell) => { const nextCell = cell.nextElementSibling; return nextCell ? (DomHandler.hasClass(nextCell, 'p-selectable-cell') ? nextCell : findNextSelectableCell(nextCell)) : null; - } + }; const findPrevSelectableCell = (cell) => { const prevCell = cell.previousElementSibling; return prevCell ? (DomHandler.hasClass(prevCell, 'p-selectable-cell') ? prevCell : findPrevSelectableCell(prevCell)) : null; - } + }; const findDownSelectableCell = (cell) => { const downRow = cell.parentElement.nextElementSibling; const downCell = downRow ? downRow.children[props.index] : null; return downRow && downCell ? (DomHandler.hasClass(downRow, 'p-selectable-row') && DomHandler.hasClass(downCell, 'p-selectable-cell') ? downCell : findDownSelectableCell(downCell)) : null; - } + }; const findUpSelectableCell = (cell) => { const upRow = cell.parentElement.previousElementSibling; const upCell = upRow ? upRow.children[props.index] : null; return upRow && upCell ? (DomHandler.hasClass(upRow, 'p-selectable-row') && DomHandler.hasClass(upCell, 'p-selectable-cell') ? upCell : findUpSelectableCell(upCell)) : null; - } + }; const changeTabIndex = (currentCell, nextCell) => { if (currentCell && nextCell) { currentCell.tabIndex = -1; nextCell.tabIndex = props.tabIndex; } - } + }; const focusOnElement = () => { clearTimeout(tabindexTimeout.current); @@ -195,7 +196,7 @@ export const BodyCell = React.memo((props) => { keyHelperRef.current && (keyHelperRef.current.tabIndex = editingState ? -1 : 0); }, 1); - } + }; const focusOnInit = () => { clearTimeout(initFocusTimeout.current); @@ -203,7 +204,7 @@ export const BodyCell = React.memo((props) => { const focusableEl = props.editMode === 'row' ? DomHandler.findSingle(elementRef.current, '.p-row-editor-init') : null; focusableEl && focusableEl.focus(); }, 1); - } + }; const updateStickyPosition = () => { if (getColumnProp('frozen')) { @@ -216,8 +217,7 @@ export const BodyCell = React.memo((props) => { right = DomHandler.getOuterWidth(next) + parseFloat(next.style.right || 0); } styleObject['right'] = right + 'px'; - } - else { + } else { let left = 0; let prev = elementRef.current.previousElementSibling; if (prev) { @@ -229,7 +229,7 @@ export const BodyCell = React.memo((props) => { const isSameStyle = styleObjectState['left'] === styleObject['left'] && styleObjectState['right'] === styleObject['right']; !isSameStyle && setStyleObjectState(styleObject); } - } + }; const editorCallback = (val) => { let editingRowData = { ...editingRowDataState }; @@ -239,7 +239,7 @@ export const BodyCell = React.memo((props) => { // update editing meta for complete methods on row mode props.editingMeta[editingKey].data[field] = val; - } + }; const onClick = (event) => { const params = getCellCallbackParams(event); @@ -280,25 +280,27 @@ export const BodyCell = React.memo((props) => { if (props.allowCellSelection && props.onClick) { props.onClick(params); } - } + }; const onMouseDown = (event) => { const params = getCellCallbackParams(event); props.onMouseDown && props.onMouseDown(params); - } + }; const onMouseUp = (event) => { const params = getCellCallbackParams(event); props.onMouseUp && props.onMouseUp(params); - } + }; const onKeyDown = (event) => { if (props.editMode !== 'row') { - if (event.which === 13 || event.which === 9) { // tab || enter + if (event.which === 13 || event.which === 9) { + // tab || enter switchCellToViewMode(event, true); } - if (event.which === 27) { // escape + if (event.which === 27) { + // escape switchCellToViewMode(event, false); } } @@ -372,7 +374,7 @@ export const BodyCell = React.memo((props) => { break; } } - } + }; const onBlur = (event) => { selfClick.current = false; @@ -380,11 +382,11 @@ export const BodyCell = React.memo((props) => { if (props.editMode !== 'row' && editingState && getColumnProp('cellEditValidatorEvent') === 'blur') { switchCellToViewMode(event, true); } - } + }; const onEditorFocus = (event) => { onClick(event); - } + }; const onRadioChange = (event) => { props.onRadioChange({ @@ -392,7 +394,7 @@ export const BodyCell = React.memo((props) => { data: props.rowData, index: props.rowIndex }); - } + }; const onCheckboxChange = (event) => { props.onCheckboxChange({ @@ -400,7 +402,7 @@ export const BodyCell = React.memo((props) => { data: props.rowData, index: props.rowIndex }); - } + }; const onRowToggle = (event) => { props.onRowToggle({ @@ -409,21 +411,21 @@ export const BodyCell = React.memo((props) => { }); event.preventDefault(); - } + }; const onRowEditInit = (event) => { props.onRowEditInit({ originalEvent: event, data: props.rowData, newData: getEditingRowData(), field: field, index: props.rowIndex }); - } + }; const onRowEditSave = (event) => { props.onRowEditSave({ originalEvent: event, data: props.rowData, newData: getEditingRowData(), field: field, index: props.rowIndex }); focusOnInit(); - } + }; const onRowEditCancel = (event) => { props.onRowEditCancel({ originalEvent: event, data: props.rowData, newData: getEditingRowData(), field: field, index: props.rowIndex }); focusOnInit(); - } + }; React.useEffect(() => { if (getColumnProp('frozen')) { @@ -461,7 +463,7 @@ export const BodyCell = React.memo((props) => { const options = getVirtualScrollerOption('getLoaderOptions')(props.rowIndex, { cellIndex: props.index, cellFirst: props.index === 0, - cellLast: props.index === (getVirtualScrollerOption('columns').length - 1), + cellLast: props.index === getVirtualScrollerOption('columns').length - 1, cellEven: props.index % 2 === 0, cellOdd: props.index % 2 !== 0, column: props.column, @@ -469,12 +471,8 @@ export const BodyCell = React.memo((props) => { }); const content = ObjectUtils.getJSXElement(getVirtualScrollerOption('loadingTemplate'), options); - return ( - - {content} - - ) - } + return {content}; + }; const createElement = () => { let content, editorKeyHelper; @@ -512,13 +510,11 @@ export const BodyCell = React.memo((props) => { {selectionMode === 'single' && } {selectionMode === 'multiple' && } - ) - } - else if (rowReorder) { + ); + } else if (rowReorder) { const showReorder = props.showRowReorderElement ? props.showRowReorderElement(props.rowData, { rowIndex: props.rowIndex, props: props.tableProps }) : true; content = showReorder && ; - } - else if (expander) { + } else if (expander) { const iconClassName = classNames('p-row-toggler-icon', props.expanded ? props.expandedRowIcon : props.collapsedRowIcon); const ariaControls = `${props.tableSelector}_content_${props.rowIndex}_expanded`; const expanderProps = { @@ -538,8 +534,7 @@ export const BodyCell = React.memo((props) => { expanderProps['element'] = content; content = ObjectUtils.getJSXElement(body, props.rowData, { column: props.column, field: field, rowIndex: props.rowIndex, frozenRow: props.frozenRow, props: props.tableProps, expander: expanderProps }); } - } - else if (isRowEditor && rowEditor) { + } else if (isRowEditor && rowEditor) { let rowEditorProps = {}; if (editingState) { @@ -565,8 +560,7 @@ export const BodyCell = React.memo((props) => { ); - } - else { + } else { rowEditorProps = { editing: false, onInitClick: onRowEditInit, @@ -586,32 +580,41 @@ export const BodyCell = React.memo((props) => { rowEditorProps['element'] = content; content = ObjectUtils.getJSXElement(body, props.rowData, { column: props.column, field: field, rowIndex: props.rowIndex, frozenRow: props.frozenRow, props: props.tableProps, rowEditor: rowEditorProps }); } - } - else if (body && !editingState) { + } else if (body && !editingState) { content = body ? ObjectUtils.getJSXElement(body, props.rowData, { column: props.column, field: field, rowIndex: props.rowIndex, frozenRow: props.frozenRow, props: props.tableProps }) : value; - } - else if (editor && editingState) { - content = ObjectUtils.getJSXElement(editor, { rowData: editingRowDataState, value: resolveFieldData(editingRowDataState), column: props.column, field: field, rowIndex: props.rowIndex, frozenRow: props.frozenRow, props: props.tableProps, editorCallback }); - } - else { + } else if (editor && editingState) { + content = ObjectUtils.getJSXElement(editor, { + rowData: editingRowDataState, + value: resolveFieldData(editingRowDataState), + column: props.column, + field: field, + rowIndex: props.rowIndex, + frozenRow: props.frozenRow, + props: props.tableProps, + editorCallback + }); + } else { content = value; } if (!isRowEditor && editor) { /* eslint-disable */ - editorKeyHelper =
    ; + editorKeyHelper = ( + + + + ); /* eslint-enable */ } return ( - + {editorKeyHelper} {title} {content} - ) - } + ); + }; return getVirtualScrollerOption('loading') ? createLoading() : createElement(); }); diff --git a/components/lib/datatable/BodyRow.js b/components/lib/datatable/BodyRow.js index 5b199800aa..0b7e2d3b5e 100644 --- a/components/lib/datatable/BodyRow.js +++ b/components/lib/datatable/BodyRow.js @@ -8,58 +8,55 @@ export const BodyRow = React.memo((props) => { const isFocusable = () => { return props.selectionMode && props.selectionModeInColumn !== 'single' && props.selectionModeInColumn !== 'multiple'; - } + }; const isGrouped = (column) => { if (props.groupRowsBy && getColumnProp(column, 'field')) { - return Array.isArray(props.groupRowsBy) ? - props.groupRowsBy.indexOf(column.props.field) > -1 : - props.groupRowsBy === column.props.field; + return Array.isArray(props.groupRowsBy) ? props.groupRowsBy.indexOf(column.props.field) > -1 : props.groupRowsBy === column.props.field; } return false; - } + }; const equals = (data1, data2) => { - return props.compareSelectionBy === 'equals' ? (data1 === data2) : ObjectUtils.equals(data1, data2, props.dataKey); - } + return props.compareSelectionBy === 'equals' ? data1 === data2 : ObjectUtils.equals(data1, data2, props.dataKey); + }; const getColumnProp = (col, prop) => { return col ? col.props[prop] : null; - } + }; const getTabIndex = () => { return isFocusable() && !props.allowCellSelection ? (props.index === 0 ? props.tabIndex : -1) : null; - } + }; const findIndex = (collection, rowData) => { - return (collection || []).findIndex(data => equals(rowData, data)); - } + return (collection || []).findIndex((data) => equals(rowData, data)); + }; const changeTabIndex = (currentRow, nextRow) => { if (currentRow && nextRow) { currentRow.tabIndex = -1; nextRow.tabIndex = props.tabIndex; } - } + }; const findNextSelectableRow = (row) => { const nextRow = row.nextElementSibling; return nextRow ? (DomHandler.hasClass(nextRow, 'p-selectable-row') ? nextRow : findNextSelectableRow(nextRow)) : null; - } + }; const findPrevSelectableRow = (row) => { const prevRow = row.previousElementSibling; return prevRow ? (DomHandler.hasClass(prevRow, 'p-selectable-row') ? prevRow : findPrevSelectableRow(prevRow)) : null; - } + }; const shouldRenderBodyCell = (value, column, i) => { if (getColumnProp(column, 'hidden')) { return false; - } - else if (props.rowGroupMode && props.rowGroupMode === 'rowspan' && isGrouped(column)) { + } else if (props.rowGroupMode && props.rowGroupMode === 'rowspan' && isGrouped(column)) { let prevRowData = value[i - 1]; if (prevRowData) { const currentRowFieldData = ObjectUtils.resolveFieldData(value[i], getColumnProp(column, 'field')); @@ -70,7 +67,7 @@ export const BodyRow = React.memo((props) => { } return true; - } + }; const calculateRowGroupSize = (value, column, index) => { if (isGrouped(column)) { @@ -83,34 +80,32 @@ export const BodyRow = React.memo((props) => { let nextRowData = value[++index]; if (nextRowData) { nextRowFieldData = ObjectUtils.resolveFieldData(nextRowData, getColumnProp(column, 'field')); - } - else { + } else { break; } } return groupRowSpan === 1 ? null : groupRowSpan; - } - else { + } else { return null; } - } + }; const onClick = (event) => { props.onRowClick({ originalEvent: event, data: props.rowData, index: props.index }); - } + }; const onDoubleClick = (event) => { props.onRowDoubleClick({ originalEvent: event, data: props.rowData, index: props.index }); - } + }; const onRightClick = (event) => { props.onRowRightClick({ originalEvent: event, data: props.rowData, index: props.index }); - } + }; const onTouchEnd = (event) => { props.onRowTouchEnd(event); - } + }; const onKeyDown = (event) => { if (isFocusable() && !props.allowCellSelection) { @@ -160,35 +155,35 @@ export const BodyRow = React.memo((props) => { break; } } - } + }; const onMouseDown = (event) => { props.onRowMouseDown({ originalEvent: event, data: props.rowData, index: props.index }); - } + }; const onMouseUp = (event) => { props.onRowMouseUp({ originalEvent: event, data: props.rowData, index: props.index }); - } + }; const onDragStart = (event) => { props.onRowDragStart({ originalEvent: event, data: props.rowData, index: props.index }); - } + }; const onDragOver = (event) => { props.onRowDragOver({ originalEvent: event, data: props.rowData, index: props.index }); - } + }; const onDragLeave = (event) => { props.onRowDragLeave({ originalEvent: event, data: props.rowData, index: props.index }); - } + }; const onDragEnd = (event) => { props.onRowDragEnd({ originalEvent: event, data: props.rowData, index: props.index }); - } + }; const onDrop = (event) => { props.onRowDrop({ originalEvent: event, data: props.rowData, index: props.index }); - } + }; const onEditChange = (e, isEditing) => { if (props.onRowEditChange) { @@ -205,19 +200,15 @@ export const BodyRow = React.memo((props) => { // if the key value was changed, stop editing for the new key value too let newDataKeyValue = String(ObjectUtils.resolveFieldData(newData, dataKey)); delete editingRows[newDataKeyValue]; - } - else { + } else { editingRows[dataKeyValue] = true; } - } - else { + } else { let editingRowIndex = findIndex(props.editingRows, data); editingRows = props.editingRows ? [...props.editingRows] : []; - if (editingRowIndex !== -1) - editingRows = editingRows.filter((val, i) => i !== editingRowIndex); - else - editingRows.push(data); + if (editingRowIndex !== -1) editingRows = editingRows.filter((val, i) => i !== editingRowIndex); + else editingRows.push(data); } props.onRowEditChange({ @@ -225,11 +216,10 @@ export const BodyRow = React.memo((props) => { data: editingRows, index }); - } - else { + } else { setEditingState(isEditing); } - } + }; const onEditInit = (e) => { const { originalEvent: event } = e; @@ -245,7 +235,7 @@ export const BodyRow = React.memo((props) => { onEditChange(e, true); event.preventDefault(); - } + }; const onEditSave = (e) => { const { originalEvent: event, newData } = e; @@ -269,7 +259,7 @@ export const BodyRow = React.memo((props) => { } event.preventDefault(); - } + }; const onEditCancel = (e) => { const { originalEvent: event } = e; @@ -285,7 +275,7 @@ export const BodyRow = React.memo((props) => { onEditChange(e, false); event.preventDefault(); - } + }; const createContent = () => { return props.columns.map((col, i) => { @@ -294,20 +284,53 @@ export const BodyRow = React.memo((props) => { const rowSpan = props.rowGroupMode === 'rowspan' ? calculateRowGroupSize(props.value, col, props.index) : null; return ( - - ) + + ); } return null; - }) - } + }); + }; const rowClassName = ObjectUtils.getPropValue(props.rowClassName, props.rowData, { props: props.tableProps }); const className = classNames(rowClassName, { @@ -321,12 +344,27 @@ export const BodyRow = React.memo((props) => { const tabIndex = getTabIndex(); return ( - + {content} - ) + ); }); BodyRow.displayName = 'BodyRow'; diff --git a/components/lib/datatable/ColumnFilter.js b/components/lib/datatable/ColumnFilter.js index 07e1c96fbd..7770f49c98 100644 --- a/components/lib/datatable/ColumnFilter.js +++ b/components/lib/datatable/ColumnFilter.js @@ -22,67 +22,68 @@ export const ColumnFilter = React.memo((props) => { const filterStoreModel = props.filtersStore && props.filtersStore[field]; const [bindOverlayListener, unbindOverlayListener] = useOverlayListener({ - target: iconRef, overlay: overlayRef, listener: (event, { type, valid }) => { + target: iconRef, + overlay: overlayRef, + listener: (event, { type, valid }) => { if (valid) { - (type === 'outside') ? - (!selfClick.current && !isTargetClicked(event.target)) && hide() : hide(); + type === 'outside' ? !selfClick.current && !isTargetClicked(event.target) && hide() : hide(); } selfClick.current = false; - }, when: overlayVisibleState + }, + when: overlayVisibleState }); const hasFilter = () => { - if (!filterStoreModel || !filterModel) - return false; - return filterStoreModel.operator ? - !isFilterBlank(filterModel.constraints[0].value) && filterStoreModel.constraints[0].value !== filterModel.constraints[0].value : - !isFilterBlank(filterModel.value) && filterStoreModel.value !== filterModel.value; - } + if (!filterStoreModel || !filterModel) return false; + return filterStoreModel.operator + ? !isFilterBlank(filterModel.constraints[0].value) && filterStoreModel.constraints[0].value !== filterModel.constraints[0].value + : !isFilterBlank(filterModel.value) && filterStoreModel.value !== filterModel.value; + }; const hasRowFilter = () => { return filterModel && !isFilterBlank(filterModel.value); - } + }; const isFilterBlank = (filter) => { return ObjectUtils.isEmpty(filter); - } + }; const isRowMatchModeSelected = (matchMode) => { return filterModel && filterModel.matchMode === matchMode; - } + }; const showMenuButton = () => { return getColumnProp('showFilterMenu') && (props.display === 'row' ? getColumnProp('dataType') !== 'boolean' : true); - } + }; const matchModes = () => { - return getColumnProp('filterMatchModeOptions') || PrimeReact.filterMatchModeOptions[findDataType()].map(key => ({ label: localeOption(key), value: key })); - } + return getColumnProp('filterMatchModeOptions') || PrimeReact.filterMatchModeOptions[findDataType()].map((key) => ({ label: localeOption(key), value: key })); + }; const isShowMatchModes = () => { return getColumnProp('dataType') !== 'boolean' && getColumnProp('showFilterMatchModes') && matchModes() && getColumnProp('showFilterMenuOptions'); - } + }; const isShowOperator = () => { return getColumnProp('showFilterOperator') && filterModel && filterModel.operator && getColumnProp('showFilterMenuOptions'); - } + }; const showRemoveIcon = () => { return fieldConstraints().length > 1; - } + }; const isShowAddConstraint = () => { - return getColumnProp('showAddButton') && filterModel && filterModel.operator && (fieldConstraints() && fieldConstraints().length < getColumnProp('maxConstraints')) && getColumnProp('showFilterMenuOptions'); - } + return getColumnProp('showAddButton') && filterModel && filterModel.operator && fieldConstraints() && fieldConstraints().length < getColumnProp('maxConstraints') && getColumnProp('showFilterMenuOptions'); + }; const isOutsideClicked = (target) => { return !isTargetClicked(target) && overlayRef.current && !(overlayRef.current.isSameNode(target) || overlayRef.current.contains(target)); - } + }; const isTargetClicked = (target) => { return iconRef.current && (iconRef.current.isSameNode(target) || iconRef.current.contains(target)); - } + }; const getDefaultConstraint = () => { if (filterStoreModel) { @@ -91,31 +92,29 @@ export const ColumnFilter = React.memo((props) => { matchMode: filterStoreModel.constraints[0].matchMode, operator: filterStoreModel.operator }; - } - else { + } else { return { matchMode: filterStoreModel.matchMode }; } } - } + }; const findDataType = () => { const dataType = getColumnProp('dataType'); const matchMode = getColumnProp('filterMatchMode'); - const hasMatchMode = (key) => PrimeReact.filterMatchModeOptions[key].some(mode => mode === matchMode); + const hasMatchMode = (key) => PrimeReact.filterMatchModeOptions[key].some((mode) => mode === matchMode); if (matchMode === 'custom' && !hasMatchMode(dataType)) { PrimeReact.filterMatchModeOptions[dataType].push(FilterMatchMode.CUSTOM); return dataType; - } - else if (matchMode) { - return Object.keys(PrimeReact.filterMatchModeOptions).find(key => hasMatchMode(key)) || dataType; + } else if (matchMode) { + return Object.keys(PrimeReact.filterMatchModeOptions).find((key) => hasMatchMode(key)) || dataType; } return dataType; - } + }; const clearFilter = () => { const filterClearCallback = getColumnProp('onFilterClear'); @@ -125,8 +124,7 @@ export const ColumnFilter = React.memo((props) => { filters[field].constraints.splice(1); filters[field].operator = defaultConstraint.operator; filters[field].constraints[0] = { value: null, matchMode: defaultConstraint.matchMode }; - } - else { + } else { filters[field].value = null; filters[field].matchMode = defaultConstraint.matchMode; } @@ -135,7 +133,7 @@ export const ColumnFilter = React.memo((props) => { props.onFilterChange(filters); props.onFilterApply(); hide(); - } + }; const applyFilter = () => { const filterApplyClickCallback = getColumnProp('onFilterApplyClick'); @@ -143,11 +141,11 @@ export const ColumnFilter = React.memo((props) => { filterApplyClickCallback && filterApplyClickCallback({ field, constraints: filterModel }); props.onFilterApply(); hide(); - } + }; const toggleMenu = () => { setOverlayVisibleState((prevVisible) => !prevVisible); - } + }; const onToggleButtonKeyDown = (event) => { switch (event.key) { @@ -161,8 +159,7 @@ export const ColumnFilter = React.memo((props) => { const focusable = DomHandler.getFirstFocusableElement(overlayRef.current); focusable && focusable.focus(); event.preventDefault(); - } - else if (event.altKey) { + } else if (event.altKey) { setOverlayVisibleState(true); event.preventDefault(); } @@ -171,14 +168,14 @@ export const ColumnFilter = React.memo((props) => { default: break; } - } + }; const onContentKeyDown = (event) => { if (event.key === 'Escape') { hide(); iconRef.current && iconRef.current.focus(); } - } + }; const onInputChange = (event, index) => { let filters = { ...props.filters }; @@ -186,8 +183,7 @@ export const ColumnFilter = React.memo((props) => { if (props.display === 'menu') { filters[field].constraints[index].value = value; - } - else { + } else { filters[field].value = value; } @@ -196,7 +192,7 @@ export const ColumnFilter = React.memo((props) => { if (!getColumnProp('showApplyButton') || props.display === 'row') { props.onFilterApply(); } - } + }; const onRowMatchModeChange = (matchMode) => { const filterMatchModeChangeCallback = getColumnProp('onFilterMatchModeChange'); @@ -207,7 +203,7 @@ export const ColumnFilter = React.memo((props) => { props.onFilterChange(filters); props.onFilterApply(); hide(); - } + }; const onRowMatchModeKeyDown = (event, matchMode, clear) => { let item = event.target; @@ -244,7 +240,7 @@ export const ColumnFilter = React.memo((props) => { default: break; } - } + }; const onOperatorChange = (e) => { const filterOperationChangeCallback = getColumnProp('onFilterOperatorChange'); @@ -257,7 +253,7 @@ export const ColumnFilter = React.memo((props) => { if (!getColumnProp('showApplyButton')) { props.onFilterApply(); } - } + }; const onMenuMatchModeChange = (value, index) => { const filterMatchModeChangeCallback = getColumnProp('onFilterMatchModeChange'); @@ -269,7 +265,7 @@ export const ColumnFilter = React.memo((props) => { if (!getColumnProp('showApplyButton')) { props.onFilterApply(); } - } + }; const addConstraint = () => { const filterConstraintAddCallback = getColumnProp('onFilterConstraintAdd'); @@ -283,7 +279,7 @@ export const ColumnFilter = React.memo((props) => { if (!getColumnProp('showApplyButton')) { props.onFilterApply(); } - } + }; const removeConstraint = (index) => { const filterConstraintRemoveCallback = getColumnProp('onFilterConstraintRemove'); @@ -295,23 +291,23 @@ export const ColumnFilter = React.memo((props) => { if (!getColumnProp('showApplyButton')) { props.onFilterApply(); } - } + }; const findNextItem = (item) => { const nextItem = item.nextElementSibling; return nextItem ? (DomHandler.hasClass(nextItem, 'p-column-filter-separator') ? findNextItem(nextItem) : nextItem) : item.parentElement.firstElementChild; - } + }; const findPrevItem = (item) => { const prevItem = item.previousElementSibling; return prevItem ? (DomHandler.hasClass(prevItem, 'p-column-filter-separator') ? findPrevItem(prevItem) : prevItem) : item.parentElement.lastElementChild; - } + }; const hide = () => { setOverlayVisibleState(false); - } + }; const onContentClick = (event) => { selfClick.current = true; @@ -320,11 +316,11 @@ export const ColumnFilter = React.memo((props) => { originalEvent: event, target: overlayRef.current }); - } + }; const onContentMouseDown = () => { selfClick.current = true; - } + }; const onOverlayEnter = () => { ZIndexUtils.set('overlay', overlayRef.current, PrimeReact.autoZIndex, PrimeReact.zIndex['overlay']); @@ -334,63 +330,63 @@ export const ColumnFilter = React.memo((props) => { if (!isOutsideClicked(e.target)) { selfClick.current = true; } - } + }; OverlayService.on('overlay-click', overlayEventListener.current); - } + }; const onOverlayEntered = () => { bindOverlayListener(); - } + }; const onOverlayExit = () => { onOverlayHide(); - } + }; const onOverlayExited = () => { ZIndexUtils.clear(overlayRef.current); - } + }; const onOverlayHide = () => { unbindOverlayListener(); OverlayService.off('overlay-click', overlayEventListener.current); overlayEventListener.current = null; selfClick.current = false; - } + }; const fieldConstraints = () => { return filterModel ? filterModel.constraints || [filterModel] : []; - } + }; const operator = () => { return filterModel.operator; - } + }; const operatorOptions = () => { return [ { label: localeOption('matchAll'), value: FilterOperator.AND }, { label: localeOption('matchAny'), value: FilterOperator.OR } ]; - } + }; const noFilterLabel = () => { return localeOption('noFilter'); - } + }; const removeRuleButtonLabel = () => { return localeOption('removeRule'); - } + }; const addRuleButtonLabel = () => { return localeOption('addRule'); - } + }; const clearButtonLabel = () => { return localeOption('clear'); - } + }; const applyButtonLabel = () => { return localeOption('apply'); - } + }; const filterCallback = (value, index = 0) => { let filters = { ...props.filters }; @@ -398,13 +394,13 @@ export const ColumnFilter = React.memo((props) => { props.display === 'menu' && meta && meta.operator ? (filters[field].constraints[index].value = value) : (filters[field].value = value); props.onFilterChange(filters); - } + }; const filterApplyCallback = (...args) => { args && filterCallback(args[0], args[1]); props.onFilterApply(); - } + }; useUpdateEffect(() => { if (props.display === 'menu' && overlayVisibleState) { @@ -427,29 +423,26 @@ export const ColumnFilter = React.memo((props) => { const createFilterElement = (model, index) => { const value = model ? model.value : null; - return getColumnProp('filterElement') ? + return getColumnProp('filterElement') ? ( ObjectUtils.getJSXElement(getColumnProp('filterElement'), { field, index, filterModel: model, value, filterApplyCallback, filterCallback }) - : onInputChange(e, index)} className="p-column-filter" placeholder={getColumnProp('filterPlaceholder')} maxLength={getColumnProp('filterMaxLength')} />; - } + ) : ( + onInputChange(e, index)} className="p-column-filter" placeholder={getColumnProp('filterPlaceholder')} maxLength={getColumnProp('filterMaxLength')} /> + ); + }; const createRowFilterElement = () => { if (props.display === 'row') { const content = createFilterElement(filterModel, 0); - return ( -
    - {content} -
    - ) - + return
    {content}
    ; } return null; - } + }; const createMenuFilterElement = (fieldConstraint, index) => { return props.display === 'menu' ? createFilterElement(fieldConstraint, index) : null; - } + }; const createMenuButton = () => { if (showMenuButton()) { @@ -462,11 +455,11 @@ export const ColumnFilter = React.memo((props) => { - ) + ); } return null; - } + }; const createClearButton = () => { if (getColumnProp('showClearButton') && props.display === 'row') { @@ -478,11 +471,11 @@ export const ColumnFilter = React.memo((props) => { - ) + ); } return null; - } + }; const createRowItems = () => { if (isShowMatchModes()) { @@ -491,27 +484,27 @@ export const ColumnFilter = React.memo((props) => { return (
      - { - _matchModes.map((matchMode, i) => { - const { value, label } = matchMode; - const className = classNames('p-column-filter-row-item', { 'p-highlight': isRowMatchModeSelected(value) }); - const tabIndex = i === 0 ? 0 : null; - - return ( -
    • onRowMatchModeChange(value)} onKeyDown={(e) => onRowMatchModeKeyDown(e, matchMode)} tabIndex={tabIndex}> - {label} -
    • - ) - }) - } + {_matchModes.map((matchMode, i) => { + const { value, label } = matchMode; + const className = classNames('p-column-filter-row-item', { 'p-highlight': isRowMatchModeSelected(value) }); + const tabIndex = i === 0 ? 0 : null; + + return ( +
    • onRowMatchModeChange(value)} onKeyDown={(e) => onRowMatchModeKeyDown(e, matchMode)} tabIndex={tabIndex}> + {label} +
    • + ); + })}
    • -
    • onRowMatchModeKeyDown(e, null, true)}>{_noFilterLabel}
    • +
    • onRowMatchModeKeyDown(e, null, true)}> + {_noFilterLabel} +
    - ) + ); } return null; - } + }; const createOperator = () => { if (isShowOperator()) { @@ -522,61 +515,53 @@ export const ColumnFilter = React.memo((props) => {
    - ) + ); } return null; - } + }; const createMatchModeDropdown = (constraint, index) => { if (isShowMatchModes()) { const options = matchModes(); - return ( - onMenuMatchModeChange(e.value, index)} className="p-column-filter-matchmode-dropdown" /> - ) + return onMenuMatchModeChange(e.value, index)} className="p-column-filter-matchmode-dropdown" />; } return null; - } + }; const createRemoveButton = (index) => { if (showRemoveIcon()) { const removeRuleLabel = removeRuleButtonLabel(); - return ( -
    - ) + ); } return null; - } + }; const createFilterClearButton = () => { if (getColumnProp('showClearButton')) { if (!getColumnProp('filterClear')) { const clearLabel = clearButtonLabel(); - return
    - ) - } + ); + }; const createItems = () => { const operator = createOperator(); @@ -645,8 +630,8 @@ export const ColumnFilter = React.memo((props) => { {addRule} {buttonBar} - ) - } + ); + }; const createOverlay = () => { const style = getColumnProp('filterMenuStyle'); @@ -661,8 +646,17 @@ export const ColumnFilter = React.memo((props) => { return ( - +
    {filterHeader} {items} @@ -670,8 +664,8 @@ export const ColumnFilter = React.memo((props) => {
    - ) - } + ); + }; const className = classNames('p-column-filter p-fluid', { 'p-column-filter-row': props.display === 'row', @@ -689,7 +683,7 @@ export const ColumnFilter = React.memo((props) => { {clearButton} {overlay} - ) + ); }); ColumnFilter.displayName = 'ColumnFilter'; diff --git a/components/lib/datatable/DataTable.js b/components/lib/datatable/DataTable.js index 1991fa45c9..5a2d5fd8b3 100644 --- a/components/lib/datatable/DataTable.js +++ b/components/lib/datatable/DataTable.js @@ -54,7 +54,8 @@ export const DataTable = React.forwardRef((props, ref) => { } const [bindDocumentMouseMoveListener, unbindDocumentMouseMoveListener] = useEventListener({ - type: 'mousemove', listener: (event) => { + type: 'mousemove', + listener: (event) => { if (columnResizing.current) { onColumnResize(event); } @@ -62,7 +63,8 @@ export const DataTable = React.forwardRef((props, ref) => { }); const [bindDocumentMouseUpListener, unbindDocumentMouseUpListener] = useEventListener({ - type: 'mouseup', listener: () => { + type: 'mouseup', + listener: () => { if (columnResizing.current) { columnResizing.current = false; onColumnResizeEnd(); @@ -72,51 +74,51 @@ export const DataTable = React.forwardRef((props, ref) => { const isCustomStateStorage = () => { return props.stateStorage === 'custom'; - } + }; const isStateful = () => { return props.stateKey != null || isCustomStateStorage(); - } + }; const isVirtualScrollerDisabled = () => { return ObjectUtils.isEmpty(props.virtualScrollerOptions) || !props.scrollable; - } + }; const isEquals = (data1, data2) => { - return props.compareSelectionBy === 'equals' ? (data1 === data2) : ObjectUtils.equals(data1, data2, props.dataKey); - } + return props.compareSelectionBy === 'equals' ? data1 === data2 : ObjectUtils.equals(data1, data2, props.dataKey); + }; const hasFilter = () => { return ObjectUtils.isNotEmpty(getFilters()) || props.globalFilter; - } + }; const getFirst = () => { return props.onPage ? props.first : firstState; - } + }; const getRows = () => { return props.onPage ? props.rows : rowsState; - } + }; const getSortField = () => { return props.onSort ? props.sortField : sortFieldState; - } + }; const getSortOrder = () => { return props.onSort ? props.sortOrder : sortOrderState; - } + }; const getMultiSortMeta = () => { return (props.onSort ? props.multiSortMeta : multiSortMetaState) || []; - } + }; const getFilters = () => { return props.onFilter ? props.filters : filtersState; - } + }; const getColumnProp = (col, prop) => { return col.props[prop]; - } + }; const getColumns = (ignoreReorderable) => { const columns = React.Children.toArray(props.children); @@ -132,11 +134,11 @@ export const DataTable = React.forwardRef((props, ref) => { return arr; }, []); - return [...orderedColumns, ...columns.filter(col => orderedColumns.indexOf(col) < 0)]; + return [...orderedColumns, ...columns.filter((col) => orderedColumns.indexOf(col) < 0)]; } return columns; - } + }; const getStorage = () => { switch (props.stateStorage) { @@ -152,7 +154,7 @@ export const DataTable = React.forwardRef((props, ref) => { default: throw new Error(props.stateStorage + ' is not a valid value for the state storage, supported values are "local", "session" and "custom".'); } - } + }; const saveState = () => { let state = {}; @@ -197,8 +199,7 @@ export const DataTable = React.forwardRef((props, ref) => { if (props.customSaveState) { props.customSaveState(state); } - } - else { + } else { const storage = getStorage(); if (ObjectUtils.isNotEmpty(state)) { storage.setItem(props.stateKey, JSON.stringify(state)); @@ -208,7 +209,7 @@ export const DataTable = React.forwardRef((props, ref) => { if (props.onStateSave) { props.onStateSave(state); } - } + }; const clearState = () => { const storage = getStorage(); @@ -216,7 +217,7 @@ export const DataTable = React.forwardRef((props, ref) => { if (storage && props.stateKey) { storage.removeItem(props.stateKey); } - } + }; const restoreState = () => { let restoredState = {}; @@ -225,14 +226,13 @@ export const DataTable = React.forwardRef((props, ref) => { if (props.customRestoreState) { restoredState = props.customRestoreState(); } - } - else { + } else { const storage = getStorage(); const stateString = storage.getItem(props.stateKey); const dateFormat = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/; const reviver = function (key, value) { - return (typeof value === "string" && dateFormat.test(value)) ? new Date(value) : value; - } + return typeof value === 'string' && dateFormat.test(value) ? new Date(value) : value; + }; if (stateString) { restoredState = JSON.parse(stateString, reviver); @@ -240,11 +240,11 @@ export const DataTable = React.forwardRef((props, ref) => { } _restoreState(restoredState); - } + }; const restoreTableState = (restoredState) => { _restoreState(restoredState); - } + }; const _restoreState = (restoredState = {}) => { if (ObjectUtils.isNotEmpty(restoredState)) { @@ -256,11 +256,10 @@ export const DataTable = React.forwardRef((props, ref) => { const page = Math.floor(first / rows); return { first, rows, page, pageCount }; - } + }; props.onPage(createEvent(getOnPageParams(restoredState.first, restoredState.rows))); - } - else { + } else { setFirstState(restoredState.first); setRowsState(restoredState.rows); } @@ -268,12 +267,13 @@ export const DataTable = React.forwardRef((props, ref) => { if (restoredState.sortField) { if (props.onSort) { - props.onSort(createEvent({ - sortField: restoredState.sortField, - sortOrder: restoredState.sortOrder - })); - } - else { + props.onSort( + createEvent({ + sortField: restoredState.sortField, + sortOrder: restoredState.sortOrder + }) + ); + } else { setSortFieldState(restoredState.sortField); setSortOrderState(restoredState.sortOrder); } @@ -281,11 +281,12 @@ export const DataTable = React.forwardRef((props, ref) => { if (restoredState.multiSortMeta) { if (props.onSort) { - props.onSort(createEvent({ - multiSortMeta: restoredState.multiSortMeta - })); - } - else { + props.onSort( + createEvent({ + multiSortMeta: restoredState.multiSortMeta + }) + ); + } else { setMultiSortMetaState(restoredState.multiSortMeta); } } @@ -294,11 +295,12 @@ export const DataTable = React.forwardRef((props, ref) => { setD_filtersState(cloneFilters(restoredState.filters)); if (props.onFilter) { - props.onFilter(createEvent({ - filters: restoredState.filters - })); - } - else { + props.onFilter( + createEvent({ + filters: restoredState.filters + }) + ); + } else { setFiltersState(cloneFilters(restoredState.filters)); } } @@ -329,18 +331,18 @@ export const DataTable = React.forwardRef((props, ref) => { props.onStateRestore(restoredState); } } - } + }; const saveColumnWidths = (state) => { let widths = []; let headers = DomHandler.find(elementRef.current, '.p-datatable-thead > tr > th'); - headers.forEach(header => widths.push(DomHandler.getOuterWidth(header))); + headers.forEach((header) => widths.push(DomHandler.getOuterWidth(header))); state.columnWidths = widths.join(','); if (props.columnResizeMode === 'expand') { state.tableWidth = DomHandler.getOuterWidth(tableRef.current) + 'px'; } - } + }; const restoreColumnWidths = () => { if (columnWidthsState.current) { @@ -364,19 +366,18 @@ export const DataTable = React.forwardRef((props, ref) => { .p-datatable[${attributeSelectorState}] .p-datatable-tfoot > tr > td:nth-child(${index + 1}) { ${style} } - ` + `; }); styleElement.current.innerHTML = innerHTML; } } - } + }; const findParentHeader = (element) => { if (element.nodeName === 'TH') { return element; - } - else { + } else { let parent = element.parentElement; while (parent.nodeName !== 'TH') { parent = parent.parentElement; @@ -384,58 +385,55 @@ export const DataTable = React.forwardRef((props, ref) => { } return parent; } - } + }; const getGroupRowSortField = () => { - return props.sortMode === 'single' ? props.sortField : (groupRowsSortMetaState ? groupRowsSortMetaState.field : null); - } + return props.sortMode === 'single' ? props.sortField : groupRowsSortMetaState ? groupRowsSortMetaState.field : null; + }; const getSelectableData = (val) => { if (props.showSelectionElement || props.isDataSelectable) { return val.filter((data, index) => { let isSelectable = true; - if (props.showSelectionElement) - isSelectable = props.showSelectionElement({ rowIndex: index, props }); - if (props.isDataSelectable && isSelectable) - isSelectable = props.isDataSelectable({ data, index }); + if (props.showSelectionElement) isSelectable = props.showSelectionElement({ rowIndex: index, props }); + if (props.isDataSelectable && isSelectable) isSelectable = props.isDataSelectable({ data, index }); return isSelectable; }); } return val; - } + }; const allRowsSelected = (processedData) => { if (props.onSelectAllChange) { return props.selectAll; - } - else { + } else { const data = props.selectionPageOnly ? dataToRender(processedData) : processedData; const val = props.frozenValue ? [...props.frozenValue, ...data] : data; const selectableVal = getSelectableData(val); - return selectableVal && props.selection && selectableVal.every(sv => props.selection.some(s => isEquals(s, sv))); + return selectableVal && props.selection && selectableVal.every((sv) => props.selection.some((s) => isEquals(s, sv))); } - } + }; const getSelectionModeInColumn = (columns) => { if (columns) { - const col = columns.find(c => !!c.props.selectionMode); + const col = columns.find((c) => !!c.props.selectionMode); return col ? col.props.selectionMode : null; } return null; - } + }; const findColumnByKey = (columns, key) => { - return ObjectUtils.isNotEmpty(columns) ? columns.find(col => col.props.columnKey === key || col.props.field === key) : null; - } + return ObjectUtils.isNotEmpty(columns) ? columns.find((col) => col.props.columnKey === key || col.props.field === key) : null; + }; const getTotalRecords = (data) => { return props.lazy ? props.totalRecords : data ? data.length : 0; - } + }; const onEditingMetaChange = (e) => { const { rowData, field, editingKey, rowIndex, editing } = e; @@ -445,20 +443,19 @@ export const DataTable = React.forwardRef((props, ref) => { if (editing) { !meta && (meta = editingMeta[editingKey] = { data: { ...rowData }, fields: [] }); meta['fields'].push(field); - } - else if (meta) { - const fields = meta['fields'].filter(f => f !== field); - !fields.length ? (delete editingMeta[editingKey]) : (meta['fields'] = fields); + } else if (meta) { + const fields = meta['fields'].filter((f) => f !== field); + !fields.length ? delete editingMeta[editingKey] : (meta['fields'] = fields); } setEditingMetaState(editingMeta); - } + }; const clearEditingMetaData = () => { if (props.editMode && ObjectUtils.isNotEmpty(editingMetaState)) { setEditingMetaState({}); } - } + }; const onColumnResizeStart = (e) => { const { originalEvent: event, column } = e; @@ -466,10 +463,10 @@ export const DataTable = React.forwardRef((props, ref) => { resizeColumn.current = column; resizeColumnElement.current = event.currentTarget.parentElement; columnResizing.current = true; - lastResizeHelperX.current = (event.pageX - containerLeft + elementRef.current.scrollLeft); + lastResizeHelperX.current = event.pageX - containerLeft + elementRef.current.scrollLeft; bindColumnResizeEvents(); - } + }; const onColumnResize = (event) => { const containerLeft = DomHandler.getOffset(elementRef.current).left; @@ -477,10 +474,10 @@ export const DataTable = React.forwardRef((props, ref) => { DomHandler.addClass(elementRef.current, 'p-unselectable-text'); resizeHelperRef.current.style.height = elementRef.current.offsetHeight + 'px'; resizeHelperRef.current.style.top = 0 + 'px'; - resizeHelperRef.current.style.left = (event.pageX - containerLeft + elementRef.current.scrollLeft) + 'px'; + resizeHelperRef.current.style.left = event.pageX - containerLeft + elementRef.current.scrollLeft + 'px'; resizeHelperRef.current.style.display = 'block'; - } + }; const onColumnResizeEnd = () => { let delta = resizeHelperRef.current.offsetLeft - lastResizeHelperX.current; @@ -496,12 +493,11 @@ export const DataTable = React.forwardRef((props, ref) => { if (newColumnWidth > 15 && nextColumnWidth > 15) { resizeTableCells(newColumnWidth, nextColumnWidth); } - } - else if (props.columnResizeMode === 'expand') { + } else if (props.columnResizeMode === 'expand') { const tableWidth = tableRef.current.offsetWidth + delta + 'px'; const updateTableWidth = (el) => { !!el && (el.style.width = el.style.minWidth = tableWidth); - } + }; updateTableWidth(tableRef.current); if (!isVirtualScrollerDisabled()) { @@ -534,20 +530,20 @@ export const DataTable = React.forwardRef((props, ref) => { DomHandler.removeClass(elementRef.current, 'p-unselectable-text'); unbindColumnResizeEvents(); - } + }; const resizeTableCells = (newColumnWidth, nextColumnWidth) => { let widths = []; let colIndex = DomHandler.index(resizeColumnElement.current); let headers = DomHandler.find(tableRef.current, '.p-datatable-thead > tr > th'); - headers.forEach(header => widths.push(DomHandler.getOuterWidth(header))); + headers.forEach((header) => widths.push(DomHandler.getOuterWidth(header))); destroyStyleElement(); createStyleElement(); let innerHTML = ''; widths.forEach((width, index) => { - let colWidth = index === colIndex ? newColumnWidth : (nextColumnWidth && index === colIndex + 1) ? nextColumnWidth : width; + let colWidth = index === colIndex ? newColumnWidth : nextColumnWidth && index === colIndex + 1 ? nextColumnWidth : width; let style = props.scrollable ? `flex: 1 1 ${colWidth}px !important` : `width: ${colWidth}px !important`; innerHTML += ` .p-datatable[${attributeSelectorState}] .p-datatable-thead > tr > th:nth-child(${index + 1}), @@ -555,21 +551,21 @@ export const DataTable = React.forwardRef((props, ref) => { .p-datatable[${attributeSelectorState}] .p-datatable-tfoot > tr > td:nth-child(${index + 1}) { ${style} } - ` + `; }); styleElement.current.innerHTML = innerHTML; - } + }; const bindColumnResizeEvents = () => { bindDocumentMouseMoveListener(); bindDocumentMouseUpListener(); - } + }; const unbindColumnResizeEvents = () => { unbindDocumentMouseMoveListener(); unbindDocumentMouseUpListener(); - } + }; const onColumnHeaderMouseDown = (e) => { DomHandler.clearSelection(); @@ -577,29 +573,25 @@ export const DataTable = React.forwardRef((props, ref) => { const { originalEvent: event, column } = e; if (props.reorderableColumns && getColumnProp(column, 'reorderable') !== false && !getColumnProp(column, 'frozen')) { - if (event.target.nodeName === 'INPUT' || event.target.nodeName === 'TEXTAREA' || DomHandler.hasClass(event.target, 'p-column-resizer')) - event.currentTarget.draggable = false; - else - event.currentTarget.draggable = true; + if (event.target.nodeName === 'INPUT' || event.target.nodeName === 'TEXTAREA' || DomHandler.hasClass(event.target, 'p-column-resizer')) event.currentTarget.draggable = false; + else event.currentTarget.draggable = true; } - } + }; const onColumnHeaderCheckboxChange = (e, processedData) => { if (props.onSelectAllChange) { props.onSelectAllChange(e); - } - else { + } else { const { originalEvent, checked } = e; const data = props.selectionPageOnly ? dataToRender(processedData) : processedData; - let selection = props.selectionPageOnly && props.selection ? props.selection.filter(s => !data.some(d => isEquals(s, d))) : []; + let selection = props.selectionPageOnly && props.selection ? props.selection.filter((s) => !data.some((d) => isEquals(s, d))) : []; if (checked) { selection = props.frozenValue ? [...selection, ...props.frozenValue, ...data] : [...selection, ...data]; selection = getSelectableData(selection); props.onAllRowsSelect && props.onAllRowsSelect({ originalEvent, data: selection, type: 'all' }); - } - else { + } else { props.onAllRowsUnselect && props.onAllRowsUnselect({ originalEvent, data: selection, type: 'all' }); } @@ -611,7 +603,7 @@ export const DataTable = React.forwardRef((props, ref) => { }); } } - } + }; const onColumnHeaderDragStart = (e) => { const { originalEvent: event, column } = e; @@ -627,7 +619,7 @@ export const DataTable = React.forwardRef((props, ref) => { draggedColumn.current = column; draggedColumnElement.current = findParentHeader(event.currentTarget); event.dataTransfer.setData('text', 'b'); // Firefox requires this to make dragging possible - } + }; const onColumnHeaderDragOver = (e) => { const { originalEvent: event, column } = e; @@ -645,13 +637,12 @@ export const DataTable = React.forwardRef((props, ref) => { reorderIndicatorDownRef.current.style.top = dropHeaderOffset.top - containerOffset.top + dropHeader.offsetHeight + 'px'; if (event.pageX > columnCenter) { - reorderIndicatorUpRef.current.style.left = (targetLeft + dropHeader.offsetWidth - Math.ceil(colReorderIconWidth.current / 2)) + 'px'; - reorderIndicatorDownRef.current.style.left = (targetLeft + dropHeader.offsetWidth - Math.ceil(colReorderIconWidth.current / 2)) + 'px'; + reorderIndicatorUpRef.current.style.left = targetLeft + dropHeader.offsetWidth - Math.ceil(colReorderIconWidth.current / 2) + 'px'; + reorderIndicatorDownRef.current.style.left = targetLeft + dropHeader.offsetWidth - Math.ceil(colReorderIconWidth.current / 2) + 'px'; dropPosition.current = 1; - } - else { - reorderIndicatorUpRef.current.style.left = (targetLeft - Math.ceil(colReorderIconWidth.current / 2)) + 'px'; - reorderIndicatorDownRef.current.style.left = (targetLeft - Math.ceil(colReorderIconWidth.current / 2)) + 'px'; + } else { + reorderIndicatorUpRef.current.style.left = targetLeft - Math.ceil(colReorderIconWidth.current / 2) + 'px'; + reorderIndicatorDownRef.current.style.left = targetLeft - Math.ceil(colReorderIconWidth.current / 2) + 'px'; dropPosition.current = -1; } @@ -659,7 +650,7 @@ export const DataTable = React.forwardRef((props, ref) => { reorderIndicatorDownRef.current.style.display = 'block'; } } - } + }; const onColumnHeaderDragLeave = (e) => { const { originalEvent: event } = e; @@ -669,7 +660,7 @@ export const DataTable = React.forwardRef((props, ref) => { reorderIndicatorUpRef.current.style.display = 'none'; reorderIndicatorDownRef.current.style.display = 'none'; } - } + }; const onColumnHeaderDrop = (e) => { const { originalEvent: event, column } = e; @@ -678,14 +669,14 @@ export const DataTable = React.forwardRef((props, ref) => { if (draggedColumnElement.current) { let dragIndex = DomHandler.index(draggedColumnElement.current); let dropIndex = DomHandler.index(findParentHeader(event.currentTarget)); - let allowDrop = (dragIndex !== dropIndex); + let allowDrop = dragIndex !== dropIndex; if (allowDrop && ((dropIndex - dragIndex === 1 && dropPosition.current === -1) || (dragIndex - dropIndex === 1 && dropPosition.current === 1))) { allowDrop = false; } if (allowDrop) { let columns = getColumns(); - let isSameColumn = (col1, col2) => (col1.props.columnKey || col2.props.columnKey) ? ObjectUtils.equals(col1.props, col2.props, 'columnKey') : ObjectUtils.equals(col1.props, col2.props, 'field'); + let isSameColumn = (col1, col2) => (col1.props.columnKey || col2.props.columnKey ? ObjectUtils.equals(col1.props, col2.props, 'columnKey') : ObjectUtils.equals(col1.props, col2.props, 'field')); let dragColIndex = columns.findIndex((child) => isSameColumn(child, draggedColumn.current)); let dropColIndex = columns.findIndex((child) => isSameColumn(child, column)); @@ -724,11 +715,11 @@ export const DataTable = React.forwardRef((props, ref) => { draggedColumn.current = null; dropPosition.current = null; } - } + }; const createStyleElement = () => { styleElement.current = DomHandler.createInlineStyle(PrimeReact.nonce); - } + }; const createResponsiveStyle = () => { if (!responsiveStyleElement.current) { @@ -766,23 +757,22 @@ export const DataTable = React.forwardRef((props, ref) => { responsiveStyleElement.current.innerHTML = innerHTML; } - } + }; const destroyResponsiveStyle = () => { responsiveStyleElement.current = DomHandler.removeInlineStyle(responsiveStyleElement.current); - } + }; const destroyStyleElement = () => { styleElement.current = DomHandler.removeInlineStyle(styleElement.current); - } + }; const onPageChange = (e) => { clearEditingMetaData(); if (props.onPage) { props.onPage(createEvent(e)); - } - else { + } else { setFirstState(e.first); setRowsState(e.rows); } @@ -790,7 +780,7 @@ export const DataTable = React.forwardRef((props, ref) => { if (props.onValueChange) { props.onValueChange(processedData()); } - } + }; const onSortChange = (e) => { clearEditingMetaData(); @@ -809,7 +799,7 @@ export const DataTable = React.forwardRef((props, ref) => { let metaKey = event.metaKey || event.ctrlKey; multiSortMeta = [...getMultiSortMeta()]; - const sortMeta = multiSortMeta.find(sortMeta => sortMeta.field === sortField); + const sortMeta = multiSortMeta.find((sortMeta) => sortMeta.field === sortField); sortOrder = sortMeta ? getCalculatedSortOrder(sortMeta.order) : sortOrder; const newMetaData = { field: sortField, order: sortOrder }; @@ -818,17 +808,15 @@ export const DataTable = React.forwardRef((props, ref) => { multiSortMeta = metaKey ? multiSortMeta : multiSortMeta.filter((meta) => sortableDisabledFields.some((field) => field === meta.field)); addSortMeta(newMetaData, multiSortMeta); - } - else if (props.removableSort) { + } else if (props.removableSort) { removeSortMeta(newMetaData, multiSortMeta); } eventMeta = { multiSortMeta }; - } - else { - sortOrder = (getSortField() === sortField) ? getCalculatedSortOrder(getSortOrder()) : sortOrder; + } else { + sortOrder = getSortField() === sortField ? getCalculatedSortOrder(getSortOrder()) : sortOrder; if (props.removableSort) { sortField = sortOrder ? sortField : null; } @@ -841,8 +829,7 @@ export const DataTable = React.forwardRef((props, ref) => { if (props.onSort) { props.onSort(createEvent(eventMeta)); - } - else { + } else { setFirstState(0); setSortFieldState(eventMeta.sortField); setSortOrderState(eventMeta.sortOrder); @@ -850,46 +837,44 @@ export const DataTable = React.forwardRef((props, ref) => { } if (props.onValueChange) { - props.onValueChange(processedData({ - sortField, - sortOrder, - multiSortMeta - })); + props.onValueChange( + processedData({ + sortField, + sortOrder, + multiSortMeta + }) + ); } - } + }; const getCalculatedSortOrder = (currentOrder) => { return props.removableSort ? (props.defaultSortOrder === currentOrder ? currentOrder * -1 : 0) : currentOrder * -1; - } + }; const compareValuesOnSort = (value1, value2, order) => { return ObjectUtils.sort(value1, value2, order, PrimeReact.locale, PrimeReact.nullSortOrder); - } + }; const addSortMeta = (meta, multiSortMeta) => { - const index = multiSortMeta.findIndex(sortMeta => sortMeta.field === meta.field); + const index = multiSortMeta.findIndex((sortMeta) => sortMeta.field === meta.field); - if (index >= 0) - multiSortMeta[index] = meta; - else - multiSortMeta.push(meta); - } + if (index >= 0) multiSortMeta[index] = meta; + else multiSortMeta.push(meta); + }; const removeSortMeta = (meta, multiSortMeta) => { - const index = multiSortMeta.findIndex(sortMeta => sortMeta.field === meta.field); + const index = multiSortMeta.findIndex((sortMeta) => sortMeta.field === meta.field); if (index >= 0) { multiSortMeta.splice(index, 1); } multiSortMeta = multiSortMeta.length > 0 ? multiSortMeta : null; - } + }; const sortSingle = (data, field, order) => { if (props.groupRowsBy && props.groupRowsBy === props.sortField) { - const multiSortMeta = [ - { field: props.sortField, order: props.sortOrder || props.defaultSortOrder } - ]; + const multiSortMeta = [{ field: props.sortField, order: props.sortOrder || props.defaultSortOrder }]; props.sortField !== field && multiSortMeta.push({ field, order }); @@ -900,8 +885,7 @@ export const DataTable = React.forwardRef((props, ref) => { if (columnSortable.current && columnSortFunction.current) { value = columnSortFunction.current({ rowData: value, field: field, order: order }); - } - else { + } else { value.sort((data1, data2) => { const value1 = ObjectUtils.resolveFieldData(data1, field); const value2 = ObjectUtils.resolveFieldData(data2, field); @@ -911,7 +895,7 @@ export const DataTable = React.forwardRef((props, ref) => { } return value; - } + }; const sortMultiple = (data, multiSortMeta = []) => { if (props.groupRowsBy && (groupRowsSortMetaState || (multiSortMeta.length && props.groupRowsBy === multiSortMeta[0].field))) { @@ -930,37 +914,36 @@ export const DataTable = React.forwardRef((props, ref) => { let value = [...data]; if (columnSortable.current && columnSortFunction.current) { - const meta = multiSortMeta.find(meta => meta.field === columnField.current); + const meta = multiSortMeta.find((meta) => meta.field === columnField.current); const field = columnField.current; const order = meta ? meta.order : defaultSortOrder; value = columnSortFunction.current({ rowData: value, field: field, order: order }); - } - else { + } else { value.sort((data1, data2) => { return multisortField(data1, data2, multiSortMeta, 0); }); } return value; - } + }; const multisortField = (data1, data2, multiSortMeta, index) => { const value1 = ObjectUtils.resolveFieldData(data1, multiSortMeta[index].field); const value2 = ObjectUtils.resolveFieldData(data2, multiSortMeta[index].field); if (value1 === value2) { - return (multiSortMeta.length - 1) > (index) ? (multisortField(data1, data2, multiSortMeta, index + 1)) : 0; + return multiSortMeta.length - 1 > index ? multisortField(data1, data2, multiSortMeta, index + 1) : 0; } return compareValuesOnSort(value1, value2, multiSortMeta[index].order); - } + }; const onFilterChange = (filters) => { clearEditingMetaData(); setD_filtersState(filters); - } + }; const onFilterApply = () => { clearTimeout(filterTimeout.current); @@ -969,8 +952,7 @@ export const DataTable = React.forwardRef((props, ref) => { if (props.onFilter) { props.onFilter(createEvent({ filters })); - } - else { + } else { setFirstState(0); setFiltersState(filters); } @@ -979,7 +961,7 @@ export const DataTable = React.forwardRef((props, ref) => { props.onValueChange(processedData({ filters })); } }, props.filterDelay); - } + }; const filterLocal = (data, filters) => { if (!data) return; @@ -992,7 +974,7 @@ export const DataTable = React.forwardRef((props, ref) => { let isGlobalFilter = filters['global'] || props.globalFilter; let globalFilterFieldsArray; if (isGlobalFilter) { - globalFilterFieldsArray = props.globalFilterFields || columns.filter(col => !col.props.excludeGlobalFilter).map(col => col.props.filterField || col.props.field); + globalFilterFieldsArray = props.globalFilterFields || columns.filter((col) => !col.props.excludeGlobalFilter).map((col) => col.props.filterField || col.props.field); } for (let i = 0; i < data.length; i++) { @@ -1015,8 +997,7 @@ export const DataTable = React.forwardRef((props, ref) => { break; } } - } - else { + } else { localMatch = executeLocalFilter(filterField, data[i], filterMeta, 0); } @@ -1041,9 +1022,8 @@ export const DataTable = React.forwardRef((props, ref) => { let matches; if (isGlobalFilter) { - matches = localFiltered ? (localFiltered && localMatch && globalMatch) : globalMatch; - } - else { + matches = localFiltered ? localFiltered && localMatch && globalMatch : globalMatch; + } else { matches = localFiltered && localMatch; } @@ -1057,7 +1037,7 @@ export const DataTable = React.forwardRef((props, ref) => { } return filteredValue; - } + }; const executeLocalFilter = (field, rowData, filterMeta, index) => { let filterValue = filterMeta.value; @@ -1066,7 +1046,7 @@ export const DataTable = React.forwardRef((props, ref) => { let filterConstraint = FilterService.filters[filterMatchMode]; return ObjectUtils.isFunction(filterConstraint) && filterConstraint(dataFieldValue, filterValue, props.filterLocale, index); - } + }; const cloneFilters = (filters) => { filters = filters || props.filters; @@ -1074,10 +1054,16 @@ export const DataTable = React.forwardRef((props, ref) => { if (filters) { Object.entries(filters).forEach(([prop, value]) => { - cloned[prop] = value.operator ? { operator: value.operator, constraints: value.constraints.map(constraint => { return { ...constraint } }) } : { ...value }; + cloned[prop] = value.operator + ? { + operator: value.operator, + constraints: value.constraints.map((constraint) => { + return { ...constraint }; + }) + } + : { ...value }; }); - } - else { + } else { const columns = getColumns(); cloned = columns.reduce((filters, col) => { @@ -1098,7 +1084,7 @@ export const DataTable = React.forwardRef((props, ref) => { } return cloned; - } + }; const filter = (value, field, matchMode, index = 0) => { let filters = { ...d_filtersState }; @@ -1110,7 +1096,7 @@ export const DataTable = React.forwardRef((props, ref) => { setD_filtersState(filters); onFilterApply(); - } + }; const reset = () => { setD_rowsState(props.rows); @@ -1134,14 +1120,14 @@ export const DataTable = React.forwardRef((props, ref) => { } resetColumnOrder(); - } + }; const resetScroll = () => { if (wrapperRef.current) { const scrollableContainer = !isVirtualScrollerDisabled() ? DomHandler.findSingle(wrapperRef.current, '.p-virtualscroller') : wrapperRef.current; scrollableContainer.scrollTo(0, 0); } - } + }; const resetColumnOrder = () => { const columns = getColumns(true); @@ -1155,7 +1141,7 @@ export const DataTable = React.forwardRef((props, ref) => { } setColumnOrderState(columnOrder); - } + }; const exportCSV = (options) => { let data; @@ -1164,8 +1150,7 @@ export const DataTable = React.forwardRef((props, ref) => { if (options && options.selectionOnly) { data = props.selection || []; - } - else { + } else { data = [...(props.frozenValue || []), ...(processedData() || [])]; } @@ -1176,7 +1161,7 @@ export const DataTable = React.forwardRef((props, ref) => { if (exportable && field) { csv += '"' + (header || field) + '"'; - if (i < (columns.length - 1)) { + if (i < columns.length - 1) { csv += props.csvSeparator; } } @@ -1194,13 +1179,11 @@ export const DataTable = React.forwardRef((props, ref) => { if (cellData != null) { cellData = props.exportFunction ? props.exportFunction({ data: cellData, field, rowData: record, column }) : String(cellData).replace(/"/g, '""'); - } - else - cellData = ''; + } else cellData = ''; csv += '"' + cellData + '"'; - if (i < (columns.length - 1)) { + if (i < columns.length - 1) { csv += props.csvSeparator; } } @@ -1208,13 +1191,13 @@ export const DataTable = React.forwardRef((props, ref) => { }); DomHandler.exportCSV(csv, props.exportFilename); - } + }; const closeEditingCell = () => { - if (props.editMode !== "row") { + if (props.editMode !== 'row') { document.body.click(); } - } + }; const createEvent = (event) => { return { @@ -1225,8 +1208,8 @@ export const DataTable = React.forwardRef((props, ref) => { multiSortMeta: getMultiSortMeta(), filters: getFilters(), ...event - } - } + }; + }; const processedData = (localState) => { let data = props.value || []; @@ -1250,16 +1233,14 @@ export const DataTable = React.forwardRef((props, ref) => { } if (sortField || ObjectUtils.isNotEmpty(multiSortMeta)) { - if (props.sortMode === 'single') - data = sortSingle(data, sortField, sortOrder); - else if (props.sortMode === 'multiple') - data = sortMultiple(data, multiSortMeta); + if (props.sortMode === 'single') data = sortSingle(data, sortField, sortOrder); + else if (props.sortMode === 'multiple') data = sortMultiple(data, multiSortMeta); } } } return data; - } + }; const dataToRender = (data) => { if (data && props.paginator) { @@ -1268,7 +1249,7 @@ export const DataTable = React.forwardRef((props, ref) => { } return data; - } + }; useMountEffect(() => { setAttributeSelectorState(UniqueComponentId()); @@ -1347,22 +1328,20 @@ export const DataTable = React.forwardRef((props, ref) => {
    - ) + ); } return null; - } + }; const createHeader = () => { if (props.header) { const content = ObjectUtils.getJSXElement(props.header, { props }); - return ( -
    {content}
    - ) + return
    {content}
    ; } return null; - } + }; const createTableHeader = (options, empty) => { const sortField = getSortField(); @@ -1374,59 +1353,190 @@ export const DataTable = React.forwardRef((props, ref) => { const { items: processedData, columns } = options; return ( - - ) - } + + ); + }; const createTableBody = (options, selectionModeInColumn, empty, isVirtualScrollerDisabled) => { const first = getFirst(); const { rows, columns, contentRef, className, itemSize } = options; const frozenBody = props.frozenValue && ( - + ); const body = ( - + ); return ( @@ -1434,16 +1544,14 @@ export const DataTable = React.forwardRef((props, ref) => { {frozenBody} {body} - ) - } + ); + }; const createTableFooter = (options) => { const { columns } = options; - return ( - - ) - } + return ; + }; const createContent = (processedData, columns, selectionModeInColumn, empty) => { if (!columns) return; @@ -1453,11 +1561,21 @@ export const DataTable = React.forwardRef((props, ref) => { return (
    - { - const ref = (el) => { tableRef.current = el; options.spacerRef && options.spacerRef(el) }; + const ref = (el) => { + tableRef.current = el; + options.spacerRef && options.spacerRef(el); + }; const tableClassName = classNames('p-datatable-table', props.tableClassName); const tableHeader = createTableHeader(options, empty); const tableBody = createTableBody(options, selectionModeInColumn, empty, _isVirtualScrollerDisabled); @@ -1469,32 +1587,43 @@ export const DataTable = React.forwardRef((props, ref) => { {tableBody} {tableFooter} - ) - }} /> + ); + }} + />
    - ) - } + ); + }; const createFooter = () => { if (props.footer) { const content = ObjectUtils.getJSXElement(props.footer, { props }); - return ( -
    {content}
    - ) + return
    {content}
    ; } return null; - } + }; const createPaginator = (position, totalRecords) => { const className = classNames('p-paginator-' + position, props.paginatorClassName); return ( - - ) - } + + ); + }; const createPaginatorTop = (totalRecords) => { if (props.paginator && props.paginatorPosition !== 'bottom') { @@ -1502,7 +1631,7 @@ export const DataTable = React.forwardRef((props, ref) => { } return null; - } + }; const createPaginatorBottom = (totalRecords) => { if (props.paginator && props.paginatorPosition !== 'top') { @@ -1510,17 +1639,15 @@ export const DataTable = React.forwardRef((props, ref) => { } return null; - } + }; const createResizeHelper = () => { if (props.resizableColumns) { - return ( -
    - ) + return
    ; } return null; - } + }; const createReorderIndicators = () => { if (props.reorderableColumns) { @@ -1530,11 +1657,11 @@ export const DataTable = React.forwardRef((props, ref) => { - ) + ); } return null; - } + }; const data = processedData(); const columns = getColumns(); @@ -1543,27 +1670,31 @@ export const DataTable = React.forwardRef((props, ref) => { const selectionModeInColumn = getSelectionModeInColumn(columns); const selectable = props.selectionMode || selectionModeInColumn; const otherProps = ObjectUtils.findDiffKeys(props, DataTable.defaultProps); - const className = classNames('p-datatable p-component', { - 'p-datatable-hoverable-rows': props.rowHover, - 'p-datatable-selectable': selectable && !props.cellSelection, - 'p-datatable-selectable-cell': selectable && props.cellSelection, - 'p-datatable-auto-layout': props.autoLayout, - 'p-datatable-resizable': props.resizableColumns, - 'p-datatable-resizable-fit': props.resizableColumns && props.columnResizeMode === 'fit', - 'p-datatable-scrollable': props.scrollable, - 'p-datatable-scrollable-vertical': props.scrollable && props.scrollDirection === 'vertical', - 'p-datatable-scrollable-horizontal': props.scrollable && props.scrollDirection === 'horizontal', - 'p-datatable-scrollable-both': props.scrollable && props.scrollDirection === 'both', - 'p-datatable-flex-scrollable': (props.scrollable && props.scrollHeight === 'flex'), - 'p-datatable-responsive-stack': props.responsiveLayout === 'stack', - 'p-datatable-responsive-scroll': props.responsiveLayout === 'scroll', - 'p-datatable-striped': props.stripedRows, - 'p-datatable-gridlines': props.showGridlines, - 'p-datatable-grouped-header': props.headerColumnGroup != null, - 'p-datatable-grouped-footer': props.footerColumnGroup != null, - 'p-datatable-sm': props.size === 'small', - 'p-datatable-lg': props.size === 'large' - }, props.className); + const className = classNames( + 'p-datatable p-component', + { + 'p-datatable-hoverable-rows': props.rowHover, + 'p-datatable-selectable': selectable && !props.cellSelection, + 'p-datatable-selectable-cell': selectable && props.cellSelection, + 'p-datatable-auto-layout': props.autoLayout, + 'p-datatable-resizable': props.resizableColumns, + 'p-datatable-resizable-fit': props.resizableColumns && props.columnResizeMode === 'fit', + 'p-datatable-scrollable': props.scrollable, + 'p-datatable-scrollable-vertical': props.scrollable && props.scrollDirection === 'vertical', + 'p-datatable-scrollable-horizontal': props.scrollable && props.scrollDirection === 'horizontal', + 'p-datatable-scrollable-both': props.scrollable && props.scrollDirection === 'both', + 'p-datatable-flex-scrollable': props.scrollable && props.scrollHeight === 'flex', + 'p-datatable-responsive-stack': props.responsiveLayout === 'stack', + 'p-datatable-responsive-scroll': props.responsiveLayout === 'scroll', + 'p-datatable-striped': props.stripedRows, + 'p-datatable-gridlines': props.showGridlines, + 'p-datatable-grouped-header': props.headerColumnGroup != null, + 'p-datatable-grouped-footer': props.footerColumnGroup != null, + 'p-datatable-sm': props.size === 'small', + 'p-datatable-lg': props.size === 'large' + }, + props.className + ); const loader = createLoader(); const header = createHeader(); @@ -1585,7 +1716,7 @@ export const DataTable = React.forwardRef((props, ref) => { {resizeHelper} {reorderIndicators} - ) + ); }); DataTable.displayName = 'DataTable'; @@ -1718,4 +1849,4 @@ DataTable.defaultProps = { customRestoreState: null, onStateSave: null, onStateRestore: null -} +}; diff --git a/components/lib/datatable/FooterCell.js b/components/lib/datatable/FooterCell.js index 6765e756ac..3a71eb601b 100644 --- a/components/lib/datatable/FooterCell.js +++ b/components/lib/datatable/FooterCell.js @@ -7,14 +7,14 @@ export const FooterCell = React.memo((props) => { const getColumnProp = (prop) => { return props.column.props[prop]; - } + }; const getStyle = () => { const footerStyle = getColumnProp('footerStyle'); const columnStyle = getColumnProp('style'); return getColumnProp('frozen') ? Object.assign({}, columnStyle, footerStyle, styleObjectState) : Object.assign({}, columnStyle, footerStyle); - } + }; const updateStickyPosition = () => { if (getColumnProp('frozen')) { @@ -27,8 +27,7 @@ export const FooterCell = React.memo((props) => { right = DomHandler.getOuterWidth(next) + parseFloat(next.style.right || 0); } styleObject['right'] = right + 'px'; - } - else { + } else { let left = 0; let prev = elementRef.current.previousElementSibling; if (prev) { @@ -40,7 +39,7 @@ export const FooterCell = React.memo((props) => { const isSameStyle = styleObjectState['left'] === styleObject['left'] && styleObjectState['right'] === styleObject['right']; !isSameStyle && setStyleObjectState(styleObject); } - } + }; React.useEffect(() => { if (getColumnProp('frozen')) { @@ -62,7 +61,7 @@ export const FooterCell = React.memo((props) => { {content} - ) + ); }); FooterCell.displayName = 'FooterCell'; diff --git a/components/lib/datatable/HeaderCell.js b/components/lib/datatable/HeaderCell.js index 3f7ce9d512..207e8573aa 100644 --- a/components/lib/datatable/HeaderCell.js +++ b/components/lib/datatable/HeaderCell.js @@ -11,26 +11,26 @@ export const HeaderCell = React.memo((props) => { const isBadgeVisible = () => { return props.multiSortMeta && props.multiSortMeta.length > 1; - } + }; const isSortableDisabled = () => { return !getColumnProp('sortable') || (getColumnProp('sortable') && (props.allSortableDisabled || getColumnProp('sortableDisabled'))); - } + }; const getColumnProp = (...args) => { - return props.column ? typeof args[0] === 'string' ? props.column.props[args[0]] : (args[0] || props.column).props[args[1]] : null; - } + return props.column ? (typeof args[0] === 'string' ? props.column.props[args[0]] : (args[0] || props.column).props[args[1]]) : null; + }; const getStyle = () => { const headerStyle = getColumnProp('headerStyle'); const columnStyle = getColumnProp('style'); return getColumnProp('frozen') ? Object.assign({}, columnStyle, headerStyle, styleObjectState) : Object.assign({}, columnStyle, headerStyle); - } + }; const getMultiSortMetaIndex = () => { - return props.multiSortMeta.findIndex(meta => (meta.field === getColumnProp('field') || meta.field === getColumnProp('sortField'))); - } + return props.multiSortMeta.findIndex((meta) => meta.field === getColumnProp('field') || meta.field === getColumnProp('sortField')); + }; const getSortMeta = () => { let sorted = false; @@ -40,8 +40,7 @@ export const HeaderCell = React.memo((props) => { if (props.sortMode === 'single') { sorted = props.sortField && (props.sortField === getColumnProp('field') || props.sortField === getColumnProp('sortField')); sortOrder = sorted ? props.sortOrder : 0; - } - else if (props.sortMode === 'multiple') { + } else if (props.sortMode === 'multiple') { metaIndex = getMultiSortMetaIndex(); if (metaIndex > -1) { sorted = true; @@ -50,21 +49,18 @@ export const HeaderCell = React.memo((props) => { } return { sorted, sortOrder, metaIndex }; - } + }; const getAriaSort = ({ sorted, sortOrder }) => { if (getColumnProp('sortable')) { - const sortIcon = sorted ? sortOrder < 0 ? 'pi-sort-amount-down' : 'pi-sort-amount-up-alt' : 'pi-sort-alt'; - if (sortIcon === 'pi-sort-amount-down') - return 'descending'; - else if (sortIcon === 'pi-sort-amount-up-alt') - return 'ascending'; - else - return 'none'; + const sortIcon = sorted ? (sortOrder < 0 ? 'pi-sort-amount-down' : 'pi-sort-amount-up-alt') : 'pi-sort-alt'; + if (sortIcon === 'pi-sort-amount-down') return 'descending'; + else if (sortIcon === 'pi-sort-amount-up-alt') return 'ascending'; + else return 'none'; } return null; - } + }; const updateStickyPosition = () => { if (getColumnProp('frozen')) { @@ -77,8 +73,7 @@ export const HeaderCell = React.memo((props) => { right = DomHandler.getOuterWidth(next) + parseFloat(next.style.right || 0); } styleObject['right'] = right + 'px'; - } - else { + } else { let left = 0; let prev = elementRef.current.previousElementSibling; if (prev) { @@ -97,19 +92,24 @@ export const HeaderCell = React.memo((props) => { const isSameStyle = styleObjectState['left'] === styleObject['left'] && styleObjectState['right'] === styleObject['right']; !isSameStyle && setStyleObjectState(styleObject); } - } + }; const updateSortableDisabled = (prevColumn) => { if (getColumnProp(prevColumn, 'sortableDisabled') !== getColumnProp('sortableDisabled') || getColumnProp(prevColumn, 'sortable') !== getColumnProp('sortable')) { props.onSortableChange(); } - } + }; const onClick = (event) => { if (!isSortableDisabled()) { let targetNode = event.target; - if (DomHandler.hasClass(targetNode, 'p-sortable-column') || DomHandler.hasClass(targetNode, 'p-column-title') || DomHandler.hasClass(targetNode, 'p-column-header-content') - || DomHandler.hasClass(targetNode, 'p-sortable-column-icon') || DomHandler.hasClass(targetNode.parentElement, 'p-sortable-column-icon')) { + if ( + DomHandler.hasClass(targetNode, 'p-sortable-column') || + DomHandler.hasClass(targetNode, 'p-column-title') || + DomHandler.hasClass(targetNode, 'p-column-header-content') || + DomHandler.hasClass(targetNode, 'p-sortable-column-icon') || + DomHandler.hasClass(targetNode.parentElement, 'p-sortable-column-icon') + ) { DomHandler.clearSelection(); props.onSortChange({ @@ -119,11 +119,11 @@ export const HeaderCell = React.memo((props) => { }); } } - } + }; const onMouseDown = (event) => { props.onColumnMouseDown({ originalEvent: event, column: props.column }); - } + }; const onKeyDown = (event) => { if (event.key === 'Enter' && event.currentTarget === elementRef.current && DomHandler.hasClass(event.currentTarget, 'p-sortable-column')) { @@ -131,27 +131,27 @@ export const HeaderCell = React.memo((props) => { event.preventDefault(); } - } + }; const onDragStart = (event) => { props.onColumnDragStart({ originalEvent: event, column: props.column }); - } + }; const onDragOver = (event) => { props.onColumnDragOver({ originalEvent: event, column: props.column }); - } + }; const onDragLeave = (event) => { props.onColumnDragLeave({ originalEvent: event, column: props.column }); - } + }; const onDrop = (event) => { props.onColumnDrop({ originalEvent: event, column: props.column }); - } + }; const onResizerMouseDown = (event) => { props.onColumnResizeStart({ originalEvent: event, column: props.column }); - } + }; const onResizerClick = (event) => { if (props.onColumnResizerClick) { @@ -163,7 +163,7 @@ export const HeaderCell = React.memo((props) => { event.preventDefault(); } - } + }; const onResizerDoubleClick = (event) => { if (props.onColumnResizerDoubleClick) { @@ -175,7 +175,7 @@ export const HeaderCell = React.memo((props) => { event.preventDefault(); } - } + }; React.useEffect(() => { if (getColumnProp('frozen')) { @@ -187,64 +187,56 @@ export const HeaderCell = React.memo((props) => { const createResizer = () => { if (props.resizableColumns && !getColumnProp('frozen')) { - return ( - - ) + return ; } return null; - } + }; const createTitle = () => { const title = ObjectUtils.getJSXElement(getColumnProp('header'), { props: props.tableProps }); return {title}; - } + }; const createSortIcon = ({ sorted, sortOrder }) => { if (getColumnProp('sortable')) { - let sortIcon = sorted ? sortOrder < 0 ? 'pi-sort-amount-down' : 'pi-sort-amount-up-alt' : 'pi-sort-alt'; + let sortIcon = sorted ? (sortOrder < 0 ? 'pi-sort-amount-down' : 'pi-sort-amount-up-alt') : 'pi-sort-alt'; let className = classNames('p-sortable-column-icon pi pi-fw', sortIcon); - return ( - - ) + return ; } return null; - } + }; const createBadge = ({ metaIndex }) => { if (metaIndex !== -1 && isBadgeVisible()) { - const value = (props.groupRowsBy && props.groupRowsBy === props.groupRowSortField) ? metaIndex : metaIndex + 1; + const value = props.groupRowsBy && props.groupRowsBy === props.groupRowSortField ? metaIndex : metaIndex + 1; return {value}; } return null; - } + }; const createCheckbox = () => { if (props.showSelectAll && getColumnProp('selectionMode') === 'multiple' && props.filterDisplay !== 'row') { const allRowsSelected = props.allRowsSelected(props.value); - return ( - - ) + return ; } return null; - } + }; const createFilter = () => { if (props.filterDisplay === 'menu' && getColumnProp('filter')) { - return ( - - ) + return ; } return null; - } + }; const createHeader = (sortMeta) => { const title = createTitle(); @@ -261,8 +253,8 @@ export const HeaderCell = React.memo((props) => { {checkbox} {filter} - ) - } + ); + }; const createElement = () => { const _isSortableDisabled = isSortableDisabled(); @@ -289,15 +281,28 @@ export const HeaderCell = React.memo((props) => { const header = createHeader(sortMeta); return ( - + {resizer} {header} - ) - } + ); + }; const element = createElement(); diff --git a/components/lib/datatable/HeaderCheckbox.js b/components/lib/datatable/HeaderCheckbox.js index 760af5001f..d5081593e1 100644 --- a/components/lib/datatable/HeaderCheckbox.js +++ b/components/lib/datatable/HeaderCheckbox.js @@ -6,11 +6,11 @@ export const HeaderCheckbox = React.memo((props) => { const onFocus = () => { setFocusedState(true); - } + }; const onBlur = () => { setFocusedState(false); - } + }; const onClick = (event) => { if (!props.disabled) { @@ -21,14 +21,14 @@ export const HeaderCheckbox = React.memo((props) => { checked: !props.checked }); } - } + }; const onKeyDown = (event) => { if (event.code === 'Space') { onClick(event); event.preventDefault(); } - } + }; const boxClassName = classNames('p-checkbox-box p-component', { 'p-highlight': props.checked, @@ -46,7 +46,7 @@ export const HeaderCheckbox = React.memo((props) => { - ) + ); }); HeaderCheckbox.displayName = 'HeaderCheckbox'; diff --git a/components/lib/datatable/RowCheckbox.js b/components/lib/datatable/RowCheckbox.js index 4477d7c539..1a491f25fb 100644 --- a/components/lib/datatable/RowCheckbox.js +++ b/components/lib/datatable/RowCheckbox.js @@ -6,11 +6,11 @@ export const RowCheckbox = React.memo((props) => { const onFocus = () => { setFocusedState(true); - } + }; const onBlur = () => { setFocusedState(false); - } + }; const onClick = (event) => { if (!props.disabled) { @@ -18,28 +18,27 @@ export const RowCheckbox = React.memo((props) => { props.onChange(event); } - } + }; const onKeyDown = (event) => { if (event.code === 'Space') { onClick(event); event.preventDefault(); } - } + }; - const className = classNames('p-checkbox p-component', { 'p-checkbox-focused': focusedState }) + const className = classNames('p-checkbox p-component', { 'p-checkbox-focused': focusedState }); const boxClassName = classNames('p-checkbox-box p-component', { 'p-highlight': props.checked, 'p-disabled': props.disabled, 'p-focus': focusedState }); const iconClassName = classNames('p-checkbox-icon', { 'pi pi-check': props.checked }); const tabIndex = props.disabled ? null : '0'; return (
    -
    +
    - ) + ); }); RowCheckbox.displayName = 'RowCheckbox'; diff --git a/components/lib/datatable/RowRadioButton.js b/components/lib/datatable/RowRadioButton.js index b7a3108964..337abc3ad2 100644 --- a/components/lib/datatable/RowRadioButton.js +++ b/components/lib/datatable/RowRadioButton.js @@ -7,11 +7,11 @@ export const RowRadioButton = React.memo((props) => { const onFocus = () => { setFocusedState(true); - } + }; const onBlur = () => { setFocusedState(false); - } + }; const onClick = (event) => { if (!props.disabled) { @@ -19,18 +19,18 @@ export const RowRadioButton = React.memo((props) => { DomHandler.focus(inputRef.current); } - } + }; const onKeyDown = (event) => { if (event.code === 'Space') { onClick(event); event.preventDefault(); } - } + }; const onChange = (event) => { onClick(event); - } + }; const className = classNames('p-radiobutton p-component', { 'p-radiobutton-focused': focusedState }); const boxClassName = classNames('p-radiobutton-box p-component', { 'p-highlight': props.checked, 'p-focus': focusedState, 'p-disabled': props.disabled }); @@ -39,14 +39,13 @@ export const RowRadioButton = React.memo((props) => { return (
    - +
    - ) + ); }); RowRadioButton.displayName = 'RowRadioButton'; diff --git a/components/lib/datatable/RowTogglerButton.js b/components/lib/datatable/RowTogglerButton.js index 3bf776d42d..363a99a2c2 100644 --- a/components/lib/datatable/RowTogglerButton.js +++ b/components/lib/datatable/RowTogglerButton.js @@ -3,13 +3,12 @@ import { Ripple } from '../ripple/Ripple'; import { classNames } from '../utils/Utils'; export const RowTogglerButton = React.memo((props) => { - const onClick = (event) => { props.onClick({ originalEvent: event, data: props.rowData - }) - } + }); + }; const iconClassName = classNames('p-row-toggler-icon', props.expanded ? props.expandedRowIcon : props.collapsedRowIcon); @@ -18,7 +17,7 @@ export const RowTogglerButton = React.memo((props) => { - ) + ); }); RowTogglerButton.displayName = 'RowTogglerButton'; diff --git a/components/lib/datatable/TableBody.js b/components/lib/datatable/TableBody.js index f7319c6317..2846ff4e55 100644 --- a/components/lib/datatable/TableBody.js +++ b/components/lib/datatable/TableBody.js @@ -5,904 +5,910 @@ import { classNames, DomHandler, ObjectUtils } from '../utils/Utils'; import { BodyRow } from './BodyRow'; import { RowTogglerButton } from './RowTogglerButton'; -export const TableBody = React.memo(React.forwardRef((props, ref) => { - const [rowGroupHeaderStyleObjectState, setRowGroupHeaderStyleObjectState] = React.useState({}); - const elementRef = React.useRef(null); - const refCallback = React.useCallback((el) => { - elementRef.current = el; - props.virtualScrollerContentRef && props.virtualScrollerContentRef(el); - }, [props]); - const dragSelectionHelper = React.useRef(null); - const initialDragPosition = React.useRef(null); - const anchorRowIndex = React.useRef(null); - const anchorCellIndex = React.useRef(null); - const rangeRowIndex = React.useRef(null); - const anchorRowFirst = React.useRef(null); - const rowTouched = React.useRef(false); - const rowDragging = React.useRef(false); - const draggedRowIndex = React.useRef(null); - const droppedRowIndex = React.useRef(null); - const prevVirtualScrollerOptions = usePrevious(props.virtualScrollerOptions); - const isSubheaderGrouping = props.rowGroupMode && props.rowGroupMode === 'subheader'; - const isRadioSelectionMode = props.selectionMode === 'radiobutton'; - const isCheckboxSelectionMode = props.selectionMode === 'checkbox'; - const isRadioSelectionModeInColumn = props.selectionModeInColumn === 'single'; - const isCheckboxSelectionModeInColumn = props.selectionModeInColumn === 'multiple'; - - const equals = (data1, data2) => { - if (allowCellSelection()) - return (data1.rowIndex === data2.rowIndex || data1.rowData === data2.rowData) && (data1.field === data2.field || data1.cellIndex === data2.cellIndex) - else - return props.compareSelectionBy === 'equals' ? (data1 === data2) : ObjectUtils.equals(data1, data2, props.dataKey); - } - - const isSelectionEnabled = () => { - return (props.selectionMode || props.selectionModeInColumn !== null) || (props.columns && props.columns.some(col => col && !!col.props.selectionMode)); - } - - const isSingleSelection = () => { - return (props.selectionMode === 'single' && !isCheckboxSelectionModeInColumn) || - (!isRadioSelectionMode && isRadioSelectionModeInColumn); - } - - const isMultipleSelection = () => { - return (props.selectionMode === 'multiple' && !isRadioSelectionModeInColumn) || isCheckboxSelectionModeInColumn; - } - - const isRadioOnlySelection = () => { - return isRadioSelectionMode && isRadioSelectionModeInColumn; - } - - const isCheckboxOnlySelection = () => { - return isCheckboxSelectionMode && isCheckboxSelectionModeInColumn; - } - - const isSelected = (rowData) => { - if (rowData && props.selection) { - return (props.selection instanceof Array) ? findIndex(props.selection, rowData) > -1 : equals(rowData, props.selection); - } - - return false; - } - - const isContextMenuSelected = (rowData) => { - if (rowData && props.contextMenuSelection) { - return equals(rowData, props.contextMenuSelection); - } - - return false; - } - - const isSelectable = (options) => { - return props.isDataSelectable ? props.isDataSelectable(options) : true; - } - - const isRowExpanded = (rowData) => { - if (rowData && props.expandedRows) { - if (isSubheaderGrouping && props.expandableRowGroups) { - return isRowGroupExpanded(rowData); - } - else { - if (props.dataKey) - return props.expandedRows ? props.expandedRows[ObjectUtils.resolveFieldData(rowData, props.dataKey)] !== undefined : false; - else - return findIndex(props.expandedRows, rowData) !== -1; - } - } - - return false; - } - - const isRowGroupExpanded = (rowData) => { - if (props.dataKey === props.groupRowsBy) - return Object.keys(props.expandedRows).some(data => ObjectUtils.equals(data, ObjectUtils.resolveFieldData(rowData, props.dataKey))); - else - return props.expandedRows.some(data => ObjectUtils.equals(data, rowData, props.groupRowsBy)); - } - - const isRowEditing = (rowData) => { - if (props.editMode === 'row' && rowData && props.editingRows) { - if (props.dataKey) - return props.editingRows ? props.editingRows[ObjectUtils.resolveFieldData(rowData, props.dataKey)] !== undefined : false; - else - return findIndex(props.editingRows, rowData) !== -1; - } - - return false; - } - - const allowDrag = (event) => { - return props.dragSelection && isMultipleSelection() && !event.originalEvent.shiftKey; - } - - const allowRowDrag = (event) => { - return !allowCellSelection() && allowDrag(event) || props.reorderableRows; - } - - const allowCellDrag = (event) => { - return allowCellSelection() && allowDrag(event); - } - - const allowSelection = (event) => { - return !DomHandler.isClickable(event.originalEvent.target); - } - - const allowMetaKeySelection = (event) => { - return !rowTouched.current && (!props.metaKeySelection || (props.metaKeySelection && (event.originalEvent.metaKey || event.originalEvent.ctrlKey))) - } - - const allowRangeSelection = (event) => { - return isMultipleSelection() && event.originalEvent.shiftKey && anchorRowIndex.current !== null; - } - - const allowRowSelection = () => { - return (props.selectionMode || props.selectionModeInColumn) && !isRadioOnlySelection() && !isCheckboxOnlySelection(); - } - - const allowCellSelection = () => { - return props.cellSelection && !isRadioSelectionModeInColumn && !isCheckboxSelectionModeInColumn; - } - - const getColumnsLength = () => { - return props.columns ? props.columns.length : 0; - } - - const getVirtualScrollerOption = (option, options) => { - options = options || props.virtualScrollerOptions; - return options ? options[option] : null; - } - - const findIndex = (collection, rowData) => { - return (collection || []).findIndex(data => equals(rowData, data)); - } - - const rowGroupHeaderStyle = () => { - if (props.scrollable) { - return { top: rowGroupHeaderStyleObjectState['top'] }; - } - - return null; - } - - const getRowKey = (rowData, index) => { - return props.dataKey ? ObjectUtils.resolveFieldData(rowData, props.dataKey) + '_' + index : index; - } - - const shouldRenderRowGroupHeader = (value, rowData, i) => { - const currentRowFieldData = ObjectUtils.resolveFieldData(rowData, props.groupRowsBy); - const prevRowData = value[i - 1]; - if (prevRowData) { - const previousRowFieldData = ObjectUtils.resolveFieldData(prevRowData, props.groupRowsBy); - return currentRowFieldData !== previousRowFieldData; - } - else { - return true; - } - } - - const shouldRenderRowGroupFooter = (value, rowData, i, expanded) => { - if (props.expandableRowGroups && !expanded) { +export const TableBody = React.memo( + React.forwardRef((props, ref) => { + const [rowGroupHeaderStyleObjectState, setRowGroupHeaderStyleObjectState] = React.useState({}); + const elementRef = React.useRef(null); + const refCallback = React.useCallback( + (el) => { + elementRef.current = el; + props.virtualScrollerContentRef && props.virtualScrollerContentRef(el); + }, + [props] + ); + const dragSelectionHelper = React.useRef(null); + const initialDragPosition = React.useRef(null); + const anchorRowIndex = React.useRef(null); + const anchorCellIndex = React.useRef(null); + const rangeRowIndex = React.useRef(null); + const anchorRowFirst = React.useRef(null); + const rowTouched = React.useRef(false); + const rowDragging = React.useRef(false); + const draggedRowIndex = React.useRef(null); + const droppedRowIndex = React.useRef(null); + const prevVirtualScrollerOptions = usePrevious(props.virtualScrollerOptions); + const isSubheaderGrouping = props.rowGroupMode && props.rowGroupMode === 'subheader'; + const isRadioSelectionMode = props.selectionMode === 'radiobutton'; + const isCheckboxSelectionMode = props.selectionMode === 'checkbox'; + const isRadioSelectionModeInColumn = props.selectionModeInColumn === 'single'; + const isCheckboxSelectionModeInColumn = props.selectionModeInColumn === 'multiple'; + + const equals = (data1, data2) => { + if (allowCellSelection()) return (data1.rowIndex === data2.rowIndex || data1.rowData === data2.rowData) && (data1.field === data2.field || data1.cellIndex === data2.cellIndex); + else return props.compareSelectionBy === 'equals' ? data1 === data2 : ObjectUtils.equals(data1, data2, props.dataKey); + }; + + const isSelectionEnabled = () => { + return props.selectionMode || props.selectionModeInColumn !== null || (props.columns && props.columns.some((col) => col && !!col.props.selectionMode)); + }; + + const isSingleSelection = () => { + return (props.selectionMode === 'single' && !isCheckboxSelectionModeInColumn) || (!isRadioSelectionMode && isRadioSelectionModeInColumn); + }; + + const isMultipleSelection = () => { + return (props.selectionMode === 'multiple' && !isRadioSelectionModeInColumn) || isCheckboxSelectionModeInColumn; + }; + + const isRadioOnlySelection = () => { + return isRadioSelectionMode && isRadioSelectionModeInColumn; + }; + + const isCheckboxOnlySelection = () => { + return isCheckboxSelectionMode && isCheckboxSelectionModeInColumn; + }; + + const isSelected = (rowData) => { + if (rowData && props.selection) { + return props.selection instanceof Array ? findIndex(props.selection, rowData) > -1 : equals(rowData, props.selection); + } + return false; - } - else { - const currentRowFieldData = ObjectUtils.resolveFieldData(rowData, props.groupRowsBy); - const nextRowData = value[i + 1]; - if (nextRowData) { - const nextRowFieldData = ObjectUtils.resolveFieldData(nextRowData, props.groupRowsBy); - return currentRowFieldData !== nextRowFieldData; + }; + + const isContextMenuSelected = (rowData) => { + if (rowData && props.contextMenuSelection) { + return equals(rowData, props.contextMenuSelection); + } + + return false; + }; + + const isSelectable = (options) => { + return props.isDataSelectable ? props.isDataSelectable(options) : true; + }; + + const isRowExpanded = (rowData) => { + if (rowData && props.expandedRows) { + if (isSubheaderGrouping && props.expandableRowGroups) { + return isRowGroupExpanded(rowData); + } else { + if (props.dataKey) return props.expandedRows ? props.expandedRows[ObjectUtils.resolveFieldData(rowData, props.dataKey)] !== undefined : false; + else return findIndex(props.expandedRows, rowData) !== -1; + } } - else { + + return false; + }; + + const isRowGroupExpanded = (rowData) => { + if (props.dataKey === props.groupRowsBy) return Object.keys(props.expandedRows).some((data) => ObjectUtils.equals(data, ObjectUtils.resolveFieldData(rowData, props.dataKey))); + else return props.expandedRows.some((data) => ObjectUtils.equals(data, rowData, props.groupRowsBy)); + }; + + const isRowEditing = (rowData) => { + if (props.editMode === 'row' && rowData && props.editingRows) { + if (props.dataKey) return props.editingRows ? props.editingRows[ObjectUtils.resolveFieldData(rowData, props.dataKey)] !== undefined : false; + else return findIndex(props.editingRows, rowData) !== -1; + } + + return false; + }; + + const allowDrag = (event) => { + return props.dragSelection && isMultipleSelection() && !event.originalEvent.shiftKey; + }; + + const allowRowDrag = (event) => { + return (!allowCellSelection() && allowDrag(event)) || props.reorderableRows; + }; + + const allowCellDrag = (event) => { + return allowCellSelection() && allowDrag(event); + }; + + const allowSelection = (event) => { + return !DomHandler.isClickable(event.originalEvent.target); + }; + + const allowMetaKeySelection = (event) => { + return !rowTouched.current && (!props.metaKeySelection || (props.metaKeySelection && (event.originalEvent.metaKey || event.originalEvent.ctrlKey))); + }; + + const allowRangeSelection = (event) => { + return isMultipleSelection() && event.originalEvent.shiftKey && anchorRowIndex.current !== null; + }; + + const allowRowSelection = () => { + return (props.selectionMode || props.selectionModeInColumn) && !isRadioOnlySelection() && !isCheckboxOnlySelection(); + }; + + const allowCellSelection = () => { + return props.cellSelection && !isRadioSelectionModeInColumn && !isCheckboxSelectionModeInColumn; + }; + + const getColumnsLength = () => { + return props.columns ? props.columns.length : 0; + }; + + const getVirtualScrollerOption = (option, options) => { + options = options || props.virtualScrollerOptions; + return options ? options[option] : null; + }; + + const findIndex = (collection, rowData) => { + return (collection || []).findIndex((data) => equals(rowData, data)); + }; + + const rowGroupHeaderStyle = () => { + if (props.scrollable) { + return { top: rowGroupHeaderStyleObjectState['top'] }; + } + + return null; + }; + + const getRowKey = (rowData, index) => { + return props.dataKey ? ObjectUtils.resolveFieldData(rowData, props.dataKey) + '_' + index : index; + }; + + const shouldRenderRowGroupHeader = (value, rowData, i) => { + const currentRowFieldData = ObjectUtils.resolveFieldData(rowData, props.groupRowsBy); + const prevRowData = value[i - 1]; + if (prevRowData) { + const previousRowFieldData = ObjectUtils.resolveFieldData(prevRowData, props.groupRowsBy); + return currentRowFieldData !== previousRowFieldData; + } else { return true; } - } - } - - const updateFrozenRowStickyPosition = () => { - elementRef.current.style.top = DomHandler.getOuterHeight(elementRef.current.previousElementSibling) + 'px'; - } - - const updateFrozenRowGroupHeaderStickyPosition = () => { - const tableHeaderHeight = DomHandler.getOuterHeight(elementRef.current.previousElementSibling); - const top = tableHeaderHeight + 'px'; - if (rowGroupHeaderStyleObjectState.top !== top) { - setRowGroupHeaderStyleObjectState({ top }); - } - } - - const updateVirtualScrollerPosition = () => { - const tableHeaderHeight = DomHandler.getOuterHeight(elementRef.current.previousElementSibling); - elementRef.current.style.top = (elementRef.current.style.top || 0) + tableHeaderHeight + 'px'; - } - - const onSingleSelection = ({ originalEvent, data, index, toggleable, type }) => { - if (!isSelectable({ data, index })) { - return; - } - - let selected = isSelected(data); - let selection = props.selection; - - if (selected) { - if (toggleable) { - selection = null; - onUnselect({ originalEvent, data, type }); - } - } - else { - selection = data; - onSelect({ originalEvent, data, type }); - } - - focusOnElement(originalEvent, true); - - if (props.onSelectionChange && selection !== props.selection) { - props.onSelectionChange({ - originalEvent, - value: selection, - type - }); - } - } - - const onMultipleSelection = ({ originalEvent, data, index, toggleable, type }) => { - if (!isSelectable({ data, index })) { - return; - } - - let selected = isSelected(data); - let selection = props.selection || []; - - if (selected) { - if (toggleable) { - let selectionIndex = findIndex(selection, data); - selection = props.selection.filter((val, i) => i !== selectionIndex); - onUnselect({ originalEvent, data, type }); - } - else if (selection.length) { - props.selection.forEach(d => onUnselect({ originalEvent, data: d, type })); - selection = [data]; + }; + + const shouldRenderRowGroupFooter = (value, rowData, i, expanded) => { + if (props.expandableRowGroups && !expanded) { + return false; + } else { + const currentRowFieldData = ObjectUtils.resolveFieldData(rowData, props.groupRowsBy); + const nextRowData = value[i + 1]; + if (nextRowData) { + const nextRowFieldData = ObjectUtils.resolveFieldData(nextRowData, props.groupRowsBy); + return currentRowFieldData !== nextRowFieldData; + } else { + return true; + } + } + }; + + const updateFrozenRowStickyPosition = () => { + elementRef.current.style.top = DomHandler.getOuterHeight(elementRef.current.previousElementSibling) + 'px'; + }; + + const updateFrozenRowGroupHeaderStickyPosition = () => { + const tableHeaderHeight = DomHandler.getOuterHeight(elementRef.current.previousElementSibling); + const top = tableHeaderHeight + 'px'; + if (rowGroupHeaderStyleObjectState.top !== top) { + setRowGroupHeaderStyleObjectState({ top }); + } + }; + + const updateVirtualScrollerPosition = () => { + const tableHeaderHeight = DomHandler.getOuterHeight(elementRef.current.previousElementSibling); + elementRef.current.style.top = (elementRef.current.style.top || 0) + tableHeaderHeight + 'px'; + }; + + const onSingleSelection = ({ originalEvent, data, index, toggleable, type }) => { + if (!isSelectable({ data, index })) { + return; + } + + let selected = isSelected(data); + let selection = props.selection; + + if (selected) { + if (toggleable) { + selection = null; + onUnselect({ originalEvent, data, type }); + } + } else { + selection = data; onSelect({ originalEvent, data, type }); } - } - else { - selection = toggleable && isMultipleSelection() ? [...selection, data] : [data]; - onSelect({ originalEvent, data, type }); - } - focusOnElement(originalEvent, true); + focusOnElement(originalEvent, true); - if (props.onSelectionChange && selection !== props.selection) { - props.onSelectionChange({ - originalEvent, - value: selection, - type - }); - } - } - - const onRangeSelection = (event, type) => { - DomHandler.clearSelection(); - rangeRowIndex.current = allowCellSelection() ? event.rowIndex : event.index; - let selectionInRange = selectRange(event); - let selection = isMultipleSelection() ? [...new Set([...(props.selection || []), ...selectionInRange])] : selectionInRange; - - if (props.onSelectionChange && selection !== props.selection) { - props.onSelectionChange({ - originalEvent: event.originalEvent, - value: selection, - type - }); - } - - anchorRowIndex.current = rangeRowIndex.current; - anchorCellIndex.current = event.cellIndex; - - focusOnElement(event.originalEvent, false); - } - - const selectRange = (event) => { - let rangeStart, rangeEnd; - - if (rangeRowIndex.current > anchorRowIndex.current) { - rangeStart = anchorRowIndex.current; - rangeEnd = rangeRowIndex.current; - } - else if (rangeRowIndex.current < anchorRowIndex.current) { - rangeStart = rangeRowIndex.current; - rangeEnd = anchorRowIndex.current; - } - else { - rangeStart = rangeEnd = rangeRowIndex.current; - } - - if (props.paginator) { - rangeStart = Math.max(rangeStart - props.first, 0); - rangeEnd -= props.first; - } - - return allowCellSelection() ? selectRangeOnCell(event, rangeStart, rangeEnd) : selectRangeOnRow(event, rangeStart, rangeEnd); - } - - const selectRangeOnRow = (event, rowRangeStart, rowRangeEnd) => { - const value = props.value; - let selection = []; - - for (let i = rowRangeStart; i <= rowRangeEnd; i++) { - let rangeRowData = value[i]; - if (!isSelectable({ data: rangeRowData, index: i })) { - continue; - } - - selection.push(rangeRowData); - - onSelect({ originalEvent: event.originalEvent, data: rangeRowData, type: 'row' }); - } - - return selection; - } - - const selectRangeOnCell = (event, rowRangeStart, rowRangeEnd) => { - let cellRangeStart, cellRangeEnd, cellIndex = event.cellIndex; - if (cellIndex > anchorCellIndex.current) { - cellRangeStart = anchorCellIndex.current; - cellRangeEnd = cellIndex; - } - else if (cellIndex < anchorCellIndex.current) { - cellRangeStart = cellIndex; - cellRangeEnd = anchorCellIndex.current; - } - else { - cellRangeStart = cellRangeEnd = cellIndex; - } - - const value = props.value; - let selection = []; - - for (let i = rowRangeStart; i <= rowRangeEnd; i++) { - let rowData = value[i]; - let columns = props.columns; - - for (let j = cellRangeStart; j <= cellRangeEnd; j++) { - let field = columns[j].props.field; - let value = ObjectUtils.resolveFieldData(rowData, field); - let rangeRowData = { - value, - field, - rowData, - rowIndex: i, - cellIndex: j, - selected: true - }; + if (props.onSelectionChange && selection !== props.selection) { + props.onSelectionChange({ + originalEvent, + value: selection, + type + }); + } + }; + + const onMultipleSelection = ({ originalEvent, data, index, toggleable, type }) => { + if (!isSelectable({ data, index })) { + return; + } + + let selected = isSelected(data); + let selection = props.selection || []; + + if (selected) { + if (toggleable) { + let selectionIndex = findIndex(selection, data); + selection = props.selection.filter((val, i) => i !== selectionIndex); + onUnselect({ originalEvent, data, type }); + } else if (selection.length) { + props.selection.forEach((d) => onUnselect({ originalEvent, data: d, type })); + selection = [data]; + onSelect({ originalEvent, data, type }); + } + } else { + selection = toggleable && isMultipleSelection() ? [...selection, data] : [data]; + onSelect({ originalEvent, data, type }); + } + + focusOnElement(originalEvent, true); + + if (props.onSelectionChange && selection !== props.selection) { + props.onSelectionChange({ + originalEvent, + value: selection, + type + }); + } + }; + + const onRangeSelection = (event, type) => { + DomHandler.clearSelection(); + rangeRowIndex.current = allowCellSelection() ? event.rowIndex : event.index; + let selectionInRange = selectRange(event); + let selection = isMultipleSelection() ? [...new Set([...(props.selection || []), ...selectionInRange])] : selectionInRange; + + if (props.onSelectionChange && selection !== props.selection) { + props.onSelectionChange({ + originalEvent: event.originalEvent, + value: selection, + type + }); + } + + anchorRowIndex.current = rangeRowIndex.current; + anchorCellIndex.current = event.cellIndex; + + focusOnElement(event.originalEvent, false); + }; + + const selectRange = (event) => { + let rangeStart, rangeEnd; + if (rangeRowIndex.current > anchorRowIndex.current) { + rangeStart = anchorRowIndex.current; + rangeEnd = rangeRowIndex.current; + } else if (rangeRowIndex.current < anchorRowIndex.current) { + rangeStart = rangeRowIndex.current; + rangeEnd = anchorRowIndex.current; + } else { + rangeStart = rangeEnd = rangeRowIndex.current; + } + + if (props.paginator) { + rangeStart = Math.max(rangeStart - props.first, 0); + rangeEnd -= props.first; + } + + return allowCellSelection() ? selectRangeOnCell(event, rangeStart, rangeEnd) : selectRangeOnRow(event, rangeStart, rangeEnd); + }; + + const selectRangeOnRow = (event, rowRangeStart, rowRangeEnd) => { + const value = props.value; + let selection = []; + + for (let i = rowRangeStart; i <= rowRangeEnd; i++) { + let rangeRowData = value[i]; if (!isSelectable({ data: rangeRowData, index: i })) { continue; } selection.push(rangeRowData); - onSelect({ originalEvent: event.originalEvent, data: rangeRowData, type: 'cell' }); + onSelect({ originalEvent: event.originalEvent, data: rangeRowData, type: 'row' }); } - } - return selection; - } + return selection; + }; + + const selectRangeOnCell = (event, rowRangeStart, rowRangeEnd) => { + let cellRangeStart, + cellRangeEnd, + cellIndex = event.cellIndex; + if (cellIndex > anchorCellIndex.current) { + cellRangeStart = anchorCellIndex.current; + cellRangeEnd = cellIndex; + } else if (cellIndex < anchorCellIndex.current) { + cellRangeStart = cellIndex; + cellRangeEnd = anchorCellIndex.current; + } else { + cellRangeStart = cellRangeEnd = cellIndex; + } + + const value = props.value; + let selection = []; + + for (let i = rowRangeStart; i <= rowRangeEnd; i++) { + let rowData = value[i]; + let columns = props.columns; + + for (let j = cellRangeStart; j <= cellRangeEnd; j++) { + let field = columns[j].props.field; + let value = ObjectUtils.resolveFieldData(rowData, field); + let rangeRowData = { + value, + field, + rowData, + rowIndex: i, + cellIndex: j, + selected: true + }; + + if (!isSelectable({ data: rangeRowData, index: i })) { + continue; + } - const onSelect = (event) => { - if (allowCellSelection()) - props.onCellSelect && props.onCellSelect({ originalEvent: event.originalEvent, ...event.data, type: event.type }); - else - props.onRowSelect && props.onRowSelect(event); - } + selection.push(rangeRowData); - const onUnselect = (event) => { - if (allowCellSelection()) - props.onCellUnselect && props.onCellUnselect({ originalEvent: event.originalEvent, ...event.data, type: event.type }); - else - props.onRowUnselect && props.onRowUnselect(event); - } + onSelect({ originalEvent: event.originalEvent, data: rangeRowData, type: 'cell' }); + } + } + + return selection; + }; - const enableDragSelection = (event) => { - if (props.dragSelection && !dragSelectionHelper.current) { - dragSelectionHelper.current = document.createElement('div'); - DomHandler.addClass(dragSelectionHelper.current, 'p-datatable-drag-selection-helper'); + const onSelect = (event) => { + if (allowCellSelection()) props.onCellSelect && props.onCellSelect({ originalEvent: event.originalEvent, ...event.data, type: event.type }); + else props.onRowSelect && props.onRowSelect(event); + }; - initialDragPosition.current = { x: event.clientX, y: event.clientY }; - dragSelectionHelper.current.style.top = `${event.pageY}px`; - dragSelectionHelper.current.style.left = `${event.pageX}px`; + const onUnselect = (event) => { + if (allowCellSelection()) props.onCellUnselect && props.onCellUnselect({ originalEvent: event.originalEvent, ...event.data, type: event.type }); + else props.onRowUnselect && props.onRowUnselect(event); + }; - bindDragSelectionEvents(); - } - } + const enableDragSelection = (event) => { + if (props.dragSelection && !dragSelectionHelper.current) { + dragSelectionHelper.current = document.createElement('div'); + DomHandler.addClass(dragSelectionHelper.current, 'p-datatable-drag-selection-helper'); - const focusOnElement = (event, isFocused) => { - const target = event.currentTarget; + initialDragPosition.current = { x: event.clientX, y: event.clientY }; + dragSelectionHelper.current.style.top = `${event.pageY}px`; + dragSelectionHelper.current.style.left = `${event.pageX}px`; - if (!allowCellSelection() && props.selectionAutoFocus) { - if (isCheckboxSelectionModeInColumn) { - const checkbox = DomHandler.findSingle(target, 'td.p-selection-column .p-checkbox-box'); - checkbox && checkbox.focus(); + bindDragSelectionEvents(); } - else if (isRadioSelectionModeInColumn) { - const radio = DomHandler.findSingle(target, 'td.p-selection-column input[type="radio"]'); - radio && radio.focus(); + }; + + const focusOnElement = (event, isFocused) => { + const target = event.currentTarget; + + if (!allowCellSelection() && props.selectionAutoFocus) { + if (isCheckboxSelectionModeInColumn) { + const checkbox = DomHandler.findSingle(target, 'td.p-selection-column .p-checkbox-box'); + checkbox && checkbox.focus(); + } else if (isRadioSelectionModeInColumn) { + const radio = DomHandler.findSingle(target, 'td.p-selection-column input[type="radio"]'); + radio && radio.focus(); + } } - } - !isFocused && target && target.focus(); - } + !isFocused && target && target.focus(); + }; - const changeTabIndex = (event, type) => { - const target = event.currentTarget; - const isSelectable = DomHandler.hasClass(target, type === 'cell' ? 'p-selectable-cell' : 'p-selectable-row'); + const changeTabIndex = (event, type) => { + const target = event.currentTarget; + const isSelectable = DomHandler.hasClass(target, type === 'cell' ? 'p-selectable-cell' : 'p-selectable-row'); - if (isSelectable) { - const selector = type === 'cell' ? 'tr > td' : 'tr'; - const tabbableEl = DomHandler.findSingle(elementRef.current, `${selector}[tabindex="${props.tabIndex}"]`); + if (isSelectable) { + const selector = type === 'cell' ? 'tr > td' : 'tr'; + const tabbableEl = DomHandler.findSingle(elementRef.current, `${selector}[tabindex="${props.tabIndex}"]`); - if (tabbableEl && target) { - tabbableEl.tabIndex = -1; - target.tabIndex = props.tabIndex; + if (tabbableEl && target) { + tabbableEl.tabIndex = -1; + target.tabIndex = props.tabIndex; + } } - } - } + }; - const onRowClick = (event) => { - if (allowCellSelection() || !allowSelection(event)) { - return; - } + const onRowClick = (event) => { + if (allowCellSelection() || !allowSelection(event)) { + return; + } - props.onRowClick && props.onRowClick(event); + props.onRowClick && props.onRowClick(event); + + if (allowRowSelection()) { + if (allowRangeSelection(event)) { + onRangeSelection(event, 'row'); + } else { + const toggleable = isRadioSelectionModeInColumn || isCheckboxSelectionModeInColumn || allowMetaKeySelection(event); + anchorRowIndex.current = event.index; + rangeRowIndex.current = event.index; + anchorRowFirst.current = props.first; + + if (isSingleSelection()) { + onSingleSelection({ ...event, toggleable, type: 'row' }); + } else { + onMultipleSelection({ ...event, toggleable, type: 'row' }); + } + } - if (allowRowSelection()) { - if (allowRangeSelection(event)) { - onRangeSelection(event, 'row'); + changeTabIndex(event.originalEvent, 'row'); + } else { + focusOnElement(event.originalEvent); } - else { - const toggleable = isRadioSelectionModeInColumn || isCheckboxSelectionModeInColumn || allowMetaKeySelection(event); - anchorRowIndex.current = event.index; - rangeRowIndex.current = event.index; - anchorRowFirst.current = props.first; - if (isSingleSelection()) { - onSingleSelection({ ...event, toggleable, type: 'row' }); + rowTouched.current = false; + }; + + const onRowDoubleClick = (e) => { + const { originalEvent: event } = e; + if (DomHandler.isClickable(event.target)) { + return; + } + + if (props.onRowDoubleClick) { + props.onRowDoubleClick(e); + } + }; + + const onRowRightClick = (event) => { + if (props.onContextMenu || props.onContextMenuSelectionChange) { + DomHandler.clearSelection(); + + if (props.onContextMenuSelectionChange) { + props.onContextMenuSelectionChange({ + originalEvent: event.originalEvent, + value: event.data + }); } - else { - onMultipleSelection({ ...event, toggleable, type: 'row' }); + + if (props.onContextMenu) { + props.onContextMenu({ + originalEvent: event.originalEvent, + data: event.data + }); } - } - changeTabIndex(event.originalEvent, 'row'); - } - else { - focusOnElement(event.originalEvent); - } + event.originalEvent.preventDefault(); + } + }; - rowTouched.current = false; - } + const onRowTouchEnd = () => { + rowTouched.current = true; + }; - const onRowDoubleClick = (e) => { - const { originalEvent: event } = e; - if (DomHandler.isClickable(event.target)) { - return; - } + const onRowMouseDown = (e) => { + const { originalEvent: event } = e; - if (props.onRowDoubleClick) { - props.onRowDoubleClick(e); - } - } + if (DomHandler.hasClass(event.target, 'p-datatable-reorderablerow-handle')) event.currentTarget.draggable = true; + else event.currentTarget.draggable = false; - const onRowRightClick = (event) => { - if (props.onContextMenu || props.onContextMenuSelectionChange) { - DomHandler.clearSelection(); + if (allowRowDrag(e)) { + enableDragSelection(event, 'row'); + anchorRowIndex.current = e.index; + rangeRowIndex.current = e.index; + anchorRowFirst.current = props.first; + } + }; - if (props.onContextMenuSelectionChange) { - props.onContextMenuSelectionChange({ - originalEvent: event.originalEvent, - value: event.data - }); + const onRowMouseUp = (event) => { + const isSameRow = event.index === anchorRowIndex.current; + if (allowRowDrag(event) && !isSameRow) { + onRangeSelection(event, 'row'); + } + }; + + const onRowToggle = (event) => { + let expandedRows; + let dataKey = props.dataKey; + let hasDataKey = props.groupRowsBy ? dataKey === props.groupRowsBy : !!dataKey; + + if (hasDataKey) { + let dataKeyValue = String(ObjectUtils.resolveFieldData(event.data, dataKey)); + expandedRows = props.expandedRows ? { ...props.expandedRows } : {}; + + if (expandedRows[dataKeyValue] != null) { + delete expandedRows[dataKeyValue]; + if (props.onRowCollapse) { + props.onRowCollapse({ originalEvent: event, data: event.data }); + } + } else { + expandedRows[dataKeyValue] = true; + if (props.onRowExpand) { + props.onRowExpand({ originalEvent: event, data: event.data }); + } + } + } else { + let expandedRowIndex = findIndex(props.expandedRows, event.data); + expandedRows = props.expandedRows ? [...props.expandedRows] : []; + + if (expandedRowIndex !== -1) { + expandedRows = expandedRows.filter((_, i) => i !== expandedRowIndex); + if (props.onRowCollapse) { + props.onRowCollapse({ originalEvent: event, data: event.data }); + } + } else { + expandedRows.push(event.data); + if (props.onRowExpand) { + props.onRowExpand({ originalEvent: event, data: event.data }); + } + } } - if (props.onContextMenu) { - props.onContextMenu({ - originalEvent: event.originalEvent, - data: event.data + if (props.onRowToggle) { + props.onRowToggle({ + data: expandedRows }); } + }; + + const onRowDragStart = (e) => { + const { originalEvent: event, index } = e; + if (allowRowDrag(event)) { + rowDragging.current = true; + draggedRowIndex.current = index; + event.dataTransfer.setData('text', 'b'); // For firefox + } + }; + + const onRowDragOver = (e) => { + const { originalEvent: event, index } = e; + + if (rowDragging.current && draggedRowIndex.current !== index) { + const rowElement = event.currentTarget; + const rowY = DomHandler.getOffset(rowElement).top + DomHandler.getWindowScrollTop(); + const pageY = event.pageY + window.scrollY; + const rowMidY = rowY + DomHandler.getOuterHeight(rowElement) / 2; + const prevRowElement = rowElement.previousElementSibling; + + if (pageY < rowMidY) { + DomHandler.removeClass(rowElement, 'p-datatable-dragpoint-bottom'); + + droppedRowIndex.current = index; + if (prevRowElement) DomHandler.addClass(prevRowElement, 'p-datatable-dragpoint-bottom'); + else DomHandler.addClass(rowElement, 'p-datatable-dragpoint-top'); + } else { + if (prevRowElement) DomHandler.removeClass(prevRowElement, 'p-datatable-dragpoint-bottom'); + else DomHandler.addClass(rowElement, 'p-datatable-dragpoint-top'); + + droppedRowIndex.current = index + 1; + DomHandler.addClass(rowElement, 'p-datatable-dragpoint-bottom'); + } + } - event.originalEvent.preventDefault(); - } - } + event.preventDefault(); + }; - const onRowTouchEnd = () => { - rowTouched.current = true; - } + const onRowDragLeave = (e) => { + const { originalEvent: event } = e; + const rowElement = event.currentTarget; + const prevRowElement = rowElement.previousElementSibling; - const onRowMouseDown = (e) => { - const { originalEvent: event } = e; + if (prevRowElement) { + DomHandler.removeClass(prevRowElement, 'p-datatable-dragpoint-bottom'); + } - if (DomHandler.hasClass(event.target, 'p-datatable-reorderablerow-handle')) - event.currentTarget.draggable = true; - else - event.currentTarget.draggable = false; + DomHandler.removeClass(rowElement, 'p-datatable-dragpoint-bottom'); + DomHandler.removeClass(rowElement, 'p-datatable-dragpoint-top'); + }; + + const onRowDragEnd = (e) => { + const { originalEvent: event } = e; - if (allowRowDrag(e)) { - enableDragSelection(event, 'row'); - anchorRowIndex.current = e.index; - rangeRowIndex.current = e.index; - anchorRowFirst.current = props.first; - } - } - - const onRowMouseUp = (event) => { - const isSameRow = event.index === anchorRowIndex.current; - if (allowRowDrag(event) && !isSameRow) { - onRangeSelection(event, 'row'); - } - } - - const onRowToggle = (event) => { - let expandedRows; - let dataKey = props.dataKey; - let hasDataKey = props.groupRowsBy ? dataKey === props.groupRowsBy : !!dataKey; - - if (hasDataKey) { - let dataKeyValue = String(ObjectUtils.resolveFieldData(event.data, dataKey)); - expandedRows = props.expandedRows ? { ...props.expandedRows } : {}; - - if (expandedRows[dataKeyValue] != null) { - delete expandedRows[dataKeyValue]; - if (props.onRowCollapse) { - props.onRowCollapse({ originalEvent: event, data: event.data }); + rowDragging.current = false; + draggedRowIndex.current = null; + droppedRowIndex.current = null; + event.currentTarget.draggable = false; + }; + + const onRowDrop = (e) => { + const { originalEvent: event } = e; + + if (droppedRowIndex.current != null) { + let dropIndex = draggedRowIndex.current > droppedRowIndex.current ? droppedRowIndex.current : droppedRowIndex.current === 0 ? 0 : droppedRowIndex.current - 1; + let val = [...props.value]; + ObjectUtils.reorderArray(val, draggedRowIndex.current, dropIndex); + + if (props.onRowReorder) { + props.onRowReorder({ + originalEvent: event, + value: val, + dragIndex: draggedRowIndex.current, + dropIndex: droppedRowIndex.current + }); } } - else { - expandedRows[dataKeyValue] = true; - if (props.onRowExpand) { - props.onRowExpand({ originalEvent: event, data: event.data }); - } + + //cleanup + onRowDragLeave(e); + onRowDragEnd(e); + event.preventDefault(); + }; + + const onRadioChange = (event) => { + onSingleSelection({ ...event, toggleable: true, type: 'radio' }); + }; + + const onCheckboxChange = (event) => { + onMultipleSelection({ ...event, toggleable: true, type: 'checkbox' }); + }; + + const onDragSelectionMouseMove = (event) => { + const { x, y } = initialDragPosition.current; + const dx = event.clientX - x; + const dy = event.clientY - y; + + if (dy < 0) dragSelectionHelper.current.style.top = `${event.pageY + 5}px`; + if (dx < 0) dragSelectionHelper.current.style.left = `${event.pageX + 5}px`; + + dragSelectionHelper.current.style.height = `${Math.abs(dy)}px`; + dragSelectionHelper.current.style.width = `${Math.abs(dx)}px`; + + event.preventDefault(); + }; + + const onDragSelectionMouseUp = () => { + if (dragSelectionHelper.current) { + dragSelectionHelper.current.remove(); + dragSelectionHelper.current = null; } - } - else { - let expandedRowIndex = findIndex(props.expandedRows, event.data); - expandedRows = props.expandedRows ? [...props.expandedRows] : []; - if (expandedRowIndex !== -1) { - expandedRows = expandedRows.filter((_, i) => i !== expandedRowIndex); - if (props.onRowCollapse) { - props.onRowCollapse({ originalEvent: event, data: event.data }); - } + document.removeEventListener('mousemove', onDragSelectionMouseMove); + document.removeEventListener('mouseup', onDragSelectionMouseUp); + }; + + const onCellClick = (event) => { + if (!allowSelection(event)) { + return; } - else { - expandedRows.push(event.data); - if (props.onRowExpand) { - props.onRowExpand({ originalEvent: event, data: event.data }); + + props.onCellClick && props.onCellClick(event); + + if (allowCellSelection()) { + if (allowRangeSelection(event)) { + onRangeSelection(event, 'cell'); + } else { + let toggleable = allowMetaKeySelection(event); + let { originalEvent, ...data } = event; + anchorRowIndex.current = event.rowIndex; + rangeRowIndex.current = event.rowIndex; + anchorRowFirst.current = props.first; + anchorCellIndex.current = event.cellIndex; + + if (isSingleSelection()) { + onSingleSelection({ originalEvent, data, index: event.rowIndex, toggleable, type: 'cell' }); + } else { + onMultipleSelection({ originalEvent, data, index: event.rowIndex, toggleable, type: 'cell' }); + } } + + changeTabIndex(event.originalEvent, 'cell'); } - } - if (props.onRowToggle) { - props.onRowToggle({ - data: expandedRows - }); - } - } - - const onRowDragStart = (e) => { - const { originalEvent: event, index } = e; - if (allowRowDrag(event)) { - rowDragging.current = true; - draggedRowIndex.current = index; - event.dataTransfer.setData('text', 'b'); // For firefox - } - } - - const onRowDragOver = (e) => { - const { originalEvent: event, index } = e; - - if (rowDragging.current && draggedRowIndex.current !== index) { - const rowElement = event.currentTarget; - const rowY = DomHandler.getOffset(rowElement).top + DomHandler.getWindowScrollTop(); - const pageY = event.pageY + window.scrollY; - const rowMidY = rowY + DomHandler.getOuterHeight(rowElement) / 2; - const prevRowElement = rowElement.previousElementSibling; + rowTouched.current = false; + }; - if (pageY < rowMidY) { - DomHandler.removeClass(rowElement, 'p-datatable-dragpoint-bottom'); - - droppedRowIndex.current = index; - if (prevRowElement) - DomHandler.addClass(prevRowElement, 'p-datatable-dragpoint-bottom'); - else - DomHandler.addClass(rowElement, 'p-datatable-dragpoint-top'); - } - else { - if (prevRowElement) - DomHandler.removeClass(prevRowElement, 'p-datatable-dragpoint-bottom'); - else - DomHandler.addClass(rowElement, 'p-datatable-dragpoint-top'); - - droppedRowIndex.current = index + 1; - DomHandler.addClass(rowElement, 'p-datatable-dragpoint-bottom'); - } - } - - event.preventDefault(); - } - - const onRowDragLeave = (e) => { - const { originalEvent: event } = e; - const rowElement = event.currentTarget; - const prevRowElement = rowElement.previousElementSibling; - - if (prevRowElement) { - DomHandler.removeClass(prevRowElement, 'p-datatable-dragpoint-bottom'); - } - - DomHandler.removeClass(rowElement, 'p-datatable-dragpoint-bottom'); - DomHandler.removeClass(rowElement, 'p-datatable-dragpoint-top'); - } - - const onRowDragEnd = (e) => { - const { originalEvent: event } = e; - - rowDragging.current = false; - draggedRowIndex.current = null; - droppedRowIndex.current = null; - event.currentTarget.draggable = false; - } - - const onRowDrop = (e) => { - const { originalEvent: event } = e; - - if (droppedRowIndex.current != null) { - let dropIndex = (draggedRowIndex.current > droppedRowIndex.current) ? droppedRowIndex.current : (droppedRowIndex.current === 0) ? 0 : droppedRowIndex.current - 1; - let val = [...props.value]; - ObjectUtils.reorderArray(val, draggedRowIndex.current, dropIndex); - - if (props.onRowReorder) { - props.onRowReorder({ - originalEvent: event, - value: val, - dragIndex: draggedRowIndex.current, - dropIndex: droppedRowIndex.current - }) - } - } - - //cleanup - onRowDragLeave(e); - onRowDragEnd(e); - event.preventDefault(); - } - - const onRadioChange = (event) => { - onSingleSelection({ ...event, toggleable: true, type: 'radio' }); - } - - const onCheckboxChange = (event) => { - onMultipleSelection({ ...event, toggleable: true, type: 'checkbox' }); - } - - const onDragSelectionMouseMove = (event) => { - const { x, y } = initialDragPosition.current; - const dx = event.clientX - x; - const dy = event.clientY - y; - - if (dy < 0) - dragSelectionHelper.current.style.top = `${event.pageY + 5}px`; - if (dx < 0) - dragSelectionHelper.current.style.left = `${event.pageX + 5}px`; - - dragSelectionHelper.current.style.height = `${Math.abs(dy)}px`; - dragSelectionHelper.current.style.width = `${Math.abs(dx)}px`; - - event.preventDefault(); - } - - const onDragSelectionMouseUp = () => { - if (dragSelectionHelper.current) { - dragSelectionHelper.current.remove(); - dragSelectionHelper.current = null; - } - - document.removeEventListener('mousemove', onDragSelectionMouseMove); - document.removeEventListener('mouseup', onDragSelectionMouseUp); - } - - const onCellClick = (event) => { - if (!allowSelection(event)) { - return; - } - - props.onCellClick && props.onCellClick(event); - - if (allowCellSelection()) { - if (allowRangeSelection(event)) { - onRangeSelection(event, 'cell'); - } - else { - let toggleable = allowMetaKeySelection(event); - let { originalEvent, ...data } = event; + const onCellMouseDown = (event) => { + if (allowCellDrag(event)) { + enableDragSelection(event.originalEvent); anchorRowIndex.current = event.rowIndex; rangeRowIndex.current = event.rowIndex; anchorRowFirst.current = props.first; anchorCellIndex.current = event.cellIndex; + } + }; - if (isSingleSelection()) { - onSingleSelection({ originalEvent, data, index: event.rowIndex, toggleable, type: 'cell' }); - } - else { - onMultipleSelection({ originalEvent, data, index: event.rowIndex, toggleable, type: 'cell' }); - } + const onCellMouseUp = (event) => { + const isSameCell = event.rowIndex === anchorRowIndex.current && event.cellIndex === anchorCellIndex.current; + if (allowCellDrag(event) && !isSameCell) { + onRangeSelection(event, 'cell'); } + }; - changeTabIndex(event.originalEvent, 'cell'); - } + const bindDragSelectionEvents = () => { + document.addEventListener('mousemove', onDragSelectionMouseMove); + document.addEventListener('mouseup', onDragSelectionMouseUp); + document.body.appendChild(dragSelectionHelper.current); + }; - rowTouched.current = false; - } + const unbindDragSelectionEvents = () => { + onDragSelectionMouseUp(); + }; - const onCellMouseDown = (event) => { - if (allowCellDrag(event)) { - enableDragSelection(event.originalEvent); - anchorRowIndex.current = event.rowIndex; - rangeRowIndex.current = event.rowIndex; - anchorRowFirst.current = props.first; - anchorCellIndex.current = event.cellIndex; - } - } - - const onCellMouseUp = (event) => { - const isSameCell = event.rowIndex === anchorRowIndex.current && event.cellIndex === anchorCellIndex.current; - if (allowCellDrag(event) && !isSameCell) { - onRangeSelection(event, 'cell'); - } - } - - const bindDragSelectionEvents = () => { - document.addEventListener('mousemove', onDragSelectionMouseMove); - document.addEventListener('mouseup', onDragSelectionMouseUp); - document.body.appendChild(dragSelectionHelper.current); - } - - const unbindDragSelectionEvents = () => { - onDragSelectionMouseUp(); - } - - React.useEffect(() => { - if (props.frozenRow) { - updateFrozenRowStickyPosition(); - } - - if (props.scrollable && props.rowGroupMode === 'subheader') { - updateFrozenRowGroupHeaderStickyPosition(); - } - }); - - useMountEffect(() => { - if (!props.isVirtualScrollerDisabled && getVirtualScrollerOption('vertical')) { - updateVirtualScrollerPosition(); - } - }); - - useUpdateEffect(() => { - if (!props.isVirtualScrollerDisabled && getVirtualScrollerOption('vertical') && getVirtualScrollerOption('itemSize', prevVirtualScrollerOptions) !== getVirtualScrollerOption('itemSize')) { - updateVirtualScrollerPosition(); - } - }, [props.virtualScrollerOptions]); - - useUpdateEffect(() => { - if (props.paginator && isMultipleSelection()) { - anchorRowIndex.current = null; - } - }, [props.first]); - - useUnmountEffect(() => { - if (props.dragSelection) { - unbindDragSelectionEvents(); - } - }); - - const createEmptyContent = () => { - if (!props.loading) { - const colSpan = getColumnsLength(); - const content = ObjectUtils.getJSXElement(props.emptyMessage, { props: props.tableProps, frozen: props.frozenRow }) || localeOption('emptyMessage'); - - return ( - - - {content} - - - ) - } - - return null; - } - - const createGroupHeader = (rowData, index, expanded, colSpan) => { - if (isSubheaderGrouping && shouldRenderRowGroupHeader(props.value, rowData, index - props.first)) { - const style = rowGroupHeaderStyle(); - const toggler = props.expandableRowGroups && ( - - ); - const content = ObjectUtils.getJSXElement(props.rowGroupHeaderTemplate, rowData, { index, props: props.tableProps }); - - return ( - - - {toggler} - + React.useEffect(() => { + if (props.frozenRow) { + updateFrozenRowStickyPosition(); + } + + if (props.scrollable && props.rowGroupMode === 'subheader') { + updateFrozenRowGroupHeaderStickyPosition(); + } + }); + + useMountEffect(() => { + if (!props.isVirtualScrollerDisabled && getVirtualScrollerOption('vertical')) { + updateVirtualScrollerPosition(); + } + }); + + useUpdateEffect(() => { + if (!props.isVirtualScrollerDisabled && getVirtualScrollerOption('vertical') && getVirtualScrollerOption('itemSize', prevVirtualScrollerOptions) !== getVirtualScrollerOption('itemSize')) { + updateVirtualScrollerPosition(); + } + }, [props.virtualScrollerOptions]); + + useUpdateEffect(() => { + if (props.paginator && isMultipleSelection()) { + anchorRowIndex.current = null; + } + }, [props.first]); + + useUnmountEffect(() => { + if (props.dragSelection) { + unbindDragSelectionEvents(); + } + }); + + const createEmptyContent = () => { + if (!props.loading) { + const colSpan = getColumnsLength(); + const content = ObjectUtils.getJSXElement(props.emptyMessage, { props: props.tableProps, frozen: props.frozenRow }) || localeOption('emptyMessage'); + + return ( + + {content} - - - - ) - } - - return null; - } - - const createRow = (rowData, index, expanded) => { - if (!props.expandableRowGroups || expanded) { - const selected = isSelectionEnabled() ? isSelected(rowData) : false; - const contextMenuSelected = isContextMenuSelected(rowData); - const _allowRowSelection = allowRowSelection(); - const _allowCellSelection = allowCellSelection(); - const editing = isRowEditing(rowData); - - return ( - - ) - } - } - - const createExpansion = (rowData, index, expanded, colSpan) => { - if (expanded && !(isSubheaderGrouping && props.expandableRowGroups)) { - const content = ObjectUtils.getJSXElement(props.rowExpansionTemplate, rowData, { index }); - const id = `${props.tableSelector}_content_${index}_expanded`; - - return ( - - - {content} - - - ) - } + + + ); + } - return null; - } + return null; + }; - const createGroupFooter = (rowData, index, expanded, colSpan) => { - if (isSubheaderGrouping && shouldRenderRowGroupFooter(props.value, rowData, index - props.first, expanded)) { - const content = ObjectUtils.getJSXElement(props.rowGroupFooterTemplate, rowData, { index, colSpan, props: props.tableProps }); + const createGroupHeader = (rowData, index, expanded, colSpan) => { + if (isSubheaderGrouping && shouldRenderRowGroupHeader(props.value, rowData, index - props.first)) { + const style = rowGroupHeaderStyle(); + const toggler = props.expandableRowGroups && ; + const content = ObjectUtils.getJSXElement(props.rowGroupHeaderTemplate, rowData, { index, props: props.tableProps }); - return ( - - {content} - - ) - } + return ( + + + {toggler} + {content} + + + ); + } - return null; - } + return null; + }; - const createContent = () => { - return ( - props.value.map((rowData, i) => { + const createRow = (rowData, index, expanded) => { + if (!props.expandableRowGroups || expanded) { + const selected = isSelectionEnabled() ? isSelected(rowData) : false; + const contextMenuSelected = isContextMenuSelected(rowData); + const _allowRowSelection = allowRowSelection(); + const _allowCellSelection = allowCellSelection(); + const editing = isRowEditing(rowData); + + return ( + + ); + } + }; + + const createExpansion = (rowData, index, expanded, colSpan) => { + if (expanded && !(isSubheaderGrouping && props.expandableRowGroups)) { + const content = ObjectUtils.getJSXElement(props.rowExpansionTemplate, rowData, { index }); + const id = `${props.tableSelector}_content_${index}_expanded`; + + return ( + + + {content} + + + ); + } + + return null; + }; + + const createGroupFooter = (rowData, index, expanded, colSpan) => { + if (isSubheaderGrouping && shouldRenderRowGroupFooter(props.value, rowData, index - props.first, expanded)) { + const content = ObjectUtils.getJSXElement(props.rowGroupFooterTemplate, rowData, { index, colSpan, props: props.tableProps }); + + return ( + + {content} + + ); + } + + return null; + }; + + const createContent = () => { + return props.value.map((rowData, i) => { const index = getVirtualScrollerOption('getItemOptions') ? getVirtualScrollerOption('getItemOptions')(i).index : props.first + i; const key = getRowKey(rowData, index); const expanded = isRowExpanded(rowData); @@ -920,19 +926,19 @@ export const TableBody = React.memo(React.forwardRef((props, ref) => { {expansion} {groupFooter} - ) - }) - ) - } - - const className = classNames('p-datatable-tbody', props.className); - const content = props.empty ? createEmptyContent() : createContent(); - - return ( - - {content} - - ) -})); + ); + }); + }; + + const className = classNames('p-datatable-tbody', props.className); + const content = props.empty ? createEmptyContent() : createContent(); + + return ( + + {content} + + ); + }) +); TableBody.displayName = 'TableBody'; diff --git a/components/lib/datatable/TableFooter.js b/components/lib/datatable/TableFooter.js index ec82224381..872f3f5445 100644 --- a/components/lib/datatable/TableFooter.js +++ b/components/lib/datatable/TableFooter.js @@ -2,16 +2,15 @@ import * as React from 'react'; import { FooterCell } from './FooterCell'; export const TableFooter = React.memo((props) => { - const hasFooter = () => { - return props.footerColumnGroup ? true : (props.columns ? props.columns.some(col => col && col.props.footer) : false); - } + return props.footerColumnGroup ? true : props.columns ? props.columns.some((col) => col && col.props.footer) : false; + }; const createGroupFooterCells = (row) => { const columns = React.Children.toArray(row.props.children); return createFooterCells(columns); - } + }; const createFooterCells = (columns) => { return React.Children.map(columns, (col, i) => { @@ -19,27 +18,27 @@ export const TableFooter = React.memo((props) => { const key = col ? col.props.columnKey || col.props.field || i : i; return isVisible && ; - }) - } + }); + }; const createContent = () => { if (props.footerColumnGroup) { const rows = React.Children.toArray(props.footerColumnGroup.props.children); - return rows.map((row, i) => {createGroupFooterCells(row)}); + return rows.map((row, i) => ( + + {createGroupFooterCells(row)} + + )); } return {createFooterCells(props.columns)}; - } + }; if (hasFooter()) { const content = createContent(); - return ( - - {content} - - ) + return {content}; } return null; diff --git a/components/lib/datatable/TableHeader.js b/components/lib/datatable/TableHeader.js index 0c42672dc4..c3caa9b6ba 100644 --- a/components/lib/datatable/TableHeader.js +++ b/components/lib/datatable/TableHeader.js @@ -13,8 +13,8 @@ export const TableHeader = React.memo((props) => { const isAllSortableDisabled = isSingleSort && allSortableDisabledState; const isColumnSorted = (column) => { - return props.sortField !== null ? (column.props.field === props.sortField || column.props.sortField === props.sortField) : false; - } + return props.sortField !== null ? column.props.field === props.sortField || column.props.sortField === props.sortField : false; + }; const updateSortableDisabled = () => { if (isSingleSort || (isMultipleSort && props.onSortChange)) { @@ -33,15 +33,15 @@ export const TableHeader = React.memo((props) => { setSortableDisabledFieldsState(sortableDisabledFields); setAllSortableDisabledState(allSortableDisabled); } - } + }; const onSortableChange = () => { updateSortableDisabled(); - } + }; const onCheckboxChange = (e) => { props.onColumnCheckboxChange(e, props.value); - } + }; useMountEffect(() => { updateSortableDisabled(); @@ -51,45 +51,73 @@ export const TableHeader = React.memo((props) => { const columns = React.Children.toArray(row.props.children); return createHeaderCells(columns); - } + }; const createHeaderCells = (columns) => { return React.Children.map(columns, (col, i) => { const isVisible = col ? !col.props.hidden : true; const key = col ? col.props.columnKey || col.props.field || i : i; - return isVisible && ( - - ) + return ( + isVisible && ( + + ) + ); }); - } + }; const createCheckbox = (selectionMode) => { if (props.showSelectAll && selectionMode === 'multiple') { const allRowsSelected = props.allRowsSelected(props.value); - return ( - - ) + return ; } return null; - } + }; const createFilter = (column, filter) => { if (filter) { - return ( - - ) + return ; } return null; - } + }; const createFilterCells = () => { return React.Children.map(props.columns, (col, i) => { @@ -108,20 +136,23 @@ export const TableHeader = React.memo((props) => { {checkbox} {filterRow} - ) + ); } return null; }); - } + }; const createContent = () => { if (props.headerColumnGroup) { const rows = React.Children.toArray(props.headerColumnGroup.props.children); - return rows.map((row, i) => {createGroupHeaderCells(row)}); - } - else { + return rows.map((row, i) => ( + + {createGroupHeaderCells(row)} + + )); + } else { const headerRow = {createHeaderCells(props.columns)}; const filterRow = props.filterDisplay === 'row' && {createFilterCells()}; @@ -130,17 +161,13 @@ export const TableHeader = React.memo((props) => { {headerRow} {filterRow} - ) + ); } - } + }; const content = createContent(); - return ( - - {content} - - ) + return {content}; }); TableHeader.displayName = 'TableHeader'; diff --git a/components/lib/datatable/datatable.d.ts b/components/lib/datatable/datatable.d.ts index 00fac66b2a..056bc2a4f3 100644 --- a/components/lib/datatable/datatable.d.ts +++ b/components/lib/datatable/datatable.d.ts @@ -181,13 +181,13 @@ interface DataTableSelectParams { type: DataTableSelectType; } -interface DataTableUnselectParams extends DataTableSelectParams { } +interface DataTableUnselectParams extends DataTableSelectParams {} interface DataTableExportFunctionParams { data: any; field: string; rowData: any; - column: Column + column: Column; } interface DataTableColReorderParams { diff --git a/components/lib/dataview/DataView.js b/components/lib/dataview/DataView.js index d40b4bf886..7b5f4f11a0 100644 --- a/components/lib/dataview/DataView.js +++ b/components/lib/dataview/DataView.js @@ -5,14 +5,13 @@ import { Ripple } from '../ripple/Ripple'; import { classNames, ObjectUtils } from '../utils/Utils'; export const DataViewLayoutOptions = React.memo((props) => { - const changeLayout = (event, layoutMode) => { props.onChange({ originalEvent: event, value: layoutMode }); event.preventDefault(); - } + }; const otherProps = ObjectUtils.findDiffKeys(props, DataViewLayoutOptions.defaultProps); const className = classNames('p-dataview-layout-options p-selectbutton p-buttonset', props.className); @@ -30,202 +29,214 @@ export const DataViewLayoutOptions = React.memo((props) => {
    - ) + ); }); export const DataViewItem = React.memo((props) => { return props.template(props.item, props.layout); }); -export const DataView = React.memo(React.forwardRef((props, ref) => { - const [firstState, setFirstState] = React.useState(props.first); - const [rowsState, setRowsState] = React.useState(props.rows); - const elementRef = React.useRef(null); - const first = props.onPage ? props.first : firstState; - const rows = props.onPage ? props.rows : rowsState; - - const getItemRenderKey = (value) => { - return props.dataKey ? ObjectUtils.resolveFieldData(value, props.dataKey) : null; - } +export const DataView = React.memo( + React.forwardRef((props, ref) => { + const [firstState, setFirstState] = React.useState(props.first); + const [rowsState, setRowsState] = React.useState(props.rows); + const elementRef = React.useRef(null); + const first = props.onPage ? props.first : firstState; + const rows = props.onPage ? props.rows : rowsState; - const getTotalRecords = () => { - return props.totalRecords ? props.totalRecords : (props.value ? props.value.length : 0); - } + const getItemRenderKey = (value) => { + return props.dataKey ? ObjectUtils.resolveFieldData(value, props.dataKey) : null; + }; - const createPaginator = (position) => { - const className = classNames('p-paginator-' + position, props.paginatorClassName); - const totalRecords = getTotalRecords(); + const getTotalRecords = () => { + return props.totalRecords ? props.totalRecords : props.value ? props.value.length : 0; + }; - return ( - - ) - } - - const onPageChange = (event) => { - if (props.onPage) { - props.onPage(event); - } - else { - setFirstState(event.first) - setRowsState(event.rows); - } - } - - const sort = () => { - if (props.value) { - const value = [...props.value]; - - value.sort((data1, data2) => { - let value1 = ObjectUtils.resolveFieldData(data1, props.sortField); - let value2 = ObjectUtils.resolveFieldData(data2, props.sortField); - return ObjectUtils.sort(value1, value2, props.sortOrder, PrimeReact.locale, PrimeReact.nullSortOrder); - }); + const createPaginator = (position) => { + const className = classNames('p-paginator-' + position, props.paginatorClassName); + const totalRecords = getTotalRecords(); - return value; - } + return ( + + ); + }; + + const onPageChange = (event) => { + if (props.onPage) { + props.onPage(event); + } else { + setFirstState(event.first); + setRowsState(event.rows); + } + }; - return null; - } + const sort = () => { + if (props.value) { + const value = [...props.value]; - const createLoader = () => { - if (props.loading) { - let iconClassName = classNames('p-dataview-loading-icon pi-spin', props.loadingIcon); + value.sort((data1, data2) => { + let value1 = ObjectUtils.resolveFieldData(data1, props.sortField); + let value2 = ObjectUtils.resolveFieldData(data2, props.sortField); + return ObjectUtils.sort(value1, value2, props.sortOrder, PrimeReact.locale, PrimeReact.nullSortOrder); + }); - return ( -
    - -
    - ) - } + return value; + } - return null; - } + return null; + }; - const createTopPaginator = () => { - if (props.paginator && (props.paginatorPosition !== 'bottom' || props.paginatorPosition === 'both')) { - return createPaginator('top'); - } + const createLoader = () => { + if (props.loading) { + let iconClassName = classNames('p-dataview-loading-icon pi-spin', props.loadingIcon); - return null; - } + return ( +
    + +
    + ); + } + return null; + }; - const createBottomPaginator = () => { - if (props.paginator && (props.paginatorPosition !== 'top' || props.paginatorPosition === 'both')) { - return createPaginator('bottom'); - } + const createTopPaginator = () => { + if (props.paginator && (props.paginatorPosition !== 'bottom' || props.paginatorPosition === 'both')) { + return createPaginator('top'); + } - return null; - } + return null; + }; - const createEmptyMessage = () => { - if (!props.loading) { - const content = props.emptyMessage || localeOption('emptyMessage'); + const createBottomPaginator = () => { + if (props.paginator && (props.paginatorPosition !== 'top' || props.paginatorPosition === 'both')) { + return createPaginator('bottom'); + } - return
    {content}
    - } + return null; + }; - return null; - } + const createEmptyMessage = () => { + if (!props.loading) { + const content = props.emptyMessage || localeOption('emptyMessage'); - const createHeader = () => { - if (props.header) { - return
    {props.header}
    - } + return
    {content}
    ; + } - return null; - } + return null; + }; - const createFooter = () => { - if (props.footer) { - return
    {props.footer}
    - } + const createHeader = () => { + if (props.header) { + return
    {props.header}
    ; + } - return null; - } + return null; + }; - const createItems = (value) => { - if (ObjectUtils.isNotEmpty(value)) { - if (props.paginator) { - const currentFirst = props.lazy ? 0 : first; - const totalRecords = getTotalRecords(); - const last = Math.min(rows + currentFirst, totalRecords); - let items = []; + const createFooter = () => { + if (props.footer) { + return
    {props.footer}
    ; + } - for (let i = currentFirst; i < last; i++) { - const val = value[i]; - val && items.push(); + return null; + }; + + const createItems = (value) => { + if (ObjectUtils.isNotEmpty(value)) { + if (props.paginator) { + const currentFirst = props.lazy ? 0 : first; + const totalRecords = getTotalRecords(); + const last = Math.min(rows + currentFirst, totalRecords); + let items = []; + + for (let i = currentFirst; i < last; i++) { + const val = value[i]; + val && items.push(); + } + return items; } - return items; + + return value.map((item, index) => { + return ; + }); } + return createEmptyMessage(); + }; + + const createContent = (value) => { + const items = createItems(value); + const gridClassName = classNames('p-grid grid', { + 'p-nogutter grid-nogutter': !props.gutter + }); + return ( - value.map((item, index) => { - return - }) - ) - } - - return createEmptyMessage(); - } - - const createContent = (value) => { - const items = createItems(value); - const gridClassName = classNames('p-grid grid', { - 'p-nogutter grid-nogutter': !props.gutter - }); +
    +
    {items}
    +
    + ); + }; + + const processData = () => { + let data = props.value; + + if (ObjectUtils.isNotEmpty(data) && props.sortField) { + data = sort(); + } + + return data; + }; + + React.useImperativeHandle(ref, () => ({ + props, + getElement: () => elementRef.current + })); + + const data = processData(); + + const otherProps = ObjectUtils.findDiffKeys(props, DataView.defaultProps); + const className = classNames( + 'p-dataview p-component', + { + [`p-dataview-${props.layout}`]: !!props.layout, + 'p-dataview-loading': props.loading + }, + props.className + ); + const loader = createLoader(); + const topPaginator = createTopPaginator(); + const bottomPaginator = createBottomPaginator(); + const header = createHeader(); + const footer = createFooter(); + const content = createContent(data); return ( -
    -
    - {items} -
    +
    + {loader} + {header} + {topPaginator} + {content} + {bottomPaginator} + {footer}
    - ) - } - - const processData = () => { - let data = props.value; - - if (ObjectUtils.isNotEmpty(data) && props.sortField) { - data = sort(); - } - - return data; - } - - React.useImperativeHandle(ref, () => ({ - props, - getElement: () => elementRef.current - })); - - const data = processData(); - - const otherProps = ObjectUtils.findDiffKeys(props, DataView.defaultProps); - const className = classNames('p-dataview p-component', { - [`p-dataview-${props.layout}`]: !!props.layout, - 'p-dataview-loading': props.loading - }, props.className); - const loader = createLoader(); - const topPaginator = createTopPaginator(); - const bottomPaginator = createBottomPaginator(); - const header = createHeader(); - const footer = createFooter(); - const content = createContent(data); - - return ( -
    - {loader} - {header} - {topPaginator} - {content} - {bottomPaginator} - {footer} -
    - ) -})); + ); + }) +); DataViewLayoutOptions.displayName = 'DataViewLayoutOptions'; DataViewLayoutOptions.defaultProps = { @@ -235,7 +246,7 @@ DataViewLayoutOptions.defaultProps = { className: null, layout: null, onChange: null -} +}; DataViewItem.displayName = 'DataViewItem'; @@ -273,4 +284,4 @@ DataView.defaultProps = { gutter: false, itemTemplate: null, onPage: null -} +}; diff --git a/components/lib/dataview/dataview.d.ts b/components/lib/dataview/dataview.d.ts index 00caf98fdf..d00710c460 100755 --- a/components/lib/dataview/dataview.d.ts +++ b/components/lib/dataview/dataview.d.ts @@ -1,7 +1,7 @@ import * as React from 'react'; import { PaginatorTemplate } from '../paginator'; -type DataViewLayoutType = 'list' | 'grid' | (string & {}); +type DataViewLayoutType = 'list' | 'grid' | (string & Record); type DataViewPaginatorPositionType = 'top' | 'bottom' | 'both'; @@ -30,7 +30,7 @@ export interface DataViewLayoutOptionsProps { children?: React.ReactNode; } -export declare class DataViewLayoutOptions extends React.Component { } +export declare class DataViewLayoutOptions extends React.Component {} export interface DataViewProps extends Omit, HTMLDivElement>, 'ref'> { header?: React.ReactNode; diff --git a/components/lib/deferredcontent/DeferredContent.js b/components/lib/deferredcontent/DeferredContent.js index 90c9c50935..120b97f3aa 100644 --- a/components/lib/deferredcontent/DeferredContent.js +++ b/components/lib/deferredcontent/DeferredContent.js @@ -7,7 +7,9 @@ export const DeferredContent = React.forwardRef((props, ref) => { const elementRef = React.useRef(null); const [bindScrollListener, unbindScrollListener] = useEventListener({ - target: 'window', type: 'scroll', listener: () => { + target: 'window', + type: 'scroll', + listener: () => { if (shouldLoad()) { load(); unbindScrollListener(); @@ -18,19 +20,18 @@ export const DeferredContent = React.forwardRef((props, ref) => { const shouldLoad = () => { if (loadedState) { return false; - } - else { + } else { const rect = elementRef.current.getBoundingClientRect(); const winHeight = document.documentElement.clientHeight; - return (winHeight >= rect.top); + return winHeight >= rect.top; } - } + }; const load = (event) => { setLoadedState(true); props.onLoad && props.onLoad(event); - } + }; React.useImperativeHandle(ref, () => ({ props, @@ -49,11 +50,11 @@ export const DeferredContent = React.forwardRef((props, ref) => {
    {loadedState && props.children}
    - ) + ); }); DeferredContent.displayName = 'DeferredContent'; DeferredContent.defaultProps = { __TYPE: 'DeferredContent', onload: null -} +}; diff --git a/components/lib/deferredcontent/deferredcontent.d.ts b/components/lib/deferredcontent/deferredcontent.d.ts index 22287c44d1..7e488e32ed 100644 --- a/components/lib/deferredcontent/deferredcontent.d.ts +++ b/components/lib/deferredcontent/deferredcontent.d.ts @@ -5,6 +5,6 @@ export interface DeferredContentProps extends Omit { +export declare class DeferredContent extends React.Component { public getElement(): HTMLDivElement; } diff --git a/components/lib/dialog/Dialog.js b/components/lib/dialog/Dialog.js index 36b6d41502..2a20a7855a 100644 --- a/components/lib/dialog/Dialog.js +++ b/components/lib/dialog/Dialog.js @@ -35,7 +35,7 @@ export const Dialog = React.forwardRef((props, ref) => { DomHandler.removeClass(document.body, 'p-overflow-hidden'); props.onHide(); event.preventDefault(); - } + }; const focus = () => { let activeElement = document.activeElement; @@ -43,7 +43,7 @@ export const Dialog = React.forwardRef((props, ref) => { if (!isActiveElementInDialog && props.closable && props.showHeader) { closeRef.current.focus(); } - } + }; const onMaskClick = (event) => { if (props.dismissableMask && props.modal && maskRef.current === event.target) { @@ -51,7 +51,7 @@ export const Dialog = React.forwardRef((props, ref) => { } props.onMaskClick && props.onMaskClick(event); - } + }; const toggleMaximize = (event) => { if (props.onMaximize) { @@ -59,13 +59,12 @@ export const Dialog = React.forwardRef((props, ref) => { originalEvent: event, maximized: !maximized }); - } - else { + } else { setMaximizedState((prevMaximized) => !prevMaximized); } event.preventDefault(); - } + }; const onKeyDown = (event) => { let currentTarget = event.currentTarget; @@ -83,34 +82,27 @@ export const Dialog = React.forwardRef((props, ref) => { event.stopImmediatePropagation(); params.splice(paramLength - 1, 1); - } - else if (event.which === 9) { + } else if (event.which === 9) { event.preventDefault(); let focusableElements = DomHandler.getFocusableElements(dialog); if (focusableElements && focusableElements.length > 0) { if (!document.activeElement) { focusableElements[0].focus(); - } - else { + } else { let focusedIndex = focusableElements.indexOf(document.activeElement); if (event.shiftKey) { - if (focusedIndex === -1 || focusedIndex === 0) - focusableElements[focusableElements.length - 1].focus(); - else - focusableElements[focusedIndex - 1].focus(); - } - else { - if (focusedIndex === -1 || focusedIndex === (focusableElements.length - 1)) - focusableElements[0].focus(); - else - focusableElements[focusedIndex + 1].focus(); + if (focusedIndex === -1 || focusedIndex === 0) focusableElements[focusableElements.length - 1].focus(); + else focusableElements[focusedIndex - 1].focus(); + } else { + if (focusedIndex === -1 || focusedIndex === focusableElements.length - 1) focusableElements[0].focus(); + else focusableElements[focusedIndex + 1].focus(); } } } } } } - } + }; const onDragStart = (event) => { if (DomHandler.hasClass(event.target, 'p-dialog-header-icon') || DomHandler.hasClass(event.target.parentElement, 'p-dialog-header-icon')) { @@ -126,7 +118,7 @@ export const Dialog = React.forwardRef((props, ref) => { props.onDragStart && props.onDragStart(event); } - } + }; const onDrag = (event) => { if (dragging.current) { @@ -142,17 +134,16 @@ export const Dialog = React.forwardRef((props, ref) => { dialogRef.current.style.position = 'fixed'; if (props.keepInViewport) { - if (leftPos >= props.minX && (leftPos + width) < viewport.width) { + if (leftPos >= props.minX && leftPos + width < viewport.width) { lastPageX.current = event.pageX; dialogRef.current.style.left = leftPos + 'px'; } - if (topPos >= props.minY && (topPos + height) < viewport.height) { + if (topPos >= props.minY && topPos + height < viewport.height) { lastPageY.current = event.pageY; dialogRef.current.style.top = topPos + 'px'; } - } - else { + } else { lastPageX.current = event.pageX; dialogRef.current.style.left = leftPos + 'px'; lastPageY.current = event.pageY; @@ -161,7 +152,7 @@ export const Dialog = React.forwardRef((props, ref) => { props.onDrag && props.onDrag(event); } - } + }; const onDragEnd = (event) => { if (dragging.current) { @@ -170,7 +161,7 @@ export const Dialog = React.forwardRef((props, ref) => { props.onDragEnd && props.onDragEnd(event); } - } + }; const onResizeStart = (event) => { if (props.resizable) { @@ -181,7 +172,7 @@ export const Dialog = React.forwardRef((props, ref) => { props.onResizeStart && props.onResizeStart(event); } - } + }; const convertToPx = (value, property, viewport) => { !viewport && (viewport = DomHandler.getViewport()); @@ -192,7 +183,7 @@ export const Dialog = React.forwardRef((props, ref) => { } return val; - } + }; const onResize = (event) => { if (resizing.current) { @@ -214,11 +205,11 @@ export const Dialog = React.forwardRef((props, ref) => { newHeight += deltaY; } - if ((!minWidth || newWidth > minWidth) && (offset.left + newWidth) < viewport.width) { + if ((!minWidth || newWidth > minWidth) && offset.left + newWidth < viewport.width) { dialogRef.current.style.width = newWidth + 'px'; } - if ((!minHeight || newHeight > minHeight) && (offset.top + newHeight) < viewport.height) { + if ((!minHeight || newHeight > minHeight) && offset.top + newHeight < viewport.height) { dialogRef.current.style.height = newHeight + 'px'; } @@ -227,7 +218,7 @@ export const Dialog = React.forwardRef((props, ref) => { props.onResize && props.onResize(event); } - } + }; const onResizeEnd = (event) => { if (resizing.current) { @@ -236,25 +227,25 @@ export const Dialog = React.forwardRef((props, ref) => { props.onResizeEnd && props.onResizeEnd(event); } - } + }; const resetPosition = () => { dialogRef.current.style.position = ''; dialogRef.current.style.left = ''; dialogRef.current.style.top = ''; dialogRef.current.style.margin = ''; - } + }; const getPositionClass = () => { const positions = ['center', 'left', 'right', 'top', 'top-left', 'top-right', 'bottom', 'bottom-left', 'bottom-right']; - const pos = positions.find(item => item === props.position || item.replace('-', '') === props.position); + const pos = positions.find((item) => item === props.position || item.replace('-', '') === props.position); return pos ? `p-dialog-${pos}` : ''; - } + }; const onEnter = () => { dialogRef.current.setAttribute(attributeSelector.current, ''); - } + }; const onEntered = () => { props.onShow && props.onShow(); @@ -264,20 +255,20 @@ export const Dialog = React.forwardRef((props, ref) => { } enableDocumentSettings(); - } + }; const onExiting = () => { if (props.modal) { DomHandler.addClass(maskRef.current, 'p-component-overlay-leave'); } - } + }; const onExited = () => { dragging.current = false; ZIndexUtils.clear(maskRef.current); setMaskVisibleState(false); disableDocumentSettings(); - } + }; const enableDocumentSettings = () => { bindGlobalListeners(); @@ -285,21 +276,20 @@ export const Dialog = React.forwardRef((props, ref) => { if (props.blockScroll || (props.maximizable && maximized)) { DomHandler.addClass(document.body, 'p-overflow-hidden'); } - } + }; const disableDocumentSettings = () => { unbindGlobalListeners(); if (props.modal) { - let hasBlockScroll = document.primeDialogParams && document.primeDialogParams.some(param => param.hasBlockScroll); + let hasBlockScroll = document.primeDialogParams && document.primeDialogParams.some((param) => param.hasBlockScroll); if (hasBlockScroll) { DomHandler.removeClass(document.body, 'p-overflow-hidden'); } - } - else if (props.blockScroll || (props.maximizable && maximized)) { + } else if (props.blockScroll || (props.maximizable && maximized)) { DomHandler.removeClass(document.body, 'p-overflow-hidden'); } - } + }; const bindGlobalListeners = () => { if (props.draggable) { @@ -318,7 +308,7 @@ export const Dialog = React.forwardRef((props, ref) => { const newParam = { id: idState, hasBlockScroll: props.blockScroll }; document.primeDialogParams = document.primeDialogParams ? [...document.primeDialogParams, newParam] : [newParam]; } - } + }; const unbindGlobalListeners = () => { unbindDocumentDragListener(); @@ -327,8 +317,8 @@ export const Dialog = React.forwardRef((props, ref) => { unbindDocumentResizEndListener(); unbindDocumentKeyDownListener(); - document.primeDialogParams = document.primeDialogParams && document.primeDialogParams.filter(param => param.id !== idState); - } + document.primeDialogParams = document.primeDialogParams && document.primeDialogParams.filter((param) => param.id !== idState); + }; const createStyle = () => { if (!styleElement.current) { @@ -342,19 +332,19 @@ export const Dialog = React.forwardRef((props, ref) => { width: ${props.breakpoints[breakpoint]} !important; } } - ` + `; } styleElement.current.innerHTML = innerHTML; } - } + }; const changeScrollOnMaximizable = () => { if (!props.blockScroll) { let funcName = maximized ? 'addClass' : 'removeClass'; DomHandler[funcName](document.body, 'p-overflow-hidden'); } - } + }; useMountEffect(() => { if (!idState) { @@ -417,11 +407,11 @@ export const Dialog = React.forwardRef((props, ref) => { - ) + ); } return null; - } + }; const createMaximizeIcon = () => { const iconClassName = classNames('p-dialog-header-maximize-icon pi', { @@ -435,11 +425,11 @@ export const Dialog = React.forwardRef((props, ref) => { - ) + ); } return null; - } + }; const createHeader = () => { if (props.showHeader) { @@ -452,18 +442,20 @@ export const Dialog = React.forwardRef((props, ref) => { return (
    -
    {header}
    +
    + {header} +
    {icons} {maximizeIcon} {closeIcon}
    - ) + ); } return null; - } + }; const createContent = () => { const className = classNames('p-dialog-content', props.contentClassName); @@ -473,22 +465,28 @@ export const Dialog = React.forwardRef((props, ref) => {
    {props.children}
    - ) - } + ); + }; const createFooter = () => { const footer = ObjectUtils.getJSXElement(props.footer, props); - return footer &&
    {footer}
    - } + return ( + footer && ( +
    + {footer} +
    + ) + ); + }; const createResizer = () => { if (props.resizable) { - return + return ; } return null; - } + }; const createElement = () => { const otherProps = ObjectUtils.findDiffKeys(props, Dialog.defaultProps); @@ -496,12 +494,17 @@ export const Dialog = React.forwardRef((props, ref) => { 'p-dialog-rtl': props.rtl, 'p-dialog-maximized': maximized }); - const maskClassName = classNames('p-dialog-mask', getPositionClass(), { - 'p-component-overlay p-component-overlay-enter': props.modal, - 'p-dialog-visible': maskVisibleState, - 'p-dialog-draggable': props.draggable, - 'p-dialog-resizable': props.resizable, - }, props.maskClassName); + const maskClassName = classNames( + 'p-dialog-mask', + getPositionClass(), + { + 'p-component-overlay p-component-overlay-enter': props.modal, + 'p-dialog-visible': maskVisibleState, + 'p-dialog-draggable': props.draggable, + 'p-dialog-resizable': props.resizable + }, + props.maskClassName + ); const header = createHeader(); const content = createContent(); const footer = createFooter(); @@ -516,10 +519,8 @@ export const Dialog = React.forwardRef((props, ref) => { return (
    - - - ) - } + ); + }; const createDialog = () => { const element = createElement(); - return - } + return ; + }; return maskVisibleState && createDialog(); }); @@ -587,4 +588,4 @@ Dialog.defaultProps = { onResizeEnd: null, onClick: null, onMaskClick: null -} +}; diff --git a/components/lib/divider/Divider.js b/components/lib/divider/Divider.js index 098a0009e6..ccae4d338d 100644 --- a/components/lib/divider/Divider.js +++ b/components/lib/divider/Divider.js @@ -6,13 +6,17 @@ export const Divider = React.forwardRef((props, ref) => { const horizontal = props.layout === 'horizontal'; const vertical = props.layout === 'vertical'; const otherProps = ObjectUtils.findDiffKeys(props, Divider.defaultProps); - const className = classNames(`p-divider p-component p-divider-${props.layout} p-divider-${props.type}`, { - 'p-divider-left': horizontal && (!props.align || props.align === 'left'), - 'p-divider-right': horizontal && props.align === 'right', - 'p-divider-center': (horizontal && props.align === 'center') || (vertical && (!props.align || props.align === 'center')), - 'p-divider-top': vertical && props.align === 'top', - 'p-divider-bottom': vertical && props.align === 'bottom', - }, props.className); + const className = classNames( + `p-divider p-component p-divider-${props.layout} p-divider-${props.type}`, + { + 'p-divider-left': horizontal && (!props.align || props.align === 'left'), + 'p-divider-right': horizontal && props.align === 'right', + 'p-divider-center': (horizontal && props.align === 'center') || (vertical && (!props.align || props.align === 'center')), + 'p-divider-top': vertical && props.align === 'top', + 'p-divider-bottom': vertical && props.align === 'bottom' + }, + props.className + ); React.useImperativeHandle(ref, () => ({ props, @@ -21,11 +25,9 @@ export const Divider = React.forwardRef((props, ref) => { return (
    -
    - {props.children} -
    +
    {props.children}
    - ) + ); }); Divider.displayName = 'Divider'; @@ -36,4 +38,4 @@ Divider.defaultProps = { type: 'solid', style: null, className: null -} +}; diff --git a/components/lib/divider/divider.d.ts b/components/lib/divider/divider.d.ts index 28afe527d2..dca19b47b4 100644 --- a/components/lib/divider/divider.d.ts +++ b/components/lib/divider/divider.d.ts @@ -13,6 +13,6 @@ export interface DividerProps extends Omit { +export declare class Divider extends React.Component { public getElement(): HTMLDivElement; } diff --git a/components/lib/dock/Dock.js b/components/lib/dock/Dock.js index ccc9e7b207..ad514c289a 100644 --- a/components/lib/dock/Dock.js +++ b/components/lib/dock/Dock.js @@ -2,129 +2,127 @@ import * as React from 'react'; import { Ripple } from '../ripple/Ripple'; import { classNames, IconUtils, ObjectUtils } from '../utils/Utils'; -export const Dock = React.memo(React.forwardRef((props, ref) => { - const [currentIndexState, setCurrentIndexState] = React.useState(-3); - const elementRef = React.useRef(null); - - const onListMouseLeave = () => { - setCurrentIndexState(-3); - } - - const onItemMouseEnter = (index) => { - setCurrentIndexState(index); - } - - const onItemClick = (e, item) => { - if (item.command) { - item.command({ originalEvent: e, item }); - } - - e.preventDefault(); - } - - const createItem = (item, index) => { - const { disabled, icon: _icon, label, template, url, target } = item; - const className = classNames('p-dock-item', { - 'p-dock-item-second-prev': (currentIndexState - 2) === index, - 'p-dock-item-prev': (currentIndexState - 1) === index, - 'p-dock-item-current': currentIndexState === index, - 'p-dock-item-next': (currentIndexState + 1) === index, - 'p-dock-item-second-next': (currentIndexState + 2) === index - }); - const contentClassName = classNames('p-dock-action', { 'p-disabled': disabled }); - const iconClassName = classNames('p-dock-action-icon', _icon); - const icon = IconUtils.getJSXIcon(_icon, { className: 'p-dock-action-icon' }, { props }); - - let content = ( - onItemClick(e, item)}> - {icon} - - - ); +export const Dock = React.memo( + React.forwardRef((props, ref) => { + const [currentIndexState, setCurrentIndexState] = React.useState(-3); + const elementRef = React.useRef(null); + + const onListMouseLeave = () => { + setCurrentIndexState(-3); + }; + + const onItemMouseEnter = (index) => { + setCurrentIndexState(index); + }; + + const onItemClick = (e, item) => { + if (item.command) { + item.command({ originalEvent: e, item }); + } + + e.preventDefault(); + }; + + const createItem = (item, index) => { + const { disabled, icon: _icon, label, template, url, target } = item; + const className = classNames('p-dock-item', { + 'p-dock-item-second-prev': currentIndexState - 2 === index, + 'p-dock-item-prev': currentIndexState - 1 === index, + 'p-dock-item-current': currentIndexState === index, + 'p-dock-item-next': currentIndexState + 1 === index, + 'p-dock-item-second-next': currentIndexState + 2 === index + }); + const contentClassName = classNames('p-dock-action', { 'p-disabled': disabled }); + const iconClassName = classNames('p-dock-action-icon', _icon); + const icon = IconUtils.getJSXIcon(_icon, { className: 'p-dock-action-icon' }, { props }); + + let content = ( + onItemClick(e, item)}> + {icon} + + + ); + + if (template) { + const defaultContentOptions = { + onClick: (e) => onItemClick(e, item), + className: contentClassName, + iconClassName, + element: content, + props, + index + }; + + content = ObjectUtils.getJSXElement(template, item, defaultContentOptions); + } - if (template) { - const defaultContentOptions = { - onClick: (e) => onItemClick(e, item), - className: contentClassName, - iconClassName, - element: content, - props, - index - }; + return ( +
  • onItemMouseEnter(index)}> + {content} +
  • + ); + }; - content = ObjectUtils.getJSXElement(template, item, defaultContentOptions); - } + const createItems = () => { + return props.model ? props.model.map(createItem) : null; + }; - return ( -
  • onItemMouseEnter(index)}> - {content} -
  • - ) - } - - const createItems = () => { - return props.model ? props.model.map(createItem) : null; - } - - const createHeader = () => { - if (props.header) { - const header = ObjectUtils.getJSXElement(props.header, { props }); - return ( -
    - {header} -
    - ) - } + const createHeader = () => { + if (props.header) { + const header = ObjectUtils.getJSXElement(props.header, { props }); + return
    {header}
    ; + } - return null; - } + return null; + }; - const createList = () => { - const items = createItems(); + const createList = () => { + const items = createItems(); - return ( -
      - {items} -
    - ) - } - - const createFooter = () => { - if (props.footer) { - const footer = ObjectUtils.getJSXElement(props.footer, { props }); return ( -
    +
      + {items} +
    + ); + }; + + const createFooter = () => { + if (props.footer) { + const footer = ObjectUtils.getJSXElement(props.footer, { props }); + return
    {footer}
    ; + } + + return null; + }; + + React.useImperativeHandle(ref, () => ({ + props, + getElement: () => elementRef.current + })); + + const otherProps = ObjectUtils.findDiffKeys(props, Dock.defaultProps); + const className = classNames( + `p-dock p-component p-dock-${props.position}`, + { + 'p-dock-magnification': props.magnification + }, + props.className + ); + const header = createHeader(); + const list = createList(); + const footer = createFooter(); + + return ( +
    +
    + {header} + {list} {footer}
    - ) - } - - return null; - } - - React.useImperativeHandle(ref, () => ({ - props, - getElement: () => elementRef.current - })); - - const otherProps = ObjectUtils.findDiffKeys(props, Dock.defaultProps); - const className = classNames(`p-dock p-component p-dock-${props.position}`, { - 'p-dock-magnification': props.magnification - }, props.className); - const header = createHeader(); - const list = createList(); - const footer = createFooter(); - - return ( -
    -
    - {header} - {list} - {footer}
    -
    - ) -})); + ); + }) +); Dock.displayName = 'Dock'; Dock.defaultProps = { @@ -137,4 +135,4 @@ Dock.defaultProps = { magnification: true, header: null, footer: null -} +}; diff --git a/components/lib/dock/dock.d.ts b/components/lib/dock/dock.d.ts index c616a39649..db879c5f75 100644 --- a/components/lib/dock/dock.d.ts +++ b/components/lib/dock/dock.d.ts @@ -22,6 +22,6 @@ export interface DockProps extends Omit { +export declare class Dock extends React.Component { public getElement(): HTMLDivElement; } diff --git a/components/lib/dropdown/Dropdown.js b/components/lib/dropdown/Dropdown.js index b625b468b2..21aa3f6c8e 100644 --- a/components/lib/dropdown/Dropdown.js +++ b/components/lib/dropdown/Dropdown.js @@ -6,723 +6,764 @@ import { Tooltip } from '../tooltip/Tooltip'; import { classNames, DomHandler, ObjectUtils, ZIndexUtils } from '../utils/Utils'; import { DropdownPanel } from './DropdownPanel'; -export const Dropdown = React.memo(React.forwardRef((props, ref) => { - const [filterState, setFilterState] = React.useState(''); - const [focusedState, setFocusedState] = React.useState(false); - const [overlayVisibleState, setOverlayVisibleState] = React.useState(false); - const elementRef = React.useRef(null); - const overlayRef = React.useRef(null); - const inputRef = React.useRef(props.inputRef); - const focusInputRef = React.useRef(null); - const searchTimeout = React.useRef(null); - const searchValue = React.useRef(null); - const currentSearchChar = React.useRef(null); - const isLazy = props.virtualScrollerOptions && props.virtualScrollerOptions.lazy; - const hasFilter = ObjectUtils.isNotEmpty(filterState); - const appendTo = props.appendTo || PrimeReact.appendTo; - - const [bindOverlayListener, unbindOverlayListener] = useOverlayListener({ - target: elementRef, overlay: overlayRef, listener: (event, { type, valid }) => { - if (valid) { - (type === 'outside') ? !isClearClicked(event) && hide() : hide(); - } - }, when: overlayVisibleState - }); - - const getVisibleOptions = () => { - if (hasFilter && !isLazy) { - const filterValue = filterState.trim().toLocaleLowerCase(props.filterLocale) - const searchFields = props.filterBy ? props.filterBy.split(',') : [props.optionLabel || 'label']; +export const Dropdown = React.memo( + React.forwardRef((props, ref) => { + const [filterState, setFilterState] = React.useState(''); + const [focusedState, setFocusedState] = React.useState(false); + const [overlayVisibleState, setOverlayVisibleState] = React.useState(false); + const elementRef = React.useRef(null); + const overlayRef = React.useRef(null); + const inputRef = React.useRef(props.inputRef); + const focusInputRef = React.useRef(null); + const searchTimeout = React.useRef(null); + const searchValue = React.useRef(null); + const currentSearchChar = React.useRef(null); + const isLazy = props.virtualScrollerOptions && props.virtualScrollerOptions.lazy; + const hasFilter = ObjectUtils.isNotEmpty(filterState); + const appendTo = props.appendTo || PrimeReact.appendTo; + + const [bindOverlayListener, unbindOverlayListener] = useOverlayListener({ + target: elementRef, + overlay: overlayRef, + listener: (event, { type, valid }) => { + if (valid) { + type === 'outside' ? !isClearClicked(event) && hide() : hide(); + } + }, + when: overlayVisibleState + }); - if (props.optionGroupLabel) { - let filteredGroups = []; - for (let optgroup of props.options) { - let filteredSubOptions = FilterService.filter(getOptionGroupChildren(optgroup), searchFields, filterValue, props.filterMatchMode, props.filterLocale); - if (filteredSubOptions && filteredSubOptions.length) { - filteredGroups.push({ ...optgroup, ...{ items: filteredSubOptions } }); + const getVisibleOptions = () => { + if (hasFilter && !isLazy) { + const filterValue = filterState.trim().toLocaleLowerCase(props.filterLocale); + const searchFields = props.filterBy ? props.filterBy.split(',') : [props.optionLabel || 'label']; + + if (props.optionGroupLabel) { + let filteredGroups = []; + for (let optgroup of props.options) { + let filteredSubOptions = FilterService.filter(getOptionGroupChildren(optgroup), searchFields, filterValue, props.filterMatchMode, props.filterLocale); + if (filteredSubOptions && filteredSubOptions.length) { + filteredGroups.push({ ...optgroup, ...{ items: filteredSubOptions } }); + } } + return filteredGroups; + } else { + return FilterService.filter(props.options, searchFields, filterValue, props.filterMatchMode, props.filterLocale); } - return filteredGroups; - } - else { - return FilterService.filter(props.options, searchFields, filterValue, props.filterMatchMode, props.filterLocale); - } - } - else { - return props.options; - } - } - - const isClearClicked = (event) => { - return DomHandler.hasClass(event.target, 'p-dropdown-clear-icon') || DomHandler.hasClass(event.target, 'p-dropdown-filter-clear-icon'); - } - - const onClick = (event) => { - if (props.disabled) { - return; - } - - if (DomHandler.hasClass(event.target, 'p-dropdown-clear-icon') || event.target.tagName === 'INPUT') { - return; - } - else if (!overlayRef.current || !(overlayRef.current && overlayRef.current.contains(event.target))) { - DomHandler.focus(focusInputRef.current); - overlayVisibleState ? hide() : show(); - } - } - - const onInputFocus = (event) => { - if (props.showOnFocus && !overlayVisibleState) { - show(); - } - - setFocusedState(true); - props.onFocus && props.onFocus(event); - } - - const onInputBlur = (event) => { - setFocusedState(false); - - if (props.onBlur) { - setTimeout(() => { - props.onBlur({ - originalEvent: event.originalEvent, - value: inputRef.current.value, - stopPropagation: () => { }, - preventDefault: () => { }, - target: { - name: props.name, - id: props.id, - value: inputRef.current.value, - } - }); - }, 200); - } - } - - const onPanelClick = (event) => { - OverlayService.emit('overlay-click', { - originalEvent: event, - target: elementRef.current - }); - } - - const onInputKeyDown = (event) => { - switch (event.which) { - //down - case 40: - onDownKey(event); - break; - - //up - case 38: - onUpKey(event); - break; - - //space and enter - case 32: - case 13: - overlayVisibleState ? hide() : show(); - event.preventDefault(); - break; - - //escape and tab - case 27: - case 9: - hide(); - break; - - default: - search(event); - break; - } - } - - const onFilterInputKeyDown = (event) => { - switch (event.which) { - //down - case 40: - onDownKey(event); - break; - - //up - case 38: - onUpKey(event); - break; - - //enter and escape - case 13: - case 27: - hide(); - event.preventDefault(); - break; - - default: - break; - } - } - - const onUpKey = (event) => { - if (visibleOptions) { - const prevOption = findPrevOption(getSelectedOptionIndex()); - - if (prevOption) { - selectItem({ - originalEvent: event, - option: prevOption - }); + } else { + return props.options; } - } + }; + + const isClearClicked = (event) => { + return DomHandler.hasClass(event.target, 'p-dropdown-clear-icon') || DomHandler.hasClass(event.target, 'p-dropdown-filter-clear-icon'); + }; - event.preventDefault(); - } + const onClick = (event) => { + if (props.disabled) { + return; + } + + if (DomHandler.hasClass(event.target, 'p-dropdown-clear-icon') || event.target.tagName === 'INPUT') { + return; + } else if (!overlayRef.current || !(overlayRef.current && overlayRef.current.contains(event.target))) { + DomHandler.focus(focusInputRef.current); + overlayVisibleState ? hide() : show(); + } + }; - const onDownKey = (event) => { - if (visibleOptions) { - if (!overlayVisibleState && event.altKey) { + const onInputFocus = (event) => { + if (props.showOnFocus && !overlayVisibleState) { show(); } - else { - const nextOption = findNextOption(getSelectedOptionIndex()); - if (nextOption) { + setFocusedState(true); + props.onFocus && props.onFocus(event); + }; + + const onInputBlur = (event) => { + setFocusedState(false); + + if (props.onBlur) { + setTimeout(() => { + props.onBlur({ + originalEvent: event.originalEvent, + value: inputRef.current.value, + stopPropagation: () => {}, + preventDefault: () => {}, + target: { + name: props.name, + id: props.id, + value: inputRef.current.value + } + }); + }, 200); + } + }; + + const onPanelClick = (event) => { + OverlayService.emit('overlay-click', { + originalEvent: event, + target: elementRef.current + }); + }; + + const onInputKeyDown = (event) => { + switch (event.which) { + //down + case 40: + onDownKey(event); + break; + + //up + case 38: + onUpKey(event); + break; + + //space and enter + case 32: + case 13: + overlayVisibleState ? hide() : show(); + event.preventDefault(); + break; + + //escape and tab + case 27: + case 9: + hide(); + break; + + default: + search(event); + break; + } + }; + + const onFilterInputKeyDown = (event) => { + switch (event.which) { + //down + case 40: + onDownKey(event); + break; + + //up + case 38: + onUpKey(event); + break; + + //enter and escape + case 13: + case 27: + hide(); + event.preventDefault(); + break; + + default: + break; + } + }; + + const onUpKey = (event) => { + if (visibleOptions) { + const prevOption = findPrevOption(getSelectedOptionIndex()); + + if (prevOption) { selectItem({ originalEvent: event, - option: nextOption + option: prevOption }); } } - } - event.preventDefault(); - } - - const findNextOption = (index) => { - if (props.optionGroupLabel) { - const groupIndex = index === -1 ? 0 : index.group; - const optionIndex = index === -1 ? -1 : index.option; - const option = findNextOptionInList(getOptionGroupChildren(visibleOptions[groupIndex]), optionIndex); + event.preventDefault(); + }; + + const onDownKey = (event) => { + if (visibleOptions) { + if (!overlayVisibleState && event.altKey) { + show(); + } else { + const nextOption = findNextOption(getSelectedOptionIndex()); + + if (nextOption) { + selectItem({ + originalEvent: event, + option: nextOption + }); + } + } + } - if (option) - return option; - else if ((groupIndex + 1) !== visibleOptions.length) - return findNextOption({ group: (groupIndex + 1), option: -1 }); - else - return null; - } + event.preventDefault(); + }; - return findNextOptionInList(visibleOptions, index); - } + const findNextOption = (index) => { + if (props.optionGroupLabel) { + const groupIndex = index === -1 ? 0 : index.group; + const optionIndex = index === -1 ? -1 : index.option; + const option = findNextOptionInList(getOptionGroupChildren(visibleOptions[groupIndex]), optionIndex); - const findNextOptionInList = (list, index) => { - const i = index + 1; - if (i === list.length) { - return null; - } + if (option) return option; + else if (groupIndex + 1 !== visibleOptions.length) return findNextOption({ group: groupIndex + 1, option: -1 }); + else return null; + } - const option = list[i]; - return isOptionDisabled(option) ? findNextOptionInList(i) : option; - } + return findNextOptionInList(visibleOptions, index); + }; - const findPrevOption = (index) => { - if (index === -1) { - return null; - } - - if (props.optionGroupLabel) { - const groupIndex = index.group; - const optionIndex = index.option; - const option = findPrevOptionInList(getOptionGroupChildren(visibleOptions[groupIndex]), optionIndex); - - if (option) - return option; - else if (groupIndex > 0) - return findPrevOption({ group: (groupIndex - 1), option: getOptionGroupChildren(visibleOptions[groupIndex - 1]).length }); - else + const findNextOptionInList = (list, index) => { + const i = index + 1; + if (i === list.length) { return null; - } + } - return findPrevOptionInList(visibleOptions, index); - } + const option = list[i]; + return isOptionDisabled(option) ? findNextOptionInList(i) : option; + }; - const findPrevOptionInList = (list, index) => { - const i = index - 1; - if (i < 0) { - return null; - } - - const option = list[i]; - return isOptionDisabled(option) ? findPrevOption(i) : option; - } - - const search = (event) => { - if (searchTimeout.current) { - clearTimeout(searchTimeout.current); - } - - const char = event.key; - if (char === 'Shift' || char === 'Control' || char === 'Alt') { - return; - } - - if (currentSearchChar.current === char) - searchValue.current = char; - else - searchValue.current = searchValue.current ? searchValue.current + char : char; - - currentSearchChar.current = char; - - if (searchValue.current) { - const searchIndex = getSelectedOptionIndex(); - const newOption = props.optionGroupLabel ? searchOptionInGroup(searchIndex) : searchOption(searchIndex + 1); - if (newOption) { - selectItem({ - originalEvent: event, - option: newOption - }); + const findPrevOption = (index) => { + if (index === -1) { + return null; } - } - searchTimeout.current = setTimeout(() => { - searchValue.current = null; - }, 250); - } + if (props.optionGroupLabel) { + const groupIndex = index.group; + const optionIndex = index.option; + const option = findPrevOptionInList(getOptionGroupChildren(visibleOptions[groupIndex]), optionIndex); - const searchOption = (index) => { - if (searchValue.current) { - return searchOptionInRange(index, visibleOptions.length) || searchOptionInRange(0, index); - } + if (option) return option; + else if (groupIndex > 0) return findPrevOption({ group: groupIndex - 1, option: getOptionGroupChildren(visibleOptions[groupIndex - 1]).length }); + else return null; + } - return null; - } + return findPrevOptionInList(visibleOptions, index); + }; - const searchOptionInRange = (start, end) => { - for (let i = start; i < end; i++) { - const opt = visibleOptions[i]; - if (matchesSearchValue(opt)) { - return opt; + const findPrevOptionInList = (list, index) => { + const i = index - 1; + if (i < 0) { + return null; } - } - return null; - } + const option = list[i]; + return isOptionDisabled(option) ? findPrevOption(i) : option; + }; - const searchOptionInGroup = (index) => { - const searchIndex = index === -1 ? { group: 0, option: -1 } : index; + const search = (event) => { + if (searchTimeout.current) { + clearTimeout(searchTimeout.current); + } - for (let i = searchIndex.group; i < visibleOptions.length; i++) { - let groupOptions = getOptionGroupChildren(visibleOptions[i]); - for (let j = (searchIndex.group === i ? searchIndex.option + 1 : 0); j < groupOptions.length; j++) { - if (matchesSearchValue(groupOptions[j])) { - return groupOptions[j]; - } + const char = event.key; + if (char === 'Shift' || char === 'Control' || char === 'Alt') { + return; } - } - for (let i = 0; i <= searchIndex.group; i++) { - let groupOptions = getOptionGroupChildren(visibleOptions[i]); - for (let j = 0; j < (searchIndex.group === i ? searchIndex.option : groupOptions.length); j++) { - if (matchesSearchValue(groupOptions[j])) { - return groupOptions[j]; + if (currentSearchChar.current === char) searchValue.current = char; + else searchValue.current = searchValue.current ? searchValue.current + char : char; + + currentSearchChar.current = char; + + if (searchValue.current) { + const searchIndex = getSelectedOptionIndex(); + const newOption = props.optionGroupLabel ? searchOptionInGroup(searchIndex) : searchOption(searchIndex + 1); + if (newOption) { + selectItem({ + originalEvent: event, + option: newOption + }); } } - } - - return null; - } - - const matchesSearchValue = (option) => { - let label = getOptionLabel(option); - if (!label) { - return false; - } - label = label.toLocaleLowerCase(props.filterLocale); - return label.startsWith(searchValue.current.toLocaleLowerCase(props.filterLocale)); - } - - const onEditableInputChange = (event) => { - if (props.onChange) { - props.onChange({ - originalEvent: event.originalEvent, - value: event.target.value, - stopPropagation: () => { }, - preventDefault: () => { }, - target: { - name: props.name, - id: props.id, - value: event.target.value, - } - }); - } - } - const onEditableInputFocus = (event) => { - setFocusedState(true); - hide(); - props.onFocus && props.onFocus(event); - } + searchTimeout.current = setTimeout(() => { + searchValue.current = null; + }, 250); + }; - const onOptionClick = (event) => { - const option = event.option; + const searchOption = (index) => { + if (searchValue.current) { + return searchOptionInRange(index, visibleOptions.length) || searchOptionInRange(0, index); + } - if (!option.disabled) { - selectItem(event); - DomHandler.focus(focusInputRef.current); - } + return null; + }; - hide(); - } + const searchOptionInRange = (start, end) => { + for (let i = start; i < end; i++) { + const opt = visibleOptions[i]; + if (matchesSearchValue(opt)) { + return opt; + } + } - const onFilterInputChange = (event) => { - const filter = event.target.value; + return null; + }; - setFilterState(filter); + const searchOptionInGroup = (index) => { + const searchIndex = index === -1 ? { group: 0, option: -1 } : index; - if (props.onFilter) { - props.onFilter({ - originalEvent: event, - filter - }); - } - } - - const onFilterClearIconClick = (callback) => { - resetFilter(callback); - } - - const resetFilter = (callback) => { - setFilterState(''); - props.onFilter && props.onFilter({ filter: '' }); - callback && callback(); - } - - const clear = (event) => { - if (props.onChange) { - props.onChange({ - originalEvent: event, - value: undefined, - stopPropagation: () => { }, - preventDefault: () => { }, - target: { - name: props.name, - id: props.id, - value: undefined + for (let i = searchIndex.group; i < visibleOptions.length; i++) { + let groupOptions = getOptionGroupChildren(visibleOptions[i]); + for (let j = searchIndex.group === i ? searchIndex.option + 1 : 0; j < groupOptions.length; j++) { + if (matchesSearchValue(groupOptions[j])) { + return groupOptions[j]; + } } - }); - } + } + + for (let i = 0; i <= searchIndex.group; i++) { + let groupOptions = getOptionGroupChildren(visibleOptions[i]); + for (let j = 0; j < (searchIndex.group === i ? searchIndex.option : groupOptions.length); j++) { + if (matchesSearchValue(groupOptions[j])) { + return groupOptions[j]; + } + } + } - updateEditableLabel(); - } + return null; + }; - const selectItem = (event) => { - if (selectedOption !== event.option) { - updateEditableLabel(event.option); - const optionValue = getOptionValue(event.option); + const matchesSearchValue = (option) => { + let label = getOptionLabel(option); + if (!label) { + return false; + } + label = label.toLocaleLowerCase(props.filterLocale); + return label.startsWith(searchValue.current.toLocaleLowerCase(props.filterLocale)); + }; + const onEditableInputChange = (event) => { if (props.onChange) { props.onChange({ originalEvent: event.originalEvent, - value: optionValue, - stopPropagation: () => { }, - preventDefault: () => { }, + value: event.target.value, + stopPropagation: () => {}, + preventDefault: () => {}, target: { name: props.name, id: props.id, - value: optionValue + value: event.target.value } }); } - } - } + }; - const getSelectedOptionIndex = (options) => { - options = options || visibleOptions; + const onEditableInputFocus = (event) => { + setFocusedState(true); + hide(); + props.onFocus && props.onFocus(event); + }; - if (props.value != null && options) { - if (props.optionGroupLabel) { - for (let i = 0; i < options.length; i++) { - let selectedOptionIndex = findOptionIndexInList(props.value, getOptionGroupChildren(options[i])); - if (selectedOptionIndex !== -1) { - return { group: i, option: selectedOptionIndex }; + const onOptionClick = (event) => { + const option = event.option; + + if (!option.disabled) { + selectItem(event); + DomHandler.focus(focusInputRef.current); + } + + hide(); + }; + + const onFilterInputChange = (event) => { + const filter = event.target.value; + + setFilterState(filter); + + if (props.onFilter) { + props.onFilter({ + originalEvent: event, + filter + }); + } + }; + + const onFilterClearIconClick = (callback) => { + resetFilter(callback); + }; + + const resetFilter = (callback) => { + setFilterState(''); + props.onFilter && props.onFilter({ filter: '' }); + callback && callback(); + }; + + const clear = (event) => { + if (props.onChange) { + props.onChange({ + originalEvent: event, + value: undefined, + stopPropagation: () => {}, + preventDefault: () => {}, + target: { + name: props.name, + id: props.id, + value: undefined } + }); + } + + updateEditableLabel(); + }; + + const selectItem = (event) => { + if (selectedOption !== event.option) { + updateEditableLabel(event.option); + const optionValue = getOptionValue(event.option); + + if (props.onChange) { + props.onChange({ + originalEvent: event.originalEvent, + value: optionValue, + stopPropagation: () => {}, + preventDefault: () => {}, + target: { + name: props.name, + id: props.id, + value: optionValue + } + }); } } - else { - return findOptionIndexInList(props.value, options); + }; + + const getSelectedOptionIndex = (options) => { + options = options || visibleOptions; + + if (props.value != null && options) { + if (props.optionGroupLabel) { + for (let i = 0; i < options.length; i++) { + let selectedOptionIndex = findOptionIndexInList(props.value, getOptionGroupChildren(options[i])); + if (selectedOptionIndex !== -1) { + return { group: i, option: selectedOptionIndex }; + } + } + } else { + return findOptionIndexInList(props.value, options); + } } - } - return -1; - } + return -1; + }; + + const equalityKey = () => { + return props.optionValue ? null : props.dataKey; + }; + + const findOptionIndexInList = (value, list) => { + const key = equalityKey(); + return list.findIndex((item) => ObjectUtils.equals(value, getOptionValue(item), key)); + }; - const equalityKey = () => { - return props.optionValue ? null : props.dataKey; - } - - const findOptionIndexInList = (value, list) => { - const key = equalityKey(); - return list.findIndex(item => ObjectUtils.equals(value, getOptionValue(item), key)); - } + const isSelected = (option) => { + return ObjectUtils.equals(props.value, getOptionValue(option), equalityKey()); + }; - const isSelected = (option) => { - return ObjectUtils.equals(props.value, getOptionValue(option), equalityKey()); - } + const show = () => { + setOverlayVisibleState(true); + }; - const show = () => { - setOverlayVisibleState(true); - } - - const hide = () => { - setOverlayVisibleState(false); - } - - const onOverlayEnter = (callback) => { - ZIndexUtils.set('overlay', overlayRef.current, PrimeReact.autoZIndex, PrimeReact.zIndex['overlay']); - alignOverlay(); - callback && callback(); - } - - const onOverlayEntered = (callback) => { - callback && callback(); - bindOverlayListener(); - - props.onShow && props.onShow(); - } - - const onOverlayExit = () => { - unbindOverlayListener(); - } - - const onOverlayExited = () => { - if (props.filter && props.resetFilterOnHide) { - resetFilter(); - } - - ZIndexUtils.clear(overlayRef.current); - - props.onHide && props.onHide(); - } - - const alignOverlay = () => { - DomHandler.alignOverlay(overlayRef.current, inputRef.current.parentElement, props.appendTo || PrimeReact.appendTo); - } - - const scrollInView = () => { - const highlightItem = DomHandler.findSingle(overlayRef.current, 'li.p-highlight'); - if (highlightItem && highlightItem.scrollIntoView) { - highlightItem.scrollIntoView({ block: 'nearest', inline: 'nearest' }); - } - } - - const updateEditableLabel = (option) => { - if (inputRef.current) { - inputRef.current.value = (option ? getOptionLabel(option) : props.value || ''); - } - } - - const getOptionLabel = (option) => { - return props.optionLabel ? ObjectUtils.resolveFieldData(option, props.optionLabel) : (option && option['label'] !== undefined ? option['label'] : option); - } - - const getOptionValue = (option) => { - return props.optionValue ? ObjectUtils.resolveFieldData(option, props.optionValue) : (option && option['value'] !== undefined ? option['value'] : option); - } - - const getOptionRenderKey = (option) => { - return props.dataKey ? ObjectUtils.resolveFieldData(option, props.dataKey) : getOptionLabel(option); - } - - const isOptionDisabled = (option) => { - if (props.optionDisabled) { - return ObjectUtils.isFunction(props.optionDisabled) ? props.optionDisabled(option) : ObjectUtils.resolveFieldData(option, props.optionDisabled); - } - - return (option && option['disabled'] !== undefined ? option['disabled'] : false); - } - - const getOptionGroupRenderKey = (optionGroup) => { - return ObjectUtils.resolveFieldData(optionGroup, props.optionGroupLabel); - } - - const getOptionGroupLabel = (optionGroup) => { - return ObjectUtils.resolveFieldData(optionGroup, props.optionGroupLabel); - } - - const getOptionGroupChildren = (optionGroup) => { - return ObjectUtils.resolveFieldData(optionGroup, props.optionGroupChildren); - } - - const updateInputField = () => { - if (props.editable && inputRef.current) { - const label = selectedOption ? getOptionLabel(selectedOption) : null; - const value = label || props.value || ''; - inputRef.current.value = value; - } - } - - const getSelectedOption = () => { - const index = getSelectedOptionIndex(props.options); - - return index !== -1 ? (props.optionGroupLabel ? getOptionGroupChildren(props.options[index.group])[index.option] : props.options[index]) : null; - } - - React.useImperativeHandle(ref, () => ({ - props, - show, - hide, - getElement: () => elementRef.current, - getOverlay: () => overlayRef.current, - getInput: () => inputRef.current, - getFocusInput: () => focusInputRef.current - })); - - React.useEffect(() => { - ObjectUtils.combinedRefs(inputRef, props.inputRef); - }, [inputRef, props.inputRef]); - - useMountEffect(() => { - if (props.autoFocus) { - DomHandler.focus(focusInputRef.current, props.autoFocus); - } - }); - - useUpdateEffect(() => { - if (overlayVisibleState && props.value) { - scrollInView(); - } - }, [overlayVisibleState, props.value]); - - useUpdateEffect(() => { - if (overlayVisibleState && props.filter) { + const hide = () => { + setOverlayVisibleState(false); + }; + + const onOverlayEnter = (callback) => { + ZIndexUtils.set('overlay', overlayRef.current, PrimeReact.autoZIndex, PrimeReact.zIndex['overlay']); alignOverlay(); - } - }, [overlayVisibleState, props.filter]); + callback && callback(); + }; - useUpdateEffect(() => { - if (filterState && (!props.options || props.options.length === 0)) { - setFilterState(''); - } + const onOverlayEntered = (callback) => { + callback && callback(); + bindOverlayListener(); + + props.onShow && props.onShow(); + }; + + const onOverlayExit = () => { + unbindOverlayListener(); + }; + + const onOverlayExited = () => { + if (props.filter && props.resetFilterOnHide) { + resetFilter(); + } - updateInputField(); - if (inputRef.current) { - inputRef.current.selectedIndex = 1; - } - }); + ZIndexUtils.clear(overlayRef.current); - useUnmountEffect(() => { - ZIndexUtils.clear(overlayRef.current); - }); + props.onHide && props.onHide(); + }; - const createHiddenSelect = () => { - let option = { value: '', label: props.placeholder }; + const alignOverlay = () => { + DomHandler.alignOverlay(overlayRef.current, inputRef.current.parentElement, props.appendTo || PrimeReact.appendTo); + }; - if (selectedOption) { - const optionValue = getOptionValue(selectedOption); - option = { - value: typeof optionValue === 'object' ? props.options.findIndex(o => o === optionValue) : optionValue, - label: getOptionLabel(selectedOption) + const scrollInView = () => { + const highlightItem = DomHandler.findSingle(overlayRef.current, 'li.p-highlight'); + if (highlightItem && highlightItem.scrollIntoView) { + highlightItem.scrollIntoView({ block: 'nearest', inline: 'nearest' }); } - } + }; - return ( -
    - -
    - ) - } - - const createKeyboardHelper = () => { - return ( -
    - -
    - ) - } + const updateEditableLabel = (option) => { + if (inputRef.current) { + inputRef.current.value = option ? getOptionLabel(option) : props.value || ''; + } + }; + + const getOptionLabel = (option) => { + return props.optionLabel ? ObjectUtils.resolveFieldData(option, props.optionLabel) : option && option['label'] !== undefined ? option['label'] : option; + }; + + const getOptionValue = (option) => { + return props.optionValue ? ObjectUtils.resolveFieldData(option, props.optionValue) : option && option['value'] !== undefined ? option['value'] : option; + }; + + const getOptionRenderKey = (option) => { + return props.dataKey ? ObjectUtils.resolveFieldData(option, props.dataKey) : getOptionLabel(option); + }; + + const isOptionDisabled = (option) => { + if (props.optionDisabled) { + return ObjectUtils.isFunction(props.optionDisabled) ? props.optionDisabled(option) : ObjectUtils.resolveFieldData(option, props.optionDisabled); + } + + return option && option['disabled'] !== undefined ? option['disabled'] : false; + }; + + const getOptionGroupRenderKey = (optionGroup) => { + return ObjectUtils.resolveFieldData(optionGroup, props.optionGroupLabel); + }; + + const getOptionGroupLabel = (optionGroup) => { + return ObjectUtils.resolveFieldData(optionGroup, props.optionGroupLabel); + }; + + const getOptionGroupChildren = (optionGroup) => { + return ObjectUtils.resolveFieldData(optionGroup, props.optionGroupChildren); + }; + + const updateInputField = () => { + if (props.editable && inputRef.current) { + const label = selectedOption ? getOptionLabel(selectedOption) : null; + const value = label || props.value || ''; + inputRef.current.value = value; + } + }; + + const getSelectedOption = () => { + const index = getSelectedOptionIndex(props.options); + + return index !== -1 ? (props.optionGroupLabel ? getOptionGroupChildren(props.options[index.group])[index.option] : props.options[index]) : null; + }; + + React.useImperativeHandle(ref, () => ({ + props, + show, + hide, + getElement: () => elementRef.current, + getOverlay: () => overlayRef.current, + getInput: () => inputRef.current, + getFocusInput: () => focusInputRef.current + })); + + React.useEffect(() => { + ObjectUtils.combinedRefs(inputRef, props.inputRef); + }, [inputRef, props.inputRef]); + + useMountEffect(() => { + if (props.autoFocus) { + DomHandler.focus(focusInputRef.current, props.autoFocus); + } + }); + + useUpdateEffect(() => { + if (overlayVisibleState && props.value) { + scrollInView(); + } + }, [overlayVisibleState, props.value]); - const createLabel = () => { - const label = ObjectUtils.isNotEmpty(selectedOption) ? getOptionLabel(selectedOption) : null; + useUpdateEffect(() => { + if (overlayVisibleState && props.filter) { + alignOverlay(); + } + }, [overlayVisibleState, props.filter]); + + useUpdateEffect(() => { + if (filterState && (!props.options || props.options.length === 0)) { + setFilterState(''); + } + + updateInputField(); + if (inputRef.current) { + inputRef.current.selectedIndex = 1; + } + }); + + useUnmountEffect(() => { + ZIndexUtils.clear(overlayRef.current); + }); + + const createHiddenSelect = () => { + let option = { value: '', label: props.placeholder }; - if (props.editable) { - const value = label || props.value || ''; + if (selectedOption) { + const optionValue = getOptionValue(selectedOption); + option = { + value: typeof optionValue === 'object' ? props.options.findIndex((o) => o === optionValue) : optionValue, + label: getOptionLabel(selectedOption) + }; + } return ( - - ) - } - else { - const className = classNames('p-dropdown-label p-inputtext', { - 'p-placeholder': label === null && props.placeholder, - 'p-dropdown-label-empty': label === null && !props.placeholder - }); - const content = props.valueTemplate ? ObjectUtils.getJSXElement(props.valueTemplate, selectedOption, props) : (label || props.placeholder || 'empty'); +
    + +
    + ); + }; + + const createKeyboardHelper = () => { + return ( +
    + +
    + ); + }; + + const createLabel = () => { + const label = ObjectUtils.isNotEmpty(selectedOption) ? getOptionLabel(selectedOption) : null; + + if (props.editable) { + const value = label || props.value || ''; + + return ( + + ); + } else { + const className = classNames('p-dropdown-label p-inputtext', { + 'p-placeholder': label === null && props.placeholder, + 'p-dropdown-label-empty': label === null && !props.placeholder + }); + const content = props.valueTemplate ? ObjectUtils.getJSXElement(props.valueTemplate, selectedOption, props) : label || props.placeholder || 'empty'; - return {content} - } - } + return ( + + {content} + + ); + } + }; - const createClearIcon = () => { - if (props.value != null && props.showClear && !props.disabled) { - return - } + const createClearIcon = () => { + if (props.value != null && props.showClear && !props.disabled) { + return ; + } + + return null; + }; - return null; - } + const createDropdownIcon = () => { + const iconClassName = classNames('p-dropdown-trigger-icon p-clickable', props.dropdownIcon); - const createDropdownIcon = () => { - const iconClassName = classNames('p-dropdown-trigger-icon p-clickable', props.dropdownIcon); + return ( +
    + +
    + ); + }; + + const visibleOptions = getVisibleOptions(); + const selectedOption = getSelectedOption(); + + const hasTooltip = ObjectUtils.isNotEmpty(props.tooltip); + const otherProps = ObjectUtils.findDiffKeys(props, Dropdown.defaultProps); + const className = classNames( + 'p-dropdown p-component p-inputwrapper', + { + 'p-disabled': props.disabled, + 'p-focus': focusedState, + 'p-dropdown-clearable': props.showClear && !props.disabled, + 'p-inputwrapper-filled': ObjectUtils.isNotEmpty(props.value), + 'p-inputwrapper-focus': focusedState || overlayVisibleState + }, + props.className + ); + const hiddenSelect = createHiddenSelect(); + const keyboardHelper = createKeyboardHelper(); + const labelElement = createLabel(); + const dropdownIcon = createDropdownIcon(); + const clearIcon = createClearIcon(); return ( -
    - -
    - ) - } - - const visibleOptions = getVisibleOptions(); - const selectedOption = getSelectedOption(); - - const hasTooltip = ObjectUtils.isNotEmpty(props.tooltip); - const otherProps = ObjectUtils.findDiffKeys(props, Dropdown.defaultProps); - const className = classNames('p-dropdown p-component p-inputwrapper', { - 'p-disabled': props.disabled, - 'p-focus': focusedState, - 'p-dropdown-clearable': props.showClear && !props.disabled, - 'p-inputwrapper-filled': ObjectUtils.isNotEmpty(props.value), - 'p-inputwrapper-focus': focusedState || overlayVisibleState - }, props.className); - const hiddenSelect = createHiddenSelect(); - const keyboardHelper = createKeyboardHelper(); - const labelElement = createLabel(); - const dropdownIcon = createDropdownIcon(); - const clearIcon = createClearIcon(); - - return ( - <> -
    - {keyboardHelper} - {hiddenSelect} - {labelElement} - {clearIcon} - {dropdownIcon} - -
    - {hasTooltip && } - - ) -})); + <> +
    + {keyboardHelper} + {hiddenSelect} + {labelElement} + {clearIcon} + {dropdownIcon} + +
    + {hasTooltip && } + + ); + }) +); Dropdown.displayName = 'Dropdown'; Dropdown.defaultProps = { @@ -783,4 +824,4 @@ Dropdown.defaultProps = { onShow: null, onHide: null, onFilter: null -} +}; diff --git a/components/lib/dropdown/DropdownItem.js b/components/lib/dropdown/DropdownItem.js index e67e9700fe..b4c1c2b2f2 100644 --- a/components/lib/dropdown/DropdownItem.js +++ b/components/lib/dropdown/DropdownItem.js @@ -3,21 +3,24 @@ import { Ripple } from '../ripple/Ripple'; import { classNames, ObjectUtils } from '../utils/Utils'; export const DropdownItem = React.memo((props) => { - const onClick = (event) => { if (props.onClick) { props.onClick({ originalEvent: event, option: props.option - }) + }); } - } + }; - const className = classNames('p-dropdown-item', { - 'p-highlight': props.selected, - 'p-disabled': props.disabled, - 'p-dropdown-item-empty': (!props.label || props.label.length === 0) - }, props.option && props.option.className); + const className = classNames( + 'p-dropdown-item', + { + 'p-highlight': props.selected, + 'p-disabled': props.disabled, + 'p-dropdown-item-empty': !props.label || props.label.length === 0 + }, + props.option && props.option.className + ); const content = props.template ? ObjectUtils.getJSXElement(props.template, props.option) : props.label; return ( @@ -25,7 +28,7 @@ export const DropdownItem = React.memo((props) => { {content} - ) + ); }); DropdownItem.displayName = 'DropdownItem'; diff --git a/components/lib/dropdown/DropdownPanel.js b/components/lib/dropdown/DropdownPanel.js index 154d9a8aab..c573c6fd1d 100644 --- a/components/lib/dropdown/DropdownPanel.js +++ b/components/lib/dropdown/DropdownPanel.js @@ -6,206 +6,210 @@ import { classNames, ObjectUtils, DomHandler } from '../utils/Utils'; import { VirtualScroller } from '../virtualscroller/VirtualScroller'; import { DropdownItem } from './DropdownItem'; -export const DropdownPanel = React.memo(React.forwardRef((props, ref) => { - const virtualScrollerRef = React.useRef(null); - const filterInputRef = React.useRef(null); - const isEmptyFilter = !(props.visibleOptions && props.visibleOptions.length) && props.hasFilter; - const filterOptions = { - filter: (e) => onFilterInputChange(e), - reset: () => props.resetFilter() - }; - - const onEnter = () => { - props.onEnter(() => { - if (virtualScrollerRef.current) { - const selectedIndex = props.getSelectedOptionIndex(); - if (selectedIndex !== -1) { - setTimeout(() => virtualScrollerRef.current.scrollToIndex(selectedIndex), 0); +export const DropdownPanel = React.memo( + React.forwardRef((props, ref) => { + const virtualScrollerRef = React.useRef(null); + const filterInputRef = React.useRef(null); + const isEmptyFilter = !(props.visibleOptions && props.visibleOptions.length) && props.hasFilter; + const filterOptions = { + filter: (e) => onFilterInputChange(e), + reset: () => props.resetFilter() + }; + + const onEnter = () => { + props.onEnter(() => { + if (virtualScrollerRef.current) { + const selectedIndex = props.getSelectedOptionIndex(); + if (selectedIndex !== -1) { + setTimeout(() => virtualScrollerRef.current.scrollToIndex(selectedIndex), 0); + } } - } - }); - } + }); + }; - const onEntered = () => { - props.onEntered(() => { - if (props.filter && props.filterInputAutoFocus) { - DomHandler.focus(filterInputRef.current, false); - } - }); - } - - const onFilterInputChange = (event) => { - virtualScrollerRef.current && virtualScrollerRef.current.scrollToIndex(0); - props.onFilterInputChange && props.onFilterInputChange(event); - } - - const createGroupChildren = (optionGroup, style) => { - const groupChildren = props.getOptionGroupChildren(optionGroup); - return ( - groupChildren.map((option, j) => { + const onEntered = () => { + props.onEntered(() => { + if (props.filter && props.filterInputAutoFocus) { + DomHandler.focus(filterInputRef.current, false); + } + }); + }; + + const onFilterInputChange = (event) => { + virtualScrollerRef.current && virtualScrollerRef.current.scrollToIndex(0); + props.onFilterInputChange && props.onFilterInputChange(event); + }; + + const createGroupChildren = (optionGroup, style) => { + const groupChildren = props.getOptionGroupChildren(optionGroup); + return groupChildren.map((option, j) => { const optionLabel = props.getOptionLabel(option); const optionKey = j + '_' + props.getOptionRenderKey(option); const disabled = props.isOptionDisabled(option); + return ; + }); + }; + + const createEmptyMessage = (emptyMessage, isFilter) => { + const message = ObjectUtils.getJSXElement(emptyMessage, props) || localeOption(isFilter ? 'emptyFilterMessage' : 'emptyMessage'); + + return
  • {message}
  • ; + }; + + const createItem = (option, index, scrollerOptions = {}) => { + const style = { height: scrollerOptions.props ? scrollerOptions.props.itemSize : undefined }; + if (props.optionGroupLabel) { + const groupContent = props.optionGroupTemplate ? ObjectUtils.getJSXElement(props.optionGroupTemplate, option, index) : props.getOptionGroupLabel(option); + const groupChildrenContent = createGroupChildren(option, style); + const key = index + '_' + props.getOptionGroupRenderKey(option); + return ( - - ) - }) - ) - } - - const createEmptyMessage = (emptyMessage, isFilter) => { - const message = ObjectUtils.getJSXElement(emptyMessage, props) || localeOption(isFilter ? 'emptyFilterMessage' : 'emptyMessage'); - - return ( -
  • - {message} -
  • - ) - } - - const createItem = (option, index, scrollerOptions = {}) => { - const style = { height: scrollerOptions.props ? scrollerOptions.props.itemSize : undefined }; - if (props.optionGroupLabel) { - const groupContent = props.optionGroupTemplate ? ObjectUtils.getJSXElement(props.optionGroupTemplate, option, index) : props.getOptionGroupLabel(option); - const groupChildrenContent = createGroupChildren(option, style); - const key = index + '_' + props.getOptionGroupRenderKey(option); + +
  • + {groupContent} +
  • + {groupChildrenContent} +
    + ); + } else { + const optionLabel = props.getOptionLabel(option); + const optionKey = index + '_' + props.getOptionRenderKey(option); + const disabled = props.isOptionDisabled(option); - return ( - -
  • - {groupContent} -
  • - {groupChildrenContent} -
    - ) - } - else { - const optionLabel = props.getOptionLabel(option); - const optionKey = index + '_' + props.getOptionRenderKey(option); - const disabled = props.isOptionDisabled(option); + return ; + } + }; - return ( - - ) - } - } - - const createItems = () => { - if (ObjectUtils.isNotEmpty(props.visibleOptions)) { - return props.visibleOptions.map(createItem); - } - else if (props.hasFilter) { - return createEmptyMessage(props.emptyFilterMessage, true); - } - - return createEmptyMessage(props.emptyMessage); - } - - const createFilterClearIcon = () => { - if (props.showFilterClear && props.filterValue) { - return props.onFilterClearIconClick(() => DomHandler.focus(filterInputRef.current))}> - } - - return null; - } - - const createFilter = () => { - if (props.filter) { - const clearIcon = createFilterClearIcon(); - const containerClassName = classNames('p-dropdown-filter-container', { 'p-dropdown-clearable-filter': !!clearIcon }); - let content = ( -
    - + const createItems = () => { + if (ObjectUtils.isNotEmpty(props.visibleOptions)) { + return props.visibleOptions.map(createItem); + } else if (props.hasFilter) { + return createEmptyMessage(props.emptyFilterMessage, true); + } + + return createEmptyMessage(props.emptyMessage); + }; + + const createFilterClearIcon = () => { + if (props.showFilterClear && props.filterValue) { + return props.onFilterClearIconClick(() => DomHandler.focus(filterInputRef.current))}>; + } + + return null; + }; + + const createFilter = () => { + if (props.filter) { + const clearIcon = createFilterClearIcon(); + const containerClassName = classNames('p-dropdown-filter-container', { 'p-dropdown-clearable-filter': !!clearIcon }); + let content = ( +
    + {clearIcon} - -
    - ) - - if (props.filterTemplate) { - const defaultContentOptions = { - className: containerClassName, - element: content, - filterOptions: filterOptions, - filterInputKeyDown: props.onFilterInputKeyDown, - filterInputChange: onFilterInputChange, - filterIconClassName: 'p-dropdown-filter-icon pi pi-search', - clearIcon: clearIcon, - props, - }; - - content = ObjectUtils.getJSXElement(props.filterTemplate, defaultContentOptions); + +
    + ); + + if (props.filterTemplate) { + const defaultContentOptions = { + className: containerClassName, + element: content, + filterOptions: filterOptions, + filterInputKeyDown: props.onFilterInputKeyDown, + filterInputChange: onFilterInputChange, + filterIconClassName: 'p-dropdown-filter-icon pi pi-search', + clearIcon: clearIcon, + props + }; + + content = ObjectUtils.getJSXElement(props.filterTemplate, defaultContentOptions); + } + + return
    {content}
    ; } - return ( -
    - {content} -
    - ) - } - - return null; - } - - const createContent = () => { - if (props.virtualScrollerOptions) { - const virtualScrollerProps = { - ...props.virtualScrollerOptions, - ...{ - style: { ...props.virtualScrollerOptions.style, ...{ height: props.scrollHeight } }, - className: classNames('p-dropdown-items-wrapper', props.virtualScrollerOptions.className), - items: props.visibleOptions, - autoSize: true, - onLazyLoad: (event) => props.virtualScrollerOptions.onLazyLoad({ ...event, ...{ filter: props.filterValue } }), - itemTemplate: (item, options) => item && createItem(item, options.index, options), - contentTemplate: (options) => { - const className = classNames('p-dropdown-items', options.className); - const content = isEmptyFilter ? createEmptyMessage() : options.children; - - return ( -
      - {content} -
    - ) + return null; + }; + + const createContent = () => { + if (props.virtualScrollerOptions) { + const virtualScrollerProps = { + ...props.virtualScrollerOptions, + ...{ + style: { ...props.virtualScrollerOptions.style, ...{ height: props.scrollHeight } }, + className: classNames('p-dropdown-items-wrapper', props.virtualScrollerOptions.className), + items: props.visibleOptions, + autoSize: true, + onLazyLoad: (event) => props.virtualScrollerOptions.onLazyLoad({ ...event, ...{ filter: props.filterValue } }), + itemTemplate: (item, options) => item && createItem(item, options.index, options), + contentTemplate: (options) => { + const className = classNames('p-dropdown-items', options.className); + const content = isEmptyFilter ? createEmptyMessage() : options.children; + + return ( +
      + {content} +
    + ); + } } - } - }; + }; + + return ; + } else { + const items = createItems(); + + return ( +
    +
      + {items} +
    +
    + ); + } + }; - return - } - else { - const items = createItems(); + const createElement = () => { + const className = classNames('p-dropdown-panel p-component', props.panelClassName); + const filter = createFilter(); + const content = createContent(); return ( -
    -
      - {items} -
    -
    - ) - } - } - - const createElement = () => { - const className = classNames('p-dropdown-panel p-component', props.panelClassName); - const filter = createFilter(); - const content = createContent(); - - return ( - -
    - {filter} - {content} -
    -
    - ) - } - - const element = createElement(); - - return -})); + +
    + {filter} + {content} +
    +
    + ); + }; + + const element = createElement(); + + return ; + }) +); DropdownPanel.displayName = 'DropdownPanel'; diff --git a/components/lib/dropdown/dropdown.d.ts b/components/lib/dropdown/dropdown.d.ts index b463818d56..42f72c1e37 100755 --- a/components/lib/dropdown/dropdown.d.ts +++ b/components/lib/dropdown/dropdown.d.ts @@ -104,7 +104,7 @@ export interface DropdownProps extends Omit { +export declare class Dropdown extends React.Component { public getElement(): HTMLDivElement; public getInput(): HTMLInputElement; public getFocusInput(): HTMLInputElement; diff --git a/components/lib/editor/Editor.js b/components/lib/editor/Editor.js index 7bb0819060..0a91b4d11a 100644 --- a/components/lib/editor/Editor.js +++ b/components/lib/editor/Editor.js @@ -2,192 +2,197 @@ import * as React from 'react'; import { useMountEffect, useUpdateEffect } from '../hooks/Hooks'; import { classNames, DomHandler, ObjectUtils } from '../utils/Utils'; -const QuillJS = function() {try {return Quill;} catch {return null;}}(); - -export const Editor = React.memo(React.forwardRef((props, ref) => { - const elementRef = React.useRef(null); - const contentRef = React.useRef(null); - const toolbarRef = React.useRef(null); - const quill = React.useRef(null); - const isQuillLoaded = React.useRef(false); - - useMountEffect(() => { - if (!isQuillLoaded.current) { - const configuration = { - modules: { - toolbar: props.showHeader ? toolbarRef.current : false, - ...props.modules - }, - placeholder: props.placeholder, - readOnly: props.readOnly, - theme: props.theme, - formats: props.formats - }; - - if (QuillJS) { - // GitHub #3097 loaded by script only - quill.current = new Quill(contentRef.current, configuration); - initQuill(); - - if (quill.current && quill.current.getModule('toolbar')) { - props.onLoad && props.onLoad(quill.current); - } - } - else { - import('quill').then((module) => { - if (module && DomHandler.isExist(contentRef.current)) { - if (module.default) { - // webpack - quill.current = new module.default(contentRef.current, configuration); - } else { - // parceljs - quill.current = new module(contentRef.current, configuration); - } - - initQuill(); - } - }).then(() => { +const QuillJS = (function () { + try { + return Quill; + } catch { + return null; + } +})(); + +export const Editor = React.memo( + React.forwardRef((props, ref) => { + const elementRef = React.useRef(null); + const contentRef = React.useRef(null); + const toolbarRef = React.useRef(null); + const quill = React.useRef(null); + const isQuillLoaded = React.useRef(false); + + useMountEffect(() => { + if (!isQuillLoaded.current) { + const configuration = { + modules: { + toolbar: props.showHeader ? toolbarRef.current : false, + ...props.modules + }, + placeholder: props.placeholder, + readOnly: props.readOnly, + theme: props.theme, + formats: props.formats + }; + + if (QuillJS) { + // GitHub #3097 loaded by script only + quill.current = new Quill(contentRef.current, configuration); + initQuill(); + if (quill.current && quill.current.getModule('toolbar')) { props.onLoad && props.onLoad(quill.current); } - }); - } - - isQuillLoaded.current = true; - } - }); - - const initQuill = () => { - if (props.value) { - quill.current.setContents(quill.current.clipboard.convert(props.value)); - } - - quill.current.on('text-change', (delta, oldContents, source) => { - let firstChild = contentRef.current.children[0]; - let html = firstChild ? firstChild.innerHTML : null; - let text = quill.current.getText(); - if (html === '


    ') { - html = null; - } - - // GitHub #2271 prevent infinite loop on clipboard paste of HTML - if (source === "api") { - const htmlValue = contentRef.current.children[0]; - const editorValue = document.createElement("div"); - editorValue.innerHTML = props.value || ""; - // this is necessary because Quill rearranged style elements - if (DomHandler.isEqualElement(htmlValue, editorValue)) { - return; + } else { + import('quill') + .then((module) => { + if (module && DomHandler.isExist(contentRef.current)) { + if (module.default) { + // webpack + quill.current = new module.default(contentRef.current, configuration); + } else { + // parceljs + quill.current = new module(contentRef.current, configuration); + } + + initQuill(); + } + }) + .then(() => { + if (quill.current && quill.current.getModule('toolbar')) { + props.onLoad && props.onLoad(quill.current); + } + }); } - } - if (props.onTextChange) { - props.onTextChange({ - htmlValue: html, - textValue: text, - delta: delta, - source: source - }); + isQuillLoaded.current = true; } }); - quill.current.on('selection-change', (range, oldRange, source) => { - if (props.onSelectionChange) { - props.onSelectionChange({ - range: range, - oldRange: oldRange, - source: source - }); + const initQuill = () => { + if (props.value) { + quill.current.setContents(quill.current.clipboard.convert(props.value)); } - }); - } - useUpdateEffect(() => { - if (quill.current && !quill.current.hasFocus()) { - props.value ? - quill.current.setContents(quill.current.clipboard.convert(props.value)) : - quill.current.setText(''); - } - }, [props.value]); - - React.useImperativeHandle(ref, () => ({ - props, - getQuill: () => quill.current, - getElement: () => elementRef.current, - getContent: () => contentRef.current, - getToolbar: () => toolbarRef.current - })); - - const createToolbarHeader = () => { - if (props.showHeader === false) { - return null; - } - else if (props.headerTemplate) { - return ( -
    - {props.headerTemplate} -
    - ) - } - else { - return ( -
    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - ) - } - } + quill.current.on('text-change', (delta, oldContents, source) => { + let firstChild = contentRef.current.children[0]; + let html = firstChild ? firstChild.innerHTML : null; + let text = quill.current.getText(); + if (html === '


    ') { + html = null; + } + + // GitHub #2271 prevent infinite loop on clipboard paste of HTML + if (source === 'api') { + const htmlValue = contentRef.current.children[0]; + const editorValue = document.createElement('div'); + editorValue.innerHTML = props.value || ''; + // this is necessary because Quill rearranged style elements + if (DomHandler.isEqualElement(htmlValue, editorValue)) { + return; + } + } - const otherProps = ObjectUtils.findDiffKeys(props, Editor.defaultProps); - const className = classNames('p-component p-editor-container', props.className); - const header = createToolbarHeader(); - const content =
    + if (props.onTextChange) { + props.onTextChange({ + htmlValue: html, + textValue: text, + delta: delta, + source: source + }); + } + }); + + quill.current.on('selection-change', (range, oldRange, source) => { + if (props.onSelectionChange) { + props.onSelectionChange({ + range: range, + oldRange: oldRange, + source: source + }); + } + }); + }; - return ( -
    - {header} - {content} -
    - ) -})); + useUpdateEffect(() => { + if (quill.current && !quill.current.hasFocus()) { + props.value ? quill.current.setContents(quill.current.clipboard.convert(props.value)) : quill.current.setText(''); + } + }, [props.value]); + + React.useImperativeHandle(ref, () => ({ + props, + getQuill: () => quill.current, + getElement: () => elementRef.current, + getContent: () => contentRef.current, + getToolbar: () => toolbarRef.current + })); + + const createToolbarHeader = () => { + if (props.showHeader === false) { + return null; + } else if (props.headerTemplate) { + return ( +
    + {props.headerTemplate} +
    + ); + } else { + return ( +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + ); + } + }; + + const otherProps = ObjectUtils.findDiffKeys(props, Editor.defaultProps); + const className = classNames('p-component p-editor-container', props.className); + const header = createToolbarHeader(); + const content =
    ; + + return ( +
    + {header} + {content} +
    + ); + }) +); Editor.displayName = 'Editor'; Editor.defaultProps = { @@ -206,4 +211,4 @@ Editor.defaultProps = { onTextChange: null, onSelectionChange: null, onLoad: null -} +}; diff --git a/components/lib/fieldset/Fieldset.js b/components/lib/fieldset/Fieldset.js index 9587de6de0..f24be747d4 100644 --- a/components/lib/fieldset/Fieldset.js +++ b/components/lib/fieldset/Fieldset.js @@ -26,7 +26,7 @@ export const Fieldset = React.forwardRef((props, ref) => { } event.preventDefault(); - } + }; const expand = (event) => { if (!props.onToggle) { @@ -34,7 +34,7 @@ export const Fieldset = React.forwardRef((props, ref) => { } props.onExpand && props.onExpand(event); - } + }; const collapse = (event) => { if (!props.onToggle) { @@ -42,25 +42,23 @@ export const Fieldset = React.forwardRef((props, ref) => { } props.onCollapse && props.onCollapse(event); - } + }; useMountEffect(() => { if (!props.id) { setIdState(UniqueComponentId()); } - }) + }); const createContent = () => { return (
    -
    - {props.children} -
    +
    {props.children}
    - ) - } + ); + }; const createToggleIcon = () => { if (props.toggleable) { @@ -69,11 +67,11 @@ export const Fieldset = React.forwardRef((props, ref) => { 'pi-minus': !collapsed }); - return + return ; } return null; - } + }; const createLegendContent = () => { if (props.toggleable) { @@ -85,11 +83,15 @@ export const Fieldset = React.forwardRef((props, ref) => { {props.legend} - ) + ); } - return {props.legend} - } + return ( + + {props.legend} + + ); + }; const createLegend = () => { if (props.legend != null || props.toggleable) { @@ -99,9 +101,9 @@ export const Fieldset = React.forwardRef((props, ref) => { {legendContent} - ) + ); } - } + }; React.useImperativeHandle(ref, () => ({ props, @@ -110,9 +112,13 @@ export const Fieldset = React.forwardRef((props, ref) => { })); const otherProps = ObjectUtils.findDiffKeys(props, Fieldset.defaultProps); - const className = classNames('p-fieldset p-component', { - 'p-fieldset-toggleable': props.toggleable - }, props.className); + const className = classNames( + 'p-fieldset p-component', + { + 'p-fieldset-toggleable': props.toggleable + }, + props.className + ); const legend = createLegend(); const content = createContent(); @@ -121,7 +127,7 @@ export const Fieldset = React.forwardRef((props, ref) => { {legend} {content} - ) + ); }); Fieldset.displayName = 'Fieldset'; @@ -138,4 +144,4 @@ Fieldset.defaultProps = { onCollapse: null, onToggle: null, onClick: null -} +}; diff --git a/components/lib/fieldset/fieldset.d.ts b/components/lib/fieldset/fieldset.d.ts index 0000b294de..2aee170c97 100644 --- a/components/lib/fieldset/fieldset.d.ts +++ b/components/lib/fieldset/fieldset.d.ts @@ -18,7 +18,7 @@ export interface FieldsetProps extends Omit { +export declare class Fieldset extends React.Component { public getElement(): HTMLFieldSetElement; public getContent(): HTMLDivElement; } diff --git a/components/lib/fileupload/FileUpload.js b/components/lib/fileupload/FileUpload.js index d832c2c8b0..ea073f4de8 100644 --- a/components/lib/fileupload/FileUpload.js +++ b/components/lib/fileupload/FileUpload.js @@ -6,500 +6,501 @@ import { ProgressBar } from '../progressbar/ProgressBar'; import { Ripple } from '../ripple/Ripple'; import { classNames, DomHandler, IconUtils, ObjectUtils } from '../utils/Utils'; -export const FileUpload = React.memo(React.forwardRef((props, ref) => { - const [filesState, setFilesState] = React.useState([]); - const [progressState, setProgressState] = React.useState(0); - const [focusedState, setFocusedState] = React.useState(false); - const [uploadingState, setUploadingState] = React.useState(false); - const fileInputRef = React.useRef(null); - const messagesRef = React.useRef(null); - const contentRef = React.useRef(null); - const duplicateIEEvent = React.useRef(false); - const uploadedFileCount = React.useRef(0); - const hasFiles = ObjectUtils.isNotEmpty(filesState); - const disabled = props.disabled || uploadingState; - const chooseButtonLabel = props.chooseLabel || props.chooseOptions.label || localeOption('choose'); - const uploadButtonLabel = props.uploadLabel || props.uploadOptions.label || localeOption('upload'); - const cancelButtonLabel = props.cancelLabel || props.cancelOptions.label || localeOption('cancel'); - const chooseDisabled = disabled || (props.fileLimit && props.fileLimit <= filesState.length + uploadedFileCount); - const uploadDisabled = disabled || !hasFiles; - const cancelDisabled = disabled || !hasFiles; - - const isImage = (file) => { - return /^image\//.test(file.type); - } - - const remove = (event, index) => { - clearInput(); - let currentFiles = [...filesState]; - let removedFile = filesState[index]; - - currentFiles.splice(index, 1); - setFilesState(currentFiles); - - if (props.onRemove) { - props.onRemove({ - originalEvent: event, - file: removedFile - }) - } - } - - const clearInput = () => { - if (fileInputRef.current) { - fileInputRef.current.value = ''; - } - } - - const clearIEInput = () => { - if (fileInputRef.current) { - duplicateIEEvent.current = true; //IE11 fix to prevent onFileChange trigger again - fileInputRef.current.value = ''; - } - } - - const formatSize = (bytes) => { - if (bytes === 0) { - return '0 B'; - } - let k = 1000, - dm = 3, - sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], - i = Math.floor(Math.log(bytes) / Math.log(k)); - - return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]; - } - - const onFileSelect = (event) => { - // give caller a chance to stop the selection - if (props.onBeforeSelect && props.onBeforeSelect(event) === false) { - return; - } - - if (event.type !== 'drop' && isIE11() && duplicateIEEvent.current) { - duplicateIEEvent.current = false; - return; - } - - let currentFiles = []; - if (props.multiple) { - currentFiles = filesState ? [...filesState] : []; - } - - let selectedFiles = event.dataTransfer ? event.dataTransfer.files : event.target.files; - for (let i = 0; i < selectedFiles.length; i++) { - let file = selectedFiles[i]; - - if (!isFileSelected(file) && validate(file)) { - if (isImage(file)) { - file.objectURL = window.URL.createObjectURL(file); - } - currentFiles.push(file); +export const FileUpload = React.memo( + React.forwardRef((props, ref) => { + const [filesState, setFilesState] = React.useState([]); + const [progressState, setProgressState] = React.useState(0); + const [focusedState, setFocusedState] = React.useState(false); + const [uploadingState, setUploadingState] = React.useState(false); + const fileInputRef = React.useRef(null); + const messagesRef = React.useRef(null); + const contentRef = React.useRef(null); + const duplicateIEEvent = React.useRef(false); + const uploadedFileCount = React.useRef(0); + const hasFiles = ObjectUtils.isNotEmpty(filesState); + const disabled = props.disabled || uploadingState; + const chooseButtonLabel = props.chooseLabel || props.chooseOptions.label || localeOption('choose'); + const uploadButtonLabel = props.uploadLabel || props.uploadOptions.label || localeOption('upload'); + const cancelButtonLabel = props.cancelLabel || props.cancelOptions.label || localeOption('cancel'); + const chooseDisabled = disabled || (props.fileLimit && props.fileLimit <= filesState.length + uploadedFileCount); + const uploadDisabled = disabled || !hasFiles; + const cancelDisabled = disabled || !hasFiles; + + const isImage = (file) => { + return /^image\//.test(file.type); + }; + + const remove = (event, index) => { + clearInput(); + let currentFiles = [...filesState]; + let removedFile = filesState[index]; + + currentFiles.splice(index, 1); + setFilesState(currentFiles); + + if (props.onRemove) { + props.onRemove({ + originalEvent: event, + file: removedFile + }); } - } + }; - setFilesState(currentFiles); + const clearInput = () => { + if (fileInputRef.current) { + fileInputRef.current.value = ''; + } + }; - if (ObjectUtils.isNotEmpty(currentFiles) && props.auto) { - upload(currentFiles); - } + const clearIEInput = () => { + if (fileInputRef.current) { + duplicateIEEvent.current = true; //IE11 fix to prevent onFileChange trigger again + fileInputRef.current.value = ''; + } + }; - if (props.onSelect) { - props.onSelect({ originalEvent: event, files: selectedFiles }); - } + const formatSize = (bytes) => { + if (bytes === 0) { + return '0 B'; + } + let k = 1000, + dm = 3, + sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], + i = Math.floor(Math.log(bytes) / Math.log(k)); + + return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i]; + }; + + const onFileSelect = (event) => { + // give caller a chance to stop the selection + if (props.onBeforeSelect && props.onBeforeSelect(event) === false) { + return; + } - if (event.type !== 'drop' && isIE11()) { - clearIEInput(); - } - else { - clearInput(); - } - - if (props.mode === 'basic' && currentFiles.length > 0) { - fileInputRef.current.style.display = 'none'; - } - } - - const isFileSelected = (file) => { - return filesState.some((f) => (f.name + f.type + f.size) === (file.name + file.type + file.size)); - } - - const isIE11 = () => { - return !!window['MSInputMethodContext'] && !!document['documentMode']; - } - - const validate = (file) => { - if (props.maxFileSize && file.size > props.maxFileSize) { - const message = { - severity: 'error', - summary: props.invalidFileSizeMessageSummary.replace('{0}', file.name), - detail: props.invalidFileSizeMessageDetail.replace('{0}', formatSize(props.maxFileSize)), - sticky: true - }; - - if (props.mode === 'advanced') { - messagesRef.current.show(message); + if (event.type !== 'drop' && isIE11() && duplicateIEEvent.current) { + duplicateIEEvent.current = false; + return; } - props.onValidationFail && props.onValidationFail(file); + let currentFiles = []; + if (props.multiple) { + currentFiles = filesState ? [...filesState] : []; + } - return false; - } + let selectedFiles = event.dataTransfer ? event.dataTransfer.files : event.target.files; + for (let i = 0; i < selectedFiles.length; i++) { + let file = selectedFiles[i]; - return true; - } + if (!isFileSelected(file) && validate(file)) { + if (isImage(file)) { + file.objectURL = window.URL.createObjectURL(file); + } + currentFiles.push(file); + } + } - const upload = (files) => { - files = files || filesState; - if (files && files.nativeEvent) { - files = filesState; - } + setFilesState(currentFiles); - if (props.customUpload) { - if (props.fileLimit) { - uploadedFileCount += files.length; + if (ObjectUtils.isNotEmpty(currentFiles) && props.auto) { + upload(currentFiles); } - if (props.uploadHandler) { - props.uploadHandler({ - files, - options: { - clear, - props - } - }) + if (props.onSelect) { + props.onSelect({ originalEvent: event, files: selectedFiles }); } - } - else { - setUploadingState(true); - let xhr = new XMLHttpRequest(); - let formData = new FormData(); - - if (props.onBeforeUpload) { - props.onBeforeUpload({ - 'xhr': xhr, - 'formData': formData - }); + + if (event.type !== 'drop' && isIE11()) { + clearIEInput(); + } else { + clearInput(); } - for (let file of files) { - formData.append(props.name, file, file.name); + if (props.mode === 'basic' && currentFiles.length > 0) { + fileInputRef.current.style.display = 'none'; } + }; + + const isFileSelected = (file) => { + return filesState.some((f) => f.name + f.type + f.size === file.name + file.type + file.size); + }; + + const isIE11 = () => { + return !!window['MSInputMethodContext'] && !!document['documentMode']; + }; + + const validate = (file) => { + if (props.maxFileSize && file.size > props.maxFileSize) { + const message = { + severity: 'error', + summary: props.invalidFileSizeMessageSummary.replace('{0}', file.name), + detail: props.invalidFileSizeMessageDetail.replace('{0}', formatSize(props.maxFileSize)), + sticky: true + }; + + if (props.mode === 'advanced') { + messagesRef.current.show(message); + } - xhr.upload.addEventListener('progress', (event) => { - if (event.lengthComputable) { - const progress = Math.round((event.loaded * 100) / event.total); - setProgressState(progress); + props.onValidationFail && props.onValidationFail(file); - if (props.onProgress) { - props.onProgress({ - originalEvent: event, - progress - }); - } - } - }); + return false; + } + + return true; + }; - xhr.onreadystatechange = () => { - if (xhr.readyState === 4) { - setProgressState(0); - setUploadingState(false); + const upload = (files) => { + files = files || filesState; + if (files && files.nativeEvent) { + files = filesState; + } + + if (props.customUpload) { + if (props.fileLimit) { + uploadedFileCount += files.length; + } - if (xhr.status >= 200 && xhr.status < 300) { - if (props.fileLimit) { - uploadedFileCount += files.length; + if (props.uploadHandler) { + props.uploadHandler({ + files, + options: { + clear, + props } + }); + } + } else { + setUploadingState(true); + let xhr = new XMLHttpRequest(); + let formData = new FormData(); + + if (props.onBeforeUpload) { + props.onBeforeUpload({ + xhr: xhr, + formData: formData + }); + } + + for (let file of files) { + formData.append(props.name, file, file.name); + } + + xhr.upload.addEventListener('progress', (event) => { + if (event.lengthComputable) { + const progress = Math.round((event.loaded * 100) / event.total); + setProgressState(progress); - if (props.onUpload) { - props.onUpload({ - xhr, - files + if (props.onProgress) { + props.onProgress({ + originalEvent: event, + progress }); } } - else { - if (props.onError) { - props.onError({ - xhr, - files - }); + }); + + xhr.onreadystatechange = () => { + if (xhr.readyState === 4) { + setProgressState(0); + setUploadingState(false); + + if (xhr.status >= 200 && xhr.status < 300) { + if (props.fileLimit) { + uploadedFileCount += files.length; + } + + if (props.onUpload) { + props.onUpload({ + xhr, + files + }); + } + } else { + if (props.onError) { + props.onError({ + xhr, + files + }); + } } + + clear(); } + }; + + xhr.open('POST', props.url, true); - clear(); + if (props.onBeforeSend) { + props.onBeforeSend({ + xhr: xhr, + formData: formData + }); } - }; - xhr.open('POST', props.url, true); + xhr.withCredentials = props.withCredentials; + xhr.send(formData); + } + }; - if (props.onBeforeSend) { - props.onBeforeSend({ - 'xhr': xhr, - 'formData': formData - }); + const clear = () => { + setFilesState([]); + setUploadingState(false); + props.onClear && props.onClear(); + clearInput(); + }; + + const choose = () => { + fileInputRef.current.click(); + }; + + const onFocus = () => { + setFocusedState(true); + }; + + const onBlur = () => { + setFocusedState(false); + }; + + const onKeyDown = (event) => { + if (event.which === 13) { + // enter + choose(); } + }; - xhr.withCredentials = props.withCredentials; - xhr.send(formData); - } - } - - const clear = () => { - setFilesState([]); - setUploadingState(false); - props.onClear && props.onClear(); - clearInput(); - } - - const choose = () => { - fileInputRef.current.click(); - } - - const onFocus = () => { - setFocusedState(true); - } - - const onBlur = () => { - setFocusedState(false); - } - - const onKeyDown = (event) => { - if (event.which === 13) { // enter - choose(); - } - } - - const onDragEnter = (event) => { - if (!disabled) { - event.dataTransfer.dropEffect = 'copy'; - event.stopPropagation(); - event.preventDefault(); - } - } + const onDragEnter = (event) => { + if (!disabled) { + event.dataTransfer.dropEffect = 'copy'; + event.stopPropagation(); + event.preventDefault(); + } + }; + + const onDragOver = (event) => { + if (!disabled) { + event.dataTransfer.dropEffect = 'copy'; + DomHandler.addClass(contentRef.current, 'p-fileupload-highlight'); + event.stopPropagation(); + event.preventDefault(); + } + }; + + const onDragLeave = (event) => { + if (!disabled) { + event.dataTransfer.dropEffect = 'copy'; + DomHandler.removeClass(contentRef.current, 'p-fileupload-highlight'); + } + }; + + const onDrop = (event) => { + if (props.disabled) { + return; + } - const onDragOver = (event) => { - if (!disabled) { - event.dataTransfer.dropEffect = 'copy'; - DomHandler.addClass(contentRef.current, 'p-fileupload-highlight'); + DomHandler.removeClass(contentRef.current, 'p-fileupload-highlight'); event.stopPropagation(); event.preventDefault(); - } - } - const onDragLeave = (event) => { - if (!disabled) { - event.dataTransfer.dropEffect = 'copy'; - DomHandler.removeClass(contentRef.current, 'p-fileupload-highlight'); - } - } - - const onDrop = (event) => { - if (props.disabled) { - return; - } - - DomHandler.removeClass(contentRef.current, 'p-fileupload-highlight'); - event.stopPropagation(); - event.preventDefault(); - - // give caller a chance to stop the drop - if (props.onBeforeDrop && props.onBeforeDrop(event) === false) { - return; - } - - const files = event.dataTransfer ? event.dataTransfer.files : event.target.files; - const allowDrop = props.multiple || (ObjectUtils.isEmpty(filesState) && files && files.length === 1); - - allowDrop && onFileSelect(event); - } - - const onSimpleUploaderClick = () => { - !disabled && hasFiles ? upload() : fileInputRef.current.click(); - } - - React.useImperativeHandle(ref, () => ({ - props, - upload, - clear, - formatSize, - onFileSelect, - getInput: () => fileInputRef.current, - getContent: () => contentRef.current - })); - - const createChooseButton = () => { - const { className, style, icon: _icon, iconOnly } = props.chooseOptions; - const chooseClassName = classNames('p-button p-fileupload-choose p-component', { - 'p-disabled': disabled, - 'p-focus': focusedState, - 'p-button-icon-only': iconOnly - }, className); - const labelClassName = 'p-button-label p-clickable'; - const label = iconOnly ? : {chooseButtonLabel}; - const input = ; - const icon = IconUtils.getJSXIcon(_icon || 'pi pi-fw pi-plus', { className: 'p-button-icon p-button-icon-left p-clickable' }, { props }) - return ( - - {input} - {icon} - {label} - - - ) - } - - const createFile = (file, index) => { - const key = file.name + file.type + file.size; - const preview = isImage(file) ?
    {file.name}
    : null; - const fileName =
    {file.name}
    ; - const size =
    {formatSize(file.size)}
    ; - const removeButton =
    - let content = ( - <> - {preview} - {fileName} - {size} - {removeButton} - - ); - - if (props.itemTemplate) { - const defaultContentOptions = { - onRemove: (event) => remove(event, index), - previewElement: preview, - fileNameElement: fileName, - sizeElement: size, - removeElement: removeButton, - formatSize: formatSize(file.size), - element: content, - props - }; - - content = ObjectUtils.getJSXElement(props.itemTemplate, file, defaultContentOptions); - } - - return ( -
    - {content} -
    - ) - } - - const createFiles = () => { - const content = filesState.map(createFile); - - return ( -
    - {content} -
    - ) - } - - const createEmptyContent = () => { - return props.emptyTemplate && !hasFiles ? ObjectUtils.getJSXElement(props.emptyTemplate, props) : null; - } - - const createProgressBarContent = () => { - if (props.progressBarTemplate) { - return ObjectUtils.getJSXElement(props.progressBarTemplate, props); - } - - return - } - - const createAdvanced = () => { - const otherProps = ObjectUtils.findDiffKeys(props, FileUpload.defaultProps); - const className = classNames('p-fileupload p-fileupload-advanced p-component', props.className); - const headerClassName = classNames('p-fileupload-buttonbar', props.headerClassName); - const contentClassName = classNames('p-fileupload-content', props.contentClassName); - const chooseButton = createChooseButton(); - const emptyContent = createEmptyContent(); - let uploadButton, cancelButton, filesList, progressBar; - - if (!props.auto) { - const uploadOptions = props.uploadOptions; - const cancelOptions = props.cancelOptions; - const uploadLabel = !uploadOptions.iconOnly ? uploadButtonLabel : ''; - const cancelLabel = !cancelOptions.iconOnly ? cancelButtonLabel : ''; - - uploadButton =
    + ); + let content = ( + <> + {preview} + {fileName} + {size} + {removeButton} + + ); + + if (props.itemTemplate) { + const defaultContentOptions = { + onRemove: (event) => remove(event, index), + previewElement: preview, + fileNameElement: fileName, + sizeElement: size, + removeElement: removeButton, + formatSize: formatSize(file.size), + element: content, + props + }; + + content = ObjectUtils.getJSXElement(props.itemTemplate, file, defaultContentOptions); + } + + return ( +
    + {content} +
    + ); + }; + + const createFiles = () => { + const content = filesState.map(createFile); + + return
    {content}
    ; + }; + + const createEmptyContent = () => { + return props.emptyTemplate && !hasFiles ? ObjectUtils.getJSXElement(props.emptyTemplate, props) : null; + }; + + const createProgressBarContent = () => { + if (props.progressBarTemplate) { + return ObjectUtils.getJSXElement(props.progressBarTemplate, props); + } + + return ; + }; + + const createAdvanced = () => { + const otherProps = ObjectUtils.findDiffKeys(props, FileUpload.defaultProps); + const className = classNames('p-fileupload p-fileupload-advanced p-component', props.className); + const headerClassName = classNames('p-fileupload-buttonbar', props.headerClassName); + const contentClassName = classNames('p-fileupload-content', props.contentClassName); + const chooseButton = createChooseButton(); + const emptyContent = createEmptyContent(); + let uploadButton, cancelButton, filesList, progressBar; + + if (!props.auto) { + const uploadOptions = props.uploadOptions; + const cancelOptions = props.cancelOptions; + const uploadLabel = !uploadOptions.iconOnly ? uploadButtonLabel : ''; + const cancelLabel = !cancelOptions.iconOnly ? cancelButtonLabel : ''; + + uploadButton = +export const Galleria = React.memo( + React.forwardRef((props, ref) => { + const [visibleState, setVisibleState] = React.useState(false); + const [numVisibleState, setNumVisibleState] = React.useState(props.numVisible); + const [slideShowActiveState, setSlideShowActiveState] = React.useState(false); + const [activeIndexState, setActiveIndexState] = React.useState(props.activeIndex); + const elementRef = React.useRef(null); + const previewContentRef = React.useRef(null); + const maskRef = React.useRef(null); + const activeItemIndex = props.onItemChange ? props.activeIndex : activeIndexState; + const isVertical = props.thumbnailsPosition === 'left' || props.thumbnailsPosition === 'right'; + + useInterval( + () => { + onActiveItemChange({ index: props.circular && props.value.length - 1 === activeItemIndex ? 0 : activeItemIndex + 1 }); + }, + props.transitionInterval, + slideShowActiveState ); - const header = createHeader(); - const footer = createFooter(); - const element = ( -
    - {closeIcon} - {header} -
    - - - { - props.showThumbnails && - } -
    - {footer} -
    - ) - - return element; - } - - const createGalleria = () => { - const element = createElement(); - - if (props.fullScreen) { - const maskClassName = classNames('p-galleria-mask', { - 'p-galleria-visible': visibleState - }); - - const galleriaWrapper = ( -
    - - {element} - -
    + const onActiveItemChange = (event) => { + if (props.onItemChange) { + props.onItemChange(event); + } else { + setActiveIndexState(event.index); + } + }; + + const show = () => { + setVisibleState(true); + }; + + const hide = () => { + setVisibleState(false); + }; + + const onEnter = () => { + DomHandler.addClass(document.body, 'p-overflow-hidden'); + }; + + const onEntering = () => { + ZIndexUtils.set('modal', maskRef.current, PrimeReact.autoZIndex, props.baseZIndex || PrimeReact.zIndex['modal']); + DomHandler.addMultipleClasses(maskRef.current, 'p-component-overlay p-component-overlay-enter'); + }; + + const onEntered = () => { + props.onShow && props.onShow(); + }; + + const onExit = () => { + DomHandler.removeClass(document.body, 'p-overflow-hidden'); + DomHandler.addClass(maskRef.current, 'p-component-overlay-leave'); + }; + + const onExited = () => { + ZIndexUtils.clear(maskRef.current); + + props.onHide && props.onHide(); + }; + + const isAutoPlayActive = () => { + return slideShowActiveState; + }; + + const startSlideShow = () => { + setSlideShowActiveState(true); + }; + + const stopSlideShow = () => { + setSlideShowActiveState(false); + }; + + const getPositionClassName = (preClassName, position) => { + const positions = ['top', 'left', 'bottom', 'right']; + const pos = positions.find((item) => item === position); + + return pos ? `${preClassName}-${pos}` : ''; + }; + + React.useEffect(() => { + if (props.value && props.value.length < numVisibleState) { + setNumVisibleState(props.value.length); + } + }, [props.value, numVisibleState]); + + React.useEffect(() => { + setNumVisibleState(props.numVisible); + }, [props.numVisible]); + + useUnmountEffect(() => { + if (slideShowActiveState) { + stopSlideShow(); + } + + ZIndexUtils.clear(maskRef.current); + }); + + React.useImperativeHandle(ref, () => ({ + props, + show, + hide, + isAutoPlayActive, + startSlideShow, + stopSlideShow, + getElement: () => elementRef.current, + getPreviewContent: () => previewContentRef.current + })); + + const createHeader = () => { + if (props.header) { + return
    {props.header}
    ; + } + + return null; + }; + + const createFooter = () => { + if (props.footer) { + return
    {props.footer}
    ; + } + + return null; + }; + + const createElement = () => { + const otherProps = ObjectUtils.findDiffKeys(props, Galleria.defaultProps); + const thumbnailsPosClassName = props.showThumbnails && getPositionClassName('p-galleria-thumbnails', props.thumbnailsPosition); + const indicatorPosClassName = props.showIndicators && getPositionClassName('p-galleria-indicators', props.indicatorsPosition); + const galleriaClassName = classNames( + 'p-galleria p-component', + props.className, + { + 'p-galleria-fullscreen': props.fullScreen, + 'p-galleria-indicator-onitem': props.showIndicatorsOnItem, + 'p-galleria-item-nav-onhover': props.showItemNavigatorsOnHover && !props.fullScreen + }, + thumbnailsPosClassName, + indicatorPosClassName ); - return - } + const closeIcon = props.fullScreen && ( + + ); - return element; - } + const header = createHeader(); + const footer = createFooter(); + const element = ( +
    + {closeIcon} + {header} +
    + + + {props.showThumbnails && ( + + )} +
    + {footer} +
    + ); - return ObjectUtils.isNotEmpty(props.value) && createGalleria(); -})); + return element; + }; + + const createGalleria = () => { + const element = createElement(); + + if (props.fullScreen) { + const maskClassName = classNames('p-galleria-mask', { + 'p-galleria-visible': visibleState + }); + + const galleriaWrapper = ( +
    + + {element} + +
    + ); + + return ; + } + + return element; + }; + + return ObjectUtils.isNotEmpty(props.value) && createGalleria(); + }) +); Galleria.displayName = 'Galleria'; Galleria.defaultProps = { @@ -231,12 +268,12 @@ Galleria.defaultProps = { autoPlay: false, transitionInterval: 4000, showThumbnails: true, - thumbnailsPosition: "bottom", - verticalThumbnailViewPortHeight: "300px", + thumbnailsPosition: 'bottom', + verticalThumbnailViewPortHeight: '300px', showIndicators: false, showIndicatorsOnItem: false, - indicatorsPosition: "bottom", + indicatorsPosition: 'bottom', baseZIndex: 0, transitionOptions: null, onItemChange: null -} +}; diff --git a/components/lib/galleria/GalleriaItem.js b/components/lib/galleria/GalleriaItem.js index 9881e8e48d..37b952ef86 100644 --- a/components/lib/galleria/GalleriaItem.js +++ b/components/lib/galleria/GalleriaItem.js @@ -3,194 +3,184 @@ import { useMountEffect } from '../hooks/Hooks'; import { Ripple } from '../ripple/Ripple'; import { classNames } from '../utils/Utils'; -export const GalleriaItem = React.memo(React.forwardRef((props, ref) => { +export const GalleriaItem = React.memo( + React.forwardRef((props, ref) => { + const next = () => { + const nextItemIndex = props.activeItemIndex + 1; - const next = () => { - const nextItemIndex = props.activeItemIndex + 1; + props.onActiveItemChange({ + index: props.circular && props.value.length - 1 === props.activeItemIndex ? 0 : nextItemIndex + }); + }; - props.onActiveItemChange({ - index: props.circular && (props.value.length - 1) === props.activeItemIndex ? 0 : nextItemIndex - }); - } + const prev = () => { + const prevItemIndex = props.activeItemIndex !== 0 ? props.activeItemIndex - 1 : 0; - const prev = () => { - const prevItemIndex = props.activeItemIndex !== 0 ? props.activeItemIndex - 1 : 0; + props.onActiveItemChange({ + index: props.circular && props.activeItemIndex === 0 ? props.value.length - 1 : prevItemIndex + }); + }; - props.onActiveItemChange({ - index: props.circular && props.activeItemIndex === 0 ? props.value.length - 1 : prevItemIndex - }); - } - - const stopSlideShow = () => { - if (props.slideShowActive && props.stopSlideShow) { - props.stopSlideShow(); - } - } - - const navBackward = (e) => { - stopSlideShow(); - prev(); - - if (e && e.cancelable) { - e.preventDefault(); - } - } - - const navForward = (e) => { - stopSlideShow(); - next(); - - if (e && e.cancelable) { - e.preventDefault(); - } - } - - const onIndicatorClick = (index) => { - stopSlideShow(); - props.onActiveItemChange({ - index - }); - } + const stopSlideShow = () => { + if (props.slideShowActive && props.stopSlideShow) { + props.stopSlideShow(); + } + }; - const onIndicatorMouseEnter = (index) => { - if (props.changeItemOnIndicatorHover) { + const navBackward = (e) => { stopSlideShow(); + prev(); - props.onActiveItemChange({ - index - }); - } - } + if (e && e.cancelable) { + e.preventDefault(); + } + }; - const onIndicatorKeyDown = (event, index) => { - if (event.which === 13) { + const navForward = (e) => { stopSlideShow(); + next(); + if (e && e.cancelable) { + e.preventDefault(); + } + }; + + const onIndicatorClick = (index) => { + stopSlideShow(); props.onActiveItemChange({ index }); - } - } - - useMountEffect(() => { - if (props.autoPlay) { - props.startSlideShow(); - } - }); - - const createBackwardNavigator = () => { - if (props.showItemNavigators) { - const isDisabled = !props.circular && props.activeItemIndex === 0; - const buttonClassName = classNames('p-galleria-item-prev p-galleria-item-nav p-link', { - 'p-disabled': isDisabled - }); + }; - return ( - - ) - } - - return null; - } - - const createForwardNavigator = () => { - if (props.showItemNavigators) { - const isDisabled = !props.circular && props.activeItemIndex === (props.value.length - 1); - const buttonClassName = classNames('p-galleria-item-next p-galleria-item-nav p-link', { - 'p-disabled': isDisabled - }); + const onIndicatorMouseEnter = (index) => { + if (props.changeItemOnIndicatorHover) { + stopSlideShow(); - return ( - - ) - } + props.onActiveItemChange({ + index + }); + } + }; - return null; - } + const onIndicatorKeyDown = (event, index) => { + if (event.which === 13) { + stopSlideShow(); - const createCaption = () => { - if (props.caption) { - const content = props.caption(props.value[props.activeItemIndex]); + props.onActiveItemChange({ + index + }); + } + }; - return ( -
    - {content} -
    - ) - } + useMountEffect(() => { + if (props.autoPlay) { + props.startSlideShow(); + } + }); - return null; - } + const createBackwardNavigator = () => { + if (props.showItemNavigators) { + const isDisabled = !props.circular && props.activeItemIndex === 0; + const buttonClassName = classNames('p-galleria-item-prev p-galleria-item-nav p-link', { + 'p-disabled': isDisabled + }); + + return ( + + ); + } - const createIndicator = (index) => { - const key = 'p-galleria-indicator-' + index; - const isActive = props.activeItemIndex === index; - const className = classNames('p-galleria-indicator', { - 'p-highlight': isActive - }); - let indicator = props.indicator && props.indicator(index); + return null; + }; + + const createForwardNavigator = () => { + if (props.showItemNavigators) { + const isDisabled = !props.circular && props.activeItemIndex === props.value.length - 1; + const buttonClassName = classNames('p-galleria-item-next p-galleria-item-nav p-link', { + 'p-disabled': isDisabled + }); + + return ( + + ); + } - if (!indicator) { - indicator = ( - - ); - } + return null; + }; - return ( -
  • onIndicatorClick(index)} onMouseEnter={() => onIndicatorMouseEnter(index)} onKeyDown={(e) => onIndicatorKeyDown(e, index)}> - {indicator} -
  • - ) - } - - const createIndicators = () => { - if (props.showIndicators) { - const className = classNames('p-galleria-indicators p-reset', props.indicatorsContentClassName); - let indicators = []; - - for (let i = 0; i < props.value.length; i++) { - indicators.push(createIndicator(i)); + const createCaption = () => { + if (props.caption) { + const content = props.caption(props.value[props.activeItemIndex]); + + return
    {content}
    ; + } + + return null; + }; + + const createIndicator = (index) => { + const key = 'p-galleria-indicator-' + index; + const isActive = props.activeItemIndex === index; + const className = classNames('p-galleria-indicator', { + 'p-highlight': isActive + }); + let indicator = props.indicator && props.indicator(index); + + if (!indicator) { + indicator = ( + + ); } return ( -
      - {indicators} -
    - ) - } - - return null; - } - - const content = props.itemTemplate && props.itemTemplate(props.value[props.activeItemIndex]); - const backwardNavigator = createBackwardNavigator(); - const forwardNavigator = createForwardNavigator(); - const caption = createCaption(); - const indicators = createIndicators(); - - return ( -
    -
    - {backwardNavigator} -
    - {content} +
  • onIndicatorClick(index)} onMouseEnter={() => onIndicatorMouseEnter(index)} onKeyDown={(e) => onIndicatorKeyDown(e, index)}> + {indicator} +
  • + ); + }; + + const createIndicators = () => { + if (props.showIndicators) { + const className = classNames('p-galleria-indicators p-reset', props.indicatorsContentClassName); + let indicators = []; + + for (let i = 0; i < props.value.length; i++) { + indicators.push(createIndicator(i)); + } + + return
      {indicators}
    ; + } + + return null; + }; + + const content = props.itemTemplate && props.itemTemplate(props.value[props.activeItemIndex]); + const backwardNavigator = createBackwardNavigator(); + const forwardNavigator = createForwardNavigator(); + const caption = createCaption(); + const indicators = createIndicators(); + + return ( +
    +
    + {backwardNavigator} +
    {content}
    + {forwardNavigator} + {caption}
    - {forwardNavigator} - {caption} -
    - {indicators} -
    - ) -})); + {indicators} +
    + ); + }) +); GalleriaItem.displayName = 'GalleriaItem'; diff --git a/components/lib/galleria/GalleriaThumbnails.js b/components/lib/galleria/GalleriaThumbnails.js index 45aca8da08..4388e069b0 100644 --- a/components/lib/galleria/GalleriaThumbnails.js +++ b/components/lib/galleria/GalleriaThumbnails.js @@ -5,13 +5,12 @@ import { Ripple } from '../ripple/Ripple'; import { classNames, DomHandler, ObjectUtils, UniqueComponentId } from '../utils/Utils'; const GalleriaThumbnailItem = React.memo((props) => { - const onItemClick = (event) => { props.onItemClick({ originalEvent: event, index: props.index }); - } + }; const onItemKeyDown = (event) => { if (event.which === 13) { @@ -20,16 +19,20 @@ const GalleriaThumbnailItem = React.memo((props) => { index: props.index }); } - } + }; const tabIndex = props.active ? 0 : null; const content = props.template && props.template(props.item); - const className = classNames('p-galleria-thumbnail-item', { - 'p-galleria-thumbnail-item-current': props.current, - 'p-galleria-thumbnail-item-active': props.active, - 'p-galleria-thumbnail-item-start': props.start, - 'p-galleria-thumbnail-item-end': props.end - }, props.className); + const className = classNames( + 'p-galleria-thumbnail-item', + { + 'p-galleria-thumbnail-item-current': props.current, + 'p-galleria-thumbnail-item-active': props.active, + 'p-galleria-thumbnail-item-start': props.start, + 'p-galleria-thumbnail-item-end': props.end + }, + props.className + ); return (
    @@ -37,355 +40,347 @@ const GalleriaThumbnailItem = React.memo((props) => { {content}
    - ) + ); }); -export const GalleriaThumbnails = React.memo(React.forwardRef((props, ref) => { - const [numVisibleState, setNumVisibleState] = React.useState(props.numVisible); - const [totalShiftedItemsState, setTotalShiftedItemsState] = React.useState(0); - const itemsContainerRef = React.useRef(null); - const startPos = React.useRef(null); - const attributeSelector = React.useRef(''); - const thumbnailsStyle = React.useRef(null); - const responsiveOptions = React.useRef(null); - const prevNumVisible = usePrevious(numVisibleState); - const prevActiveItemIndex = usePrevious(props.activeItemIndex); - - const [bindWindowResizeListener,] = useResizeListener({ - listener: () => { - calculatePosition(); - }, when: props.responsiveOptions - }); - - const step = (dir) => { - let totalShiftedItems = totalShiftedItemsState + dir; +export const GalleriaThumbnails = React.memo( + React.forwardRef((props, ref) => { + const [numVisibleState, setNumVisibleState] = React.useState(props.numVisible); + const [totalShiftedItemsState, setTotalShiftedItemsState] = React.useState(0); + const itemsContainerRef = React.useRef(null); + const startPos = React.useRef(null); + const attributeSelector = React.useRef(''); + const thumbnailsStyle = React.useRef(null); + const responsiveOptions = React.useRef(null); + const prevNumVisible = usePrevious(numVisibleState); + const prevActiveItemIndex = usePrevious(props.activeItemIndex); + + const [bindWindowResizeListener] = useResizeListener({ + listener: () => { + calculatePosition(); + }, + when: props.responsiveOptions + }); - if (dir < 0 && (-1 * totalShiftedItems) + numVisibleState > (props.value.length - 1)) { - totalShiftedItems = numVisibleState - props.value.length; - } - else if (dir > 0 && totalShiftedItems > 0) { - totalShiftedItems = 0; - } + const step = (dir) => { + let totalShiftedItems = totalShiftedItemsState + dir; - if (props.circular) { - if (dir < 0 && props.value.length - 1 === props.activeItemIndex) { + if (dir < 0 && -1 * totalShiftedItems + numVisibleState > props.value.length - 1) { + totalShiftedItems = numVisibleState - props.value.length; + } else if (dir > 0 && totalShiftedItems > 0) { totalShiftedItems = 0; } - else if (dir > 0 && props.activeItemIndex === 0) { - totalShiftedItems = numVisibleState - props.value.length; + + if (props.circular) { + if (dir < 0 && props.value.length - 1 === props.activeItemIndex) { + totalShiftedItems = 0; + } else if (dir > 0 && props.activeItemIndex === 0) { + totalShiftedItems = numVisibleState - props.value.length; + } } - } - if (itemsContainerRef.current) { - DomHandler.removeClass(itemsContainerRef.current, 'p-items-hidden'); - itemsContainerRef.current.style.transform = props.isVertical ? `translate3d(0, ${totalShiftedItems * (100 / numVisibleState)}%, 0)` : `translate3d(${totalShiftedItems * (100 / numVisibleState)}%, 0, 0)`; - itemsContainerRef.current.style.transition = 'transform 500ms ease 0s'; - } + if (itemsContainerRef.current) { + DomHandler.removeClass(itemsContainerRef.current, 'p-items-hidden'); + itemsContainerRef.current.style.transform = props.isVertical ? `translate3d(0, ${totalShiftedItems * (100 / numVisibleState)}%, 0)` : `translate3d(${totalShiftedItems * (100 / numVisibleState)}%, 0, 0)`; + itemsContainerRef.current.style.transition = 'transform 500ms ease 0s'; + } - setTotalShiftedItemsState(totalShiftedItems); - } + setTotalShiftedItemsState(totalShiftedItems); + }; - const stopSlideShow = () => { - if (props.slideShowActive && props.stopSlideShow) { - props.stopSlideShow(); - } - } + const stopSlideShow = () => { + if (props.slideShowActive && props.stopSlideShow) { + props.stopSlideShow(); + } + }; - const getMedianItemIndex = () => { - const index = Math.floor(numVisibleState / 2); + const getMedianItemIndex = () => { + const index = Math.floor(numVisibleState / 2); - return (numVisibleState % 2) ? index : index - 1; - } + return numVisibleState % 2 ? index : index - 1; + }; - const navBackward = (e) => { - stopSlideShow(); + const navBackward = (e) => { + stopSlideShow(); - let prevItemIndex = props.activeItemIndex !== 0 ? props.activeItemIndex - 1 : 0; - let diff = prevItemIndex + totalShiftedItemsState; - if ((numVisibleState - diff - 1) > getMedianItemIndex() && ((-1 * totalShiftedItemsState) !== 0 || props.circular)) { - step(1); - } + let prevItemIndex = props.activeItemIndex !== 0 ? props.activeItemIndex - 1 : 0; + let diff = prevItemIndex + totalShiftedItemsState; + if (numVisibleState - diff - 1 > getMedianItemIndex() && (-1 * totalShiftedItemsState !== 0 || props.circular)) { + step(1); + } - props.onActiveItemChange({ - index: props.circular && props.activeItemIndex === 0 ? props.value.length - 1 : prevItemIndex - }); + props.onActiveItemChange({ + index: props.circular && props.activeItemIndex === 0 ? props.value.length - 1 : prevItemIndex + }); - if (e.cancelable) { - e.preventDefault(); - } - } + if (e.cancelable) { + e.preventDefault(); + } + }; - const navForward = (e) => { - stopSlideShow(); + const navForward = (e) => { + stopSlideShow(); - let nextItemIndex = props.activeItemIndex + 1; - if (nextItemIndex + totalShiftedItemsState > getMedianItemIndex() && ((-1 * totalShiftedItemsState) < getTotalPageNumber() - 1 || props.circular)) { - step(-1); - } - - props.onActiveItemChange({ - index: props.circular && (props.value.length - 1) === props.activeItemIndex ? 0 : nextItemIndex - }); + let nextItemIndex = props.activeItemIndex + 1; + if (nextItemIndex + totalShiftedItemsState > getMedianItemIndex() && (-1 * totalShiftedItemsState < getTotalPageNumber() - 1 || props.circular)) { + step(-1); + } - if (e.cancelable) { - e.preventDefault(); - } - } + props.onActiveItemChange({ + index: props.circular && props.value.length - 1 === props.activeItemIndex ? 0 : nextItemIndex + }); - const onItemClick = (event) => { - stopSlideShow(); - - let selectedItemIndex = event.index; - if (selectedItemIndex !== props.activeItemIndex) { - const diff = selectedItemIndex + totalShiftedItemsState; - let dir = 0; - if (selectedItemIndex < props.activeItemIndex) { - dir = (numVisibleState - diff - 1) - getMedianItemIndex(); - if (dir > 0 && (-1 * totalShiftedItemsState) !== 0) { - step(dir); - } + if (e.cancelable) { + e.preventDefault(); } - else { - dir = getMedianItemIndex() - diff; - if (dir < 0 && (-1 * totalShiftedItemsState) < getTotalPageNumber() - 1) { - step(dir); + }; + + const onItemClick = (event) => { + stopSlideShow(); + + let selectedItemIndex = event.index; + if (selectedItemIndex !== props.activeItemIndex) { + const diff = selectedItemIndex + totalShiftedItemsState; + let dir = 0; + if (selectedItemIndex < props.activeItemIndex) { + dir = numVisibleState - diff - 1 - getMedianItemIndex(); + if (dir > 0 && -1 * totalShiftedItemsState !== 0) { + step(dir); + } + } else { + dir = getMedianItemIndex() - diff; + if (dir < 0 && -1 * totalShiftedItemsState < getTotalPageNumber() - 1) { + step(dir); + } } - } - props.onActiveItemChange({ - index: selectedItemIndex - }); - } - } + props.onActiveItemChange({ + index: selectedItemIndex + }); + } + }; - const onTransitionEnd = (e) => { - if (itemsContainerRef.current && e.propertyName === 'transform') { - DomHandler.addClass(itemsContainerRef.current, 'p-items-hidden'); - itemsContainerRef.current.style.transition = ''; - } - } + const onTransitionEnd = (e) => { + if (itemsContainerRef.current && e.propertyName === 'transform') { + DomHandler.addClass(itemsContainerRef.current, 'p-items-hidden'); + itemsContainerRef.current.style.transition = ''; + } + }; - const onTouchStart = (e) => { - let touchobj = e.changedTouches[0]; + const onTouchStart = (e) => { + let touchobj = e.changedTouches[0]; - startPos.current = { - x: touchobj.pageX, - y: touchobj.pageY + startPos.current = { + x: touchobj.pageX, + y: touchobj.pageY + }; }; - } - const onTouchMove = (e) => { - if (e.cancelable) { - e.preventDefault(); - } - } + const onTouchMove = (e) => { + if (e.cancelable) { + e.preventDefault(); + } + }; - const onTouchEnd = (e) => { - let touchobj = e.changedTouches[0]; + const onTouchEnd = (e) => { + let touchobj = e.changedTouches[0]; - if (props.isVertical) { - changePageOnTouch(e, (touchobj.pageY - startPos.current.y)); - } - else { - changePageOnTouch(e, (touchobj.pageX - startPos.current.x)); - } - } + if (props.isVertical) { + changePageOnTouch(e, touchobj.pageY - startPos.current.y); + } else { + changePageOnTouch(e, touchobj.pageX - startPos.current.x); + } + }; - const changePageOnTouch = (e, diff) => { - if (diff < 0) { // left - navForward(e); - } - else { // right - navBackward(e); - } - } + const changePageOnTouch = (e, diff) => { + if (diff < 0) { + // left + navForward(e); + } else { + // right + navBackward(e); + } + }; - const getTotalPageNumber = () => { - return props.value.length > numVisibleState ? (props.value.length - numVisibleState) + 1 : 0; - } + const getTotalPageNumber = () => { + return props.value.length > numVisibleState ? props.value.length - numVisibleState + 1 : 0; + }; - const createStyle = () => { - if (!thumbnailsStyle.current) { - thumbnailsStyle.current = DomHandler.createInlineStyle(PrimeReact.nonce); - } + const createStyle = () => { + if (!thumbnailsStyle.current) { + thumbnailsStyle.current = DomHandler.createInlineStyle(PrimeReact.nonce); + } - let innerHTML = ` + let innerHTML = ` .p-galleria-thumbnail-items[${attributeSelector.current}] .p-galleria-thumbnail-item { - flex: 1 0 ${(100 / numVisibleState)}% + flex: 1 0 ${100 / numVisibleState}% } `; - if (props.responsiveOptions) { - responsiveOptions.current = [...props.responsiveOptions]; - responsiveOptions.current.sort((data1, data2) => { - const value1 = data1.breakpoint; - const value2 = data2.breakpoint; - return ObjectUtils.sort(value1, value2, -1, PrimeReact.locale, PrimeReact.nullSortOrder); - }); + if (props.responsiveOptions) { + responsiveOptions.current = [...props.responsiveOptions]; + responsiveOptions.current.sort((data1, data2) => { + const value1 = data1.breakpoint; + const value2 = data2.breakpoint; + return ObjectUtils.sort(value1, value2, -1, PrimeReact.locale, PrimeReact.nullSortOrder); + }); - for (let i = 0; i < responsiveOptions.current.length; i++) { - let res = responsiveOptions.current[i]; + for (let i = 0; i < responsiveOptions.current.length; i++) { + let res = responsiveOptions.current[i]; - innerHTML += ` + innerHTML += ` @media screen and (max-width: ${res.breakpoint}) { .p-galleria-thumbnail-items[${attributeSelector.current}] .p-galleria-thumbnail-item { - flex: 1 0 ${(100 / res.numVisible)}% + flex: 1 0 ${100 / res.numVisible}% } } - ` + `; + } } - } - thumbnailsStyle.current.innerHTML = innerHTML; - } + thumbnailsStyle.current.innerHTML = innerHTML; + }; + + const calculatePosition = () => { + if (itemsContainerRef.current && responsiveOptions.current) { + let windowWidth = window.innerWidth; + let matchedResponsiveData = { + numVisible: props.numVisible + }; - const calculatePosition = () => { - if (itemsContainerRef.current && responsiveOptions.current) { - let windowWidth = window.innerWidth; - let matchedResponsiveData = { - numVisible: props.numVisible - }; + for (let i = 0; i < responsiveOptions.current.length; i++) { + let res = responsiveOptions.current[i]; - for (let i = 0; i < responsiveOptions.current.length; i++) { - let res = responsiveOptions.current[i]; + if (parseInt(res.breakpoint, 10) >= windowWidth) { + matchedResponsiveData = res; + } + } - if (parseInt(res.breakpoint, 10) >= windowWidth) { - matchedResponsiveData = res; + if (numVisibleState !== matchedResponsiveData.numVisible) { + setNumVisibleState(matchedResponsiveData.numVisible); } } + }; - if (numVisibleState !== matchedResponsiveData.numVisible) { - setNumVisibleState(matchedResponsiveData.numVisible); + useMountEffect(() => { + if (itemsContainerRef.current) { + attributeSelector.current = UniqueComponentId(); + itemsContainerRef.current.setAttribute(attributeSelector.current, ''); } - } - } - useMountEffect(() => { - if (itemsContainerRef.current) { - attributeSelector.current = UniqueComponentId(); - itemsContainerRef.current.setAttribute(attributeSelector.current, ''); - } + createStyle(); + calculatePosition(); + bindWindowResizeListener(); + }); - createStyle(); - calculatePosition(); - bindWindowResizeListener(); - }); + useUpdateEffect(() => { + let totalShiftedItems = totalShiftedItemsState; + + if (prevNumVisible !== numVisibleState || prevActiveItemIndex !== props.activeItemIndex) { + if (props.activeItemIndex <= getMedianItemIndex()) { + totalShiftedItems = 0; + } else if (props.value.length - numVisibleState + getMedianItemIndex() < props.activeItemIndex) { + totalShiftedItems = numVisibleState - props.value.length; + } else if (props.value.length - numVisibleState < props.activeItemIndex && numVisibleState % 2 === 0) { + totalShiftedItems = props.activeItemIndex * -1 + getMedianItemIndex() + 1; + } else { + totalShiftedItems = props.activeItemIndex * -1 + getMedianItemIndex(); + } - useUpdateEffect(() => { - let totalShiftedItems = totalShiftedItemsState; + if (totalShiftedItems !== totalShiftedItemsState) { + setTotalShiftedItemsState(totalShiftedItems); + } - if (prevNumVisible !== numVisibleState || prevActiveItemIndex !== props.activeItemIndex) { - if (props.activeItemIndex <= getMedianItemIndex()) { - totalShiftedItems = 0; - } - else if (props.value.length - numVisibleState + getMedianItemIndex() < props.activeItemIndex) { - totalShiftedItems = numVisibleState - props.value.length; - } - else if (props.value.length - numVisibleState < props.activeItemIndex && numVisibleState % 2 === 0) { - totalShiftedItems = (props.activeItemIndex * -1) + getMedianItemIndex() + 1; - } - else { - totalShiftedItems = (props.activeItemIndex * -1) + getMedianItemIndex(); - } + itemsContainerRef.current.style.transform = props.isVertical ? `translate3d(0, ${totalShiftedItems * (100 / numVisibleState)}%, 0)` : `translate3d(${totalShiftedItems * (100 / numVisibleState)}%, 0, 0)`; - if (totalShiftedItems !== totalShiftedItemsState) { - setTotalShiftedItemsState(totalShiftedItems); + if (prevActiveItemIndex !== props.activeItemIndex) { + DomHandler.removeClass(itemsContainerRef.current, 'p-items-hidden'); + itemsContainerRef.current.style.transition = 'transform 500ms ease 0s'; + } } + }); - itemsContainerRef.current.style.transform = props.isVertical ? `translate3d(0, ${totalShiftedItems * (100 / numVisibleState)}%, 0)` : `translate3d(${totalShiftedItems * (100 / numVisibleState)}%, 0, 0)`; + const createItems = () => { + return props.value.map((item, index) => { + const firstIndex = totalShiftedItemsState * -1; + const lastIndex = firstIndex + numVisibleState - 1; + const isActive = firstIndex <= index && lastIndex >= index; + const start = firstIndex === index; + const end = lastIndex === index; + const current = props.activeItemIndex === index; - if (prevActiveItemIndex !== props.activeItemIndex) { - DomHandler.removeClass(itemsContainerRef.current, 'p-items-hidden'); - itemsContainerRef.current.style.transition = 'transform 500ms ease 0s'; + return ; + }); + }; + + const createBackwardNavigator = () => { + if (props.showThumbnailNavigators) { + let isDisabled = (!props.circular && props.activeItemIndex === 0) || props.value.length <= numVisibleState; + let buttonClassName = classNames('p-galleria-thumbnail-prev p-link', { + 'p-disabled': isDisabled + }), + iconClassName = classNames('p-galleria-thumbnail-prev-icon pi', { + 'pi-chevron-left': !props.isVertical, + 'pi-chevron-up': props.isVertical + }); + + return ( + + ); } - } - }); - - const createItems = () => { - return props.value.map((item, index) => { - const firstIndex = totalShiftedItemsState * -1; - const lastIndex = firstIndex + numVisibleState - 1; - const isActive = firstIndex <= index && lastIndex >= index; - const start = firstIndex === index; - const end = lastIndex === index; - const current = props.activeItemIndex === index; - - return - }); - } - - const createBackwardNavigator = () => { - if (props.showThumbnailNavigators) { - let isDisabled = (!props.circular && props.activeItemIndex === 0) || (props.value.length <= numVisibleState); - let buttonClassName = classNames('p-galleria-thumbnail-prev p-link', { - 'p-disabled': isDisabled - }), - iconClassName = classNames('p-galleria-thumbnail-prev-icon pi', { - 'pi-chevron-left': !props.isVertical, - 'pi-chevron-up': props.isVertical + + return null; + }; + + const createForwardNavigator = () => { + if (props.showThumbnailNavigators) { + const isDisabled = (!props.circular && props.activeItemIndex === props.value.length - 1) || props.value.length <= numVisibleState; + const buttonClassName = classNames('p-galleria-thumbnail-next p-link', { + 'p-disabled': isDisabled + }); + const iconClassName = classNames('p-galleria-thumbnail-next-icon pi', { + 'pi-chevron-right': !props.isVertical, + 'pi-chevron-down': props.isVertical }); - return ( - - ) - } + return ( + + ); + } - return null; - } + return null; + }; - const createForwardNavigator = () => { - if (props.showThumbnailNavigators) { - const isDisabled = (!props.circular && props.activeItemIndex === (props.value.length - 1)) || (props.value.length <= numVisibleState); - const buttonClassName = classNames('p-galleria-thumbnail-next p-link', { - 'p-disabled': isDisabled - }); - const iconClassName = classNames('p-galleria-thumbnail-next-icon pi', { - 'pi-chevron-right': !props.isVertical, - 'pi-chevron-down': props.isVertical - }); + const createContent = () => { + const items = createItems(); + const height = props.isVertical ? props.contentHeight : ''; + const backwardNavigator = createBackwardNavigator(); + const forwardNavigator = createForwardNavigator(); return ( - - ) - } - - return null; - } - - const createContent = () => { - const items = createItems(); - const height = props.isVertical ? props.contentHeight : ''; - const backwardNavigator = createBackwardNavigator(); - const forwardNavigator = createForwardNavigator(); - - return ( -
    - {backwardNavigator} -
    -
    - {items} +
    + {backwardNavigator} +
    +
    + {items} +
    + {forwardNavigator}
    - {forwardNavigator} -
    - ) - } + ); + }; - const content = createContent(); + const content = createContent(); - return ( -
    - {content} -
    - ) -})); + return
    {content}
    ; + }) +); GalleriaThumbnailItem.displayName = 'GalleriaThumbnailItem'; GalleriaThumbnails.displayName = 'GalleriaThumbnails'; diff --git a/components/lib/gmap/GMap.js b/components/lib/gmap/GMap.js index 2e6f0a9a69..324af530fe 100644 --- a/components/lib/gmap/GMap.js +++ b/components/lib/gmap/GMap.js @@ -3,123 +3,125 @@ import * as React from 'react'; import { useMountEffect, useUpdateEffect } from '../hooks/Hooks'; import { ObjectUtils } from '../utils/Utils'; -export const GMap = React.memo(React.forwardRef((props, ref) => { - const elementRef = React.useRef(null); - const map = React.useRef(null); - const prevOverlays = React.useRef(null); +export const GMap = React.memo( + React.forwardRef((props, ref) => { + const elementRef = React.useRef(null); + const map = React.useRef(null); + const prevOverlays = React.useRef(null); - const initMap = () => { - map.current = new google.maps.Map(elementRef.current, props.options); + const initMap = () => { + map.current = new google.maps.Map(elementRef.current, props.options); - if (props.onMapReady) { - props.onMapReady({ - map: map.current - }); - } - - initOverlays(props.overlays); - - bindMapEvent('click', props.onMapClick); - bindMapEvent('dragend', props.onMapDragEnd); - bindMapEvent('zoom_changed', props.onZoomChanged); - } - - const initOverlays = (overlays) => { - if (overlays) { - for (let overlay of overlays) { - overlay.setMap(map.current); - bindOverlayEvents(overlay); - } - - prevOverlays.current = overlays; - } - } - - const bindOverlayEvents = (overlay) => { - overlay.addListener('click', (event) => { - if (props.onOverlayClick) { - props.onOverlayClick({ - originalEvent: event, - overlay: overlay, + if (props.onMapReady) { + props.onMapReady({ map: map.current }); } - }); - if (overlay.getDraggable()) { - bindDragEvents(overlay); - } - } + initOverlays(props.overlays); - const bindDragEvents = (overlay) => { - bindDragEvent(overlay, 'dragstart', props.onOverlayDragStart); - bindDragEvent(overlay, 'drag', props.onOverlayDrag); - bindDragEvent(overlay, 'dragend', props.onOverlayDragEnd); - } + bindMapEvent('click', props.onMapClick); + bindMapEvent('dragend', props.onMapDragEnd); + bindMapEvent('zoom_changed', props.onZoomChanged); + }; - const bindMapEvent = (eventName, callback) => { - map.current.addListener(eventName, (event) => { - callback && callback(event); - }); - } - - const bindDragEvent = (overlay, eventName, callback) => { - overlay.addListener(eventName, (event) => { - if (callback) { - callback({ - originalEvent: event, - overlay: overlay, - map: map.current - }); + const initOverlays = (overlays) => { + if (overlays) { + for (let overlay of overlays) { + overlay.setMap(map.current); + bindOverlayEvents(overlay); + } + + prevOverlays.current = overlays; } - }); - } + }; + + const bindOverlayEvents = (overlay) => { + overlay.addListener('click', (event) => { + if (props.onOverlayClick) { + props.onOverlayClick({ + originalEvent: event, + overlay: overlay, + map: map.current + }); + } + }); - const removeOverlays = (overlays) => { - if (overlays) { - for (let overlay of overlays) { - overlay.setMap(null); - unbindOverlayEvents(overlay); + if (overlay.getDraggable()) { + bindDragEvents(overlay); } - } - } + }; - const unbindOverlayEvents = (overlay) => { - google.maps.event.clearListeners(overlay, 'click'); + const bindDragEvents = (overlay) => { + bindDragEvent(overlay, 'dragstart', props.onOverlayDragStart); + bindDragEvent(overlay, 'drag', props.onOverlayDrag); + bindDragEvent(overlay, 'dragend', props.onOverlayDragEnd); + }; - if (overlay.getDraggable()) { - google.maps.event.clearListeners(overlay, 'dragstart'); - google.maps.event.clearListeners(overlay, 'drag'); - google.maps.event.clearListeners(overlay, 'dragend'); - } - } + const bindMapEvent = (eventName, callback) => { + map.current.addListener(eventName, (event) => { + callback && callback(event); + }); + }; + + const bindDragEvent = (overlay, eventName, callback) => { + overlay.addListener(eventName, (event) => { + if (callback) { + callback({ + originalEvent: event, + overlay: overlay, + map: map.current + }); + } + }); + }; + + const removeOverlays = (overlays) => { + if (overlays) { + for (let overlay of overlays) { + overlay.setMap(null); + unbindOverlayEvents(overlay); + } + } + }; - const getMap = () => { - return map.current; - } + const unbindOverlayEvents = (overlay) => { + google.maps.event.clearListeners(overlay, 'click'); - useMountEffect(() => { - initMap(); - }); + if (overlay.getDraggable()) { + google.maps.event.clearListeners(overlay, 'dragstart'); + google.maps.event.clearListeners(overlay, 'drag'); + google.maps.event.clearListeners(overlay, 'dragend'); + } + }; + + const getMap = () => { + return map.current; + }; - useUpdateEffect(() => { - initOverlays(props.overlays); + useMountEffect(() => { + initMap(); + }); - return () => { - removeOverlays(prevOverlays.current); - } - }); + useUpdateEffect(() => { + initOverlays(props.overlays); + + return () => { + removeOverlays(prevOverlays.current); + }; + }); - React.useImperativeHandle(ref, () => ({ - props, - getMap, - getElement: () => elementRef.current - })); + React.useImperativeHandle(ref, () => ({ + props, + getMap, + getElement: () => elementRef.current + })); - const otherProps = ObjectUtils.findDiffKeys(props, GMap.defaultProps); + const otherProps = ObjectUtils.findDiffKeys(props, GMap.defaultProps); - return
    -})); + return
    ; + }) +); GMap.displayName = 'GMap'; GMap.defaultProps = { @@ -136,4 +138,4 @@ GMap.defaultProps = { onOverlayDrag: null, onOverlayDragEnd: null, onOverlayClick: null -} +}; diff --git a/components/lib/gmap/gmap.d.ts b/components/lib/gmap/gmap.d.ts index a4f85ae62c..145259b70e 100644 --- a/components/lib/gmap/gmap.d.ts +++ b/components/lib/gmap/gmap.d.ts @@ -6,7 +6,7 @@ interface GMapEventParams { map: any; } -export interface GMapProps extends Omit, HTMLDivElement>, 'ref'> { +export interface GMapProps extends Omit, HTMLDivElement>, 'ref'> { options?: object; overlays?: any[]; onMapReady?(map: any): void; @@ -20,7 +20,7 @@ export interface GMapProps extends Omit { +export declare class GMap extends React.Component { public getMap(): any; public getElement(): HTMLDivElement; } diff --git a/components/lib/hooks/useEventListener.js b/components/lib/hooks/useEventListener.js index f03e43976d..5566f10dee 100644 --- a/components/lib/hooks/useEventListener.js +++ b/components/lib/hooks/useEventListener.js @@ -16,23 +16,22 @@ export const useEventListener = ({ target = 'document', type, listener, options, } if (!listenerRef.current && targetRef.current) { - listenerRef.current = event => listener && listener(event); + listenerRef.current = (event) => listener && listener(event); targetRef.current.addEventListener(type, listenerRef.current, options); } - } + }; const unbind = () => { if (listenerRef.current) { targetRef.current.removeEventListener(type, listenerRef.current, options); listenerRef.current = null; } - } + }; React.useEffect(() => { if (when) { targetRef.current = DomHandler.getTargetElement(target); - } - else { + } else { unbind(); targetRef.current = null; } @@ -50,5 +49,5 @@ export const useEventListener = ({ target = 'document', type, listener, options, }); return [bind, unbind]; -} +}; /* eslint-enable */ diff --git a/components/lib/hooks/useInterval.js b/components/lib/hooks/useInterval.js index 3cd92f6765..694525bd6d 100644 --- a/components/lib/hooks/useInterval.js +++ b/components/lib/hooks/useInterval.js @@ -20,8 +20,7 @@ export const useInterval = (fn, delay = 0, when = true) => { if (when) { timeout.current = setInterval(callback, delay); return clear; - } - else { + } else { clear(); } }, [delay, when]); @@ -31,5 +30,5 @@ export const useInterval = (fn, delay = 0, when = true) => { }); return [clear]; -} +}; /* eslint-enable */ diff --git a/components/lib/hooks/useOverlayListener.js b/components/lib/hooks/useOverlayListener.js index 5968ad8c71..c34d03cc29 100644 --- a/components/lib/hooks/useOverlayListener.js +++ b/components/lib/hooks/useOverlayListener.js @@ -17,44 +17,44 @@ export const useOverlayListener = ({ target, overlay, listener, when = true }) = * @param {boolean} options.valid It is controlled by PrimeReact. It is determined whether it is valid or not according to some custom validation. */ const [bindDocumentClickListener, unbindDocumentClickListener] = useEventListener({ - type: 'click', listener: event => { - listener && listener(event, { type: 'outside', valid: (event.which !== 3) && isOutsideClicked(event) }); + type: 'click', + listener: (event) => { + listener && listener(event, { type: 'outside', valid: event.which !== 3 && isOutsideClicked(event) }); } }); const [bindWindowResizeListener, unbindWindowResizeListener] = useResizeListener({ - listener: event => { + listener: (event) => { listener && listener(event, { type: 'resize', valid: !DomHandler.isTouchDevice() }); } }); const [bindOverlayScrollListener, unbindOverlayScrollListener] = useOverlayScrollListener({ - target: targetRef, listener: event => { + target: targetRef, + listener: (event) => { listener && listener(event, { type: 'scroll', valid: true }); } }); const isOutsideClicked = (event) => { - return targetRef.current && !(targetRef.current.isSameNode(event.target) || targetRef.current.contains(event.target) - || (overlayRef.current && overlayRef.current.contains(event.target))); - } + return targetRef.current && !(targetRef.current.isSameNode(event.target) || targetRef.current.contains(event.target) || (overlayRef.current && overlayRef.current.contains(event.target))); + }; const bind = () => { bindDocumentClickListener(); bindWindowResizeListener(); bindOverlayScrollListener(); - } + }; const unbind = () => { unbindDocumentClickListener(); unbindWindowResizeListener(); unbindOverlayScrollListener(); - } + }; React.useEffect(() => { if (when) { targetRef.current = DomHandler.getTargetElement(target); overlayRef.current = DomHandler.getTargetElement(overlay); - } - else { + } else { unbind(); targetRef.current = overlayRef.current = null; } @@ -70,5 +70,5 @@ export const useOverlayListener = ({ target, overlay, listener, when = true }) = }); return [bind, unbind]; -} +}; /* eslint-enable */ diff --git a/components/lib/hooks/useOverlayScrollListener.js b/components/lib/hooks/useOverlayScrollListener.js index b3891760ec..947ccc7459 100644 --- a/components/lib/hooks/useOverlayScrollListener.js +++ b/components/lib/hooks/useOverlayScrollListener.js @@ -17,12 +17,12 @@ export const useOverlayScrollListener = ({ target, listener, options, when = tru } if (!listenerRef.current && targetRef.current) { - const nodes = scrollableParents.current = DomHandler.getScrollableParents(targetRef.current); + const nodes = (scrollableParents.current = DomHandler.getScrollableParents(targetRef.current)); - listenerRef.current = event => listener && listener(event); + listenerRef.current = (event) => listener && listener(event); nodes.forEach((node) => node.addEventListener('scroll', listenerRef.current, options)); } - } + }; const unbind = () => { if (listenerRef.current) { @@ -31,13 +31,12 @@ export const useOverlayScrollListener = ({ target, listener, options, when = tru listenerRef.current = null; } - } + }; React.useEffect(() => { if (when) { targetRef.current = DomHandler.getTargetElement(target); - } - else { + } else { unbind(); targetRef.current = null; } @@ -55,5 +54,5 @@ export const useOverlayScrollListener = ({ target, listener, options, when = tru }); return [bind, unbind]; -} +}; /* eslint-enable */ diff --git a/components/lib/hooks/usePrevious.js b/components/lib/hooks/usePrevious.js index 6a979b187a..ba1959912d 100644 --- a/components/lib/hooks/usePrevious.js +++ b/components/lib/hooks/usePrevious.js @@ -8,4 +8,4 @@ export const usePrevious = (newValue) => { }); return ref.current; -} +}; diff --git a/components/lib/hooks/useStorage.js b/components/lib/hooks/useStorage.js index ecb81629be..dab9ad825d 100644 --- a/components/lib/hooks/useStorage.js +++ b/components/lib/hooks/useStorage.js @@ -11,7 +11,6 @@ import { useEventListener } from './useEventListener'; * @returns a stateful value, and a function to update it. */ export const useStorage = (initialValue, key, storage = 'local') => { - // Since the local storage API isn't available in server-rendering environments, // we check that typeof window !== 'undefined' to make SSR and SSG work properly. const storageAvailable = typeof window !== 'undefined'; @@ -19,7 +18,9 @@ export const useStorage = (initialValue, key, storage = 'local') => { // subscribe to window storage event so changes in one tab to a stored value // are properly reflected in all tabs const [bindWindowStorageListener, unbindWindowStorageListener] = useEventListener({ - target: 'window', type: 'storage', listener: event => { + target: 'window', + type: 'storage', + listener: (event) => { const area = storage === 'local' ? window.localStorage : window.sessionStorage; if (event.storageArea === area && event.key === key) { setStoredValue(event.newValue || undefined); @@ -32,9 +33,7 @@ export const useStorage = (initialValue, key, storage = 'local') => { return initialValue; } try { - const item = storage === 'local' ? - window.localStorage.getItem(key) : - window.sessionStorage.getItem(key); + const item = storage === 'local' ? window.localStorage.getItem(key) : window.sessionStorage.getItem(key); return item ? JSON.parse(item) : initialValue; } catch (error) { // If error also return initialValue @@ -49,9 +48,7 @@ export const useStorage = (initialValue, key, storage = 'local') => { setStoredValue(valueToStore); if (storageAvailable) { const serializedValue = JSON.stringify(valueToStore); - storage === 'local' ? - window.localStorage.setItem(key, serializedValue) : - window.sessionStorage.setItem(key, serializedValue); + storage === 'local' ? window.localStorage.setItem(key, serializedValue) : window.sessionStorage.setItem(key, serializedValue); } } catch (error) { throw new Error(`PrimeReact useStorage: Failed to serialize the value at key: ${key}`); @@ -64,7 +61,7 @@ export const useStorage = (initialValue, key, storage = 'local') => { }, []); return [storedValue, setValue]; -} +}; /** * Hook to wrap around useState that stores the value in the browser local storage. @@ -75,7 +72,7 @@ export const useStorage = (initialValue, key, storage = 'local') => { */ export const useLocalStorage = (initialValue, key) => { return useStorage(initialValue, key, 'local'); -} +}; /** * Hook to wrap around useState that stores the value in the browser session storage. @@ -86,5 +83,5 @@ export const useLocalStorage = (initialValue, key) => { */ export const useSessionStorage = (initialValue, key) => { return useStorage(initialValue, key, 'session'); -} +}; /* eslint-enable */ diff --git a/components/lib/hooks/useTimeout.js b/components/lib/hooks/useTimeout.js index a6ab7738ed..289b64176b 100644 --- a/components/lib/hooks/useTimeout.js +++ b/components/lib/hooks/useTimeout.js @@ -20,8 +20,7 @@ export const useTimeout = (fn, delay = 0, when = true) => { if (when) { timeout.current = setTimeout(callback, delay); return clear; - } - else { + } else { clear(); } }, [delay, when]); @@ -31,5 +30,5 @@ export const useTimeout = (fn, delay = 0, when = true) => { }); return [clear]; -} +}; /* eslint-enable */ diff --git a/components/lib/hooks/useUpdateEffect.js b/components/lib/hooks/useUpdateEffect.js index 45f853fb6a..c83b3d9253 100644 --- a/components/lib/hooks/useUpdateEffect.js +++ b/components/lib/hooks/useUpdateEffect.js @@ -11,5 +11,5 @@ export const useUpdateEffect = (fn, deps) => { return fn && fn(); }, deps); -} +}; /* eslint-enable */ diff --git a/components/lib/image/Image.js b/components/lib/image/Image.js index 305343080c..ec83dd39c0 100644 --- a/components/lib/image/Image.js +++ b/components/lib/image/Image.js @@ -5,170 +5,180 @@ import { useUnmountEffect } from '../hooks/Hooks'; import { Portal } from '../portal/Portal'; import { classNames, DomHandler, ObjectUtils, ZIndexUtils } from '../utils/Utils'; -export const Image = React.memo(React.forwardRef((props, ref) => { - const [maskVisibleState, setMaskVisibleState] = React.useState(false); - const [previewVisibleState, setPreviewVisibleState] = React.useState(false); - const [rotateState, setRotateState] = React.useState(0); - const [scaleState, setScaleState] = React.useState(1); - const elementRef = React.useRef(null); - const imageRef = React.useRef(null); - const maskRef = React.useRef(null); - const previewRef = React.useRef(null); - const previewClick = React.useRef(false); - - const onImageClick = () => { - if (props.preview) { - setMaskVisibleState(true); - setTimeout(() => { - setPreviewVisibleState(true); - }, 25); - } - } - - const onPreviewImageClick = () => { - previewClick.current = true; - } - - const onMaskClick = () => { - if (!previewClick.current) { - setPreviewVisibleState(false); - setRotateState(0); - setScaleState(1); - } - - previewClick.current = false; - } - - const onDownload = () => { - const { alt: name, src } = props; - DomHandler.saveAs({ name, src }); - previewClick.current = true; - } - - const rotateRight = () => { - setRotateState(prevRotate => prevRotate + 90); - previewClick.current = true; - } - - const rotateLeft = () => { - setRotateState(prevRotate => prevRotate - 90); - previewClick.current = true; - } - - const zoomIn = () => { - setScaleState(prevScale => prevScale + 0.1); - previewClick.current = true; - } - - const zoomOut = () => { - setScaleState(prevScale => prevScale - 0.1); - previewClick.current = true; - } - - const onEntering = () => { - ZIndexUtils.set('modal', maskRef.current, PrimeReact.autoZIndex, PrimeReact.zIndex['modal']); - } - - const onEntered = () => { - props.onShow && props.onShow(); - } - - const onExit = () => { - DomHandler.addClass(maskRef.current, 'p-component-overlay-leave'); - } - - const onExiting = () => { - props.onHide && props.onHide(); - } - - const onExited = () => { - ZIndexUtils.clear(maskRef.current); - - setMaskVisibleState(false); - } - - useUnmountEffect(() => { - maskRef.current && ZIndexUtils.clear(maskRef.current); - }); - - const createPreview = () => { - if (props.preview) { - return ( -
    - {content} -
    - ) - } +export const Image = React.memo( + React.forwardRef((props, ref) => { + const [maskVisibleState, setMaskVisibleState] = React.useState(false); + const [previewVisibleState, setPreviewVisibleState] = React.useState(false); + const [rotateState, setRotateState] = React.useState(0); + const [scaleState, setScaleState] = React.useState(1); + const elementRef = React.useRef(null); + const imageRef = React.useRef(null); + const maskRef = React.useRef(null); + const previewRef = React.useRef(null); + const previewClick = React.useRef(false); + + const onImageClick = () => { + if (props.preview) { + setMaskVisibleState(true); + setTimeout(() => { + setPreviewVisibleState(true); + }, 25); + } + }; + + const onPreviewImageClick = () => { + previewClick.current = true; + }; + + const onMaskClick = () => { + if (!previewClick.current) { + setPreviewVisibleState(false); + setRotateState(0); + setScaleState(1); + } + + previewClick.current = false; + }; + + const onDownload = () => { + const { alt: name, src } = props; + DomHandler.saveAs({ name, src }); + previewClick.current = true; + }; + + const rotateRight = () => { + setRotateState((prevRotate) => prevRotate + 90); + previewClick.current = true; + }; + + const rotateLeft = () => { + setRotateState((prevRotate) => prevRotate - 90); + previewClick.current = true; + }; + + const zoomIn = () => { + setScaleState((prevScale) => prevScale + 0.1); + previewClick.current = true; + }; + + const zoomOut = () => { + setScaleState((prevScale) => prevScale - 0.1); + previewClick.current = true; + }; + + const onEntering = () => { + ZIndexUtils.set('modal', maskRef.current, PrimeReact.autoZIndex, PrimeReact.zIndex['modal']); + }; + + const onEntered = () => { + props.onShow && props.onShow(); + }; + + const onExit = () => { + DomHandler.addClass(maskRef.current, 'p-component-overlay-leave'); + }; + + const onExiting = () => { + props.onHide && props.onHide(); + }; + + const onExited = () => { + ZIndexUtils.clear(maskRef.current); + + setMaskVisibleState(false); + }; + + useUnmountEffect(() => { + maskRef.current && ZIndexUtils.clear(maskRef.current); + }); + + const createPreview = () => { + if (props.preview) { + return ( +
    + {content} +
    + ); + } - return null; - } + return null; + }; - const createElement = () => { - const { downloadable } = props; - const imagePreviewStyle = { transform: 'rotate(' + rotateState + 'deg) scale(' + scaleState + ')' }; - const zoomDisabled = scaleState <= 0.5 || scaleState >= 1.5; - // const rotateClassName = 'p-image-preview-rotate-' + rotateScale; + const createElement = () => { + const { downloadable } = props; + const imagePreviewStyle = { transform: 'rotate(' + rotateState + 'deg) scale(' + scaleState + ')' }; + const zoomDisabled = scaleState <= 0.5 || scaleState >= 1.5; + // const rotateClassName = 'p-image-preview-rotate-' + rotateScale; - return ( -
    -
    - { - downloadable && ( + return ( +
    +
    + {downloadable && ( - ) - } - - - - - -
    - -
    - {props.alt} + )} + + + + +
    -
    -
    - ) - } - - React.useImperativeHandle(ref, () => ({ - props, - getElement: () => elementRef.current, - getImage: () => imageRef.current - })); - - const { src, alt, width, height } = props; - const otherProps = ObjectUtils.findDiffKeys(props, Image.defaultProps); - const containerClassName = classNames('p-image p-component', props.className, { - 'p-image-preview-container': props.preview - }); - const element = createElement(); - const content = props.template ? ObjectUtils.getJSXElement(props.template, props) : ; - const preview = createPreview(); - const image = {alt}; - - return ( - - {image} - {preview} - {maskVisibleState && } - - ) -})); + +
    + {props.alt} +
    +
    +
    + ); + }; + + React.useImperativeHandle(ref, () => ({ + props, + getElement: () => elementRef.current, + getImage: () => imageRef.current + })); + + const { src, alt, width, height } = props; + const otherProps = ObjectUtils.findDiffKeys(props, Image.defaultProps); + const containerClassName = classNames('p-image p-component', props.className, { + 'p-image-preview-container': props.preview + }); + const element = createElement(); + const content = props.template ? ObjectUtils.getJSXElement(props.template, props) : ; + const preview = createPreview(); + const image = {alt}; + + return ( + + {image} + {preview} + {maskVisibleState && } + + ); + }) +); Image.displayName = 'Image'; Image.defaultProps = { @@ -184,4 +194,4 @@ Image.defaultProps = { width: null, height: null, onError: null -} +}; diff --git a/components/lib/image/image.d.ts b/components/lib/image/image.d.ts index dbf1ea617c..df082833e4 100644 --- a/components/lib/image/image.d.ts +++ b/components/lib/image/image.d.ts @@ -15,7 +15,7 @@ export interface ImageProps extends Omit { +export declare class Image extends React.Component { public getElement(): HTMLSpanElement; public getImage(): HTMLImageElement; } diff --git a/components/lib/inplace/Inplace.js b/components/lib/inplace/Inplace.js index a2101cf6d5..36022d9710 100644 --- a/components/lib/inplace/Inplace.js +++ b/components/lib/inplace/Inplace.js @@ -25,11 +25,10 @@ export const Inplace = React.forwardRef((props, ref) => { originalEvent: event, value: true }); - } - else { + } else { setActiveState(true); } - } + }; const close = (event) => { props.onClose && props.onClose(event); @@ -39,18 +38,17 @@ export const Inplace = React.forwardRef((props, ref) => { originalEvent: event, value: false }); - } - else { + } else { setActiveState(false); } - } + }; const onDisplayKeyDown = (event) => { if (event.key === 'Enter') { open(event); event.preventDefault(); } - } + }; const createDisplay = (content) => { const otherProps = ObjectUtils.findDiffKeys(content.props, InplaceDisplay.defaultProps); @@ -62,16 +60,16 @@ export const Inplace = React.forwardRef((props, ref) => {
    {content}
    - ) - } + ); + }; const createCloseButton = () => { if (props.closable) { - return
    - ) - } + ); + }; const createChildren = () => { - return ( - React.Children.map(props.children, (child) => { - if (active && shouldUseInplaceContent(child)) { - return createContent(child); - } - else if (!active && shouldUseInplaceDisplay(child)) { - return createDisplay(child); - } - }) - ); - } + return React.Children.map(props.children, (child) => { + if (active && shouldUseInplaceContent(child)) { + return createContent(child); + } else if (!active && shouldUseInplaceDisplay(child)) { + return createDisplay(child); + } + }); + }; React.useImperativeHandle(ref, () => ({ props, @@ -105,26 +100,30 @@ export const Inplace = React.forwardRef((props, ref) => { const otherProps = ObjectUtils.findDiffKeys(props, Inplace.defaultProps); const children = createChildren(); - const className = classNames('p-inplace p-component', { - 'p-inplace-closable': props.closable - }, props.className); + const className = classNames( + 'p-inplace p-component', + { + 'p-inplace-closable': props.closable + }, + props.className + ); return (
    {children}
    - ) + ); }); InplaceDisplay.displayName = 'InplaceDisplay'; InplaceDisplay.defaultProps = { __TYPE: 'InplaceDisplay' -} +}; InplaceContent.displayName = 'InplaceContent'; InplaceContent.defaultProps = { __TYPE: 'InplaceContent' -} +}; Inplace.displayName = 'Inplace'; Inplace.defaultProps = { @@ -139,4 +138,4 @@ Inplace.defaultProps = { onOpen: null, onClose: null, onToggle: null -} +}; diff --git a/components/lib/inplace/inplace.d.ts b/components/lib/inplace/inplace.d.ts index 3c594b7806..77da06deda 100644 --- a/components/lib/inplace/inplace.d.ts +++ b/components/lib/inplace/inplace.d.ts @@ -16,7 +16,7 @@ export interface InplaceProps extends Omit { +export declare class Inplace extends React.Component { public getElement(): HTMLDivElement; } diff --git a/components/lib/inputmask/InputMask.js b/components/lib/inputmask/InputMask.js index 5b54beb37f..614ecac662 100644 --- a/components/lib/inputmask/InputMask.js +++ b/components/lib/inputmask/InputMask.js @@ -3,546 +3,558 @@ import { useMountEffect, useUpdateEffect } from '../hooks/Hooks'; import { InputText } from '../inputtext/InputText'; import { classNames, DomHandler, ObjectUtils } from '../utils/Utils'; -export const InputMask = React.memo(React.forwardRef((props, ref) => { - const elementRef = React.useRef(ref); - const firstNonMaskPos = React.useRef(null); - const lastRequiredNonMaskPos = React.useRef(0); - const tests = React.useRef([]); - const buffer = React.useRef([]); - const len = React.useRef(0); - const oldVal = React.useRef(null); - const focus = React.useRef(false); - const focusText = React.useRef(null); - const isValueChecked = React.useRef(null); - const partialPosition = React.useRef(null); - const defaultBuffer = React.useRef(null); - const caretTimeoutId = React.useRef(null); - const androidChrome = React.useRef(false); - - const caret = (first, last) => { - let range, begin, end; - let inputEl = elementRef.current; - - if (!inputEl || !inputEl.offsetParent || inputEl !== document.activeElement) { - return; - } - - if (typeof first === 'number') { - begin = first; - end = (typeof last === 'number') ? last : begin; - if (inputEl.setSelectionRange) { - inputEl.setSelectionRange(begin, end); - } - else if (inputEl['createTextRange']) { - range = inputEl['createTextRange'](); - range.collapse(true); - range.moveEnd('character', end); - range.moveStart('character', begin); - range.select(); +export const InputMask = React.memo( + React.forwardRef((props, ref) => { + const elementRef = React.useRef(ref); + const firstNonMaskPos = React.useRef(null); + const lastRequiredNonMaskPos = React.useRef(0); + const tests = React.useRef([]); + const buffer = React.useRef([]); + const len = React.useRef(0); + const oldVal = React.useRef(null); + const focus = React.useRef(false); + const focusText = React.useRef(null); + const isValueChecked = React.useRef(null); + const partialPosition = React.useRef(null); + const defaultBuffer = React.useRef(null); + const caretTimeoutId = React.useRef(null); + const androidChrome = React.useRef(false); + + const caret = (first, last) => { + let range, begin, end; + let inputEl = elementRef.current; + + if (!inputEl || !inputEl.offsetParent || inputEl !== document.activeElement) { + return; } - } - else { - if (inputEl.setSelectionRange) { - begin = inputEl.selectionStart; - end = inputEl.selectionEnd; + + if (typeof first === 'number') { + begin = first; + end = typeof last === 'number' ? last : begin; + if (inputEl.setSelectionRange) { + inputEl.setSelectionRange(begin, end); + } else if (inputEl['createTextRange']) { + range = inputEl['createTextRange'](); + range.collapse(true); + range.moveEnd('character', end); + range.moveStart('character', begin); + range.select(); + } + } else { + if (inputEl.setSelectionRange) { + begin = inputEl.selectionStart; + end = inputEl.selectionEnd; + } else if (document['selection'] && document['selection'].createRange) { + range = document['selection'].createRange(); + begin = 0 - range.duplicate().moveStart('character', -100000); + end = begin + range.text.length; + } + + return { begin: begin, end: end }; } - else if (document['selection'] && document['selection'].createRange) { - range = document['selection'].createRange(); - begin = 0 - range.duplicate().moveStart('character', -100000); - end = begin + range.text.length; + }; + + const isCompleted = () => { + for (let i = firstNonMaskPos.current; i <= lastRequiredNonMaskPos.current; i++) { + if (tests.current[i] && buffer.current[i] === getPlaceholder(i)) { + return false; + } } - return { begin: begin, end: end }; - } - } + return true; + }; - const isCompleted = () => { - for (let i = firstNonMaskPos.current; i <= lastRequiredNonMaskPos.current; i++) { - if (tests.current[i] && buffer.current[i] === getPlaceholder(i)) { - return false; - } - } - - return true; - } - - const getPlaceholder = React.useCallback((i) => { - if (i < props.slotChar.length) { - return props.slotChar.charAt(i); - } - return props.slotChar.charAt(0); - }, [props.slotChar]); - - const getValue = () => { - return props.unmask ? getUnmaskedValue() : elementRef.current && elementRef.current.value; - } - - const seekNext = (pos) => { - while (++pos < len.current && !tests.current[pos]); - return pos; - } - - const seekPrev = (pos) => { - while (--pos >= 0 && !tests.current[pos]); - return pos; - } - - const shiftL = (begin, end) => { - let i, j; - - if (begin < 0) { - return; - } - - for (i = begin, j = seekNext(end); i < len.current; i++) { - if (tests.current[i]) { - if (j < len.current && tests.current[i].test(buffer.current[j])) { - buffer.current[i] = buffer.current[j]; - buffer.current[j] = getPlaceholder(j); - } else { - break; + const getPlaceholder = React.useCallback( + (i) => { + if (i < props.slotChar.length) { + return props.slotChar.charAt(i); } + return props.slotChar.charAt(0); + }, + [props.slotChar] + ); + + const getValue = () => { + return props.unmask ? getUnmaskedValue() : elementRef.current && elementRef.current.value; + }; + + const seekNext = (pos) => { + while (++pos < len.current && !tests.current[pos]); + return pos; + }; + + const seekPrev = (pos) => { + while (--pos >= 0 && !tests.current[pos]); + return pos; + }; + + const shiftL = (begin, end) => { + let i, j; - j = seekNext(j); + if (begin < 0) { + return; } - } - writeBuffer(); - caret(Math.max(firstNonMaskPos.current, begin)); - } - - const shiftR = (pos) => { - let i, c, j, t; - - for (i = pos, c = getPlaceholder(pos); i < len.current; i++) { - if (tests.current[i]) { - j = seekNext(i); - t = buffer.current[i]; - buffer.current[i] = c; - if (j < len.current && tests.current[j].test(t)) { - c = t; - } else { - break; + + for (i = begin, j = seekNext(end); i < len.current; i++) { + if (tests.current[i]) { + if (j < len.current && tests.current[i].test(buffer.current[j])) { + buffer.current[i] = buffer.current[j]; + buffer.current[j] = getPlaceholder(j); + } else { + break; + } + + j = seekNext(j); } } - } - } - - const handleAndroidInput = (e) => { - let curVal = elementRef.current.value; - let pos = caret(); - if (oldVal.current.length && oldVal.current.length > curVal.length) { - // a deletion or backspace happened - checkVal(true); - while (pos.begin > 0 && !tests.current[pos.begin - 1]) - pos.begin--; - if (pos.begin === 0) { - while (pos.begin < firstNonMaskPos.current && !tests.current[pos.begin]) - pos.begin++; + writeBuffer(); + caret(Math.max(firstNonMaskPos.current, begin)); + }; + + const shiftR = (pos) => { + let i, c, j, t; + + for (i = pos, c = getPlaceholder(pos); i < len.current; i++) { + if (tests.current[i]) { + j = seekNext(i); + t = buffer.current[i]; + buffer.current[i] = c; + if (j < len.current && tests.current[j].test(t)) { + c = t; + } else { + break; + } + } } - caret(pos.begin, pos.begin); - } else { - checkVal(true); - while (pos.begin < len.current && !tests.current[pos.begin]) - pos.begin++; - - caret(pos.begin, pos.begin); - } - - if (props.onComplete && isCompleted()) { - props.onComplete({ - originalEvent: e, - value: getValue() - }); - } - updateModel(e); - } - - const onBlur = (e) => { - focus.current = false; - checkVal(); - updateModel(e); - updateFilledState(); - - props.onBlur && props.onBlur(e); - - if (elementRef.current.value !== focusText.current) { - let event = document.createEvent('HTMLEvents'); - event.initEvent('change', true, false); - elementRef.current.dispatchEvent(event); - } - } - - const onKeyDown = (e) => { - if (props.readOnly) { - return; - } - - let k = e.which || e.keyCode, - pos, - begin, - end; - let iPhone = /iphone/i.test(DomHandler.getUserAgent()); - oldVal.current = elementRef.current.value; - - //backspace, delete, and escape get special treatment - if (k === 8 || k === 46 || (iPhone && k === 127)) { - pos = caret(); - begin = pos.begin; - end = pos.end; - - - if (end - begin === 0) { - begin = k !== 46 ? seekPrev(begin) : (end = seekNext(begin - 1)); - end = k === 46 ? seekNext(end) : end; + }; + + const handleAndroidInput = (e) => { + let curVal = elementRef.current.value; + let pos = caret(); + if (oldVal.current.length && oldVal.current.length > curVal.length) { + // a deletion or backspace happened + checkVal(true); + while (pos.begin > 0 && !tests.current[pos.begin - 1]) pos.begin--; + if (pos.begin === 0) { + while (pos.begin < firstNonMaskPos.current && !tests.current[pos.begin]) pos.begin++; + } + caret(pos.begin, pos.begin); + } else { + checkVal(true); + while (pos.begin < len.current && !tests.current[pos.begin]) pos.begin++; + + caret(pos.begin, pos.begin); } - clearBuffer(begin, end); - shiftL(begin, end - 1); + if (props.onComplete && isCompleted()) { + props.onComplete({ + originalEvent: e, + value: getValue() + }); + } updateModel(e); + }; - e.preventDefault(); - } else if (k === 13) { // enter - onBlur(e); + const onBlur = (e) => { + focus.current = false; + checkVal(); updateModel(e); - } else if (k === 27) { // escape - elementRef.current.value = focusText.current; - caret(0, checkVal()); - updateModel(e); - e.preventDefault(); - } - } - - const onKeyPress = (e) => { - if (props.readOnly) { - return; - } - - let k = e.which || e.keyCode, - pos = caret(), - p, - c, - next, - completed; - - if (e.ctrlKey || e.altKey || e.metaKey || k < 32) {//Ignore - return; - } else if (k && k !== 13) { - if (pos.end - pos.begin !== 0) { - clearBuffer(pos.begin, pos.end); - shiftL(pos.begin, pos.end - 1); + updateFilledState(); + + props.onBlur && props.onBlur(e); + + if (elementRef.current.value !== focusText.current) { + let event = document.createEvent('HTMLEvents'); + event.initEvent('change', true, false); + elementRef.current.dispatchEvent(event); } + }; - p = seekNext(pos.begin - 1); - if (p < len.current) { - c = String.fromCharCode(k); - if (tests.current[p].test(c)) { - shiftR(p); + const onKeyDown = (e) => { + if (props.readOnly) { + return; + } - buffer.current[p] = c; - writeBuffer(); - next = seekNext(p); + let k = e.which || e.keyCode, + pos, + begin, + end; + let iPhone = /iphone/i.test(DomHandler.getUserAgent()); + oldVal.current = elementRef.current.value; + + //backspace, delete, and escape get special treatment + if (k === 8 || k === 46 || (iPhone && k === 127)) { + pos = caret(); + begin = pos.begin; + end = pos.end; + + if (end - begin === 0) { + begin = k !== 46 ? seekPrev(begin) : (end = seekNext(begin - 1)); + end = k === 46 ? seekNext(end) : end; + } - if (/android/i.test(DomHandler.getUserAgent())) { - //Path for CSP Violation on FireFox OS 1.1 - let proxy = () => { - caret(next); - }; + clearBuffer(begin, end); + shiftL(begin, end - 1); + updateModel(e); + + e.preventDefault(); + } else if (k === 13) { + // enter + onBlur(e); + updateModel(e); + } else if (k === 27) { + // escape + elementRef.current.value = focusText.current; + caret(0, checkVal()); + updateModel(e); + e.preventDefault(); + } + }; - setTimeout(proxy, 0); - } else { - caret(next); - } - if (pos.begin <= lastRequiredNonMaskPos.current) { - completed = isCompleted(); + const onKeyPress = (e) => { + if (props.readOnly) { + return; + } + + let k = e.which || e.keyCode, + pos = caret(), + p, + c, + next, + completed; + + if (e.ctrlKey || e.altKey || e.metaKey || k < 32) { + //Ignore + return; + } else if (k && k !== 13) { + if (pos.end - pos.begin !== 0) { + clearBuffer(pos.begin, pos.end); + shiftL(pos.begin, pos.end - 1); + } + + p = seekNext(pos.begin - 1); + if (p < len.current) { + c = String.fromCharCode(k); + if (tests.current[p].test(c)) { + shiftR(p); + + buffer.current[p] = c; + writeBuffer(); + next = seekNext(p); + + if (/android/i.test(DomHandler.getUserAgent())) { + //Path for CSP Violation on FireFox OS 1.1 + let proxy = () => { + caret(next); + }; + + setTimeout(proxy, 0); + } else { + caret(next); + } + if (pos.begin <= lastRequiredNonMaskPos.current) { + completed = isCompleted(); + } } } + e.preventDefault(); } - e.preventDefault(); - } - - updateModel(e); - - if (props.onComplete && completed) { - props.onComplete({ - originalEvent: e, - value: getValue() - }); - } - } - - const clearBuffer = (start, end) => { - let i; - for (i = start; i < end && i < len.current; i++) { - if (tests.current[i]) { - buffer.current[i] = getPlaceholder(i); + + updateModel(e); + + if (props.onComplete && completed) { + props.onComplete({ + originalEvent: e, + value: getValue() + }); } - } - } - - const writeBuffer = () => { - elementRef.current.value = buffer.current.join(''); - } - - const checkVal = (allow) => { - isValueChecked.current = true; - //try to place characters where they belong - let test = elementRef.current.value, - lastMatch = -1, - i, - c, - pos; - - for (i = 0, pos = 0; i < len.current; i++) { - if (tests.current[i]) { - buffer.current[i] = getPlaceholder(i); - while (pos++ < test.length) { - c = test.charAt(pos - 1); - if (tests.current[i].test(c)) { - buffer.current[i] = c; - lastMatch = i; + }; + + const clearBuffer = (start, end) => { + let i; + for (i = start; i < end && i < len.current; i++) { + if (tests.current[i]) { + buffer.current[i] = getPlaceholder(i); + } + } + }; + + const writeBuffer = () => { + elementRef.current.value = buffer.current.join(''); + }; + + const checkVal = (allow) => { + isValueChecked.current = true; + //try to place characters where they belong + let test = elementRef.current.value, + lastMatch = -1, + i, + c, + pos; + + for (i = 0, pos = 0; i < len.current; i++) { + if (tests.current[i]) { + buffer.current[i] = getPlaceholder(i); + while (pos++ < test.length) { + c = test.charAt(pos - 1); + if (tests.current[i].test(c)) { + buffer.current[i] = c; + lastMatch = i; + break; + } + } + if (pos > test.length) { + clearBuffer(i + 1, len.current); break; } - } - if (pos > test.length) { - clearBuffer(i + 1, len.current); - break; - } - } else { - if (buffer.current[i] === test.charAt(pos)) { - pos++; - } - if (i < partialPosition.current) { - lastMatch = i; + } else { + if (buffer.current[i] === test.charAt(pos)) { + pos++; + } + if (i < partialPosition.current) { + lastMatch = i; + } } } - } - if (allow) { - writeBuffer(); - } else if (lastMatch + 1 < partialPosition.current) { - if (props.autoClear || buffer.current.join('') === defaultBuffer.current) { - // Invalid value. Remove it and replace it with the - // mask, which is the default behavior. - if (elementRef.current.value) elementRef.current.value = ''; - clearBuffer(0, len.current); + if (allow) { + writeBuffer(); + } else if (lastMatch + 1 < partialPosition.current) { + if (props.autoClear || buffer.current.join('') === defaultBuffer.current) { + // Invalid value. Remove it and replace it with the + // mask, which is the default behavior. + if (elementRef.current.value) elementRef.current.value = ''; + clearBuffer(0, len.current); + } else { + // Invalid value, but we opt to show the value to the + // user and allow them to correct their mistake. + writeBuffer(); + } } else { - // Invalid value, but we opt to show the value to the - // user and allow them to correct their mistake. writeBuffer(); + elementRef.current.value = elementRef.current.value.substring(0, lastMatch + 1); } - } else { - writeBuffer(); - elementRef.current.value = elementRef.current.value.substring(0, lastMatch + 1); - } - return (partialPosition.current ? i : firstNonMaskPos.current); - } + return partialPosition.current ? i : firstNonMaskPos.current; + }; + + const onFocus = (e) => { + if (props.readOnly) { + return; + } + + focus.current = true; - const onFocus = (e) => { - if (props.readOnly) { - return; - } + clearTimeout(caretTimeoutId.current); + let pos; - focus.current = true; + focusText.current = elementRef.current.value; - clearTimeout(caretTimeoutId.current); - let pos; + pos = checkVal(); - focusText.current = elementRef.current.value; + caretTimeoutId.current = setTimeout(() => { + if (elementRef.current !== document.activeElement) { + return; + } + writeBuffer(); + if (pos === props.mask.replace('?', '').length) { + caret(0, pos); + } else { + caret(pos); + } + updateFilledState(); + }, 10); - pos = checkVal(); + props.onFocus && props.onFocus(e); + }; - caretTimeoutId.current = setTimeout(() => { - if (elementRef.current !== document.activeElement) { + const onInput = (event) => { + androidChrome.current ? handleAndroidInput(event) : handleInputChange(event); + }; + + const handleInputChange = (e) => { + if (props.readOnly) { return; } - writeBuffer(); - if (pos === props.mask.replace("?", "").length) { - caret(0, pos); - } else { - caret(pos); - } - updateFilledState(); - }, 10); - - props.onFocus && props.onFocus(e); - } - - const onInput = (event) => { - androidChrome.current ? handleAndroidInput(event) : handleInputChange(event); - } - - const handleInputChange = (e) => { - if (props.readOnly) { - return; - } - - let pos = checkVal(true); - caret(pos); - updateModel(e); - if (props.onComplete && isCompleted()) { - props.onComplete({ - originalEvent: e, - value: getValue() - }); - } - } - - const getUnmaskedValue = React.useCallback(() => { - let unmaskedBuffer = []; - for (let i = 0; i < buffer.current.length; i++) { - let c = buffer.current[i]; - if (tests.current[i] && c !== getPlaceholder(i)) { - unmaskedBuffer.push(c); + + let pos = checkVal(true); + caret(pos); + updateModel(e); + if (props.onComplete && isCompleted()) { + props.onComplete({ + originalEvent: e, + value: getValue() + }); } - } - - return unmaskedBuffer.join(''); - }, [getPlaceholder]); - - const updateModel = (e) => { - if (props.onChange) { - let val = props.unmask ? getUnmaskedValue() : e && e.target.value; - props.onChange({ - originalEvent: e, - value: (defaultBuffer.current !== val) ? val : '', - stopPropagation: () => { }, - preventDefault: () => { }, - target: { - name: props.name, - id: props.id, - value: (defaultBuffer.current !== val) ? val : '', + }; + + const getUnmaskedValue = React.useCallback(() => { + let unmaskedBuffer = []; + for (let i = 0; i < buffer.current.length; i++) { + let c = buffer.current[i]; + if (tests.current[i] && c !== getPlaceholder(i)) { + unmaskedBuffer.push(c); } - }) - } - } - - const updateFilledState = () => { - if (elementRef.current && elementRef.current.value && elementRef.current.value.length > 0) - DomHandler.addClass(elementRef.current, 'p-filled'); - else - DomHandler.removeClass(elementRef.current, 'p-filled'); - } - - const updateValue = (allow) => { - let pos; - - if (elementRef.current) { - if (props.value == null) { - elementRef.current.value = ''; } - else { - elementRef.current.value = props.value; - pos = checkVal(allow); - setTimeout(() => { - if (elementRef.current) { - writeBuffer(); - return checkVal(allow); + return unmaskedBuffer.join(''); + }, [getPlaceholder]); + + const updateModel = (e) => { + if (props.onChange) { + let val = props.unmask ? getUnmaskedValue() : e && e.target.value; + props.onChange({ + originalEvent: e, + value: defaultBuffer.current !== val ? val : '', + stopPropagation: () => {}, + preventDefault: () => {}, + target: { + name: props.name, + id: props.id, + value: defaultBuffer.current !== val ? val : '' } - }, 10); + }); } + }; - focusText.current = elementRef.current.value; - } - - updateFilledState(); - - return pos; - } - - const isValueUpdated = React.useCallback(() => { - return props.unmask ? - (props.value !== getUnmaskedValue()) : - (defaultBuffer.current !== elementRef.current.value && elementRef.current.value !== props.value); - }, [props.unmask, props.value, getUnmaskedValue]); - - const init = () => { - if (props.mask) { - tests.current = []; - partialPosition.current = props.mask.length; - len.current = props.mask.length; - firstNonMaskPos.current = null; - const defs = { - '9': '[0-9]', - 'a': '[A-Za-z]', - '*': '[A-Za-z0-9]' - }; - - let ua = DomHandler.getUserAgent(); - androidChrome.current = /chrome/i.test(ua) && /android/i.test(ua); - - let maskTokens = props.mask.split(''); - for (let i = 0; i < maskTokens.length; i++) { - let c = maskTokens[i]; - if (c === '?') { - len.current--; - partialPosition.current = i; + const updateFilledState = () => { + if (elementRef.current && elementRef.current.value && elementRef.current.value.length > 0) DomHandler.addClass(elementRef.current, 'p-filled'); + else DomHandler.removeClass(elementRef.current, 'p-filled'); + }; + + const updateValue = (allow) => { + let pos; + + if (elementRef.current) { + if (props.value == null) { + elementRef.current.value = ''; + } else { + elementRef.current.value = props.value; + pos = checkVal(allow); + + setTimeout(() => { + if (elementRef.current) { + writeBuffer(); + return checkVal(allow); + } + }, 10); } - else if (defs[c]) { - tests.current.push(new RegExp(defs[c])); - if (firstNonMaskPos.current === null) { - firstNonMaskPos.current = tests.current.length - 1; - } - if (i < partialPosition.current) { - lastRequiredNonMaskPos.current = tests.current.length - 1; + + focusText.current = elementRef.current.value; + } + + updateFilledState(); + + return pos; + }; + + const isValueUpdated = React.useCallback(() => { + return props.unmask ? props.value !== getUnmaskedValue() : defaultBuffer.current !== elementRef.current.value && elementRef.current.value !== props.value; + }, [props.unmask, props.value, getUnmaskedValue]); + + const init = () => { + if (props.mask) { + tests.current = []; + partialPosition.current = props.mask.length; + len.current = props.mask.length; + firstNonMaskPos.current = null; + const defs = { + 9: '[0-9]', + a: '[A-Za-z]', + '*': '[A-Za-z0-9]' + }; + + let ua = DomHandler.getUserAgent(); + androidChrome.current = /chrome/i.test(ua) && /android/i.test(ua); + + let maskTokens = props.mask.split(''); + for (let i = 0; i < maskTokens.length; i++) { + let c = maskTokens[i]; + if (c === '?') { + len.current--; + partialPosition.current = i; + } else if (defs[c]) { + tests.current.push(new RegExp(defs[c])); + if (firstNonMaskPos.current === null) { + firstNonMaskPos.current = tests.current.length - 1; + } + if (i < partialPosition.current) { + lastRequiredNonMaskPos.current = tests.current.length - 1; + } + } else { + tests.current.push(null); } } - else { - tests.current.push(null); - } - } - buffer.current = []; - for (let i = 0; i < maskTokens.length; i++) { - let c = maskTokens[i]; - if (c !== '?') { - if (defs[c]) - buffer.current.push(getPlaceholder(i)); - else - buffer.current.push(c); + buffer.current = []; + for (let i = 0; i < maskTokens.length; i++) { + let c = maskTokens[i]; + if (c !== '?') { + if (defs[c]) buffer.current.push(getPlaceholder(i)); + else buffer.current.push(c); + } } + defaultBuffer.current = buffer.current.join(''); } - defaultBuffer.current = buffer.current.join(''); - } - } - - React.useImperativeHandle(ref, () => ({ - props, - getElement: () => elementRef.current - })); - - React.useEffect(() => { - ObjectUtils.combinedRefs(elementRef, ref); - }, [elementRef, ref]); - - useMountEffect(() => { - init(); - updateValue(); - }); - - useUpdateEffect(() => { - init(); - caret(updateValue(true)); - if (props.unmask) { - updateModel(); - } - }, [props.mask]); - - useUpdateEffect(() => { - if (isValueUpdated()) { + }; + + React.useImperativeHandle(ref, () => ({ + props, + getElement: () => elementRef.current + })); + + React.useEffect(() => { + ObjectUtils.combinedRefs(elementRef, ref); + }, [elementRef, ref]); + + useMountEffect(() => { + init(); updateValue(); - } - }, [isValueUpdated]); + }); - const otherProps = ObjectUtils.findDiffKeys(props, InputMask.defaultProps); - const className = classNames('p-inputmask', props.className); + useUpdateEffect(() => { + init(); + caret(updateValue(true)); + if (props.unmask) { + updateModel(); + } + }, [props.mask]); - return ( - - ) -})); + useUpdateEffect(() => { + if (isValueUpdated()) { + updateValue(); + } + }, [isValueUpdated]); + + const otherProps = ObjectUtils.findDiffKeys(props, InputMask.defaultProps); + const className = classNames('p-inputmask', props.className); + + return ( + + ); + }) +); InputMask.displayName = 'InputMask'; InputMask.defaultProps = { @@ -570,4 +582,4 @@ InputMask.defaultProps = { onChange: null, onFocus: null, onBlur: null -} +}; diff --git a/components/lib/inputmask/inputmask.d.ts b/components/lib/inputmask/inputmask.d.ts index 0a859f8be3..4f4ed10071 100644 --- a/components/lib/inputmask/inputmask.d.ts +++ b/components/lib/inputmask/inputmask.d.ts @@ -21,7 +21,7 @@ interface InputMaskChangeParams { target: InputMaskChangeTargetOptions; } -export interface InputMaskProps extends Omit { +export interface InputMaskProps extends Omit { mask?: string; slotChar?: string; autoClear?: boolean; diff --git a/components/lib/inputnumber/InputNumber.js b/components/lib/inputnumber/InputNumber.js index b8ccd33e03..afdd45ed50 100644 --- a/components/lib/inputnumber/InputNumber.js +++ b/components/lib/inputnumber/InputNumber.js @@ -5,1054 +5,1080 @@ import { Ripple } from '../ripple/Ripple'; import { Tooltip } from '../tooltip/Tooltip'; import { classNames, DomHandler, ObjectUtils } from '../utils/Utils'; -export const InputNumber = React.memo(React.forwardRef((props, ref) => { - const [focusedState, setFocusedState] = React.useState(false); - const elementRef = React.useRef(null); - const inputRef = React.useRef(null); - const timer = React.useRef(null); - const lastValue = React.useRef(null); - - const numberFormat = React.useRef(null); - const groupChar = React.useRef(null); - const prefixChar = React.useRef(null); - const suffixChar = React.useRef(null); - const isSpecialChar = React.useRef(null); - const _numeral = React.useRef(null); - const _group = React.useRef(null); - const _minusSign = React.useRef(null); - const _currency = React.useRef(null); - const _decimal = React.useRef(null); - const _suffix = React.useRef(null); - const _prefix = React.useRef(null); - const _index = React.useRef(null); - - const stacked = props.showButtons && props.buttonLayout === 'stacked'; - const horizontal = props.showButtons && props.buttonLayout === 'horizontal'; - const vertical = props.showButtons && props.buttonLayout === 'vertical'; - const inputMode = props.inputMode || ((props.mode === 'decimal' && !props.minFractionDigits) ? 'numeric' : 'decimal'); - - const getOptions = () => { - return { - localeMatcher: props.localeMatcher, - style: props.mode, - currency: props.currency, - currencyDisplay: props.currencyDisplay, - useGrouping: props.useGrouping, - minimumFractionDigits: props.minFractionDigits, - maximumFractionDigits: props.maxFractionDigits - } - } - - const constructParser = () => { - numberFormat.current = new Intl.NumberFormat(props.locale, getOptions()); - const numerals = [...new Intl.NumberFormat(props.locale, { useGrouping: false }).format(9876543210)].reverse(); - const index = new Map(numerals.map((d, i) => [d, i])); - _numeral.current = new RegExp(`[${numerals.join('')}]`, 'g'); - _group.current = getGroupingExpression(); - _minusSign.current = getMinusSignExpression(); - _currency.current = getCurrencyExpression(); - _decimal.current = getDecimalExpression(); - _suffix.current = getSuffixExpression(); - _prefix.current = getPrefixExpression(); - _index.current = d => index.get(d); - } - - const escapeRegExp = (text) => { - return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); - } - - const getDecimalExpression = () => { - const formatter = new Intl.NumberFormat(props.locale, { ...getOptions(), useGrouping: false }); - return new RegExp(`[${formatter.format(1.1).replace(_currency.current, '').trim().replace(_numeral.current, '')}]`, 'g'); - } - - const getGroupingExpression = () => { - const formatter = new Intl.NumberFormat(props.locale, { useGrouping: true }); - groupChar.current = formatter.format(1000000).trim().replace(_numeral.current, '').charAt(0); - return new RegExp(`[${groupChar.current}]`, 'g'); - } - - const getMinusSignExpression = () => { - const formatter = new Intl.NumberFormat(props.locale, { useGrouping: false }); - return new RegExp(`[${formatter.format(-1).trim().replace(_numeral.current, '')}]`, 'g'); - } - - const getCurrencyExpression = () => { - if (props.currency) { - const formatter = new Intl.NumberFormat(props.locale, { - style: 'currency', currency: props.currency, currencyDisplay: props.currencyDisplay, - minimumFractionDigits: 0, maximumFractionDigits: 0 - }); - return new RegExp(`[${formatter.format(1).replace(/\s/g, '').replace(_numeral.current, '').replace(_group.current, '')}]`, 'g'); - } - - return new RegExp(`[]`, 'g'); - } - - const getPrefixExpression = () => { - if (props.prefix) { - prefixChar.current = props.prefix; - } - else { - const formatter = new Intl.NumberFormat(props.locale, { style: props.mode, currency: props.currency, currencyDisplay: props.currencyDisplay }); - prefixChar.current = formatter.format(1).split('1')[0]; - } - - return new RegExp(`${escapeRegExp(prefixChar.current || '')}`, 'g'); - } - - const getSuffixExpression = () => { - if (props.suffix) { - suffixChar.current = props.suffix; - } - else { - const formatter = new Intl.NumberFormat(props.locale, { - style: props.mode, currency: props.currency, currencyDisplay: props.currencyDisplay, - minimumFractionDigits: 0, maximumFractionDigits: 0 - }); - suffixChar.current = formatter.format(1).split('1')[1]; - } - - return new RegExp(`${escapeRegExp(suffixChar.current || '')}`, 'g'); - } - - const formatValue = (value) => { - if (value != null) { - if (value === '-') { // Minus sign - return value; +export const InputNumber = React.memo( + React.forwardRef((props, ref) => { + const [focusedState, setFocusedState] = React.useState(false); + const elementRef = React.useRef(null); + const inputRef = React.useRef(null); + const timer = React.useRef(null); + const lastValue = React.useRef(null); + + const numberFormat = React.useRef(null); + const groupChar = React.useRef(null); + const prefixChar = React.useRef(null); + const suffixChar = React.useRef(null); + const isSpecialChar = React.useRef(null); + const _numeral = React.useRef(null); + const _group = React.useRef(null); + const _minusSign = React.useRef(null); + const _currency = React.useRef(null); + const _decimal = React.useRef(null); + const _suffix = React.useRef(null); + const _prefix = React.useRef(null); + const _index = React.useRef(null); + + const stacked = props.showButtons && props.buttonLayout === 'stacked'; + const horizontal = props.showButtons && props.buttonLayout === 'horizontal'; + const vertical = props.showButtons && props.buttonLayout === 'vertical'; + const inputMode = props.inputMode || (props.mode === 'decimal' && !props.minFractionDigits ? 'numeric' : 'decimal'); + + const getOptions = () => { + return { + localeMatcher: props.localeMatcher, + style: props.mode, + currency: props.currency, + currencyDisplay: props.currencyDisplay, + useGrouping: props.useGrouping, + minimumFractionDigits: props.minFractionDigits, + maximumFractionDigits: props.maxFractionDigits + }; + }; + + const constructParser = () => { + numberFormat.current = new Intl.NumberFormat(props.locale, getOptions()); + const numerals = [...new Intl.NumberFormat(props.locale, { useGrouping: false }).format(9876543210)].reverse(); + const index = new Map(numerals.map((d, i) => [d, i])); + _numeral.current = new RegExp(`[${numerals.join('')}]`, 'g'); + _group.current = getGroupingExpression(); + _minusSign.current = getMinusSignExpression(); + _currency.current = getCurrencyExpression(); + _decimal.current = getDecimalExpression(); + _suffix.current = getSuffixExpression(); + _prefix.current = getPrefixExpression(); + _index.current = (d) => index.get(d); + }; + + const escapeRegExp = (text) => { + return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); + }; + + const getDecimalExpression = () => { + const formatter = new Intl.NumberFormat(props.locale, { ...getOptions(), useGrouping: false }); + return new RegExp(`[${formatter.format(1.1).replace(_currency.current, '').trim().replace(_numeral.current, '')}]`, 'g'); + }; + + const getGroupingExpression = () => { + const formatter = new Intl.NumberFormat(props.locale, { useGrouping: true }); + groupChar.current = formatter.format(1000000).trim().replace(_numeral.current, '').charAt(0); + return new RegExp(`[${groupChar.current}]`, 'g'); + }; + + const getMinusSignExpression = () => { + const formatter = new Intl.NumberFormat(props.locale, { useGrouping: false }); + return new RegExp(`[${formatter.format(-1).trim().replace(_numeral.current, '')}]`, 'g'); + }; + + const getCurrencyExpression = () => { + if (props.currency) { + const formatter = new Intl.NumberFormat(props.locale, { + style: 'currency', + currency: props.currency, + currencyDisplay: props.currencyDisplay, + minimumFractionDigits: 0, + maximumFractionDigits: 0 + }); + return new RegExp(`[${formatter.format(1).replace(/\s/g, '').replace(_numeral.current, '').replace(_group.current, '')}]`, 'g'); } - if (props.format) { - let formatter = new Intl.NumberFormat(props.locale, getOptions()); - let _formattedValue = formatter.format(value); - if (props.prefix) { - _formattedValue = props.prefix + _formattedValue; + return new RegExp(`[]`, 'g'); + }; + + const getPrefixExpression = () => { + if (props.prefix) { + prefixChar.current = props.prefix; + } else { + const formatter = new Intl.NumberFormat(props.locale, { style: props.mode, currency: props.currency, currencyDisplay: props.currencyDisplay }); + prefixChar.current = formatter.format(1).split('1')[0]; + } + + return new RegExp(`${escapeRegExp(prefixChar.current || '')}`, 'g'); + }; + + const getSuffixExpression = () => { + if (props.suffix) { + suffixChar.current = props.suffix; + } else { + const formatter = new Intl.NumberFormat(props.locale, { + style: props.mode, + currency: props.currency, + currencyDisplay: props.currencyDisplay, + minimumFractionDigits: 0, + maximumFractionDigits: 0 + }); + suffixChar.current = formatter.format(1).split('1')[1]; + } + + return new RegExp(`${escapeRegExp(suffixChar.current || '')}`, 'g'); + }; + + const formatValue = (value) => { + if (value != null) { + if (value === '-') { + // Minus sign + return value; } - if (props.suffix) { - _formattedValue = _formattedValue + props.suffix; + if (props.format) { + let formatter = new Intl.NumberFormat(props.locale, getOptions()); + let _formattedValue = formatter.format(value); + if (props.prefix) { + _formattedValue = props.prefix + _formattedValue; + } + + if (props.suffix) { + _formattedValue = _formattedValue + props.suffix; + } + + return _formattedValue; } - return _formattedValue; + return value.toString(); } - return value.toString(); - } - - return ''; - } - - const parseValue = (text) => { - let filteredText = text - .replace(_suffix.current, '') - .replace(_prefix.current, '') - .trim() - .replace(/\s/g, '') - .replace(_currency.current, '') - .replace(_group.current, '') - .replace(_minusSign.current, '-') - .replace(_decimal.current, '.') - .replace(_numeral.current, _index.current); - - if (filteredText) { - if (filteredText === '-') // Minus sign - return filteredText; - - let parsedValue = +filteredText; - return isNaN(parsedValue) ? null : parsedValue; - } - - return null; - } - - const repeat = (event, interval, dir) => { - let i = interval || 500; - - clearTimer(); - timer.current = setTimeout(() => { - repeat(event, 40, dir); - }, i); - - spin(event, dir); - } - - const spin = (event, dir) => { - if (inputRef.current) { - let step = props.step * dir; - let currentValue = parseValue(inputRef.current.value) || 0; - let newValue = validateValue(currentValue + step); - - // touch devices trigger the keyboard to display because of setSelectionRange - !DomHandler.isTouchDevice() && updateInput(newValue, null, 'spin'); - updateModel(event, newValue); - - handleOnChange(event, currentValue, newValue); - } - } - - const onUpButtonTouchStart = (event) => { - if (!props.disabled && !props.readOnly) { - repeat(event, null, 1); - event.preventDefault(); - } - } + return ''; + }; + + const parseValue = (text) => { + let filteredText = text + .replace(_suffix.current, '') + .replace(_prefix.current, '') + .trim() + .replace(/\s/g, '') + .replace(_currency.current, '') + .replace(_group.current, '') + .replace(_minusSign.current, '-') + .replace(_decimal.current, '.') + .replace(_numeral.current, _index.current); + + if (filteredText) { + if (filteredText === '-') + // Minus sign + return filteredText; + + let parsedValue = +filteredText; + return isNaN(parsedValue) ? null : parsedValue; + } - const onUpButtonMouseDown = (event) => { - if (!props.disabled && !props.readOnly) { - props.autoFocus && DomHandler.focus(inputRef.current, props.autoFocus); - repeat(event, null, 1); - event.preventDefault(); - } - } + return null; + }; - const onUpButtonTouchEnd = () => { - if (!props.disabled && !props.readOnly) { - clearTimer(); - event.preventDefault(); - } - } + const repeat = (event, interval, dir) => { + let i = interval || 500; - const onUpButtonMouseUp = () => { - if (!props.disabled && !props.readOnly) { clearTimer(); - } - } + timer.current = setTimeout(() => { + repeat(event, 40, dir); + }, i); - const onUpButtonMouseLeave = () => { - if (!props.disabled && !props.readOnly) { - clearTimer(); - } - } + spin(event, dir); + }; - const onUpButtonKeyUp = () => { - if (!props.disabled && !props.readOnly) { - clearTimer(); - } - } - - const onUpButtonKeyDown = (event) => { - if (!props.disabled && !props.readOnly && (event.keyCode === 32 || event.keyCode === 13)) { - repeat(event, null, 1); - } - } - - const onDownButtonTouchStart = (event) => { - if (!props.disabled && !props.readOnly) { - repeat(event, null, -1); - event.preventDefault(); - } - } + const spin = (event, dir) => { + if (inputRef.current) { + let step = props.step * dir; + let currentValue = parseValue(inputRef.current.value) || 0; + let newValue = validateValue(currentValue + step); - const onDownButtonTouchEnd = () => { - if (!props.disabled && !props.readOnly) { - clearTimer(); - event.preventDefault(); - } - } + // touch devices trigger the keyboard to display because of setSelectionRange + !DomHandler.isTouchDevice() && updateInput(newValue, null, 'spin'); + updateModel(event, newValue); - const onDownButtonMouseDown = (event) => { - if (!props.disabled && !props.readOnly) { - props.autoFocus && DomHandler.focus(inputRef.current, props.autoFocus); - repeat(event, null, -1); + handleOnChange(event, currentValue, newValue); + } + }; - event.preventDefault(); - } - } + const onUpButtonTouchStart = (event) => { + if (!props.disabled && !props.readOnly) { + repeat(event, null, 1); + event.preventDefault(); + } + }; - const onDownButtonMouseUp = () => { - if (!props.disabled && !props.readOnly) { - clearTimer(); - } - } + const onUpButtonMouseDown = (event) => { + if (!props.disabled && !props.readOnly) { + props.autoFocus && DomHandler.focus(inputRef.current, props.autoFocus); + repeat(event, null, 1); + event.preventDefault(); + } + }; - const onDownButtonMouseLeave = () => { - if (!props.disabled && !props.readOnly) { - clearTimer(); - } - } + const onUpButtonTouchEnd = () => { + if (!props.disabled && !props.readOnly) { + clearTimer(); + event.preventDefault(); + } + }; - const onDownButtonKeyUp = () => { - if (!props.disabled && !props.readOnly) { - clearTimer(); - } - } - - const onDownButtonKeyDown = (event) => { - if (!props.disabled && !props.readOnly && (event.keyCode === 32 || event.keyCode === 13)) { - repeat(event, null, -1); - } - } - - const onInput = (event) => { - if (props.disabled || props.readOnly) { - return; - } - - if (isSpecialChar.current) { - event.target.value = lastValue.current; - } - isSpecialChar.current = false; - } - - const onInputKeyDown = (event) => { - if (props.disabled || props.readOnly) { - return; - } - - lastValue.current = event.target.value; - if (event.shiftKey || event.altKey) { - isSpecialChar.current = true; - return; - } - - let selectionStart = event.target.selectionStart; - let selectionEnd = event.target.selectionEnd; - let inputValue = event.target.value; - let newValueStr = null; - - if (event.altKey) { - event.preventDefault(); - } + const onUpButtonMouseUp = () => { + if (!props.disabled && !props.readOnly) { + clearTimer(); + } + }; - switch (event.which) { - //up - case 38: - spin(event, 1); + const onUpButtonMouseLeave = () => { + if (!props.disabled && !props.readOnly) { + clearTimer(); + } + }; + + const onUpButtonKeyUp = () => { + if (!props.disabled && !props.readOnly) { + clearTimer(); + } + }; + + const onUpButtonKeyDown = (event) => { + if (!props.disabled && !props.readOnly && (event.keyCode === 32 || event.keyCode === 13)) { + repeat(event, null, 1); + } + }; + + const onDownButtonTouchStart = (event) => { + if (!props.disabled && !props.readOnly) { + repeat(event, null, -1); event.preventDefault(); - break; + } + }; - //down - case 40: - spin(event, -1); + const onDownButtonTouchEnd = () => { + if (!props.disabled && !props.readOnly) { + clearTimer(); event.preventDefault(); - break; + } + }; - //left - case 37: - if (!isNumeralChar(inputValue.charAt(selectionStart - 1))) { - event.preventDefault(); - } - break; + const onDownButtonMouseDown = (event) => { + if (!props.disabled && !props.readOnly) { + props.autoFocus && DomHandler.focus(inputRef.current, props.autoFocus); + repeat(event, null, -1); - //right - case 39: - if (!isNumeralChar(inputValue.charAt(selectionStart))) { - event.preventDefault(); - } - break; - - //enter and tab - case 13: - case 9: - newValueStr = validateValue(parseValue(inputValue)); - inputRef.current.value = formatValue(newValueStr); - inputRef.current.setAttribute('aria-valuenow', newValueStr); - updateModel(event, newValueStr); - break; - - //backspace - case 8: event.preventDefault(); + } + }; - if (selectionStart === selectionEnd) { - const deleteChar = inputValue.charAt(selectionStart - 1); - const { decimalCharIndex, decimalCharIndexWithoutPrefix } = getDecimalCharIndexes(inputValue); + const onDownButtonMouseUp = () => { + if (!props.disabled && !props.readOnly) { + clearTimer(); + } + }; - if (isNumeralChar(deleteChar)) { - const decimalLength = getDecimalLength(inputValue); + const onDownButtonMouseLeave = () => { + if (!props.disabled && !props.readOnly) { + clearTimer(); + } + }; - if (_group.current.test(deleteChar)) { - _group.current.lastIndex = 0; - newValueStr = inputValue.slice(0, selectionStart - 2) + inputValue.slice(selectionStart - 1); - } - else if (_decimal.current.test(deleteChar)) { - _decimal.current.lastIndex = 0; + const onDownButtonKeyUp = () => { + if (!props.disabled && !props.readOnly) { + clearTimer(); + } + }; - if (decimalLength) { - inputRef.current.setSelectionRange(selectionStart - 1, selectionStart - 1); - } - else { - newValueStr = inputValue.slice(0, selectionStart - 1) + inputValue.slice(selectionStart); - } - } - else if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) { - const insertedText = isDecimalMode() && (props.minFractionDigits || 0) < decimalLength ? '' : '0'; - newValueStr = inputValue.slice(0, selectionStart - 1) + insertedText + inputValue.slice(selectionStart); - } - else if (decimalCharIndexWithoutPrefix === 1) { - newValueStr = inputValue.slice(0, selectionStart - 1) + '0' + inputValue.slice(selectionStart); - newValueStr = parseValue(newValueStr) > 0 ? newValueStr : ''; - } - else { - newValueStr = inputValue.slice(0, selectionStart - 1) + inputValue.slice(selectionStart); - } - } + const onDownButtonKeyDown = (event) => { + if (!props.disabled && !props.readOnly && (event.keyCode === 32 || event.keyCode === 13)) { + repeat(event, null, -1); + } + }; - updateValue(event, newValueStr, null, 'delete-single'); - } - else { - newValueStr = deleteRange(inputValue, selectionStart, selectionEnd); - updateValue(event, newValueStr, null, 'delete-range'); - } + const onInput = (event) => { + if (props.disabled || props.readOnly) { + return; + } - break; + if (isSpecialChar.current) { + event.target.value = lastValue.current; + } + isSpecialChar.current = false; + }; - // del - case 46: + const onInputKeyDown = (event) => { + if (props.disabled || props.readOnly) { + return; + } + + lastValue.current = event.target.value; + if (event.shiftKey || event.altKey) { + isSpecialChar.current = true; + return; + } + + let selectionStart = event.target.selectionStart; + let selectionEnd = event.target.selectionEnd; + let inputValue = event.target.value; + let newValueStr = null; + + if (event.altKey) { event.preventDefault(); + } - if (selectionStart === selectionEnd) { - const deleteChar = inputValue.charAt(selectionStart); - const { decimalCharIndex, decimalCharIndexWithoutPrefix } = getDecimalCharIndexes(inputValue); + switch (event.which) { + //up + case 38: + spin(event, 1); + event.preventDefault(); + break; - if (isNumeralChar(deleteChar)) { - const decimalLength = getDecimalLength(inputValue); + //down + case 40: + spin(event, -1); + event.preventDefault(); + break; - if (_group.current.test(deleteChar)) { - _group.current.lastIndex = 0; - newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 2); - } - else if (_decimal.current.test(deleteChar)) { - _decimal.current.lastIndex = 0; + //left + case 37: + if (!isNumeralChar(inputValue.charAt(selectionStart - 1))) { + event.preventDefault(); + } + break; + + //right + case 39: + if (!isNumeralChar(inputValue.charAt(selectionStart))) { + event.preventDefault(); + } + break; - if (decimalLength) { - $refs.input.$el.setSelectionRange(selectionStart + 1, selectionStart + 1); + //enter and tab + case 13: + case 9: + newValueStr = validateValue(parseValue(inputValue)); + inputRef.current.value = formatValue(newValueStr); + inputRef.current.setAttribute('aria-valuenow', newValueStr); + updateModel(event, newValueStr); + break; + + //backspace + case 8: + event.preventDefault(); + + if (selectionStart === selectionEnd) { + const deleteChar = inputValue.charAt(selectionStart - 1); + const { decimalCharIndex, decimalCharIndexWithoutPrefix } = getDecimalCharIndexes(inputValue); + + if (isNumeralChar(deleteChar)) { + const decimalLength = getDecimalLength(inputValue); + + if (_group.current.test(deleteChar)) { + _group.current.lastIndex = 0; + newValueStr = inputValue.slice(0, selectionStart - 2) + inputValue.slice(selectionStart - 1); + } else if (_decimal.current.test(deleteChar)) { + _decimal.current.lastIndex = 0; + + if (decimalLength) { + inputRef.current.setSelectionRange(selectionStart - 1, selectionStart - 1); + } else { + newValueStr = inputValue.slice(0, selectionStart - 1) + inputValue.slice(selectionStart); + } + } else if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) { + const insertedText = isDecimalMode() && (props.minFractionDigits || 0) < decimalLength ? '' : '0'; + newValueStr = inputValue.slice(0, selectionStart - 1) + insertedText + inputValue.slice(selectionStart); + } else if (decimalCharIndexWithoutPrefix === 1) { + newValueStr = inputValue.slice(0, selectionStart - 1) + '0' + inputValue.slice(selectionStart); + newValueStr = parseValue(newValueStr) > 0 ? newValueStr : ''; + } else { + newValueStr = inputValue.slice(0, selectionStart - 1) + inputValue.slice(selectionStart); } - else { + } + + updateValue(event, newValueStr, null, 'delete-single'); + } else { + newValueStr = deleteRange(inputValue, selectionStart, selectionEnd); + updateValue(event, newValueStr, null, 'delete-range'); + } + + break; + + // del + case 46: + event.preventDefault(); + + if (selectionStart === selectionEnd) { + const deleteChar = inputValue.charAt(selectionStart); + const { decimalCharIndex, decimalCharIndexWithoutPrefix } = getDecimalCharIndexes(inputValue); + + if (isNumeralChar(deleteChar)) { + const decimalLength = getDecimalLength(inputValue); + + if (_group.current.test(deleteChar)) { + _group.current.lastIndex = 0; + newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 2); + } else if (_decimal.current.test(deleteChar)) { + _decimal.current.lastIndex = 0; + + if (decimalLength) { + $refs.input.$el.setSelectionRange(selectionStart + 1, selectionStart + 1); + } else { + newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 1); + } + } else if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) { + const insertedText = isDecimalMode() && (props.minFractionDigits || 0) < decimalLength ? '' : '0'; + newValueStr = inputValue.slice(0, selectionStart) + insertedText + inputValue.slice(selectionStart + 1); + } else if (decimalCharIndexWithoutPrefix === 1) { + newValueStr = inputValue.slice(0, selectionStart) + '0' + inputValue.slice(selectionStart + 1); + newValueStr = parseValue(newValueStr) > 0 ? newValueStr : ''; + } else { newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 1); } } - else if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) { - const insertedText = isDecimalMode() && (props.minFractionDigits || 0) < decimalLength ? '' : '0'; - newValueStr = inputValue.slice(0, selectionStart) + insertedText + inputValue.slice(selectionStart + 1); - } - else if (decimalCharIndexWithoutPrefix === 1) { - newValueStr = inputValue.slice(0, selectionStart) + '0' + inputValue.slice(selectionStart + 1); - newValueStr = parseValue(newValueStr) > 0 ? newValueStr : ''; - } - else { - newValueStr = inputValue.slice(0, selectionStart) + inputValue.slice(selectionStart + 1); - } + + updateValue(event, newValueStr, null, 'delete-back-single'); + } else { + newValueStr = deleteRange(inputValue, selectionStart, selectionEnd); + updateValue(event, newValueStr, null, 'delete-range'); } + break; - updateValue(event, newValueStr, null, 'delete-back-single'); - } - else { - newValueStr = deleteRange(inputValue, selectionStart, selectionEnd); - updateValue(event, newValueStr, null, 'delete-range'); - } - break; + default: + break; + } + + if (props.onKeyDown) { + props.onKeyDown(event); + } + }; - default: - break; - } + const onInputKeyPress = (event) => { + if (props.disabled || props.readOnly) { + return; + } + + const code = event.which || event.keyCode; - if (props.onKeyDown) { - props.onKeyDown(event); - } - } + if (code !== 13) { + // to submit a form + event.preventDefault(); + } - const onInputKeyPress = (event) => { - if (props.disabled || props.readOnly) { - return; - } + const char = String.fromCharCode(code); + const _isDecimalSign = isDecimalSign(char); + const _isMinusSign = isMinusSign(char); - const code = event.which || event.keyCode; + if ((48 <= code && code <= 57) || _isMinusSign || _isDecimalSign) { + insert(event, char, { isDecimalSign: _isDecimalSign, isMinusSign: _isMinusSign }); + } + }; - if (code !== 13) { // to submit a form + const onPaste = (event) => { event.preventDefault(); - } - const char = String.fromCharCode(code); - const _isDecimalSign = isDecimalSign(char); - const _isMinusSign = isMinusSign(char); + if (props.disabled || props.readOnly) { + return; + } - if ((48 <= code && code <= 57) || _isMinusSign || _isDecimalSign) { - insert(event, char, { isDecimalSign: _isDecimalSign, isMinusSign: _isMinusSign }); - } - } + let data = (event.clipboardData || window['clipboardData']).getData('Text'); + if (data) { + let filteredData = parseValue(data); + if (filteredData != null) { + insert(event, filteredData.toString()); + } + } + }; + + const allowMinusSign = () => { + return props.min === null || props.min < 0; + }; - const onPaste = (event) => { - event.preventDefault(); + const isMinusSign = (char) => { + if (_minusSign.current.test(char) || char === '-') { + _minusSign.current.lastIndex = 0; + return true; + } - if (props.disabled || props.readOnly) { - return; - } + return false; + }; - let data = (event.clipboardData || window['clipboardData']).getData('Text'); - if (data) { - let filteredData = parseValue(data); - if (filteredData != null) { - insert(event, filteredData.toString()); + const isDecimalSign = (char) => { + if (_decimal.current.test(char)) { + _decimal.current.lastIndex = 0; + return true; } - } - } - const allowMinusSign = () => { - return props.min === null || props.min < 0; - } + return false; + }; - const isMinusSign = (char) => { - if (_minusSign.current.test(char) || char === '-') { - _minusSign.current.lastIndex = 0; - return true; - } + const isDecimalMode = () => { + return props.mode === 'decimal'; + }; - return false; - } + const getDecimalCharIndexes = (val) => { + const decimalCharIndex = val.search(_decimal.current); + _decimal.current.lastIndex = 0; - const isDecimalSign = (char) => { - if (_decimal.current.test(char)) { + const filteredVal = val.replace(_prefix.current, '').trim().replace(/\s/g, '').replace(_currency.current, ''); + const decimalCharIndexWithoutPrefix = filteredVal.search(_decimal.current); _decimal.current.lastIndex = 0; - return true; - } - - return false; - } - - const isDecimalMode = () => { - return props.mode === 'decimal'; - } - - const getDecimalCharIndexes = (val) => { - const decimalCharIndex = val.search(_decimal.current); - _decimal.current.lastIndex = 0; - - const filteredVal = val.replace(_prefix.current, '').trim().replace(/\s/g, '').replace(_currency.current, ''); - const decimalCharIndexWithoutPrefix = filteredVal.search(_decimal.current); - _decimal.current.lastIndex = 0; - - return { decimalCharIndex, decimalCharIndexWithoutPrefix }; - } - - const getCharIndexes = (val) => { - const decimalCharIndex = val.search(_decimal.current); - _decimal.current.lastIndex = 0; - const minusCharIndex = val.search(_minusSign.current); - _minusSign.current.lastIndex = 0; - const suffixCharIndex = val.search(_suffix.current); - _suffix.current.lastIndex = 0; - const currencyCharIndex = val.search(_currency.current); - _currency.current.lastIndex = 0; - - return { decimalCharIndex, minusCharIndex, suffixCharIndex, currencyCharIndex }; - } - - const insert = (event, text, sign = { isDecimalSign: false, isMinusSign: false }) => { - const minusCharIndexOnText = text.search(_minusSign.current); - _minusSign.current.lastIndex = 0; - if (!allowMinusSign() && minusCharIndexOnText !== -1) { - return; - } - - const selectionStart = inputRef.current.selectionStart; - const selectionEnd = inputRef.current.selectionEnd; - let inputValue = inputRef.current.value.trim(); - const { decimalCharIndex, minusCharIndex, suffixCharIndex, currencyCharIndex } = getCharIndexes(inputValue); - let newValueStr; - - if (sign.isMinusSign) { - if (selectionStart === 0) { - newValueStr = inputValue; - if (minusCharIndex === -1 || selectionEnd !== 0) { - newValueStr = insertText(inputValue, text, 0, selectionEnd); - } - updateValue(event, newValueStr, text, 'insert'); - } - } - else if (sign.isDecimalSign) { - if (decimalCharIndex > 0 && selectionStart === decimalCharIndex) { - updateValue(event, inputValue, text, 'insert'); - } - else if (decimalCharIndex > selectionStart && decimalCharIndex < selectionEnd) { - newValueStr = insertText(inputValue, text, selectionStart, selectionEnd); - updateValue(event, newValueStr, text, 'insert'); - } - else if (decimalCharIndex === -1 && props.maxFractionDigits) { - newValueStr = insertText(inputValue, text, selectionStart, selectionEnd); - updateValue(event, newValueStr, text, 'insert'); + return { decimalCharIndex, decimalCharIndexWithoutPrefix }; + }; + + const getCharIndexes = (val) => { + const decimalCharIndex = val.search(_decimal.current); + _decimal.current.lastIndex = 0; + const minusCharIndex = val.search(_minusSign.current); + _minusSign.current.lastIndex = 0; + const suffixCharIndex = val.search(_suffix.current); + _suffix.current.lastIndex = 0; + const currencyCharIndex = val.search(_currency.current); + _currency.current.lastIndex = 0; + + return { decimalCharIndex, minusCharIndex, suffixCharIndex, currencyCharIndex }; + }; + + const insert = (event, text, sign = { isDecimalSign: false, isMinusSign: false }) => { + const minusCharIndexOnText = text.search(_minusSign.current); + _minusSign.current.lastIndex = 0; + if (!allowMinusSign() && minusCharIndexOnText !== -1) { + return; } - } - else { - const maxFractionDigits = numberFormat.current.resolvedOptions().maximumFractionDigits; - const operation = selectionStart !== selectionEnd ? 'range-insert' : 'insert'; - if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) { - if ((selectionStart + text.length - (decimalCharIndex + 1)) <= maxFractionDigits) { - const charIndex = currencyCharIndex >= selectionStart ? currencyCharIndex - 1 : (suffixCharIndex >= selectionStart ? suffixCharIndex : inputValue.length); + const selectionStart = inputRef.current.selectionStart; + const selectionEnd = inputRef.current.selectionEnd; + let inputValue = inputRef.current.value.trim(); + const { decimalCharIndex, minusCharIndex, suffixCharIndex, currencyCharIndex } = getCharIndexes(inputValue); + let newValueStr; + + if (sign.isMinusSign) { + if (selectionStart === 0) { + newValueStr = inputValue; + if (minusCharIndex === -1 || selectionEnd !== 0) { + newValueStr = insertText(inputValue, text, 0, selectionEnd); + } + + updateValue(event, newValueStr, text, 'insert'); + } + } else if (sign.isDecimalSign) { + if (decimalCharIndex > 0 && selectionStart === decimalCharIndex) { + updateValue(event, inputValue, text, 'insert'); + } else if (decimalCharIndex > selectionStart && decimalCharIndex < selectionEnd) { + newValueStr = insertText(inputValue, text, selectionStart, selectionEnd); + updateValue(event, newValueStr, text, 'insert'); + } else if (decimalCharIndex === -1 && props.maxFractionDigits) { + newValueStr = insertText(inputValue, text, selectionStart, selectionEnd); + updateValue(event, newValueStr, text, 'insert'); + } + } else { + const maxFractionDigits = numberFormat.current.resolvedOptions().maximumFractionDigits; + const operation = selectionStart !== selectionEnd ? 'range-insert' : 'insert'; - newValueStr = inputValue.slice(0, selectionStart) + text + inputValue.slice(selectionStart + text.length, charIndex) + inputValue.slice(charIndex); + if (decimalCharIndex > 0 && selectionStart > decimalCharIndex) { + if (selectionStart + text.length - (decimalCharIndex + 1) <= maxFractionDigits) { + const charIndex = currencyCharIndex >= selectionStart ? currencyCharIndex - 1 : suffixCharIndex >= selectionStart ? suffixCharIndex : inputValue.length; + + newValueStr = inputValue.slice(0, selectionStart) + text + inputValue.slice(selectionStart + text.length, charIndex) + inputValue.slice(charIndex); + updateValue(event, newValueStr, text, operation); + } + } else { + newValueStr = insertText(inputValue, text, selectionStart, selectionEnd); updateValue(event, newValueStr, text, operation); } } - else { - newValueStr = insertText(inputValue, text, selectionStart, selectionEnd); - updateValue(event, newValueStr, text, operation); + }; + + const insertText = (value, text, start, end) => { + let textSplit = text === '.' ? text : text.split('.'); + + if (textSplit.length === 2) { + const decimalCharIndex = value.slice(start, end).search(_decimal.current); + _decimal.current.lastIndex = 0; + return decimalCharIndex > 0 ? value.slice(0, start) + formatValue(text) + value.slice(end) : value || formatValue(text); + } else if (end - start === value.length) { + return formatValue(text); + } else if (start === 0) { + return text + value.slice(end); + } else if (end === value.length) { + return value.slice(0, start) + text; + } else { + return value.slice(0, start) + text + value.slice(end); } - } - } + }; - const insertText = (value, text, start, end) => { - let textSplit = text === '.' ? text : text.split('.'); + const deleteRange = (value, start, end) => { + let newValueStr; - if (textSplit.length === 2) { - const decimalCharIndex = value.slice(start, end).search(_decimal.current); - _decimal.current.lastIndex = 0; - return (decimalCharIndex > 0) ? value.slice(0, start) + formatValue(text) + value.slice(end) : (value || formatValue(text)); - } - else if ((end - start) === value.length) { - return formatValue(text); - } - else if (start === 0) { - return text + value.slice(end); - } - else if (end === value.length) { - return value.slice(0, start) + text; - } - else { - return value.slice(0, start) + text + value.slice(end); - } - } - - const deleteRange = (value, start, end) => { - let newValueStr; - - if ((end - start) === value.length) - newValueStr = ''; - else if (start === 0) - newValueStr = value.slice(end); - else if (end === value.length) - newValueStr = value.slice(0, start); - else - newValueStr = value.slice(0, start) + value.slice(end); - - return newValueStr; - } - - const initCursor = () => { - let selectionStart = inputRef.current.selectionStart; - let inputValue = inputRef.current.value; - let valueLength = inputValue.length; - let index = null; - - // remove prefix - let prefixLength = (prefixChar.current || '').length; - inputValue = inputValue.replace(_prefix.current, ''); - selectionStart = selectionStart - prefixLength; - - let char = inputValue.charAt(selectionStart); - if (isNumeralChar(char)) { - return selectionStart + prefixLength; - } - - //left - let i = selectionStart - 1; - while (i >= 0) { - char = inputValue.charAt(i); + if (end - start === value.length) newValueStr = ''; + else if (start === 0) newValueStr = value.slice(end); + else if (end === value.length) newValueStr = value.slice(0, start); + else newValueStr = value.slice(0, start) + value.slice(end); + + return newValueStr; + }; + + const initCursor = () => { + let selectionStart = inputRef.current.selectionStart; + let inputValue = inputRef.current.value; + let valueLength = inputValue.length; + let index = null; + + // remove prefix + let prefixLength = (prefixChar.current || '').length; + inputValue = inputValue.replace(_prefix.current, ''); + selectionStart = selectionStart - prefixLength; + + let char = inputValue.charAt(selectionStart); if (isNumeralChar(char)) { - index = i + prefixLength; - break; + return selectionStart + prefixLength; } - else { - i--; - } - } - - if (index !== null) { - inputRef.current.setSelectionRange(index + 1, index + 1); - } - else { - i = selectionStart; - while (i < valueLength) { + + //left + let i = selectionStart - 1; + while (i >= 0) { char = inputValue.charAt(i); if (isNumeralChar(char)) { index = i + prefixLength; break; - } - else { - i++; + } else { + i--; } } if (index !== null) { - inputRef.current.setSelectionRange(index, index); + inputRef.current.setSelectionRange(index + 1, index + 1); + } else { + i = selectionStart; + while (i < valueLength) { + char = inputValue.charAt(i); + if (isNumeralChar(char)) { + index = i + prefixLength; + break; + } else { + i++; + } + } + + if (index !== null) { + inputRef.current.setSelectionRange(index, index); + } } - } - return index || 0; - } + return index || 0; + }; + + const onInputClick = () => { + initCursor(); + }; - const onInputClick = () => { - initCursor(); - } + const isNumeralChar = (char) => { + if (char.length === 1 && (_numeral.current.test(char) || _decimal.current.test(char) || _group.current.test(char) || _minusSign.current.test(char))) { + resetRegex(); + return true; + } else { + return false; + } + }; + + const resetRegex = () => { + _numeral.current.lastIndex = 0; + _decimal.current.lastIndex = 0; + _group.current.lastIndex = 0; + _minusSign.current.lastIndex = 0; + }; + + const updateValue = (event, valueStr, insertedValueStr, operation) => { + let currentValue = inputRef.current.value; + let newValue = null; + + if (valueStr != null) { + newValue = evaluateEmpty(parseValue(valueStr)); + updateInput(newValue, insertedValueStr, operation, valueStr); + + handleOnChange(event, currentValue, newValue); + } + }; + + const evaluateEmpty = (newValue) => { + return !newValue && !props.allowEmpty ? props.min || 0 : newValue; + }; + + const handleOnChange = (event, currentValue, newValue) => { + if (props.onChange && isValueChanged(currentValue, newValue)) { + props.onChange({ + originalEvent: event, + value: newValue + }); + } + }; + + const isValueChanged = (currentValue, newValue) => { + if (newValue === null && currentValue !== null) { + return true; + } + + if (newValue != null) { + let parsedCurrentValue = typeof currentValue === 'string' ? parseValue(currentValue) : currentValue; + return newValue !== parsedCurrentValue; + } - const isNumeralChar = (char) => { - if (char.length === 1 && (_numeral.current.test(char) || _decimal.current.test(char) || _group.current.test(char) || _minusSign.current.test(char))) { - resetRegex(); - return true; - } - else { return false; - } - } - - const resetRegex = () => { - _numeral.current.lastIndex = 0; - _decimal.current.lastIndex = 0; - _group.current.lastIndex = 0; - _minusSign.current.lastIndex = 0; - } - - const updateValue = (event, valueStr, insertedValueStr, operation) => { - let currentValue = inputRef.current.value; - let newValue = null; - - if (valueStr != null) { - newValue = evaluateEmpty(parseValue(valueStr)); - updateInput(newValue, insertedValueStr, operation, valueStr); - - handleOnChange(event, currentValue, newValue); - } - } - - const evaluateEmpty = (newValue) => { - return !newValue && !props.allowEmpty ? props.min || 0 : newValue; - } - - const handleOnChange = (event, currentValue, newValue) => { - if (props.onChange && isValueChanged(currentValue, newValue)) { - props.onChange({ - originalEvent: event, - value: newValue - }); - } - } - - const isValueChanged = (currentValue, newValue) => { - if (newValue === null && currentValue !== null) { - return true; - } - - if (newValue != null) { - let parsedCurrentValue = (typeof currentValue === 'string') ? parseValue(currentValue) : currentValue; - return newValue !== parsedCurrentValue; - } - - return false; - } - - const validateValue = (value) => { - if (value === '-' || value == null) { - return null; - } - - if (props.min !== null && value < props.min) { - return props.min; - } - - if (props.max !== null && value > props.max) { - return props.max; - } - - return value; - } - - const updateInput = (value, insertedValueStr, operation, valueStr) => { - insertedValueStr = insertedValueStr || ''; - - let inputEl = inputRef.current; - let inputValue = inputEl.value; - let newValue = formatValue(value); - let currentLength = inputValue.length; - - if (newValue !== valueStr) { - newValue = concatValues(newValue, valueStr); - } - - if (currentLength === 0) { - inputEl.value = newValue; - inputEl.setSelectionRange(0, 0); - const index = initCursor(); - const selectionEnd = index + insertedValueStr.length; - inputEl.setSelectionRange(selectionEnd, selectionEnd); - } - else { - let selectionStart = inputEl.selectionStart; - let selectionEnd = inputEl.selectionEnd; - inputEl.value = newValue; - let newLength = newValue.length; - - if (operation === 'range-insert') { - const startValue = parseValue((inputValue || '').slice(0, selectionStart)); - const startValueStr = startValue !== null ? startValue.toString() : ''; - const startExpr = startValueStr.split('').join(`(${groupChar.current})?`); - const sRegex = new RegExp(startExpr, 'g'); - sRegex.test(newValue); - - const tExpr = insertedValueStr.split('').join(`(${groupChar.current})?`); - const tRegex = new RegExp(tExpr, 'g'); - tRegex.test(newValue.slice(sRegex.lastIndex)); - - selectionEnd = sRegex.lastIndex + tRegex.lastIndex; - inputEl.setSelectionRange(selectionEnd, selectionEnd); + }; + + const validateValue = (value) => { + if (value === '-' || value == null) { + return null; } - else if (newLength === currentLength) { - if (operation === 'insert' || operation === 'delete-back-single') - inputEl.setSelectionRange(selectionEnd + 1, selectionEnd + 1); - else if (operation === 'delete-single') - inputEl.setSelectionRange(selectionEnd - 1, selectionEnd - 1); - else if (operation === 'delete-range' || operation === 'spin') - inputEl.setSelectionRange(selectionEnd, selectionEnd); + + if (props.min !== null && value < props.min) { + return props.min; } - else if (operation === 'delete-back-single') { - let prevChar = inputValue.charAt(selectionEnd - 1); - let nextChar = inputValue.charAt(selectionEnd); - let diff = currentLength - newLength; - let isGroupChar = _group.current.test(nextChar); - - if (isGroupChar && diff === 1) { - selectionEnd += 1; - } - else if (!isGroupChar && isNumeralChar(prevChar)) { - selectionEnd += (-1 * diff) + 1; - } - _group.current.lastIndex = 0; - inputEl.setSelectionRange(selectionEnd, selectionEnd); + if (props.max !== null && value > props.max) { + return props.max; } - else if (inputValue === '-' && operation === 'insert') { + + return value; + }; + + const updateInput = (value, insertedValueStr, operation, valueStr) => { + insertedValueStr = insertedValueStr || ''; + + let inputEl = inputRef.current; + let inputValue = inputEl.value; + let newValue = formatValue(value); + let currentLength = inputValue.length; + + if (newValue !== valueStr) { + newValue = concatValues(newValue, valueStr); + } + + if (currentLength === 0) { + inputEl.value = newValue; inputEl.setSelectionRange(0, 0); const index = initCursor(); - const selectionEnd = index + insertedValueStr.length + 1; - inputEl.setSelectionRange(selectionEnd, selectionEnd); - } - else { - selectionEnd = selectionEnd + (newLength - currentLength); + const selectionEnd = index + insertedValueStr.length; inputEl.setSelectionRange(selectionEnd, selectionEnd); + } else { + let selectionStart = inputEl.selectionStart; + let selectionEnd = inputEl.selectionEnd; + inputEl.value = newValue; + let newLength = newValue.length; + + if (operation === 'range-insert') { + const startValue = parseValue((inputValue || '').slice(0, selectionStart)); + const startValueStr = startValue !== null ? startValue.toString() : ''; + const startExpr = startValueStr.split('').join(`(${groupChar.current})?`); + const sRegex = new RegExp(startExpr, 'g'); + sRegex.test(newValue); + + const tExpr = insertedValueStr.split('').join(`(${groupChar.current})?`); + const tRegex = new RegExp(tExpr, 'g'); + tRegex.test(newValue.slice(sRegex.lastIndex)); + + selectionEnd = sRegex.lastIndex + tRegex.lastIndex; + inputEl.setSelectionRange(selectionEnd, selectionEnd); + } else if (newLength === currentLength) { + if (operation === 'insert' || operation === 'delete-back-single') inputEl.setSelectionRange(selectionEnd + 1, selectionEnd + 1); + else if (operation === 'delete-single') inputEl.setSelectionRange(selectionEnd - 1, selectionEnd - 1); + else if (operation === 'delete-range' || operation === 'spin') inputEl.setSelectionRange(selectionEnd, selectionEnd); + } else if (operation === 'delete-back-single') { + let prevChar = inputValue.charAt(selectionEnd - 1); + let nextChar = inputValue.charAt(selectionEnd); + let diff = currentLength - newLength; + let isGroupChar = _group.current.test(nextChar); + + if (isGroupChar && diff === 1) { + selectionEnd += 1; + } else if (!isGroupChar && isNumeralChar(prevChar)) { + selectionEnd += -1 * diff + 1; + } + + _group.current.lastIndex = 0; + inputEl.setSelectionRange(selectionEnd, selectionEnd); + } else if (inputValue === '-' && operation === 'insert') { + inputEl.setSelectionRange(0, 0); + const index = initCursor(); + const selectionEnd = index + insertedValueStr.length + 1; + inputEl.setSelectionRange(selectionEnd, selectionEnd); + } else { + selectionEnd = selectionEnd + (newLength - currentLength); + inputEl.setSelectionRange(selectionEnd, selectionEnd); + } } - } - inputEl.setAttribute('aria-valuenow', value); - } + inputEl.setAttribute('aria-valuenow', value); + }; + + const updateInputValue = (newValue) => { + newValue = evaluateEmpty(newValue); - const updateInputValue = (newValue) => { - newValue = evaluateEmpty(newValue); + const inputEl = inputRef.current; + const value = inputEl.value; + const _formattedValue = formattedValue(newValue); - const inputEl = inputRef.current; - const value = inputEl.value; - const _formattedValue = formattedValue(newValue); + if (value !== _formattedValue) { + inputEl.value = _formattedValue; + inputEl.setAttribute('aria-valuenow', newValue); + } + }; - if (value !== _formattedValue) { - inputEl.value = _formattedValue; - inputEl.setAttribute('aria-valuenow', newValue); - } - } + const formattedValue = (val) => { + return formatValue(evaluateEmpty(val)); + }; - const formattedValue = (val) => { - return formatValue(evaluateEmpty(val)); - } + const concatValues = (val1, val2) => { + if (val1 && val2) { + let decimalCharIndex = val2.search(_decimal.current); + _decimal.current.lastIndex = 0; - const concatValues = (val1, val2) => { - if (val1 && val2) { - let decimalCharIndex = val2.search(_decimal.current); - _decimal.current.lastIndex = 0; + return decimalCharIndex !== -1 ? val1.split(_decimal.current)[0] + val2.slice(decimalCharIndex) : val1; + } - return decimalCharIndex !== -1 ? (val1.split(_decimal.current)[0] + val2.slice(decimalCharIndex)) : val1; - } + return val1; + }; - return val1; - } + const getDecimalLength = (value) => { + if (value) { + const valueSplit = value.split(_decimal.current); - const getDecimalLength = (value) => { - if (value) { - const valueSplit = value.split(_decimal.current); + if (valueSplit.length === 2) { + return valueSplit[1].replace(_suffix.current, '').trim().replace(/\s/g, '').replace(_currency.current, '').length; + } + } - if (valueSplit.length === 2) { - return valueSplit[1].replace(_suffix.current, '') - .trim() - .replace(/\s/g, '') - .replace(_currency.current, '').length; + return 0; + }; + + const updateModel = (event, value) => { + if (props.onValueChange) { + props.onValueChange({ + originalEvent: event, + value: value, + stopPropagation: () => {}, + preventDefault: () => {}, + target: { + name: props.name, + id: props.id, + value: value + } + }); } - } - - return 0; - } - - const updateModel = (event, value) => { - if (props.onValueChange) { - props.onValueChange({ - originalEvent: event, - value: value, - stopPropagation: () => { }, - preventDefault: () => { }, - target: { - name: props.name, - id: props.id, - value: value + }; + + const onInputFocus = (event) => { + setFocusedState(true); + props.onFocus && props.onFocus(event); + }; + + const onInputBlur = (event) => { + setFocusedState(false); + + if (inputRef.current) { + let currentValue = inputRef.current.value; + if (isValueChanged(currentValue, props.value)) { + let newValue = validateValue(parseValue(currentValue)); + updateInputValue(newValue); + updateModel(event, newValue); } - }); - } - } + } - const onInputFocus = (event) => { - setFocusedState(true); - props.onFocus && props.onFocus(event); - } + props.onBlur && props.onBlur(event); + }; - const onInputBlur = (event) => { - setFocusedState(false); + const clearTimer = () => { + if (timer.current) { + clearInterval(timer.current); + } + }; - if (inputRef.current) { - let currentValue = inputRef.current.value; - if (isValueChanged(currentValue, props.value)) { - let newValue = validateValue(parseValue(currentValue)); - updateInputValue(newValue); - updateModel(event, newValue); + const changeValue = () => { + const newValue = validateValue(props.value); + updateInputValue(newValue); + + if (props.value !== null && props.value !== newValue) { + updateModel(null, newValue); } - } - - props.onBlur && props.onBlur(event); - } - - const clearTimer = () => { - if (timer.current) { - clearInterval(timer.current); - } - } - - const changeValue = () => { - const newValue = validateValue(props.value); - updateInputValue(newValue); - - if (props.value !== null && props.value !== newValue) { - updateModel(null, newValue); - } - } - - const getFormatter = () => { - return numberFormat.current; - } - - React.useImperativeHandle(ref, () => ({ - props, - getFormatter, - getElement: () => elementRef.current, - getInput: () => inputRef.current - })); - - React.useEffect(() => { - ObjectUtils.combinedRefs(inputRef, props.inputRef); - }, [inputRef, props.inputRef]); - - useMountEffect(() => { - constructParser(); - - const newValue = validateValue(props.value); - if (props.value !== null && props.value !== newValue) { - updateModel(null, newValue); - } - }); - - useUpdateEffect(() => { - constructParser(); - changeValue(); - }, [props.locale, props.localeMatcher, props.mode, props.currency, props.currencyDisplay, props.useGrouping, props.minFractionDigits, props.maxFractionDigits, props.suffix, props.prefix]); - - useUpdateEffect(() => { - changeValue(); - }, [props.value]); - - const createInputElement = () => { - const className = classNames('p-inputnumber-input', props.inputClassName); - const valueToRender = formattedValue(props.value); + }; - return ( - - ) - } - - const createUpButton = () => { - const className = classNames('p-inputnumber-button p-inputnumber-button-up p-button p-button-icon-only p-component', { - 'p-disabled': props.disabled - }, props.incrementButtonClassName); - const icon = classNames('p-button-icon', props.incrementButtonIcon); + const getFormatter = () => { + return numberFormat.current; + }; - return ( - - ) - } - - const createDownButton = () => { - const className = classNames('p-inputnumber-button p-inputnumber-button-down p-button p-button-icon-only p-component', { - 'p-disabled': props.disabled - }, props.decrementButtonClassName); - const icon = classNames('p-button-icon', props.decrementButtonIcon); + React.useImperativeHandle(ref, () => ({ + props, + getFormatter, + getElement: () => elementRef.current, + getInput: () => inputRef.current + })); + + React.useEffect(() => { + ObjectUtils.combinedRefs(inputRef, props.inputRef); + }, [inputRef, props.inputRef]); + + useMountEffect(() => { + constructParser(); + + const newValue = validateValue(props.value); + if (props.value !== null && props.value !== newValue) { + updateModel(null, newValue); + } + }); + + useUpdateEffect(() => { + constructParser(); + changeValue(); + }, [props.locale, props.localeMatcher, props.mode, props.currency, props.currencyDisplay, props.useGrouping, props.minFractionDigits, props.maxFractionDigits, props.suffix, props.prefix]); + + useUpdateEffect(() => { + changeValue(); + }, [props.value]); + + const createInputElement = () => { + const className = classNames('p-inputnumber-input', props.inputClassName); + const valueToRender = formattedValue(props.value); - return ( - - ) - } - - const createButtonGroup = () => { - const upButton = props.showButtons && createUpButton(); - const downButton = props.showButtons && createDownButton(); - - if (stacked) { return ( - + + ); + }; + + const createUpButton = () => { + const className = classNames( + 'p-inputnumber-button p-inputnumber-button-up p-button p-button-icon-only p-component', + { + 'p-disabled': props.disabled + }, + props.incrementButtonClassName + ); + const icon = classNames('p-button-icon', props.incrementButtonIcon); + + return ( + + ); + }; + + const createDownButton = () => { + const className = classNames( + 'p-inputnumber-button p-inputnumber-button-down p-button p-button-icon-only p-component', + { + 'p-disabled': props.disabled + }, + props.decrementButtonClassName + ); + const icon = classNames('p-button-icon', props.decrementButtonIcon); + + return ( + + ); + }; + + const createButtonGroup = () => { + const upButton = props.showButtons && createUpButton(); + const downButton = props.showButtons && createDownButton(); + + if (stacked) { + return ( + + {upButton} + {downButton} + + ); + } + + return ( + <> {upButton} {downButton} - - ) - } + + ); + }; + + const hasTooltip = ObjectUtils.isNotEmpty(props.tooltip); + const otherProps = ObjectUtils.findDiffKeys(props, InputNumber.defaultProps); + const className = classNames( + 'p-inputnumber p-component p-inputwrapper', + { + 'p-inputwrapper-filled': props.value != null && props.value.toString().length > 0, + 'p-inputwrapper-focus': focusedState, + 'p-inputnumber-buttons-stacked': stacked, + 'p-inputnumber-buttons-horizontal': horizontal, + 'p-inputnumber-buttons-vertical': vertical + }, + props.className + ); + const inputElement = createInputElement(); + const buttonGroup = createButtonGroup(); return ( <> - {upButton} - {downButton} + + {inputElement} + {buttonGroup} + + {hasTooltip && } - ) - } - - const hasTooltip = ObjectUtils.isNotEmpty(props.tooltip); - const otherProps = ObjectUtils.findDiffKeys(props, InputNumber.defaultProps); - const className = classNames('p-inputnumber p-component p-inputwrapper', { - 'p-inputwrapper-filled': props.value != null && props.value.toString().length > 0, - 'p-inputwrapper-focus': focusedState, - 'p-inputnumber-buttons-stacked': stacked, - 'p-inputnumber-buttons-horizontal': horizontal, - 'p-inputnumber-buttons-vertical': vertical - }, props.className); - const inputElement = createInputElement(); - const buttonGroup = createButtonGroup(); - - return ( - <> - - {inputElement} - {buttonGroup} - - {hasTooltip && } - - ) -})); + ); + }) +); InputNumber.displayName = 'InputNumber'; InputNumber.defaultProps = { @@ -1105,4 +1131,4 @@ InputNumber.defaultProps = { onBlur: null, onFocus: null, onKeyDown: null -} +}; diff --git a/components/lib/inputswitch/InputSwitch.js b/components/lib/inputswitch/InputSwitch.js index edf3ea6ea0..bfca75ef1f 100644 --- a/components/lib/inputswitch/InputSwitch.js +++ b/components/lib/inputswitch/InputSwitch.js @@ -2,83 +2,102 @@ import * as React from 'react'; import { Tooltip } from '../tooltip/Tooltip'; import { classNames, DomHandler, ObjectUtils } from '../utils/Utils'; -export const InputSwitch = React.memo(React.forwardRef((props, ref) => { - const [focusedState, setFocusedState] = React.useState(false); - const elementRef = React.useRef(null); - const inputRef = React.useRef(props.inputRef); - const checked = props.checked === props.trueValue; +export const InputSwitch = React.memo( + React.forwardRef((props, ref) => { + const [focusedState, setFocusedState] = React.useState(false); + const elementRef = React.useRef(null); + const inputRef = React.useRef(props.inputRef); + const checked = props.checked === props.trueValue; - const onClick = (event) => { - if (props.disabled) { - return; - } + const onClick = (event) => { + if (props.disabled) { + return; + } - toggle(event); - DomHandler.focus(inputRef.current); + toggle(event); + DomHandler.focus(inputRef.current); - event.preventDefault(); - } + event.preventDefault(); + }; - const toggle = (event) => { - if (props.onChange) { - const value = checked ? props.falseValue : props.trueValue; + const toggle = (event) => { + if (props.onChange) { + const value = checked ? props.falseValue : props.trueValue; - props.onChange({ - originalEvent: event, - value, - stopPropagation: () => { }, - preventDefault: () => { }, - target: { - name: props.name, - id: props.id, - value - } - }); - } - } + props.onChange({ + originalEvent: event, + value, + stopPropagation: () => {}, + preventDefault: () => {}, + target: { + name: props.name, + id: props.id, + value + } + }); + } + }; - const onFocus = (event) => { - setFocusedState(true); - props.onFocus && props.onFocus(event); - } + const onFocus = (event) => { + setFocusedState(true); + props.onFocus && props.onFocus(event); + }; - const onBlur = (event) => { - setFocusedState(false); - props.onBlur && props.onBlur(event); - } + const onBlur = (event) => { + setFocusedState(false); + props.onBlur && props.onBlur(event); + }; - React.useImperativeHandle(ref, () => ({ - props, - getElement: () => elementRef.current, - getInput: () => elementRef.current - })); + React.useImperativeHandle(ref, () => ({ + props, + getElement: () => elementRef.current, + getInput: () => elementRef.current + })); - React.useEffect(() => { - ObjectUtils.combinedRefs(inputRef, props.inputRef); - }, [inputRef, props.inputRef]); + React.useEffect(() => { + ObjectUtils.combinedRefs(inputRef, props.inputRef); + }, [inputRef, props.inputRef]); - const hasTooltip = ObjectUtils.isNotEmpty(props.tooltip); - const otherProps = ObjectUtils.findDiffKeys(props, InputSwitch.defaultProps); - const className = classNames('p-inputswitch p-component', { - 'p-inputswitch-checked': checked, - 'p-disabled': props.disabled, - 'p-focus': focusedState - }, props.className); + const hasTooltip = ObjectUtils.isNotEmpty(props.tooltip); + const otherProps = ObjectUtils.findDiffKeys(props, InputSwitch.defaultProps); + const className = classNames( + 'p-inputswitch p-component', + { + 'p-inputswitch-checked': checked, + 'p-disabled': props.disabled, + 'p-focus': focusedState + }, + props.className + ); - return ( - <> -
    - ) + ); }); TreeTableScrollableView.displayName = 'TreeTableScrollableView'; diff --git a/components/lib/treetable/treetable.d.ts b/components/lib/treetable/treetable.d.ts index e71d1d2de9..cd6061e6a4 100644 --- a/components/lib/treetable/treetable.d.ts +++ b/components/lib/treetable/treetable.d.ts @@ -38,7 +38,7 @@ interface TreeTableCheckboxSelectionKeyType { type TreeTableExpandedKeysType = { [key: string]: boolean; -} +}; interface TreeTableSortMeta { field: string; diff --git a/components/lib/tristatecheckbox/TriStateCheckbox.js b/components/lib/tristatecheckbox/TriStateCheckbox.js index 4afc3bb4bd..ce1c53c803 100644 --- a/components/lib/tristatecheckbox/TriStateCheckbox.js +++ b/components/lib/tristatecheckbox/TriStateCheckbox.js @@ -3,88 +3,100 @@ import { Tooltip } from '../tooltip/Tooltip'; import { ariaLabel } from '../api/Api'; import { classNames, ObjectUtils } from '../utils/Utils'; -export const TriStateCheckbox = React.memo(React.forwardRef((props, ref) => { - const [focusedState, setFocusedState] = React.useState(false); - const elementRef = React.useRef(null); +export const TriStateCheckbox = React.memo( + React.forwardRef((props, ref) => { + const [focusedState, setFocusedState] = React.useState(false); + const elementRef = React.useRef(null); - const onClick = (event) => { - if (!props.disabled && !props.readOnly) { - toggle(event); - } - } + const onClick = (event) => { + if (!props.disabled && !props.readOnly) { + toggle(event); + } + }; - const toggle = (event) => { - let newValue; - if (props.value === null || props.value === undefined) - newValue = true; - else if (props.value === true) - newValue = false; - else if (props.value === false) - newValue = null; + const toggle = (event) => { + let newValue; + if (props.value === null || props.value === undefined) newValue = true; + else if (props.value === true) newValue = false; + else if (props.value === false) newValue = null; - if (props.onChange) { - props.onChange({ - originalEvent: event, - value: newValue, - stopPropagation: () => { }, - preventDefault: () => { }, - target: { - name: props.name, - id: props.id, - value: newValue - } - }); - } - } + if (props.onChange) { + props.onChange({ + originalEvent: event, + value: newValue, + stopPropagation: () => {}, + preventDefault: () => {}, + target: { + name: props.name, + id: props.id, + value: newValue + } + }); + } + }; - const onFocus = () => { - setFocusedState(true); - } + const onFocus = () => { + setFocusedState(true); + }; - const onBlur = () => { - setFocusedState(false); - } + const onBlur = () => { + setFocusedState(false); + }; - const onKeyDown = (e) => { - if (e.keyCode === 32) { - toggle(e); - e.preventDefault(); - } - } + const onKeyDown = (e) => { + if (e.keyCode === 32) { + toggle(e); + e.preventDefault(); + } + }; - React.useImperativeHandle(ref, () => ({ - props, - getElement: () => elementRef.current - })); + React.useImperativeHandle(ref, () => ({ + props, + getElement: () => elementRef.current + })); - const hasTooltip = ObjectUtils.isNotEmpty(props.tooltip); - const otherProps = ObjectUtils.findDiffKeys(props, TriStateCheckbox.defaultProps); - const className = classNames('p-tristatecheckbox p-checkbox p-component', props.className); - const boxClassName = classNames('p-checkbox-box', { - 'p-highlight': (props.value || !props.value) && props.value !== null, - 'p-disabled': props.disabled, - 'p-focus': focusedState - }); - const iconClassName = classNames('p-checkbox-icon p-c', { - 'pi pi-check': props.value === true, - 'pi pi-times': props.value === false - }); - const ariaValueLabel = props.value ? ariaLabel('trueLabel') : (props.value === false ? ariaLabel('falseLabel') : ariaLabel('nullLabel')); - const ariaChecked = props.value ? 'true' : 'false'; + const hasTooltip = ObjectUtils.isNotEmpty(props.tooltip); + const otherProps = ObjectUtils.findDiffKeys(props, TriStateCheckbox.defaultProps); + const className = classNames('p-tristatecheckbox p-checkbox p-component', props.className); + const boxClassName = classNames('p-checkbox-box', { + 'p-highlight': (props.value || !props.value) && props.value !== null, + 'p-disabled': props.disabled, + 'p-focus': focusedState + }); + const iconClassName = classNames('p-checkbox-icon p-c', { + 'pi pi-check': props.value === true, + 'pi pi-times': props.value === false + }); + const ariaValueLabel = props.value ? ariaLabel('trueLabel') : props.value === false ? ariaLabel('falseLabel') : ariaLabel('nullLabel'); + const ariaChecked = props.value ? 'true' : 'false'; - return ( - <> -
    -
    - + return ( + <> +
    +
    + +
    + {focusedState && ( + + {ariaValueLabel} + + )}
    - {focusedState && {ariaValueLabel}} -
    - {hasTooltip && } - - ) -})); + {hasTooltip && } + + ); + }) +); TriStateCheckbox.displayName = 'TriStateCheckbox'; TriStateCheckbox.defaultProps = { @@ -95,10 +107,10 @@ TriStateCheckbox.defaultProps = { className: null, disabled: false, readOnly: false, - tabIndex: "0", + tabIndex: '0', 'aria-label': null, 'aria-labelledby': null, tooltip: null, tooltipOptions: null, onChange: null -} +}; diff --git a/components/lib/tristatecheckbox/tristatecheckbox.d.ts b/components/lib/tristatecheckbox/tristatecheckbox.d.ts index 78d8e10dc5..7316fc58a6 100644 --- a/components/lib/tristatecheckbox/tristatecheckbox.d.ts +++ b/components/lib/tristatecheckbox/tristatecheckbox.d.ts @@ -25,6 +25,6 @@ export interface TriStateCheckboxProps extends Omit { +export declare class TriStateCheckbox extends React.Component { public getElement(): HTMLDivElement; } diff --git a/components/lib/utils/ClassNames.js b/components/lib/utils/ClassNames.js index 0ea0ab49e7..8a139173b8 100644 --- a/components/lib/utils/ClassNames.js +++ b/components/lib/utils/ClassNames.js @@ -11,11 +11,10 @@ export function classNames(...args) { if (type === 'string' || type === 'number') { classes.push(className); - } - else if (type === 'object') { - const _classes = Array.isArray(className) ? className : Object.entries(className).map(([key, value]) => !!value ? key : null); + } else if (type === 'object') { + const _classes = Array.isArray(className) ? className : Object.entries(className).map(([key, value]) => (!!value ? key : null)); - classes = _classes.length ? classes.concat(_classes.filter(c => !!c)) : classes; + classes = _classes.length ? classes.concat(_classes.filter((c) => !!c)) : classes; } } diff --git a/components/lib/utils/ConnectedOverlayScrollHandler.js b/components/lib/utils/ConnectedOverlayScrollHandler.js index bfba4ccec0..0a6221a0e1 100644 --- a/components/lib/utils/ConnectedOverlayScrollHandler.js +++ b/components/lib/utils/ConnectedOverlayScrollHandler.js @@ -1,8 +1,7 @@ import DomHandler from './DomHandler'; export default class ConnectedOverlayScrollHandler { - - constructor(element, listener = () => { }) { + constructor(element, listener = () => {}) { this.element = element; this.listener = listener; } diff --git a/components/lib/utils/DomHandler.js b/components/lib/utils/DomHandler.js index 76868b1540..70df200e16 100644 --- a/components/lib/utils/DomHandler.js +++ b/components/lib/utils/DomHandler.js @@ -1,5 +1,4 @@ export default class DomHandler { - static innerWidth(el) { if (el) { let width = el.offsetWidth; @@ -23,12 +22,7 @@ export default class DomHandler { } static getBrowserLanguage() { - return navigator.userLanguage - || (navigator.languages && navigator.languages.length && navigator.languages[0]) - || navigator.language - || navigator.browserLanguage - || navigator.systemLanguage - || 'en'; + return navigator.userLanguage || (navigator.languages && navigator.languages.length && navigator.languages[0]) || navigator.language || navigator.browserLanguage || navigator.systemLanguage || 'en'; } static getWindowScrollTop() { @@ -114,7 +108,7 @@ export default class DomHandler { return { top: rect.top + (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0), - left: rect.left + (window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0), + left: rect.left + (window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0) }; } @@ -143,9 +137,7 @@ export default class DomHandler { for (let i = 0; i < styles.length; i++) { element.classList.add(styles[i]); } - - } - else { + } else { let styles = className.split(' '); for (let i = 0; i < styles.length; i++) { element.className += ' ' + styles[i]; @@ -161,9 +153,7 @@ export default class DomHandler { for (let i = 0; i < styles.length; i++) { element.classList.remove(styles[i]); } - - } - else { + } else { let styles = className.split(' '); for (let i = 0; i < styles.length; i++) { element.className = element.className.replace(new RegExp('(^|\\b)' + styles[i].split(' ').join('|') + '(\\b|$)', 'gi'), ' '); @@ -174,28 +164,22 @@ export default class DomHandler { static addClass(element, className) { if (element && className) { - if (element.classList) - element.classList.add(className); - else - element.className += ' ' + className; + if (element.classList) element.classList.add(className); + else element.className += ' ' + className; } } static removeClass(element, className) { if (element && className) { - if (element.classList) - element.classList.remove(className); - else - element.className = element.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' '); + if (element.classList) element.classList.remove(className); + else element.className = element.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' '); } } static hasClass(element, className) { if (element) { - if (element.classList) - return element.classList.contains(className); - else - return new RegExp('(^| )' + className + '( |$)', 'gi').test(element.className); + if (element.classList) return element.classList.contains(className); + else return new RegExp('(^| )' + className + '( |$)', 'gi').test(element.className); } return false; } @@ -239,8 +223,7 @@ export default class DomHandler { if (overlay && target) { if (appendTo === 'self') { this.relativePosition(overlay, target); - } - else { + } else { calculateMinWidth && (overlay.style.minWidth = DomHandler.getOuterWidth(target) + 'px'); this.absolutePosition(overlay, target); } @@ -249,7 +232,7 @@ export default class DomHandler { static absolutePosition(element, target) { if (element) { - let elementDimensions = element.offsetParent ? { width: element.offsetWidth, height: element.offsetHeight } : this.getHiddenElementDimensions(element) + let elementDimensions = element.offsetParent ? { width: element.offsetWidth, height: element.offsetHeight } : this.getHiddenElementDimensions(element); let elementOuterHeight = elementDimensions.height; let elementOuterWidth = elementDimensions.width; let targetOuterHeight = target.offsetHeight; @@ -267,16 +250,13 @@ export default class DomHandler { } element.style.transformOrigin = 'bottom'; - } - else { + } else { top = targetOuterHeight + targetOffset.top + windowScrollTop; element.style.transformOrigin = 'top'; } - if (targetOffset.left + targetOuterWidth + elementOuterWidth > viewport.width) - left = Math.max(0, targetOffset.left + windowScrollLeft + targetOuterWidth - elementOuterWidth); - else - left = targetOffset.left + windowScrollLeft; + if (targetOffset.left + targetOuterWidth + elementOuterWidth > viewport.width) left = Math.max(0, targetOffset.left + windowScrollLeft + targetOuterWidth - elementOuterWidth); + else left = targetOffset.left + windowScrollLeft; element.style.top = top + 'px'; element.style.left = left + 'px'; @@ -291,15 +271,14 @@ export default class DomHandler { const viewport = this.getViewport(); let top, left; - if ((targetOffset.top + targetHeight + elementDimensions.height) > viewport.height) { - top = -1 * (elementDimensions.height); + if (targetOffset.top + targetHeight + elementDimensions.height > viewport.height) { + top = -1 * elementDimensions.height; if (targetOffset.top + top < 0) { top = -1 * targetOffset.top; } element.style.transformOrigin = 'bottom'; - } - else { + } else { top = targetHeight; element.style.transformOrigin = 'top'; } @@ -307,12 +286,10 @@ export default class DomHandler { if (elementDimensions.width > viewport.width) { // element wider then viewport and cannot fit on screen (align at left side of viewport) left = targetOffset.left * -1; - } - else if ((targetOffset.left + elementDimensions.width) > viewport.width) { + } else if (targetOffset.left + elementDimensions.width > viewport.width) { // element wider then viewport but can be fit on screen (align at right side of viewport) left = (targetOffset.left + elementDimensions.width - viewport.width) * -1; - } - else { + } else { // element fits on screen (align with target) left = 0; } @@ -328,19 +305,19 @@ export default class DomHandler { const viewport = this.getViewport(); const myArr = my.split(' '); const atArr = at.split(' '); - const getPositionValue = (arr, isOffset) => (isOffset ? (+arr.substring(arr.search(/(\+|-)/g)) || 0) : (arr.substring(0, arr.search(/(\+|-)/g)) || arr)); + const getPositionValue = (arr, isOffset) => (isOffset ? +arr.substring(arr.search(/(\+|-)/g)) || 0 : arr.substring(0, arr.search(/(\+|-)/g)) || arr); const position = { my: { x: getPositionValue(myArr[0]), y: getPositionValue(myArr[1] || myArr[0]), offsetX: getPositionValue(myArr[0], true), - offsetY: getPositionValue((myArr[1] || myArr[0]), true) + offsetY: getPositionValue(myArr[1] || myArr[0], true) }, at: { x: getPositionValue(atArr[0]), y: getPositionValue(atArr[1] || atArr[0]), offsetX: getPositionValue(atArr[0], true), - offsetY: getPositionValue((atArr[1] || atArr[0]), true) + offsetY: getPositionValue(atArr[1] || atArr[0], true) } }; const myOffset = { @@ -361,13 +338,12 @@ export default class DomHandler { left: function () { const left = myOffset.left(); const scrollLeft = DomHandler.getWindowScrollLeft(); - element.style.left = (left + scrollLeft) + 'px'; + element.style.left = left + scrollLeft + 'px'; if (this.count.x === 2) { element.style.left = scrollLeft + 'px'; this.count.x = 0; - } - else if (left < 0) { + } else if (left < 0) { this.count.x++; position.my.x = 'left'; position.at.x = 'right'; @@ -380,13 +356,12 @@ export default class DomHandler { right: function () { const left = myOffset.left() + DomHandler.getOuterWidth(target); const scrollLeft = DomHandler.getWindowScrollLeft(); - element.style.left = (left + scrollLeft) + 'px'; + element.style.left = left + scrollLeft + 'px'; if (this.count.x === 2) { - element.style.left = (viewport.width - DomHandler.getOuterWidth(element) + scrollLeft) + 'px'; + element.style.left = viewport.width - DomHandler.getOuterWidth(element) + scrollLeft + 'px'; this.count.x = 0; - } - else if (left + DomHandler.getOuterWidth(element) > viewport.width) { + } else if (left + DomHandler.getOuterWidth(element) > viewport.width) { this.count.x++; position.my.x = 'right'; @@ -400,13 +375,12 @@ export default class DomHandler { top: function () { const top = myOffset.top(); const scrollTop = DomHandler.getWindowScrollTop(); - element.style.top = (top + scrollTop) + 'px'; + element.style.top = top + scrollTop + 'px'; if (this.count.y === 2) { element.style.left = scrollTop + 'px'; this.count.y = 0; - } - else if (top < 0) { + } else if (top < 0) { this.count.y++; position.my.y = 'top'; @@ -420,13 +394,12 @@ export default class DomHandler { bottom: function () { const top = myOffset.top() + DomHandler.getOuterHeight(target); const scrollTop = DomHandler.getWindowScrollTop(); - element.style.top = (top + scrollTop) + 'px'; + element.style.top = top + scrollTop + 'px'; if (this.count.y === 2) { - element.style.left = (viewport.height - DomHandler.getOuterHeight(element) + scrollTop) + 'px'; + element.style.left = viewport.height - DomHandler.getOuterHeight(element) + scrollTop + 'px'; this.count.y = 0; - } - else if (top + DomHandler.getOuterHeight(target) > viewport.height) { + } else if (top + DomHandler.getOuterHeight(target) > viewport.height) { this.count.y++; position.my.y = 'bottom'; @@ -439,24 +412,21 @@ export default class DomHandler { }, center: function (axis) { if (axis === 'y') { - const top = myOffset.top() + (DomHandler.getOuterHeight(target) / 2); - element.style.top = (top + DomHandler.getWindowScrollTop()) + 'px'; + const top = myOffset.top() + DomHandler.getOuterHeight(target) / 2; + element.style.top = top + DomHandler.getWindowScrollTop() + 'px'; if (top < 0) { this.bottom(); - } - else if (top + DomHandler.getOuterHeight(target) > viewport.height) { + } else if (top + DomHandler.getOuterHeight(target) > viewport.height) { this.top(); } - } - else { - const left = myOffset.left() + (DomHandler.getOuterWidth(target) / 2); - element.style.left = (left + DomHandler.getWindowScrollLeft()) + 'px'; + } else { + const left = myOffset.left() + DomHandler.getOuterWidth(target) / 2; + element.style.left = left + DomHandler.getWindowScrollLeft() + 'px'; if (left < 0) { this.left(); - } - else if (left + DomHandler.getOuterWidth(element) > viewport.width) { + } else if (left + DomHandler.getOuterWidth(element) > viewport.width) { this.right(); } } @@ -482,15 +452,15 @@ export default class DomHandler { return { axis: 'y', my: `center ${myYPosition}`, - at: `center ${position}`, - } + at: `center ${position}` + }; } return { axis: 'x', my: `${myXPosition} center`, at: `${position} center` - } + }; } } @@ -506,7 +476,9 @@ export default class DomHandler { const overflowRegex = /(auto|scroll)/; const overflowCheck = (node) => { let styleDeclaration = node ? getComputedStyle(node) : null; - return styleDeclaration && (overflowRegex.test(styleDeclaration.getPropertyValue('overflow')) || overflowRegex.test(styleDeclaration.getPropertyValue('overflowX')) || overflowRegex.test(styleDeclaration.getPropertyValue('overflowY'))); + return ( + styleDeclaration && (overflowRegex.test(styleDeclaration.getPropertyValue('overflow')) || overflowRegex.test(styleDeclaration.getPropertyValue('overflowX')) || overflowRegex.test(styleDeclaration.getPropertyValue('overflowY'))) + ); }; for (let parent of parents) { @@ -621,7 +593,7 @@ export default class DomHandler { } static isTouchDevice() { - return (('ontouchstart' in window) || (navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0)); + return 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0; } static isFunction(obj) { @@ -629,27 +601,19 @@ export default class DomHandler { } static appendChild(element, target) { - if (this.isElement(target)) - target.appendChild(element); - else if (target.el && target.el.nativeElement) - target.el.nativeElement.appendChild(element); - else - throw new Error('Cannot append ' + target + ' to ' + element); + if (this.isElement(target)) target.appendChild(element); + else if (target.el && target.el.nativeElement) target.el.nativeElement.appendChild(element); + else throw new Error('Cannot append ' + target + ' to ' + element); } static removeChild(element, target) { - if (this.isElement(target)) - target.removeChild(element); - else if (target.el && target.el.nativeElement) - target.el.nativeElement.removeChild(element); - else - throw new Error('Cannot remove ' + element + ' from ' + target); + if (this.isElement(target)) target.removeChild(element); + else if (target.el && target.el.nativeElement) target.el.nativeElement.removeChild(element); + else throw new Error('Cannot remove ' + element + ' from ' + target); } static isElement(obj) { - return (typeof HTMLElement === "object" ? obj instanceof HTMLElement : - obj && typeof obj === "object" && obj !== null && obj.nodeType === 1 && typeof obj.nodeName === "string" - ); + return typeof HTMLElement === 'object' ? obj instanceof HTMLElement : obj && typeof obj === 'object' && obj !== null && obj.nodeType === 1 && typeof obj.nodeName === 'string'; } static scrollInView(container, item) { @@ -659,15 +623,14 @@ export default class DomHandler { let paddingTop = paddingTopValue ? parseFloat(paddingTopValue) : 0; let containerRect = container.getBoundingClientRect(); let itemRect = item.getBoundingClientRect(); - let offset = (itemRect.top + document.body.scrollTop) - (containerRect.top + document.body.scrollTop) - borderTop - paddingTop; + let offset = itemRect.top + document.body.scrollTop - (containerRect.top + document.body.scrollTop) - borderTop - paddingTop; let scroll = container.scrollTop; let elementHeight = container.clientHeight; let itemHeight = this.getOuterHeight(item); if (offset < 0) { container.scrollTop = scroll + offset; - } - else if ((offset + itemHeight) > elementHeight) { + } else if (offset + itemHeight > elementHeight) { container.scrollTop = scroll + offset - elementHeight + itemHeight; } } @@ -679,8 +642,7 @@ export default class DomHandler { } else if (window.getSelection().removeAllRanges && window.getSelection().rangeCount > 0 && window.getSelection().getRangeAt(0).getClientRects().length > 0) { window.getSelection().removeAllRanges(); } - } - else if (document['selection'] && document['selection'].empty) { + } else if (document['selection'] && document['selection'].empty) { try { document['selection'].empty(); } catch (error) { @@ -692,14 +654,12 @@ export default class DomHandler { static calculateScrollbarWidth(el) { if (el) { let style = getComputedStyle(el); - return (el.offsetWidth - el.clientWidth - parseFloat(style.borderLeftWidth) - parseFloat(style.borderRightWidth)); - } - else { - if (this.calculatedScrollbarWidth != null) - return this.calculatedScrollbarWidth; + return el.offsetWidth - el.clientWidth - parseFloat(style.borderLeftWidth) - parseFloat(style.borderRightWidth); + } else { + if (this.calculatedScrollbarWidth != null) return this.calculatedScrollbarWidth; - let scrollDiv = document.createElement("div"); - scrollDiv.className = "p-scrollbar-measure"; + let scrollDiv = document.createElement('div'); + scrollDiv.className = 'p-scrollbar-measure'; document.body.appendChild(scrollDiv); let scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth; @@ -733,30 +693,21 @@ export default class DomHandler { static resolveUserAgent() { let ua = navigator.userAgent.toLowerCase(); - let match = /(chrome)[ ]([\w.]+)/.exec(ua) || - /(webkit)[ ]([\w.]+)/.exec(ua) || - /(opera)(?:.*version|)[ ]([\w.]+)/.exec(ua) || - /(msie) ([\w.]+)/.exec(ua) || - (ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua)) || - []; + let match = /(chrome)[ ]([\w.]+)/.exec(ua) || /(webkit)[ ]([\w.]+)/.exec(ua) || /(opera)(?:.*version|)[ ]([\w.]+)/.exec(ua) || /(msie) ([\w.]+)/.exec(ua) || (ua.indexOf('compatible') < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua)) || []; return { - browser: match[1] || "", - version: match[2] || "0" + browser: match[1] || '', + version: match[2] || '0' }; } static isVisible(element) { // https://stackoverflow.com/a/59096915/502366 (in future use IntersectionObserver) - return element && ( - element.clientHeight !== 0 || - element.getClientRects().length !== 0 || - getComputedStyle(element).display !== 'none' - ); + return element && (element.clientHeight !== 0 || element.getClientRects().length !== 0 || getComputedStyle(element).display !== 'none'); } static isExist(element) { - return element !== null && typeof (element) !== 'undefined' && element.nodeName && element.parentNode; + return element !== null && typeof element !== 'undefined' && element.nodeName && element.parentNode; } static hasDOM() { @@ -764,7 +715,9 @@ export default class DomHandler { } static getFocusableElements(element, selector = '') { - let focusableElements = DomHandler.find(element, `button:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden])${selector}, + let focusableElements = DomHandler.find( + element, + `button:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden])${selector}, [href][clientHeight][clientWidth]:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden])${selector}, input:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden])${selector}, select:not([tabindex = "-1"]):not([disabled]):not([style*="display:none"]):not([hidden])${selector}, @@ -775,8 +728,7 @@ export default class DomHandler { let visibleFocusableElements = []; for (let focusableElement of focusableElements) { - if (getComputedStyle(focusableElement).display !== "none" && getComputedStyle(focusableElement).visibility !== "hidden") - visibleFocusableElements.push(focusableElement); + if (getComputedStyle(focusableElement).display !== 'none' && getComputedStyle(focusableElement).visibility !== 'hidden') visibleFocusableElements.push(focusableElement); } return visibleFocusableElements; @@ -847,25 +799,33 @@ export default class DomHandler { } static invokeElementMethod(element, methodName, args) { - (element)[methodName].apply(element, args); + element[methodName].apply(element, args); } static isClickable(element) { const targetNode = element.nodeName; const parentNode = element.parentElement && element.parentElement.nodeName; - return (targetNode === 'INPUT' || targetNode === 'TEXTAREA' || targetNode === 'BUTTON' || targetNode === 'A' || - parentNode === 'INPUT' || parentNode === 'TEXTAREA' || parentNode === 'BUTTON' || parentNode === 'A' || - this.hasClass(element, 'p-button') || this.hasClass(element.parentElement, 'p-button') || - this.hasClass(element.parentElement, 'p-checkbox') || this.hasClass(element.parentElement, 'p-radiobutton') + return ( + targetNode === 'INPUT' || + targetNode === 'TEXTAREA' || + targetNode === 'BUTTON' || + targetNode === 'A' || + parentNode === 'INPUT' || + parentNode === 'TEXTAREA' || + parentNode === 'BUTTON' || + parentNode === 'A' || + this.hasClass(element, 'p-button') || + this.hasClass(element.parentElement, 'p-button') || + this.hasClass(element.parentElement, 'p-checkbox') || + this.hasClass(element.parentElement, 'p-radiobutton') ); } static applyStyle(element, style) { if (typeof style === 'string') { element.style.cssText = this.style; - } - else { + } else { for (let prop in this.style) { element.style[prop] = style[prop]; } @@ -879,8 +839,7 @@ export default class DomHandler { if (window.navigator.msSaveOrOpenBlob) { navigator.msSaveOrOpenBlob(blob, filename + '.csv'); - } - else { + } else { const isDownloaded = DomHandler.saveAs({ name: filename + '.csv', src: URL.createObjectURL(blob) }); if (!isDownloaded) { csv = 'data:text/csv;charset=utf-8,' + csv; @@ -941,24 +900,21 @@ export default class DomHandler { if (target === 'document') { return document; - } - else if (target === 'window') { + } else if (target === 'window') { return window; - } - else if (typeof target === 'object' && target.hasOwnProperty('current')) { + } else if (typeof target === 'object' && target.hasOwnProperty('current')) { return this.isExist(target.current) ? target.current : null; - } - else { + } else { const isFunction = (obj) => !!(obj && obj.constructor && obj.call && obj.apply); const element = isFunction(target) ? target() : target; - return ((element && element.nodeType === 9) || this.isExist(element)) ? element : null; + return (element && element.nodeType === 9) || this.isExist(element) ? element : null; } } /** * Get the attribute names for an element and sorts them alpha for comparison */ - static getAttributeNames(node) { + static getAttributeNames(node) { let index, rv, attrs; rv = []; @@ -977,13 +933,13 @@ export default class DomHandler { * elem1 = style="color: red; font-size: 28px" * elem2 = style="font-size: 28px; color: red" */ - static isEqualElement(elm1, elm2) { + static isEqualElement(elm1, elm2) { let attrs1, attrs2, name, node1, node2; // Compare attributes without order sensitivity attrs1 = DomHandler.getAttributeNames(elm1); attrs2 = DomHandler.getAttributeNames(elm2); - if (attrs1.join(",") !== attrs2.join(",")) { + if (attrs1.join(',') !== attrs2.join(',')) { // console.log("Found nodes with different sets of attributes; not equiv"); return false; } @@ -1018,7 +974,8 @@ export default class DomHandler { // display("Found nodes of different types; not equiv"); return false; } - if (node1.nodeType === 1) { // Element + if (node1.nodeType === 1) { + // Element if (!DomHandler.isEqualElement(node1, node2)) { return false; } diff --git a/components/lib/utils/EventBus.js b/components/lib/utils/EventBus.js index 1477c19925..c336d385c7 100644 --- a/components/lib/utils/EventBus.js +++ b/components/lib/utils/EventBus.js @@ -4,10 +4,8 @@ export default function EventBus() { return { on(type, handler) { let handlers = allHandlers.get(type); - if (!handlers) - handlers = [handler]; - else - handlers.push(handler); + if (!handlers) handlers = [handler]; + else handlers.push(handler); allHandlers.set(type, handlers); }, @@ -17,7 +15,7 @@ export default function EventBus() { }, emit(type, evt) { let handlers = allHandlers.get(type); - handlers && handlers.slice().forEach(handler => handler(evt)); + handlers && handlers.slice().forEach((handler) => handler(evt)); } - } + }; } diff --git a/components/lib/utils/IconUtils.js b/components/lib/utils/IconUtils.js index 789f17759e..3e8785b013 100644 --- a/components/lib/utils/IconUtils.js +++ b/components/lib/utils/IconUtils.js @@ -3,7 +3,6 @@ import { classNames } from './ClassNames'; import ObjectUtils from './ObjectUtils'; export default class IconUtils { - static getJSXIcon(icon, iconProps = {}, options = {}) { let content = null; diff --git a/components/lib/utils/Mask.js b/components/lib/utils/Mask.js index d0209861f0..bc2a3e3d50 100644 --- a/components/lib/utils/Mask.js +++ b/components/lib/utils/Mask.js @@ -25,24 +25,21 @@ export function mask(el, options) { if (typeof first === 'number') { begin = first; - end = (typeof last === 'number') ? last : begin; + end = typeof last === 'number' ? last : begin; if (el.setSelectionRange) { el.setSelectionRange(begin, end); - } - else if (el['createTextRange']) { + } else if (el['createTextRange']) { range = el['createTextRange'](); range.collapse(true); range.moveEnd('character', end); range.moveStart('character', begin); range.select(); } - } - else { + } else { if (el.setSelectionRange) { begin = el.selectionStart; end = el.selectionEnd; - } - else if (document['selection'] && document['selection'].createRange) { + } else if (document['selection'] && document['selection'].createRange) { range = document['selection'].createRange(); begin = 0 - range.duplicate().moveStart('character', -100000); end = begin + range.text.length; @@ -50,7 +47,7 @@ export function mask(el, options) { return { begin: begin, end: end }; } - } + }; const isCompleted = () => { for (let i = firstNonMaskPos; i <= lastRequiredNonMaskPos; i++) { @@ -60,28 +57,28 @@ export function mask(el, options) { } return true; - } + }; const getPlaceholder = (i) => { if (i < options.slotChar.length) { return options.slotChar.charAt(i); } return options.slotChar.charAt(0); - } + }; const getValue = () => { return options.unmask ? getUnmaskedValue() : el && el.value; - } + }; const seekNext = (pos) => { while (++pos < len && !tests[pos]); return pos; - } + }; const seekPrev = (pos) => { while (--pos >= 0 && !tests[pos]); return pos; - } + }; const shiftL = (begin, end) => { let i, j; @@ -104,7 +101,7 @@ export function mask(el, options) { } writeBuffer(); caret(Math.max(firstNonMaskPos, begin)); - } + }; const shiftR = (pos) => { let i, c, j, t; @@ -121,7 +118,7 @@ export function mask(el, options) { } } } - } + }; const handleAndroidInput = (e) => { let curVal = el.value; @@ -129,17 +126,14 @@ export function mask(el, options) { if (oldVal && oldVal.length && oldVal.length > curVal.length) { // a deletion or backspace happened checkVal(true); - while (pos.begin > 0 && !tests[pos.begin - 1]) - pos.begin--; + while (pos.begin > 0 && !tests[pos.begin - 1]) pos.begin--; if (pos.begin === 0) { - while (pos.begin < firstNonMaskPos && !tests[pos.begin]) - pos.begin++; + while (pos.begin < firstNonMaskPos && !tests[pos.begin]) pos.begin++; } caret(pos.begin, pos.begin); } else { checkVal(true); - while (pos.begin < len && !tests[pos.begin]) - pos.begin++; + while (pos.begin < len && !tests[pos.begin]) pos.begin++; caret(pos.begin, pos.begin); } @@ -150,7 +144,7 @@ export function mask(el, options) { value: getValue() }); } - } + }; const onBlur = (e) => { checkVal(); @@ -162,7 +156,7 @@ export function mask(el, options) { event.initEvent('change', true, false); el.dispatchEvent(event); } - } + }; const onKeyDown = (e) => { if (options.readOnly) { @@ -182,7 +176,6 @@ export function mask(el, options) { begin = pos.begin; end = pos.end; - if (end - begin === 0) { begin = k !== 46 ? seekPrev(begin) : (end = seekNext(begin - 1)); end = k === 46 ? seekNext(end) : end; @@ -193,16 +186,18 @@ export function mask(el, options) { updateModel(e); e.preventDefault(); - } else if (k === 13) { // enter + } else if (k === 13) { + // enter onBlur(e); updateModel(e); - } else if (k === 27) { // escape + } else if (k === 27) { + // escape el.value = focusText; caret(0, checkVal()); updateModel(e); e.preventDefault(); } - } + }; const onKeyPress = (e) => { if (options.readOnly) { @@ -216,7 +211,8 @@ export function mask(el, options) { next, completed; - if (e.ctrlKey || e.altKey || e.metaKey || k < 32) {//Ignore + if (e.ctrlKey || e.altKey || e.metaKey || k < 32) { + //Ignore return; } else if (k && k !== 13) { if (pos.end - pos.begin !== 0) { @@ -260,7 +256,7 @@ export function mask(el, options) { value: getValue() }); } - } + }; const clearBuffer = (start, end) => { let i; @@ -269,11 +265,11 @@ export function mask(el, options) { buffer[i] = getPlaceholder(i); } } - } + }; const writeBuffer = () => { el.value = buffer.join(''); - } + }; const checkVal = (allow) => { //try to place characters where they belong @@ -325,8 +321,8 @@ export function mask(el, options) { writeBuffer(); el.value = el.value.substring(0, lastMatch + 1); } - return (partialPosition ? i : firstNonMaskPos); - } + return partialPosition ? i : firstNonMaskPos; + }; const onFocus = (e) => { if (options.readOnly) { @@ -345,25 +341,22 @@ export function mask(el, options) { return; } writeBuffer(); - if (pos === options.mask.replace("?", "").length) { + if (pos === options.mask.replace('?', '').length) { caret(0, pos); } else { caret(pos); } - }, 10); if (options.onFocus) { options.onFocus(e); } - } + }; const onInput = (event) => { - if (androidChrome) - handleAndroidInput(event); - else - handleInputChange(event); - } + if (androidChrome) handleAndroidInput(event); + else handleInputChange(event); + }; const handleInputChange = (e) => { if (options.readOnly) { @@ -379,7 +372,7 @@ export function mask(el, options) { value: getValue() }); } - } + }; const getUnmaskedValue = () => { let unmaskedBuffer = []; @@ -391,17 +384,17 @@ export function mask(el, options) { } return unmaskedBuffer.join(''); - } + }; const updateModel = (e) => { if (options.onChange) { let val = getValue().replace(options.slotChar, ''); options.onChange({ originalEvent: e, - value: (defaultBuffer !== val) ? val : '' + value: defaultBuffer !== val ? val : '' }); } - } + }; const bindEvents = () => { el.addEventListener('focus', onFocus); @@ -410,7 +403,7 @@ export function mask(el, options) { el.addEventListener('keypress', onKeyPress); el.addEventListener('input', onInput); el.addEventListener('paste', handleInputChange); - } + }; const unbindEvents = () => { el.removeEventListener('focus', onFocus); @@ -419,7 +412,7 @@ export function mask(el, options) { el.removeEventListener('keypress', onKeyPress); el.removeEventListener('input', onInput); el.removeEventListener('paste', handleInputChange); - } + }; const init = () => { tests = []; @@ -427,8 +420,8 @@ export function mask(el, options) { len = options.mask.length; firstNonMaskPos = null; defs = { - '9': '[0-9]', - 'a': '[A-Za-z]', + 9: '[0-9]', + a: '[A-Za-z]', '*': '[A-Za-z0-9]' }; @@ -441,8 +434,7 @@ export function mask(el, options) { if (c === '?') { len--; partialPosition = i; - } - else if (defs[c]) { + } else if (defs[c]) { tests.push(new RegExp(defs[c])); if (firstNonMaskPos === null) { firstNonMaskPos = tests.length - 1; @@ -450,8 +442,7 @@ export function mask(el, options) { if (i < partialPosition) { lastRequiredNonMaskPos = tests.length - 1; } - } - else { + } else { tests.push(null); } } @@ -460,10 +451,8 @@ export function mask(el, options) { for (let i = 0; i < maskTokens.length; i++) { let c = maskTokens[i]; if (c !== '?') { - if (defs[c]) - buffer.push(getPlaceholder(i)); - else - buffer.push(c); + if (defs[c]) buffer.push(getPlaceholder(i)); + else buffer.push(c); } } @@ -481,5 +470,5 @@ export function mask(el, options) { unbindEvents, updateModel, getValue - } + }; } diff --git a/components/lib/utils/ObjectUtils.js b/components/lib/utils/ObjectUtils.js index 9c1228937e..177493a5ad 100644 --- a/components/lib/utils/ObjectUtils.js +++ b/components/lib/utils/ObjectUtils.js @@ -1,52 +1,46 @@ export default class ObjectUtils { - static equals(obj1, obj2, field) { - if (field && obj1 && typeof obj1 === 'object' && obj2 && typeof obj2 === 'object') - return (this.resolveFieldData(obj1, field) === this.resolveFieldData(obj2, field)); - else - return this.deepEquals(obj1, obj2); + if (field && obj1 && typeof obj1 === 'object' && obj2 && typeof obj2 === 'object') return this.resolveFieldData(obj1, field) === this.resolveFieldData(obj2, field); + else return this.deepEquals(obj1, obj2); } static deepEquals(a, b) { if (a === b) return true; if (a && b && typeof a == 'object' && typeof b == 'object') { - let arrA = Array.isArray(a) - , arrB = Array.isArray(b) - , i - , length - , key; + let arrA = Array.isArray(a), + arrB = Array.isArray(b), + i, + length, + key; if (arrA && arrB) { length = a.length; if (length !== b.length) return false; - for (i = length; i-- !== 0;) - if (!this.deepEquals(a[i], b[i])) return false; + for (i = length; i-- !== 0; ) if (!this.deepEquals(a[i], b[i])) return false; return true; } if (arrA !== arrB) return false; - let dateA = a instanceof Date - , dateB = b instanceof Date; + let dateA = a instanceof Date, + dateB = b instanceof Date; if (dateA !== dateB) return false; if (dateA && dateB) return a.getTime() === b.getTime(); - let regexpA = a instanceof RegExp - , regexpB = b instanceof RegExp; + let regexpA = a instanceof RegExp, + regexpB = b instanceof RegExp; if (regexpA !== regexpB) return false; if (regexpA && regexpB) return a.toString() === b.toString(); let keys = Object.keys(a); length = keys.length; - if (length !== Object.keys(b).length) - return false; + if (length !== Object.keys(b).length) return false; - for (i = length; i-- !== 0;) - if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false; + for (i = length; i-- !== 0; ) if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false; - for (i = length; i-- !== 0;) { + for (i = length; i-- !== 0; ) { key = keys[i]; if (!this.deepEquals(a[key], b[key])) return false; } @@ -62,11 +56,9 @@ export default class ObjectUtils { if (data && Object.keys(data).length && field) { if (this.isFunction(field)) { return field(data); - } - else if (field.indexOf('.') === -1) { + } else if (field.indexOf('.') === -1) { return data[field]; - } - else { + } else { let fields = field.split('.'); let value = data; for (var i = 0, len = fields.length; i < len; ++i) { @@ -77,8 +69,7 @@ export default class ObjectUtils { } return value; } - } - else { + } else { return null; } } @@ -92,18 +83,20 @@ export default class ObjectUtils { return {}; } - return Object.keys(obj1).filter(key => !obj2.hasOwnProperty(key)).reduce((result, current) => { - result[current] = obj1[current]; - return result; - }, {}); + return Object.keys(obj1) + .filter((key) => !obj2.hasOwnProperty(key)) + .reduce((result, current) => { + result[current] = obj1[current]; + return result; + }, {}); } static reorderArray(value, from, to) { let target; - if (value && (from !== to)) { + if (value && from !== to) { if (to >= value.length) { target = to - value.length; - while ((target--) + 1) { + while (target-- + 1) { value.push(undefined); } } @@ -113,7 +106,7 @@ export default class ObjectUtils { static findIndexInList(value, list, dataKey) { if (list) { - return dataKey ? list.findIndex(item => this.equals(item, value, dataKey)) : list.findIndex(item => item === value); + return dataKey ? list.findIndex((item) => this.equals(item, value, dataKey)) : list.findIndex((item) => item === value); } return -1; @@ -139,8 +132,7 @@ export default class ObjectUtils { if (innerRef && forwardRef) { if (typeof forwardRef === 'function') { forwardRef(innerRef.current); - } - else { + } else { forwardRef.current = innerRef.current; } } @@ -149,38 +141,34 @@ export default class ObjectUtils { static removeAccents(str) { if (str && str.search(/[\xC0-\xFF]/g) > -1) { str = str - .replace(/[\xC0-\xC5]/g, "A") - .replace(/[\xC6]/g, "AE") - .replace(/[\xC7]/g, "C") - .replace(/[\xC8-\xCB]/g, "E") - .replace(/[\xCC-\xCF]/g, "I") - .replace(/[\xD0]/g, "D") - .replace(/[\xD1]/g, "N") - .replace(/[\xD2-\xD6\xD8]/g, "O") - .replace(/[\xD9-\xDC]/g, "U") - .replace(/[\xDD]/g, "Y") - .replace(/[\xDE]/g, "P") - .replace(/[\xE0-\xE5]/g, "a") - .replace(/[\xE6]/g, "ae") - .replace(/[\xE7]/g, "c") - .replace(/[\xE8-\xEB]/g, "e") - .replace(/[\xEC-\xEF]/g, "i") - .replace(/[\xF1]/g, "n") - .replace(/[\xF2-\xF6\xF8]/g, "o") - .replace(/[\xF9-\xFC]/g, "u") - .replace(/[\xFE]/g, "p") - .replace(/[\xFD\xFF]/g, "y"); + .replace(/[\xC0-\xC5]/g, 'A') + .replace(/[\xC6]/g, 'AE') + .replace(/[\xC7]/g, 'C') + .replace(/[\xC8-\xCB]/g, 'E') + .replace(/[\xCC-\xCF]/g, 'I') + .replace(/[\xD0]/g, 'D') + .replace(/[\xD1]/g, 'N') + .replace(/[\xD2-\xD6\xD8]/g, 'O') + .replace(/[\xD9-\xDC]/g, 'U') + .replace(/[\xDD]/g, 'Y') + .replace(/[\xDE]/g, 'P') + .replace(/[\xE0-\xE5]/g, 'a') + .replace(/[\xE6]/g, 'ae') + .replace(/[\xE7]/g, 'c') + .replace(/[\xE8-\xEB]/g, 'e') + .replace(/[\xEC-\xEF]/g, 'i') + .replace(/[\xF1]/g, 'n') + .replace(/[\xF2-\xF6\xF8]/g, 'o') + .replace(/[\xF9-\xFC]/g, 'u') + .replace(/[\xFE]/g, 'p') + .replace(/[\xFD\xFF]/g, 'y'); } return str; } static isEmpty(value) { - return ( - value === null || value === undefined || value === '' || - (Array.isArray(value) && value.length === 0) || - (!(value instanceof Date) && typeof value === 'object' && Object.keys(value).length === 0) - ); + return value === null || value === undefined || value === '' || (Array.isArray(value) && value.length === 0) || (!(value instanceof Date) && typeof value === 'object' && Object.keys(value).length === 0); } static isNotEmpty(value) { @@ -193,19 +181,14 @@ export default class ObjectUtils { const emptyValue1 = this.isEmpty(value1); const emptyValue2 = this.isEmpty(value2); - if (emptyValue1 && emptyValue2) - result = 0; - else if (emptyValue1) - result = order; - else if (emptyValue2) - result = -order; - else if (typeof value1 === 'string' && typeof value2 === 'string') - result = value1.localeCompare(value2, locale, { numeric: true }); - else - result = (value1 < value2) ? -1 : (value1 > value2) ? 1 : 0; + if (emptyValue1 && emptyValue2) result = 0; + else if (emptyValue1) result = order; + else if (emptyValue2) result = -order; + else if (typeof value1 === 'string' && typeof value2 === 'string') result = value1.localeCompare(value2, locale, { numeric: true }); + else result = value1 < value2 ? -1 : value1 > value2 ? 1 : 0; // nullSortOrder == 1 means Excel like sort nulls at bottom - const finalSortOrder = nullSortOrder === 1 ? order: nullSortOrder; + const finalSortOrder = nullSortOrder === 1 ? order : nullSortOrder; return finalSortOrder * result; } } diff --git a/components/lib/utils/ZIndexUtils.js b/components/lib/utils/ZIndexUtils.js index 736f87a572..7a20636199 100644 --- a/components/lib/utils/ZIndexUtils.js +++ b/components/lib/utils/ZIndexUtils.js @@ -7,23 +7,23 @@ function handler() { zIndexes.push({ key, value: newZIndex }); return newZIndex; - } + }; const revertZIndex = (zIndex) => { - zIndexes = zIndexes.filter(obj => obj.value !== zIndex); - } + zIndexes = zIndexes.filter((obj) => obj.value !== zIndex); + }; const getCurrentZIndex = (key, autoZIndex) => { return getLastZIndex(key, autoZIndex).value; - } + }; const getLastZIndex = (key, autoZIndex, baseZIndex = 0) => { - return [...zIndexes].reverse().find(obj => (autoZIndex ? true : obj.key === key)) || { key, value: baseZIndex }; - } + return [...zIndexes].reverse().find((obj) => (autoZIndex ? true : obj.key === key)) || { key, value: baseZIndex }; + }; const getZIndex = (el) => { - return el ? parseInt(el.style.zIndex, 10) || 0 : 0 - } + return el ? parseInt(el.style.zIndex, 10) || 0 : 0; + }; return { get: getZIndex, diff --git a/components/lib/utils/utils.d.ts b/components/lib/utils/utils.d.ts index 41515b739e..0b43a60d61 100644 --- a/components/lib/utils/utils.d.ts +++ b/components/lib/utils/utils.d.ts @@ -1,4 +1,4 @@ -import React from "react"; +import React from 'react'; export declare function classNames(...args: any[]): string | undefined; @@ -23,8 +23,8 @@ export declare class DomHandler { static getOuterHeight(el: HTMLElement, margin: boolean): number; static getClientHeight(el: HTMLElement, margin: boolean): number; static getClientWidth(el: HTMLElement, margin: boolean): number; - static getViewport(): { width: number; height: number; }; - static getOffset(el: HTMLElement): { top: any; left: any; }; + static getViewport(): { width: number; height: number }; + static getOffset(el: HTMLElement): { top: any; left: any }; static index(el: HTMLElement): number; static addMultipleClasses(el: HTMLElement, className: string): void; static removeMultipleClasses(el: HTMLElement, className: string): void; @@ -44,7 +44,7 @@ export declare class DomHandler { static getScrollableParents(el: HTMLElement): any[]; static getHiddenElementOuterHeight(el: HTMLElement): number; static getHiddenElementOuterWidth(el: HTMLElement): number; - static getHiddenElementDimensions(el: HTMLElement): { width?: number; height?: number; }; + static getHiddenElementDimensions(el: HTMLElement): { width?: number; height?: number }; static fadeIn(el: HTMLElement, duration: number): void; static fadeOut(el: HTMLElement, duration: number): void; static getUserAgent(): string; @@ -59,7 +59,7 @@ export declare class DomHandler { static clearSelection(): void; static calculateScrollbarWidth(el: HTMLElement): number; static getBrowser(): object; - static resolveUserAgent(): { browser: string; version: string; }; + static resolveUserAgent(): { browser: string; version: string }; static isVisible(el: HTMLElement): boolean; static isExist(el: HTMLElement): boolean; static hasDOM(): boolean; @@ -67,12 +67,12 @@ export declare class DomHandler { static getFirstFocusableElement(el: HTMLElement, selector?: string): any; static getLastFocusableElement(el: HTMLElement, selector?: string): any; static focus(el: HTMLElement, scrollTo?: boolean): void; - static getCursorOffset(el: HTMLElement, prevText?: string, nextText?: string, currentText?: string): { top: any; left: any; }; + static getCursorOffset(el: HTMLElement, prevText?: string, nextText?: string, currentText?: string): { top: any; left: any }; static invokeElementMethod(el: HTMLElement, methodName: string, arg: any): void; static isClickable(el: HTMLElement): boolean; static applyStyle(el: HTMLElement, style: any): void; static exportCSV(csv: any, filename: string): void; - static saveAs(file: { name: string, url: any }): boolean; + static saveAs(file: { name: string; url: any }): boolean; static createInlineStyle(nonce: string): HTMLElement; static removeInlineStyle(styleElement: HTMLElement): HTMLElement | null; static getTargetElement(target: any): HTMLElement | null; @@ -82,15 +82,18 @@ export declare function EventBus(): { on(type: string, fn: any): void; emit(type: string, evt?: any): void; off(type: string, fn: any): void; -} +}; -export declare function mask(el: HTMLElement, options: object): { +export declare function mask( + el: HTMLElement, + options: object +): { init(): void; bindEvents(): void; unbindEvents(): void; updateModel(e: React.SyntheticEvent): void; getValue(): string; -} +}; export declare class ObjectUtils { static equals(obj1: any, obj2: any, field: string): boolean; diff --git a/components/lib/virtualscroller/VirtualScroller.js b/components/lib/virtualscroller/VirtualScroller.js index 6b844366c1..db538464e5 100644 --- a/components/lib/virtualscroller/VirtualScroller.js +++ b/components/lib/virtualscroller/VirtualScroller.js @@ -2,661 +2,627 @@ import * as React from 'react'; import { useEventListener, useMountEffect, usePrevious, useResizeListener, useUpdateEffect } from '../hooks/Hooks'; import { classNames, DomHandler, ObjectUtils } from '../utils/Utils'; -export const VirtualScroller = React.memo(React.forwardRef((props, ref) => { - const vertical = props.orientation === 'vertical'; - const horizontal = props.orientation === 'horizontal'; - const both = props.orientation === 'both'; - - const [firstState, setFirstState] = React.useState(both ? { rows: 0, cols: 0 } : 0); - const [lastState, setLastState] = React.useState(both ? { rows: 0, cols: 0 } : 0); - const [numItemsInViewportState, setNumItemsInViewportState] = React.useState(both ? { rows: 0, cols: 0 } : 0); - const [numToleratedItemsState, setNumToleratedItemsState] = React.useState(props.numToleratedItems); - const [loadingState, setLoadingState] = React.useState(props.loading || false); - const [loaderArrState, setLoaderArrState] = React.useState([]); - const elementRef = React.useRef(null); - const contentRef = React.useRef(null); - const spacerRef = React.useRef(null); - const stickyRef = React.useRef(null); - const lastScrollPos = React.useRef(both ? { top: 0, left: 0 } : 0); - const scrollTimeout = React.useRef(null); - const resizeTimeout = React.useRef(null); - const defaultWidth = React.useRef(null); - const defaultHeight = React.useRef(null); - const prevItems = usePrevious(props.items); - const prevLoading = usePrevious(props.loading); - - const [bindWindowResizeListener,] = useResizeListener({ listener: (event) => onResize(event) }); - const [bindOrientationChangeListener,] = useEventListener({ target: 'window', type: 'orientationchange', listener: (event) => onResize(event) }); - - const getElementRef = () => { - return elementRef; - } - - const scrollTo = (options) => { - lastScrollPos.current = both ? { top: 0, left: 0 } : 0; - elementRef.current && elementRef.current.scrollTo(options); - } - - const scrollToIndex = (index, behavior = 'auto') => { - const { numToleratedItems } = calculateNumItems(); - const calculateFirst = (_index = 0, _numT) => (_index <= _numT ? 0 : _index); - const calculateCoord = (_first, _size) => (_first * _size); - const scrollToItem = (left = 0, top = 0) => scrollTo({ left, top, behavior }); - - if (both) { - const newFirst = { rows: calculateFirst(index[0], numToleratedItems[0]), cols: calculateFirst(index[1], numToleratedItems[1]) }; - if (newFirst.rows !== firstState.rows || newFirst.cols !== firstState.cols) { - scrollToItem(calculateCoord(newFirst.cols, props.itemSize[1]), calculateCoord(newFirst.rows, props.itemSize[0])); - } - } - else { - const newFirst = calculateFirst(index, numToleratedItems); +export const VirtualScroller = React.memo( + React.forwardRef((props, ref) => { + const vertical = props.orientation === 'vertical'; + const horizontal = props.orientation === 'horizontal'; + const both = props.orientation === 'both'; + + const [firstState, setFirstState] = React.useState(both ? { rows: 0, cols: 0 } : 0); + const [lastState, setLastState] = React.useState(both ? { rows: 0, cols: 0 } : 0); + const [numItemsInViewportState, setNumItemsInViewportState] = React.useState(both ? { rows: 0, cols: 0 } : 0); + const [numToleratedItemsState, setNumToleratedItemsState] = React.useState(props.numToleratedItems); + const [loadingState, setLoadingState] = React.useState(props.loading || false); + const [loaderArrState, setLoaderArrState] = React.useState([]); + const elementRef = React.useRef(null); + const contentRef = React.useRef(null); + const spacerRef = React.useRef(null); + const stickyRef = React.useRef(null); + const lastScrollPos = React.useRef(both ? { top: 0, left: 0 } : 0); + const scrollTimeout = React.useRef(null); + const resizeTimeout = React.useRef(null); + const defaultWidth = React.useRef(null); + const defaultHeight = React.useRef(null); + const prevItems = usePrevious(props.items); + const prevLoading = usePrevious(props.loading); + + const [bindWindowResizeListener] = useResizeListener({ listener: (event) => onResize(event) }); + const [bindOrientationChangeListener] = useEventListener({ target: 'window', type: 'orientationchange', listener: (event) => onResize(event) }); + + const getElementRef = () => { + return elementRef; + }; - if (newFirst !== firstState) { - horizontal ? scrollToItem(calculateCoord(newFirst, props.itemSize), 0) : scrollToItem(0, calculateCoord(newFirst, props.itemSize)); - } - } - } + const scrollTo = (options) => { + lastScrollPos.current = both ? { top: 0, left: 0 } : 0; + elementRef.current && elementRef.current.scrollTo(options); + }; - const scrollInView = (index, to, behavior = 'auto') => { - if (to) { - const { first, viewport } = getRenderedRange(); + const scrollToIndex = (index, behavior = 'auto') => { + const { numToleratedItems } = calculateNumItems(); + const calculateFirst = (_index = 0, _numT) => (_index <= _numT ? 0 : _index); + const calculateCoord = (_first, _size) => _first * _size; const scrollToItem = (left = 0, top = 0) => scrollTo({ left, top, behavior }); - const isToStart = to === 'to-start'; - const isToEnd = to === 'to-end'; - if (isToStart) { - if (both) { - if (viewport.first.rows - first.rows > index[0]) { - scrollToItem(viewport.first.cols * props.itemSize[1], (viewport.first.rows - 1) * props.itemSize[0]); - } - else if (viewport.first.cols - first.cols > index[1]) { - scrollToItem((viewport.first.cols - 1) * props.itemSize[1], viewport.first.rows * props.itemSize[0]); - } + if (both) { + const newFirst = { rows: calculateFirst(index[0], numToleratedItems[0]), cols: calculateFirst(index[1], numToleratedItems[1]) }; + if (newFirst.rows !== firstState.rows || newFirst.cols !== firstState.cols) { + scrollToItem(calculateCoord(newFirst.cols, props.itemSize[1]), calculateCoord(newFirst.rows, props.itemSize[0])); } - else { - if (viewport.first - first > index) { - const pos = (viewport.first - 1) * props.itemSize; - horizontal ? scrollToItem(pos, 0) : scrollToItem(0, pos); - } + } else { + const newFirst = calculateFirst(index, numToleratedItems); + + if (newFirst !== firstState) { + horizontal ? scrollToItem(calculateCoord(newFirst, props.itemSize), 0) : scrollToItem(0, calculateCoord(newFirst, props.itemSize)); } } - else if (isToEnd) { - if (both) { - if (viewport.last.rows - first.rows <= index[0] + 1) { - scrollToItem(viewport.first.cols * props.itemSize[1], (viewport.first.rows + 1) * props.itemSize[0]); - } - else if (viewport.last.cols - first.cols <= index[1] + 1) { - scrollToItem((viewport.first.cols + 1) * props.itemSize[1], viewport.first.rows * props.itemSize[0]); + }; + + const scrollInView = (index, to, behavior = 'auto') => { + if (to) { + const { first, viewport } = getRenderedRange(); + const scrollToItem = (left = 0, top = 0) => scrollTo({ left, top, behavior }); + const isToStart = to === 'to-start'; + const isToEnd = to === 'to-end'; + + if (isToStart) { + if (both) { + if (viewport.first.rows - first.rows > index[0]) { + scrollToItem(viewport.first.cols * props.itemSize[1], (viewport.first.rows - 1) * props.itemSize[0]); + } else if (viewport.first.cols - first.cols > index[1]) { + scrollToItem((viewport.first.cols - 1) * props.itemSize[1], viewport.first.rows * props.itemSize[0]); + } + } else { + if (viewport.first - first > index) { + const pos = (viewport.first - 1) * props.itemSize; + horizontal ? scrollToItem(pos, 0) : scrollToItem(0, pos); + } } - } - else { - if (viewport.last - first <= index + 1) { - const pos = (viewport.first + 1) * props.itemSize; - horizontal ? scrollToItem(pos, 0) : scrollToItem(0, pos); + } else if (isToEnd) { + if (both) { + if (viewport.last.rows - first.rows <= index[0] + 1) { + scrollToItem(viewport.first.cols * props.itemSize[1], (viewport.first.rows + 1) * props.itemSize[0]); + } else if (viewport.last.cols - first.cols <= index[1] + 1) { + scrollToItem((viewport.first.cols + 1) * props.itemSize[1], viewport.first.rows * props.itemSize[0]); + } + } else { + if (viewport.last - first <= index + 1) { + const pos = (viewport.first + 1) * props.itemSize; + horizontal ? scrollToItem(pos, 0) : scrollToItem(0, pos); + } } } + } else { + scrollToIndex(index, behavior); } - } - else { - scrollToIndex(index, behavior); - } - } + }; - const getRows = () => { - return loadingState ? (props.loaderDisabled ? loaderArrState : []) : loadedItems(); - } + const getRows = () => { + return loadingState ? (props.loaderDisabled ? loaderArrState : []) : loadedItems(); + }; - const getColumns = () => { - if (props.columns && both || horizontal) { - return loadingState && props.loaderDisabled ? - (both ? loaderArrState[0] : loaderArrState) : - props.columns.slice((both ? firstState.cols : firstState), (both ? lastState.cols : lastState)); - } + const getColumns = () => { + if ((props.columns && both) || horizontal) { + return loadingState && props.loaderDisabled ? (both ? loaderArrState[0] : loaderArrState) : props.columns.slice(both ? firstState.cols : firstState, both ? lastState.cols : lastState); + } - return props.columns; - } + return props.columns; + }; - const getRenderedRange = () => { - const calculateFirstInViewport = (_pos, _size) => Math.floor(_pos / (_size || _pos)); + const getRenderedRange = () => { + const calculateFirstInViewport = (_pos, _size) => Math.floor(_pos / (_size || _pos)); - let firstInViewport = firstState; - let lastInViewport = 0; + let firstInViewport = firstState; + let lastInViewport = 0; - if (elementRef.current) { - const { scrollTop, scrollLeft } = elementRef.current; + if (elementRef.current) { + const { scrollTop, scrollLeft } = elementRef.current; - if (both) { - firstInViewport = { rows: calculateFirstInViewport(scrollTop, props.itemSize[0]), cols: calculateFirstInViewport(scrollLeft, props.itemSize[1]) }; - lastInViewport = { rows: firstInViewport.rows + numItemsInViewportState.rows, cols: firstInViewport.cols + numItemsInViewportState.cols }; - } - else { - const scrollPos = horizontal ? scrollLeft : scrollTop; - firstInViewport = calculateFirstInViewport(scrollPos, props.itemSize); - lastInViewport = firstInViewport + numItemsInViewportState; + if (both) { + firstInViewport = { rows: calculateFirstInViewport(scrollTop, props.itemSize[0]), cols: calculateFirstInViewport(scrollLeft, props.itemSize[1]) }; + lastInViewport = { rows: firstInViewport.rows + numItemsInViewportState.rows, cols: firstInViewport.cols + numItemsInViewportState.cols }; + } else { + const scrollPos = horizontal ? scrollLeft : scrollTop; + firstInViewport = calculateFirstInViewport(scrollPos, props.itemSize); + lastInViewport = firstInViewport + numItemsInViewportState; + } } - } - return { - first: firstState, - last: lastState, - viewport: { - first: firstInViewport, - last: lastInViewport - } - } - } - - const calculateNumItems = () => { - const contentPos = getContentPosition(); - const contentWidth = elementRef.current ? elementRef.current.offsetWidth - contentPos.left : 0; - const contentHeight = elementRef.current ? elementRef.current.offsetHeight - contentPos.top : 0; - const calculateNumItemsInViewport = (_contentSize, _itemSize) => Math.ceil(_contentSize / (_itemSize || _contentSize)); - const calculateNumToleratedItems = (_numItems) => Math.ceil(_numItems / 2); - const numItemsInViewport = both ? - { rows: calculateNumItemsInViewport(contentHeight, props.itemSize[0]), cols: calculateNumItemsInViewport(contentWidth, props.itemSize[1]) } : - calculateNumItemsInViewport((horizontal ? contentWidth : contentHeight), props.itemSize); - - const numToleratedItems = numToleratedItemsState || (both ? - [calculateNumToleratedItems(numItemsInViewport.rows), calculateNumToleratedItems(numItemsInViewport.cols)] : - calculateNumToleratedItems(numItemsInViewport)); - - return { numItemsInViewport, numToleratedItems }; - } - - const calculateOptions = () => { - const { numItemsInViewport, numToleratedItems } = calculateNumItems(); - const calculateLast = (_first, _num, _numT, _isCols) => getLast(_first + _num + ((_first < _numT ? 2 : 3) * _numT), _isCols); - const last = both ? - { rows: calculateLast(firstState.rows, numItemsInViewport.rows, numToleratedItems[0]), cols: calculateLast(firstState.cols, numItemsInViewport.cols, numToleratedItems[1], true) } : - calculateLast(firstState, numItemsInViewport, numToleratedItems); - - setNumItemsInViewportState(numItemsInViewport); - setNumToleratedItemsState(numToleratedItems); - setLastState(last); - - if (props.showLoader) { - setLoaderArrState(both ? - Array.from({ length: numItemsInViewport.rows }).map(() => Array.from({ length: numItemsInViewport.cols })) : - Array.from({ length: numItemsInViewport })); - } + return { + first: firstState, + last: lastState, + viewport: { + first: firstInViewport, + last: lastInViewport + } + }; + }; - if (props.lazy) { - props.onLazyLoad && props.onLazyLoad({ first: firstState, last }); - } - } + const calculateNumItems = () => { + const contentPos = getContentPosition(); + const contentWidth = elementRef.current ? elementRef.current.offsetWidth - contentPos.left : 0; + const contentHeight = elementRef.current ? elementRef.current.offsetHeight - contentPos.top : 0; + const calculateNumItemsInViewport = (_contentSize, _itemSize) => Math.ceil(_contentSize / (_itemSize || _contentSize)); + const calculateNumToleratedItems = (_numItems) => Math.ceil(_numItems / 2); + const numItemsInViewport = both + ? { rows: calculateNumItemsInViewport(contentHeight, props.itemSize[0]), cols: calculateNumItemsInViewport(contentWidth, props.itemSize[1]) } + : calculateNumItemsInViewport(horizontal ? contentWidth : contentHeight, props.itemSize); - const calculateAutoSize = (loading) => { - if (props.autoSize && !loading) { - Promise.resolve().then(() => { - if (contentRef.current) { - contentRef.current.style.minHeight = contentRef.current.style.minWidth = 'auto'; + const numToleratedItems = numToleratedItemsState || (both ? [calculateNumToleratedItems(numItemsInViewport.rows), calculateNumToleratedItems(numItemsInViewport.cols)] : calculateNumToleratedItems(numItemsInViewport)); - const { offsetWidth, offsetHeight } = contentRef.current; + return { numItemsInViewport, numToleratedItems }; + }; - (both || horizontal) && (elementRef.current.style.width = (offsetWidth < defaultWidth.current ? offsetWidth : defaultWidth.current) + 'px'); - (both || vertical) && (elementRef.current.style.height = (offsetHeight < defaultHeight.current ? offsetHeight : defaultHeight.current) + 'px'); - contentRef.current.style.minHeight = contentRef.current.style.minWidth = ''; - } - }); - } - } + const calculateOptions = () => { + const { numItemsInViewport, numToleratedItems } = calculateNumItems(); + const calculateLast = (_first, _num, _numT, _isCols) => getLast(_first + _num + (_first < _numT ? 2 : 3) * _numT, _isCols); + const last = both + ? { rows: calculateLast(firstState.rows, numItemsInViewport.rows, numToleratedItems[0]), cols: calculateLast(firstState.cols, numItemsInViewport.cols, numToleratedItems[1], true) } + : calculateLast(firstState, numItemsInViewport, numToleratedItems); - const getLast = (last = 0, isCols) => { - return props.items ? Math.min((isCols ? (props.columns || props.items[0]).length : props.items.length), last) : 0; - } + setNumItemsInViewportState(numItemsInViewport); + setNumToleratedItemsState(numToleratedItems); + setLastState(last); - const getContentPosition = () => { - if (contentRef.current) { - const style = getComputedStyle(contentRef.current); - const left = parseInt(style.paddingLeft, 10) + Math.max(parseInt(style.left, 10), 0); - const right = parseInt(style.paddingRight, 10) + Math.max(parseInt(style.right, 10), 0); - const top = parseInt(style.paddingTop, 10) + Math.max(parseInt(style.top, 10), 0); - const bottom = parseInt(style.paddingBottom, 10) + Math.max(parseInt(style.bottom, 10), 0); + if (props.showLoader) { + setLoaderArrState(both ? Array.from({ length: numItemsInViewport.rows }).map(() => Array.from({ length: numItemsInViewport.cols })) : Array.from({ length: numItemsInViewport })); + } - return { left, right, top, bottom, x: left + right, y: top + bottom }; - } + if (props.lazy) { + props.onLazyLoad && props.onLazyLoad({ first: firstState, last }); + } + }; - return { left: 0, right: 0, top: 0, bottom: 0, x: 0, y: 0 }; - } + const calculateAutoSize = (loading) => { + if (props.autoSize && !loading) { + Promise.resolve().then(() => { + if (contentRef.current) { + contentRef.current.style.minHeight = contentRef.current.style.minWidth = 'auto'; - const setSize = () => { - if (elementRef.current) { - const parentElement = elementRef.current.parentElement; - const width = props.scrollWidth || `${(elementRef.current.offsetWidth || parentElement.offsetWidth)}px`; - const height = props.scrollHeight || `${(elementRef.current.offsetHeight || parentElement.offsetHeight)}px`; - const setProp = (_name, _value) => elementRef.current.style[_name] = _value; + const { offsetWidth, offsetHeight } = contentRef.current; - if (both || horizontal) { - setProp('height', height); - setProp('width', width); + (both || horizontal) && (elementRef.current.style.width = (offsetWidth < defaultWidth.current ? offsetWidth : defaultWidth.current) + 'px'); + (both || vertical) && (elementRef.current.style.height = (offsetHeight < defaultHeight.current ? offsetHeight : defaultHeight.current) + 'px'); + contentRef.current.style.minHeight = contentRef.current.style.minWidth = ''; + } + }); } - else { - setProp('height', height); + }; + + const getLast = (last = 0, isCols) => { + return props.items ? Math.min(isCols ? (props.columns || props.items[0]).length : props.items.length, last) : 0; + }; + + const getContentPosition = () => { + if (contentRef.current) { + const style = getComputedStyle(contentRef.current); + const left = parseInt(style.paddingLeft, 10) + Math.max(parseInt(style.left, 10), 0); + const right = parseInt(style.paddingRight, 10) + Math.max(parseInt(style.right, 10), 0); + const top = parseInt(style.paddingTop, 10) + Math.max(parseInt(style.top, 10), 0); + const bottom = parseInt(style.paddingBottom, 10) + Math.max(parseInt(style.bottom, 10), 0); + + return { left, right, top, bottom, x: left + right, y: top + bottom }; } - } - } - const setSpacerSize = () => { - const items = props.items; + return { left: 0, right: 0, top: 0, bottom: 0, x: 0, y: 0 }; + }; - if (spacerRef.current && items) { - const contentPos = getContentPosition(); - const setProp = (_name, _value, _size, _cpos = 0) => spacerRef.current.style[_name] = (((_value || []).length * _size) + _cpos) + 'px'; + const setSize = () => { + if (elementRef.current) { + const parentElement = elementRef.current.parentElement; + const width = props.scrollWidth || `${elementRef.current.offsetWidth || parentElement.offsetWidth}px`; + const height = props.scrollHeight || `${elementRef.current.offsetHeight || parentElement.offsetHeight}px`; + const setProp = (_name, _value) => (elementRef.current.style[_name] = _value); + + if (both || horizontal) { + setProp('height', height); + setProp('width', width); + } else { + setProp('height', height); + } + } + }; - if (both) { - setProp('height', items, props.itemSize[0], contentPos.y); - setProp('width', (props.columns || items[1]), props.itemSize[1], contentPos.x); + const setSpacerSize = () => { + const items = props.items; + + if (spacerRef.current && items) { + const contentPos = getContentPosition(); + const setProp = (_name, _value, _size, _cpos = 0) => (spacerRef.current.style[_name] = (_value || []).length * _size + _cpos + 'px'); + + if (both) { + setProp('height', items, props.itemSize[0], contentPos.y); + setProp('width', props.columns || items[1], props.itemSize[1], contentPos.x); + } else { + horizontal ? setProp('width', props.columns || items, props.itemSize, contentPos.x) : setProp('height', items, props.itemSize, contentPos.y); + } } - else { - horizontal ? setProp('width', (props.columns || items), props.itemSize, contentPos.x) : setProp('height', items, props.itemSize, contentPos.y); + }; + + const setContentPosition = (pos) => { + if (contentRef.current) { + const first = pos ? pos.first : firstState; + const calculateTranslateVal = (_first, _size) => _first * _size; + const setTransform = (_x = 0, _y = 0) => { + stickyRef.current && (stickyRef.current.style.top = `-${_y}px`); + contentRef.current.style.transform = `translate3d(${_x}px, ${_y}px, 0)`; + }; + + if (both) { + setTransform(calculateTranslateVal(first.cols, props.itemSize[1]), calculateTranslateVal(first.rows, props.itemSize[0])); + } else { + const translateVal = calculateTranslateVal(first, props.itemSize); + horizontal ? setTransform(translateVal, 0) : setTransform(0, translateVal); + } } - } - } - - const setContentPosition = (pos) => { - if (contentRef.current) { - const first = pos ? pos.first : firstState; - const calculateTranslateVal = (_first, _size) => (_first * _size); - const setTransform = (_x = 0, _y = 0) => { - stickyRef.current && (stickyRef.current.style.top = `-${_y}px`); - contentRef.current.style.transform = `translate3d(${_x}px, ${_y}px, 0)`; + }; + + const onScrollPositionChange = (event) => { + const target = event.target; + const contentPos = getContentPosition(); + const calculateScrollPos = (_pos, _cpos) => (_pos ? (_pos > _cpos ? _pos - _cpos : _pos) : 0); + const calculateCurrentIndex = (_pos, _size) => Math.floor(_pos / (_size || _pos)); + const calculateTriggerIndex = (_currentIndex, _first, _last, _num, _numT, _isScrollDownOrRight) => { + return _currentIndex <= _numT ? _numT : _isScrollDownOrRight ? _last - _num - _numT : _first + _numT - 1; + }; + const calculateFirst = (_currentIndex, _triggerIndex, _first, _last, _num, _numT, _isScrollDownOrRight) => { + if (_currentIndex <= _numT) return 0; + else return Math.max(0, _isScrollDownOrRight ? (_currentIndex < _triggerIndex ? _first : _currentIndex - _numT) : _currentIndex > _triggerIndex ? _first : _currentIndex - 2 * _numT); + }; + const calculateLast = (_currentIndex, _first, _last, _num, _numT, _isCols) => { + let lastValue = _first + _num + 2 * _numT; + + if (_currentIndex >= _numT) { + lastValue += _numT + 1; + } + + return getLast(lastValue, _isCols); }; + const scrollTop = calculateScrollPos(target.scrollTop, contentPos.top); + const scrollLeft = calculateScrollPos(target.scrollLeft, contentPos.left); + + let newFirst = both ? { rows: 0, cols: 0 } : 0; + let newLast = lastState; + let isRangeChanged = false; + let newScrollPos = lastScrollPos.current; + if (both) { - setTransform(calculateTranslateVal(first.cols, props.itemSize[1]), calculateTranslateVal(first.rows, props.itemSize[0])); + const isScrollDown = lastScrollPos.current.top <= scrollTop; + const isScrollRight = lastScrollPos.current.left <= scrollLeft; + const currentIndex = { rows: calculateCurrentIndex(scrollTop, props.itemSize[0]), cols: calculateCurrentIndex(scrollLeft, props.itemSize[1]) }; + const triggerIndex = { + rows: calculateTriggerIndex(currentIndex.rows, firstState.rows, lastState.rows, numItemsInViewportState.rows, numToleratedItemsState[0], isScrollDown), + cols: calculateTriggerIndex(currentIndex.cols, firstState.cols, lastState.cols, numItemsInViewportState.cols, numToleratedItemsState[1], isScrollRight) + }; + + newFirst = { + rows: calculateFirst(currentIndex.rows, triggerIndex.rows, firstState.rows, lastState.rows, numItemsInViewportState.rows, numToleratedItemsState[0], isScrollDown), + cols: calculateFirst(currentIndex.cols, triggerIndex.cols, firstState.cols, lastState.cols, numItemsInViewportState.cols, numToleratedItemsState[1], isScrollRight) + }; + newLast = { + rows: calculateLast(currentIndex.rows, newFirst.rows, lastState.rows, numItemsInViewportState.rows, numToleratedItemsState[0]), + cols: calculateLast(currentIndex.cols, newFirst.cols, lastState.cols, numItemsInViewportState.cols, numToleratedItemsState[1], true) + }; + + isRangeChanged = newFirst.rows !== firstState.rows || newLast.rows !== lastState.rows || newFirst.cols !== firstState.cols || newLast.cols !== lastState.cols; + newScrollPos = { top: scrollTop, left: scrollLeft }; + } else { + const scrollPos = horizontal ? scrollLeft : scrollTop; + const isScrollDownOrRight = lastScrollPos.current <= scrollPos; + const currentIndex = calculateCurrentIndex(scrollPos, props.itemSize); + const triggerIndex = calculateTriggerIndex(currentIndex, firstState, lastState, numItemsInViewportState, numToleratedItemsState, isScrollDownOrRight); + + newFirst = calculateFirst(currentIndex, triggerIndex, firstState, lastState, numItemsInViewportState, numToleratedItemsState, isScrollDownOrRight); + newLast = calculateLast(currentIndex, newFirst, lastState, numItemsInViewportState, numToleratedItemsState); + isRangeChanged = newFirst !== firstState || newLast !== lastState; + newScrollPos = scrollPos; } - else { - const translateVal = calculateTranslateVal(first, props.itemSize); - horizontal ? setTransform(translateVal, 0) : setTransform(0, translateVal); + + return { + first: newFirst, + last: newLast, + isRangeChanged, + scrollPos: newScrollPos + }; + }; + + const onScrollChange = (event) => { + const { first, last, isRangeChanged, scrollPos } = onScrollPositionChange(event); + + if (isRangeChanged) { + const newState = { first, last }; + + setContentPosition(newState); + + setFirstState(first); + setLastState(last); + lastScrollPos.current = scrollPos; + + props.onScrollIndexChange && props.onScrollIndexChange(newState); + + if (props.lazy) { + props.onLazyLoad && props.onLazyLoad(newState); + } } - } - } - - const onScrollPositionChange = (event) => { - const target = event.target; - const contentPos = getContentPosition(); - const calculateScrollPos = (_pos, _cpos) => _pos ? (_pos > _cpos ? _pos - _cpos : _pos) : 0; - const calculateCurrentIndex = (_pos, _size) => Math.floor(_pos / (_size || _pos)); - const calculateTriggerIndex = (_currentIndex, _first, _last, _num, _numT, _isScrollDownOrRight) => { - return (_currentIndex <= _numT ? _numT : (_isScrollDownOrRight ? (_last - _num - _numT) : (_first + _numT - 1))) }; - const calculateFirst = (_currentIndex, _triggerIndex, _first, _last, _num, _numT, _isScrollDownOrRight) => { - if (_currentIndex <= _numT) - return 0; - else - return Math.max(0, _isScrollDownOrRight ? - (_currentIndex < _triggerIndex ? _first : _currentIndex - _numT) : - (_currentIndex > _triggerIndex ? _first : _currentIndex - (2 * _numT))); + + const onScroll = (event) => { + props.onScroll && props.onScroll(event); + + if (props.delay) { + if (scrollTimeout.current) { + clearTimeout(scrollTimeout.current); + } + + if (!loadingState && props.showLoader) { + const { isRangeChanged: changed } = onScrollPositionChange(event); + changed && setLoadingState(true); + } + + scrollTimeout.current = setTimeout(() => { + onScrollChange(event); + + if (loadingState && props.showLoader && (!props.lazy || props.loading === undefined)) { + setLoadingState(false); + } + }, props.delay); + } else { + onScrollChange(event); + } }; - const calculateLast = (_currentIndex, _first, _last, _num, _numT, _isCols) => { - let lastValue = _first + _num + (2 * _numT); - if (_currentIndex >= _numT) { - lastValue += (_numT + 1); + const onResize = () => { + if (resizeTimeout.current) { + clearTimeout(resizeTimeout.current); } - return getLast(lastValue, _isCols); + resizeTimeout.current = setTimeout(() => { + if (elementRef.current) { + const [width, height] = [DomHandler.getWidth(elementRef.current), DomHandler.getHeight(elementRef.current)]; + const [isDiffWidth, isDiffHeight] = [width !== defaultWidth.current, height !== defaultHeight.current]; + const reinit = both ? isDiffWidth || isDiffHeight : horizontal ? isDiffWidth : vertical ? isDiffHeight : false; + + if (reinit) { + setNumToleratedItemsState(props.numToleratedItems); + defaultWidth.current = width; + defaultHeight.current = height; + } + } + }, props.resizeDelay); }; - const scrollTop = calculateScrollPos(target.scrollTop, contentPos.top); - const scrollLeft = calculateScrollPos(target.scrollLeft, contentPos.left); - - let newFirst = both ? { rows: 0, cols: 0 } : 0; - let newLast = lastState; - let isRangeChanged = false; - let newScrollPos = lastScrollPos.current; - - if (both) { - const isScrollDown = lastScrollPos.current.top <= scrollTop; - const isScrollRight = lastScrollPos.current.left <= scrollLeft; - const currentIndex = { rows: calculateCurrentIndex(scrollTop, props.itemSize[0]), cols: calculateCurrentIndex(scrollLeft, props.itemSize[1]) }; - const triggerIndex = { - rows: calculateTriggerIndex(currentIndex.rows, firstState.rows, lastState.rows, numItemsInViewportState.rows, numToleratedItemsState[0], isScrollDown), - cols: calculateTriggerIndex(currentIndex.cols, firstState.cols, lastState.cols, numItemsInViewportState.cols, numToleratedItemsState[1], isScrollRight) + const getOptions = (renderedIndex) => { + const count = (props.items || []).length; + const index = both ? firstState.rows + renderedIndex : firstState + renderedIndex; + + return { + index, + count, + first: index === 0, + last: index === count - 1, + even: index % 2 === 0, + odd: index % 2 !== 0, + props }; + }; - newFirst = { - rows: calculateFirst(currentIndex.rows, triggerIndex.rows, firstState.rows, lastState.rows, numItemsInViewportState.rows, numToleratedItemsState[0], isScrollDown), - cols: calculateFirst(currentIndex.cols, triggerIndex.cols, firstState.cols, lastState.cols, numItemsInViewportState.cols, numToleratedItemsState[1], isScrollRight) - }; - newLast = { - rows: calculateLast(currentIndex.rows, newFirst.rows, lastState.rows, numItemsInViewportState.rows, numToleratedItemsState[0]), - cols: calculateLast(currentIndex.cols, newFirst.cols, lastState.cols, numItemsInViewportState.cols, numToleratedItemsState[1], true) + const loaderOptions = (index, extOptions) => { + const count = loaderArrState.length; + + return { + index, + count, + first: index === 0, + last: index === count - 1, + even: index % 2 === 0, + odd: index % 2 !== 0, + props, + ...extOptions }; + }; - isRangeChanged = (newFirst.rows !== firstState.rows || newLast.rows !== lastState.rows) || (newFirst.cols !== firstState.cols || newLast.cols !== lastState.cols); - newScrollPos = { top: scrollTop, left: scrollLeft }; - } - else { - const scrollPos = horizontal ? scrollLeft : scrollTop; - const isScrollDownOrRight = lastScrollPos.current <= scrollPos; - const currentIndex = calculateCurrentIndex(scrollPos, props.itemSize); - const triggerIndex = calculateTriggerIndex(currentIndex, firstState, lastState, numItemsInViewportState, numToleratedItemsState, isScrollDownOrRight); - - newFirst = calculateFirst(currentIndex, triggerIndex, firstState, lastState, numItemsInViewportState, numToleratedItemsState, isScrollDownOrRight); - newLast = calculateLast(currentIndex, newFirst, lastState, numItemsInViewportState, numToleratedItemsState); - isRangeChanged = newFirst !== firstState || newLast !== lastState; - newScrollPos = scrollPos; - } + const loadedItems = () => { + const items = props.items; - return { - first: newFirst, - last: newLast, - isRangeChanged, - scrollPos: newScrollPos - } - } + if (items && !loadingState) { + if (both) return items.slice(firstState.rows, lastState.rows).map((item) => (props.columns ? item : item.slice(firstState.cols, lastState.cols))); + else if (horizontal && props.columns) return items; + else return items.slice(firstState, lastState); + } - const onScrollChange = (event) => { - const { first, last, isRangeChanged, scrollPos } = onScrollPositionChange(event); + return []; + }; - if (isRangeChanged) { - const newState = { first, last }; + const init = () => { + if (!props.disabled) { + setSize(); + calculateOptions(); + setSpacerSize(); + } + }; - setContentPosition(newState); + useMountEffect(() => { + if (!props.disabled) { + init(); + bindWindowResizeListener(); + bindOrientationChangeListener(); - setFirstState(first); - setLastState(last); - lastScrollPos.current = scrollPos; + defaultWidth.current = DomHandler.getWidth(elementRef.current); + defaultHeight.current = DomHandler.getHeight(elementRef.current); + } + }); - props.onScrollIndexChange && props.onScrollIndexChange(newState); + useUpdateEffect(() => { + init(); + }, [props.itemSize, props.scrollHeight]); - if (props.lazy) { - props.onLazyLoad && props.onLazyLoad(newState); + useUpdateEffect(() => { + if (props.numToleratedItems !== numToleratedItemsState) { + setNumToleratedItemsState(props.numToleratedItems); } - } - } + }, [props.numToleratedItems]); - const onScroll = (event) => { - props.onScroll && props.onScroll(event); + useUpdateEffect(() => { + if (props.numToleratedItems === numToleratedItemsState) { + init(); // reinit after resizing + } + }, [numToleratedItemsState]); - if (props.delay) { - if (scrollTimeout.current) { - clearTimeout(scrollTimeout.current); + useUpdateEffect(() => { + if (!prevItems || prevItems.length !== (props.items || []).length) { + init(); } - if (!loadingState && props.showLoader) { - const { isRangeChanged: changed } = onScrollPositionChange(event); - changed && setLoadingState(true); + let loading = loadingState; + if (props.lazy && prevLoading !== props.loading && props.loading !== loadingState) { + setLoadingState(props.loading); + loading = props.loading; } - scrollTimeout.current = setTimeout(() => { - onScrollChange(event); + calculateAutoSize(loading); + }); - if (loadingState && props.showLoader && (!props.lazy || props.loading === undefined)) { - setLoadingState(false); - } - }, props.delay); - } - else { - onScrollChange(event); - } - } + useUpdateEffect(() => { + lastScrollPos.current = both ? { top: 0, left: 0 } : 0; + }, [props.orientation]); - const onResize = () => { - if (resizeTimeout.current) { - clearTimeout(resizeTimeout.current); - } - - resizeTimeout.current = setTimeout(() => { - if (elementRef.current) { - const [width, height] = [DomHandler.getWidth(elementRef.current), DomHandler.getHeight(elementRef.current)]; - const [isDiffWidth, isDiffHeight] = [width !== defaultWidth.current, height !== defaultHeight.current]; - const reinit = both ? (isDiffWidth || isDiffHeight) : (horizontal ? isDiffWidth : (vertical ? isDiffHeight : false)); - - if (reinit) { - setNumToleratedItemsState(props.numToleratedItems); - defaultWidth.current = width; - defaultHeight.current = height; - } - } - }, props.resizeDelay); - } - - const getOptions = (renderedIndex) => { - const count = (props.items || []).length; - const index = both ? firstState.rows + renderedIndex : firstState + renderedIndex; - - return { - index, - count, - first: index === 0, - last: index === (count - 1), - even: index % 2 === 0, - odd: index % 2 !== 0, - props - } - } - - const loaderOptions = (index, extOptions) => { - const count = loaderArrState.length; - - return { - index, - count, - first: index === 0, - last: index === (count - 1), - even: index % 2 === 0, - odd: index % 2 !== 0, + React.useImperativeHandle(ref, () => ({ props, - ...extOptions - } - } - - const loadedItems = () => { - const items = props.items; - - if (items && !loadingState) { - if (both) - return items.slice(firstState.rows, lastState.rows).map(item => props.columns ? item : item.slice(firstState.cols, lastState.cols)); - else if (horizontal && props.columns) - return items; - else - return items.slice(firstState, lastState); - } + getElementRef, + scrollTo, + scrollToIndex, + scrollInView, + getRenderedRange + })); + + const createLoaderItem = (index, extOptions = {}) => { + const options = loaderOptions(index, extOptions); + const content = ObjectUtils.getJSXElement(props.loadingTemplate, options); + + return {content}; + }; - return []; - } + const createLoader = () => { + if (!props.loaderDisabled && props.showLoader && loadingState) { + const className = classNames('p-virtualscroller-loader', { + 'p-component-overlay': !props.loadingTemplate + }); - const init = () => { - if (!props.disabled) { - setSize(); - calculateOptions(); - setSpacerSize(); - } - } + let content = ; - useMountEffect(() => { - if (!props.disabled) { - init(); - bindWindowResizeListener(); - bindOrientationChangeListener(); + if (props.loadingTemplate) { + content = loaderArrState.map((_, index) => { + return createLoaderItem(index, both && { numCols: numItemsInViewportState.cols }); + }); + } else if (props.loaderIconTemplate) { + const defaultContentOptions = { + className: 'p-virtualscroller-loading-icon', + element: content, + props + }; - defaultWidth.current = DomHandler.getWidth(elementRef.current); - defaultHeight.current = DomHandler.getHeight(elementRef.current); - } - }); + content = ObjectUtils.getJSXElement(props.loaderIconTemplate, defaultContentOptions); + } - useUpdateEffect(() => { - init(); - }, [props.itemSize, props.scrollHeight]); + return
    {content}
    ; + } - useUpdateEffect(() => { - if (props.numToleratedItems !== numToleratedItemsState) { - setNumToleratedItemsState(props.numToleratedItems); - } - }, [props.numToleratedItems]); + return null; + }; - useUpdateEffect(() => { - if (props.numToleratedItems === numToleratedItemsState) { - init(); // reinit after resizing - } - }, [numToleratedItemsState]); + const createSpacer = () => { + if (props.showSpacer) { + return
    ; + } - useUpdateEffect(() => { - if ((!prevItems || prevItems.length !== (props.items || []).length)) { - init(); - } + return null; + }; - let loading = loadingState; - if (props.lazy && prevLoading !== props.loading && props.loading !== loadingState) { - setLoadingState(props.loading); - loading = props.loading; - } + const createItem = (item, index) => { + const options = getOptions(index); + const content = ObjectUtils.getJSXElement(props.itemTemplate, item, options); - calculateAutoSize(loading); - }); - - useUpdateEffect(() => { - lastScrollPos.current = both ? { top: 0, left: 0 } : 0; - }, [props.orientation]); - - React.useImperativeHandle(ref, () => ({ - props, - getElementRef, - scrollTo, - scrollToIndex, - scrollInView, - getRenderedRange - })); - - const createLoaderItem = (index, extOptions = {}) => { - const options = loaderOptions(index, extOptions); - const content = ObjectUtils.getJSXElement(props.loadingTemplate, options); - - return ( - - {content} - - ) - } - - const createLoader = () => { - if (!props.loaderDisabled && props.showLoader && loadingState) { - const className = classNames('p-virtualscroller-loader', { - 'p-component-overlay': !props.loadingTemplate - }); - - let content = ; - - if (props.loadingTemplate) { - content = loaderArrState.map((_, index) => { - return createLoaderItem(index, both && { numCols: numItemsInViewportState.cols }); - }); - } - else if (props.loaderIconTemplate) { - const defaultContentOptions = { - className: 'p-virtualscroller-loading-icon', + return {content}; + }; + + const createItems = () => { + const items = loadedItems(); + + return items.map(createItem); + }; + + const createContent = () => { + const items = createItems(); + const className = classNames('p-virtualscroller-content', { 'p-virtualscroller-loading': loadingState }); + const content = ( +
    + {items} +
    + ); + + if (props.contentTemplate) { + const defaultOptions = { + className, + contentRef: (el) => (contentRef.current = ObjectUtils.getRefElement(el)), + spacerRef: (el) => (spacerRef.current = ObjectUtils.getRefElement(el)), + stickyRef: (el) => (stickyRef.current = ObjectUtils.getRefElement(el)), + items: loadedItems(), + getItemOptions: (index) => getOptions(index), + children: items, element: content, - props + props, + loading: loadingState, + getLoaderOptions: (index, ext) => loaderOptions(index, ext), + loadingTemplate: props.loadingTemplate, + itemSize: props.itemSize, + rows: getRows(), + columns: getColumns(), + vertical, + horizontal, + both }; - content = ObjectUtils.getJSXElement(props.loaderIconTemplate, defaultContentOptions); + return ObjectUtils.getJSXElement(props.contentTemplate, defaultOptions); } - return ( -
    - {content} -
    - ) - } - - return null; - } + return content; + }; - const createSpacer = () => { - if (props.showSpacer) { - return
    - } + if (props.disabled) { + const content = ObjectUtils.getJSXElement(props.contentTemplate, { items: props.items, rows: props.items, columns: props.columns }); - return null; - } - - const createItem = (item, index) => { - const options = getOptions(index); - const content = ObjectUtils.getJSXElement(props.itemTemplate, item, options); - - return ( - - {content} - - ) - } - - const createItems = () => { - const items = loadedItems(); - - return items.map(createItem); - } - - const createContent = () => { - const items = createItems(); - const className = classNames('p-virtualscroller-content', { 'p-virtualscroller-loading': loadingState }); - const content = ( -
    - {items} -
    - ) - - if (props.contentTemplate) { - const defaultOptions = { - className, - contentRef: (el) => contentRef.current = ObjectUtils.getRefElement(el), - spacerRef: (el) => spacerRef.current = ObjectUtils.getRefElement(el), - stickyRef: (el) => stickyRef.current = ObjectUtils.getRefElement(el), - items: loadedItems(), - getItemOptions: (index) => getOptions(index), - children: items, - element: content, - props, - loading: loadingState, - getLoaderOptions: (index, ext) => loaderOptions(index, ext), - loadingTemplate: props.loadingTemplate, - itemSize: props.itemSize, - rows: getRows(), - columns: getColumns(), - vertical, - horizontal, - both - } + return ( + + {props.children} + {content} + + ); + } else { + const otherProps = ObjectUtils.findDiffKeys(props, VirtualScroller.defaultProps); + const className = classNames( + 'p-virtualscroller', + { + 'p-both-scroll': both, + 'p-horizontal-scroll': horizontal + }, + props.className + ); + + const loader = createLoader(); + const content = createContent(); + const spacer = createSpacer(); - return ObjectUtils.getJSXElement(props.contentTemplate, defaultOptions); + return ( +
    + {content} + {spacer} + {loader} +
    + ); } - - return content; - } - - if (props.disabled) { - const content = ObjectUtils.getJSXElement(props.contentTemplate, { items: props.items, rows: props.items, columns: props.columns }); - - return ( - - {props.children} - {content} - - ) - } - else { - const otherProps = ObjectUtils.findDiffKeys(props, VirtualScroller.defaultProps); - const className = classNames('p-virtualscroller', { - 'p-both-scroll': both, - 'p-horizontal-scroll': horizontal - }, props.className); - - const loader = createLoader(); - const content = createContent(); - const spacer = createSpacer(); - - return ( -
    - {content} - {spacer} - {loader} -
    - ) - } -})); + }) +); VirtualScroller.displayName = 'VirtualScroller'; VirtualScroller.defaultProps = { @@ -687,4 +653,4 @@ VirtualScroller.defaultProps = { onScroll: null, onScrollIndexChange: null, onLazyLoad: null -} +}; diff --git a/components/news/newssection.js b/components/news/newssection.js index d214015f36..b8775db39b 100644 --- a/components/news/newssection.js +++ b/components/news/newssection.js @@ -6,8 +6,12 @@ export default function NewsSection(props) {
    - {props.announcement.content} - {props.announcement.linkText} + + {props.announcement.content} + + + {props.announcement.linkText} +
    @@ -38,5 +42,4 @@ export default function NewsSection(props) { `} ); - } diff --git a/package-lock.json b/package-lock.json index fb05d97e14..7619f7db25 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19748 +1,20343 @@ { - "name": "primereact", - "version": "9.0.0-SNAPSHOT", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "primereact", - "version": "9.0.0-SNAPSHOT", - "dependencies": { - "chart.js": "3.8.0", - "file-saver": "2.0.5", - "final-form": "^4.20.7", - "formik": "^2.2.6", - "fs-extra": "^10.1.0", - "jspdf": "2.5.1", - "jspdf-autotable": "3.5.25", - "next": "12.2.0", - "primeflex": "^3.2.1", - "primeicons": "^5.0.0", - "quill": "1.3.7", - "react": "17.0.2", - "react-dom": "17.0.2", - "react-final-form": "^6.5.9", - "react-hook-form": "^7.33.1", - "react-transition-group": "^4.4.1", - "xlsx": "0.18.5" - }, - "devDependencies": { - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-transform-runtime": "^7.18.6", - "@babel/preset-env": "^7.18.6", - "@babel/preset-react": "^7.18.6", - "@rollup/plugin-alias": "^3.1.2", - "@rollup/plugin-babel": "^5.3.0", - "@rollup/plugin-commonjs": "^19.0.0", - "@rollup/plugin-node-resolve": "^13.0.0", - "@rollup/plugin-replace": "^2.4.2", - "@types/node": "^18.6.4", - "@types/react": "^18.0.16", - "@types/react-dom": "^18.0.6", - "@types/react-transition-group": "^4.4.5", - "@typescript-eslint/parser": "^5.21.0", - "eslint": "8.18.0", - "eslint-config-next": "12.2.0", - "gulp": "^4.0.2", - "gulp-concat": "^2.6.1", - "gulp-flatten": "^0.4.0", - "gulp-rename": "^2.0.0", - "gulp-uglify": "^3.0.2", - "gulp-uglifycss": "^1.1.0", - "rollup": "^2.52.1", - "rollup-plugin-postcss": "^4.0.0", - "rollup-plugin-terser": "^7.0.2", - "sass": "^1.53.0", - "typescript": "^4.7.4" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", - "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.6.tgz", - "integrity": "sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.8.tgz", - "integrity": "sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ==", - "dev": true, - "peer": true, - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.7", - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.8", - "@babel/parser": "^7.17.8", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.18.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz", - "integrity": "sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.7", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.6.tgz", - "integrity": "sha512-KT10c1oWEpmrIRYnthbzHgoOf6B+Xd6a5yhdbNtdhtG7aO1or5HViuf1TQR36xY/QprXA5nvxO6nAjhJ4y38jw==", - "dev": true, - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz", - "integrity": "sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.6.tgz", - "integrity": "sha512-YfDzdnoxHGV8CzqHGyCbFvXg5QESPFkXlHtvdCkesLjjVMT2Adxe4FGUR5ChIb3DxSaXO12iIOCWoXdsUVwnqw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-function-name": "^7.18.6", - "@babel/helper-member-expression-to-functions": "^7.18.6", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz", - "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz", - "integrity": "sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz", - "integrity": "sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.6.tgz", - "integrity": "sha512-CeHxqwwipekotzPDUuJOfIMtcIHBuc7WAzLmTYWctVigqS5RktNMQ5bEwQSuGewzYnCtTWa3BARXeiLxDTv+Ng==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz", - "integrity": "sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.6", - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz", - "integrity": "sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.6.tgz", - "integrity": "sha512-z5wbmV55TveUPZlCLZvxWHtrjuJd+8inFhk7DG0WW87/oJuGDcjDiu7HIvGcpf5464L6xKCg3vNkmlVVz9hwyQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-wrap-function": "^7.18.6", - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.6.tgz", - "integrity": "sha512-fTf7zoXnUGl9gF25fXCWE26t7Tvtyn6H4hkLSYhATwJvw2uYxd3aoXplMSe0g9XbwK7bmxNes7+FGO0rB/xC0g==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-member-expression-to-functions": "^7.18.6", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.18.6", - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.6.tgz", - "integrity": "sha512-4KoLhwGS9vGethZpAhYnMejWkX64wsnHPDwvOsKWU6Fg4+AlK2Jz3TyjQLMEPvz+1zemi/WBdkYxCD0bAfIkiw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.6.tgz", - "integrity": "sha512-I5/LZfozwMNbwr/b1vhhuYD+J/mU+gfGAj5td7l5Rv9WYmH6i3Om69WGKNmlIpsVW/mF6O5bvTKbvDQZVgjqOw==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.6", - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.8.tgz", - "integrity": "sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==", - "dev": true, - "peer": true, - "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.6.tgz", - "integrity": "sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.6.tgz", - "integrity": "sha512-Udgu8ZRgrBrttVz6A0EVL0SJ1z+RLbIeqsu632SA1hf0awEppD6TvdznoH+orIF8wtFFAV/Enmw9Y+9oV8TQcw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz", - "integrity": "sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.6.tgz", - "integrity": "sha512-zr/QcUlUo7GPo6+X1wC98NJADqmy5QTFWWhqeQWiki4XHafJtLl/YMGkmRB2szDD2IYJCCdBTd4ElwhId9T7Xw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.6.tgz", - "integrity": "sha512-zMo66azZth/0tVd7gmkxOkOjs2rpHyhpcFo565PUP37hSp6hSd9uUKIfTDFMz58BwqgQKhJ9YxtM5XddjXVn+Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.6.tgz", - "integrity": "sha512-9yuM6wr4rIsKa1wlUAbZEazkCrgw2sMPEXCr4Rnwetu7cEW1NydkCWytLuYletbf8vFxdJxFhwEZqMpOx2eZyw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.18.6", - "@babel/helper-compilation-targets": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.6.tgz", - "integrity": "sha512-PatI6elL5eMzoypFAiYDpYQyMtXTn+iMhuxxQt5mAXD4fEmKorpSI3PHd+i3JXBJN3xyA6MvJv7at23HffFHwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", - "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.6.tgz", - "integrity": "sha512-pRqwb91C42vs1ahSAWJkxOxU1RHWDn16XAa6ggQ72wjLlWyYeAcLvTtE0aM8ph3KNydy9CQF2nLYcjq1WysgxQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.6.tgz", - "integrity": "sha512-XTg8XW/mKpzAF3actL554Jl/dOYoJtv3l8fxaEczpgz84IeeVf+T1u2CSvPHuZbt0w3JkIx4rdn/MRQI7mo0HQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-function-name": "^7.18.6", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.6.tgz", - "integrity": "sha512-9repI4BhNrR0KenoR9vm3/cIc1tSBIo+u1WVjKCAynahj25O8zfbiE6JtAtHPGQSs4yZ+bA8mRasRP+qc+2R5A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.6.tgz", - "integrity": "sha512-tgy3u6lRp17ilY8r1kP4i2+HDUwxlVqq3RTc943eAWSzGgpU1qhiKpqZ5CMyHReIYPHdo3Kg8v8edKtDqSVEyQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.6.tgz", - "integrity": "sha512-NJU26U/208+sxYszf82nmGYqVF9QN8py2HFTblPT9hbawi8+1C5a9JubODLTGFuT0qlkqVinmkwOD13s0sZktg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.6.tgz", - "integrity": "sha512-WAjoMf4wIiSsy88KmG7tgj2nFdEK7E46tArVtcgED7Bkj6Fg/tG5SbvNIOKxbFS2VFgNh6+iaPswBeQZm4ox8w==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.6.tgz", - "integrity": "sha512-kJha/Gbs5RjzIu0CxZwf5e3aTTSlhZnHMT8zPWnJMjNpLOUgqevg+PN5oMH68nMCXnfiMo4Bhgxqj59KHTlAnA==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.18.6", - "@babel/helper-function-name": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.6.tgz", - "integrity": "sha512-x3HEw0cJZVDoENXOp20HlypIHfl0zMIhMVZEBVTfmqbObIpsMxMbmU5nOEO8R7LYT+z5RORKPlTI5Hj4OsO9/Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", - "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", - "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.6.tgz", - "integrity": "sha512-UbPYpXxLjTw6w6yXX2BYNxF3p6QY225wcTkfQCy3OMnSlS/C3xGtwUjEzGkldb/sy6PWLiCQ3NbYfjWUTI3t4g==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz", - "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.6.tgz", - "integrity": "sha512-FjdqgMv37yVl/gwvzkcB+wfjRI8HQmc5EgOG9iGNvUY1ok+TjsoaMP7IqCDZBhkFcM5f3OPVMs6Dmp03C5k4/A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.6.tgz", - "integrity": "sha512-Mz7xMPxoy9kPS/JScj6fJs03TZ/fZ1dJPlMjRAgTaxaS0fUBk8FV/A2rRgfPsVCZqALNwMexD+0Uaf5zlcKPpw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "dev": true, - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.6.tgz", - "integrity": "sha512-8uRHk9ZmRSnWqUgyae249EJZ94b0yAGLBIqzZzl+0iEdbno55Pmlt/32JZsHwXD9k/uZj18Aqqk35wBX4CBTXA==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-polyfill-corejs2": "^0.3.1", - "babel-plugin-polyfill-corejs3": "^0.5.2", - "babel-plugin-polyfill-regenerator": "^0.3.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.6.tgz", - "integrity": "sha512-ayT53rT/ENF8WWexIRg9AiV9h0aIteyWn5ptfZTZQrjk/+f3WdrJGCY4c9wcgl2+MKkKPhzbYp97FTsquZpDCw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.6.tgz", - "integrity": "sha512-UuqlRrQmT2SWRvahW46cGSany0uTlcj8NYOS5sRGYi8FxPYPoLd5DDmMd32ZXEj2Jq+06uGVQKHxa/hJx2EzKw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.6.tgz", - "integrity": "sha512-7m71iS/QhsPk85xSjFPovHPcH3H9qeyzsujhTc+vcdnsXavoWYJ74zx0lP5RhpC5+iDnVLO+PPMHzC11qels1g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz", - "integrity": "sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.6.tgz", - "integrity": "sha512-WrthhuIIYKrEFAwttYzgRNQ5hULGmwTj+D6l7Zdfsv5M7IWV/OZbUfbeL++Qrzx1nVJwWROIFhCHRYQV4xbPNw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.18.6", - "@babel/helper-compilation-targets": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.6", - "@babel/plugin-proposal-async-generator-functions": "^7.18.6", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.6", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.6", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.18.6", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.6", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.18.6", - "@babel/plugin-transform-classes": "^7.18.6", - "@babel/plugin-transform-computed-properties": "^7.18.6", - "@babel/plugin-transform-destructuring": "^7.18.6", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.6", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.6", - "@babel/plugin-transform-function-name": "^7.18.6", - "@babel/plugin-transform-literals": "^7.18.6", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.18.6", - "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/plugin-transform-modules-systemjs": "^7.18.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.18.6", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.18.6", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.6", - "@babel/plugin-transform-typeof-symbol": "^7.18.6", - "@babel/plugin-transform-unicode-escapes": "^7.18.6", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.18.6", - "babel-plugin-polyfill-corejs2": "^0.3.1", - "babel-plugin-polyfill-corejs3": "^0.5.2", - "babel-plugin-polyfill-regenerator": "^0.3.1", - "core-js-compat": "^3.22.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", - "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz", - "integrity": "sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg==", - "dev": true, - "dependencies": { - "core-js-pure": "^3.16.0", - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", - "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.6.tgz", - "integrity": "sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-function-name": "^7.18.6", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.18.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.7.tgz", - "integrity": "sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", - "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@next/env": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/env/-/env-12.2.0.tgz", - "integrity": "sha512-/FCkDpL/8SodJEXvx/DYNlOD5ijTtkozf4PPulYPtkPOJaMPpBSOkzmsta4fnrnbdH6eZjbwbiXFdr6gSQCV4w==" - }, - "node_modules/@next/eslint-plugin-next": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.2.0.tgz", - "integrity": "sha512-nIj5xV/z3dOfeBnE7qFAjUQZAi4pTlIMuusRM6s/T6lOz8x7mjY5s1ZkTUBmcjPVCb2VIv3CrMH0WZL6xfjZZg==", - "dev": true, - "dependencies": { - "glob": "7.1.7" - } - }, - "node_modules/@next/eslint-plugin-next/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@next/swc-android-arm-eabi": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.0.tgz", - "integrity": "sha512-hbneH8DNRB2x0Nf5fPCYoL8a0osvdTCe4pvOc9Rv5CpDsoOlf8BWBs2OWpeP0U2BktGvIsuUhmISmdYYGyrvTw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-android-arm64": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.2.0.tgz", - "integrity": "sha512-1eEk91JHjczcJomxJ8X0XaUeNcp5Lx1U2Ic7j15ouJ83oRX+3GIslOuabW2oPkSgXbHkThMClhirKpvG98kwZg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-arm64": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.0.tgz", - "integrity": "sha512-x5U5gJd7ZvrEtTFnBld9O2bUlX8opu7mIQUqRzj7KeWzBwPhrIzTTsQXAiNqsaMuaRPvyHBVW/5d/6g6+89Y8g==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-darwin-x64": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.0.tgz", - "integrity": "sha512-iwMNFsrAPjfedjKDv9AXPAV16PWIomP3qw/FfPaxkDVRbUls7BNdofBLzkQmqxqWh93WrawLwaqyXpJuAaiwJA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-freebsd-x64": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.0.tgz", - "integrity": "sha512-gRiAw8g3Akf6niTDLEm1Emfa7jXDjvaAj/crDO8hKASKA4Y1fS4kbi/tyWw5VtoFI4mUzRmCPmZ8eL0tBSG58A==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm-gnueabihf": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.0.tgz", - "integrity": "sha512-/TJZkxaIpeEwnXh6A40trgwd40C5+LJroLUOEQwMOJdavLl62PjCA6dGl1pgooWLCIb5YdBQ0EG4ylzvLwS2+Q==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-gnu": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.0.tgz", - "integrity": "sha512-++WAB4ElXCSOKG9H8r4ENF8EaV+w0QkrpjehmryFkQXmt5juVXz+nKDVlCRMwJU7A1O0Mie82XyEoOrf6Np1pA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-arm64-musl": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.0.tgz", - "integrity": "sha512-XrqkHi/VglEn5zs2CYK6ofJGQySrd+Lr4YdmfJ7IhsCnMKkQY1ma9Hv5THwhZVof3e+6oFHrQ9bWrw9K4WTjFA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-gnu": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.0.tgz", - "integrity": "sha512-MyhHbAKVjpn065WzRbqpLu2krj4kHLi6RITQdD1ee+uxq9r2yg5Qe02l24NxKW+1/lkmpusl4Y5Lks7rBiJn4w==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-linux-x64-musl": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.0.tgz", - "integrity": "sha512-Tz1tJZ5egE0S/UqCd5V6ZPJsdSzv/8aa7FkwFmIJ9neLS8/00za+OY5pq470iZQbPrkTwpKzmfTTIPRVD5iqDg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-arm64-msvc": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.0.tgz", - "integrity": "sha512-0iRO/CPMCdCYUzuH6wXLnsfJX1ykBX4emOOvH0qIgtiZM0nVYbF8lkEyY2ph4XcsurpinS+ziWuYCXVqrOSqiw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-ia32-msvc": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.0.tgz", - "integrity": "sha512-8A26RJVcJHwIKm8xo/qk2ePRquJ6WCI2keV2qOW/Qm+ZXrPXHMIWPYABae/nKN243YFBNyPiHytjX37VrcpUhg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@next/swc-win32-x64-msvc": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.0.tgz", - "integrity": "sha512-OI14ozFLThEV3ey6jE47zrzSTV/6eIMsvbwozo+XfdWqOPwQ7X00YkRx4GVMKMC0rM44oGS2gmwMKYpe4EblnA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@rollup/plugin-alias": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-3.1.9.tgz", - "integrity": "sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==", - "dev": true, - "dependencies": { - "slash": "^3.0.0" - }, - "engines": { - "node": ">=8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/plugin-babel": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz", - "integrity": "sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "@types/babel__core": "^7.1.9", - "rollup": "^1.20.0||^2.0.0" - }, - "peerDependenciesMeta": { - "@types/babel__core": { - "optional": true - } - } - }, - "node_modules/@rollup/plugin-commonjs": { - "version": "19.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-19.0.2.tgz", - "integrity": "sha512-gBjarfqlC7qs0AutpRW/hrFNm+cd2/QKxhwyFa+srbg1oX7rDsEU3l+W7LAUhsAp9mPJMAkXDhLbQaVwEaE8bA==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^2.38.3" - } - }, - "node_modules/@rollup/plugin-node-resolve": { - "version": "13.1.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.3.tgz", - "integrity": "sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "peerDependencies": { - "rollup": "^2.42.0" - } - }, - "node_modules/@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@rollup/pluginutils/node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.3.tgz", - "integrity": "sha512-WiBSI6JBIhC6LRIsB2Kwh8DsGTlbBU+mLRxJmAe3LjHTdkDpwIbEOZgoXBbZilk/vlfjK8i6nKRAvIRn1XaIMw==", - "dev": true - }, - "node_modules/@swc/helpers": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.2.tgz", - "integrity": "sha512-556Az0VX7WR6UdoTn4htt/l3zPQ7bsQWK+HqdG4swV7beUCxo/BqmvbOpUkTIm/9ih86LIf1qsUnywNL3obGHw==", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@swc/helpers/node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.6.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.4.tgz", - "integrity": "sha512-I4BD3L+6AWiUobfxZ49DlU43gtI+FTHSv9pE2Zekg6KjMpre4ByusaljW3vYSLJrvQ1ck1hUaeVu8HVlY3vzHg==", - "dev": true - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true - }, - "node_modules/@types/raf": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.0.tgz", - "integrity": "sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw==", - "optional": true - }, - "node_modules/@types/react": { - "version": "18.0.16", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.16.tgz", - "integrity": "sha512-3vX1dzVucqc2nhXtzyaParTIIRZeNbisRqLE7QdeLomVybEyeiuAouzZXgz71P+2kbJOqj3dy0fzoATg2I06GQ==", - "dev": true, - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.0.6", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz", - "integrity": "sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.21.0.tgz", - "integrity": "sha512-8RUwTO77hstXUr3pZoWZbRQUxXcSXafZ8/5gpnQCfXvgmP9gpNlRGlWzvfbEQ14TLjmtU8eGnONkff8U2ui2Eg==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.21.0", - "@typescript-eslint/types": "5.21.0", - "@typescript-eslint/typescript-estree": "5.21.0", - "debug": "^4.3.2" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.21.0.tgz", - "integrity": "sha512-XTX0g0IhvzcH/e3393SvjRCfYQxgxtYzL3UREteUneo72EFlt7UNoiYnikUtmGVobTbhUDByhJ4xRBNe+34kOQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.21.0", - "@typescript-eslint/visitor-keys": "5.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.21.0.tgz", - "integrity": "sha512-XnOOo5Wc2cBlq8Lh5WNvAgHzpjnEzxn4CJBwGkcau7b/tZ556qrWXQz4DJyChYg8JZAD06kczrdgFPpEQZfDsA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.21.0.tgz", - "integrity": "sha512-Y8Y2T2FNvm08qlcoSMoNchh9y2Uj3QmjtwNMdRQkcFG7Muz//wfJBGBxh8R7HAGQFpgYpdHqUpEoPQk+q9Kjfg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.21.0", - "@typescript-eslint/visitor-keys": "5.21.0", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.21.0.tgz", - "integrity": "sha512-SX8jNN+iHqAF0riZQMkm7e8+POXa/fXw5cxL+gjpyP+FI+JVNhii53EmQgDAfDcBpFekYSlO0fGytMQwRiMQCA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.21.0", - "eslint-visitor-keys": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/adler-32": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", - "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true - }, - "node_modules/ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, - "dependencies": { - "ansi-wrap": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-cyan": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", - "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", - "dev": true, - "dependencies": { - "ansi-wrap": "0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", - "dev": true, - "dependencies": { - "ansi-wrap": "0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-red": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", - "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", - "dev": true, - "dependencies": { - "ansi-wrap": "0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "devOptional": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", - "dev": true, - "dependencies": { - "buffer-equal": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-filter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", - "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", - "dev": true, - "dependencies": { - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", - "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", - "dev": true, - "dependencies": { - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-initial": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", - "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", - "dev": true, - "dependencies": { - "array-slice": "^1.0.0", - "is-number": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-initial/node_modules/is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-last": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", - "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", - "dev": true, - "dependencies": { - "is-number": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-last/node_modules/is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-sort": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", - "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", - "dev": true, - "dependencies": { - "default-compare": "^1.0.0", - "get-value": "^2.0.6", - "kind-of": "^5.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-sort/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", - "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", - "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", - "dev": true - }, - "node_modules/async-done": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", - "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.2", - "process-nextick-args": "^2.0.0", - "stream-exhaust": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "node_modules/async-settle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", - "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", - "dev": true, - "dependencies": { - "async-done": "^1.2.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/axe-core": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz", - "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", - "dev": true - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", - "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.21.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/bach": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", - "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", - "dev": true, - "dependencies": { - "arr-filter": "^1.1.1", - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "array-each": "^1.0.0", - "array-initial": "^1.0.0", - "array-last": "^1.1.1", - "async-done": "^1.2.2", - "async-settle": "^1.0.0", - "now-and-later": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base64-arraybuffer": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz", - "integrity": "sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ==", - "optional": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "devOptional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "devOptional": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz", - "integrity": "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001359", - "electron-to-chromium": "^1.4.172", - "node-releases": "^2.0.5", - "update-browserslist-db": "^1.0.4" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/btoa": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", - "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", - "bin": { - "btoa": "bin/btoa.js" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001361", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001361.tgz", - "integrity": "sha512-ybhCrjNtkFji1/Wto6SSJKkWk6kZgVQsDq5QI83SafsF6FXv2JB4df9eEdH6g8sdGgqTXrFLjAxqBGgYoU3azQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/canvg": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.9.tgz", - "integrity": "sha512-rDXcnRPuz4QHoCilMeoTxql+fvGqNAxp+qV/KHD8rOiJSAfVjFclbdUNHD2Uqfthr+VMg17bD2bVuk6F07oLGw==", - "optional": true, - "dependencies": { - "@babel/runtime": "^7.12.5", - "@types/raf": "^3.4.0", - "core-js": "^3.8.3", - "raf": "^3.4.1", - "regenerator-runtime": "^0.13.7", - "rgbcolor": "^1.0.1", - "stackblur-canvas": "^2.0.0", - "svg-pathdata": "^6.0.3" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/cfb": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.1.tgz", - "integrity": "sha512-wT2ScPAFGSVy7CY+aauMezZBnNrfnaLSrxHUHdea+Td/86vrk6ZquggV+ssBR88zNs0OnBkL2+lf9q0K+zVGzQ==", - "dependencies": { - "adler-32": "~1.3.0", - "crc-32": "~1.2.0", - "printj": "~1.3.0" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chart.js": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.8.0.tgz", - "integrity": "sha512-cr8xhrXjLIXVLOBZPkBZVF6NDeiVIrPLHcMhnON7UufudL+CNeRrD+wpYanswlm8NpudMdrt3CHoLMQMxJhHRg==" - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "devOptional": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "node_modules/cloneable-readable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/codepage": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", - "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/collection-map": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", - "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", - "dev": true, - "dependencies": { - "arr-map": "^2.0.2", - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", - "dev": true - }, - "node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-with-sourcemaps": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", - "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", - "dev": true, - "dependencies": { - "source-map": "^0.6.1" - } - }, - "node_modules/concat-with-sourcemaps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/copy-props": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", - "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", - "dev": true, - "dependencies": { - "each-props": "^1.3.2", - "is-plain-object": "^5.0.0" - } - }, - "node_modules/copy-props/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-js": { - "version": "3.20.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.20.1.tgz", - "integrity": "sha512-btdpStYFQScnNVQ5slVcr858KP0YWYjV16eGJQw8Gg7CWtu/2qNvIM3qVRIR3n1pK2R9NNOrTevbvAYxajwEjg==", - "hasInstallScript": true, - "optional": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.23.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.3.tgz", - "integrity": "sha512-WSzUs2h2vvmKsacLHNTdpyOC9k43AEhcGoFlVgCY4L7aw98oSBKtPL6vD0/TqZjRWRQYdDSLkzZIni4Crbbiqw==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.0", - "semver": "7.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/core-js-pure": { - "version": "3.18.3", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.18.3.tgz", - "integrity": "sha512-qfskyO/KjtbYn09bn1IPkuhHl5PlJ6IzJ9s9sraJ1EqcuGyLGKzhSM1cY0zgyL9hx42eulQLZ6WaeK5ycJCkqw==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/crc-32": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.1.tgz", - "integrity": "sha512-Dn/xm/1vFFgs3nfrpEVScHoIslO9NZRITWGz/1E/St6u4xw99vfZzVkW0OSnzx2h9egej9xwMCEut6sqwokM/w==", - "dependencies": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.3.1" - }, - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/css-declaration-sorter": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.4.tgz", - "integrity": "sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw==", - "dev": true, - "dependencies": { - "timsort": "^0.3.0" - }, - "engines": { - "node": ">= 10" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-line-break": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.0.1.tgz", - "integrity": "sha512-gwKYIMUn7xodIcb346wgUhE2Dt5O1Kmrc16PWi8sL4FTfyDj8P5095rzH7+O8CTZudJr+uw2GCI/hwEkDJFI2w==", - "optional": true, - "dependencies": { - "base64-arraybuffer": "^0.2.0" - } - }, - "node_modules/css-select": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", - "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^5.1.0", - "domhandler": "^4.3.0", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-tree/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/css-what": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.15.tgz", - "integrity": "sha512-ppZsS7oPpi2sfiyV5+i+NbB/3GtQ+ab2Vs1azrZaXWujUSN4o+WdTxlCZIMcT9yLW3VO/5yX3vpyDaQ1nIn8CQ==", - "dev": true, - "dependencies": { - "cssnano-preset-default": "^5.1.10", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.1.10", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.10.tgz", - "integrity": "sha512-BcpSzUVygHMOnp9uG5rfPzTOCb0GAHQkqtUQx8j1oMNF9A1Q8hziOOhiM4bdICpmrBIU85BE64RD5XGYsVQZNA==", - "dev": true, - "dependencies": { - "css-declaration-sorter": "^6.0.3", - "cssnano-utils": "^3.0.0", - "postcss-calc": "^8.2.0", - "postcss-colormin": "^5.2.3", - "postcss-convert-values": "^5.0.2", - "postcss-discard-comments": "^5.0.1", - "postcss-discard-duplicates": "^5.0.1", - "postcss-discard-empty": "^5.0.1", - "postcss-discard-overridden": "^5.0.2", - "postcss-merge-longhand": "^5.0.4", - "postcss-merge-rules": "^5.0.4", - "postcss-minify-font-values": "^5.0.2", - "postcss-minify-gradients": "^5.0.4", - "postcss-minify-params": "^5.0.3", - "postcss-minify-selectors": "^5.1.1", - "postcss-normalize-charset": "^5.0.1", - "postcss-normalize-display-values": "^5.0.2", - "postcss-normalize-positions": "^5.0.2", - "postcss-normalize-repeat-style": "^5.0.2", - "postcss-normalize-string": "^5.0.2", - "postcss-normalize-timing-functions": "^5.0.2", - "postcss-normalize-unicode": "^5.0.2", - "postcss-normalize-url": "^5.0.4", - "postcss-normalize-whitespace": "^5.0.2", - "postcss-ordered-values": "^5.0.3", - "postcss-reduce-initial": "^5.0.2", - "postcss-reduce-transforms": "^5.0.2", - "postcss-svgo": "^5.0.3", - "postcss-unique-selectors": "^5.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.0.tgz", - "integrity": "sha512-Pzs7/BZ6OgT+tXXuF12DKR8SmSbzUeVYCtMBbS8lI0uAm3mrYmkyqCXXPsQESI6kmLfEVBppbdVY/el3hg3nAA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csstype": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz", - "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==" - }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz", - "integrity": "sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dependencies": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", - "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", - "dev": true, - "dependencies": { - "kind-of": "^5.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-compare/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-resolution": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", - "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dir-glob/node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "dependencies": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, - "node_modules/dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", - "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", - "dev": true, - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/dompurify": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.3.4.tgz", - "integrity": "sha512-6BVcgOAVFXjI0JTjEvZy901Rghm+7fDQOrNIcxB4+gdhj6Kwp6T9VBhBY/AbagKHJocRkDYGd6wvI+p4/10xtQ==", - "optional": true - }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/each-props": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", - "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.1", - "object.defaults": "^1.1.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.176", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.176.tgz", - "integrity": "sha512-92JdgyRlcNDwuy75MjuFSb3clt6DGJ2IXSpg0MCjKd3JV9eSmuUAIyWiGAp/EtT0z2D4rqbYqThQLV90maH3Zw==", - "dev": true - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.5.tgz", - "integrity": "sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dev": true, - "dependencies": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz", - "integrity": "sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-next": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.2.0.tgz", - "integrity": "sha512-QWzNegadFXjQ0h3hixnLacRM9Kot85vQefyNsA8IeOnERZMz0Gvays1W6DMCjSxJbnCwuWaMXj9DCpar5IahRA==", - "dev": true, - "dependencies": { - "@next/eslint-plugin-next": "12.2.0", - "@rushstack/eslint-patch": "^1.1.3", - "@typescript-eslint/parser": "^5.21.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^2.7.1", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.29.4", - "eslint-plugin-react-hooks": "^4.5.0" - }, - "peerDependencies": { - "eslint": "^7.23.0 || ^8.0.0", - "typescript": ">=3.3.1" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/eslint-import-resolver-typescript": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", - "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", - "dev": true, - "dependencies": { - "debug": "^4.3.4", - "glob": "^7.2.0", - "is-glob": "^4.0.3", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" - } - }, - "node_modules/eslint-import-resolver-typescript/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/eslint-import-resolver-typescript/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/eslint-import-resolver-typescript/node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", - "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", - "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.16.3", - "aria-query": "^4.2.2", - "array-includes": "^3.1.4", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.3.5", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.7", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.2.1", - "language-tags": "^1.0.5", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/@babel/runtime": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz", - "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/eslint-plugin-react": { - "version": "7.29.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz", - "integrity": "sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flatmap": "^1.2.5", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.0", - "object.values": "^1.1.5", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.5.0.tgz", - "integrity": "sha512-8k1gRt7D7h03kd+SAAlzXkQwWK22BnK6GKZG+FJA6BAGy22CFvl8kCIXKpVux0cCxMWDQUPqSok0LKaZ0aOcCw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-plugin-react/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", - "dev": true, - "dependencies": { - "acorn": "^8.7.1", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter3": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz", - "integrity": "sha1-teEHm1n7XhuidxwKmTvgYKWMmbo=" - }, - "node_modules/exit-on-epipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", - "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "dev": true, - "dependencies": { - "type": "^2.5.0" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", - "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", - "dev": true - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", - "dev": true, - "dependencies": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz", - "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==" - }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fflate": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", - "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==" - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-saver": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", - "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "devOptional": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/final-form": { - "version": "4.20.7", - "resolved": "https://registry.npmjs.org/final-form/-/final-form-4.20.7.tgz", - "integrity": "sha512-ii3X9wNfyBYFnDPunYN5jh1/HAvtOZ9aJI/TVk0MB86hZuOeYkb+W5L3icgwW9WWNztZR6MDU3En6eoZTUoFPg==", - "dependencies": { - "@babel/runtime": "^7.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/final-form" - } - }, - "node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", - "dev": true - }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "dependencies": { - "for-in": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/formik": { - "version": "2.2.9", - "resolved": "https://registry.npmjs.org/formik/-/formik-2.2.9.tgz", - "integrity": "sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA==", - "funding": [ - { - "type": "individual", - "url": "https://opencollective.com/formik" - } - ], - "dependencies": { - "deepmerge": "^2.1.1", - "hoist-non-react-statics": "^3.3.0", - "lodash": "^4.17.21", - "lodash-es": "^4.17.21", - "react-fast-compare": "^2.0.1", - "tiny-warning": "^1.0.2", - "tslib": "^1.10.0" - }, - "peerDependencies": { - "react": ">=16.8.0" - } - }, - "node_modules/formik/node_modules/deepmerge": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", - "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/frac": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", - "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-extra/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/generic-names": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz", - "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==", - "dev": true, - "dependencies": { - "loader-utils": "^3.2.0" - } - }, - "node_modules/generic-names/node_modules/loader-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", - "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", - "dev": true, - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "devOptional": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", - "dev": true, - "dependencies": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/glob-stream/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/glob-stream/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", - "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", - "dev": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-done": "^1.2.0", - "chokidar": "^2.0.0", - "is-negated-glob": "^1.0.0", - "just-debounce": "^1.0.0", - "normalize-path": "^3.0.0", - "object.defaults": "^1.1.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/glob-watcher/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/glob-watcher/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", - "dev": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/glob-watcher/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/glob-watcher/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/glob-watcher/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/glob-watcher/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glogg": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", - "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", - "dev": true, - "dependencies": { - "sparkles": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" - }, - "node_modules/gulp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", - "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", - "dev": true, - "dependencies": { - "glob-watcher": "^5.0.3", - "gulp-cli": "^2.2.0", - "undertaker": "^1.2.1", - "vinyl-fs": "^3.0.0" - }, - "bin": { - "gulp": "bin/gulp.js" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/gulp-cli": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", - "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", - "dev": true, - "dependencies": { - "ansi-colors": "^1.0.1", - "archy": "^1.0.0", - "array-sort": "^1.0.0", - "color-support": "^1.1.3", - "concat-stream": "^1.6.0", - "copy-props": "^2.0.1", - "fancy-log": "^1.3.2", - "gulplog": "^1.0.0", - "interpret": "^1.4.0", - "isobject": "^3.0.1", - "liftoff": "^3.1.0", - "matchdep": "^2.0.0", - "mute-stdout": "^1.0.0", - "pretty-hrtime": "^1.0.0", - "replace-homedir": "^1.0.0", - "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.2.0", - "yargs": "^7.1.0" - }, - "bin": { - "gulp": "bin/gulp.js" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/gulp-concat": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", - "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", - "dev": true, - "dependencies": { - "concat-with-sourcemaps": "^1.0.0", - "through2": "^2.0.0", - "vinyl": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/gulp-flatten": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/gulp-flatten/-/gulp-flatten-0.4.0.tgz", - "integrity": "sha512-eg4spVTAiv1xXmugyaCxWne1oPtNG0UHEtABx5W8ScLiqAYceyYm6GYA36x0Qh8KOIXmAZV97L2aYGnKREG3Sg==", - "dev": true, - "dependencies": { - "plugin-error": "^0.1.2", - "through2": "^2.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/gulp-rename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-2.0.0.tgz", - "integrity": "sha512-97Vba4KBzbYmR5VBs9mWmK+HwIf5mj+/zioxfZhOKeXtx5ZjBk57KFlePf5nxq9QsTtFl0ejnHE3zTC9MHXqyQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/gulp-uglify": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-3.0.2.tgz", - "integrity": "sha512-gk1dhB74AkV2kzqPMQBLA3jPoIAPd/nlNzP2XMDSG8XZrqnlCiDGAqC+rZOumzFvB5zOphlFh6yr3lgcAb/OOg==", - "dev": true, - "dependencies": { - "array-each": "^1.0.1", - "extend-shallow": "^3.0.2", - "gulplog": "^1.0.0", - "has-gulplog": "^0.1.0", - "isobject": "^3.0.1", - "make-error-cause": "^1.1.1", - "safe-buffer": "^5.1.2", - "through2": "^2.0.0", - "uglify-js": "^3.0.5", - "vinyl-sourcemaps-apply": "^0.2.0" - } - }, - "node_modules/gulp-uglify/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-uglify/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-uglifycss": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/gulp-uglifycss/-/gulp-uglifycss-1.1.0.tgz", - "integrity": "sha512-O2VDBPdS16SO3BPSCsHDnsvdCx1B/WgH2qvJaUOD+r1d8v87UjeqEtfmqR2eJ171D0F4shw8/oW5ezA6pqVXEQ==", - "dev": true, - "dependencies": { - "plugin-error": "^1.0.1", - "through2": "^2.0.3", - "uglifycss": "^0.0.25", - "vinyl": "^2.1.0" - } - }, - "node_modules/gulp-uglifycss/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-uglifycss/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-uglifycss/node_modules/plugin-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", - "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", - "dev": true, - "dependencies": { - "ansi-colors": "^1.0.1", - "arr-diff": "^4.0.0", - "arr-union": "^3.1.0", - "extend-shallow": "^3.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", - "dev": true, - "dependencies": { - "glogg": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-gulplog": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", - "dev": true, - "dependencies": { - "sparkles": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "dependencies": { - "parse-passwd": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/html2canvas": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.3.3.tgz", - "integrity": "sha512-nQi0ayEY1cMiUMbq/F5hRwMAqsRMo7NIP6VaCqaXnXO6b/FfZO49oSfIJjdyRha28EuY8D6FBCzQOXPQV0TCrA==", - "optional": true, - "dependencies": { - "css-line-break": "2.0.1", - "text-segmentation": "^1.0.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", - "dev": true - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", - "devOptional": true - }, - "node_modules/import-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", - "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", - "dev": true, - "dependencies": { - "import-from": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", - "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "dependencies": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "devOptional": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "devOptional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "devOptional": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true - }, - "node_modules/is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "devOptional": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "dependencies": { - "is-unc-path": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "dependencies": { - "unc-path-regex": "^0.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "node_modules/is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true, - "peer": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonfile/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/jspdf": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.1.tgz", - "integrity": "sha512-hXObxz7ZqoyhxET78+XR34Xu2qFGrJJ2I2bE5w4SM8eFaFEkW2xcGRVUss360fYelwRSid/jT078kbNvmoW0QA==", - "dependencies": { - "@babel/runtime": "^7.14.0", - "atob": "^2.1.2", - "btoa": "^1.2.1", - "fflate": "^0.4.8" - }, - "optionalDependencies": { - "canvg": "^3.0.6", - "core-js": "^3.6.0", - "dompurify": "^2.2.0", - "html2canvas": "^1.0.0-rc.5" - } - }, - "node_modules/jspdf-autotable": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/jspdf-autotable/-/jspdf-autotable-3.5.25.tgz", - "integrity": "sha512-BIbDd/cilRbVm5PmR+ZonolSqRtm0AvZDpTz+rrWed7BnFj5mqF7x7lkxDAMzPudLapktHUk6cxipcvUzal8cg==", - "peerDependencies": { - "jspdf": "^2.5.1" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", - "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.3", - "object.assign": "^4.1.2" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/just-debounce": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", - "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", - "dev": true - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", - "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", - "dev": true - }, - "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", - "dev": true, - "dependencies": { - "language-subtag-registry": "~0.3.2" - } - }, - "node_modules/last-run": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", - "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", - "dev": true, - "dependencies": { - "default-resolution": "^2.0.0", - "es6-weak-map": "^2.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "dependencies": { - "invert-kv": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", - "dev": true, - "dependencies": { - "flush-write-stream": "^1.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/liftoff": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", - "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", - "dev": true, - "dependencies": { - "extend": "^3.0.0", - "findup-sync": "^3.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/lilconfig": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", - "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/load-json-file/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/locate-path/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", - "dev": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.4" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/make-error-cause": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz", - "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=", - "dev": true, - "dependencies": { - "make-error": "^1.2.0" - } - }, - "node_modules/make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", - "dev": true, - "dependencies": { - "findup-sync": "^2.0.0", - "micromatch": "^3.0.4", - "resolve": "^1.4.0", - "stack-trace": "0.0.10" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/matchdep/node_modules/findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", - "dev": true, - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/matchdep/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/extend-shallow/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "node_modules/mute-stdout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", - "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", - "dev": true, - "optional": true - }, - "node_modules/nanoid": { - "version": "3.1.31", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.31.tgz", - "integrity": "sha512-ZivnJm0o9bb13p2Ot5CpgC2rQdzB9Uxm/mFZweqm5eMViqOJe3PV6LU2E30SiLgheesmcPrjquqraoolONSA0A==", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nanomatch/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true + "name": "primereact", + "version": "8.4.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "primereact", + "version": "8.4.0", + "dependencies": { + "chart.js": "3.9.1", + "file-saver": "2.0.5", + "final-form": "^4.20.7", + "formik": "^2.2.6", + "fs-extra": "^10.1.0", + "jspdf": "2.5.1", + "jspdf-autotable": "3.5.25", + "next": "12.2.5", + "primeflex": "^3.2.1", + "primeicons": "^5.0.0", + "quill": "1.3.7", + "react": "17.0.2", + "react-dom": "17.0.2", + "react-final-form": "^6.5.9", + "react-hook-form": "^7.34.2", + "react-transition-group": "^4.4.5", + "xlsx": "0.18.5" + }, + "devDependencies": { + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-transform-runtime": "^7.18.6", + "@babel/preset-env": "^7.18.6", + "@babel/preset-react": "^7.18.6", + "@rollup/plugin-alias": "^3.1.2", + "@rollup/plugin-babel": "^5.3.0", + "@rollup/plugin-commonjs": "^19.0.0", + "@rollup/plugin-node-resolve": "^13.0.0", + "@rollup/plugin-replace": "^2.4.2", + "@types/node": "^18.6.4", + "@types/react": "^18.0.16", + "@types/react-dom": "^18.0.6", + "@types/react-transition-group": "^4.4.5", + "@typescript-eslint/eslint-plugin": "^5.31.0", + "eslint": "8.22.0", + "eslint-config-next": "12.2.5", + "eslint-config-prettier": "^8.5.0", + "gulp": "^4.0.2", + "gulp-concat": "^2.6.1", + "gulp-flatten": "^0.4.0", + "gulp-rename": "^2.0.0", + "gulp-uglify": "^3.0.2", + "gulp-uglifycss": "^1.1.0", + "prettier": "2.7.1", + "rollup": "^2.52.1", + "rollup-plugin-postcss": "^4.0.0", + "rollup-plugin-terser": "^7.0.2", + "sass": "^1.53.0", + "typescript": "^4.7.4" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", + "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.6.tgz", + "integrity": "sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.8.tgz", + "integrity": "sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ==", + "dev": true, + "peer": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.7", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helpers": "^7.17.8", + "@babel/parser": "^7.17.8", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.18.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz", + "integrity": "sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.6.tgz", + "integrity": "sha512-KT10c1oWEpmrIRYnthbzHgoOf6B+Xd6a5yhdbNtdhtG7aO1or5HViuf1TQR36xY/QprXA5nvxO6nAjhJ4y38jw==", + "dev": true, + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz", + "integrity": "sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.6.tgz", + "integrity": "sha512-YfDzdnoxHGV8CzqHGyCbFvXg5QESPFkXlHtvdCkesLjjVMT2Adxe4FGUR5ChIb3DxSaXO12iIOCWoXdsUVwnqw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-member-expression-to-functions": "^7.18.6", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz", + "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz", + "integrity": "sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz", + "integrity": "sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.6.tgz", + "integrity": "sha512-CeHxqwwipekotzPDUuJOfIMtcIHBuc7WAzLmTYWctVigqS5RktNMQ5bEwQSuGewzYnCtTWa3BARXeiLxDTv+Ng==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz", + "integrity": "sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz", + "integrity": "sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.6.tgz", + "integrity": "sha512-z5wbmV55TveUPZlCLZvxWHtrjuJd+8inFhk7DG0WW87/oJuGDcjDiu7HIvGcpf5464L6xKCg3vNkmlVVz9hwyQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-wrap-function": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.6.tgz", + "integrity": "sha512-fTf7zoXnUGl9gF25fXCWE26t7Tvtyn6H4hkLSYhATwJvw2uYxd3aoXplMSe0g9XbwK7bmxNes7+FGO0rB/xC0g==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-member-expression-to-functions": "^7.18.6", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.6.tgz", + "integrity": "sha512-4KoLhwGS9vGethZpAhYnMejWkX64wsnHPDwvOsKWU6Fg4+AlK2Jz3TyjQLMEPvz+1zemi/WBdkYxCD0bAfIkiw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.6.tgz", + "integrity": "sha512-I5/LZfozwMNbwr/b1vhhuYD+J/mU+gfGAj5td7l5Rv9WYmH6i3Om69WGKNmlIpsVW/mF6O5bvTKbvDQZVgjqOw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.8.tgz", + "integrity": "sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.6.tgz", + "integrity": "sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.6.tgz", + "integrity": "sha512-Udgu8ZRgrBrttVz6A0EVL0SJ1z+RLbIeqsu632SA1hf0awEppD6TvdznoH+orIF8wtFFAV/Enmw9Y+9oV8TQcw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz", + "integrity": "sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.6.tgz", + "integrity": "sha512-zr/QcUlUo7GPo6+X1wC98NJADqmy5QTFWWhqeQWiki4XHafJtLl/YMGkmRB2szDD2IYJCCdBTd4ElwhId9T7Xw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.6.tgz", + "integrity": "sha512-zMo66azZth/0tVd7gmkxOkOjs2rpHyhpcFo565PUP37hSp6hSd9uUKIfTDFMz58BwqgQKhJ9YxtM5XddjXVn+Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.6.tgz", + "integrity": "sha512-9yuM6wr4rIsKa1wlUAbZEazkCrgw2sMPEXCr4Rnwetu7cEW1NydkCWytLuYletbf8vFxdJxFhwEZqMpOx2eZyw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.18.6", + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.6.tgz", + "integrity": "sha512-PatI6elL5eMzoypFAiYDpYQyMtXTn+iMhuxxQt5mAXD4fEmKorpSI3PHd+i3JXBJN3xyA6MvJv7at23HffFHwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", + "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.6.tgz", + "integrity": "sha512-pRqwb91C42vs1ahSAWJkxOxU1RHWDn16XAa6ggQ72wjLlWyYeAcLvTtE0aM8ph3KNydy9CQF2nLYcjq1WysgxQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.6.tgz", + "integrity": "sha512-XTg8XW/mKpzAF3actL554Jl/dOYoJtv3l8fxaEczpgz84IeeVf+T1u2CSvPHuZbt0w3JkIx4rdn/MRQI7mo0HQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.6.tgz", + "integrity": "sha512-9repI4BhNrR0KenoR9vm3/cIc1tSBIo+u1WVjKCAynahj25O8zfbiE6JtAtHPGQSs4yZ+bA8mRasRP+qc+2R5A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.6.tgz", + "integrity": "sha512-tgy3u6lRp17ilY8r1kP4i2+HDUwxlVqq3RTc943eAWSzGgpU1qhiKpqZ5CMyHReIYPHdo3Kg8v8edKtDqSVEyQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.6.tgz", + "integrity": "sha512-NJU26U/208+sxYszf82nmGYqVF9QN8py2HFTblPT9hbawi8+1C5a9JubODLTGFuT0qlkqVinmkwOD13s0sZktg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.6.tgz", + "integrity": "sha512-WAjoMf4wIiSsy88KmG7tgj2nFdEK7E46tArVtcgED7Bkj6Fg/tG5SbvNIOKxbFS2VFgNh6+iaPswBeQZm4ox8w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.6.tgz", + "integrity": "sha512-kJha/Gbs5RjzIu0CxZwf5e3aTTSlhZnHMT8zPWnJMjNpLOUgqevg+PN5oMH68nMCXnfiMo4Bhgxqj59KHTlAnA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.6.tgz", + "integrity": "sha512-x3HEw0cJZVDoENXOp20HlypIHfl0zMIhMVZEBVTfmqbObIpsMxMbmU5nOEO8R7LYT+z5RORKPlTI5Hj4OsO9/Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", + "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", + "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.6.tgz", + "integrity": "sha512-UbPYpXxLjTw6w6yXX2BYNxF3p6QY225wcTkfQCy3OMnSlS/C3xGtwUjEzGkldb/sy6PWLiCQ3NbYfjWUTI3t4g==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz", + "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.6.tgz", + "integrity": "sha512-FjdqgMv37yVl/gwvzkcB+wfjRI8HQmc5EgOG9iGNvUY1ok+TjsoaMP7IqCDZBhkFcM5f3OPVMs6Dmp03C5k4/A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.6.tgz", + "integrity": "sha512-Mz7xMPxoy9kPS/JScj6fJs03TZ/fZ1dJPlMjRAgTaxaS0fUBk8FV/A2rRgfPsVCZqALNwMexD+0Uaf5zlcKPpw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "dev": true, + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.6.tgz", + "integrity": "sha512-8uRHk9ZmRSnWqUgyae249EJZ94b0yAGLBIqzZzl+0iEdbno55Pmlt/32JZsHwXD9k/uZj18Aqqk35wBX4CBTXA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "babel-plugin-polyfill-corejs2": "^0.3.1", + "babel-plugin-polyfill-corejs3": "^0.5.2", + "babel-plugin-polyfill-regenerator": "^0.3.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.6.tgz", + "integrity": "sha512-ayT53rT/ENF8WWexIRg9AiV9h0aIteyWn5ptfZTZQrjk/+f3WdrJGCY4c9wcgl2+MKkKPhzbYp97FTsquZpDCw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.6.tgz", + "integrity": "sha512-UuqlRrQmT2SWRvahW46cGSany0uTlcj8NYOS5sRGYi8FxPYPoLd5DDmMd32ZXEj2Jq+06uGVQKHxa/hJx2EzKw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.6.tgz", + "integrity": "sha512-7m71iS/QhsPk85xSjFPovHPcH3H9qeyzsujhTc+vcdnsXavoWYJ74zx0lP5RhpC5+iDnVLO+PPMHzC11qels1g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz", + "integrity": "sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.6.tgz", + "integrity": "sha512-WrthhuIIYKrEFAwttYzgRNQ5hULGmwTj+D6l7Zdfsv5M7IWV/OZbUfbeL++Qrzx1nVJwWROIFhCHRYQV4xbPNw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.18.6", + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.6", + "@babel/plugin-proposal-async-generator-functions": "^7.18.6", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.6", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.6", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.18.6", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.6", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.18.6", + "@babel/plugin-transform-classes": "^7.18.6", + "@babel/plugin-transform-computed-properties": "^7.18.6", + "@babel/plugin-transform-destructuring": "^7.18.6", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.6", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.6", + "@babel/plugin-transform-function-name": "^7.18.6", + "@babel/plugin-transform-literals": "^7.18.6", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.18.6", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.6", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.18.6", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.6", + "@babel/plugin-transform-typeof-symbol": "^7.18.6", + "@babel/plugin-transform-unicode-escapes": "^7.18.6", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.18.6", + "babel-plugin-polyfill-corejs2": "^0.3.1", + "babel-plugin-polyfill-corejs3": "^0.5.2", + "babel-plugin-polyfill-regenerator": "^0.3.1", + "core-js-compat": "^3.22.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-react-display-name": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.18.6", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz", + "integrity": "sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg==", + "dev": true, + "dependencies": { + "core-js-pure": "^3.16.0", + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", + "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.6.tgz", + "integrity": "sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.18.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.7.tgz", + "integrity": "sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", + "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@next/env": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/env/-/env-12.2.5.tgz", + "integrity": "sha512-vLPLV3cpPGjUPT3PjgRj7e3nio9t6USkuew3JE/jMeon/9Mvp1WyR18v3iwnCuX7eUAm1HmAbJHHLAbcu/EJcw==" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.2.5.tgz", + "integrity": "sha512-VBjVbmqEzGiOTBq4+wpeVXt/KgknnGB6ahvC/AxiIGnN93/RCSyXhFRI4uSfftM2Ba3w7ZO7076bfKasZsA0fw==", + "dev": true, + "dependencies": { + "glob": "7.1.7" + } + }, + "node_modules/@next/eslint-plugin-next/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@next/swc-android-arm-eabi": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.5.tgz", + "integrity": "sha512-cPWClKxGhgn2dLWnspW+7psl3MoLQUcNqJqOHk2BhNcou9ARDtC0IjQkKe5qcn9qg7I7U83Gp1yh2aesZfZJMA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-android-arm64": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.2.5.tgz", + "integrity": "sha512-vMj0efliXmC5b7p+wfcQCX0AfU8IypjkzT64GiKJD9PgiA3IILNiGJr1fw2lyUDHkjeWx/5HMlMEpLnTsQslwg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.5.tgz", + "integrity": "sha512-VOPWbO5EFr6snla/WcxUKtvzGVShfs302TEMOtzYyWni6f9zuOetijJvVh9CCTzInnXAZMtHyNhefijA4HMYLg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.5.tgz", + "integrity": "sha512-5o8bTCgAmtYOgauO/Xd27vW52G2/m3i5PX7MUYePquxXAnX73AAtqA3WgPXBRitEB60plSKZgOTkcpqrsh546A==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-freebsd-x64": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.5.tgz", + "integrity": "sha512-yYUbyup1JnznMtEBRkK4LT56N0lfK5qNTzr6/DEyDw5TbFVwnuy2hhLBzwCBkScFVjpFdfiC6SQAX3FrAZzuuw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm-gnueabihf": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.5.tgz", + "integrity": "sha512-2ZE2/G921Acks7UopJZVMgKLdm4vN4U0yuzvAMJ6KBavPzqESA2yHJlm85TV/K9gIjKhSk5BVtauIUntFRP8cg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.5.tgz", + "integrity": "sha512-/I6+PWVlz2wkTdWqhlSYYJ1pWWgUVva6SgX353oqTh8njNQp1SdFQuWDqk8LnM6ulheVfSsgkDzxrDaAQZnzjQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.5.tgz", + "integrity": "sha512-LPQRelfX6asXyVr59p5sTpx5l+0yh2Vjp/R8Wi4X9pnqcayqT4CUJLiHqCvZuLin3IsFdisJL0rKHMoaZLRfmg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.5.tgz", + "integrity": "sha512-0szyAo8jMCClkjNK0hknjhmAngUppoRekW6OAezbEYwHXN/VNtsXbfzgYOqjKWxEx3OoAzrT3jLwAF0HdX2MEw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.5.tgz", + "integrity": "sha512-zg/Y6oBar1yVnW6Il1I/08/2ukWtOG6s3acdJdEyIdsCzyQi4RLxbbhkD/EGQyhqBvd3QrC6ZXQEXighQUAZ0g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.5.tgz", + "integrity": "sha512-3/90DRNSqeeSRMMEhj4gHHQlLhhKg5SCCoYfE3kBjGpE63EfnblYUqsszGGZ9ekpKL/R4/SGB40iCQr8tR5Jiw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.5.tgz", + "integrity": "sha512-hGLc0ZRAwnaPL4ulwpp4D2RxmkHQLuI8CFOEEHdzZpS63/hMVzv81g8jzYA0UXbb9pus/iTc3VRbVbAM03SRrw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.5.tgz", + "integrity": "sha512-7h5/ahY7NeaO2xygqVrSG/Y8Vs4cdjxIjowTZ5W6CKoTKn7tmnuxlUc2h74x06FKmbhAd9agOjr/AOKyxYYm9Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rollup/plugin-alias": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-3.1.9.tgz", + "integrity": "sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==", + "dev": true, + "dependencies": { + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz", + "integrity": "sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-19.0.2.tgz", + "integrity": "sha512-gBjarfqlC7qs0AutpRW/hrFNm+cd2/QKxhwyFa+srbg1oX7rDsEU3l+W7LAUhsAp9mPJMAkXDhLbQaVwEaE8bA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^2.38.3" + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.3.tgz", + "integrity": "sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^2.42.0" + } + }, + "node_modules/@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.3.tgz", + "integrity": "sha512-WiBSI6JBIhC6LRIsB2Kwh8DsGTlbBU+mLRxJmAe3LjHTdkDpwIbEOZgoXBbZilk/vlfjK8i6nKRAvIRn1XaIMw==", + "dev": true + }, + "node_modules/@swc/helpers": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.3.tgz", + "integrity": "sha512-6JrF+fdUK2zbGpJIlN7G3v966PQjyx/dPt1T9km2wj+EUBqgrxCk3uX4Kct16MIm9gGxfKRcfax2hVf5jvlTzA==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@swc/helpers/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.6.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.4.tgz", + "integrity": "sha512-I4BD3L+6AWiUobfxZ49DlU43gtI+FTHSv9pE2Zekg6KjMpre4ByusaljW3vYSLJrvQ1ck1hUaeVu8HVlY3vzHg==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "dev": true + }, + "node_modules/@types/raf": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.0.tgz", + "integrity": "sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw==", + "optional": true + }, + "node_modules/@types/react": { + "version": "18.0.16", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.16.tgz", + "integrity": "sha512-3vX1dzVucqc2nhXtzyaParTIIRZeNbisRqLE7QdeLomVybEyeiuAouzZXgz71P+2kbJOqj3dy0fzoATg2I06GQ==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.0.6", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz", + "integrity": "sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.34.0.tgz", + "integrity": "sha512-eRfPPcasO39iwjlUAMtjeueRGuIrW3TQ9WseIDl7i5UWuFbf83yYaU7YPs4j8+4CxUMIsj1k+4kV+E+G+6ypDQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.34.0", + "@typescript-eslint/type-utils": "5.34.0", + "@typescript-eslint/utils": "5.34.0", + "debug": "^4.3.4", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.34.0.tgz", + "integrity": "sha512-HNvASMQlah5RsBW6L6c7IJ0vsm+8Sope/wu5sEAf7joJYWNb1LDbJipzmdhdUOnfrDFE6LR1j57x1EYVxrY4ow==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.34.0", + "@typescript-eslint/visitor-keys": "5.34.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.34.0.tgz", + "integrity": "sha512-49fm3xbbUPuzBIOcy2CDpYWqy/X7VBkxVN+DC21e0zIm3+61Z0NZi6J9mqPmSW1BDVk9FIOvuCFyUPjXz93sjA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.34.0.tgz", + "integrity": "sha512-O1moYjOSrab0a2fUvFpsJe0QHtvTC+cR+ovYpgKrAVXzqQyc74mv76TgY6z+aEtjQE2vgZux3CQVtGryqdcOAw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.34.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.21.0.tgz", + "integrity": "sha512-8RUwTO77hstXUr3pZoWZbRQUxXcSXafZ8/5gpnQCfXvgmP9gpNlRGlWzvfbEQ14TLjmtU8eGnONkff8U2ui2Eg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.21.0", + "@typescript-eslint/types": "5.21.0", + "@typescript-eslint/typescript-estree": "5.21.0", + "debug": "^4.3.2" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.21.0.tgz", + "integrity": "sha512-XTX0g0IhvzcH/e3393SvjRCfYQxgxtYzL3UREteUneo72EFlt7UNoiYnikUtmGVobTbhUDByhJ4xRBNe+34kOQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.21.0", + "@typescript-eslint/visitor-keys": "5.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.34.0.tgz", + "integrity": "sha512-Pxlno9bjsQ7hs1pdWRUv9aJijGYPYsHpwMeCQ/Inavhym3/XaKt1ZKAA8FIw4odTBfowBdZJDMxf2aavyMDkLg==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "5.34.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.21.0.tgz", + "integrity": "sha512-XnOOo5Wc2cBlq8Lh5WNvAgHzpjnEzxn4CJBwGkcau7b/tZ556qrWXQz4DJyChYg8JZAD06kczrdgFPpEQZfDsA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.21.0.tgz", + "integrity": "sha512-Y8Y2T2FNvm08qlcoSMoNchh9y2Uj3QmjtwNMdRQkcFG7Muz//wfJBGBxh8R7HAGQFpgYpdHqUpEoPQk+q9Kjfg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.21.0", + "@typescript-eslint/visitor-keys": "5.21.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.34.0.tgz", + "integrity": "sha512-kWRYybU4Rn++7lm9yu8pbuydRyQsHRoBDIo11k7eqBWTldN4xUdVUMCsHBiE7aoEkFzrUEaZy3iH477vr4xHAQ==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.34.0", + "@typescript-eslint/types": "5.34.0", + "@typescript-eslint/typescript-estree": "5.34.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.34.0.tgz", + "integrity": "sha512-HNvASMQlah5RsBW6L6c7IJ0vsm+8Sope/wu5sEAf7joJYWNb1LDbJipzmdhdUOnfrDFE6LR1j57x1EYVxrY4ow==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.34.0", + "@typescript-eslint/visitor-keys": "5.34.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.34.0.tgz", + "integrity": "sha512-49fm3xbbUPuzBIOcy2CDpYWqy/X7VBkxVN+DC21e0zIm3+61Z0NZi6J9mqPmSW1BDVk9FIOvuCFyUPjXz93sjA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.34.0.tgz", + "integrity": "sha512-mXHAqapJJDVzxauEkfJI96j3D10sd567LlqroyCeJaHnu42sDbjxotGb3XFtGPYKPD9IyLjhsoULML1oI3M86A==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.34.0", + "@typescript-eslint/visitor-keys": "5.34.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.34.0.tgz", + "integrity": "sha512-O1moYjOSrab0a2fUvFpsJe0QHtvTC+cR+ovYpgKrAVXzqQyc74mv76TgY6z+aEtjQE2vgZux3CQVtGryqdcOAw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.34.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.21.0.tgz", + "integrity": "sha512-SX8jNN+iHqAF0riZQMkm7e8+POXa/fXw5cxL+gjpyP+FI+JVNhii53EmQgDAfDcBpFekYSlO0fGytMQwRiMQCA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.21.0", + "eslint-visitor-keys": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/adler-32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "node_modules/ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dev": true, + "dependencies": { + "ansi-wrap": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-cyan": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", + "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", + "dev": true, + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "dev": true, + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-red": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", + "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", + "dev": true, + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "devOptional": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", + "dev": true, + "dependencies": { + "buffer-equal": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-filter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", + "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", + "dev": true, + "dependencies": { + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", + "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", + "dev": true, + "dependencies": { + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-includes": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-initial": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", + "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", + "dev": true, + "dependencies": { + "array-slice": "^1.0.0", + "is-number": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-initial/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-last": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", + "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "dev": true, + "dependencies": { + "is-number": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-last/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-sort": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", + "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", + "dev": true, + "dependencies": { + "default-compare": "^1.0.0", + "get-value": "^2.0.6", + "kind-of": "^5.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-sort/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", + "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", + "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true + }, + "node_modules/async-done": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", + "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.2", + "process-nextick-args": "^2.0.0", + "stream-exhaust": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "node_modules/async-settle": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", + "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", + "dev": true, + "dependencies": { + "async-done": "^1.2.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/axe-core": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz", + "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "dev": true + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/bach": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", + "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", + "dev": true, + "dependencies": { + "arr-filter": "^1.1.1", + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "array-each": "^1.0.0", + "array-initial": "^1.0.0", + "array-last": "^1.1.1", + "async-done": "^1.2.2", + "async-settle": "^1.0.0", + "now-and-later": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-arraybuffer": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz", + "integrity": "sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ==", + "optional": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "devOptional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "devOptional": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz", + "integrity": "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001359", + "electron-to-chromium": "^1.4.172", + "node-releases": "^2.0.5", + "update-browserslist-db": "^1.0.4" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", + "bin": { + "btoa": "bin/btoa.js" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001361", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001361.tgz", + "integrity": "sha512-ybhCrjNtkFji1/Wto6SSJKkWk6kZgVQsDq5QI83SafsF6FXv2JB4df9eEdH6g8sdGgqTXrFLjAxqBGgYoU3azQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/canvg": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.9.tgz", + "integrity": "sha512-rDXcnRPuz4QHoCilMeoTxql+fvGqNAxp+qV/KHD8rOiJSAfVjFclbdUNHD2Uqfthr+VMg17bD2bVuk6F07oLGw==", + "optional": true, + "dependencies": { + "@babel/runtime": "^7.12.5", + "@types/raf": "^3.4.0", + "core-js": "^3.8.3", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.7", + "rgbcolor": "^1.0.1", + "stackblur-canvas": "^2.0.0", + "svg-pathdata": "^6.0.3" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/cfb": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.1.tgz", + "integrity": "sha512-wT2ScPAFGSVy7CY+aauMezZBnNrfnaLSrxHUHdea+Td/86vrk6ZquggV+ssBR88zNs0OnBkL2+lf9q0K+zVGzQ==", + "dependencies": { + "adler-32": "~1.3.0", + "crc-32": "~1.2.0", + "printj": "~1.3.0" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chart.js": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.9.1.tgz", + "integrity": "sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w==" + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "devOptional": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "node_modules/cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/codepage": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/collection-map": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", + "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", + "dev": true, + "dependencies": { + "arr-map": "^2.0.2", + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colord": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", + "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", + "dev": true + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-with-sourcemaps": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/concat-with-sourcemaps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-props": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", + "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", + "dev": true, + "dependencies": { + "each-props": "^1.3.2", + "is-plain-object": "^5.0.0" + } + }, + "node_modules/copy-props/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js": { + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.20.1.tgz", + "integrity": "sha512-btdpStYFQScnNVQ5slVcr858KP0YWYjV16eGJQw8Gg7CWtu/2qNvIM3qVRIR3n1pK2R9NNOrTevbvAYxajwEjg==", + "hasInstallScript": true, + "optional": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat": { + "version": "3.23.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.3.tgz", + "integrity": "sha512-WSzUs2h2vvmKsacLHNTdpyOC9k43AEhcGoFlVgCY4L7aw98oSBKtPL6vD0/TqZjRWRQYdDSLkzZIni4Crbbiqw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.0", + "semver": "7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-js-pure": { + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.18.3.tgz", + "integrity": "sha512-qfskyO/KjtbYn09bn1IPkuhHl5PlJ6IzJ9s9sraJ1EqcuGyLGKzhSM1cY0zgyL9hx42eulQLZ6WaeK5ycJCkqw==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/crc-32": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.1.tgz", + "integrity": "sha512-Dn/xm/1vFFgs3nfrpEVScHoIslO9NZRITWGz/1E/St6u4xw99vfZzVkW0OSnzx2h9egej9xwMCEut6sqwokM/w==", + "dependencies": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.3.1" + }, + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.4.tgz", + "integrity": "sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw==", + "dev": true, + "dependencies": { + "timsort": "^0.3.0" + }, + "engines": { + "node": ">= 10" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-line-break": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.0.1.tgz", + "integrity": "sha512-gwKYIMUn7xodIcb346wgUhE2Dt5O1Kmrc16PWi8sL4FTfyDj8P5095rzH7+O8CTZudJr+uw2GCI/hwEkDJFI2w==", + "optional": true, + "dependencies": { + "base64-arraybuffer": "^0.2.0" + } + }, + "node_modules/css-select": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", + "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^5.1.0", + "domhandler": "^4.3.0", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.15.tgz", + "integrity": "sha512-ppZsS7oPpi2sfiyV5+i+NbB/3GtQ+ab2Vs1azrZaXWujUSN4o+WdTxlCZIMcT9yLW3VO/5yX3vpyDaQ1nIn8CQ==", + "dev": true, + "dependencies": { + "cssnano-preset-default": "^5.1.10", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.1.10", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.10.tgz", + "integrity": "sha512-BcpSzUVygHMOnp9uG5rfPzTOCb0GAHQkqtUQx8j1oMNF9A1Q8hziOOhiM4bdICpmrBIU85BE64RD5XGYsVQZNA==", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^6.0.3", + "cssnano-utils": "^3.0.0", + "postcss-calc": "^8.2.0", + "postcss-colormin": "^5.2.3", + "postcss-convert-values": "^5.0.2", + "postcss-discard-comments": "^5.0.1", + "postcss-discard-duplicates": "^5.0.1", + "postcss-discard-empty": "^5.0.1", + "postcss-discard-overridden": "^5.0.2", + "postcss-merge-longhand": "^5.0.4", + "postcss-merge-rules": "^5.0.4", + "postcss-minify-font-values": "^5.0.2", + "postcss-minify-gradients": "^5.0.4", + "postcss-minify-params": "^5.0.3", + "postcss-minify-selectors": "^5.1.1", + "postcss-normalize-charset": "^5.0.1", + "postcss-normalize-display-values": "^5.0.2", + "postcss-normalize-positions": "^5.0.2", + "postcss-normalize-repeat-style": "^5.0.2", + "postcss-normalize-string": "^5.0.2", + "postcss-normalize-timing-functions": "^5.0.2", + "postcss-normalize-unicode": "^5.0.2", + "postcss-normalize-url": "^5.0.4", + "postcss-normalize-whitespace": "^5.0.2", + "postcss-ordered-values": "^5.0.3", + "postcss-reduce-initial": "^5.0.2", + "postcss-reduce-transforms": "^5.0.2", + "postcss-svgo": "^5.0.3", + "postcss-unique-selectors": "^5.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.0.tgz", + "integrity": "sha512-Pzs7/BZ6OgT+tXXuF12DKR8SmSbzUeVYCtMBbS8lI0uAm3mrYmkyqCXXPsQESI6kmLfEVBppbdVY/el3hg3nAA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csstype": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz", + "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==" + }, + "node_modules/d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz", + "integrity": "sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw==", + "dev": true + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", + "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "dev": true, + "dependencies": { + "kind-of": "^5.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-compare/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-resolution": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", + "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dir-glob/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/dompurify": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.3.4.tgz", + "integrity": "sha512-6BVcgOAVFXjI0JTjEvZy901Rghm+7fDQOrNIcxB4+gdhj6Kwp6T9VBhBY/AbagKHJocRkDYGd6wvI+p4/10xtQ==", + "optional": true + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/each-props": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", + "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.1", + "object.defaults": "^1.1.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.176", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.176.tgz", + "integrity": "sha512-92JdgyRlcNDwuy75MjuFSb3clt6DGJ2IXSpg0MCjKd3JV9eSmuUAIyWiGAp/EtT0z2D4rqbYqThQLV90maH3Zw==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.5.tgz", + "integrity": "sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dev": true, + "dependencies": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz", + "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.3", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-next": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.2.5.tgz", + "integrity": "sha512-SOowilkqPzW6DxKp3a3SYlrfPi5Ajs9MIzp9gVfUDxxH9QFM5ElkR1hX5m/iICJuvCbWgQqFBiA3mCMozluniw==", + "dev": true, + "dependencies": { + "@next/eslint-plugin-next": "12.2.5", + "@rushstack/eslint-patch": "^1.1.3", + "@typescript-eslint/parser": "^5.21.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^2.7.1", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.29.4", + "eslint-plugin-react-hooks": "^4.5.0" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", + "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "glob": "^7.2.0", + "is-glob": "^4.0.3", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*" + } + }, + "node_modules/eslint-import-resolver-typescript/node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", + "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", + "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.16.3", + "aria-query": "^4.2.2", + "array-includes": "^3.1.4", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.3.5", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.7", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.2.1", + "language-tags": "^1.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/@babel/runtime": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz", + "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/eslint-plugin-react": { + "version": "7.29.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz", + "integrity": "sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flatmap": "^1.2.5", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.0", + "object.values": "^1.1.5", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.5.0.tgz", + "integrity": "sha512-8k1gRt7D7h03kd+SAAlzXkQwWK22BnK6GKZG+FJA6BAGy22CFvl8kCIXKpVux0cCxMWDQUPqSok0LKaZ0aOcCw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/eslint/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/espree": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", + "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventemitter3": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz", + "integrity": "sha1-teEHm1n7XhuidxwKmTvgYKWMmbo=" + }, + "node_modules/exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "dev": true, + "dependencies": { + "type": "^2.5.0" + } + }, + "node_modules/ext/node_modules/type": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", + "dev": true + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "dev": true, + "dependencies": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-diff": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz", + "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==" + }, + "node_modules/fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fflate": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", + "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==" + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "devOptional": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/final-form": { + "version": "4.20.7", + "resolved": "https://registry.npmjs.org/final-form/-/final-form-4.20.7.tgz", + "integrity": "sha512-ii3X9wNfyBYFnDPunYN5jh1/HAvtOZ9aJI/TVk0MB86hZuOeYkb+W5L3icgwW9WWNztZR6MDU3En6eoZTUoFPg==", + "dependencies": { + "@babel/runtime": "^7.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/final-form" + } + }, + "node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/flatted": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "dev": true + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/formik": { + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/formik/-/formik-2.2.9.tgz", + "integrity": "sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA==", + "funding": [ + { + "type": "individual", + "url": "https://opencollective.com/formik" + } + ], + "dependencies": { + "deepmerge": "^2.1.1", + "hoist-non-react-statics": "^3.3.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "react-fast-compare": "^2.0.1", + "tiny-warning": "^1.0.2", + "tslib": "^1.10.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/formik/node_modules/deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs-extra/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generic-names": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz", + "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==", + "dev": true, + "dependencies": { + "loader-utils": "^3.2.0" + } + }, + "node_modules/generic-names/node_modules/loader-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", + "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "devOptional": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "dev": true, + "dependencies": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/glob-stream/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-stream/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", + "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", + "dev": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-done": "^1.2.0", + "chokidar": "^2.0.0", + "is-negated-glob": "^1.0.0", + "just-debounce": "^1.0.0", + "normalize-path": "^3.0.0", + "object.defaults": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/glob-watcher/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/glob-watcher/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", + "dev": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/glob-watcher/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/glob-watcher/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-watcher/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/glob-watcher/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glogg": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", + "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", + "dev": true, + "dependencies": { + "sparkles": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "node_modules/gulp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", + "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", + "dev": true, + "dependencies": { + "glob-watcher": "^5.0.3", + "gulp-cli": "^2.2.0", + "undertaker": "^1.2.1", + "vinyl-fs": "^3.0.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/gulp-cli": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", + "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", + "dev": true, + "dependencies": { + "ansi-colors": "^1.0.1", + "archy": "^1.0.0", + "array-sort": "^1.0.0", + "color-support": "^1.1.3", + "concat-stream": "^1.6.0", + "copy-props": "^2.0.1", + "fancy-log": "^1.3.2", + "gulplog": "^1.0.0", + "interpret": "^1.4.0", + "isobject": "^3.0.1", + "liftoff": "^3.1.0", + "matchdep": "^2.0.0", + "mute-stdout": "^1.0.0", + "pretty-hrtime": "^1.0.0", + "replace-homedir": "^1.0.0", + "semver-greatest-satisfied-range": "^1.1.0", + "v8flags": "^3.2.0", + "yargs": "^7.1.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/gulp-concat": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", + "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", + "dev": true, + "dependencies": { + "concat-with-sourcemaps": "^1.0.0", + "through2": "^2.0.0", + "vinyl": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/gulp-flatten": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/gulp-flatten/-/gulp-flatten-0.4.0.tgz", + "integrity": "sha512-eg4spVTAiv1xXmugyaCxWne1oPtNG0UHEtABx5W8ScLiqAYceyYm6GYA36x0Qh8KOIXmAZV97L2aYGnKREG3Sg==", + "dev": true, + "dependencies": { + "plugin-error": "^0.1.2", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/gulp-rename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-2.0.0.tgz", + "integrity": "sha512-97Vba4KBzbYmR5VBs9mWmK+HwIf5mj+/zioxfZhOKeXtx5ZjBk57KFlePf5nxq9QsTtFl0ejnHE3zTC9MHXqyQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/gulp-uglify": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-3.0.2.tgz", + "integrity": "sha512-gk1dhB74AkV2kzqPMQBLA3jPoIAPd/nlNzP2XMDSG8XZrqnlCiDGAqC+rZOumzFvB5zOphlFh6yr3lgcAb/OOg==", + "dev": true, + "dependencies": { + "array-each": "^1.0.1", + "extend-shallow": "^3.0.2", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "isobject": "^3.0.1", + "make-error-cause": "^1.1.1", + "safe-buffer": "^5.1.2", + "through2": "^2.0.0", + "uglify-js": "^3.0.5", + "vinyl-sourcemaps-apply": "^0.2.0" + } + }, + "node_modules/gulp-uglify/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-uglify/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-uglifycss": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/gulp-uglifycss/-/gulp-uglifycss-1.1.0.tgz", + "integrity": "sha512-O2VDBPdS16SO3BPSCsHDnsvdCx1B/WgH2qvJaUOD+r1d8v87UjeqEtfmqR2eJ171D0F4shw8/oW5ezA6pqVXEQ==", + "dev": true, + "dependencies": { + "plugin-error": "^1.0.1", + "through2": "^2.0.3", + "uglifycss": "^0.0.25", + "vinyl": "^2.1.0" + } + }, + "node_modules/gulp-uglifycss/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-uglifycss/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-uglifycss/node_modules/plugin-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "dev": true, + "dependencies": { + "ansi-colors": "^1.0.1", + "arr-diff": "^4.0.0", + "arr-union": "^3.1.0", + "extend-shallow": "^3.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "dev": true, + "dependencies": { + "glogg": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-gulplog": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "dev": true, + "dependencies": { + "sparkles": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "^16.7.0" + } + }, + "node_modules/hoist-non-react-statics/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/html2canvas": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.3.3.tgz", + "integrity": "sha512-nQi0ayEY1cMiUMbq/F5hRwMAqsRMo7NIP6VaCqaXnXO6b/FfZO49oSfIJjdyRha28EuY8D6FBCzQOXPQV0TCrA==", + "optional": true, + "dependencies": { + "css-line-break": "2.0.1", + "text-segmentation": "^1.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "devOptional": true + }, + "node_modules/import-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", + "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", + "dev": true, + "dependencies": { + "import-from": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", + "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "devOptional": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "devOptional": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "node_modules/is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "devOptional": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "node_modules/is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "peer": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/jspdf": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.1.tgz", + "integrity": "sha512-hXObxz7ZqoyhxET78+XR34Xu2qFGrJJ2I2bE5w4SM8eFaFEkW2xcGRVUss360fYelwRSid/jT078kbNvmoW0QA==", + "dependencies": { + "@babel/runtime": "^7.14.0", + "atob": "^2.1.2", + "btoa": "^1.2.1", + "fflate": "^0.4.8" + }, + "optionalDependencies": { + "canvg": "^3.0.6", + "core-js": "^3.6.0", + "dompurify": "^2.2.0", + "html2canvas": "^1.0.0-rc.5" + } + }, + "node_modules/jspdf-autotable": { + "version": "3.5.25", + "resolved": "https://registry.npmjs.org/jspdf-autotable/-/jspdf-autotable-3.5.25.tgz", + "integrity": "sha512-BIbDd/cilRbVm5PmR+ZonolSqRtm0AvZDpTz+rrWed7BnFj5mqF7x7lkxDAMzPudLapktHUk6cxipcvUzal8cg==", + "peerDependencies": { + "jspdf": "^2.5.1" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", + "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.3", + "object.assign": "^4.1.2" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/just-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", + "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", + "dev": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", + "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", + "dev": true + }, + "node_modules/language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", + "dev": true, + "dependencies": { + "language-subtag-registry": "~0.3.2" + } + }, + "node_modules/last-run": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", + "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", + "dev": true, + "dependencies": { + "default-resolution": "^2.0.0", + "es6-weak-map": "^2.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "dependencies": { + "invert-kv": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "dev": true, + "dependencies": { + "flush-write-stream": "^1.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/liftoff": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", + "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "dev": true, + "dependencies": { + "extend": "^3.0.0", + "findup-sync": "^3.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/lilconfig": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", + "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/load-json-file/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/locate-path/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/make-error-cause": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz", + "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=", + "dev": true, + "dependencies": { + "make-error": "^1.2.0" + } + }, + "node_modules/make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", + "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", + "dev": true, + "dependencies": { + "findup-sync": "^2.0.0", + "micromatch": "^3.0.4", + "resolve": "^1.4.0", + "stack-trace": "0.0.10" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/matchdep/node_modules/findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dev": true, + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/matchdep/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/micromatch/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node_modules/mute-stdout": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", + "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "dev": true, + "optional": true + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/next": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/next/-/next-12.2.5.tgz", + "integrity": "sha512-tBdjqX5XC/oFs/6gxrZhjmiq90YWizUYU6qOWAfat7zJwrwapJ+BYgX2PmiacunXMaRpeVT4vz5MSPSLgNkrpA==", + "dependencies": { + "@next/env": "12.2.5", + "@swc/helpers": "0.4.3", + "caniuse-lite": "^1.0.30001332", + "postcss": "8.4.14", + "styled-jsx": "5.0.4", + "use-sync-external-store": "1.2.0" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=12.22.0" + }, + "optionalDependencies": { + "@next/swc-android-arm-eabi": "12.2.5", + "@next/swc-android-arm64": "12.2.5", + "@next/swc-darwin-arm64": "12.2.5", + "@next/swc-darwin-x64": "12.2.5", + "@next/swc-freebsd-x64": "12.2.5", + "@next/swc-linux-arm-gnueabihf": "12.2.5", + "@next/swc-linux-arm64-gnu": "12.2.5", + "@next/swc-linux-arm64-musl": "12.2.5", + "@next/swc-linux-x64-gnu": "12.2.5", + "@next/swc-linux-x64-musl": "12.2.5", + "@next/swc-win32-arm64-msvc": "12.2.5", + "@next/swc-win32-ia32-msvc": "12.2.5", + "@next/swc-win32-x64-msvc": "12.2.5" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^6.0.0 || ^7.0.0", + "react": "^17.0.2 || ^18.0.0-0", + "react-dom": "^17.0.2 || ^18.0.0-0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "dev": true, + "dependencies": { + "once": "^1.3.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "dev": true, + "dependencies": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.hasown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", + "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "dev": true, + "dependencies": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.reduce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", + "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", + "dev": true, + "dependencies": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "dependencies": { + "lcid": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue/node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/parchment": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/parchment/-/parchment-1.1.4.tgz", + "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "dev": true, + "dependencies": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true, + "dependencies": { + "path-root-regex": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-type/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "optional": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "devOptional": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/plugin-error": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", + "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", + "dev": true, + "dependencies": { + "ansi-cyan": "^0.1.1", + "ansi-red": "^0.1.1", + "arr-diff": "^1.0.1", + "arr-union": "^2.0.1", + "extend-shallow": "^1.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/plugin-error/node_modules/arr-diff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", + "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", + "dev": true, + "dependencies": { + "arr-flatten": "^1.0.1", + "array-slice": "^0.2.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/plugin-error/node_modules/arr-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", + "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/plugin-error/node_modules/array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/plugin-error/node_modules/extend-shallow": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", + "dev": true, + "dependencies": { + "kind-of": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/plugin-error/node_modules/kind-of": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.1.tgz", + "integrity": "sha512-FdGs2CYvGTWzDYrm71jydvr48zNStiiRtvxrCscsBLvtVwQ0YZ0gPx2HVFawu0xQuiPLCv66dJo3+/ymhZZLkA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.3.tgz", + "integrity": "sha512-dra4xoAjub2wha6RUXAgadHEn2lGxbj8drhFcIGLOMn914Eu7DkPUurugDXgstwttCYkJtZ/+PkWRWdp3UHRIA==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.2.tgz", + "integrity": "sha512-KQ04E2yadmfa1LqXm7UIDwW1ftxU/QWZmz6NKnHnUvJ3LEYbbcX6i329f/ig+WnEByHegulocXrECaZGLpL8Zg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", + "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", + "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", + "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.2.tgz", + "integrity": "sha512-+56BLP6NSSUuWUXjRgAQuho1p5xs/hU5Sw7+xt9S3JSg+7R6+WMGnJW7Hre/6tTuZ2xiXMB42ObkiZJ2hy/Pew==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.1.tgz", + "integrity": "sha512-c/9XYboIbSEUZpiD1UQD0IKiUe8n9WHYV7YFe7X7J+ZwCsEKkUJSFWjS9hBU1RR9THR7jMXst8sxiqP0jjo2mg==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.4", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.4.tgz", + "integrity": "sha512-2lZrOVD+d81aoYkZDpWu6+3dTAAGkCKbV5DoRhnIR7KOULVrI/R7bcMjhrH9KTRy6iiHKqmtG+n/MMj1WmqHFw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.1.0", + "stylehacks": "^5.0.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.4.tgz", + "integrity": "sha512-yOj7bW3NxlQxaERBB0lEY1sH5y+RzevjbdH4DBJurjKERNpknRByFNdNe+V72i5pIZL12woM9uGdS5xbSB+kDQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.0.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.2.tgz", + "integrity": "sha512-R6MJZryq28Cw0AmnyhXrM7naqJZZLoa1paBltIzh2wM7yb4D45TLur+eubTQ4jCmZU9SGeZdWsc5KcSoqTMeTg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.4.tgz", + "integrity": "sha512-RVwZA7NC4R4J76u8X0Q0j+J7ItKUWAeBUJ8oEEZWmtv3Xoh19uNJaJwzNpsydQjk6PkuhRrK+YwwMf+c+68EYg==", + "dev": true, + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.3.tgz", + "integrity": "sha512-NY92FUikE+wralaiVexFd5gwb7oJTIDhgTNeIw89i1Ymsgt4RWiPXfz3bg7hDy4NL6gepcThJwOYNtZO/eNi7Q==", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.2", + "browserslist": "^4.16.6", + "cssnano-utils": "^3.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.1.tgz", + "integrity": "sha512-TOzqOPXt91O2luJInaVPiivh90a2SIK5Nf1Ea7yEIM/5w+XA5BGrZGUSW8aEx9pJ/oNj7ZJBhjvigSiBV+bC1Q==", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.3.0.tgz", + "integrity": "sha512-zoUttLDSsbWDinJM9jH37o7hulLRyEgH6fZm2PchxN7AZ8rkdWiALyNhnQ7+jg7cX9f10m6y5VhHsrjO0Mf/DA==", + "dev": true, + "dependencies": { + "generic-names": "^4.0.0", + "icss-replace-symbols": "^1.1.0", + "lodash.camelcase": "^4.3.0", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "string-hash": "^1.1.1" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", + "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.2.tgz", + "integrity": "sha512-RxXoJPUR0shSjkMMzgEZDjGPrgXUVYyWA/YwQRicb48H15OClPuaDR7tYokLAlGZ2tCSENEN5WxjgxSD5m4cUw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.2.tgz", + "integrity": "sha512-tqghWFVDp2btqFg1gYob1etPNxXLNh3uVeWgZE2AQGh6b2F8AK2Gj36v5Vhyh+APwIzNjmt6jwZ9pTBP+/OM8g==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.2.tgz", + "integrity": "sha512-/rIZn8X9bBzC7KvY4iKUhXUGW3MmbXwfPF23jC9wT9xTi7kAvgj8sEgwxjixBmoL6MVa4WOgxNz2hAR6wTK8tw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.2.tgz", + "integrity": "sha512-zaI1yzwL+a/FkIzUWMQoH25YwCYxi917J4pYm1nRXtdgiCdnlTkx5eRzqWEC64HtRa06WCJ9TIutpb6GmW4gFw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.2.tgz", + "integrity": "sha512-Ao0PP6MoYsRU1LxeVUW740ioknvdIUmfr6uAA3xWlQJ9s69/Tupy8qwhuKG3xWfl+KvLMAP9p2WXF9cwuk/7Bg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.2.tgz", + "integrity": "sha512-3y/V+vjZ19HNcTizeqwrbZSUsE69ZMRHfiiyLAJb7C7hJtYmM4Gsbajy7gKagu97E8q5rlS9k8FhojA8cpGhWw==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.4.tgz", + "integrity": "sha512-cNj3RzK2pgQQyNp7dzq0dqpUpQ/wYtdDZM3DepPmFjCmYIfceuD9VIAcOdvrNetjIU65g1B4uwdP/Krf6AFdXg==", + "dev": true, + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.2.tgz", + "integrity": "sha512-CXBx+9fVlzSgbk0IXA/dcZn9lXixnQRndnsPC5ht3HxlQ1bVh77KQDL1GffJx1LTzzfae8ftMulsjYmO2yegxA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.3.tgz", + "integrity": "sha512-T9pDS+P9bWeFvqivXd5ACzQmrCmHjv3ZP+djn8E1UZY7iK79pFSm7i3WbKw2VSmFmdbMm8sQ12OPcNpzBo3Z2w==", + "dev": true, + "dependencies": { + "cssnano-utils": "^3.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.2.tgz", + "integrity": "sha512-v/kbAAQ+S1V5v9TJvbGkV98V2ERPdU6XvMcKMjqAlYiJ2NtsHGlKYLPjWWcXlaTKNxooId7BGxeraK8qXvzKtw==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.2.tgz", + "integrity": "sha512-25HeDeFsgiPSUx69jJXZn8I06tMxLQJJNF5h7i9gsUg8iP4KOOJ8EX8fj3seeoLt3SLU2YDD6UPnDYVGUO7DEA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz", + "integrity": "sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.3.tgz", + "integrity": "sha512-41XZUA1wNDAZrQ3XgWREL/M2zSw8LJPvb5ZWivljBsUQAGoEKMYm6okHsTjJxKYI4M75RQEH4KYlEM52VwdXVA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.1.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.2.tgz", + "integrity": "sha512-w3zBVlrtZm7loQWRPVC0yjUwwpty7OM6DnEHkxcSQXO1bMS3RJ+JUS5LFMSDZHJcvGsRwhZinCWVqn8Kej4EDA==", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/primeflex": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/primeflex/-/primeflex-3.2.1.tgz", + "integrity": "sha512-sGDJ4mh2fG19xa1yc4IPGSQ8MUMyu5nU+tYnl27AFuFHhX8XwEA7fWCtWyBbclclVhXtre+Kf9WobWPnfxWAEQ==" + }, + "node_modules/primeicons": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-5.0.0.tgz", + "integrity": "sha512-heygWF0X5HFI1otlZE62pp6ye7sZ8om78J9au2BRkg8O7Y8AHTZ9qKMRzchZUHLe8zUAvdi6hZzzm9XxgwIExw==" + }, + "node_modules/printj": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.3.1.tgz", + "integrity": "sha512-GA3TdL8szPK4AQ2YnOe/b+Y1jUFwmmGMMK/qbY7VcE3Z7FU8JstbKiKRzO6CIiAKPhTO8m01NoQ0V5f3jc4OGg==", + "bin": { + "printj": "bin/printj.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/promise.series": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/promise.series/-/promise.series-0.2.0.tgz", + "integrity": "sha1-LMfr6Vn8OmYZwEq029yeRS2GS70=", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quill": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/quill/-/quill-1.3.7.tgz", + "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==", + "dependencies": { + "clone": "^2.1.1", + "deep-equal": "^1.0.1", + "eventemitter3": "^2.0.3", + "extend": "^3.0.2", + "parchment": "^1.1.4", + "quill-delta": "^3.6.2" + } + }, + "node_modules/quill-delta": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-3.6.3.tgz", + "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==", + "dependencies": { + "deep-equal": "^1.0.1", + "extend": "^3.0.2", + "fast-diff": "1.1.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "optional": true, + "dependencies": { + "performance-now": "^2.1.0" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + }, + "peerDependencies": { + "react": "17.0.2" + } + }, + "node_modules/react-fast-compare": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", + "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" + }, + "node_modules/react-final-form": { + "version": "6.5.9", + "resolved": "https://registry.npmjs.org/react-final-form/-/react-final-form-6.5.9.tgz", + "integrity": "sha512-x3XYvozolECp3nIjly+4QqxdjSSWfcnpGEL5K8OBT6xmGrq5kBqbA6+/tOqoom9NwqIPPbxPNsOViFlbKgowbA==", + "dependencies": { + "@babel/runtime": "^7.15.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/final-form" + }, + "peerDependencies": { + "final-form": "^4.20.4", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-hook-form": { + "version": "7.34.2", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.34.2.tgz", + "integrity": "sha512-1lYWbEqr0GW7HHUjMScXMidGvV0BE2RJV3ap2BL7G0EJirkqpccTaawbsvBO8GZaB3JjCeFBEbnEWI1P8ZoLRQ==", + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "devOptional": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", + "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", + "dev": true, + "dependencies": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/replace-homedir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", + "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1", + "is-absolute": "^1.0.0", + "remove-trailing-separator": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", + "dev": true, + "dependencies": { + "value-or-function": "^3.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rgbcolor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", + "integrity": "sha1-1lBezbMEplldom+ktDMHMGd1lF0=", + "optional": true, + "engines": { + "node": ">= 0.8.15" + } + }, + "node_modules/rollup": { + "version": "2.63.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.63.0.tgz", + "integrity": "sha512-nps0idjmD+NXl6OREfyYXMn/dar3WGcyKn+KBzPdaLecub3x/LrId0wUcthcr8oZUAcZAR8NKcfGGFlNgGL1kQ==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-postcss": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-postcss/-/rollup-plugin-postcss-4.0.2.tgz", + "integrity": "sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "concat-with-sourcemaps": "^1.1.0", + "cssnano": "^5.0.1", + "import-cwd": "^3.0.0", + "p-queue": "^6.6.2", + "pify": "^5.0.0", + "postcss-load-config": "^3.0.0", + "postcss-modules": "^4.0.0", + "promise.series": "^0.2.0", + "resolve": "^1.19.0", + "rollup-pluginutils": "^2.8.2", + "safe-identifier": "^0.4.2", + "style-inject": "^0.3.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "postcss": "8.x" + } + }, + "node_modules/rollup-plugin-postcss/node_modules/pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "dependencies": { + "estree-walker": "^0.6.1" + } + }, + "node_modules/rollup-pluginutils/node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safe-identifier": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", + "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==", + "dev": true + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/sass": { + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.53.0.tgz", + "integrity": "sha512-zb/oMirbKhUgRQ0/GFz8TSAwRq2IlR29vOUJZOx0l8sV+CkHUfHa4u5nqrG+1VceZp7Jfj59SVW9ogdhTvJDcQ==", + "devOptional": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/semver-greatest-satisfied-range": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", + "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", + "dev": true, + "dependencies": { + "sver-compat": "^1.5.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "node_modules/sparkles": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssf": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", + "dependencies": { + "frac": "~1.1.2" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/stackblur-canvas": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.5.0.tgz", + "integrity": "sha512-EeNzTVfj+1In7aSLPKDD03F/ly4RxEuF/EX0YcOG0cKoPXs+SLZxDawQbexQDBzwROs4VKLWTOaZQlZkGBFEIQ==", + "optional": true, + "engines": { + "node": ">=0.1.14" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stream-exhaust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", + "dev": true + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=", + "dev": true + }, + "node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", + "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.1", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-inject": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-inject/-/style-inject-0.3.0.tgz", + "integrity": "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==", + "dev": true + }, + "node_modules/styled-jsx": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.4.tgz", + "integrity": "sha512-sDFWLbg4zR+UkNzfk5lPilyIgtpddfxXEULxhujorr5jtePTUqiPDc5BC0v1NRqTr/WaFBGQQUoYToGlF4B2KQ==", + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/stylehacks": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", + "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", + "dev": true, + "dependencies": { + "browserslist": "^4.16.0", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sver-compat": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", + "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", + "dev": true, + "dependencies": { + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/svg-pathdata": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", + "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==", + "optional": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/terser": { + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", + "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/text-segmentation": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.2.tgz", + "integrity": "sha512-uTqvLxdBrVnx/CFQOtnf8tfzSXFm+1Qxau7Xi54j4OPTZokuDOX8qncQzrg2G8ZicAMOM8TgzFAYTb+AqNO4Cw==", + "optional": true, + "dependencies": { + "utrie": "^1.0.1" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "dev": true, + "dependencies": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "node_modules/time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "node_modules/to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", + "dev": true, + "dependencies": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "devOptional": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/to-regex/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", + "dev": true, + "dependencies": { + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "node_modules/typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uglify-js": { + "version": "3.14.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz", + "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==", + "dev": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uglifycss": { + "version": "0.0.25", + "resolved": "https://registry.npmjs.org/uglifycss/-/uglifycss-0.0.25.tgz", + "integrity": "sha1-vqcr9JeerO8TowLPR7LRrz80QZc=", + "dev": true, + "bin": { + "uglifycss": "uglifycss" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/undertaker": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", + "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "bach": "^1.0.0", + "collection-map": "^1.0.0", + "es6-weak-map": "^2.0.1", + "fast-levenshtein": "^1.0.0", + "last-run": "^1.1.0", + "object.defaults": "^1.0.0", + "object.reduce": "^1.0.0", + "undertaker-registry": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/undertaker-registry": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", + "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/undertaker/node_modules/fast-levenshtein": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", + "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=", + "dev": true + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unique-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "dev": true, + "dependencies": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", + "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/utrie": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.1.tgz", + "integrity": "sha512-JPaDXF3vzgZxfeEwutdGzlrNoVFL5UvZcbO6Qo9D4GoahrieUPoMU8GCpVpR7MQqcKhmShIh8VlbEN3PLM3EBg==", + "optional": true, + "dependencies": { + "base64-arraybuffer": "^1.0.1" + } + }, + "node_modules/utrie/node_modules/base64-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz", + "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==", + "optional": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "dev": true, + "dependencies": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "dev": true, + "dependencies": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", + "dev": true, + "dependencies": { + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-sourcemap/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-sourcemaps-apply": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", + "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", + "dev": true, + "dependencies": { + "source-map": "^0.5.1" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "node_modules/wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/word": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/xlsx": { + "version": "0.18.5", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", + "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", + "dependencies": { + "adler-32": "~1.3.0", + "cfb": "~1.2.1", + "codepage": "~1.15.0", + "crc-32": "~1.2.1", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.3.0" + }, + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", + "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", + "dev": true, + "dependencies": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.1" + } + }, + "node_modules/yargs-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", + "dev": true, + "dependencies": { + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } }, - "node_modules/next": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/next/-/next-12.2.0.tgz", - "integrity": "sha512-B4j7D3SHYopLYx6/Ark0fenwIar9tEaZZFAaxmKjgcMMexhVJzB3jt7X+6wcdXPPMeUD6r09weUtnDpjox/vIA==", - "dependencies": { - "@next/env": "12.2.0", - "@swc/helpers": "0.4.2", - "caniuse-lite": "^1.0.30001332", - "postcss": "8.4.5", - "styled-jsx": "5.0.2", - "use-sync-external-store": "1.1.0" - }, - "bin": { - "next": "dist/bin/next" - }, - "engines": { - "node": ">=12.22.0" - }, - "optionalDependencies": { - "@next/swc-android-arm-eabi": "12.2.0", - "@next/swc-android-arm64": "12.2.0", - "@next/swc-darwin-arm64": "12.2.0", - "@next/swc-darwin-x64": "12.2.0", - "@next/swc-freebsd-x64": "12.2.0", - "@next/swc-linux-arm-gnueabihf": "12.2.0", - "@next/swc-linux-arm64-gnu": "12.2.0", - "@next/swc-linux-arm64-musl": "12.2.0", - "@next/swc-linux-x64-gnu": "12.2.0", - "@next/swc-linux-x64-musl": "12.2.0", - "@next/swc-win32-arm64-msvc": "12.2.0", - "@next/swc-win32-ia32-msvc": "12.2.0", - "@next/swc-win32-x64-msvc": "12.2.0" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^6.0.0 || ^7.0.0", - "react": "^17.0.2 || ^18.0.0-0", - "react-dom": "^17.0.2 || ^18.0.0-0", - "sass": "^1.3.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true + "dependencies": { + "@ampproject/remapping": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", + "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.0" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.6.tgz", + "integrity": "sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ==", + "dev": true + }, + "@babel/core": { + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.8.tgz", + "integrity": "sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ==", + "dev": true, + "peer": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.7", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helpers": "^7.17.8", + "@babel/parser": "^7.17.8", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "peer": true + } + } + }, + "@babel/generator": { + "version": "7.18.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz", + "integrity": "sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==", + "dev": true, + "requires": { + "@babel/types": "^7.18.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.6.tgz", + "integrity": "sha512-KT10c1oWEpmrIRYnthbzHgoOf6B+Xd6a5yhdbNtdhtG7aO1or5HViuf1TQR36xY/QprXA5nvxO6nAjhJ4y38jw==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz", + "integrity": "sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.6.tgz", + "integrity": "sha512-YfDzdnoxHGV8CzqHGyCbFvXg5QESPFkXlHtvdCkesLjjVMT2Adxe4FGUR5ChIb3DxSaXO12iIOCWoXdsUVwnqw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-member-expression-to-functions": "^7.18.6", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz", + "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.1.0" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz", + "integrity": "sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==", + "dev": true + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-function-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz", + "integrity": "sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==", + "dev": true, + "requires": { + "@babel/template": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.6.tgz", + "integrity": "sha512-CeHxqwwipekotzPDUuJOfIMtcIHBuc7WAzLmTYWctVigqS5RktNMQ5bEwQSuGewzYnCtTWa3BARXeiLxDTv+Ng==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz", + "integrity": "sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz", + "integrity": "sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.6.tgz", + "integrity": "sha512-z5wbmV55TveUPZlCLZvxWHtrjuJd+8inFhk7DG0WW87/oJuGDcjDiu7HIvGcpf5464L6xKCg3vNkmlVVz9hwyQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-wrap-function": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-replace-supers": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.6.tgz", + "integrity": "sha512-fTf7zoXnUGl9gF25fXCWE26t7Tvtyn6H4hkLSYhATwJvw2uYxd3aoXplMSe0g9XbwK7bmxNes7+FGO0rB/xC0g==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-member-expression-to-functions": "^7.18.6", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.6.tgz", + "integrity": "sha512-4KoLhwGS9vGethZpAhYnMejWkX64wsnHPDwvOsKWU6Fg4+AlK2Jz3TyjQLMEPvz+1zemi/WBdkYxCD0bAfIkiw==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", + "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.6.tgz", + "integrity": "sha512-I5/LZfozwMNbwr/b1vhhuYD+J/mU+gfGAj5td7l5Rv9WYmH6i3Om69WGKNmlIpsVW/mF6O5bvTKbvDQZVgjqOw==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.18.6", + "@babel/template": "^7.18.6", + "@babel/traverse": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/helpers": { + "version": "7.17.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.8.tgz", + "integrity": "sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==", + "dev": true, + "peer": true, + "requires": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.6.tgz", + "integrity": "sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw==", + "dev": true + }, + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", + "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.6.tgz", + "integrity": "sha512-Udgu8ZRgrBrttVz6A0EVL0SJ1z+RLbIeqsu632SA1hf0awEppD6TvdznoH+orIF8wtFFAV/Enmw9Y+9oV8TQcw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.6" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz", + "integrity": "sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", + "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.6.tgz", + "integrity": "sha512-zr/QcUlUo7GPo6+X1wC98NJADqmy5QTFWWhqeQWiki4XHafJtLl/YMGkmRB2szDD2IYJCCdBTd4ElwhId9T7Xw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.6.tgz", + "integrity": "sha512-zMo66azZth/0tVd7gmkxOkOjs2rpHyhpcFo565PUP37hSp6hSd9uUKIfTDFMz58BwqgQKhJ9YxtM5XddjXVn+Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.6.tgz", + "integrity": "sha512-9yuM6wr4rIsKa1wlUAbZEazkCrgw2sMPEXCr4Rnwetu7cEW1NydkCWytLuYletbf8vFxdJxFhwEZqMpOx2eZyw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.18.6", + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.18.6" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.6.tgz", + "integrity": "sha512-PatI6elL5eMzoypFAiYDpYQyMtXTn+iMhuxxQt5mAXD4fEmKorpSI3PHd+i3JXBJN3xyA6MvJv7at23HffFHwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", + "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-import-assertions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", + "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", + "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.6.tgz", + "integrity": "sha512-pRqwb91C42vs1ahSAWJkxOxU1RHWDn16XAa6ggQ72wjLlWyYeAcLvTtE0aM8ph3KNydy9CQF2nLYcjq1WysgxQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.6.tgz", + "integrity": "sha512-XTg8XW/mKpzAF3actL554Jl/dOYoJtv3l8fxaEczpgz84IeeVf+T1u2CSvPHuZbt0w3JkIx4rdn/MRQI7mo0HQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.6.tgz", + "integrity": "sha512-9repI4BhNrR0KenoR9vm3/cIc1tSBIo+u1WVjKCAynahj25O8zfbiE6JtAtHPGQSs4yZ+bA8mRasRP+qc+2R5A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.6.tgz", + "integrity": "sha512-tgy3u6lRp17ilY8r1kP4i2+HDUwxlVqq3RTc943eAWSzGgpU1qhiKpqZ5CMyHReIYPHdo3Kg8v8edKtDqSVEyQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.6.tgz", + "integrity": "sha512-NJU26U/208+sxYszf82nmGYqVF9QN8py2HFTblPT9hbawi8+1C5a9JubODLTGFuT0qlkqVinmkwOD13s0sZktg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.6.tgz", + "integrity": "sha512-WAjoMf4wIiSsy88KmG7tgj2nFdEK7E46tArVtcgED7Bkj6Fg/tG5SbvNIOKxbFS2VFgNh6+iaPswBeQZm4ox8w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.6.tgz", + "integrity": "sha512-kJha/Gbs5RjzIu0CxZwf5e3aTTSlhZnHMT8zPWnJMjNpLOUgqevg+PN5oMH68nMCXnfiMo4Bhgxqj59KHTlAnA==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.6.tgz", + "integrity": "sha512-x3HEw0cJZVDoENXOp20HlypIHfl0zMIhMVZEBVTfmqbObIpsMxMbmU5nOEO8R7LYT+z5RORKPlTI5Hj4OsO9/Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", + "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", + "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", + "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.6.tgz", + "integrity": "sha512-UbPYpXxLjTw6w6yXX2BYNxF3p6QY225wcTkfQCy3OMnSlS/C3xGtwUjEzGkldb/sy6PWLiCQ3NbYfjWUTI3t4g==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz", + "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.6.tgz", + "integrity": "sha512-FjdqgMv37yVl/gwvzkcB+wfjRI8HQmc5EgOG9iGNvUY1ok+TjsoaMP7IqCDZBhkFcM5f3OPVMs6Dmp03C5k4/A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", + "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", + "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.6.tgz", + "integrity": "sha512-Mz7xMPxoy9kPS/JScj6fJs03TZ/fZ1dJPlMjRAgTaxaS0fUBk8FV/A2rRgfPsVCZqALNwMexD+0Uaf5zlcKPpw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-jsx": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", + "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", + "dev": true, + "requires": { + "@babel/plugin-transform-react-jsx": "^7.18.6" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", + "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", + "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "regenerator-transform": "^0.15.0" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", + "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.6.tgz", + "integrity": "sha512-8uRHk9ZmRSnWqUgyae249EJZ94b0yAGLBIqzZzl+0iEdbno55Pmlt/32JZsHwXD9k/uZj18Aqqk35wBX4CBTXA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "babel-plugin-polyfill-corejs2": "^0.3.1", + "babel-plugin-polyfill-corejs3": "^0.5.2", + "babel-plugin-polyfill-regenerator": "^0.3.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.6.tgz", + "integrity": "sha512-ayT53rT/ENF8WWexIRg9AiV9h0aIteyWn5ptfZTZQrjk/+f3WdrJGCY4c9wcgl2+MKkKPhzbYp97FTsquZpDCw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.6.tgz", + "integrity": "sha512-UuqlRrQmT2SWRvahW46cGSany0uTlcj8NYOS5sRGYi8FxPYPoLd5DDmMd32ZXEj2Jq+06uGVQKHxa/hJx2EzKw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.6.tgz", + "integrity": "sha512-7m71iS/QhsPk85xSjFPovHPcH3H9qeyzsujhTc+vcdnsXavoWYJ74zx0lP5RhpC5+iDnVLO+PPMHzC11qels1g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz", + "integrity": "sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/preset-env": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.6.tgz", + "integrity": "sha512-WrthhuIIYKrEFAwttYzgRNQ5hULGmwTj+D6l7Zdfsv5M7IWV/OZbUfbeL++Qrzx1nVJwWROIFhCHRYQV4xbPNw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.18.6", + "@babel/helper-compilation-targets": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.6", + "@babel/plugin-proposal-async-generator-functions": "^7.18.6", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.6", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.6", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.18.6", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.6", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.18.6", + "@babel/plugin-transform-classes": "^7.18.6", + "@babel/plugin-transform-computed-properties": "^7.18.6", + "@babel/plugin-transform-destructuring": "^7.18.6", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.6", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.6", + "@babel/plugin-transform-function-name": "^7.18.6", + "@babel/plugin-transform-literals": "^7.18.6", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.18.6", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.6", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.18.6", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.6", + "@babel/plugin-transform-typeof-symbol": "^7.18.6", + "@babel/plugin-transform-unicode-escapes": "^7.18.6", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.18.6", + "babel-plugin-polyfill-corejs2": "^0.3.1", + "babel-plugin-polyfill-corejs3": "^0.5.2", + "babel-plugin-polyfill-regenerator": "^0.3.1", + "core-js-compat": "^3.22.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/preset-modules": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", + "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-react": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", + "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-transform-react-display-name": "^7.18.6", + "@babel/plugin-transform-react-jsx": "^7.18.6", + "@babel/plugin-transform-react-jsx-development": "^7.18.6", + "@babel/plugin-transform-react-pure-annotations": "^7.18.6" + } + }, + "@babel/runtime": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", + "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/runtime-corejs3": { + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz", + "integrity": "sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg==", + "dev": true, + "requires": { + "core-js-pure": "^3.16.0", + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", + "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6" + } + }, + "@babel/traverse": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.6.tgz", + "integrity": "sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.6", + "@babel/helper-function-name": "^7.18.6", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.18.6", + "@babel/types": "^7.18.6", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.18.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.7.tgz", + "integrity": "sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "to-fast-properties": "^2.0.0" + } + }, + "@eslint/eslintrc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", + "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.2", + "globals": "^13.15.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz", + "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/gitignore-to-minimatch": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz", + "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", + "dev": true + }, + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", + "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@next/env": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/env/-/env-12.2.5.tgz", + "integrity": "sha512-vLPLV3cpPGjUPT3PjgRj7e3nio9t6USkuew3JE/jMeon/9Mvp1WyR18v3iwnCuX7eUAm1HmAbJHHLAbcu/EJcw==" + }, + "@next/eslint-plugin-next": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.2.5.tgz", + "integrity": "sha512-VBjVbmqEzGiOTBq4+wpeVXt/KgknnGB6ahvC/AxiIGnN93/RCSyXhFRI4uSfftM2Ba3w7ZO7076bfKasZsA0fw==", + "dev": true, + "requires": { + "glob": "7.1.7" + }, + "dependencies": { + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "@next/swc-android-arm-eabi": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.5.tgz", + "integrity": "sha512-cPWClKxGhgn2dLWnspW+7psl3MoLQUcNqJqOHk2BhNcou9ARDtC0IjQkKe5qcn9qg7I7U83Gp1yh2aesZfZJMA==", + "optional": true + }, + "@next/swc-android-arm64": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.2.5.tgz", + "integrity": "sha512-vMj0efliXmC5b7p+wfcQCX0AfU8IypjkzT64GiKJD9PgiA3IILNiGJr1fw2lyUDHkjeWx/5HMlMEpLnTsQslwg==", + "optional": true + }, + "@next/swc-darwin-arm64": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.5.tgz", + "integrity": "sha512-VOPWbO5EFr6snla/WcxUKtvzGVShfs302TEMOtzYyWni6f9zuOetijJvVh9CCTzInnXAZMtHyNhefijA4HMYLg==", + "optional": true + }, + "@next/swc-darwin-x64": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.5.tgz", + "integrity": "sha512-5o8bTCgAmtYOgauO/Xd27vW52G2/m3i5PX7MUYePquxXAnX73AAtqA3WgPXBRitEB60plSKZgOTkcpqrsh546A==", + "optional": true + }, + "@next/swc-freebsd-x64": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.5.tgz", + "integrity": "sha512-yYUbyup1JnznMtEBRkK4LT56N0lfK5qNTzr6/DEyDw5TbFVwnuy2hhLBzwCBkScFVjpFdfiC6SQAX3FrAZzuuw==", + "optional": true + }, + "@next/swc-linux-arm-gnueabihf": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.5.tgz", + "integrity": "sha512-2ZE2/G921Acks7UopJZVMgKLdm4vN4U0yuzvAMJ6KBavPzqESA2yHJlm85TV/K9gIjKhSk5BVtauIUntFRP8cg==", + "optional": true + }, + "@next/swc-linux-arm64-gnu": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.5.tgz", + "integrity": "sha512-/I6+PWVlz2wkTdWqhlSYYJ1pWWgUVva6SgX353oqTh8njNQp1SdFQuWDqk8LnM6ulheVfSsgkDzxrDaAQZnzjQ==", + "optional": true + }, + "@next/swc-linux-arm64-musl": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.5.tgz", + "integrity": "sha512-LPQRelfX6asXyVr59p5sTpx5l+0yh2Vjp/R8Wi4X9pnqcayqT4CUJLiHqCvZuLin3IsFdisJL0rKHMoaZLRfmg==", + "optional": true + }, + "@next/swc-linux-x64-gnu": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.5.tgz", + "integrity": "sha512-0szyAo8jMCClkjNK0hknjhmAngUppoRekW6OAezbEYwHXN/VNtsXbfzgYOqjKWxEx3OoAzrT3jLwAF0HdX2MEw==", + "optional": true + }, + "@next/swc-linux-x64-musl": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.5.tgz", + "integrity": "sha512-zg/Y6oBar1yVnW6Il1I/08/2ukWtOG6s3acdJdEyIdsCzyQi4RLxbbhkD/EGQyhqBvd3QrC6ZXQEXighQUAZ0g==", + "optional": true + }, + "@next/swc-win32-arm64-msvc": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.5.tgz", + "integrity": "sha512-3/90DRNSqeeSRMMEhj4gHHQlLhhKg5SCCoYfE3kBjGpE63EfnblYUqsszGGZ9ekpKL/R4/SGB40iCQr8tR5Jiw==", + "optional": true + }, + "@next/swc-win32-ia32-msvc": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.5.tgz", + "integrity": "sha512-hGLc0ZRAwnaPL4ulwpp4D2RxmkHQLuI8CFOEEHdzZpS63/hMVzv81g8jzYA0UXbb9pus/iTc3VRbVbAM03SRrw==", + "optional": true + }, + "@next/swc-win32-x64-msvc": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.5.tgz", + "integrity": "sha512-7h5/ahY7NeaO2xygqVrSG/Y8Vs4cdjxIjowTZ5W6CKoTKn7tmnuxlUc2h74x06FKmbhAd9agOjr/AOKyxYYm9Q==", + "optional": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@rollup/plugin-alias": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-3.1.9.tgz", + "integrity": "sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==", + "dev": true, + "requires": { + "slash": "^3.0.0" + } + }, + "@rollup/plugin-babel": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz", + "integrity": "sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + } + }, + "@rollup/plugin-commonjs": { + "version": "19.0.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-19.0.2.tgz", + "integrity": "sha512-gBjarfqlC7qs0AutpRW/hrFNm+cd2/QKxhwyFa+srbg1oX7rDsEU3l+W7LAUhsAp9mPJMAkXDhLbQaVwEaE8bA==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + } + }, + "@rollup/plugin-node-resolve": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.3.tgz", + "integrity": "sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + } + }, + "@rollup/plugin-replace": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "dependencies": { + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + } + } + }, + "@rushstack/eslint-patch": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.3.tgz", + "integrity": "sha512-WiBSI6JBIhC6LRIsB2Kwh8DsGTlbBU+mLRxJmAe3LjHTdkDpwIbEOZgoXBbZilk/vlfjK8i6nKRAvIRn1XaIMw==", + "dev": true + }, + "@swc/helpers": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.3.tgz", + "integrity": "sha512-6JrF+fdUK2zbGpJIlN7G3v966PQjyx/dPt1T9km2wj+EUBqgrxCk3uX4Kct16MIm9gGxfKRcfax2hVf5jvlTzA==", + "requires": { + "tslib": "^2.4.0" + }, + "dependencies": { + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + } + } + }, + "@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, + "@types/node": { + "version": "18.6.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.4.tgz", + "integrity": "sha512-I4BD3L+6AWiUobfxZ49DlU43gtI+FTHSv9pE2Zekg6KjMpre4ByusaljW3vYSLJrvQ1ck1hUaeVu8HVlY3vzHg==", + "dev": true + }, + "@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "dev": true + }, + "@types/raf": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.0.tgz", + "integrity": "sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw==", + "optional": true + }, + "@types/react": { + "version": "18.0.16", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.16.tgz", + "integrity": "sha512-3vX1dzVucqc2nhXtzyaParTIIRZeNbisRqLE7QdeLomVybEyeiuAouzZXgz71P+2kbJOqj3dy0fzoATg2I06GQ==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "18.0.6", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz", + "integrity": "sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.34.0.tgz", + "integrity": "sha512-eRfPPcasO39iwjlUAMtjeueRGuIrW3TQ9WseIDl7i5UWuFbf83yYaU7YPs4j8+4CxUMIsj1k+4kV+E+G+6ypDQ==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.34.0", + "@typescript-eslint/type-utils": "5.34.0", + "@typescript-eslint/utils": "5.34.0", + "debug": "^4.3.4", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.2.0", + "regexpp": "^3.2.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.34.0.tgz", + "integrity": "sha512-HNvASMQlah5RsBW6L6c7IJ0vsm+8Sope/wu5sEAf7joJYWNb1LDbJipzmdhdUOnfrDFE6LR1j57x1EYVxrY4ow==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.34.0", + "@typescript-eslint/visitor-keys": "5.34.0" + } + }, + "@typescript-eslint/types": { + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.34.0.tgz", + "integrity": "sha512-49fm3xbbUPuzBIOcy2CDpYWqy/X7VBkxVN+DC21e0zIm3+61Z0NZi6J9mqPmSW1BDVk9FIOvuCFyUPjXz93sjA==", + "dev": true + }, + "@typescript-eslint/visitor-keys": { + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.34.0.tgz", + "integrity": "sha512-O1moYjOSrab0a2fUvFpsJe0QHtvTC+cR+ovYpgKrAVXzqQyc74mv76TgY6z+aEtjQE2vgZux3CQVtGryqdcOAw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.34.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/parser": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.21.0.tgz", + "integrity": "sha512-8RUwTO77hstXUr3pZoWZbRQUxXcSXafZ8/5gpnQCfXvgmP9gpNlRGlWzvfbEQ14TLjmtU8eGnONkff8U2ui2Eg==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.21.0", + "@typescript-eslint/types": "5.21.0", + "@typescript-eslint/typescript-estree": "5.21.0", + "debug": "^4.3.2" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.21.0.tgz", + "integrity": "sha512-XTX0g0IhvzcH/e3393SvjRCfYQxgxtYzL3UREteUneo72EFlt7UNoiYnikUtmGVobTbhUDByhJ4xRBNe+34kOQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.21.0", + "@typescript-eslint/visitor-keys": "5.21.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.34.0.tgz", + "integrity": "sha512-Pxlno9bjsQ7hs1pdWRUv9aJijGYPYsHpwMeCQ/Inavhym3/XaKt1ZKAA8FIw4odTBfowBdZJDMxf2aavyMDkLg==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "5.34.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/types": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.21.0.tgz", + "integrity": "sha512-XnOOo5Wc2cBlq8Lh5WNvAgHzpjnEzxn4CJBwGkcau7b/tZ556qrWXQz4DJyChYg8JZAD06kczrdgFPpEQZfDsA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.21.0.tgz", + "integrity": "sha512-Y8Y2T2FNvm08qlcoSMoNchh9y2Uj3QmjtwNMdRQkcFG7Muz//wfJBGBxh8R7HAGQFpgYpdHqUpEoPQk+q9Kjfg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.21.0", + "@typescript-eslint/visitor-keys": "5.21.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/utils": { + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.34.0.tgz", + "integrity": "sha512-kWRYybU4Rn++7lm9yu8pbuydRyQsHRoBDIo11k7eqBWTldN4xUdVUMCsHBiE7aoEkFzrUEaZy3iH477vr4xHAQ==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.34.0", + "@typescript-eslint/types": "5.34.0", + "@typescript-eslint/typescript-estree": "5.34.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.34.0.tgz", + "integrity": "sha512-HNvASMQlah5RsBW6L6c7IJ0vsm+8Sope/wu5sEAf7joJYWNb1LDbJipzmdhdUOnfrDFE6LR1j57x1EYVxrY4ow==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.34.0", + "@typescript-eslint/visitor-keys": "5.34.0" + } + }, + "@typescript-eslint/types": { + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.34.0.tgz", + "integrity": "sha512-49fm3xbbUPuzBIOcy2CDpYWqy/X7VBkxVN+DC21e0zIm3+61Z0NZi6J9mqPmSW1BDVk9FIOvuCFyUPjXz93sjA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.34.0.tgz", + "integrity": "sha512-mXHAqapJJDVzxauEkfJI96j3D10sd567LlqroyCeJaHnu42sDbjxotGb3XFtGPYKPD9IyLjhsoULML1oI3M86A==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.34.0", + "@typescript-eslint/visitor-keys": "5.34.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.34.0.tgz", + "integrity": "sha512-O1moYjOSrab0a2fUvFpsJe0QHtvTC+cR+ovYpgKrAVXzqQyc74mv76TgY6z+aEtjQE2vgZux3CQVtGryqdcOAw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.34.0", + "eslint-visitor-keys": "^3.3.0" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "semver": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.21.0.tgz", + "integrity": "sha512-SX8jNN+iHqAF0riZQMkm7e8+POXa/fXw5cxL+gjpyP+FI+JVNhii53EmQgDAfDcBpFekYSlO0fGytMQwRiMQCA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.21.0", + "eslint-visitor-keys": "^3.0.0" + } + }, + "acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "adler-32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==" + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dev": true, + "requires": { + "ansi-wrap": "^0.1.0" + } + }, + "ansi-cyan": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", + "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", + "dev": true, + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "dev": true, + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-red": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", + "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", + "dev": true, + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", + "dev": true + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "devOptional": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", + "dev": true, + "requires": { + "buffer-equal": "^1.0.0" + } + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "requires": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-filter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", + "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", + "dev": true, + "requires": { + "make-iterator": "^1.0.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", + "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", + "dev": true, + "requires": { + "make-iterator": "^1.0.0" + } + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "dev": true + }, + "array-includes": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + } + }, + "array-initial": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", + "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", + "dev": true, + "requires": { + "array-slice": "^1.0.0", + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "array-last": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", + "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "dev": true, + "requires": { + "is-number": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true + }, + "array-sort": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", + "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", + "dev": true, + "requires": { + "default-compare": "^1.0.0", + "get-value": "^2.0.6", + "kind-of": "^5.0.2" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "array.prototype.flat": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", + "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.flatmap": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", + "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + } + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true + }, + "async-done": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", + "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.2", + "process-nextick-args": "^2.0.0", + "stream-exhaust": "^1.0.1" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "async-settle": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", + "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", + "dev": true, + "requires": { + "async-done": "^1.2.2" + } + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "axe-core": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz", + "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==", + "dev": true + }, + "axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "dev": true + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + } + }, + "bach": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", + "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", + "dev": true, + "requires": { + "arr-filter": "^1.1.1", + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "array-each": "^1.0.0", + "array-initial": "^1.0.0", + "array-last": "^1.1.1", + "async-done": "^1.2.2", + "async-settle": "^1.0.0", + "now-and-later": "^2.0.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-arraybuffer": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz", + "integrity": "sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ==", + "optional": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "devOptional": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "devOptional": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz", + "integrity": "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001359", + "electron-to-chromium": "^1.4.172", + "node-releases": "^2.0.5", + "update-browserslist-db": "^1.0.4" + } + }, + "btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==" + }, + "buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", + "dev": true + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001361", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001361.tgz", + "integrity": "sha512-ybhCrjNtkFji1/Wto6SSJKkWk6kZgVQsDq5QI83SafsF6FXv2JB4df9eEdH6g8sdGgqTXrFLjAxqBGgYoU3azQ==" + }, + "canvg": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.9.tgz", + "integrity": "sha512-rDXcnRPuz4QHoCilMeoTxql+fvGqNAxp+qV/KHD8rOiJSAfVjFclbdUNHD2Uqfthr+VMg17bD2bVuk6F07oLGw==", + "optional": true, + "requires": { + "@babel/runtime": "^7.12.5", + "@types/raf": "^3.4.0", + "core-js": "^3.8.3", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.7", + "rgbcolor": "^1.0.1", + "stackblur-canvas": "^2.0.0", + "svg-pathdata": "^6.0.3" + } + }, + "cfb": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.1.tgz", + "integrity": "sha512-wT2ScPAFGSVy7CY+aauMezZBnNrfnaLSrxHUHdea+Td/86vrk6ZquggV+ssBR88zNs0OnBkL2+lf9q0K+zVGzQ==", + "requires": { + "adler-32": "~1.3.0", + "crc-32": "~1.2.0", + "printj": "~1.3.0" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chart.js": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.9.1.tgz", + "integrity": "sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w==" + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "devOptional": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" + }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "dev": true + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "codepage": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==" + }, + "collection-map": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", + "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", + "dev": true, + "requires": { + "arr-map": "^2.0.2", + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "colord": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", + "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", + "dev": true + }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "concat-with-sourcemaps": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", + "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-props": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", + "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", + "dev": true, + "requires": { + "each-props": "^1.3.2", + "is-plain-object": "^5.0.0" + }, + "dependencies": { + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + } + } + }, + "core-js": { + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.20.1.tgz", + "integrity": "sha512-btdpStYFQScnNVQ5slVcr858KP0YWYjV16eGJQw8Gg7CWtu/2qNvIM3qVRIR3n1pK2R9NNOrTevbvAYxajwEjg==", + "optional": true + }, + "core-js-compat": { + "version": "3.23.3", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.3.tgz", + "integrity": "sha512-WSzUs2h2vvmKsacLHNTdpyOC9k43AEhcGoFlVgCY4L7aw98oSBKtPL6vD0/TqZjRWRQYdDSLkzZIni4Crbbiqw==", + "dev": true, + "requires": { + "browserslist": "^4.21.0", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-js-pure": { + "version": "3.18.3", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.18.3.tgz", + "integrity": "sha512-qfskyO/KjtbYn09bn1IPkuhHl5PlJ6IzJ9s9sraJ1EqcuGyLGKzhSM1cY0zgyL9hx42eulQLZ6WaeK5ycJCkqw==", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "crc-32": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.1.tgz", + "integrity": "sha512-Dn/xm/1vFFgs3nfrpEVScHoIslO9NZRITWGz/1E/St6u4xw99vfZzVkW0OSnzx2h9egej9xwMCEut6sqwokM/w==", + "requires": { + "exit-on-epipe": "~1.0.1", + "printj": "~1.3.1" + } + }, + "css-declaration-sorter": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.4.tgz", + "integrity": "sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw==", + "dev": true, + "requires": { + "timsort": "^0.3.0" + } + }, + "css-line-break": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.0.1.tgz", + "integrity": "sha512-gwKYIMUn7xodIcb346wgUhE2Dt5O1Kmrc16PWi8sL4FTfyDj8P5095rzH7+O8CTZudJr+uw2GCI/hwEkDJFI2w==", + "optional": true, + "requires": { + "base64-arraybuffer": "^0.2.0" + } + }, + "css-select": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", + "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^5.1.0", + "domhandler": "^4.3.0", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-what": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "cssnano": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.15.tgz", + "integrity": "sha512-ppZsS7oPpi2sfiyV5+i+NbB/3GtQ+ab2Vs1azrZaXWujUSN4o+WdTxlCZIMcT9yLW3VO/5yX3vpyDaQ1nIn8CQ==", + "dev": true, + "requires": { + "cssnano-preset-default": "^5.1.10", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + } + }, + "cssnano-preset-default": { + "version": "5.1.10", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.10.tgz", + "integrity": "sha512-BcpSzUVygHMOnp9uG5rfPzTOCb0GAHQkqtUQx8j1oMNF9A1Q8hziOOhiM4bdICpmrBIU85BE64RD5XGYsVQZNA==", + "dev": true, + "requires": { + "css-declaration-sorter": "^6.0.3", + "cssnano-utils": "^3.0.0", + "postcss-calc": "^8.2.0", + "postcss-colormin": "^5.2.3", + "postcss-convert-values": "^5.0.2", + "postcss-discard-comments": "^5.0.1", + "postcss-discard-duplicates": "^5.0.1", + "postcss-discard-empty": "^5.0.1", + "postcss-discard-overridden": "^5.0.2", + "postcss-merge-longhand": "^5.0.4", + "postcss-merge-rules": "^5.0.4", + "postcss-minify-font-values": "^5.0.2", + "postcss-minify-gradients": "^5.0.4", + "postcss-minify-params": "^5.0.3", + "postcss-minify-selectors": "^5.1.1", + "postcss-normalize-charset": "^5.0.1", + "postcss-normalize-display-values": "^5.0.2", + "postcss-normalize-positions": "^5.0.2", + "postcss-normalize-repeat-style": "^5.0.2", + "postcss-normalize-string": "^5.0.2", + "postcss-normalize-timing-functions": "^5.0.2", + "postcss-normalize-unicode": "^5.0.2", + "postcss-normalize-url": "^5.0.4", + "postcss-normalize-whitespace": "^5.0.2", + "postcss-ordered-values": "^5.0.3", + "postcss-reduce-initial": "^5.0.2", + "postcss-reduce-transforms": "^5.0.2", + "postcss-svgo": "^5.0.3", + "postcss-unique-selectors": "^5.0.2" + } + }, + "cssnano-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.0.tgz", + "integrity": "sha512-Pzs7/BZ6OgT+tXXuF12DKR8SmSbzUeVYCtMBbS8lI0uAm3mrYmkyqCXXPsQESI6kmLfEVBppbdVY/el3hg3nAA==", + "dev": true, + "requires": {} + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + } + }, + "csstype": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz", + "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==" + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "damerau-levenshtein": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz", + "integrity": "sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "default-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", + "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "dev": true, + "requires": { + "kind-of": "^5.0.2" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "default-resolution": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", + "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=", + "dev": true + }, + "define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "requires": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + }, + "dependencies": { + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + } + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-helpers": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", + "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + }, + "domhandler": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", + "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "dompurify": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.3.4.tgz", + "integrity": "sha512-6BVcgOAVFXjI0JTjEvZy901Rghm+7fDQOrNIcxB4+gdhj6Kwp6T9VBhBY/AbagKHJocRkDYGd6wvI+p4/10xtQ==", + "optional": true + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "each-props": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", + "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.1", + "object.defaults": "^1.1.0" + } + }, + "electron-to-chromium": { + "version": "1.4.176", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.176.tgz", + "integrity": "sha512-92JdgyRlcNDwuy75MjuFSb3clt6DGJ2IXSpg0MCjKd3JV9eSmuUAIyWiGAp/EtT0z2D4rqbYqThQLV90maH3Zw==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.5.tgz", + "integrity": "sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "eslint": { + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz", + "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.3.0", + "@humanwhocodes/config-array": "^0.10.4", + "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.3", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.15.0", + "globby": "^11.1.0", + "grapheme-splitter": "^1.0.4", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "globals": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", + "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "eslint-config-next": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.2.5.tgz", + "integrity": "sha512-SOowilkqPzW6DxKp3a3SYlrfPi5Ajs9MIzp9gVfUDxxH9QFM5ElkR1hX5m/iICJuvCbWgQqFBiA3mCMozluniw==", + "dev": true, + "requires": { + "@next/eslint-plugin-next": "12.2.5", + "@rushstack/eslint-patch": "^1.1.3", + "@typescript-eslint/parser": "^5.21.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^2.7.1", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.29.4", + "eslint-plugin-react-hooks": "^4.5.0" + } + }, + "eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true, + "requires": {} + }, + "eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "eslint-import-resolver-typescript": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", + "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", + "dev": true, + "requires": { + "debug": "^4.3.4", + "glob": "^7.2.0", + "is-glob": "^4.0.3", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "requires": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + } + } + }, + "eslint-module-utils": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", + "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "requires": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + } + } + }, + "eslint-plugin-jsx-a11y": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", + "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", + "dev": true, + "requires": { + "@babel/runtime": "^7.16.3", + "aria-query": "^4.2.2", + "array-includes": "^3.1.4", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.3.5", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.7", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.2.1", + "language-tags": "^1.0.5", + "minimatch": "^3.0.4" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.16.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz", + "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + } + } + }, + "eslint-plugin-react": { + "version": "7.29.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz", + "integrity": "sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ==", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flatmap": "^1.2.5", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.0", + "object.values": "^1.1.5", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.6" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "eslint-plugin-react-hooks": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.5.0.tgz", + "integrity": "sha512-8k1gRt7D7h03kd+SAAlzXkQwWK22BnK6GKZG+FJA6BAGy22CFvl8kCIXKpVux0cCxMWDQUPqSok0LKaZ0aOcCw==", + "dev": true, + "requires": {} + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "espree": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", + "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "eventemitter3": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz", + "integrity": "sha1-teEHm1n7XhuidxwKmTvgYKWMmbo=" + }, + "exit-on-epipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", + "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "ext": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "dev": true, + "requires": { + "type": "^2.5.0" + }, + "dependencies": { + "type": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "dev": true, + "requires": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-diff": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz", + "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==" + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "fflate": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", + "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==" + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "file-saver": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", + "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "devOptional": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "final-form": { + "version": "4.20.7", + "resolved": "https://registry.npmjs.org/final-form/-/final-form-4.20.7.tgz", + "integrity": "sha512-ii3X9wNfyBYFnDPunYN5jh1/HAvtOZ9aJI/TVk0MB86hZuOeYkb+W5L3icgwW9WWNztZR6MDU3En6eoZTUoFPg==", + "requires": { + "@babel/runtime": "^7.10.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + } + }, + "flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "dev": true + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", + "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", + "dev": true + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "formik": { + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/formik/-/formik-2.2.9.tgz", + "integrity": "sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA==", + "requires": { + "deepmerge": "^2.1.1", + "hoist-non-react-statics": "^3.3.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "react-fast-compare": "^2.0.1", + "tiny-warning": "^1.0.2", + "tslib": "^1.10.0" + }, + "dependencies": { + "deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==" + } + } + }, + "frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==" + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } + } + }, + "fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, + "generic-names": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz", + "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==", + "dev": true, + "requires": { + "loader-utils": "^3.2.0" + }, + "dependencies": { + "loader-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", + "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", + "dev": true + } + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "peer": true + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "devOptional": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "dev": true, + "requires": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + }, + "dependencies": { + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-watcher": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", + "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-done": "^1.2.0", + "chokidar": "^2.0.0", + "is-negated-glob": "^1.0.0", + "just-debounce": "^1.0.0", + "normalize-path": "^3.0.0", + "object.defaults": "^1.1.0" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "requires": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + } + }, + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "glogg": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", + "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", + "dev": true, + "requires": { + "sparkles": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, + "gulp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", + "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", + "dev": true, + "requires": { + "glob-watcher": "^5.0.3", + "gulp-cli": "^2.2.0", + "undertaker": "^1.2.1", + "vinyl-fs": "^3.0.0" + } + }, + "gulp-cli": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", + "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", + "dev": true, + "requires": { + "ansi-colors": "^1.0.1", + "archy": "^1.0.0", + "array-sort": "^1.0.0", + "color-support": "^1.1.3", + "concat-stream": "^1.6.0", + "copy-props": "^2.0.1", + "fancy-log": "^1.3.2", + "gulplog": "^1.0.0", + "interpret": "^1.4.0", + "isobject": "^3.0.1", + "liftoff": "^3.1.0", + "matchdep": "^2.0.0", + "mute-stdout": "^1.0.0", + "pretty-hrtime": "^1.0.0", + "replace-homedir": "^1.0.0", + "semver-greatest-satisfied-range": "^1.1.0", + "v8flags": "^3.2.0", + "yargs": "^7.1.0" + } + }, + "gulp-concat": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", + "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", + "dev": true, + "requires": { + "concat-with-sourcemaps": "^1.0.0", + "through2": "^2.0.0", + "vinyl": "^2.0.0" + } + }, + "gulp-flatten": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/gulp-flatten/-/gulp-flatten-0.4.0.tgz", + "integrity": "sha512-eg4spVTAiv1xXmugyaCxWne1oPtNG0UHEtABx5W8ScLiqAYceyYm6GYA36x0Qh8KOIXmAZV97L2aYGnKREG3Sg==", + "dev": true, + "requires": { + "plugin-error": "^0.1.2", + "through2": "^2.0.0" + } + }, + "gulp-rename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-2.0.0.tgz", + "integrity": "sha512-97Vba4KBzbYmR5VBs9mWmK+HwIf5mj+/zioxfZhOKeXtx5ZjBk57KFlePf5nxq9QsTtFl0ejnHE3zTC9MHXqyQ==", + "dev": true + }, + "gulp-uglify": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-3.0.2.tgz", + "integrity": "sha512-gk1dhB74AkV2kzqPMQBLA3jPoIAPd/nlNzP2XMDSG8XZrqnlCiDGAqC+rZOumzFvB5zOphlFh6yr3lgcAb/OOg==", + "dev": true, + "requires": { + "array-each": "^1.0.1", + "extend-shallow": "^3.0.2", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "isobject": "^3.0.1", + "make-error-cause": "^1.1.1", + "safe-buffer": "^5.1.2", + "through2": "^2.0.0", + "uglify-js": "^3.0.5", + "vinyl-sourcemaps-apply": "^0.2.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "gulp-uglifycss": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/gulp-uglifycss/-/gulp-uglifycss-1.1.0.tgz", + "integrity": "sha512-O2VDBPdS16SO3BPSCsHDnsvdCx1B/WgH2qvJaUOD+r1d8v87UjeqEtfmqR2eJ171D0F4shw8/oW5ezA6pqVXEQ==", + "dev": true, + "requires": { + "plugin-error": "^1.0.1", + "through2": "^2.0.3", + "uglifycss": "^0.0.25", + "vinyl": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "plugin-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "dev": true, + "requires": { + "ansi-colors": "^1.0.1", + "arr-diff": "^4.0.0", + "arr-union": "^3.1.0", + "extend-shallow": "^3.0.2" + } + } + } + }, + "gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "dev": true, + "requires": { + "glogg": "^1.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-gulplog": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "dev": true, + "requires": { + "sparkles": "^1.0.0" + } + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "^16.7.0" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + } + } + }, + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "requires": { + "parse-passwd": "^1.0.0" + } + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "html2canvas": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.3.3.tgz", + "integrity": "sha512-nQi0ayEY1cMiUMbq/F5hRwMAqsRMo7NIP6VaCqaXnXO6b/FfZO49oSfIJjdyRha28EuY8D6FBCzQOXPQV0TCrA==", + "optional": true, + "requires": { + "css-line-break": "2.0.1", + "text-segmentation": "^1.0.2" + } + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "requires": {} + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "devOptional": true + }, + "import-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", + "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", + "dev": true, + "requires": { + "import-from": "^3.0.0" + } + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, + "import-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", + "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true + }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "devOptional": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } }, - "sass": { - "optional": true - } - } - }, - "node_modules/next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", - "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", - "dev": true - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "devOptional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/now-and-later": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", - "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", - "dev": true, - "dependencies": { - "once": "^1.3.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", - "dev": true, - "dependencies": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", - "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.hasown": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", - "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", - "dev": true, - "dependencies": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.reduce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", - "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", - "dev": true, - "dependencies": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.1" - } - }, - "node_modules/os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "dependencies": { - "lcid": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-queue/node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/parchment": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/parchment/-/parchment-1.1.4.tgz", - "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", - "dev": true, - "dependencies": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "dependencies": { - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dev": true, - "dependencies": { - "path-root-regex": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-type/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "optional": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "devOptional": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/plugin-error": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", - "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", - "dev": true, - "dependencies": { - "ansi-cyan": "^0.1.1", - "ansi-red": "^0.1.1", - "arr-diff": "^1.0.1", - "arr-union": "^2.0.1", - "extend-shallow": "^1.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/plugin-error/node_modules/arr-diff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", - "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", - "dev": true, - "dependencies": { - "arr-flatten": "^1.0.1", - "array-slice": "^0.2.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/plugin-error/node_modules/arr-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", - "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/plugin-error/node_modules/array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/plugin-error/node_modules/extend-shallow": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", - "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", - "dev": true, - "dependencies": { - "kind-of": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/plugin-error/node_modules/kind-of": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/postcss": { - "version": "8.4.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", - "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", - "dependencies": { - "nanoid": "^3.1.30", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-calc": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.1.tgz", - "integrity": "sha512-FdGs2CYvGTWzDYrm71jydvr48zNStiiRtvxrCscsBLvtVwQ0YZ0gPx2HVFawu0xQuiPLCv66dJo3+/ymhZZLkA==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.3.tgz", - "integrity": "sha512-dra4xoAjub2wha6RUXAgadHEn2lGxbj8drhFcIGLOMn914Eu7DkPUurugDXgstwttCYkJtZ/+PkWRWdp3UHRIA==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.2.tgz", - "integrity": "sha512-KQ04E2yadmfa1LqXm7UIDwW1ftxU/QWZmz6NKnHnUvJ3LEYbbcX6i329f/ig+WnEByHegulocXrECaZGLpL8Zg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", - "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", - "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", - "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.2.tgz", - "integrity": "sha512-+56BLP6NSSUuWUXjRgAQuho1p5xs/hU5Sw7+xt9S3JSg+7R6+WMGnJW7Hre/6tTuZ2xiXMB42ObkiZJ2hy/Pew==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-load-config": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.1.tgz", - "integrity": "sha512-c/9XYboIbSEUZpiD1UQD0IKiUe8n9WHYV7YFe7X7J+ZwCsEKkUJSFWjS9hBU1RR9THR7jMXst8sxiqP0jjo2mg==", - "dev": true, - "dependencies": { - "lilconfig": "^2.0.4", - "yaml": "^1.10.2" - }, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } - } - }, - "node_modules/postcss-merge-longhand": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.4.tgz", - "integrity": "sha512-2lZrOVD+d81aoYkZDpWu6+3dTAAGkCKbV5DoRhnIR7KOULVrI/R7bcMjhrH9KTRy6iiHKqmtG+n/MMj1WmqHFw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.1.0", - "stylehacks": "^5.0.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.4.tgz", - "integrity": "sha512-yOj7bW3NxlQxaERBB0lEY1sH5y+RzevjbdH4DBJurjKERNpknRByFNdNe+V72i5pIZL12woM9uGdS5xbSB+kDQ==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.0.0", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.2.tgz", - "integrity": "sha512-R6MJZryq28Cw0AmnyhXrM7naqJZZLoa1paBltIzh2wM7yb4D45TLur+eubTQ4jCmZU9SGeZdWsc5KcSoqTMeTg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.4.tgz", - "integrity": "sha512-RVwZA7NC4R4J76u8X0Q0j+J7ItKUWAeBUJ8oEEZWmtv3Xoh19uNJaJwzNpsydQjk6PkuhRrK+YwwMf+c+68EYg==", - "dev": true, - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.3.tgz", - "integrity": "sha512-NY92FUikE+wralaiVexFd5gwb7oJTIDhgTNeIw89i1Ymsgt4RWiPXfz3bg7hDy4NL6gepcThJwOYNtZO/eNi7Q==", - "dev": true, - "dependencies": { - "alphanum-sort": "^1.0.2", - "browserslist": "^4.16.6", - "cssnano-utils": "^3.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.1.tgz", - "integrity": "sha512-TOzqOPXt91O2luJInaVPiivh90a2SIK5Nf1Ea7yEIM/5w+XA5BGrZGUSW8aEx9pJ/oNj7ZJBhjvigSiBV+bC1Q==", - "dev": true, - "dependencies": { - "alphanum-sort": "^1.0.2", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-modules": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.3.0.tgz", - "integrity": "sha512-zoUttLDSsbWDinJM9jH37o7hulLRyEgH6fZm2PchxN7AZ8rkdWiALyNhnQ7+jg7cX9f10m6y5VhHsrjO0Mf/DA==", - "dev": true, - "dependencies": { - "generic-names": "^4.0.0", - "icss-replace-symbols": "^1.1.0", - "lodash.camelcase": "^4.3.0", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "string-hash": "^1.1.1" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", - "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.2.tgz", - "integrity": "sha512-RxXoJPUR0shSjkMMzgEZDjGPrgXUVYyWA/YwQRicb48H15OClPuaDR7tYokLAlGZ2tCSENEN5WxjgxSD5m4cUw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.2.tgz", - "integrity": "sha512-tqghWFVDp2btqFg1gYob1etPNxXLNh3uVeWgZE2AQGh6b2F8AK2Gj36v5Vhyh+APwIzNjmt6jwZ9pTBP+/OM8g==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.2.tgz", - "integrity": "sha512-/rIZn8X9bBzC7KvY4iKUhXUGW3MmbXwfPF23jC9wT9xTi7kAvgj8sEgwxjixBmoL6MVa4WOgxNz2hAR6wTK8tw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.2.tgz", - "integrity": "sha512-zaI1yzwL+a/FkIzUWMQoH25YwCYxi917J4pYm1nRXtdgiCdnlTkx5eRzqWEC64HtRa06WCJ9TIutpb6GmW4gFw==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.2.tgz", - "integrity": "sha512-Ao0PP6MoYsRU1LxeVUW740ioknvdIUmfr6uAA3xWlQJ9s69/Tupy8qwhuKG3xWfl+KvLMAP9p2WXF9cwuk/7Bg==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.2.tgz", - "integrity": "sha512-3y/V+vjZ19HNcTizeqwrbZSUsE69ZMRHfiiyLAJb7C7hJtYmM4Gsbajy7gKagu97E8q5rlS9k8FhojA8cpGhWw==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.4.tgz", - "integrity": "sha512-cNj3RzK2pgQQyNp7dzq0dqpUpQ/wYtdDZM3DepPmFjCmYIfceuD9VIAcOdvrNetjIU65g1B4uwdP/Krf6AFdXg==", - "dev": true, - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.2.tgz", - "integrity": "sha512-CXBx+9fVlzSgbk0IXA/dcZn9lXixnQRndnsPC5ht3HxlQ1bVh77KQDL1GffJx1LTzzfae8ftMulsjYmO2yegxA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.3.tgz", - "integrity": "sha512-T9pDS+P9bWeFvqivXd5ACzQmrCmHjv3ZP+djn8E1UZY7iK79pFSm7i3WbKw2VSmFmdbMm8sQ12OPcNpzBo3Z2w==", - "dev": true, - "dependencies": { - "cssnano-utils": "^3.0.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.2.tgz", - "integrity": "sha512-v/kbAAQ+S1V5v9TJvbGkV98V2ERPdU6XvMcKMjqAlYiJ2NtsHGlKYLPjWWcXlaTKNxooId7BGxeraK8qXvzKtw==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.2.tgz", - "integrity": "sha512-25HeDeFsgiPSUx69jJXZn8I06tMxLQJJNF5h7i9gsUg8iP4KOOJ8EX8fj3seeoLt3SLU2YDD6UPnDYVGUO7DEA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz", - "integrity": "sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-svgo": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.3.tgz", - "integrity": "sha512-41XZUA1wNDAZrQ3XgWREL/M2zSw8LJPvb5ZWivljBsUQAGoEKMYm6okHsTjJxKYI4M75RQEH4KYlEM52VwdXVA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.1.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.2.tgz", - "integrity": "sha512-w3zBVlrtZm7loQWRPVC0yjUwwpty7OM6DnEHkxcSQXO1bMS3RJ+JUS5LFMSDZHJcvGsRwhZinCWVqn8Kej4EDA==", - "dev": true, - "dependencies": { - "alphanum-sort": "^1.0.2", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/primeflex": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/primeflex/-/primeflex-3.2.1.tgz", - "integrity": "sha512-sGDJ4mh2fG19xa1yc4IPGSQ8MUMyu5nU+tYnl27AFuFHhX8XwEA7fWCtWyBbclclVhXtre+Kf9WobWPnfxWAEQ==" - }, - "node_modules/primeicons": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-5.0.0.tgz", - "integrity": "sha512-heygWF0X5HFI1otlZE62pp6ye7sZ8om78J9au2BRkg8O7Y8AHTZ9qKMRzchZUHLe8zUAvdi6hZzzm9XxgwIExw==" - }, - "node_modules/printj": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/printj/-/printj-1.3.1.tgz", - "integrity": "sha512-GA3TdL8szPK4AQ2YnOe/b+Y1jUFwmmGMMK/qbY7VcE3Z7FU8JstbKiKRzO6CIiAKPhTO8m01NoQ0V5f3jc4OGg==", - "bin": { - "printj": "bin/printj.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/promise.series": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/promise.series/-/promise.series-0.2.0.tgz", - "integrity": "sha1-LMfr6Vn8OmYZwEq029yeRS2GS70=", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quill": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/quill/-/quill-1.3.7.tgz", - "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==", - "dependencies": { - "clone": "^2.1.1", - "deep-equal": "^1.0.1", - "eventemitter3": "^2.0.3", - "extend": "^3.0.2", - "parchment": "^1.1.4", - "quill-delta": "^3.6.2" - } - }, - "node_modules/quill-delta": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-3.6.3.tgz", - "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==", - "dependencies": { - "deep-equal": "^1.0.1", - "extend": "^3.0.2", - "fast-diff": "1.1.2" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "optional": true, - "dependencies": { - "performance-now": "^2.1.0" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" - } - }, - "node_modules/react-fast-compare": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", - "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" - }, - "node_modules/react-final-form": { - "version": "6.5.9", - "resolved": "https://registry.npmjs.org/react-final-form/-/react-final-form-6.5.9.tgz", - "integrity": "sha512-x3XYvozolECp3nIjly+4QqxdjSSWfcnpGEL5K8OBT6xmGrq5kBqbA6+/tOqoom9NwqIPPbxPNsOViFlbKgowbA==", - "dependencies": { - "@babel/runtime": "^7.15.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/final-form" - }, - "peerDependencies": { - "final-form": "^4.20.4", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-hook-form": { - "version": "7.33.1", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.33.1.tgz", - "integrity": "sha512-ydTfTxEJdvgjCZBj5DDXRc58oTEfnFupEwwTAQ9FSKzykEJkX+3CiAkGtAMiZG7IPWHuzgT6AOBfogiKhUvKgg==", - "engines": { - "node": ">=12.22.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/react-hook-form" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17 || ^18" - } - }, - "node_modules/react-transition-group": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz", - "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==", - "dependencies": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": ">=16.6.0", - "react-dom": ">=16.6.0" - } - }, - "node_modules/read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "dependencies": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "devOptional": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regex-not/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", - "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", - "dev": true - }, - "node_modules/regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", - "dev": true, - "dependencies": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/replace-homedir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", - "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", - "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1", - "is-absolute": "^1.0.0", - "remove-trailing-separator": "^1.1.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", - "dev": true, - "dependencies": { - "value-or-function": "^3.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rgbcolor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", - "integrity": "sha1-1lBezbMEplldom+ktDMHMGd1lF0=", - "optional": true, - "engines": { - "node": ">= 0.8.15" - } - }, - "node_modules/rollup": { - "version": "2.63.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.63.0.tgz", - "integrity": "sha512-nps0idjmD+NXl6OREfyYXMn/dar3WGcyKn+KBzPdaLecub3x/LrId0wUcthcr8oZUAcZAR8NKcfGGFlNgGL1kQ==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup-plugin-postcss": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-postcss/-/rollup-plugin-postcss-4.0.2.tgz", - "integrity": "sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "concat-with-sourcemaps": "^1.1.0", - "cssnano": "^5.0.1", - "import-cwd": "^3.0.0", - "p-queue": "^6.6.2", - "pify": "^5.0.0", - "postcss-load-config": "^3.0.0", - "postcss-modules": "^4.0.0", - "promise.series": "^0.2.0", - "resolve": "^1.19.0", - "rollup-pluginutils": "^2.8.2", - "safe-identifier": "^0.4.2", - "style-inject": "^0.3.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "postcss": "8.x" - } - }, - "node_modules/rollup-plugin-postcss/node_modules/pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0" - } - }, - "node_modules/rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "dependencies": { - "estree-walker": "^0.6.1" - } - }, - "node_modules/rollup-pluginutils/node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/safe-identifier": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", - "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==", - "dev": true - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/sass": { - "version": "1.53.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.53.0.tgz", - "integrity": "sha512-zb/oMirbKhUgRQ0/GFz8TSAwRq2IlR29vOUJZOx0l8sV+CkHUfHa4u5nqrG+1VceZp7Jfj59SVW9ogdhTvJDcQ==", - "devOptional": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/semver-greatest-satisfied-range": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", - "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", - "dev": true, - "dependencies": { - "sver-compat": "^1.5.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", - "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "node_modules/sparkles": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/split-string/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ssf": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", - "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", - "dependencies": { - "frac": "~1.1.2" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/stackblur-canvas": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.5.0.tgz", - "integrity": "sha512-EeNzTVfj+1In7aSLPKDD03F/ly4RxEuF/EX0YcOG0cKoPXs+SLZxDawQbexQDBzwROs4VKLWTOaZQlZkGBFEIQ==", - "optional": true, - "engines": { - "node": ">=0.1.14" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stream-exhaust": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", - "dev": true - }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", - "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=", - "dev": true - }, - "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", - "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.1", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "dependencies": { - "is-utf8": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-inject": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-inject/-/style-inject-0.3.0.tgz", - "integrity": "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==", - "dev": true - }, - "node_modules/styled-jsx": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.2.tgz", - "integrity": "sha512-LqPQrbBh3egD57NBcHET4qcgshPks+yblyhPlH2GY8oaDgKs8SK4C3dBh3oSJjgzJ3G5t1SYEZGHkP+QEpX9EQ==", - "engines": { - "node": ">= 12.0.0" - }, - "peerDependencies": { - "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "dev": true + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "devOptional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "devOptional": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "devOptional": true + }, + "is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "requires": { + "@types/estree": "*" + } }, - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/stylehacks": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", - "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", - "dev": true, - "dependencies": { - "browserslist": "^4.16.0", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sver-compat": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", - "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", - "dev": true, - "dependencies": { - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/svg-pathdata": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", - "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==", - "optional": true, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dev": true, - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/text-segmentation": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.2.tgz", - "integrity": "sha512-uTqvLxdBrVnx/CFQOtnf8tfzSXFm+1Qxau7Xi54j4OPTZokuDOX8qncQzrg2G8ZicAMOM8TgzFAYTb+AqNO4Cw==", - "optional": true, - "dependencies": { - "utrie": "^1.0.1" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/through2-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", - "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", - "dev": true, - "dependencies": { - "through2": "~2.0.0", - "xtend": "~4.0.0" - } - }, - "node_modules/time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", - "dev": true - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "node_modules/to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", - "dev": true, - "dependencies": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "devOptional": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/to-regex/node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", - "dev": true, - "dependencies": { - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "node_modules/typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/uglify-js": { - "version": "3.14.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz", - "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==", - "dev": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/uglifycss": { - "version": "0.0.25", - "resolved": "https://registry.npmjs.org/uglifycss/-/uglifycss-0.0.25.tgz", - "integrity": "sha1-vqcr9JeerO8TowLPR7LRrz80QZc=", - "dev": true, - "bin": { - "uglifycss": "uglifycss" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/undertaker": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", - "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "bach": "^1.0.0", - "collection-map": "^1.0.0", - "es6-weak-map": "^2.0.1", - "fast-levenshtein": "^1.0.0", - "last-run": "^1.1.0", - "object.defaults": "^1.0.0", - "object.reduce": "^1.0.0", - "undertaker-registry": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/undertaker/node_modules/fast-levenshtein": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", - "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=", - "dev": true - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unique-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", - "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", - "dev": true, - "dependencies": { - "json-stable-stringify-without-jsonify": "^1.0.1", - "through2-filter": "^3.0.0" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", - "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/use-sync-external-store": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.1.0.tgz", - "integrity": "sha512-SEnieB2FPKEVne66NpXPd1Np4R1lTNKfjuy3XdIoPQKYBAFdzbzSZlSn1KJZUiihQLQC5Znot4SBz1EOTBwQAQ==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "node_modules/utrie": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.1.tgz", - "integrity": "sha512-JPaDXF3vzgZxfeEwutdGzlrNoVFL5UvZcbO6Qo9D4GoahrieUPoMU8GCpVpR7MQqcKhmShIh8VlbEN3PLM3EBg==", - "optional": true, - "dependencies": { - "base64-arraybuffer": "^1.0.1" - } - }, - "node_modules/utrie/node_modules/base64-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz", - "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==", - "optional": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", - "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", - "dev": true, - "dependencies": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dev": true, - "dependencies": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", - "dev": true, - "dependencies": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-sourcemap/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/vinyl-sourcemaps-apply": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", - "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", - "dev": true, - "dependencies": { - "source-map": "^0.5.1" - } - }, - "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "node_modules/wmf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", - "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/word": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", - "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/xlsx": { - "version": "0.18.5", - "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", - "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", - "dependencies": { - "adler-32": "~1.3.0", - "cfb": "~1.2.1", - "codepage": "~1.15.0", - "crc-32": "~1.2.1", - "ssf": "~0.11.2", - "wmf": "~1.0.1", - "word": "~0.3.0" - }, - "bin": { - "xlsx": "bin/xlsx.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", - "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", - "dev": true, - "dependencies": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.1" - } - }, - "node_modules/yargs-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", - "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", - "dev": true, - "dependencies": { - "camelcase": "^3.0.0", - "object.assign": "^4.1.0" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz", - "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", - "dev": true, - "peer": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.0" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.6.tgz", - "integrity": "sha512-tzulrgDT0QD6U7BJ4TKVk2SDDg7wlP39P9yAx1RfLy7vP/7rsDRlWVfbWxElslu56+r7QOhB2NSDsabYYruoZQ==", - "dev": true - }, - "@babel/core": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.8.tgz", - "integrity": "sha512-OdQDV/7cRBtJHLSOBqqbYNkOcydOgnX59TZx4puf41fzcVtN3e/4yqY8lMQsK+5X2lJtAdmA+6OHqsj1hBJ4IQ==", - "dev": true, - "peer": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.7", - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.8", - "@babel/parser": "^7.17.8", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "peer": true - } - } - }, - "@babel/generator": { - "version": "7.18.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz", - "integrity": "sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==", - "dev": true, - "requires": { - "@babel/types": "^7.18.7", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.6.tgz", - "integrity": "sha512-KT10c1oWEpmrIRYnthbzHgoOf6B+Xd6a5yhdbNtdhtG7aO1or5HViuf1TQR36xY/QprXA5nvxO6nAjhJ4y38jw==", - "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz", - "integrity": "sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.6.tgz", - "integrity": "sha512-YfDzdnoxHGV8CzqHGyCbFvXg5QESPFkXlHtvdCkesLjjVMT2Adxe4FGUR5ChIb3DxSaXO12iIOCWoXdsUVwnqw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-function-name": "^7.18.6", - "@babel/helper-member-expression-to-functions": "^7.18.6", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz", - "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz", - "integrity": "sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==", - "dev": true - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-function-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz", - "integrity": "sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==", - "dev": true, - "requires": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.6.tgz", - "integrity": "sha512-CeHxqwwipekotzPDUuJOfIMtcIHBuc7WAzLmTYWctVigqS5RktNMQ5bEwQSuGewzYnCtTWa3BARXeiLxDTv+Ng==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.6.tgz", - "integrity": "sha512-L//phhB4al5uucwzlimruukHB3jRd5JGClwRMD/ROrVjXfLqovYnvQrK/JK36WYyVwGGO7OD3kMyVTjx+WVPhw==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.6", - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz", - "integrity": "sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg==", - "dev": true - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.6.tgz", - "integrity": "sha512-z5wbmV55TveUPZlCLZvxWHtrjuJd+8inFhk7DG0WW87/oJuGDcjDiu7HIvGcpf5464L6xKCg3vNkmlVVz9hwyQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-wrap-function": "^7.18.6", - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-replace-supers": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.6.tgz", - "integrity": "sha512-fTf7zoXnUGl9gF25fXCWE26t7Tvtyn6H4hkLSYhATwJvw2uYxd3aoXplMSe0g9XbwK7bmxNes7+FGO0rB/xC0g==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-member-expression-to-functions": "^7.18.6", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.18.6", - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.6.tgz", - "integrity": "sha512-4KoLhwGS9vGethZpAhYnMejWkX64wsnHPDwvOsKWU6Fg4+AlK2Jz3TyjQLMEPvz+1zemi/WBdkYxCD0bAfIkiw==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", - "dev": true - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "dev": true - }, - "@babel/helper-wrap-function": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.6.tgz", - "integrity": "sha512-I5/LZfozwMNbwr/b1vhhuYD+J/mU+gfGAj5td7l5Rv9WYmH6i3Om69WGKNmlIpsVW/mF6O5bvTKbvDQZVgjqOw==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.6", - "@babel/types": "^7.18.6" - } - }, - "@babel/helpers": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.8.tgz", - "integrity": "sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==", - "dev": true, - "peer": true, - "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "requires": { + "is-unc-path": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "requires": { + "unc-path-regex": "^0.1.2" + } + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", + "dev": true + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "peer": true + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } + } + }, + "jspdf": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.1.tgz", + "integrity": "sha512-hXObxz7ZqoyhxET78+XR34Xu2qFGrJJ2I2bE5w4SM8eFaFEkW2xcGRVUss360fYelwRSid/jT078kbNvmoW0QA==", + "requires": { + "@babel/runtime": "^7.14.0", + "atob": "^2.1.2", + "btoa": "^1.2.1", + "canvg": "^3.0.6", + "core-js": "^3.6.0", + "dompurify": "^2.2.0", + "fflate": "^0.4.8", + "html2canvas": "^1.0.0-rc.5" + } + }, + "jspdf-autotable": { + "version": "3.5.25", + "resolved": "https://registry.npmjs.org/jspdf-autotable/-/jspdf-autotable-3.5.25.tgz", + "integrity": "sha512-BIbDd/cilRbVm5PmR+ZonolSqRtm0AvZDpTz+rrWed7BnFj5mqF7x7lkxDAMzPudLapktHUk6cxipcvUzal8cg==", + "requires": {} + }, + "jsx-ast-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", + "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", + "dev": true, + "requires": { + "array-includes": "^3.1.3", + "object.assign": "^4.1.2" + } + }, + "just-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", + "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "language-subtag-registry": { + "version": "0.3.21", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", + "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", + "dev": true + }, + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", + "dev": true, + "requires": { + "language-subtag-registry": "~0.3.2" + } + }, + "last-run": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", + "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", + "dev": true, + "requires": { + "default-resolution": "^2.0.0", + "es6-weak-map": "^2.0.1" + } + }, + "lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dev": true, + "requires": { + "readable-stream": "^2.0.5" + } + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "dev": true, + "requires": { + "flush-write-stream": "^1.0.2" + } + }, + "liftoff": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", + "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "dev": true, + "requires": { + "extend": "^3.0.0", + "findup-sync": "^3.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + } + }, + "lilconfig": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", + "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", + "dev": true + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "dependencies": { + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "make-error-cause": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz", + "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=", + "dev": true, + "requires": { + "make-error": "^1.2.0" + } + }, + "make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "matchdep": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", + "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", + "dev": true, + "requires": { + "findup-sync": "^2.0.0", + "micromatch": "^3.0.4", + "resolve": "^1.4.0", + "stack-trace": "0.0.10" + }, + "dependencies": { + "findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dev": true, + "requires": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + } + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "mute-stdout": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", + "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", + "dev": true + }, + "nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "dev": true, + "optional": true + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "next": { + "version": "12.2.5", + "resolved": "https://registry.npmjs.org/next/-/next-12.2.5.tgz", + "integrity": "sha512-tBdjqX5XC/oFs/6gxrZhjmiq90YWizUYU6qOWAfat7zJwrwapJ+BYgX2PmiacunXMaRpeVT4vz5MSPSLgNkrpA==", + "requires": { + "@next/env": "12.2.5", + "@next/swc-android-arm-eabi": "12.2.5", + "@next/swc-android-arm64": "12.2.5", + "@next/swc-darwin-arm64": "12.2.5", + "@next/swc-darwin-x64": "12.2.5", + "@next/swc-freebsd-x64": "12.2.5", + "@next/swc-linux-arm-gnueabihf": "12.2.5", + "@next/swc-linux-arm64-gnu": "12.2.5", + "@next/swc-linux-arm64-musl": "12.2.5", + "@next/swc-linux-x64-gnu": "12.2.5", + "@next/swc-linux-x64-musl": "12.2.5", + "@next/swc-win32-arm64-msvc": "12.2.5", + "@next/swc-win32-ia32-msvc": "12.2.5", + "@next/swc-win32-x64-msvc": "12.2.5", + "@swc/helpers": "0.4.3", + "caniuse-lite": "^1.0.30001332", + "postcss": "8.4.14", + "styled-jsx": "5.0.4", + "use-sync-external-store": "1.2.0" + } + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "node-releases": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", + "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "devOptional": true + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + }, + "now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "dev": true, + "requires": { + "once": "^1.3.2" + } + }, + "nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "dev": true + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "dev": true, + "requires": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.fromentries": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", + "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } + }, + "object.hasown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", + "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", + "dev": true, + "requires": { + "define-properties": "^1.1.4", + "es-abstract": "^1.19.5" + } + }, + "object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "dev": true, + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } + "object.reduce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", + "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", + "dev": true, + "requires": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.6.tgz", - "integrity": "sha512-uQVSa9jJUe/G/304lXspfWVpKpK4euFLgGiMQFOCpM/bgcAdeoHwi/OQz23O9GK2osz26ZiXRRV9aV+Yl1O8tw==", - "dev": true - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.6.tgz", - "integrity": "sha512-Udgu8ZRgrBrttVz6A0EVL0SJ1z+RLbIeqsu632SA1hf0awEppD6TvdznoH+orIF8wtFFAV/Enmw9Y+9oV8TQcw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.6" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz", - "integrity": "sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w==", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.6.tgz", - "integrity": "sha512-zr/QcUlUo7GPo6+X1wC98NJADqmy5QTFWWhqeQWiki4XHafJtLl/YMGkmRB2szDD2IYJCCdBTd4ElwhId9T7Xw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.6.tgz", - "integrity": "sha512-zMo66azZth/0tVd7gmkxOkOjs2rpHyhpcFo565PUP37hSp6hSd9uUKIfTDFMz58BwqgQKhJ9YxtM5XddjXVn+Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.6.tgz", - "integrity": "sha512-9yuM6wr4rIsKa1wlUAbZEazkCrgw2sMPEXCr4Rnwetu7cEW1NydkCWytLuYletbf8vFxdJxFhwEZqMpOx2eZyw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.18.6", - "@babel/helper-compilation-targets": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.18.6" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.6.tgz", - "integrity": "sha512-PatI6elL5eMzoypFAiYDpYQyMtXTn+iMhuxxQt5mAXD4fEmKorpSI3PHd+i3JXBJN3xyA6MvJv7at23HffFHwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dev": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", - "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.6.tgz", - "integrity": "sha512-pRqwb91C42vs1ahSAWJkxOxU1RHWDn16XAa6ggQ72wjLlWyYeAcLvTtE0aM8ph3KNydy9CQF2nLYcjq1WysgxQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.6.tgz", - "integrity": "sha512-XTg8XW/mKpzAF3actL554Jl/dOYoJtv3l8fxaEczpgz84IeeVf+T1u2CSvPHuZbt0w3JkIx4rdn/MRQI7mo0HQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-function-name": "^7.18.6", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.6.tgz", - "integrity": "sha512-9repI4BhNrR0KenoR9vm3/cIc1tSBIo+u1WVjKCAynahj25O8zfbiE6JtAtHPGQSs4yZ+bA8mRasRP+qc+2R5A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.6.tgz", - "integrity": "sha512-tgy3u6lRp17ilY8r1kP4i2+HDUwxlVqq3RTc943eAWSzGgpU1qhiKpqZ5CMyHReIYPHdo3Kg8v8edKtDqSVEyQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.6.tgz", - "integrity": "sha512-NJU26U/208+sxYszf82nmGYqVF9QN8py2HFTblPT9hbawi8+1C5a9JubODLTGFuT0qlkqVinmkwOD13s0sZktg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.6.tgz", - "integrity": "sha512-WAjoMf4wIiSsy88KmG7tgj2nFdEK7E46tArVtcgED7Bkj6Fg/tG5SbvNIOKxbFS2VFgNh6+iaPswBeQZm4ox8w==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.6.tgz", - "integrity": "sha512-kJha/Gbs5RjzIu0CxZwf5e3aTTSlhZnHMT8zPWnJMjNpLOUgqevg+PN5oMH68nMCXnfiMo4Bhgxqj59KHTlAnA==", - "dev": true, - "requires": { - "@babel/helper-compilation-targets": "^7.18.6", - "@babel/helper-function-name": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.6.tgz", - "integrity": "sha512-x3HEw0cJZVDoENXOp20HlypIHfl0zMIhMVZEBVTfmqbObIpsMxMbmU5nOEO8R7LYT+z5RORKPlTI5Hj4OsO9/Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", - "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", - "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.6.tgz", - "integrity": "sha512-UbPYpXxLjTw6w6yXX2BYNxF3p6QY225wcTkfQCy3OMnSlS/C3xGtwUjEzGkldb/sy6PWLiCQ3NbYfjWUTI3t4g==", - "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz", - "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.6.tgz", - "integrity": "sha512-FjdqgMv37yVl/gwvzkcB+wfjRI8HQmc5EgOG9iGNvUY1ok+TjsoaMP7IqCDZBhkFcM5f3OPVMs6Dmp03C5k4/A==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.6.tgz", - "integrity": "sha512-Mz7xMPxoy9kPS/JScj6fJs03TZ/fZ1dJPlMjRAgTaxaS0fUBk8FV/A2rRgfPsVCZqALNwMexD+0Uaf5zlcKPpw==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.18.6" - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "dev": true, - "requires": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.6.tgz", - "integrity": "sha512-8uRHk9ZmRSnWqUgyae249EJZ94b0yAGLBIqzZzl+0iEdbno55Pmlt/32JZsHwXD9k/uZj18Aqqk35wBX4CBTXA==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-polyfill-corejs2": "^0.3.1", - "babel-plugin-polyfill-corejs3": "^0.5.2", - "babel-plugin-polyfill-regenerator": "^0.3.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.6.tgz", - "integrity": "sha512-ayT53rT/ENF8WWexIRg9AiV9h0aIteyWn5ptfZTZQrjk/+f3WdrJGCY4c9wcgl2+MKkKPhzbYp97FTsquZpDCw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.6.tgz", - "integrity": "sha512-UuqlRrQmT2SWRvahW46cGSany0uTlcj8NYOS5sRGYi8FxPYPoLd5DDmMd32ZXEj2Jq+06uGVQKHxa/hJx2EzKw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.6.tgz", - "integrity": "sha512-7m71iS/QhsPk85xSjFPovHPcH3H9qeyzsujhTc+vcdnsXavoWYJ74zx0lP5RhpC5+iDnVLO+PPMHzC11qels1g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz", - "integrity": "sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dev": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/preset-env": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.6.tgz", - "integrity": "sha512-WrthhuIIYKrEFAwttYzgRNQ5hULGmwTj+D6l7Zdfsv5M7IWV/OZbUfbeL++Qrzx1nVJwWROIFhCHRYQV4xbPNw==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.18.6", - "@babel/helper-compilation-targets": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.6", - "@babel/plugin-proposal-async-generator-functions": "^7.18.6", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.6", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.6", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.18.6", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.6", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.18.6", - "@babel/plugin-transform-classes": "^7.18.6", - "@babel/plugin-transform-computed-properties": "^7.18.6", - "@babel/plugin-transform-destructuring": "^7.18.6", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.6", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.6", - "@babel/plugin-transform-function-name": "^7.18.6", - "@babel/plugin-transform-literals": "^7.18.6", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.18.6", - "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/plugin-transform-modules-systemjs": "^7.18.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.18.6", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.18.6", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.6", - "@babel/plugin-transform-typeof-symbol": "^7.18.6", - "@babel/plugin-transform-unicode-escapes": "^7.18.6", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.18.6", - "babel-plugin-polyfill-corejs2": "^0.3.1", - "babel-plugin-polyfill-corejs3": "^0.5.2", - "babel-plugin-polyfill-regenerator": "^0.3.1", - "core-js-compat": "^3.22.1", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - } - }, - "@babel/runtime": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz", - "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/runtime-corejs3": { - "version": "7.15.4", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz", - "integrity": "sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg==", - "dev": true, - "requires": { - "core-js-pure": "^3.16.0", - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", - "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6" - } - }, - "@babel/traverse": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.6.tgz", - "integrity": "sha512-zS/OKyqmD7lslOtFqbscH6gMLFYOfG1YPqCKfAW5KrTeolKqvB8UelR49Fpr6y93kYkW2Ik00mT1LOGiAGvizw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-function-name": "^7.18.6", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.18.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.7.tgz", - "integrity": "sha512-QG3yxTcTIBoAcQmkCs+wAPYZhu7Dk9rXKacINfNbdJDNERTbLQbHGyVG8q/YGMPeCJRIhSY0+fTc5+xuh6WPSQ==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "to-fast-properties": "^2.0.0" - } - }, - "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - } - } - }, - "@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.5.tgz", - "integrity": "sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", - "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@next/env": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/env/-/env-12.2.0.tgz", - "integrity": "sha512-/FCkDpL/8SodJEXvx/DYNlOD5ijTtkozf4PPulYPtkPOJaMPpBSOkzmsta4fnrnbdH6eZjbwbiXFdr6gSQCV4w==" - }, - "@next/eslint-plugin-next": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.2.0.tgz", - "integrity": "sha512-nIj5xV/z3dOfeBnE7qFAjUQZAi4pTlIMuusRM6s/T6lOz8x7mjY5s1ZkTUBmcjPVCb2VIv3CrMH0WZL6xfjZZg==", - "dev": true, - "requires": { - "glob": "7.1.7" - }, - "dependencies": { - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "@next/swc-android-arm-eabi": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-12.2.0.tgz", - "integrity": "sha512-hbneH8DNRB2x0Nf5fPCYoL8a0osvdTCe4pvOc9Rv5CpDsoOlf8BWBs2OWpeP0U2BktGvIsuUhmISmdYYGyrvTw==", - "optional": true - }, - "@next/swc-android-arm64": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-12.2.0.tgz", - "integrity": "sha512-1eEk91JHjczcJomxJ8X0XaUeNcp5Lx1U2Ic7j15ouJ83oRX+3GIslOuabW2oPkSgXbHkThMClhirKpvG98kwZg==", - "optional": true - }, - "@next/swc-darwin-arm64": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-12.2.0.tgz", - "integrity": "sha512-x5U5gJd7ZvrEtTFnBld9O2bUlX8opu7mIQUqRzj7KeWzBwPhrIzTTsQXAiNqsaMuaRPvyHBVW/5d/6g6+89Y8g==", - "optional": true - }, - "@next/swc-darwin-x64": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-12.2.0.tgz", - "integrity": "sha512-iwMNFsrAPjfedjKDv9AXPAV16PWIomP3qw/FfPaxkDVRbUls7BNdofBLzkQmqxqWh93WrawLwaqyXpJuAaiwJA==", - "optional": true - }, - "@next/swc-freebsd-x64": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-12.2.0.tgz", - "integrity": "sha512-gRiAw8g3Akf6niTDLEm1Emfa7jXDjvaAj/crDO8hKASKA4Y1fS4kbi/tyWw5VtoFI4mUzRmCPmZ8eL0tBSG58A==", - "optional": true - }, - "@next/swc-linux-arm-gnueabihf": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-12.2.0.tgz", - "integrity": "sha512-/TJZkxaIpeEwnXh6A40trgwd40C5+LJroLUOEQwMOJdavLl62PjCA6dGl1pgooWLCIb5YdBQ0EG4ylzvLwS2+Q==", - "optional": true - }, - "@next/swc-linux-arm64-gnu": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-12.2.0.tgz", - "integrity": "sha512-++WAB4ElXCSOKG9H8r4ENF8EaV+w0QkrpjehmryFkQXmt5juVXz+nKDVlCRMwJU7A1O0Mie82XyEoOrf6Np1pA==", - "optional": true - }, - "@next/swc-linux-arm64-musl": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-12.2.0.tgz", - "integrity": "sha512-XrqkHi/VglEn5zs2CYK6ofJGQySrd+Lr4YdmfJ7IhsCnMKkQY1ma9Hv5THwhZVof3e+6oFHrQ9bWrw9K4WTjFA==", - "optional": true - }, - "@next/swc-linux-x64-gnu": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-12.2.0.tgz", - "integrity": "sha512-MyhHbAKVjpn065WzRbqpLu2krj4kHLi6RITQdD1ee+uxq9r2yg5Qe02l24NxKW+1/lkmpusl4Y5Lks7rBiJn4w==", - "optional": true - }, - "@next/swc-linux-x64-musl": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-12.2.0.tgz", - "integrity": "sha512-Tz1tJZ5egE0S/UqCd5V6ZPJsdSzv/8aa7FkwFmIJ9neLS8/00za+OY5pq470iZQbPrkTwpKzmfTTIPRVD5iqDg==", - "optional": true - }, - "@next/swc-win32-arm64-msvc": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-12.2.0.tgz", - "integrity": "sha512-0iRO/CPMCdCYUzuH6wXLnsfJX1ykBX4emOOvH0qIgtiZM0nVYbF8lkEyY2ph4XcsurpinS+ziWuYCXVqrOSqiw==", - "optional": true - }, - "@next/swc-win32-ia32-msvc": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-12.2.0.tgz", - "integrity": "sha512-8A26RJVcJHwIKm8xo/qk2ePRquJ6WCI2keV2qOW/Qm+ZXrPXHMIWPYABae/nKN243YFBNyPiHytjX37VrcpUhg==", - "optional": true - }, - "@next/swc-win32-x64-msvc": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.2.0.tgz", - "integrity": "sha512-OI14ozFLThEV3ey6jE47zrzSTV/6eIMsvbwozo+XfdWqOPwQ7X00YkRx4GVMKMC0rM44oGS2gmwMKYpe4EblnA==", - "optional": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@rollup/plugin-alias": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-3.1.9.tgz", - "integrity": "sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==", - "dev": true, - "requires": { - "slash": "^3.0.0" - } - }, - "@rollup/plugin-babel": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz", - "integrity": "sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - } - }, - "@rollup/plugin-commonjs": { - "version": "19.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-19.0.2.tgz", - "integrity": "sha512-gBjarfqlC7qs0AutpRW/hrFNm+cd2/QKxhwyFa+srbg1oX7rDsEU3l+W7LAUhsAp9mPJMAkXDhLbQaVwEaE8bA==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "commondir": "^1.0.1", - "estree-walker": "^2.0.1", - "glob": "^7.1.6", - "is-reference": "^1.2.1", - "magic-string": "^0.25.7", - "resolve": "^1.17.0" - } - }, - "@rollup/plugin-node-resolve": { - "version": "13.1.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.3.tgz", - "integrity": "sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "@types/resolve": "1.17.1", - "builtin-modules": "^3.1.0", - "deepmerge": "^4.2.2", - "is-module": "^1.0.0", - "resolve": "^1.19.0" - } - }, - "@rollup/plugin-replace": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", - "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - } - }, - "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - } - } - }, - "@rushstack/eslint-patch": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.1.3.tgz", - "integrity": "sha512-WiBSI6JBIhC6LRIsB2Kwh8DsGTlbBU+mLRxJmAe3LjHTdkDpwIbEOZgoXBbZilk/vlfjK8i6nKRAvIRn1XaIMw==", - "dev": true - }, - "@swc/helpers": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.2.tgz", - "integrity": "sha512-556Az0VX7WR6UdoTn4htt/l3zPQ7bsQWK+HqdG4swV7beUCxo/BqmvbOpUkTIm/9ih86LIf1qsUnywNL3obGHw==", - "requires": { - "tslib": "^2.4.0" - }, - "dependencies": { - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" - } - } - }, - "@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true - }, - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, - "@types/node": { - "version": "18.6.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.4.tgz", - "integrity": "sha512-I4BD3L+6AWiUobfxZ49DlU43gtI+FTHSv9pE2Zekg6KjMpre4ByusaljW3vYSLJrvQ1ck1hUaeVu8HVlY3vzHg==", - "dev": true - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true - }, - "@types/raf": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@types/raf/-/raf-3.4.0.tgz", - "integrity": "sha512-taW5/WYqo36N7V39oYyHP9Ipfd5pNFvGTIQsNGj86xV88YQ7GnI30/yMfKDF7Zgin0m3e+ikX88FvImnK4RjGw==", - "optional": true - }, - "@types/react": { - "version": "18.0.16", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.16.tgz", - "integrity": "sha512-3vX1dzVucqc2nhXtzyaParTIIRZeNbisRqLE7QdeLomVybEyeiuAouzZXgz71P+2kbJOqj3dy0fzoATg2I06GQ==", - "dev": true, - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-dom": { - "version": "18.0.6", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.6.tgz", - "integrity": "sha512-/5OFZgfIPSwy+YuIBP/FgJnQnsxhZhjjrnxudMddeblOouIodEQ75X14Rr4wGSG/bknL+Omy9iWlLo1u/9GzAA==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/react-transition-group": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.4.5.tgz", - "integrity": "sha512-juKD/eiSM3/xZYzjuzH6ZwpP+/lejltmiS3QEzV/vmb/Q8+HfDmxu+Baga8UEMGBqV88Nbg4l2hY/K2DkyaLLA==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/resolve": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", - "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true - }, - "@typescript-eslint/parser": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.21.0.tgz", - "integrity": "sha512-8RUwTO77hstXUr3pZoWZbRQUxXcSXafZ8/5gpnQCfXvgmP9gpNlRGlWzvfbEQ14TLjmtU8eGnONkff8U2ui2Eg==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "5.21.0", - "@typescript-eslint/types": "5.21.0", - "@typescript-eslint/typescript-estree": "5.21.0", - "debug": "^4.3.2" - } - }, - "@typescript-eslint/scope-manager": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.21.0.tgz", - "integrity": "sha512-XTX0g0IhvzcH/e3393SvjRCfYQxgxtYzL3UREteUneo72EFlt7UNoiYnikUtmGVobTbhUDByhJ4xRBNe+34kOQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.21.0", - "@typescript-eslint/visitor-keys": "5.21.0" - } - }, - "@typescript-eslint/types": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.21.0.tgz", - "integrity": "sha512-XnOOo5Wc2cBlq8Lh5WNvAgHzpjnEzxn4CJBwGkcau7b/tZ556qrWXQz4DJyChYg8JZAD06kczrdgFPpEQZfDsA==", - "dev": true - }, - "@typescript-eslint/typescript-estree": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.21.0.tgz", - "integrity": "sha512-Y8Y2T2FNvm08qlcoSMoNchh9y2Uj3QmjtwNMdRQkcFG7Muz//wfJBGBxh8R7HAGQFpgYpdHqUpEoPQk+q9Kjfg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.21.0", - "@typescript-eslint/visitor-keys": "5.21.0", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@typescript-eslint/visitor-keys": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.21.0.tgz", - "integrity": "sha512-SX8jNN+iHqAF0riZQMkm7e8+POXa/fXw5cxL+gjpyP+FI+JVNhii53EmQgDAfDcBpFekYSlO0fGytMQwRiMQCA==", - "dev": true, - "requires": { - "@typescript-eslint/types": "5.21.0", - "eslint-visitor-keys": "^3.0.0" - } - }, - "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "adler-32": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", - "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==" - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", - "dev": true - }, - "ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, - "requires": { - "ansi-wrap": "^0.1.0" - } - }, - "ansi-cyan": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", - "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", - "dev": true, - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", - "dev": true, - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-red": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", - "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", - "dev": true, - "requires": { - "ansi-wrap": "0.1.0" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "devOptional": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", - "dev": true, - "requires": { - "buffer-equal": "^1.0.0" - } - }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-filter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", - "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", - "dev": true, - "requires": { - "make-iterator": "^1.0.0" - } - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", - "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", - "dev": true, - "requires": { - "make-iterator": "^1.0.0" - } - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", - "dev": true - }, - "array-includes": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.4.tgz", - "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - } - }, - "array-initial": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", - "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", - "dev": true, - "requires": { - "array-slice": "^1.0.0", - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - }, - "array-last": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", - "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", - "dev": true, - "requires": { - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - }, - "array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true - }, - "array-sort": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", - "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", - "dev": true, - "requires": { - "default-compare": "^1.0.0", - "get-value": "^2.0.6", - "kind-of": "^5.0.2" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "array.prototype.flat": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", - "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - } - }, - "array.prototype.flatmap": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", - "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - } - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", - "dev": true - }, - "async-done": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", - "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.2", - "process-nextick-args": "^2.0.0", - "stream-exhaust": "^1.0.1" - } - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, - "async-settle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", - "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", - "dev": true, - "requires": { - "async-done": "^1.2.2" - } - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - }, - "axe-core": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.5.tgz", - "integrity": "sha512-WKTW1+xAzhMS5dJsxWkliixlO/PqC4VhmO9T4juNYcaTg9jzWiJsou6m5pxWYGfigWbwzJWeFY6z47a+4neRXA==", - "dev": true - }, - "axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", - "dev": true - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", - "dev": true, - "requires": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", - "semver": "^6.1.1" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", - "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.21.0" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", - "dev": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.1" - } - }, - "bach": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", - "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", - "dev": true, - "requires": { - "arr-filter": "^1.1.1", - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "array-each": "^1.0.0", - "array-initial": "^1.0.0", - "array-last": "^1.1.1", - "async-done": "^1.2.2", - "async-settle": "^1.0.0", - "now-and-later": "^2.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } + "ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "dev": true, + "requires": { + "lcid": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "dependencies": { + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + } + } + }, + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "parchment": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/parchment/-/parchment-1.1.4.tgz", + "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==" + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "dev": true, + "requires": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true + }, + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true, + "requires": { + "path-root-regex": "^0.1.0" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "optional": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "devOptional": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "plugin-error": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", + "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", + "dev": true, + "requires": { + "ansi-cyan": "^0.1.1", + "ansi-red": "^0.1.1", + "arr-diff": "^1.0.1", + "arr-union": "^2.0.1", + "extend-shallow": "^1.1.2" + }, + "dependencies": { + "arr-diff": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", + "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1", + "array-slice": "^0.2.3" + } + }, + "arr-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", + "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", + "dev": true + }, + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true + }, + "extend-shallow": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", + "dev": true, + "requires": { + "kind-of": "^1.1.0" + } + }, + "kind-of": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", + "dev": true + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } + "postcss": { + "version": "8.4.14", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", + "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } + "postcss-calc": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.1.tgz", + "integrity": "sha512-FdGs2CYvGTWzDYrm71jydvr48zNStiiRtvxrCscsBLvtVwQ0YZ0gPx2HVFawu0xQuiPLCv66dJo3+/ymhZZLkA==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + } }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64-arraybuffer": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.2.0.tgz", - "integrity": "sha512-7emyCsu1/xiBXgQZrscw/8KPRT44I4Yq9Pe6EGs3aPRTsWuggML1/1DTuZUuIaJPIm1FTDUVXl4x/yW8s0kQDQ==", - "optional": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "devOptional": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "devOptional": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz", - "integrity": "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001359", - "electron-to-chromium": "^1.4.172", - "node-releases": "^2.0.5", - "update-browserslist-db": "^1.0.4" - } - }, - "btoa": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", - "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==" - }, - "buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", - "dev": true - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001361", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001361.tgz", - "integrity": "sha512-ybhCrjNtkFji1/Wto6SSJKkWk6kZgVQsDq5QI83SafsF6FXv2JB4df9eEdH6g8sdGgqTXrFLjAxqBGgYoU3azQ==" - }, - "canvg": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/canvg/-/canvg-3.0.9.tgz", - "integrity": "sha512-rDXcnRPuz4QHoCilMeoTxql+fvGqNAxp+qV/KHD8rOiJSAfVjFclbdUNHD2Uqfthr+VMg17bD2bVuk6F07oLGw==", - "optional": true, - "requires": { - "@babel/runtime": "^7.12.5", - "@types/raf": "^3.4.0", - "core-js": "^3.8.3", - "raf": "^3.4.1", - "regenerator-runtime": "^0.13.7", - "rgbcolor": "^1.0.1", - "stackblur-canvas": "^2.0.0", - "svg-pathdata": "^6.0.3" - } - }, - "cfb": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.1.tgz", - "integrity": "sha512-wT2ScPAFGSVy7CY+aauMezZBnNrfnaLSrxHUHdea+Td/86vrk6ZquggV+ssBR88zNs0OnBkL2+lf9q0K+zVGzQ==", - "requires": { - "adler-32": "~1.3.0", - "crc-32": "~1.2.0", - "printj": "~1.3.0" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chart.js": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.8.0.tgz", - "integrity": "sha512-cr8xhrXjLIXVLOBZPkBZVF6NDeiVIrPLHcMhnON7UufudL+CNeRrD+wpYanswlm8NpudMdrt3CHoLMQMxJhHRg==" - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "devOptional": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=" - }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "cloneable-readable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true - }, - "codepage": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", - "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==" - }, - "collection-map": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", - "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", - "dev": true, - "requires": { - "arr-map": "^2.0.2", - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true - }, - "colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", - "dev": true - }, - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "concat-with-sourcemaps": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.1.0.tgz", - "integrity": "sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==", - "dev": true, - "requires": { - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "copy-props": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", - "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", - "dev": true, - "requires": { - "each-props": "^1.3.2", - "is-plain-object": "^5.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - } - } - }, - "core-js": { - "version": "3.20.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.20.1.tgz", - "integrity": "sha512-btdpStYFQScnNVQ5slVcr858KP0YWYjV16eGJQw8Gg7CWtu/2qNvIM3qVRIR3n1pK2R9NNOrTevbvAYxajwEjg==", - "optional": true - }, - "core-js-compat": { - "version": "3.23.3", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.3.tgz", - "integrity": "sha512-WSzUs2h2vvmKsacLHNTdpyOC9k43AEhcGoFlVgCY4L7aw98oSBKtPL6vD0/TqZjRWRQYdDSLkzZIni4Crbbiqw==", - "dev": true, - "requires": { - "browserslist": "^4.21.0", - "semver": "7.0.0" - }, - "dependencies": { - "semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true - } - } - }, - "core-js-pure": { - "version": "3.18.3", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.18.3.tgz", - "integrity": "sha512-qfskyO/KjtbYn09bn1IPkuhHl5PlJ6IzJ9s9sraJ1EqcuGyLGKzhSM1cY0zgyL9hx42eulQLZ6WaeK5ycJCkqw==", - "dev": true - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "crc-32": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.1.tgz", - "integrity": "sha512-Dn/xm/1vFFgs3nfrpEVScHoIslO9NZRITWGz/1E/St6u4xw99vfZzVkW0OSnzx2h9egej9xwMCEut6sqwokM/w==", - "requires": { - "exit-on-epipe": "~1.0.1", - "printj": "~1.3.1" - } - }, - "css-declaration-sorter": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.4.tgz", - "integrity": "sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw==", - "dev": true, - "requires": { - "timsort": "^0.3.0" - } - }, - "css-line-break": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.0.1.tgz", - "integrity": "sha512-gwKYIMUn7xodIcb346wgUhE2Dt5O1Kmrc16PWi8sL4FTfyDj8P5095rzH7+O8CTZudJr+uw2GCI/hwEkDJFI2w==", - "optional": true, - "requires": { - "base64-arraybuffer": "^0.2.0" - } - }, - "css-select": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", - "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", - "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^5.1.0", - "domhandler": "^4.3.0", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - } - }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "css-what": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true - }, - "cssnano": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.15.tgz", - "integrity": "sha512-ppZsS7oPpi2sfiyV5+i+NbB/3GtQ+ab2Vs1azrZaXWujUSN4o+WdTxlCZIMcT9yLW3VO/5yX3vpyDaQ1nIn8CQ==", - "dev": true, - "requires": { - "cssnano-preset-default": "^5.1.10", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - } - }, - "cssnano-preset-default": { - "version": "5.1.10", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.10.tgz", - "integrity": "sha512-BcpSzUVygHMOnp9uG5rfPzTOCb0GAHQkqtUQx8j1oMNF9A1Q8hziOOhiM4bdICpmrBIU85BE64RD5XGYsVQZNA==", - "dev": true, - "requires": { - "css-declaration-sorter": "^6.0.3", - "cssnano-utils": "^3.0.0", - "postcss-calc": "^8.2.0", - "postcss-colormin": "^5.2.3", - "postcss-convert-values": "^5.0.2", - "postcss-discard-comments": "^5.0.1", - "postcss-discard-duplicates": "^5.0.1", - "postcss-discard-empty": "^5.0.1", - "postcss-discard-overridden": "^5.0.2", - "postcss-merge-longhand": "^5.0.4", - "postcss-merge-rules": "^5.0.4", - "postcss-minify-font-values": "^5.0.2", - "postcss-minify-gradients": "^5.0.4", - "postcss-minify-params": "^5.0.3", - "postcss-minify-selectors": "^5.1.1", - "postcss-normalize-charset": "^5.0.1", - "postcss-normalize-display-values": "^5.0.2", - "postcss-normalize-positions": "^5.0.2", - "postcss-normalize-repeat-style": "^5.0.2", - "postcss-normalize-string": "^5.0.2", - "postcss-normalize-timing-functions": "^5.0.2", - "postcss-normalize-unicode": "^5.0.2", - "postcss-normalize-url": "^5.0.4", - "postcss-normalize-whitespace": "^5.0.2", - "postcss-ordered-values": "^5.0.3", - "postcss-reduce-initial": "^5.0.2", - "postcss-reduce-transforms": "^5.0.2", - "postcss-svgo": "^5.0.3", - "postcss-unique-selectors": "^5.0.2" - } - }, - "cssnano-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.0.tgz", - "integrity": "sha512-Pzs7/BZ6OgT+tXXuF12DKR8SmSbzUeVYCtMBbS8lI0uAm3mrYmkyqCXXPsQESI6kmLfEVBppbdVY/el3hg3nAA==", - "dev": true, - "requires": {} - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "requires": { - "css-tree": "^1.1.2" - } - }, - "csstype": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.9.tgz", - "integrity": "sha512-rpw6JPxK6Rfg1zLOYCSwle2GFOOsnjmDYDaBwEcwoOg4qlsIVCN789VkBZDJAGi4T07gI4YSutR43t9Zz4Lzuw==" - }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, - "damerau-levenshtein": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz", - "integrity": "sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw==", - "dev": true - }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true - }, - "default-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", - "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", - "dev": true, - "requires": { - "kind-of": "^5.0.2" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "default-resolution": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", - "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=", - "dev": true - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } + "postcss-colormin": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.3.tgz", + "integrity": "sha512-dra4xoAjub2wha6RUXAgadHEn2lGxbj8drhFcIGLOMn914Eu7DkPUurugDXgstwttCYkJtZ/+PkWRWdp3UHRIA==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + } }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } + "postcss-convert-values": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.2.tgz", + "integrity": "sha512-KQ04E2yadmfa1LqXm7UIDwW1ftxU/QWZmz6NKnHnUvJ3LEYbbcX6i329f/ig+WnEByHegulocXrECaZGLpL8Zg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.1.0" + } }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - }, - "dependencies": { - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - } - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-helpers": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz", - "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==", - "requires": { - "@babel/runtime": "^7.8.7", - "csstype": "^3.0.2" - } - }, - "dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true - }, - "domhandler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", - "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", - "dev": true, - "requires": { - "domelementtype": "^2.2.0" - } - }, - "dompurify": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.3.4.tgz", - "integrity": "sha512-6BVcgOAVFXjI0JTjEvZy901Rghm+7fDQOrNIcxB4+gdhj6Kwp6T9VBhBY/AbagKHJocRkDYGd6wvI+p4/10xtQ==", - "optional": true - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "each-props": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", - "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.1", - "object.defaults": "^1.1.0" - } - }, - "electron-to-chromium": { - "version": "1.4.176", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.176.tgz", - "integrity": "sha512-92JdgyRlcNDwuy75MjuFSb3clt6DGJ2IXSpg0MCjKd3JV9eSmuUAIyWiGAp/EtT0z2D4rqbYqThQLV90maH3Zw==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.5.tgz", - "integrity": "sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - } - }, - "es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "eslint": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.18.0.tgz", - "integrity": "sha512-As1EfFMVk7Xc6/CvhssHUjsAQSkpfXvUGMFC3ce8JDe6WvqCgRrLOBQbVpsBFr1X1V+RACOadnzVvcUS5ni2bA==", - "dev": true, - "requires": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } + "postcss-discard-comments": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", + "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", + "dev": true, + "requires": {} }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true + "postcss-discard-duplicates": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", + "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", + "dev": true, + "requires": {} }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } + "postcss-discard-empty": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", + "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", + "dev": true, + "requires": {} }, - "globals": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz", - "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==", - "dev": true, - "requires": { - "type-fest": "^0.20.2" - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "postcss-discard-overridden": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.2.tgz", + "integrity": "sha512-+56BLP6NSSUuWUXjRgAQuho1p5xs/hU5Sw7+xt9S3JSg+7R6+WMGnJW7Hre/6tTuZ2xiXMB42ObkiZJ2hy/Pew==", + "dev": true, + "requires": {} }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "requires": { - "prelude-ls": "^1.2.1" - } + "postcss-load-config": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.1.tgz", + "integrity": "sha512-c/9XYboIbSEUZpiD1UQD0IKiUe8n9WHYV7YFe7X7J+ZwCsEKkUJSFWjS9hBU1RR9THR7jMXst8sxiqP0jjo2mg==", + "dev": true, + "requires": { + "lilconfig": "^2.0.4", + "yaml": "^1.10.2" + } }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "eslint-config-next": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.2.0.tgz", - "integrity": "sha512-QWzNegadFXjQ0h3hixnLacRM9Kot85vQefyNsA8IeOnERZMz0Gvays1W6DMCjSxJbnCwuWaMXj9DCpar5IahRA==", - "dev": true, - "requires": { - "@next/eslint-plugin-next": "12.2.0", - "@rushstack/eslint-patch": "^1.1.3", - "@typescript-eslint/parser": "^5.21.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-import-resolver-typescript": "^2.7.1", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.29.4", - "eslint-plugin-react-hooks": "^4.5.0" - } - }, - "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } + "postcss-merge-longhand": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.4.tgz", + "integrity": "sha512-2lZrOVD+d81aoYkZDpWu6+3dTAAGkCKbV5DoRhnIR7KOULVrI/R7bcMjhrH9KTRy6iiHKqmtG+n/MMj1WmqHFw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.1.0", + "stylehacks": "^5.0.1" + } }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "eslint-import-resolver-typescript": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz", - "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==", - "dev": true, - "requires": { - "debug": "^4.3.4", - "glob": "^7.2.0", - "is-glob": "^4.0.3", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } + "postcss-merge-rules": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.4.tgz", + "integrity": "sha512-yOj7bW3NxlQxaERBB0lEY1sH5y+RzevjbdH4DBJurjKERNpknRByFNdNe+V72i5pIZL12woM9uGdS5xbSB+kDQ==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.0.0", + "postcss-selector-parser": "^6.0.5" + } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "postcss-minify-font-values": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.2.tgz", + "integrity": "sha512-R6MJZryq28Cw0AmnyhXrM7naqJZZLoa1paBltIzh2wM7yb4D45TLur+eubTQ4jCmZU9SGeZdWsc5KcSoqTMeTg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } }, - "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, - "requires": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - } - } - }, - "eslint-module-utils": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", - "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", - "dev": true, - "requires": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } + "postcss-minify-gradients": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.4.tgz", + "integrity": "sha512-RVwZA7NC4R4J76u8X0Q0j+J7ItKUWAeBUJ8oEEZWmtv3Xoh19uNJaJwzNpsydQjk6PkuhRrK+YwwMf+c+68EYg==", + "dev": true, + "requires": { + "colord": "^2.9.1", + "cssnano-utils": "^3.0.0", + "postcss-value-parser": "^4.2.0" + } }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } + "postcss-minify-params": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.3.tgz", + "integrity": "sha512-NY92FUikE+wralaiVexFd5gwb7oJTIDhgTNeIw89i1Ymsgt4RWiPXfz3bg7hDy4NL6gepcThJwOYNtZO/eNi7Q==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.2", + "browserslist": "^4.16.6", + "cssnano-utils": "^3.0.0", + "postcss-value-parser": "^4.2.0" + } }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - } - } - }, - "eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", - "dev": true, - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } + "postcss-minify-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.1.tgz", + "integrity": "sha512-TOzqOPXt91O2luJInaVPiivh90a2SIK5Nf1Ea7yEIM/5w+XA5BGrZGUSW8aEx9pJ/oNj7ZJBhjvigSiBV+bC1Q==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5" + } }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } + "postcss-modules": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.3.0.tgz", + "integrity": "sha512-zoUttLDSsbWDinJM9jH37o7hulLRyEgH6fZm2PchxN7AZ8rkdWiALyNhnQ7+jg7cX9f10m6y5VhHsrjO0Mf/DA==", + "dev": true, + "requires": { + "generic-names": "^4.0.0", + "icss-replace-symbols": "^1.1.0", + "lodash.camelcase": "^4.3.0", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "string-hash": "^1.1.1" + } }, - "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, - "requires": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - } - } - }, - "eslint-plugin-jsx-a11y": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", - "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", - "dev": true, - "requires": { - "@babel/runtime": "^7.16.3", - "aria-query": "^4.2.2", - "array-includes": "^3.1.4", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.3.5", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.7", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.2.1", - "language-tags": "^1.0.5", - "minimatch": "^3.0.4" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.16.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.16.3.tgz", - "integrity": "sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - } - } - }, - "eslint-plugin-react": { - "version": "7.29.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz", - "integrity": "sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ==", - "dev": true, - "requires": { - "array-includes": "^3.1.4", - "array.prototype.flatmap": "^1.2.5", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.0", - "object.values": "^1.1.5", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.6" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-normalize-charset": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", + "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", + "dev": true, + "requires": {} + }, + "postcss-normalize-display-values": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.2.tgz", + "integrity": "sha512-RxXoJPUR0shSjkMMzgEZDjGPrgXUVYyWA/YwQRicb48H15OClPuaDR7tYokLAlGZ2tCSENEN5WxjgxSD5m4cUw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-positions": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.2.tgz", + "integrity": "sha512-tqghWFVDp2btqFg1gYob1etPNxXLNh3uVeWgZE2AQGh6b2F8AK2Gj36v5Vhyh+APwIzNjmt6jwZ9pTBP+/OM8g==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.2.tgz", + "integrity": "sha512-/rIZn8X9bBzC7KvY4iKUhXUGW3MmbXwfPF23jC9wT9xTi7kAvgj8sEgwxjixBmoL6MVa4WOgxNz2hAR6wTK8tw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-string": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.2.tgz", + "integrity": "sha512-zaI1yzwL+a/FkIzUWMQoH25YwCYxi917J4pYm1nRXtdgiCdnlTkx5eRzqWEC64HtRa06WCJ9TIutpb6GmW4gFw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.2.tgz", + "integrity": "sha512-Ao0PP6MoYsRU1LxeVUW740ioknvdIUmfr6uAA3xWlQJ9s69/Tupy8qwhuKG3xWfl+KvLMAP9p2WXF9cwuk/7Bg==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-unicode": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.2.tgz", + "integrity": "sha512-3y/V+vjZ19HNcTizeqwrbZSUsE69ZMRHfiiyLAJb7C7hJtYmM4Gsbajy7gKagu97E8q5rlS9k8FhojA8cpGhWw==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-url": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.4.tgz", + "integrity": "sha512-cNj3RzK2pgQQyNp7dzq0dqpUpQ/wYtdDZM3DepPmFjCmYIfceuD9VIAcOdvrNetjIU65g1B4uwdP/Krf6AFdXg==", + "dev": true, + "requires": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-normalize-whitespace": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.2.tgz", + "integrity": "sha512-CXBx+9fVlzSgbk0IXA/dcZn9lXixnQRndnsPC5ht3HxlQ1bVh77KQDL1GffJx1LTzzfae8ftMulsjYmO2yegxA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-ordered-values": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.3.tgz", + "integrity": "sha512-T9pDS+P9bWeFvqivXd5ACzQmrCmHjv3ZP+djn8E1UZY7iK79pFSm7i3WbKw2VSmFmdbMm8sQ12OPcNpzBo3Z2w==", + "dev": true, + "requires": { + "cssnano-utils": "^3.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-reduce-initial": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.2.tgz", + "integrity": "sha512-v/kbAAQ+S1V5v9TJvbGkV98V2ERPdU6XvMcKMjqAlYiJ2NtsHGlKYLPjWWcXlaTKNxooId7BGxeraK8qXvzKtw==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.2.tgz", + "integrity": "sha512-25HeDeFsgiPSUx69jJXZn8I06tMxLQJJNF5h7i9gsUg8iP4KOOJ8EX8fj3seeoLt3SLU2YDD6UPnDYVGUO7DEA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.2.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz", + "integrity": "sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.3.tgz", + "integrity": "sha512-41XZUA1wNDAZrQ3XgWREL/M2zSw8LJPvb5ZWivljBsUQAGoEKMYm6okHsTjJxKYI4M75RQEH4KYlEM52VwdXVA==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.1.0", + "svgo": "^2.7.0" + } + }, + "postcss-unique-selectors": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.2.tgz", + "integrity": "sha512-w3zBVlrtZm7loQWRPVC0yjUwwpty7OM6DnEHkxcSQXO1bMS3RJ+JUS5LFMSDZHJcvGsRwhZinCWVqn8Kej4EDA==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.2", + "postcss-selector-parser": "^6.0.5" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true + }, + "primeflex": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/primeflex/-/primeflex-3.2.1.tgz", + "integrity": "sha512-sGDJ4mh2fG19xa1yc4IPGSQ8MUMyu5nU+tYnl27AFuFHhX8XwEA7fWCtWyBbclclVhXtre+Kf9WobWPnfxWAEQ==" + }, + "primeicons": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-5.0.0.tgz", + "integrity": "sha512-heygWF0X5HFI1otlZE62pp6ye7sZ8om78J9au2BRkg8O7Y8AHTZ9qKMRzchZUHLe8zUAvdi6hZzzm9XxgwIExw==" + }, + "printj": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/printj/-/printj-1.3.1.tgz", + "integrity": "sha512-GA3TdL8szPK4AQ2YnOe/b+Y1jUFwmmGMMK/qbY7VcE3Z7FU8JstbKiKRzO6CIiAKPhTO8m01NoQ0V5f3jc4OGg==" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "promise.series": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/promise.series/-/promise.series-0.2.0.tgz", + "integrity": "sha1-LMfr6Vn8OmYZwEq029yeRS2GS70=", + "dev": true + }, + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + }, + "dependencies": { + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + } + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quill": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/quill/-/quill-1.3.7.tgz", + "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==", + "requires": { + "clone": "^2.1.1", + "deep-equal": "^1.0.1", + "eventemitter3": "^2.0.3", + "extend": "^3.0.2", + "parchment": "^1.1.4", + "quill-delta": "^3.6.2" + } + }, + "quill-delta": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-3.6.3.tgz", + "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==", + "requires": { + "deep-equal": "^1.0.1", + "extend": "^3.0.2", + "fast-diff": "1.1.2" + } + }, + "raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "optional": true, + "requires": { + "performance-now": "^2.1.0" + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "react": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", + "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "react-dom": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", + "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "scheduler": "^0.20.2" + } + }, + "react-fast-compare": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", + "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" + }, + "react-final-form": { + "version": "6.5.9", + "resolved": "https://registry.npmjs.org/react-final-form/-/react-final-form-6.5.9.tgz", + "integrity": "sha512-x3XYvozolECp3nIjly+4QqxdjSSWfcnpGEL5K8OBT6xmGrq5kBqbA6+/tOqoom9NwqIPPbxPNsOViFlbKgowbA==", + "requires": { + "@babel/runtime": "^7.15.4" + } + }, + "react-hook-form": { + "version": "7.34.2", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.34.2.tgz", + "integrity": "sha512-1lYWbEqr0GW7HHUjMScXMidGvV0BE2RJV3ap2BL7G0EJirkqpccTaawbsvBO8GZaB3JjCeFBEbnEWI1P8ZoLRQ==", + "requires": {} + }, + "react-transition-group": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", + "integrity": "sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==", + "requires": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "devOptional": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "dev": true, + "requires": { + "regenerate": "^1.4.2" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "regenerator-transform": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "regexpu-core": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", + "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", + "dev": true, + "requires": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + } }, - "resolve": { - "version": "2.0.0-next.3", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", - "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } + "regjsgen": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", + "dev": true }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "eslint-plugin-react-hooks": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.5.0.tgz", - "integrity": "sha512-8k1gRt7D7h03kd+SAAlzXkQwWK22BnK6GKZG+FJA6BAGy22CFvl8kCIXKpVux0cCxMWDQUPqSok0LKaZ0aOcCw==", - "dev": true, - "requires": {} - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } - } - }, - "eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true - }, - "espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", - "dev": true, - "requires": { - "acorn": "^8.7.1", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - } - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "requires": { - "estraverse": "^5.1.0" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true - }, - "eventemitter3": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz", - "integrity": "sha1-teEHm1n7XhuidxwKmTvgYKWMmbo=" - }, - "exit-on-epipe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz", - "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==" - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } + "regjsparser": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true + } + } }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "dev": true, - "requires": { - "type": "^2.5.0" - }, - "dependencies": { - "type": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", - "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", - "dev": true - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } + "remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + } }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } + "remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", + "dev": true, + "requires": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + } }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", - "dev": true, - "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-diff": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz", - "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==" - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "fflate": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.4.8.tgz", - "integrity": "sha512-FJqqoDBR00Mdj9ppamLa/Y7vxm+PRmNWA67N846RvsoYVMKB4q3y/de5PA7gUmRMYK/8CMz2GDZQmCRN1wBcWA==" - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "requires": { - "flat-cache": "^3.0.4" - } - }, - "file-saver": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.5.tgz", - "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "devOptional": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "final-form": { - "version": "4.20.7", - "resolved": "https://registry.npmjs.org/final-form/-/final-form-4.20.7.tgz", - "integrity": "sha512-ii3X9wNfyBYFnDPunYN5jh1/HAvtOZ9aJI/TVk0MB86hZuOeYkb+W5L3icgwW9WWNztZR6MDU3En6eoZTUoFPg==", - "requires": { - "@babel/runtime": "^7.10.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" - } - }, - "flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "dev": true - }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "flatted": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.4.tgz", - "integrity": "sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw==", - "dev": true - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, - "formik": { - "version": "2.2.9", - "resolved": "https://registry.npmjs.org/formik/-/formik-2.2.9.tgz", - "integrity": "sha512-LQLcISMmf1r5at4/gyJigGn0gOwFbeEAlji+N9InZF6LIMXnFNkO42sCI8Jt84YZggpD4cPWObAZaxpEFtSzNA==", - "requires": { - "deepmerge": "^2.1.1", - "hoist-non-react-statics": "^3.3.0", - "lodash": "^4.17.21", - "lodash-es": "^4.17.21", - "react-fast-compare": "^2.0.1", - "tiny-warning": "^1.0.2", - "tslib": "^1.10.0" - }, - "dependencies": { - "deepmerge": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", - "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==" - } - } - }, - "frac": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", - "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "dependencies": { - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - } - } - }, - "fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" - }, - "generic-names": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz", - "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==", - "dev": true, - "requires": { - "loader-utils": "^3.2.0" - }, - "dependencies": { - "loader-utils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", - "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", - "dev": true - } - } - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "peer": true - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "devOptional": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", - "dev": true, - "requires": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" - }, - "dependencies": { - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "glob-watcher": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", - "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-done": "^1.2.0", - "chokidar": "^2.0.0", - "is-negated-glob": "^1.0.0", - "just-debounce": "^1.0.0", - "normalize-path": "^3.0.0", - "object.defaults": "^1.1.0" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "dev": true + }, + "replace-homedir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", + "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1", + "is-absolute": "^1.0.0", + "remove-trailing-separator": "^1.1.0" } - } }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - } + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - } + "resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } + "resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", + "dev": true, + "requires": { + "value-or-function": "^3.0.0" } - } }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } + "rgbcolor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", + "integrity": "sha1-1lBezbMEplldom+ktDMHMGd1lF0=", + "optional": true }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "glogg": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", - "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", - "dev": true, - "requires": { - "sparkles": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" - }, - "gulp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", - "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", - "dev": true, - "requires": { - "glob-watcher": "^5.0.3", - "gulp-cli": "^2.2.0", - "undertaker": "^1.2.1", - "vinyl-fs": "^3.0.0" - } - }, - "gulp-cli": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", - "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "archy": "^1.0.0", - "array-sort": "^1.0.0", - "color-support": "^1.1.3", - "concat-stream": "^1.6.0", - "copy-props": "^2.0.1", - "fancy-log": "^1.3.2", - "gulplog": "^1.0.0", - "interpret": "^1.4.0", - "isobject": "^3.0.1", - "liftoff": "^3.1.0", - "matchdep": "^2.0.0", - "mute-stdout": "^1.0.0", - "pretty-hrtime": "^1.0.0", - "replace-homedir": "^1.0.0", - "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.2.0", - "yargs": "^7.1.0" - } - }, - "gulp-concat": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/gulp-concat/-/gulp-concat-2.6.1.tgz", - "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", - "dev": true, - "requires": { - "concat-with-sourcemaps": "^1.0.0", - "through2": "^2.0.0", - "vinyl": "^2.0.0" - } - }, - "gulp-flatten": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/gulp-flatten/-/gulp-flatten-0.4.0.tgz", - "integrity": "sha512-eg4spVTAiv1xXmugyaCxWne1oPtNG0UHEtABx5W8ScLiqAYceyYm6GYA36x0Qh8KOIXmAZV97L2aYGnKREG3Sg==", - "dev": true, - "requires": { - "plugin-error": "^0.1.2", - "through2": "^2.0.0" - } - }, - "gulp-rename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-2.0.0.tgz", - "integrity": "sha512-97Vba4KBzbYmR5VBs9mWmK+HwIf5mj+/zioxfZhOKeXtx5ZjBk57KFlePf5nxq9QsTtFl0ejnHE3zTC9MHXqyQ==", - "dev": true - }, - "gulp-uglify": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gulp-uglify/-/gulp-uglify-3.0.2.tgz", - "integrity": "sha512-gk1dhB74AkV2kzqPMQBLA3jPoIAPd/nlNzP2XMDSG8XZrqnlCiDGAqC+rZOumzFvB5zOphlFh6yr3lgcAb/OOg==", - "dev": true, - "requires": { - "array-each": "^1.0.1", - "extend-shallow": "^3.0.2", - "gulplog": "^1.0.0", - "has-gulplog": "^0.1.0", - "isobject": "^3.0.1", - "make-error-cause": "^1.1.1", - "safe-buffer": "^5.1.2", - "through2": "^2.0.0", - "uglify-js": "^3.0.5", - "vinyl-sourcemaps-apply": "^0.2.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } + "rollup": { + "version": "2.63.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.63.0.tgz", + "integrity": "sha512-nps0idjmD+NXl6OREfyYXMn/dar3WGcyKn+KBzPdaLecub3x/LrId0wUcthcr8oZUAcZAR8NKcfGGFlNgGL1kQ==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "gulp-uglifycss": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/gulp-uglifycss/-/gulp-uglifycss-1.1.0.tgz", - "integrity": "sha512-O2VDBPdS16SO3BPSCsHDnsvdCx1B/WgH2qvJaUOD+r1d8v87UjeqEtfmqR2eJ171D0F4shw8/oW5ezA6pqVXEQ==", - "dev": true, - "requires": { - "plugin-error": "^1.0.1", - "through2": "^2.0.3", - "uglifycss": "^0.0.25", - "vinyl": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } + "rollup-plugin-postcss": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-postcss/-/rollup-plugin-postcss-4.0.2.tgz", + "integrity": "sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "concat-with-sourcemaps": "^1.1.0", + "cssnano": "^5.0.1", + "import-cwd": "^3.0.0", + "p-queue": "^6.6.2", + "pify": "^5.0.0", + "postcss-load-config": "^3.0.0", + "postcss-modules": "^4.0.0", + "promise.series": "^0.2.0", + "resolve": "^1.19.0", + "rollup-pluginutils": "^2.8.2", + "safe-identifier": "^0.4.2", + "style-inject": "^0.3.0" + }, + "dependencies": { + "pify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true + } + } }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } + "rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + } }, - "plugin-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", - "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "arr-diff": "^4.0.0", - "arr-union": "^3.1.0", - "extend-shallow": "^3.0.2" - } - } - } - }, - "gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", - "dev": true, - "requires": { - "glogg": "^1.0.0" - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-gulplog": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", - "dev": true, - "requires": { - "sparkles": "^1.0.0" - } - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + } } - } }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { - "react-is": "^16.7.0" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "html2canvas": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.3.3.tgz", - "integrity": "sha512-nQi0ayEY1cMiUMbq/F5hRwMAqsRMo7NIP6VaCqaXnXO6b/FfZO49oSfIJjdyRha28EuY8D6FBCzQOXPQV0TCrA==", - "optional": true, - "requires": { - "css-line-break": "2.0.1", - "text-segmentation": "^1.0.2" - } - }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", - "dev": true - }, - "icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", - "devOptional": true - }, - "import-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", - "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", - "dev": true, - "requires": { - "import-from": "^3.0.0" - } - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } - } - }, - "import-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", - "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "devOptional": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true - }, - "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "devOptional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "devOptional": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true - }, - "is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "devOptional": true - }, - "is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "requires": { - "@types/estree": "*" - } - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "requires": { - "is-unc-path": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "requires": { - "unc-path-regex": "^0.1.2" - } - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", - "dev": true - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "dev": true, - "peer": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - }, - "dependencies": { - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" - } - } - }, - "jspdf": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/jspdf/-/jspdf-2.5.1.tgz", - "integrity": "sha512-hXObxz7ZqoyhxET78+XR34Xu2qFGrJJ2I2bE5w4SM8eFaFEkW2xcGRVUss360fYelwRSid/jT078kbNvmoW0QA==", - "requires": { - "@babel/runtime": "^7.14.0", - "atob": "^2.1.2", - "btoa": "^1.2.1", - "canvg": "^3.0.6", - "core-js": "^3.6.0", - "dompurify": "^2.2.0", - "fflate": "^0.4.8", - "html2canvas": "^1.0.0-rc.5" - } - }, - "jspdf-autotable": { - "version": "3.5.25", - "resolved": "https://registry.npmjs.org/jspdf-autotable/-/jspdf-autotable-3.5.25.tgz", - "integrity": "sha512-BIbDd/cilRbVm5PmR+ZonolSqRtm0AvZDpTz+rrWed7BnFj5mqF7x7lkxDAMzPudLapktHUk6cxipcvUzal8cg==", - "requires": {} - }, - "jsx-ast-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", - "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", - "dev": true, - "requires": { - "array-includes": "^3.1.3", - "object.assign": "^4.1.2" - } - }, - "just-debounce": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", - "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", - "dev": true - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "language-subtag-registry": { - "version": "0.3.21", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", - "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==", - "dev": true - }, - "language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", - "dev": true, - "requires": { - "language-subtag-registry": "~0.3.2" - } - }, - "last-run": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", - "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", - "dev": true, - "requires": { - "default-resolution": "^2.0.0", - "es6-weak-map": "^2.0.1" - } - }, - "lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", - "dev": true, - "requires": { - "flush-write-stream": "^1.0.2" - } - }, - "liftoff": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", - "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", - "dev": true, - "requires": { - "extend": "^3.0.0", - "findup-sync": "^3.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" - } - }, - "lilconfig": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", - "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", - "dev": true - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", - "dev": true - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.4" - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "make-error-cause": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/make-error-cause/-/make-error-cause-1.2.2.tgz", - "integrity": "sha1-3wOI/NCzeBbf8KX7gQiTl3fcvJ0=", - "dev": true, - "requires": { - "make-error": "^1.2.0" - } - }, - "make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "matchdep": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", - "dev": true, - "requires": { - "findup-sync": "^2.0.0", - "micromatch": "^3.0.4", - "resolve": "^1.4.0", - "stack-trace": "0.0.10" - }, - "dependencies": { - "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } + "safe-identifier": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", + "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" } - } }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } + "sass": { + "version": "1.53.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.53.0.tgz", + "integrity": "sha512-zb/oMirbKhUgRQ0/GFz8TSAwRq2IlR29vOUJZOx0l8sV+CkHUfHa4u5nqrG+1VceZp7Jfj59SVW9ogdhTvJDcQ==", + "devOptional": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" } - } }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } + "scheduler": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", + "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" } - } }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "semver-greatest-satisfied-range": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", + "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", + "dev": true, + "requires": { + "sver-compat": "^1.5.0" } - } }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "mute-stdout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", - "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", - "dev": true - }, - "nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", - "dev": true, - "optional": true - }, - "nanoid": { - "version": "3.1.31", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.31.tgz", - "integrity": "sha512-ZivnJm0o9bb13p2Ot5CpgC2rQdzB9Uxm/mFZweqm5eMViqOJe3PV6LU2E30SiLgheesmcPrjquqraoolONSA0A==" - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "next": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/next/-/next-12.2.0.tgz", - "integrity": "sha512-B4j7D3SHYopLYx6/Ark0fenwIar9tEaZZFAaxmKjgcMMexhVJzB3jt7X+6wcdXPPMeUD6r09weUtnDpjox/vIA==", - "requires": { - "@next/env": "12.2.0", - "@next/swc-android-arm-eabi": "12.2.0", - "@next/swc-android-arm64": "12.2.0", - "@next/swc-darwin-arm64": "12.2.0", - "@next/swc-darwin-x64": "12.2.0", - "@next/swc-freebsd-x64": "12.2.0", - "@next/swc-linux-arm-gnueabihf": "12.2.0", - "@next/swc-linux-arm64-gnu": "12.2.0", - "@next/swc-linux-arm64-musl": "12.2.0", - "@next/swc-linux-x64-gnu": "12.2.0", - "@next/swc-linux-x64-musl": "12.2.0", - "@next/swc-win32-arm64-msvc": "12.2.0", - "@next/swc-win32-ia32-msvc": "12.2.0", - "@next/swc-win32-x64-msvc": "12.2.0", - "@swc/helpers": "0.4.2", - "caniuse-lite": "^1.0.30001332", - "postcss": "8.4.5", - "styled-jsx": "5.0.2", - "use-sync-external-store": "1.1.0" - } - }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, - "node-releases": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz", - "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "devOptional": true - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true - }, - "now-and-later": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", - "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", - "dev": true, - "requires": { - "once": "^1.3.2" - } - }, - "nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "dev": true - }, - "object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", - "dev": true, - "requires": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "object.fromentries": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", - "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "object.hasown": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", - "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", - "dev": true, - "requires": { - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - } - }, - "object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "object.reduce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", - "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "requires": { - "lcid": "^1.0.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-queue": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", - "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", - "dev": true, - "requires": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" - }, - "dependencies": { - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - } - } - }, - "p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "parchment": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/parchment/-/parchment-1.1.4.tgz", - "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==" - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" - } - }, - "parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dev": true, - "requires": { - "path-root-regex": "^0.1.0" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "dev": true - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "optional": true - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "devOptional": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "plugin-error": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", - "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", - "dev": true, - "requires": { - "ansi-cyan": "^0.1.1", - "ansi-red": "^0.1.1", - "arr-diff": "^1.0.1", - "arr-union": "^2.0.1", - "extend-shallow": "^1.1.2" - }, - "dependencies": { - "arr-diff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", - "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1", - "array-slice": "^0.2.3" - } + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + } }, - "arr-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", - "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", - "dev": true + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", - "dev": true + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true }, - "extend-shallow": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", - "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", - "dev": true, - "requires": { - "kind-of": "^1.1.0" - } + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + } + } }, - "kind-of": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", - "dev": true - } - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "postcss": { - "version": "8.4.5", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", - "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", - "requires": { - "nanoid": "^3.1.30", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.1" - } - }, - "postcss-calc": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.1.tgz", - "integrity": "sha512-FdGs2CYvGTWzDYrm71jydvr48zNStiiRtvxrCscsBLvtVwQ0YZ0gPx2HVFawu0xQuiPLCv66dJo3+/ymhZZLkA==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - } - }, - "postcss-colormin": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.3.tgz", - "integrity": "sha512-dra4xoAjub2wha6RUXAgadHEn2lGxbj8drhFcIGLOMn914Eu7DkPUurugDXgstwttCYkJtZ/+PkWRWdp3UHRIA==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-convert-values": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.2.tgz", - "integrity": "sha512-KQ04E2yadmfa1LqXm7UIDwW1ftxU/QWZmz6NKnHnUvJ3LEYbbcX6i329f/ig+WnEByHegulocXrECaZGLpL8Zg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-discard-comments": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", - "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", - "dev": true, - "requires": {} - }, - "postcss-discard-duplicates": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", - "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", - "dev": true, - "requires": {} - }, - "postcss-discard-empty": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", - "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", - "dev": true, - "requires": {} - }, - "postcss-discard-overridden": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.2.tgz", - "integrity": "sha512-+56BLP6NSSUuWUXjRgAQuho1p5xs/hU5Sw7+xt9S3JSg+7R6+WMGnJW7Hre/6tTuZ2xiXMB42ObkiZJ2hy/Pew==", - "dev": true, - "requires": {} - }, - "postcss-load-config": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.1.tgz", - "integrity": "sha512-c/9XYboIbSEUZpiD1UQD0IKiUe8n9WHYV7YFe7X7J+ZwCsEKkUJSFWjS9hBU1RR9THR7jMXst8sxiqP0jjo2mg==", - "dev": true, - "requires": { - "lilconfig": "^2.0.4", - "yaml": "^1.10.2" - } - }, - "postcss-merge-longhand": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.4.tgz", - "integrity": "sha512-2lZrOVD+d81aoYkZDpWu6+3dTAAGkCKbV5DoRhnIR7KOULVrI/R7bcMjhrH9KTRy6iiHKqmtG+n/MMj1WmqHFw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.1.0", - "stylehacks": "^5.0.1" - } - }, - "postcss-merge-rules": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.4.tgz", - "integrity": "sha512-yOj7bW3NxlQxaERBB0lEY1sH5y+RzevjbdH4DBJurjKERNpknRByFNdNe+V72i5pIZL12woM9uGdS5xbSB+kDQ==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.0.0", - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-minify-font-values": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.2.tgz", - "integrity": "sha512-R6MJZryq28Cw0AmnyhXrM7naqJZZLoa1paBltIzh2wM7yb4D45TLur+eubTQ4jCmZU9SGeZdWsc5KcSoqTMeTg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-gradients": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.4.tgz", - "integrity": "sha512-RVwZA7NC4R4J76u8X0Q0j+J7ItKUWAeBUJ8oEEZWmtv3Xoh19uNJaJwzNpsydQjk6PkuhRrK+YwwMf+c+68EYg==", - "dev": true, - "requires": { - "colord": "^2.9.1", - "cssnano-utils": "^3.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-params": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.3.tgz", - "integrity": "sha512-NY92FUikE+wralaiVexFd5gwb7oJTIDhgTNeIw89i1Ymsgt4RWiPXfz3bg7hDy4NL6gepcThJwOYNtZO/eNi7Q==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.2", - "browserslist": "^4.16.6", - "cssnano-utils": "^3.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-minify-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.1.tgz", - "integrity": "sha512-TOzqOPXt91O2luJInaVPiivh90a2SIK5Nf1Ea7yEIM/5w+XA5BGrZGUSW8aEx9pJ/oNj7ZJBhjvigSiBV+bC1Q==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.2", - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-modules": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.3.0.tgz", - "integrity": "sha512-zoUttLDSsbWDinJM9jH37o7hulLRyEgH6fZm2PchxN7AZ8rkdWiALyNhnQ7+jg7cX9f10m6y5VhHsrjO0Mf/DA==", - "dev": true, - "requires": { - "generic-names": "^4.0.0", - "icss-replace-symbols": "^1.1.0", - "lodash.camelcase": "^4.3.0", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "string-hash": "^1.1.1" - } - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "requires": {} - }, - "postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dev": true, - "requires": { - "icss-utils": "^5.0.0" - } - }, - "postcss-normalize-charset": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", - "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", - "dev": true, - "requires": {} - }, - "postcss-normalize-display-values": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.2.tgz", - "integrity": "sha512-RxXoJPUR0shSjkMMzgEZDjGPrgXUVYyWA/YwQRicb48H15OClPuaDR7tYokLAlGZ2tCSENEN5WxjgxSD5m4cUw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-positions": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.2.tgz", - "integrity": "sha512-tqghWFVDp2btqFg1gYob1etPNxXLNh3uVeWgZE2AQGh6b2F8AK2Gj36v5Vhyh+APwIzNjmt6jwZ9pTBP+/OM8g==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-repeat-style": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.2.tgz", - "integrity": "sha512-/rIZn8X9bBzC7KvY4iKUhXUGW3MmbXwfPF23jC9wT9xTi7kAvgj8sEgwxjixBmoL6MVa4WOgxNz2hAR6wTK8tw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-string": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.2.tgz", - "integrity": "sha512-zaI1yzwL+a/FkIzUWMQoH25YwCYxi917J4pYm1nRXtdgiCdnlTkx5eRzqWEC64HtRa06WCJ9TIutpb6GmW4gFw==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-timing-functions": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.2.tgz", - "integrity": "sha512-Ao0PP6MoYsRU1LxeVUW740ioknvdIUmfr6uAA3xWlQJ9s69/Tupy8qwhuKG3xWfl+KvLMAP9p2WXF9cwuk/7Bg==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-unicode": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.2.tgz", - "integrity": "sha512-3y/V+vjZ19HNcTizeqwrbZSUsE69ZMRHfiiyLAJb7C7hJtYmM4Gsbajy7gKagu97E8q5rlS9k8FhojA8cpGhWw==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-url": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.4.tgz", - "integrity": "sha512-cNj3RzK2pgQQyNp7dzq0dqpUpQ/wYtdDZM3DepPmFjCmYIfceuD9VIAcOdvrNetjIU65g1B4uwdP/Krf6AFdXg==", - "dev": true, - "requires": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-normalize-whitespace": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.2.tgz", - "integrity": "sha512-CXBx+9fVlzSgbk0IXA/dcZn9lXixnQRndnsPC5ht3HxlQ1bVh77KQDL1GffJx1LTzzfae8ftMulsjYmO2yegxA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-ordered-values": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.3.tgz", - "integrity": "sha512-T9pDS+P9bWeFvqivXd5ACzQmrCmHjv3ZP+djn8E1UZY7iK79pFSm7i3WbKw2VSmFmdbMm8sQ12OPcNpzBo3Z2w==", - "dev": true, - "requires": { - "cssnano-utils": "^3.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-reduce-initial": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.2.tgz", - "integrity": "sha512-v/kbAAQ+S1V5v9TJvbGkV98V2ERPdU6XvMcKMjqAlYiJ2NtsHGlKYLPjWWcXlaTKNxooId7BGxeraK8qXvzKtw==", - "dev": true, - "requires": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0" - } - }, - "postcss-reduce-transforms": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.2.tgz", - "integrity": "sha512-25HeDeFsgiPSUx69jJXZn8I06tMxLQJJNF5h7i9gsUg8iP4KOOJ8EX8fj3seeoLt3SLU2YDD6UPnDYVGUO7DEA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.2.0" - } - }, - "postcss-selector-parser": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.8.tgz", - "integrity": "sha512-D5PG53d209Z1Uhcc0qAZ5U3t5HagH3cxu+WLZ22jt3gLUpXM4eXXfiO14jiDWST3NNooX/E8wISfOhZ9eIjGTQ==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "postcss-svgo": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.3.tgz", - "integrity": "sha512-41XZUA1wNDAZrQ3XgWREL/M2zSw8LJPvb5ZWivljBsUQAGoEKMYm6okHsTjJxKYI4M75RQEH4KYlEM52VwdXVA==", - "dev": true, - "requires": { - "postcss-value-parser": "^4.1.0", - "svgo": "^2.7.0" - } - }, - "postcss-unique-selectors": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.2.tgz", - "integrity": "sha512-w3zBVlrtZm7loQWRPVC0yjUwwpty7OM6DnEHkxcSQXO1bMS3RJ+JUS5LFMSDZHJcvGsRwhZinCWVqn8Kej4EDA==", - "dev": true, - "requires": { - "alphanum-sort": "^1.0.2", - "postcss-selector-parser": "^6.0.5" - } - }, - "postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true - }, - "primeflex": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/primeflex/-/primeflex-3.2.1.tgz", - "integrity": "sha512-sGDJ4mh2fG19xa1yc4IPGSQ8MUMyu5nU+tYnl27AFuFHhX8XwEA7fWCtWyBbclclVhXtre+Kf9WobWPnfxWAEQ==" - }, - "primeicons": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-5.0.0.tgz", - "integrity": "sha512-heygWF0X5HFI1otlZE62pp6ye7sZ8om78J9au2BRkg8O7Y8AHTZ9qKMRzchZUHLe8zUAvdi6hZzzm9XxgwIExw==" - }, - "printj": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/printj/-/printj-1.3.1.tgz", - "integrity": "sha512-GA3TdL8szPK4AQ2YnOe/b+Y1jUFwmmGMMK/qbY7VcE3Z7FU8JstbKiKRzO6CIiAKPhTO8m01NoQ0V5f3jc4OGg==" - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "promise.series": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/promise.series/-/promise.series-0.2.0.tgz", - "integrity": "sha1-LMfr6Vn8OmYZwEq029yeRS2GS70=", - "dev": true - }, - "prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - }, - "dependencies": { - "react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - } - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "quill": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/quill/-/quill-1.3.7.tgz", - "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==", - "requires": { - "clone": "^2.1.1", - "deep-equal": "^1.0.1", - "eventemitter3": "^2.0.3", - "extend": "^3.0.2", - "parchment": "^1.1.4", - "quill-delta": "^3.6.2" - } - }, - "quill-delta": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-3.6.3.tgz", - "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==", - "requires": { - "deep-equal": "^1.0.1", - "extend": "^3.0.2", - "fast-diff": "1.1.2" - } - }, - "raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "optional": true, - "requires": { - "performance-now": "^2.1.0" - } - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - } - }, - "react-fast-compare": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-2.0.4.tgz", - "integrity": "sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw==" - }, - "react-final-form": { - "version": "6.5.9", - "resolved": "https://registry.npmjs.org/react-final-form/-/react-final-form-6.5.9.tgz", - "integrity": "sha512-x3XYvozolECp3nIjly+4QqxdjSSWfcnpGEL5K8OBT6xmGrq5kBqbA6+/tOqoom9NwqIPPbxPNsOViFlbKgowbA==", - "requires": { - "@babel/runtime": "^7.15.4" - } - }, - "react-hook-form": { - "version": "7.33.1", - "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.33.1.tgz", - "integrity": "sha512-ydTfTxEJdvgjCZBj5DDXRc58oTEfnFupEwwTAQ9FSKzykEJkX+3CiAkGtAMiZG7IPWHuzgT6AOBfogiKhUvKgg==", - "requires": {} - }, - "react-transition-group": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz", - "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==", - "requires": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "devOptional": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", - "dev": true, - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, - "regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "source-map-support": { + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "sparkles": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "ssf": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", + "requires": { + "frac": "~1.1.2" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "dev": true + }, + "stackblur-canvas": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.5.0.tgz", + "integrity": "sha512-EeNzTVfj+1In7aSLPKDD03F/ly4RxEuF/EX0YcOG0cKoPXs+SLZxDawQbexQDBzwROs4VKLWTOaZQlZkGBFEIQ==", + "optional": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "stream-exhaust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", + "dev": true + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string.prototype.matchall": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", + "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.1", + "side-channel": "^1.0.4" + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "style-inject": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-inject/-/style-inject-0.3.0.tgz", + "integrity": "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==", + "dev": true + }, + "styled-jsx": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.4.tgz", + "integrity": "sha512-sDFWLbg4zR+UkNzfk5lPilyIgtpddfxXEULxhujorr5jtePTUqiPDc5BC0v1NRqTr/WaFBGQQUoYToGlF4B2KQ==", + "requires": {} + }, + "stylehacks": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", + "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", + "dev": true, + "requires": { + "browserslist": "^4.16.0", + "postcss-selector-parser": "^6.0.4" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "sver-compat": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", + "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", + "dev": true, + "requires": { + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, + "svg-pathdata": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", + "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==", + "optional": true + }, + "svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + } + }, + "terser": { + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", + "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, + "text-segmentation": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.2.tgz", + "integrity": "sha512-uTqvLxdBrVnx/CFQOtnf8tfzSXFm+1Qxau7Xi54j4OPTZokuDOX8qncQzrg2G8ZicAMOM8TgzFAYTb+AqNO4Cw==", + "optional": true, + "requires": { + "utrie": "^1.0.1" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "dev": true, + "requires": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "dev": true + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", + "dev": true, + "requires": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "devOptional": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", + "dev": true, + "requires": { + "through2": "^2.0.3" + } }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true - }, - "regexpu-core": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", - "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", - "dev": true, - "requires": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - } - }, - "regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", - "dev": true - }, - "regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true - } - } - }, - "remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" - } - }, - "remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", - "dev": true, - "requires": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", - "dev": true - }, - "replace-homedir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", - "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1", - "is-absolute": "^1.0.0", - "remove-trailing-separator": "^1.1.0" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", - "dev": true, - "requires": { - "value-or-function": "^3.0.0" - } - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rgbcolor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgbcolor/-/rgbcolor-1.0.1.tgz", - "integrity": "sha1-1lBezbMEplldom+ktDMHMGd1lF0=", - "optional": true - }, - "rollup": { - "version": "2.63.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.63.0.tgz", - "integrity": "sha512-nps0idjmD+NXl6OREfyYXMn/dar3WGcyKn+KBzPdaLecub3x/LrId0wUcthcr8oZUAcZAR8NKcfGGFlNgGL1kQ==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" - } - }, - "rollup-plugin-postcss": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-postcss/-/rollup-plugin-postcss-4.0.2.tgz", - "integrity": "sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "concat-with-sourcemaps": "^1.1.0", - "cssnano": "^5.0.1", - "import-cwd": "^3.0.0", - "p-queue": "^6.6.2", - "pify": "^5.0.0", - "postcss-load-config": "^3.0.0", - "postcss-modules": "^4.0.0", - "promise.series": "^0.2.0", - "resolve": "^1.19.0", - "rollup-pluginutils": "^2.8.2", - "safe-identifier": "^0.4.2", - "style-inject": "^0.3.0" - }, - "dependencies": { - "pify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", - "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", - "dev": true - } - } - }, - "rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - } - }, - "rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "requires": { - "estree-walker": "^0.6.1" - }, - "dependencies": { - "estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - } - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-identifier": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/safe-identifier/-/safe-identifier-0.4.2.tgz", - "integrity": "sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "sass": { - "version": "1.53.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.53.0.tgz", - "integrity": "sha512-zb/oMirbKhUgRQ0/GFz8TSAwRq2IlR29vOUJZOx0l8sV+CkHUfHa4u5nqrG+1VceZp7Jfj59SVW9ogdhTvJDcQ==", - "devOptional": true, - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - } - }, - "scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "semver-greatest-satisfied-range": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", - "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", - "dev": true, - "requires": { - "sver-compat": "^1.5.0" - } - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - } - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } + "tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.1.tgz", - "integrity": "sha512-4+TN2b3tqOCd/kaGRJ/sTYA0tR0mdXx26ipdolxcwtJVqEnqNYvlCAt1q3ypy4QMlYus+Zh34RNtYLoq2oQ4IA==" - }, - "source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "sparkles": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", - "dev": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "ssf": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", - "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", - "requires": { - "frac": "~1.1.2" - } - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", - "dev": true - }, - "stackblur-canvas": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/stackblur-canvas/-/stackblur-canvas-2.5.0.tgz", - "integrity": "sha512-EeNzTVfj+1In7aSLPKDD03F/ly4RxEuF/EX0YcOG0cKoPXs+SLZxDawQbexQDBzwROs4VKLWTOaZQlZkGBFEIQ==", - "optional": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "stream-exhaust": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", - "dev": true - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", - "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string.prototype.matchall": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", - "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.1", - "side-channel": "^1.0.4" - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - } - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "style-inject": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-inject/-/style-inject-0.3.0.tgz", - "integrity": "sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==", - "dev": true - }, - "styled-jsx": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.0.2.tgz", - "integrity": "sha512-LqPQrbBh3egD57NBcHET4qcgshPks+yblyhPlH2GY8oaDgKs8SK4C3dBh3oSJjgzJ3G5t1SYEZGHkP+QEpX9EQ==", - "requires": {} - }, - "stylehacks": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", - "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", - "dev": true, - "requires": { - "browserslist": "^4.16.0", - "postcss-selector-parser": "^6.0.4" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "sver-compat": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", - "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", - "dev": true, - "requires": { - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" - } - }, - "svg-pathdata": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/svg-pathdata/-/svg-pathdata-6.0.3.tgz", - "integrity": "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw==", - "optional": true - }, - "svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dev": true, - "requires": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - } - }, - "terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - } - } - }, - "text-segmentation": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.2.tgz", - "integrity": "sha512-uTqvLxdBrVnx/CFQOtnf8tfzSXFm+1Qxau7Xi54j4OPTZokuDOX8qncQzrg2G8ZicAMOM8TgzFAYTb+AqNO4Cw==", - "optional": true, - "requires": { - "utrie": "^1.0.1" - } - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "through2-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", - "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", - "dev": true, - "requires": { - "through2": "~2.0.0", - "xtend": "~4.0.0" - } - }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true - }, - "timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", - "dev": true - }, - "tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" - } - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "devOptional": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", - "dev": true, - "requires": { - "through2": "^2.0.3" - } - }, - "tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "dev": true, - "requires": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } + "typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true - }, - "uglify-js": { - "version": "3.14.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz", - "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==", - "dev": true - }, - "uglifycss": { - "version": "0.0.25", - "resolved": "https://registry.npmjs.org/uglifycss/-/uglifycss-0.0.25.tgz", - "integrity": "sha1-vqcr9JeerO8TowLPR7LRrz80QZc=", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true - }, - "undertaker": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", - "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "bach": "^1.0.0", - "collection-map": "^1.0.0", - "es6-weak-map": "^2.0.1", - "fast-levenshtein": "^1.0.0", - "last-run": "^1.1.0", - "object.defaults": "^1.0.0", - "object.reduce": "^1.0.0", - "undertaker-registry": "^1.0.0" - }, - "dependencies": { - "fast-levenshtein": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", - "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=", - "dev": true - } - } - }, - "undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", - "dev": true - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "dev": true - }, - "unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unique-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", - "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", - "dev": true, - "requires": { - "json-stable-stringify-without-jsonify": "^1.0.1", - "through2-filter": "^3.0.0" - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } + "uglify-js": { + "version": "3.14.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz", + "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==", + "dev": true + }, + "uglifycss": { + "version": "0.0.25", + "resolved": "https://registry.npmjs.org/uglifycss/-/uglifycss-0.0.25.tgz", + "integrity": "sha1-vqcr9JeerO8TowLPR7LRrz80QZc=", + "dev": true + }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" } - } }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true - }, - "update-browserslist-db": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", - "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", - "dev": true, - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "use-sync-external-store": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.1.0.tgz", - "integrity": "sha512-SEnieB2FPKEVne66NpXPd1Np4R1lTNKfjuy3XdIoPQKYBAFdzbzSZlSn1KJZUiihQLQC5Znot4SBz1EOTBwQAQ==", - "requires": {} - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "utrie": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.1.tgz", - "integrity": "sha512-JPaDXF3vzgZxfeEwutdGzlrNoVFL5UvZcbO6Qo9D4GoahrieUPoMU8GCpVpR7MQqcKhmShIh8VlbEN3PLM3EBg==", - "optional": true, - "requires": { - "base64-arraybuffer": "^1.0.1" - }, - "dependencies": { - "base64-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz", - "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==", - "optional": true - } - } - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", - "dev": true - }, - "vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - }, - "vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dev": true, - "requires": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - } - }, - "vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", - "dev": true, - "requires": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true + }, + "undertaker": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", + "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "bach": "^1.0.0", + "collection-map": "^1.0.0", + "es6-weak-map": "^2.0.1", + "fast-levenshtein": "^1.0.0", + "last-run": "^1.1.0", + "object.defaults": "^1.0.0", + "object.reduce": "^1.0.0", + "undertaker-registry": "^1.0.0" + }, + "dependencies": { + "fast-levenshtein": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", + "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=", + "dev": true + } + } + }, + "undertaker-registry": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", + "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", + "dev": true + }, + "unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unique-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "dev": true, + "requires": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" + } + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", + "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "requires": {} + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utrie": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.1.tgz", + "integrity": "sha512-JPaDXF3vzgZxfeEwutdGzlrNoVFL5UvZcbO6Qo9D4GoahrieUPoMU8GCpVpR7MQqcKhmShIh8VlbEN3PLM3EBg==", + "optional": true, + "requires": { + "base64-arraybuffer": "^1.0.1" + }, + "dependencies": { + "base64-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.1.tgz", + "integrity": "sha512-vFIUq7FdLtjZMhATwDul5RZWv2jpXQ09Pd6jcVEOvIsqCWTRFD/ONHNfyOS8dA/Ippi5dsIgpyKWKZaAKZltbA==", + "optional": true + } + } + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "dev": true, + "requires": { + "homedir-polyfill": "^1.0.1" + } + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", + "dev": true + }, + "vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "dev": true, + "requires": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + } + }, + "vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "dev": true, + "requires": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + } + }, + "vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", + "dev": true, + "requires": { + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "vinyl-sourcemaps-apply": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", + "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", + "dev": true, + "requires": { + "source-map": "^0.5.1" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "dev": true + }, + "wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==" + }, + "word": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==" + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xlsx": { + "version": "0.18.5", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", + "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", + "requires": { + "adler-32": "~1.3.0", + "cfb": "~1.2.1", + "codepage": "~1.15.0", + "crc-32": "~1.2.1", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.3.0" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yargs": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", + "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.1" + } + }, + "yargs-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" + } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } - } - }, - "vinyl-sourcemaps-apply": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", - "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", - "dev": true, - "requires": { - "source-map": "^0.5.1" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "wmf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", - "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==" - }, - "word": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", - "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==" - }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "xlsx": { - "version": "0.18.5", - "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", - "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", - "requires": { - "adler-32": "~1.3.0", - "cfb": "~1.2.1", - "codepage": "~1.15.0", - "crc-32": "~1.2.1", - "ssf": "~0.11.2", - "wmf": "~1.0.1", - "word": "~0.3.0" - } - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true - }, - "yargs": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", - "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.1" - } - }, - "yargs-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", - "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "object.assign": "^4.1.0" - } } - } } diff --git a/package.json b/package.json index bbf64a2d5c..809a0ee747 100644 --- a/package.json +++ b/package.json @@ -1,64 +1,68 @@ { - "name": "primereact", - "private": false, - "version": "8.5.0-SNAPSHOT", - "scripts": { - "dev": "next dev", - "build": "next build && next export", - "build-lib": "NODE_ENV=production INPUT_DIR=components/lib/ OUTPUT_DIR=dist/ npm run build-package", - "build-package": "rollup -c && gulp build-resources && npm run build-api", - "build-api": "node ./api-generator/build-api.js", - "security-check": "npm audit --production --audit-level high", - "start": "next start", - "lint": "next lint --max-warnings=0", - "type-check": "tsc" - }, - "dependencies": { - "chart.js": "3.8.0", - "file-saver": "2.0.5", - "final-form": "^4.20.7", - "formik": "^2.2.6", - "fs-extra": "^10.1.0", - "jspdf": "2.5.1", - "jspdf-autotable": "3.5.25", - "next": "12.2.0", - "primeflex": "^3.2.1", - "primeicons": "^5.0.0", - "quill": "1.3.7", - "react": "17.0.2", - "react-dom": "17.0.2", - "react-final-form": "^6.5.9", - "react-hook-form": "^7.33.1", - "react-transition-group": "^4.4.1", - "xlsx": "0.18.5" - }, - "devDependencies": { - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-transform-runtime": "^7.18.6", - "@babel/preset-env": "^7.18.6", - "@babel/preset-react": "^7.18.6", - "@rollup/plugin-alias": "^3.1.2", - "@rollup/plugin-babel": "^5.3.0", - "@rollup/plugin-commonjs": "^19.0.0", - "@rollup/plugin-node-resolve": "^13.0.0", - "@rollup/plugin-replace": "^2.4.2", - "@types/node": "^18.6.4", - "@types/react": "^18.0.16", - "@types/react-dom": "^18.0.6", - "@types/react-transition-group": "^4.4.5", - "@typescript-eslint/parser": "^5.21.0", - "eslint": "8.18.0", - "eslint-config-next": "12.2.0", - "gulp": "^4.0.2", - "gulp-concat": "^2.6.1", - "gulp-flatten": "^0.4.0", - "gulp-rename": "^2.0.0", - "gulp-uglify": "^3.0.2", - "gulp-uglifycss": "^1.1.0", - "rollup": "^2.52.1", - "rollup-plugin-postcss": "^4.0.0", - "rollup-plugin-terser": "^7.0.2", - "sass": "^1.53.0", - "typescript": "^4.7.4" - } -} + "name": "primereact", + "private": false, + "version": "8.4.0", + "scripts": { + "dev": "next dev", + "build": "next build && next export", + "build-lib": "NODE_ENV=production INPUT_DIR=components/lib/ OUTPUT_DIR=dist/ npm run build-package", + "build-package": "rollup -c && gulp build-resources && npm run build-api", + "build-api": "node ./api-generator/build-api.js", + "security-check": "npm audit --production --audit-level high", + "format-check": "prettier --check \"{components,pages,service}/**/*.{js,ts,tsx}\"", + "format": "prettier --write \"{components,pages,service}/**/*.{js,ts,tsx}\"", + "start": "next start", + "lint": "next lint --max-warnings=0", + "type-check": "tsc" + }, + "dependencies": { + "chart.js": "3.9.1", + "file-saver": "2.0.5", + "final-form": "^4.20.7", + "formik": "^2.2.6", + "fs-extra": "^10.1.0", + "jspdf": "2.5.1", + "jspdf-autotable": "3.5.25", + "next": "12.2.5", + "primeflex": "^3.2.1", + "primeicons": "^5.0.0", + "quill": "1.3.7", + "react": "17.0.2", + "react-dom": "17.0.2", + "react-final-form": "^6.5.9", + "react-hook-form": "^7.34.2", + "react-transition-group": "^4.4.5", + "xlsx": "0.18.5" + }, + "devDependencies": { + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-transform-runtime": "^7.18.6", + "@babel/preset-env": "^7.18.6", + "@babel/preset-react": "^7.18.6", + "@rollup/plugin-alias": "^3.1.2", + "@rollup/plugin-babel": "^5.3.0", + "@rollup/plugin-commonjs": "^19.0.0", + "@rollup/plugin-node-resolve": "^13.0.0", + "@rollup/plugin-replace": "^2.4.2", + "@types/node": "^18.6.4", + "@types/react": "^18.0.16", + "@types/react-dom": "^18.0.6", + "@types/react-transition-group": "^4.4.5", + "@typescript-eslint/eslint-plugin": "^5.31.0", + "eslint": "8.22.0", + "eslint-config-next": "12.2.5", + "eslint-config-prettier": "^8.5.0", + "gulp": "^4.0.2", + "gulp-concat": "^2.6.1", + "gulp-flatten": "^0.4.0", + "gulp-rename": "^2.0.0", + "gulp-uglify": "^3.0.2", + "gulp-uglifycss": "^1.1.0", + "prettier": "2.7.1", + "rollup": "^2.52.1", + "rollup-plugin-postcss": "^4.0.0", + "rollup-plugin-terser": "^7.0.2", + "sass": "^1.53.0", + "typescript": "^4.7.4" + } +} \ No newline at end of file diff --git a/pages/_app.js b/pages/_app.js index c6011c9985..db7c0e7fbf 100644 --- a/pages/_app.js +++ b/pages/_app.js @@ -16,7 +16,7 @@ export default function MyApp({ Component }) { useEffect(() => { if (process.env.NODE_ENV === 'production') { - fetchNews().then(data => { + fetchNews().then((data) => { if (data) { announcement.current = data; @@ -26,8 +26,7 @@ export default function MyApp({ Component }) { if (item.hiddenNews && item.hiddenNews !== data.id) { setNewsActive(true); } - } - else { + } else { setNewsActive(true); } } @@ -52,7 +51,7 @@ export default function MyApp({ Component }) { setDark(dark); changeTheme(newTheme); } - } + }; const changeTheme = (newTheme) => { const elementId = 'theme-link'; @@ -69,17 +68,15 @@ export default function MyApp({ Component }) { linkElement.parentNode.insertBefore(cloneLinkElement, linkElement.nextSibling); setTheme(newTheme); - } + }; if (Component.getLayout) { return Component.getLayout(); - } - else { + } else { return ( - + - ) + ); } - } diff --git a/pages/_document.js b/pages/_document.js index e173220eb3..cff57de572 100644 --- a/pages/_document.js +++ b/pages/_document.js @@ -1,10 +1,10 @@ -import Document, { Html, Head, Main, NextScript } from 'next/document' +import Document, { Html, Head, Main, NextScript } from 'next/document'; import getConfig from 'next/config'; class MyDocument extends Document { static async getInitialProps(ctx) { - const initialProps = await Document.getInitialProps(ctx) - return { ...initialProps } + const initialProps = await Document.getInitialProps(ctx); + return { ...initialProps }; } render() { @@ -20,8 +20,8 @@ class MyDocument extends Document { - ) + ); } } -export default MyDocument; \ No newline at end of file +export default MyDocument; diff --git a/pages/accessibility/index.js b/pages/accessibility/index.js index 41b0014682..67c7fc9446 100644 --- a/pages/accessibility/index.js +++ b/pages/accessibility/index.js @@ -22,89 +22,127 @@ const AccessibilityPage = () => {
    -

    Accessibility is a major concern of the Prime UI libraries and PrimeReact is no exception. PrimeTek teams have initiated a significant process to review and enhance the accessibility features of the components. This guide - documents the foundation of the general guidelines that PrimeReact will follow and each component documentation will have a separate Accessibility section that states the keyboard support, screen reader compatibility, the implementation details along - with tips to achieve WCAG compliancy. This work has been initiated in Q2 2022 and planned to be completed by early Q3. PrimeReact will be the reference implementation which then will be ported to PrimeFaces, PrimeNG and PrimeVue. +

    + Accessibility is a major concern of the Prime UI libraries and PrimeReact is no exception.{' '} + + PrimeTek + {' '} + teams have initiated a significant process to review and enhance the accessibility features of the components. This guide documents the foundation of the general guidelines that PrimeReact will follow and each component + documentation will have a separate Accessibility section that states the keyboard support, screen reader compatibility, the implementation details along with tips to achieve WCAG compliancy. This work has been initiated in + Q2 2022 and planned to be completed by early Q3. PrimeReact will be the reference implementation which then will be ported to PrimeFaces, PrimeNG and PrimeVue.

    - +

    Introduction

    -

    According to the World Health Organization, 15% of the world population has a disability to some degree. As a result, - accessibility features in any context such as a ramp for wheelchair users or a multimedia with captions are crucial to ensure content can be consumed by anyone.

    +

    + According to the World Health Organization, 15% of the world population has a disability to some degree. As a result, accessibility features in any context such as a ramp for wheelchair users or a multimedia with captions are + crucial to ensure content can be consumed by anyone. +

    Disabilities

    Types of disabilities are diverse so you need to know your audience well and how they interact with the content created. There four main categories;

    - +
    Visual Impairments
    -

    Blindness, low-level vision or color blindness are the common types of visual impairments. Screen magnifiers and the color blind mode - are usually built-in features of the browsers whereas for people who rely on screen readers, page developers are required to make sure - content is readable by the readers. Popular readers are NVDA, JAWS and ChromeVox. +

    + Blindness, low-level vision or color blindness are the common types of visual impairments. Screen magnifiers and the color blind mode are usually built-in features of the browsers whereas for people who rely on screen readers, + page developers are required to make sure content is readable by the readers. Popular readers are{' '} + + NVDA + + ,{' '} + + JAWS + {' '} + and{' '} + + ChromeVox + + .

    Hearing Impairments
    -

    Deafness or hearing loss refers to the inability to hear sounds totally or partially. People with hearing impairments use assistive devices however - it may not be enough when interacting with a web page. Common implementation is providing textual alternatives, transcripts and captions for content with audio. +

    + Deafness or hearing loss refers to the inability to hear sounds totally or partially. People with hearing impairments use assistive devices however it may not be enough when interacting with a web page. Common implementation is + providing textual alternatives, transcripts and captions for content with audio.

    Mobility Impairments
    -

    People with mobility impairments have disabilities related to movement due to loss of a limb, paralysis or other varying reasons. Assistive technologies like - a head pointer is a device to interact with a screen whereas keyboard or a trackpad remain as solutions for people who are not able to utilize a mouse. +

    + People with mobility impairments have disabilities related to movement due to loss of a limb, paralysis or other varying reasons. Assistive technologies like a head pointer is a device to interact with a screen whereas keyboard or + a trackpad remain as solutions for people who are not able to utilize a mouse.

    Cognitive Impairments
    -

    Cognitive impairments have a wider range that includes people with learning disabilities, depression and dyslexia. A well designed content also leads - to better user experience for people without disabilities so designing for cognitive impairments result in better design for any user. +

    + Cognitive impairments have a wider range that includes people with learning disabilities, depression and dyslexia. A well designed content also leads to better user experience for people without disabilities so designing for + cognitive impairments result in better design for any user.

    Web Content

    -

    Correct page structure with the aid of assistive technologies are the core ingridients for an accessible web content. - HTML is based on an accessible foundation, form controls can be used by keyboard by default and semantic HTML is easier to be processed by a screen reader.

    +

    + Correct page structure with the aid of assistive technologies are the core ingridients for an accessible web content. HTML is based on an accessible foundation, form controls can be used by keyboard by default and semantic HTML is + easier to be processed by a screen reader. +

    WCAG
    -

    WCAG refers to Web Content Accessibility Guideline, a standard managed by the WAI (Web Accessibility Initiative) of W3C (World Wide Web Consortium). - WCAG consists of recommendations for making the web content more accessible. PrimeReact components aim high level of WCAG compliancy in the near future.

    +

    + + WCAG + {' '} + refers to Web Content Accessibility Guideline, a standard managed by the WAI (Web Accessibility Initiative) of W3C (World Wide Web Consortium). WCAG consists of recommendations for making the web content more + accessible. PrimeReact components aim high level of WCAG compliancy in the near future. +

    -

    Various countries around the globe have governmental policies regarding web accessibility as well. Most well known of these are Section 508 in the US and Web Accessibility Directive of the European Union.

    +

    + Various countries around the globe have governmental policies regarding web accessibility as well. Most well known of these are Section 508 in the US and{' '} + Web Accessibility Directive of the European Union. +

    Form Controls
    -

    Native form elements should be preferred instead of elements that are meant for other purposes like presentation. As an example, button below is - rendered as a form control by the browser, can receive focus via tabbing and can be used with space key as well to trigger. +

    + Native form elements should be preferred instead of elements that are meant for other purposes like presentation. As an example, button below is rendered as a form control by the browser, can receive focus via tabbing and can be + used with space key as well to trigger.

    - -{` + + {` `} - +

    On the other hand, a fancy css based button using a div has no keyboard or screen reader support.

    - -{` + + {`
    console.log(e)}>Click
    `} -
    +
    -

    tabindex is required to make a div element accessible in addition to use a keydown to bring the keyboard support back. To avoid the overload and implementing - functionality that is already provided by the browser, native form controls should be preferred.

    - -{` +

    + tabindex is required to make a div element accessible in addition to use a keydown to bring the keyboard support back. To avoid the overload and implementing functionality that is already provided by the browser, native + form controls should be preferred. +

    + + {`
    console.log(e)} onKeyDown={e => e.code === 'Space' && console.log(e) } tabIndex="0">Click
    `} -
    +
    Relations
    -

    Form components must be related to another element that describes what the form element is used for. This is usually achieved with the label element.

    +

    + Form components must be related to another element that describes what the form element is used for. This is usually achieved with the label element. +

    -{` + {` `} - +
    Semantic HTML
    -

    HTML offers various element to organize content on a web page that screen readers are aware of. Preferring Semantic HTML for good semantics provide out of the box support - for reader which is not possible when regular div elements with classes are used. Consider the following example that do not mean too much for readers. +

    + HTML offers various element to organize content on a web page that screen readers are aware of. Preferring Semantic HTML for good semantics provide out of the box support for reader which is not possible when regular div{' '} + elements with classes are used. Consider the following example that do not mean too much for readers.

    -{` + {`
    Header
    @@ -122,11 +160,11 @@ const AccessibilityPage = () => {
    `} -
    +

    Same layout can be achieved using the semantic elements with screen reader support built-in.

    -{` + {`

    Header

    @@ -142,52 +180,58 @@ const AccessibilityPage = () => {
    `} -
    +
    WAI-ARIA
    -

    ARIA refers to "Accessible Rich Internet Applications" is a suite to fill the gap where semantic HTML is inadequate. These cases - are mainly related to rich UI components/widgets. Although browser support for rich UI components such as a datepicker or colorpicker has been improved over the past years - many web developers still utilize UI components derived from standard HTML elements created by them or by other projects like PrimeReact. These - types of components must provide keyboard and screen reader support, the latter case is where the WAI-ARIA is utilized. +

    + ARIA refers to "Accessible Rich Internet Applications" is a suite to fill the gap where semantic HTML is inadequate. These cases are mainly related to rich UI components/widgets. Although browser support for rich UI components + such as a datepicker or colorpicker has been improved over the past years many web developers still utilize UI components derived from standard HTML elements created by them or by other projects like PrimeReact. These types of + components must provide keyboard and screen reader support, the latter case is where the WAI-ARIA is utilized. +

    +

    + ARIA consists of roles, properties and attributes. Roles define what the element is mainly used for e.g. checkbox, dialog, tablist whereas + States and Properties define the metadata of the element like aria-checked, aria-disabled.

    -

    ARIA consists of roles, properties and attributes. Roles define what the element is mainly used for e.g. checkbox, dialog, tablist whereas - States and Properties define the metadata of the element like aria-checked, aria-disabled.

    Consider the following case of a native checkbox. It has built-in keyboard and screen reader support.

    -{` + {` `} - + -

    A fancy checkbox with css animations might look more appealing but accessibility might be lacking. Checkbox below - may display a checked font icon with animations however it is not tabbable, cannot be checked with space key and cannot be read by a reader. +

    + A fancy checkbox with css animations might look more appealing but accessibility might be lacking. Checkbox below may display a checked font icon with animations however it is not tabbable, cannot be checked with space key and + cannot be read by a reader.

    -{` + {`
    {checked && }
    `} -
    + -

    One alternative is using ARIA roles for readers and use javascript for keyboard support. Notice the usage of aria-labelledby as a replacement of the label tag with htmlFor.

    +

    + One alternative is using ARIA roles for readers and use javascript for keyboard support. Notice the usage of aria-labelledby as a replacement of the label tag with htmlFor. +

    -{` + {` Remember Me
    {checked && }
    `} -
    + -

    However the best practice is combining semantic HTML for accessibility while keeping the design for UX. This approach - involves hiding a native checkbox for accessibility and using javascript events to update its state. Notice the usage of p-sr-only +

    + However the best practice is combining semantic HTML for accessibility while keeping the design for UX. This approach involves hiding a native checkbox for accessibility and using javascript events to update its state. Notice the + usage of p-sr-only that hides the elements from the user but not from the screen reader.

    - {` + {`
    { {checked && }
    `} -
    + -

    A working sample is the PrimeReact checkbox that is tabbable, keyboard accessible and is compliant with a screen reader. Instead of ARIA - roles it relies on a hidden native checkbox. -

    +

    A working sample is the PrimeReact checkbox that is tabbable, keyboard accessible and is compliant with a screen reader. Instead of ARIA roles it relies on a hidden native checkbox.

    - - setChecked(e.checked)} /> + + setChecked(e.checked)} />
    Colors
    -

    Colors on a web page should aim a contrast ratio of at least 4.5:1 and consider a selection of colors that do not - cause vibration.

    +

    + Colors on a web page should aim a contrast ratio of at least 4.5:1 and consider a selection of colors that do not cause vibration. +

    Good Contrast

    Color contrast between the background and the foreground content should be sufficient enough to ensure readability. Example below displays two cases with good and bad samples.

    -
    +
    GOOD
    -
    +
    BAD
    Vibration
    -

    Color vibration is leads to an illusion of motion due to choosing colors that have low visibility against each other. Color combinations - need to be picked with caution to avoid vibration. -

    +

    Color vibration is leads to an illusion of motion due to choosing colors that have low visibility against each other. Color combinations need to be picked with caution to avoid vibration.

    -
    +
    VIBRATE
    Dark Mode

    Highly saturated colors should be avoided when used within a dark design scheme as they cause eye strain. Instead desaturated colors should be preferred.

    - +
    -
    +
    Indigo 500
    -
    +
    Indigo 200
    -
    +
    ); -} +}; export default AccessibilityPage; diff --git a/pages/accordion/index.js b/pages/accordion/index.js index a1c19ef2af..2646128a45 100644 --- a/pages/accordion/index.js +++ b/pages/accordion/index.js @@ -13,19 +13,17 @@ const AccordionDemo = () => { if (_activeIndex.length === 0) { _activeIndex.push(itemIndex); - } - else { + } else { const index = _activeIndex.indexOf(itemIndex); if (index === -1) { _activeIndex.push(itemIndex); - } - else { + } else { _activeIndex.splice(index, 1); } } setActiveIndex(_activeIndex); - } + }; return (
    @@ -46,41 +44,50 @@ const AccordionDemo = () => {
    Default
    -

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation - ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea + commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim + id est laborum. +

    -

    Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi - architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione - voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi.

    +

    + Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. + Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi. +

    -

    At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati - cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. - Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus.

    +

    + At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt + in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo + minus. +

    Multiple
    -

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation - ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea + commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim + id est laborum. +

    -

    Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi - architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione - voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi.

    +

    + Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. + Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi. +

    -

    At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati - cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. - Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus.

    -
    - +

    + At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt + in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo + minus. +

    +
    Programmatic
    @@ -92,38 +99,70 @@ const AccordionDemo = () => { setActiveIndex(e.index)}> -

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation - ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea + commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim + id est laborum. +

    -

    Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi - architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione - voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi.

    +

    + Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. + Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi. +

    -

    At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati - cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. - Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus.

    +

    + At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt + in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo + minus. +

    Custom Headers
    - Header I}> -

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation - ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    + + + Header I + + } + > +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea + commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim + id est laborum. +

    - Header II}> -

    Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi - architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione - voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi.

    + + + Header II + + } + > +

    + Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. + Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi. +

    - Header III}> -

    At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati - cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. - Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus.

    + + + Header III + + + } + > +

    + At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt + in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo + minus. +

    @@ -131,7 +170,7 @@ const AccordionDemo = () => {
    - ) -} + ); +}; export default AccordionDemo; diff --git a/pages/api/upload.js b/pages/api/upload.js index c1f953dbba..0101427ea0 100644 --- a/pages/api/upload.js +++ b/pages/api/upload.js @@ -1,3 +1,3 @@ export default function handler(req, res) { - res.status(200).setHeader('Access-Control-Allow-Origin', '*').json({ name: 'Fake Upload Process' }) -} \ No newline at end of file + res.status(200).setHeader('Access-Control-Allow-Origin', '*').json({ name: 'Fake Upload Process' }); +} diff --git a/pages/autocomplete/index.js b/pages/autocomplete/index.js index 1eca8b9620..94dac0674f 100644 --- a/pages/autocomplete/index.js +++ b/pages/autocomplete/index.js @@ -7,7 +7,6 @@ import Head from 'next/head'; import getConfig from 'next/config'; const AutoCompleteDemo = () => { - const [countries, setCountries] = useState([]); const [selectedCountry1, setSelectedCountry1] = useState(null); const [selectedCountry2, setSelectedCountry2] = useState(null); @@ -20,10 +19,10 @@ const AutoCompleteDemo = () => { const countryservice = new CountryService(); const contextPath = getConfig().publicRuntimeConfig.contextPath; - const groupedCities = [ { - label: 'Germany', code: 'DE', + label: 'Germany', + code: 'DE', items: [ { label: 'Berlin', value: 'Berlin' }, { label: 'Frankfurt', value: 'Frankfurt' }, @@ -32,7 +31,8 @@ const AutoCompleteDemo = () => { ] }, { - label: 'USA', code: 'US', + label: 'USA', + code: 'US', items: [ { label: 'Chicago', value: 'Chicago' }, { label: 'Los Angeles', value: 'Los Angeles' }, @@ -41,7 +41,8 @@ const AutoCompleteDemo = () => { ] }, { - label: 'Japan', code: 'JP', + label: 'Japan', + code: 'JP', items: [ { label: 'Kyoto', value: 'Kyoto' }, { label: 'Osaka', value: 'Osaka' }, @@ -54,7 +55,7 @@ const AutoCompleteDemo = () => { const items = Array.from({ length: 100000 }).map((_, i) => ({ label: `Item #${i}`, value: i })); useEffect(() => { - countryservice.getCountries().then(data => setCountries(data)); + countryservice.getCountries().then((data) => setCountries(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps const searchCountry = (event) => { @@ -62,8 +63,7 @@ const AutoCompleteDemo = () => { let _filteredCountries; if (!event.query.trim().length) { _filteredCountries = [...countries]; - } - else { + } else { _filteredCountries = countries.filter((country) => { return country.name.toLowerCase().startsWith(event.query.toLowerCase()); }); @@ -71,7 +71,7 @@ const AutoCompleteDemo = () => { setFilteredCountries(_filteredCountries); }, 250); - } + }; const searchCity = (event) => { let query = event.query; @@ -84,8 +84,8 @@ const AutoCompleteDemo = () => { } } - setFilteredCities(_filteredCities) - } + setFilteredCities(_filteredCities); + }; const searchItems = (event) => { //in a real application, make a request to a remote url with the query and return filtered results, for demo we filter at client side @@ -100,25 +100,35 @@ const AutoCompleteDemo = () => { } setFilteredItems(_filteredItems); - } + }; const itemTemplate = (item) => { return (
    - {item.name} e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} className={`flag flag-${item.code.toLowerCase()}`} /> + {item.name} (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} + className={`flag flag-${item.code.toLowerCase()}`} + />
    {item.name}
    ); - } + }; const groupedItemTemplate = (item) => { return (
    - {item.name} e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} className={`flag flag-${item.code.toLowerCase()}`} /> + {item.name} (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} + className={`flag flag-${item.code.toLowerCase()}`} + />
    {item.label}
    ); - } + }; return (
    @@ -140,10 +150,31 @@ const AutoCompleteDemo = () => { setSelectedCountry1(e.value)} aria-label="Countries" />
    Grouped
    - setSelectedCity(e.value)} aria-label="Cities" /> + setSelectedCity(e.value)} + aria-label="Cities" + />
    Dropdown, Templating and Force Selection
    - setSelectedCountry2(e.value)} aria-label="Countries" /> + setSelectedCountry2(e.value)} + aria-label="Countries" + />
    Virtual Scroll (100000 Items)
    setSelectedItem(e.value)} aria-label="Items" /> @@ -157,7 +188,7 @@ const AutoCompleteDemo = () => {
    - ) -} + ); +}; export default AutoCompleteDemo; diff --git a/pages/avatar/index.js b/pages/avatar/index.js index 08e478942e..05c2575196 100644 --- a/pages/avatar/index.js +++ b/pages/avatar/index.js @@ -116,14 +116,11 @@ const AvatarDemo = () => {
    - - -
    ); -} +}; export default AvatarDemo; diff --git a/pages/badge/index.js b/pages/badge/index.js index e0f2d2eef4..4c64caf97f 100644 --- a/pages/badge/index.js +++ b/pages/badge/index.js @@ -25,29 +25,39 @@ const BadgeDemo = () => {
    Numbers
    - +
    Positioned Badge
    - - - + + + + + + + + +
    Button Badge
    - - + +
    Sizes
    -
    + - + ); -} +}; export default BadgeDemo; diff --git a/pages/blockui/index.js b/pages/blockui/index.js index 4e8e8f6387..61e236f32a 100644 --- a/pages/blockui/index.js +++ b/pages/blockui/index.js @@ -7,7 +7,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const BlockUIDemo = () => { - const [blockedPanel, setBlockedPanel] = useState(false); const [blockedDocument, setBlockedDocument] = useState(false); @@ -17,19 +16,19 @@ const BlockUIDemo = () => { setBlockedDocument(false); }, 3000); } - }, [blockedDocument]) + }, [blockedDocument]); const blockDocument = () => { setBlockedDocument(true); - } + }; const blockPanel = () => { setBlockedPanel(true); - } + }; const unblockPanel = () => { setBlockedPanel(false); - } + }; return (
    @@ -59,19 +58,21 @@ const BlockUIDemo = () => { -

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat - cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea + commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim + id est laborum. +

    - }> + }> -

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat - cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea + commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim + id est laborum. +

    @@ -79,7 +80,7 @@ const BlockUIDemo = () => { - ) -} + ); +}; export default BlockUIDemo; diff --git a/pages/breadcrumb/index.js b/pages/breadcrumb/index.js index 1a21d3c8b2..a0a668a06b 100644 --- a/pages/breadcrumb/index.js +++ b/pages/breadcrumb/index.js @@ -5,16 +5,9 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const BreadCrumbDemo = () => { + const items = [{ label: 'Computer' }, { label: 'Notebook' }, { label: 'Accessories' }, { label: 'Backpacks' }, { label: 'Item' }]; - const items = [ - { label: 'Computer' }, - { label: 'Notebook' }, - { label: 'Accessories' }, - { label: 'Backpacks' }, - { label: 'Item' } - ]; - - const home = { icon: 'pi pi-home', url: 'https://www.primefaces.org/primereact/showcase' } + const home = { icon: 'pi pi-home', url: 'https://www.primefaces.org/primereact/showcase' }; return (
    @@ -39,6 +32,6 @@ const BreadCrumbDemo = () => {
    ); -} +}; export default BreadCrumbDemo; diff --git a/pages/button/index.js b/pages/button/index.js index 3f427a561f..019f5b4674 100644 --- a/pages/button/index.js +++ b/pages/button/index.js @@ -5,7 +5,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const ButtonDemo = () => { - const [loading1, setLoading1] = useState(false); const [loading2, setLoading2] = useState(false); @@ -15,7 +14,7 @@ const ButtonDemo = () => { setTimeout(() => { setLoading1(false); }, 2000); - } + }; const onLoadingClick2 = () => { setLoading2(true); @@ -23,7 +22,7 @@ const ButtonDemo = () => { setTimeout(() => { setLoading2(false); }, 2000); - } + }; return (
    @@ -199,7 +198,7 @@ const ButtonDemo = () => {
    - ) -} + ); +}; export default ButtonDemo; diff --git a/pages/calendar/index.js b/pages/calendar/index.js index e4b44e9796..cb3cb2e74a 100644 --- a/pages/calendar/index.js +++ b/pages/calendar/index.js @@ -6,14 +6,13 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const CalendarDemo = () => { - let today = new Date(); let month = today.getMonth(); let year = today.getFullYear(); - let prevMonth = (month === 0) ? 11 : month - 1; - let prevYear = (prevMonth === 11) ? year - 1 : year; - let nextMonth = (month === 11) ? 0 : month + 1; - let nextYear = (nextMonth === 0) ? year + 1 : year; + let prevMonth = month === 0 ? 11 : month - 1; + let prevYear = prevMonth === 11 ? year - 1 : year; + let nextMonth = month === 11 ? 0 : month + 1; + let nextYear = nextMonth === 0 ? year + 1 : year; const [date1, setDate1] = useState(null); const [date2, setDate2] = useState(null); @@ -55,13 +54,11 @@ const CalendarDemo = () => { const dateTemplate = (date) => { if (date.day > 10 && date.day < 15) { - return ( - {date.day} - ); + return {date.day}; } return date.day; - } + }; return (
    @@ -131,7 +128,7 @@ const CalendarDemo = () => {
    - setDate11(e.value)} numberOfMonths={3}/> + setDate11(e.value)} numberOfMonths={3} />
    @@ -151,6 +148,6 @@ const CalendarDemo = () => {
    ); -} +}; export default CalendarDemo; diff --git a/pages/captcha/index.js b/pages/captcha/index.js index efc0cb9559..7f8d3be340 100644 --- a/pages/captcha/index.js +++ b/pages/captcha/index.js @@ -6,12 +6,11 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const CaptchaDemo = (props) => { - const toast = useRef(null); const showResponse = () => { toast.current.show({ severity: 'info', summary: 'Success', detail: 'User Responded' }); - } + }; return (
    @@ -38,7 +37,7 @@ const CaptchaDemo = (props) => {
    - ) -} + ); +}; export default CaptchaDemo; diff --git a/pages/card/index.js b/pages/card/index.js index 0ebfb48c38..0134532e30 100644 --- a/pages/card/index.js +++ b/pages/card/index.js @@ -7,11 +7,8 @@ import Head from 'next/head'; import getConfig from 'next/config'; const CardDemo = () => { - const contextPath = getConfig().publicRuntimeConfig.contextPath; - const header = ( - Card e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} /> - ); + const header = Card (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} />; const footer = (
    Using ConfirmPopup tag
    - setVisible(false)} message="Are you sure you want to proceed?" - icon="pi pi-exclamation-triangle" accept={accept} reject={reject} /> + setVisible(false)} message="Are you sure you want to proceed?" icon="pi pi-exclamation-triangle" accept={accept} reject={reject} /> ; - } + }; const filterApplyTemplate = (options) => { - return - } + return ; + }; const filterFooterTemplate = () => { return
    Customized Buttons
    ; - } + }; const representativeBodyTemplate = (rowData) => { const representative = rowData.representative; return ( - {representative.name} e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} width={32} style={{ verticalAlign: 'middle' }} /> + {representative.name} (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} + width={32} + style={{ verticalAlign: 'middle' }} + /> {representative.name} ); - } + }; const representativeFilterTemplate = (options) => { return options.filterCallback(e.value)} optionLabel="name" placeholder="Any" className="p-column-filter" />; - } + }; const representativesItemTemplate = (option) => { return (
    - {option.name} e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} width={32} style={{ verticalAlign: 'middle' }} /> + {option.name} (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} width={32} style={{ verticalAlign: 'middle' }} /> {option.name}
    ); - } + }; const dateBodyTemplate = (rowData) => { return formatDate(rowData.date); - } + }; const dateFilterTemplate = (options) => { - return options.filterCallback(e.value, options.index)} dateFormat="mm/dd/yy" placeholder="mm/dd/yyyy" mask="99/99/9999" /> - } + return options.filterCallback(e.value, options.index)} dateFormat="mm/dd/yy" placeholder="mm/dd/yyyy" mask="99/99/9999" />; + }; const balanceBodyTemplate = (rowData) => { return formatCurrency(rowData.balance); - } + }; const balanceFilterTemplate = (options) => { - return options.filterCallback(e.value, options.index)} mode="currency" currency="USD" locale="en-US" /> - } + return options.filterCallback(e.value, options.index)} mode="currency" currency="USD" locale="en-US" />; + }; const statusBodyTemplate = (rowData) => { return {rowData.status}; - } + }; const statusFilterTemplate = (options) => { return options.filterCallback(e.value, options.index)} itemTemplate={statusItemTemplate} placeholder="Select a Status" className="p-column-filter" showClear />; - } + }; const statusItemTemplate = (option) => { return {option}; - } + }; const activityBodyTemplate = (rowData) => { return ; - } + }; const activityFilterTemplate = (options) => { return ( @@ -227,28 +241,39 @@ const DataTableFilterDemo = () => { {options.value ? options.value[1] : 100} - ) - } + ); + }; const verifiedBodyTemplate = (rowData) => { return ; - } + }; const verifiedFilterTemplate = (options) => { - return options.filterCallback(e.value)} /> - } + return options.filterCallback(e.value)} />; + }; const representativeRowFilterTemplate = (options) => { - return options.filterApplyCallback(e.value)} optionLabel="name" placeholder="Any" className="p-column-filter" maxSelectedLabels={1} />; - } + return ( + options.filterApplyCallback(e.value)} + optionLabel="name" + placeholder="Any" + className="p-column-filter" + maxSelectedLabels={1} + /> + ); + }; const statusRowFilterTemplate = (options) => { return options.filterApplyCallback(e.value)} itemTemplate={statusItemTemplate} placeholder="Select a Status" className="p-column-filter" showClear />; - } + }; const verifiedRowFilterTemplate = (options) => { - return options.filterApplyCallback(e.value)} /> - } + return options.filterApplyCallback(e.value)} />; + }; const header1 = renderHeader1(); const header2 = renderHeader2(); @@ -261,7 +286,9 @@ const DataTableFilterDemo = () => {
    -

    DataTable Filter

    +

    + DataTable Filter +

    Filtering feature provides advanced and flexible options to query the data.

    @@ -272,16 +299,44 @@ const DataTableFilterDemo = () => {
    Filter Menu

    Filters are displayed in an overlay.

    - + - - - + + + @@ -292,13 +347,32 @@ const DataTableFilterDemo = () => {
    Filter Row

    Filters are displayed inline within a separate row.

    - + - + @@ -308,15 +382,13 @@ const DataTableFilterDemo = () => {
    ); - -} +}; export default DataTableFilterDemo; const DataTableFilterDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -639,7 +711,7 @@ export class DataTableFilterDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -932,7 +1004,7 @@ const DataTableFilterDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -1225,7 +1297,7 @@ const DataTableFilterDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -1575,15 +1647,11 @@ const DataTableFilterDemo = () => { } ` } - } + }; return (
    - - { - useLiveEditorTabs({ name: 'DataTableFilterDemo', sources: sources, service: 'CustomerService', data: 'customers-large', extFiles: extFiles }) - } - + {useLiveEditorTabs({ name: 'DataTableFilterDemo', sources: sources, service: 'CustomerService', data: 'customers-large', extFiles: extFiles })}
    - ) -}) + ); +}); diff --git a/pages/datatable/flexscroll.js b/pages/datatable/flexscroll.js index 530bfb22bc..7b578ca99f 100644 --- a/pages/datatable/flexscroll.js +++ b/pages/datatable/flexscroll.js @@ -8,15 +8,13 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const DataTableFlexScrollDemo = () => { - const [customers, setCustomers] = useState([]); const customerService = new CustomerService(); useEffect(() => { - customerService.getCustomersLarge().then(data => setCustomers(data)); + customerService.getCustomersLarge().then((data) => setCustomers(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps - return (
    @@ -25,7 +23,9 @@ const DataTableFlexScrollDemo = () => {
    -

    DataTable Flex Scroll

    +

    + DataTable Flex Scroll +

    @@ -46,14 +46,12 @@ const DataTableFlexScrollDemo = () => {
    ); -} +}; export default DataTableFlexScrollDemo; -; const DataTableBasicDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -93,7 +91,7 @@ export class DataTableFlexScrollDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -125,7 +123,7 @@ const DataTableFlexScrollDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -158,7 +156,7 @@ const DataTableFlexScrollDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -198,15 +196,11 @@ const DataTableFlexScrollDemo = () => { } ` } - } + }; return (
    - - { - useLiveEditorTabs({ name: 'DataTableFlexScrollDemo', sources: sources, service: 'CustomerService', data: 'customers-large' }) - } - + {useLiveEditorTabs({ name: 'DataTableFlexScrollDemo', sources: sources, service: 'CustomerService', data: 'customers-large' })}
    - ) -}) + ); +}); diff --git a/pages/datatable/gridlines.js b/pages/datatable/gridlines.js index 4809aa10da..ec792d3c65 100644 --- a/pages/datatable/gridlines.js +++ b/pages/datatable/gridlines.js @@ -8,15 +8,13 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const DataTableGridLinesDemo = () => { - const [products, setProducts] = useState(null); const productService = new ProductService(); useEffect(() => { - productService.getProductsSmall().then(data => setProducts(data)); + productService.getProductsSmall().then((data) => setProducts(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps - return (
    @@ -25,8 +23,12 @@ const DataTableGridLinesDemo = () => {
    -

    DataTable GridLines

    -

    Enabling showGridlines displays borders between cells. Note: Some themes may always display gridlines by design.

    +

    + DataTable GridLines +

    +

    + Enabling showGridlines displays borders between cells. Note: Some themes may always display gridlines by design. +

    @@ -46,14 +48,13 @@ const DataTableGridLinesDemo = () => {
    ); -} +}; export default DataTableGridLinesDemo; export const DataTableGridLinesDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -94,7 +95,7 @@ export class DataTableGridLinesDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -125,7 +126,7 @@ const DataTableGridLinesDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -156,7 +157,7 @@ const DataTableGridLinesDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -194,16 +195,11 @@ const DataTableGridLinesDemo = () => { } ` } - } + }; return (
    - - { - useLiveEditorTabs({ name: 'DataTableGridLinesDemo', sources: sources, service: 'ProductService', data: 'products-small' }) - } - + {useLiveEditorTabs({ name: 'DataTableGridLinesDemo', sources: sources, service: 'ProductService', data: 'products-small' })}
    - ) - -}) + ); +}); diff --git a/pages/datatable/index.js b/pages/datatable/index.js index 2bf9db9e69..33b8a16ffc 100644 --- a/pages/datatable/index.js +++ b/pages/datatable/index.js @@ -17,63 +17,63 @@ import Head from 'next/head'; import getConfig from 'next/config'; const DataTableDemo = () => { - const [customers, setCustomers] = useState(null); const [selectedCustomers, setSelectedCustomers] = useState(null); const [filters, setFilters] = useState({ - 'global': { value: null, matchMode: FilterMatchMode.CONTAINS }, - 'name': { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.STARTS_WITH }] }, + global: { value: null, matchMode: FilterMatchMode.CONTAINS }, + name: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.STARTS_WITH }] }, 'country.name': { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.STARTS_WITH }] }, - 'representative': { value: null, matchMode: FilterMatchMode.IN }, - 'date': { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.DATE_IS }] }, - 'balance': { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.EQUALS }] }, - 'status': { operator: FilterOperator.OR, constraints: [{ value: null, matchMode: FilterMatchMode.EQUALS }] }, - 'activity': { value: null, matchMode: FilterMatchMode.BETWEEN } + representative: { value: null, matchMode: FilterMatchMode.IN }, + date: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.DATE_IS }] }, + balance: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.EQUALS }] }, + status: { operator: FilterOperator.OR, constraints: [{ value: null, matchMode: FilterMatchMode.EQUALS }] }, + activity: { value: null, matchMode: FilterMatchMode.BETWEEN } }); const [globalFilterValue, setGlobalFilterValue] = useState(''); const [loading, setLoading] = useState(true); const representatives = [ - { name: "Amy Elsner", image: 'amyelsner.png' }, - { name: "Anna Fali", image: 'annafali.png' }, - { name: "Asiya Javayant", image: 'asiyajavayant.png' }, - { name: "Bernardo Dominic", image: 'bernardodominic.png' }, - { name: "Elwin Sharvill", image: 'elwinsharvill.png' }, - { name: "Ioni Bowcher", image: 'ionibowcher.png' }, - { name: "Ivan Magalhaes", image: 'ivanmagalhaes.png' }, - { name: "Onyama Limba", image: 'onyamalimba.png' }, - { name: "Stephen Shaw", image: 'stephenshaw.png' }, - { name: "XuXue Feng", image: 'xuxuefeng.png' } + { name: 'Amy Elsner', image: 'amyelsner.png' }, + { name: 'Anna Fali', image: 'annafali.png' }, + { name: 'Asiya Javayant', image: 'asiyajavayant.png' }, + { name: 'Bernardo Dominic', image: 'bernardodominic.png' }, + { name: 'Elwin Sharvill', image: 'elwinsharvill.png' }, + { name: 'Ioni Bowcher', image: 'ionibowcher.png' }, + { name: 'Ivan Magalhaes', image: 'ivanmagalhaes.png' }, + { name: 'Onyama Limba', image: 'onyamalimba.png' }, + { name: 'Stephen Shaw', image: 'stephenshaw.png' }, + { name: 'XuXue Feng', image: 'xuxuefeng.png' } ]; - const statuses = [ - 'unqualified', 'qualified', 'new', 'negotiation', 'renewal', 'proposal' - ]; + const statuses = ['unqualified', 'qualified', 'new', 'negotiation', 'renewal', 'proposal']; const contextPath = getConfig().publicRuntimeConfig.contextPath; const customerService = new CustomerService(); useEffect(() => { - customerService.getCustomersLarge().then(data => { setCustomers(getCustomers(data)); setLoading(false) }); + customerService.getCustomersLarge().then((data) => { + setCustomers(getCustomers(data)); + setLoading(false); + }); }, []); // eslint-disable-line react-hooks/exhaustive-deps const getCustomers = (data) => { - return [...data || []].map(d => { + return [...(data || [])].map((d) => { d.date = new Date(d.date); return d; }); - } + }; const formatDate = (value) => { return value.toLocaleDateString('en-US', { day: '2-digit', month: '2-digit', - year: 'numeric', + year: 'numeric' }); - } + }; const formatCurrency = (value) => { return value.toLocaleString('en-US', { style: 'currency', currency: 'USD' }); - } + }; const onGlobalFilterChange = (e) => { const value = e.target.value; @@ -82,7 +82,7 @@ const DataTableDemo = () => { setFilters(_filters); setGlobalFilterValue(value); - } + }; const renderHeader = () => { return ( @@ -93,27 +93,39 @@ const DataTableDemo = () => {
    - ) - } + ); + }; const countryBodyTemplate = (rowData) => { return ( - flag e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} className={`flag flag-${rowData.country.code}`} width={30} /> + flag (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} + className={`flag flag-${rowData.country.code}`} + width={30} + /> {rowData.country.name} ); - } + }; const representativeBodyTemplate = (rowData) => { const representative = rowData.representative; return ( - {representative.name} e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} width={32} style={{ verticalAlign: 'middle' }} /> + {representative.name} (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} + width={32} + style={{ verticalAlign: 'middle' }} + /> {representative.name} ); - } + }; const representativeFilterTemplate = (options) => { return ( @@ -122,48 +134,48 @@ const DataTableDemo = () => { options.filterCallback(e.value)} optionLabel="name" placeholder="Any" className="p-column-filter" /> ); - } + }; const representativesItemTemplate = (option) => { return (
    - {option.name} e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} width={32} style={{ verticalAlign: 'middle' }} /> + {option.name} (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} width={32} style={{ verticalAlign: 'middle' }} /> {option.name}
    ); - } + }; const dateBodyTemplate = (rowData) => { return formatDate(rowData.date); - } + }; const dateFilterTemplate = (options) => { - return options.filterCallback(e.value, options.index)} dateFormat="mm/dd/yy" placeholder="mm/dd/yyyy" mask="99/99/9999" /> - } + return options.filterCallback(e.value, options.index)} dateFormat="mm/dd/yy" placeholder="mm/dd/yyyy" mask="99/99/9999" />; + }; const balanceBodyTemplate = (rowData) => { return formatCurrency(rowData.balance); - } + }; const balanceFilterTemplate = (options) => { - return options.filterCallback(e.value, options.index)} mode="currency" currency="USD" locale="en-US" /> - } + return options.filterCallback(e.value, options.index)} mode="currency" currency="USD" locale="en-US" />; + }; const statusBodyTemplate = (rowData) => { return {rowData.status}; - } + }; const statusFilterTemplate = (options) => { return options.filterCallback(e.value, options.index)} itemTemplate={statusItemTemplate} placeholder="Select a Status" className="p-column-filter" showClear />; - } + }; const statusItemTemplate = (option) => { return {option}; - } + }; const activityBodyTemplate = (rowData) => { return ; - } + }; const activityFilterTemplate = (options) => { return ( @@ -174,20 +186,31 @@ const DataTableDemo = () => { {options.value ? options.value[1] : 100}
    - ) - } + ); + }; const representativeRowFilterTemplate = (options) => { - return options.filterApplyCallback(e.value)} optionLabel="name" placeholder="Any" className="p-column-filter" maxSelectedLabels={1} />; - } + return ( + options.filterApplyCallback(e.value)} + optionLabel="name" + placeholder="Any" + className="p-column-filter" + maxSelectedLabels={1} + /> + ); + }; const statusRowFilterTemplate = (options) => { return options.filterApplyCallback(e.value)} itemTemplate={statusItemTemplate} placeholder="Select a Status" className="p-column-filter" showClear />; - } + }; const actionBodyTemplate = () => { return ; - } + }; const header = renderHeader(); @@ -208,19 +231,42 @@ const DataTableDemo = () => {
    - setSelectedCustomers(e.value)} - filters={filters} filterDisplay="menu" loading={loading} responsiveLayout="scroll" - globalFilterFields={['name', 'country.name', 'representative.name', 'balance', 'status']} emptyMessage="No customers found." - currentPageReportTemplate="Showing {first} to {last} of {totalRecords} entries"> + setSelectedCustomers(e.value)} + filters={filters} + filterDisplay="menu" + loading={loading} + responsiveLayout="scroll" + globalFilterFields={['name', 'country.name', 'representative.name', 'balance', 'status']} + emptyMessage="No customers found." + currentPageReportTemplate="Showing {first} to {last} of {totalRecords} entries" + > - - + + @@ -232,6 +278,6 @@ const DataTableDemo = () => {
    ); -} +}; export default DataTableDemo; diff --git a/pages/datatable/lazy.js b/pages/datatable/lazy.js index 502231b38c..7b0809e14a 100644 --- a/pages/datatable/lazy.js +++ b/pages/datatable/lazy.js @@ -9,7 +9,6 @@ import Head from 'next/head'; import getConfig from 'next/config'; const DataTableLazyDemo = () => { - const [loading, setLoading] = useState(false); const [totalRecords, setTotalRecords] = useState(0); const [customers, setCustomers] = useState(null); @@ -23,10 +22,10 @@ const DataTableLazyDemo = () => { sortField: null, sortOrder: null, filters: { - 'name': { value: '', matchMode: 'contains' }, + name: { value: '', matchMode: 'contains' }, 'country.name': { value: '', matchMode: 'contains' }, - 'company': { value: '', matchMode: 'contains' }, - 'representative.name': { value: '', matchMode: 'contains' }, + company: { value: '', matchMode: 'contains' }, + 'representative.name': { value: '', matchMode: 'contains' } } }); @@ -37,7 +36,7 @@ const DataTableLazyDemo = () => { useEffect(() => { loadLazyData(); - }, [lazyParams]) // eslint-disable-line react-hooks/exhaustive-deps + }, [lazyParams]); // eslint-disable-line react-hooks/exhaustive-deps const loadLazyData = () => { setLoading(true); @@ -48,65 +47,76 @@ const DataTableLazyDemo = () => { //imitate delay of a backend call loadLazyTimeout = setTimeout(() => { - customerService.getCustomers({ lazyEvent: JSON.stringify(lazyParams) }).then(data => { + customerService.getCustomers({ lazyEvent: JSON.stringify(lazyParams) }).then((data) => { setTotalRecords(data.totalRecords); setCustomers(data.customers); setLoading(false); }); }, Math.random() * 1000 + 250); - } + }; const onPage = (event) => { setLazyParams(event); - } + }; const onSort = (event) => { setLazyParams(event); - } + }; const onFilter = (event) => { event['first'] = 0; setLazyParams(event); - } + }; const onSelectionChange = (event) => { const value = event.value; setSelectedCustomers(value); setSelectAll(value.length === totalRecords); - } + }; const onSelectAllChange = (event) => { const selectAll = event.checked; if (selectAll) { - customerService.getCustomers().then(data => { + customerService.getCustomers().then((data) => { setSelectAll(true); setSelectedCustomers(data.customers); }); - } - else { + } else { setSelectAll(false); setSelectedCustomers([]); } - } + }; const representativeBodyTemplate = (rowData) => { return ( - {rowData.representative.name} e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} width={32} style={{ verticalAlign: 'middle' }} /> + {rowData.representative.name} (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} + width={32} + style={{ verticalAlign: 'middle' }} + /> {rowData.representative.name} ); - } + }; const countryBodyTemplate = (rowData) => { return ( - flag e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} className={`flag flag-${rowData.country.code}`} width={30} /> + flag (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} + className={`flag flag-${rowData.country.code}`} + width={30} + /> {rowData.country.name} ); - } + }; return (
    @@ -116,11 +126,16 @@ const DataTableLazyDemo = () => {
    -

    DataTable Lazy

    -

    Lazy mode is handy to deal with large datasets, instead of loading the entire data, small chunks of data is loaded by invoking corresponding callbacks everytime paging, sorting and filtering happens. Sample belows imitates - lazy paging by using an in memory list. It is also important to assign the logical number of rows to totalRecords by doing a projection query for paginator configuration so that paginator displays the UI assuming - there are actually records of totalRecords size although in reality they aren't as in lazy mode, only the records that are displayed on the current page exist. - Also, the implementation of checkbox selection in lazy tables is left entirely to the user. Since the DataTable does not know what will happen to the data on the next page or whether there are instant data changes, the selection array can be implemented in several ways. One of them is as in the example below.

    +

    + DataTable Lazy +

    +

    + Lazy mode is handy to deal with large datasets, instead of loading the entire data, small chunks of data is loaded by invoking corresponding callbacks everytime paging, sorting and filtering happens. + Sample belows imitates lazy paging by using an in memory list. It is also important to assign the logical number of rows to totalRecords by doing a projection query for paginator configuration so that paginator displays the UI + assuming there are actually records of totalRecords size although in reality they aren't as in lazy mode, only the records that are displayed on the current page exist. Also, the implementation of checkbox selection in + lazy tables is left entirely to the user. Since the DataTable does not know what will happen to the data on the next page or whether there are instant data changes, the selection array can be implemented in several ways. One + of them is as in the example below. +

    @@ -128,12 +143,28 @@ const DataTableLazyDemo = () => {
    - + @@ -146,14 +177,13 @@ const DataTableLazyDemo = () => {
    ); -} +}; export default DataTableLazyDemo; const DataTableLazyDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -300,7 +330,7 @@ export class DataTableLazyDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -428,7 +458,7 @@ const DataTableLazyDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -556,7 +586,7 @@ const DataTableLazyDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -695,15 +725,11 @@ const DataTableLazyDemo = () => { } ` } - } + }; return (
    - - { - useLiveEditorTabs({ name: 'DataTableLazyDemo', sources: sources, service: 'CustomerService' }) - } - + {useLiveEditorTabs({ name: 'DataTableLazyDemo', sources: sources, service: 'CustomerService' })}
    - ) -}) + ); +}); diff --git a/pages/datatable/paginator.js b/pages/datatable/paginator.js index f2b243d093..7354904af8 100644 --- a/pages/datatable/paginator.js +++ b/pages/datatable/paginator.js @@ -13,7 +13,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const DataTablePaginatorDemo = () => { - const [customers1, setCustomers1] = useState([]); const [customers2, setCustomers2] = useState([]); const [customers3, setCustomers3] = useState([]); @@ -22,7 +21,7 @@ const DataTablePaginatorDemo = () => { const [first2, setFirst2] = useState(0); const [rows2, setRows2] = useState(10); const [currentPage, setCurrentPage] = useState(1); - const [pageInputTooltip, setPageInputTooltip] = useState('Press \'Enter\' key to go to this page.'); + const [pageInputTooltip, setPageInputTooltip] = useState("Press 'Enter' key to go to this page."); const customerService = new CustomerService(); @@ -30,63 +29,66 @@ const DataTablePaginatorDemo = () => { setFirst1(event.first); setRows1(event.rows); setCurrentPage(event.page + 1); - } + }; const onCustomPage2 = (event) => { setFirst2(event.first); setRows2(event.rows); - } + }; const onPageInputKeyDown = (event, options) => { if (event.key === 'Enter') { const page = parseInt(currentPage); if (page < 1 || page > options.totalPages) { setPageInputTooltip(`Value must be between 1 and ${options.totalPages}.`); - } - else { + } else { const first = currentPage ? options.rows * (page - 1) : 0; setFirst1(first); - setPageInputTooltip('Press \'Enter\' key to go to this page.'); + setPageInputTooltip("Press 'Enter' key to go to this page."); } } - } + }; const onPageInputChange = (event) => { setCurrentPage(event.target.value); - } + }; useEffect(() => { - customerService.getCustomersLarge().then(data => setCustomers1(data)); - customerService.getCustomersLarge().then(data => setCustomers2(data)); - customerService.getCustomersLarge().then(data => setCustomers3(data)); + customerService.getCustomersLarge().then((data) => setCustomers1(data)); + customerService.getCustomersLarge().then((data) => setCustomers2(data)); + customerService.getCustomersLarge().then((data) => setCustomers3(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps const paginatorLeft = - ) + ); }, - 'NextPageLink': (options) => { + NextPageLink: (options) => { return ( - ) + ); }, - 'PageLinks': (options) => { + PageLinks: (options) => { if ((options.view.startPage === options.page && options.view.startPage !== 0) || (options.view.endPage === options.page && options.page + 1 !== options.totalPages)) { const className = classNames(options.className, { 'p-disabled': true }); - return ...; + return ( + + ... + + ); } return ( @@ -94,9 +96,9 @@ const DataTablePaginatorDemo = () => { {options.page + 1} - ) + ); }, - 'RowsPerPageDropdown': (options) => { + RowsPerPageDropdown: (options) => { const dropdownOptions = [ { label: 10, value: 10 }, { label: 20, value: 20 }, @@ -106,18 +108,17 @@ const DataTablePaginatorDemo = () => { return ; }, - 'CurrentPageReport': (options) => { + CurrentPageReport: (options) => { return ( - Go to onPageInputKeyDown(e, options)} onChange={onPageInputChange} /> + Go to onPageInputKeyDown(e, options)} onChange={onPageInputChange} /> - ) + ); } }; const template2 = { layout: 'RowsPerPageDropdown CurrentPageReport PrevPageLink NextPageLink', - 'RowsPerPageDropdown': (options) => { + RowsPerPageDropdown: (options) => { const dropdownOptions = [ { label: 10, value: 10 }, { label: 20, value: 20 }, @@ -126,17 +127,19 @@ const DataTablePaginatorDemo = () => { return ( - Items per page: + + Items per page:{' '} + ); }, - 'CurrentPageReport': (options) => { + CurrentPageReport: (options) => { return ( {options.first} - {options.last} of {options.totalRecords} - ) + ); } }; @@ -148,7 +151,9 @@ const DataTablePaginatorDemo = () => {
    -

    DataTable Paginator

    +

    + DataTable Paginator +

    Pagination is enabled by setting paginator property to true, rows attribute defines the number of rows per page and pageLinks specify the the number of page links to display.

    @@ -158,10 +163,17 @@ const DataTablePaginatorDemo = () => {
    Basic
    - + currentPageReportTemplate="Showing {first} to {last} of {totalRecords}" + rows={10} + rowsPerPageOptions={[10, 20, 50]} + paginatorLeft={paginatorLeft} + paginatorRight={paginatorRight} + > @@ -178,8 +190,7 @@ const DataTablePaginatorDemo = () => { - + @@ -191,14 +202,13 @@ const DataTablePaginatorDemo = () => {
    ); -} +}; export default DataTablePaginatorDemo; const DataTablePaginatorDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -392,7 +402,7 @@ export class DataTablePaginatorDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -569,7 +579,7 @@ const DataTablePaginatorDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -746,7 +756,7 @@ const DataTablePaginatorDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -933,15 +943,11 @@ const DataTablePaginatorDemo = () => { } ` } - } + }; return (
    - - { - useLiveEditorTabs({ name: 'DataTablePaginatorDemo', sources: sources, service: 'CustomerService', data: 'customers-large' }) - } - + {useLiveEditorTabs({ name: 'DataTablePaginatorDemo', sources: sources, service: 'CustomerService', data: 'customers-large' })}
    - ) -}) + ); +}); diff --git a/pages/datatable/reorder.js b/pages/datatable/reorder.js index 35f7295948..b447f6dae4 100644 --- a/pages/datatable/reorder.js +++ b/pages/datatable/reorder.js @@ -21,17 +21,17 @@ const DataTableReorderDemo = () => { const productService = new ProductService(); useEffect(() => { - productService.getProductsSmall().then(data => setProducts(data)); + productService.getProductsSmall().then((data) => setProducts(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps const onColReorder = () => { toast.current.show({ severity: 'success', summary: 'Column Reordered', life: 3000 }); - } + }; const onRowReorder = (e) => { setProducts(e.value); toast.current.show({ severity: 'success', summary: 'Rows Reordered', life: 3000 }); - } + }; const dynamicColumns = columns.map((col, i) => { return ; @@ -45,7 +45,9 @@ const DataTableReorderDemo = () => {
    -

    DataTable Reorder

    +

    + DataTable Reorder +

    Order of the columns and rows can be changed using drag and drop.

    @@ -66,14 +68,13 @@ const DataTableReorderDemo = () => {
    ); -} +}; export default DataTableReorderDemo; export const DataTableColReorderDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -138,7 +139,7 @@ export class DataTableReorderDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect, useRef } from 'react'; @@ -191,7 +192,7 @@ const DataTableReorderDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect, useRef } from 'react'; @@ -251,7 +252,7 @@ const DataTableReorderDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -319,15 +320,11 @@ const DataTableReorderDemo = () => { } ` } - } + }; return (
    - - { - useLiveEditorTabs({ name: 'DataTableReorderDemo', sources: sources, service: 'ProductService', data: 'products-small' }) - } - + {useLiveEditorTabs({ name: 'DataTableReorderDemo', sources: sources, service: 'ProductService', data: 'products-small' })}
    - ) -}) + ); +}); diff --git a/pages/datatable/responsive.js b/pages/datatable/responsive.js index f23e3e7434..280c2aa150 100644 --- a/pages/datatable/responsive.js +++ b/pages/datatable/responsive.js @@ -13,16 +13,16 @@ const DataTableResponsiveDemo = () => { const productService = new ProductService(); useEffect(() => { - productService.getProductsSmall().then(data => setProducts(data)); + productService.getProductsSmall().then((data) => setProducts(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps const statusTemplate = (rowData) => { - return {rowData.inventoryStatus}; - } + return {rowData.inventoryStatus}; + }; const ratingTemplate = (rowData) => { - return - } + return ; + }; return (
    @@ -32,9 +32,10 @@ const DataTableResponsiveDemo = () => {
    -

    DataTable Responsive

    -

    DataTable responsive layout can be achieved in two ways; - first approach is displaying a horizontal scrollbar for smaller screens and second one is defining a breakpoint to display the cells of a row as stacked.

    +

    + DataTable Responsive +

    +

    DataTable responsive layout can be achieved in two ways; first approach is displaying a horizontal scrollbar for smaller screens and second one is defining a breakpoint to display the cells of a row as stacked.

    @@ -67,14 +68,13 @@ const DataTableResponsiveDemo = () => {
    ); -} +}; export default DataTableResponsiveDemo; export const DataTableResponsiveDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -139,7 +139,7 @@ export class DataTableResponsiveDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -192,7 +192,7 @@ const DataTableResponsiveDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -245,7 +245,7 @@ const DataTableResponsiveDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -307,15 +307,11 @@ const DataTableResponsiveDemo = () => { } ` } - } + }; return (
    - - { - useLiveEditorTabs({ name: 'DataTableResponsiveDemo', sources: sources, service: 'ProductService', data: 'products-small' }) - } - + {useLiveEditorTabs({ name: 'DataTableResponsiveDemo', sources: sources, service: 'ProductService', data: 'products-small' })}
    - ) -}) + ); +}); diff --git a/pages/datatable/rowexpand.js b/pages/datatable/rowexpand.js index 99ac8343a0..e6d5b4d136 100644 --- a/pages/datatable/rowexpand.js +++ b/pages/datatable/rowexpand.js @@ -12,7 +12,6 @@ import Head from 'next/head'; import getConfig from 'next/config'; const DataTableRowExpansionDemo = () => { - const [products, setProducts] = useState([]); const [expandedRows, setExpandedRows] = useState(null); const toast = useRef(null); @@ -29,59 +28,59 @@ const DataTableRowExpansionDemo = () => { useEffect(() => { isMounted.current = true; - productService.getProductsWithOrdersSmall().then(data => setProducts(data)); + productService.getProductsWithOrdersSmall().then((data) => setProducts(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps const onRowExpand = (event) => { toast.current.show({ severity: 'info', summary: 'Product Expanded', detail: event.data.name, life: 3000 }); - } + }; const onRowCollapse = (event) => { toast.current.show({ severity: 'success', summary: 'Product Collapsed', detail: event.data.name, life: 3000 }); - } + }; const expandAll = () => { let _expandedRows = {}; - products.forEach(p => _expandedRows[`${p.id}`] = true); + products.forEach((p) => (_expandedRows[`${p.id}`] = true)); setExpandedRows(_expandedRows); - } + }; const collapseAll = () => { setExpandedRows(null); - } + }; const formatCurrency = (value) => { return value.toLocaleString('en-US', { style: 'currency', currency: 'USD' }); - } + }; const amountBodyTemplate = (rowData) => { return formatCurrency(rowData.amount); - } + }; const statusOrderBodyTemplate = (rowData) => { return {rowData.status}; - } + }; const searchBodyTemplate = () => { return
    ); - } + }; const header = (
    @@ -106,7 +105,6 @@ const DataTableRowExpansionDemo = () => {
    ); - return (
    @@ -115,7 +113,9 @@ const DataTableRowExpansionDemo = () => {
    -

    DataTable Row Expansion

    +

    + DataTable Row Expansion +

    A row can be expanded to display extra content.

    @@ -126,9 +126,17 @@ const DataTableRowExpansionDemo = () => {
    - setExpandedRows(e.data)} - onRowExpand={onRowExpand} onRowCollapse={onRowCollapse} responsiveLayout="scroll" - rowExpansionTemplate={rowExpansionTemplate} dataKey="id" header={header}> + setExpandedRows(e.data)} + onRowExpand={onRowExpand} + onRowCollapse={onRowCollapse} + responsiveLayout="scroll" + rowExpansionTemplate={rowExpansionTemplate} + dataKey="id" + header={header} + > @@ -143,14 +151,13 @@ const DataTableRowExpansionDemo = () => {
    ); -} +}; export default DataTableRowExpansionDemo; export const DataTableRowExpansionDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -297,7 +304,7 @@ export class DataTableRowExpansionDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect, useRef } from 'react'; @@ -424,7 +431,7 @@ const DataTableRowExpansionDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect, useRef } from 'react'; @@ -551,7 +558,7 @@ const DataTableRowExpansionDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -705,15 +712,11 @@ const DataTableRowExpansionDemo = () => { } ` } - } + }; return (
    - - { - useLiveEditorTabs({ name: 'DataTableRowExpansionDemo', sources: sources, service: 'ProductService', data: 'products-orders-small', extFiles: extFiles }) - } - + {useLiveEditorTabs({ name: 'DataTableRowExpansionDemo', sources: sources, service: 'ProductService', data: 'products-orders-small', extFiles: extFiles })}
    - ) -}) + ); +}); diff --git a/pages/datatable/rowgroup.js b/pages/datatable/rowgroup.js index a6290cb22c..f9a690c799 100644 --- a/pages/datatable/rowgroup.js +++ b/pages/datatable/rowgroup.js @@ -10,7 +10,6 @@ import Head from 'next/head'; import getConfig from 'next/config'; const DataTableRowGroupDemo = () => { - const [customers, setCustomers] = useState([]); const [expandedRows, setExpandedRows] = useState([]); const toast = useRef(null); @@ -18,56 +17,76 @@ const DataTableRowGroupDemo = () => { const contextPath = getConfig().publicRuntimeConfig.contextPath; useEffect(() => { - customerService.getCustomersMedium().then(data => setCustomers(data)); + customerService.getCustomersMedium().then((data) => setCustomers(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps const headerTemplate = (data) => { return ( - {data.representative.name} e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} width="32" style={{ verticalAlign: 'middle' }} /> + {data.representative.name} (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} + width="32" + style={{ verticalAlign: 'middle' }} + /> {data.representative.name} ); - } + }; const footerTemplate = (data) => { return ( - Total Customers + + Total Customers + {calculateCustomerTotal(data.representative.name)} ); - } + }; const countryBodyTemplate = (rowData) => { return ( - {rowData.country.name} e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} className={`flag flag-${rowData.country.code}`} width="30" /> + {rowData.country.name} (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} + className={`flag flag-${rowData.country.code}`} + width="30" + /> {rowData.country.name} ); - } + }; const statusBodyTemplate = (rowData) => { return {rowData.status}; - } + }; const representativeBodyTemplate = (rowData) => { return ( - {rowData.representative.name} e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} width="32" style={{ verticalAlign: 'middle' }} /> + {rowData.representative.name} (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} + width="32" + style={{ verticalAlign: 'middle' }} + /> {rowData.representative.name} - ) - } + ); + }; const onRowGroupExpand = (event) => { toast.current.show({ severity: 'info', summary: 'Row Group Expanded', detail: 'Value: ' + event.data.representative.name, life: 3000 }); - } + }; const onRowGroupCollapse = (event) => { toast.current.show({ severity: 'success', summary: 'Row Group Collapsed', detail: 'Value: ' + event.data.representative.name, life: 3000 }); - } + }; const calculateCustomerTotal = (name) => { let total = 0; @@ -81,7 +100,7 @@ const DataTableRowGroupDemo = () => { } return total; - } + }; return (
    @@ -91,7 +110,9 @@ const DataTableRowGroupDemo = () => {
    -

    DataTable Row Grouping

    +

    + DataTable Row Grouping +

    Rows can either be grouped by a separate grouping row or using rowspan.

    @@ -104,9 +125,19 @@ const DataTableRowGroupDemo = () => {
    Subheader Grouping

    Group customers by their representative.

    - + @@ -118,11 +149,22 @@ const DataTableRowGroupDemo = () => {
    Expandable Row Groups

    Group customers by their representative.

    - setExpandedRows(e.data)} - onRowExpand={onRowGroupExpand} onRowCollapse={onRowGroupCollapse} - rowGroupHeaderTemplate={headerTemplate} rowGroupFooterTemplate={footerTemplate}> + setExpandedRows(e.data)} + onRowExpand={onRowGroupExpand} + onRowCollapse={onRowGroupCollapse} + rowGroupHeaderTemplate={headerTemplate} + rowGroupFooterTemplate={footerTemplate} + > @@ -133,8 +175,7 @@ const DataTableRowGroupDemo = () => {
    RowSpan Grouping
    - + options.rowIndex + 1}> @@ -149,14 +190,13 @@ const DataTableRowGroupDemo = () => {
    ); -} +}; export default DataTableRowGroupDemo; export const DataTableRowGroupDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -305,7 +345,7 @@ export class DataTableRowGroupDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect, useRef } from 'react'; @@ -440,7 +480,7 @@ const DataTableRowGroupDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect, useRef } from 'react'; @@ -575,7 +615,7 @@ const DataTableRowGroupDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -737,15 +777,11 @@ const DataTableRowGroupDemo = () => { } ` } - } + }; return (
    - - { - useLiveEditorTabs({ name: 'DataTableRowGroupDemo', sources: sources, service: 'CustomerService', data: 'customers-medium', extFiles: extFiles }) - } - + {useLiveEditorTabs({ name: 'DataTableRowGroupDemo', sources: sources, service: 'CustomerService', data: 'customers-medium', extFiles: extFiles })}
    - ) -}) + ); +}); diff --git a/pages/datatable/scroll.js b/pages/datatable/scroll.js index c28e1fa5a3..63bfbe1011 100644 --- a/pages/datatable/scroll.js +++ b/pages/datatable/scroll.js @@ -12,8 +12,6 @@ import Head from 'next/head'; import getConfig from 'next/config'; const DataTableScrollDemo = () => { - - const [customers1, setCustomers1] = useState([]); const [customers2, setCustomers2] = useState([]); const [customersGrouped, setCustomersGrouped] = useState(null); @@ -28,26 +26,35 @@ const DataTableScrollDemo = () => { useEffect(() => { setLoading(true); - customerService.getCustomersLarge().then(data => { setCustomers1(data); setLoading(false); }); - customerService.getCustomersMedium().then(data => { setCustomers2(data) }); - customerService.getCustomersMedium().then(data => { setUnlockedCustomers(data) }); - customerService.getCustomersMedium().then(data => { setCustomersGrouped(data) }); + customerService.getCustomersLarge().then((data) => { + setCustomers1(data); + setLoading(false); + }); + customerService.getCustomersMedium().then((data) => { + setCustomers2(data); + }); + customerService.getCustomersMedium().then((data) => { + setUnlockedCustomers(data); + }); + customerService.getCustomersMedium().then((data) => { + setCustomersGrouped(data); + }); setLockedCustomers([ { id: 5135, - name: "Geraldine Bisset", + name: 'Geraldine Bisset', country: { - name: "France", - code: "fr" + name: 'France', + code: 'fr' }, - company: "Bisset Group", - status: "proposal", - date: "2019-05-05", + company: 'Bisset Group', + status: 'proposal', + date: '2019-05-05', activity: 0, representative: { - name: "Amy Elsner", - image: "amyelsner.png" + name: 'Amy Elsner', + image: 'amyelsner.png' } } ]); @@ -55,64 +62,72 @@ const DataTableScrollDemo = () => { const openDialog = () => { setDialogVisible(true); - } + }; const closeDialog = () => { setDialogVisible(false); - } + }; const dialogFooterTemplate = () => { - return
    - + @@ -238,9 +255,18 @@ const DataTableScrollDemo = () => {
    Subheader Grouping
    - + @@ -253,14 +279,13 @@ const DataTableScrollDemo = () => {
    ); -} +}; export default DataTableScrollDemo; export const DataTableScrollDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -518,7 +543,7 @@ export class DataTableScrollDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect, useRef } from 'react'; @@ -756,7 +781,7 @@ const DataTableScrollDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect, useRef } from 'react'; @@ -994,7 +1019,7 @@ const DataTableScrollDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -1242,7 +1267,7 @@ const DataTableScrollDemo = () => { } ` } - } + }; const extFiles = { 'demo/DataTableDemo.css': { @@ -1256,15 +1281,11 @@ const DataTableScrollDemo = () => { } ` } - } + }; return (
    - - { - useLiveEditorTabs({ name: 'DataTableScrollDemo', sources: sources, service: 'CustomerService', data: 'customers-large,customers-medium', extFiles: extFiles }) - } - + {useLiveEditorTabs({ name: 'DataTableScrollDemo', sources: sources, service: 'CustomerService', data: 'customers-large,customers-medium', extFiles: extFiles })}
    - ) -}) + ); +}); diff --git a/pages/datatable/selection.js b/pages/datatable/selection.js index b8b9f204b6..79a58de443 100644 --- a/pages/datatable/selection.js +++ b/pages/datatable/selection.js @@ -9,7 +9,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const DataTableSelectionDemo = () => { - const [products, setProducts] = useState([]); const [selectedProduct1, setSelectedProduct1] = useState(null); const [selectedProduct2, setSelectedProduct2] = useState(null); @@ -31,31 +30,30 @@ const DataTableSelectionDemo = () => { const [selectedProducts12, setSelectedProducts12] = useState(null); const toast = useRef(null); - useEffect(() => { const productService = new ProductService(); - productService.getProductsSmall().then(data => setProducts(data)); + productService.getProductsSmall().then((data) => setProducts(data)); }, []); const onRowSelect = (event) => { toast.current.show({ severity: 'info', summary: 'Product Selected', detail: `Name: ${event.data.name}`, life: 3000 }); - } + }; const onRowUnselect = (event) => { toast.current.show({ severity: 'warn', summary: 'Product Unselected', detail: `Name: ${event.data.name}`, life: 3000 }); - } + }; const onCellSelect = (event) => { toast.current.show({ severity: 'info', summary: `Item Selected In Product`, detail: `${toCapitalize(event.field)}: ${event.value}`, life: 3000 }); - } + }; const onCellUnselect = (event) => { toast.current.show({ severity: 'warn', summary: `Item Unselected In Product`, detail: `${toCapitalize(event.field)}: ${event.value}`, life: 3000 }); - } + }; const toCapitalize = (str) => { return str.charAt(0).toUpperCase() + str.slice(1); - } + }; const isSelectable = (value, field) => { let isSelectable = true; @@ -72,26 +70,26 @@ const DataTableSelectionDemo = () => { break; } return isSelectable; - } + }; const isRowSelectable = (event) => { const data = event.data; return isSelectable(data.quantity, 'quantity'); - } + }; const isCellSelectable = (event) => { const data = event.data; return isSelectable(data.value, data.field); - } + }; const rowClassName = (data) => { return isSelectable(data.quantity, 'quantity') ? '' : 'p-disabled'; - } + }; const cellClassName = (value, options) => { const { field } = options.column.props; return isSelectable(value, field) ? '' : 'p-disabled'; - } + }; return (
    @@ -101,9 +99,13 @@ const DataTableSelectionDemo = () => {
    -

    DataTable Selection

    -

    DataTable provides single, multiple, radiobutton and checkbox selection modes. Selected rows or cells are bound to the selection property and onRowSelect-onRowUnselect/onCellSelect-onCellUnselect - events are provided as optional callbacks. In addition built-in radio button and checkbox based selections are available as alternatives.

    +

    + DataTable Selection +

    +

    + DataTable provides single, multiple, radiobutton and checkbox selection modes. Selected rows or cells are bound to the selection property and onRowSelect-onRowUnselect/onCellSelect-onCellUnselect events are provided as + optional callbacks. In addition built-in radio button and checkbox based selections are available as alternatives. +

    @@ -117,7 +119,7 @@ const DataTableSelectionDemo = () => {

    In single mode, a row or cell is selected on its click event. If it is already selected then it gets unselected using meta key.

    Row Selection
    - setSelectedProduct1(e.value)} dataKey="id" responsiveLayout="scroll"> + setSelectedProduct1(e.value)} dataKey="id" responsiveLayout="scroll"> @@ -125,7 +127,7 @@ const DataTableSelectionDemo = () => {
    Cell Selection
    - setSelectedProduct2(e.value)} dataKey="id" responsiveLayout="scroll"> + setSelectedProduct2(e.value)} dataKey="id" responsiveLayout="scroll"> @@ -135,11 +137,13 @@ const DataTableSelectionDemo = () => {
    Multiple
    -

    In multiple mode, selection binding should be an array. For touch enabled devices, selection is managed by tapping and for other devices metakey or shiftkey are required. - Setting metaKeySelection property as false enables multiple selection without meta key. In addition, the rectangular selection can be dragged over the desired rows or cells thanks to the dragSelection property. In this way, a range of rows or cells can be selected.

    +

    + In multiple mode, selection binding should be an array. For touch enabled devices, selection is managed by tapping and for other devices metakey or shiftkey are required. Setting metaKeySelection property as false enables + multiple selection without meta key. In addition, the rectangular selection can be dragged over the desired rows or cells thanks to the dragSelection property. In this way, a range of rows or cells can be selected. +

    Row Selection with MetaKey
    - setSelectedProducts1(e.value)} dataKey="id" responsiveLayout="scroll"> + setSelectedProducts1(e.value)} dataKey="id" responsiveLayout="scroll"> @@ -147,7 +151,7 @@ const DataTableSelectionDemo = () => {
    Row Selection without MetaKey
    - setSelectedProducts2(e.value)} dataKey="id" responsiveLayout="scroll"> + setSelectedProducts2(e.value)} dataKey="id" responsiveLayout="scroll"> @@ -155,7 +159,7 @@ const DataTableSelectionDemo = () => {
    Row Selection with Drag Selection
    - setSelectedProducts3(e.value)} dataKey="id" responsiveLayout="scroll"> + setSelectedProducts3(e.value)} dataKey="id" responsiveLayout="scroll"> @@ -163,7 +167,7 @@ const DataTableSelectionDemo = () => {
    Cell Selection with MetaKey
    - setSelectedProducts4(e.value)} dataKey="id" responsiveLayout="scroll"> + setSelectedProducts4(e.value)} dataKey="id" responsiveLayout="scroll"> @@ -171,7 +175,7 @@ const DataTableSelectionDemo = () => {
    Cell Selection without MetaKey
    - setSelectedProducts5(e.value)} dataKey="id" responsiveLayout="scroll"> + setSelectedProducts5(e.value)} dataKey="id" responsiveLayout="scroll"> @@ -179,7 +183,7 @@ const DataTableSelectionDemo = () => {
    Cell Selection with Drag Selection
    - setSelectedProducts6(e.value)} dataKey="id" responsiveLayout="scroll"> + setSelectedProducts6(e.value)} dataKey="id" responsiveLayout="scroll"> @@ -192,8 +196,16 @@ const DataTableSelectionDemo = () => {
    Row Selection

    onRowSelect and onRowUnselects are available as selection events.

    - setSelectedProduct3(e.value)} dataKey="id" responsiveLayout="scroll" - onRowSelect={onRowSelect} onRowUnselect={onRowUnselect}> + setSelectedProduct3(e.value)} + dataKey="id" + responsiveLayout="scroll" + onRowSelect={onRowSelect} + onRowUnselect={onRowUnselect} + > @@ -202,8 +214,17 @@ const DataTableSelectionDemo = () => {
    Cell Selection

    onCellSelect and onCellUnselects are available as selection events.

    - setSelectedProduct4(e.value)} dataKey="id" responsiveLayout="scroll" - onCellSelect={onCellSelect} onCellUnselect={onCellUnselect}> + setSelectedProduct4(e.value)} + dataKey="id" + responsiveLayout="scroll" + onCellSelect={onCellSelect} + onCellUnselect={onCellUnselect} + > @@ -216,7 +237,7 @@ const DataTableSelectionDemo = () => {

    Single selection can also be handled using radio buttons and rows by enabling the selectionMode property of column as "single".

    Row and RadioButton Selection
    - setSelectedProduct5(e.value)} dataKey="id" responsiveLayout="scroll"> + setSelectedProduct5(e.value)} dataKey="id" responsiveLayout="scroll"> @@ -225,7 +246,7 @@ const DataTableSelectionDemo = () => {
    RadioButton-Only Selection
    - setSelectedProduct6(e.value)} dataKey="id" responsiveLayout="scroll"> + setSelectedProduct6(e.value)} dataKey="id" responsiveLayout="scroll"> @@ -238,7 +259,7 @@ const DataTableSelectionDemo = () => {
    Checkbox
    Row and Checkbox Selection
    - setSelectedProducts7(e.value)} dataKey="id" responsiveLayout="scroll"> + setSelectedProducts7(e.value)} dataKey="id" responsiveLayout="scroll"> @@ -247,7 +268,7 @@ const DataTableSelectionDemo = () => {
    Checkbox-Only Selection
    - setSelectedProducts8(e.value)} dataKey="id" responsiveLayout="scroll"> + setSelectedProducts8(e.value)} dataKey="id" responsiveLayout="scroll"> @@ -256,8 +277,7 @@ const DataTableSelectionDemo = () => {
    Page-Only Selection
    - setSelectedProducts9(e.value)} dataKey="id" responsiveLayout="scroll" - selectionPageOnly paginator rows={5}> + setSelectedProducts9(e.value)} dataKey="id" responsiveLayout="scroll" selectionPageOnly paginator rows={5}> @@ -271,8 +291,17 @@ const DataTableSelectionDemo = () => {

    It can be checked whether a row or cell can be selected or not according to the specified conditions.

    Row Selection
    - setSelectedProducts10(e.value)} dataKey="id" responsiveLayout="scroll" - isDataSelectable={isRowSelectable} rowClassName={rowClassName}> + setSelectedProducts10(e.value)} + dataKey="id" + responsiveLayout="scroll" + isDataSelectable={isRowSelectable} + rowClassName={rowClassName} + > @@ -280,8 +309,18 @@ const DataTableSelectionDemo = () => {
    Cell Selection
    - setSelectedProducts11(e.value)} dataKey="id" responsiveLayout="scroll" - isDataSelectable={isCellSelectable} cellClassName={cellClassName}> + setSelectedProducts11(e.value)} + dataKey="id" + responsiveLayout="scroll" + isDataSelectable={isCellSelectable} + cellClassName={cellClassName} + > @@ -289,8 +328,7 @@ const DataTableSelectionDemo = () => {
    Checkbox Selection
    - setSelectedProducts12(e.value)} dataKey="id" responsiveLayout="scroll" - isDataSelectable={isRowSelectable} rowClassName={rowClassName}> + setSelectedProducts12(e.value)} dataKey="id" responsiveLayout="scroll" isDataSelectable={isRowSelectable} rowClassName={rowClassName}> @@ -303,14 +341,13 @@ const DataTableSelectionDemo = () => {
    ); -} +}; export default DataTableSelectionDemo; export const DataTableSelectionDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -615,7 +652,7 @@ export class DataTableSelectionDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useEffect, useState, useRef } from 'react'; @@ -905,7 +942,7 @@ const DataTableSelectionDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useEffect, useState, useRef } from 'react'; @@ -1195,7 +1232,7 @@ const DataTableSelectionDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -1506,16 +1543,11 @@ const DataTableSelectionDemo = () => { } ` } - } + }; return (
    - - { - useLiveEditorTabs({ name: 'DataTableSelectionDemo', sources: sources, service: 'ProductService', data: 'products-small', extFiles: extFiles }) - } - + {useLiveEditorTabs({ name: 'DataTableSelectionDemo', sources: sources, service: 'ProductService', data: 'products-small', extFiles: extFiles })}
    - ) - -}) + ); +}); diff --git a/pages/datatable/size.js b/pages/datatable/size.js index 56f8129d0a..55647058f6 100644 --- a/pages/datatable/size.js +++ b/pages/datatable/size.js @@ -8,15 +8,13 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const DataTableSizeDemo = () => { - const [products, setProducts] = useState(null); const productService = new ProductService(); useEffect(() => { - productService.getProductsSmall().then(data => setProducts(data)); + productService.getProductsSmall().then((data) => setProducts(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps - return (
    @@ -25,7 +23,9 @@ const DataTableSizeDemo = () => {
    -

    DataTable Size

    +

    + DataTable Size +

    In addition to a regular table, alternatives with alternative sizes are available.

    @@ -64,14 +64,13 @@ const DataTableSizeDemo = () => {
    ); -} +}; export default DataTableSizeDemo; export const DataTableSizeDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -130,7 +129,7 @@ export class DataTableSizeDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -179,7 +178,7 @@ const DataTableSizeDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -228,7 +227,7 @@ const DataTableSizeDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -284,16 +283,11 @@ const DataTableSizeDemo = () => { } ` } - } - + }; return (
    - - { - useLiveEditorTabs({ name: 'DataTableSizeDemo', sources: sources, service: 'ProductService', data: 'products-small' }) - } - + {useLiveEditorTabs({ name: 'DataTableSizeDemo', sources: sources, service: 'ProductService', data: 'products-small' })}
    - ) -}) + ); +}); diff --git a/pages/datatable/sort.js b/pages/datatable/sort.js index 3e9f0dea6d..ba3e661ec4 100644 --- a/pages/datatable/sort.js +++ b/pages/datatable/sort.js @@ -13,16 +13,16 @@ const DataTableSortDemo = () => { const productService = new ProductService(); useEffect(() => { - productService.getProductsSmall().then(data => setProducts(data)); + productService.getProductsSmall().then((data) => setProducts(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps const formatCurrency = (value) => { return value.toLocaleString('en-US', { style: 'currency', currency: 'USD' }); - } + }; const priceBodyTemplate = (rowData) => { return formatCurrency(rowData.price); - } + }; return (
    @@ -32,9 +32,10 @@ const DataTableSortDemo = () => {
    -

    DataTable Sort

    -

    Enabling sortable property on a column is enough to make a column sortable. Multiple column sorting is enabled using sortMode property and - used with metaKey.

    +

    + DataTable Sort +

    +

    Enabling sortable property on a column is enough to make a column sortable. Multiple column sorting is enabled using sortMode property and used with metaKey.

    @@ -102,14 +103,13 @@ const DataTableSortDemo = () => {
    ); -} +}; export default DataTableSortDemo; export const DataTableSortDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -208,7 +208,7 @@ export class DataTableSortDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -296,7 +296,7 @@ const DataTableSortDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -384,7 +384,7 @@ const DataTableSortDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -479,16 +479,11 @@ const DataTableSortDemo = () => { } ` } - } - + }; return (
    - - { - useLiveEditorTabs({ name: 'DataTableSortDemo', sources: sources, service: 'ProductService', data: 'products-small' }) - } - + {useLiveEditorTabs({ name: 'DataTableSortDemo', sources: sources, service: 'ProductService', data: 'products-small' })}
    - ) -}) + ); +}); diff --git a/pages/datatable/state.js b/pages/datatable/state.js index f6c70b2ab3..8201c24be8 100644 --- a/pages/datatable/state.js +++ b/pages/datatable/state.js @@ -13,111 +13,119 @@ import Head from 'next/head'; import getConfig from 'next/config'; const DataTableStateDemo = () => { - const [customers, setCustomers] = useState(null); const [filters1, setFilters1] = useState({ - 'global': { value: null, matchMode: FilterMatchMode.CONTAINS }, - 'name': { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.STARTS_WITH }] }, + global: { value: null, matchMode: FilterMatchMode.CONTAINS }, + name: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.STARTS_WITH }] }, 'country.name': { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.STARTS_WITH }] }, - 'representative': { value: null, matchMode: FilterMatchMode.IN }, - 'status': { operator: FilterOperator.OR, constraints: [{ value: null, matchMode: FilterMatchMode.EQUALS }] } + representative: { value: null, matchMode: FilterMatchMode.IN }, + status: { operator: FilterOperator.OR, constraints: [{ value: null, matchMode: FilterMatchMode.EQUALS }] } }); const [filters2, setFilters2] = useState({ - 'global': { value: null, matchMode: FilterMatchMode.CONTAINS }, - 'name': { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.STARTS_WITH }] }, + global: { value: null, matchMode: FilterMatchMode.CONTAINS }, + name: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.STARTS_WITH }] }, 'country.name': { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.STARTS_WITH }] }, - 'representative': { value: null, matchMode: FilterMatchMode.IN }, - 'status': { operator: FilterOperator.OR, constraints: [{ value: null, matchMode: FilterMatchMode.EQUALS }] } + representative: { value: null, matchMode: FilterMatchMode.IN }, + status: { operator: FilterOperator.OR, constraints: [{ value: null, matchMode: FilterMatchMode.EQUALS }] } }); const [filters3, setFilters3] = useState({ - 'global': { value: null, matchMode: FilterMatchMode.CONTAINS }, - 'name': { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.STARTS_WITH }] }, + global: { value: null, matchMode: FilterMatchMode.CONTAINS }, + name: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.STARTS_WITH }] }, 'country.name': { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.STARTS_WITH }] }, - 'representative': { value: null, matchMode: FilterMatchMode.IN }, - 'status': { operator: FilterOperator.OR, constraints: [{ value: null, matchMode: FilterMatchMode.EQUALS }] } + representative: { value: null, matchMode: FilterMatchMode.IN }, + status: { operator: FilterOperator.OR, constraints: [{ value: null, matchMode: FilterMatchMode.EQUALS }] } }); const [selectedCustomer1, setSelectedCustomer1] = useState(null); const [selectedCustomer2, setSelectedCustomer2] = useState(null); const [selectedCustomer3, setSelectedCustomer3] = useState(null); const representatives = [ - { name: "Amy Elsner", image: 'amyelsner.png' }, - { name: "Anna Fali", image: 'annafali.png' }, - { name: "Asiya Javayant", image: 'asiyajavayant.png' }, - { name: "Bernardo Dominic", image: 'bernardodominic.png' }, - { name: "Elwin Sharvill", image: 'elwinsharvill.png' }, - { name: "Ioni Bowcher", image: 'ionibowcher.png' }, - { name: "Ivan Magalhaes", image: 'ivanmagalhaes.png' }, - { name: "Onyama Limba", image: 'onyamalimba.png' }, - { name: "Stephen Shaw", image: 'stephenshaw.png' }, - { name: "XuXue Feng", image: 'xuxuefeng.png' } - ]; - const statuses = [ - 'unqualified', 'qualified', 'new', 'negotiation', 'renewal', 'proposal' + { name: 'Amy Elsner', image: 'amyelsner.png' }, + { name: 'Anna Fali', image: 'annafali.png' }, + { name: 'Asiya Javayant', image: 'asiyajavayant.png' }, + { name: 'Bernardo Dominic', image: 'bernardodominic.png' }, + { name: 'Elwin Sharvill', image: 'elwinsharvill.png' }, + { name: 'Ioni Bowcher', image: 'ionibowcher.png' }, + { name: 'Ivan Magalhaes', image: 'ivanmagalhaes.png' }, + { name: 'Onyama Limba', image: 'onyamalimba.png' }, + { name: 'Stephen Shaw', image: 'stephenshaw.png' }, + { name: 'XuXue Feng', image: 'xuxuefeng.png' } ]; + const statuses = ['unqualified', 'qualified', 'new', 'negotiation', 'renewal', 'proposal']; const customerService = new CustomerService(); const contextPath = getConfig().publicRuntimeConfig.contextPath; - const filtersMap = { - 'filters1': { value: filters1, callback: setFilters1 }, - 'filters2': { value: filters2, callback: setFilters2 }, - 'filters3': { value: filters3, callback: setFilters3 }, + filters1: { value: filters1, callback: setFilters1 }, + filters2: { value: filters2, callback: setFilters2 }, + filters3: { value: filters3, callback: setFilters3 } }; useEffect(() => { - customerService.getCustomersMedium().then(data => setCustomers(data)); + customerService.getCustomersMedium().then((data) => setCustomers(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps const onCustomSaveState = (state) => { sessionStorage.setItem('dt-state-demo-custom', JSON.stringify(state)); - } + }; const onCustomRestoreState = () => { return JSON.parse(sessionStorage.getItem('dt-state-demo-custom')); - } + }; const countryBodyTemplate = (rowData) => { return ( - {rowData.country.code} e.target.src='https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} className={`flag flag-${rowData.country.code}`} width="30" /> + {rowData.country.code} (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} + className={`flag flag-${rowData.country.code}`} + width="30" + /> {rowData.country.name} ); - } + }; const representativeBodyTemplate = (rowData) => { return ( - {rowData.representative.name} e.target.src='https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} width="32" style={{ verticalAlign: 'middle' }} /> + {rowData.representative.name} (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} + width="32" + style={{ verticalAlign: 'middle' }} + /> {rowData.representative.name} ); - } + }; const representativeFilterTemplate = (options) => { return options.filterCallback(e.value)} optionLabel="name" placeholder="Any" className="p-column-filter" />; - } + }; const representativesItemTemplate = (option) => { return (
    - {option.name} e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} width={32} style={{ verticalAlign: 'middle' }} /> + {option.name} (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} width={32} style={{ verticalAlign: 'middle' }} /> {option.name}
    ); - } + }; const statusBodyTemplate = (rowData) => { return {rowData.status}; - } + }; const statusFilterTemplate = (options) => { return options.filterCallback(e.value, options.index)} itemTemplate={statusItemTemplate} placeholder="Select a Status" className="p-column-filter" showClear />; - } + }; const statusItemTemplate = (option) => { return {option}; - } + }; const onGlobalFilterChange = (event, filtersKey) => { const value = event.target.value; @@ -125,7 +133,7 @@ const DataTableStateDemo = () => { filters['global'].value = value; filtersMap[filtersKey].callback(filters); - } + }; const renderHeader = (filtersKey) => { const filters = filtersMap[`${filtersKey}`].value; @@ -137,7 +145,7 @@ const DataTableStateDemo = () => { onGlobalFilterChange(e, filtersKey)} placeholder="Global Search" /> ); - } + }; const header1 = renderHeader('filters1'); const header2 = renderHeader('filters2'); @@ -151,9 +159,10 @@ const DataTableStateDemo = () => {
    -

    DataTable State

    -

    Stateful table allows keeping the state such as page, sort and filtering either at local storage or session storage so that when the page is visited again, - table would render the data using its last settings.

    +

    + DataTable State +

    +

    Stateful table allows keeping the state such as page, sort and filtering either at local storage or session storage so that when the page is visited again, table would render the data using its last settings.

    @@ -162,36 +171,106 @@ const DataTableStateDemo = () => {
    Session Storage
    - setFilters1(e.filters)} - selection={selectedCustomer1} onSelectionChange={e => setSelectedCustomer1(e.value)} selectionMode="single" dataKey="id" responsiveLayout="scroll" - stateStorage="session" stateKey="dt-state-demo-session" emptyMessage="No customers found."> + setFilters1(e.filters)} + selection={selectedCustomer1} + onSelectionChange={(e) => setSelectedCustomer1(e.value)} + selectionMode="single" + dataKey="id" + responsiveLayout="scroll" + stateStorage="session" + stateKey="dt-state-demo-session" + emptyMessage="No customers found." + > - +
    Local Storage
    - setFilters2(e.filters)} - selection={selectedCustomer2} onSelectionChange={e => setSelectedCustomer2(e.value)} selectionMode="single" dataKey="id" responsiveLayout="scroll" - stateStorage="local" stateKey="dt-state-demo-local" emptyMessage="No customers found."> + setFilters2(e.filters)} + selection={selectedCustomer2} + onSelectionChange={(e) => setSelectedCustomer2(e.value)} + selectionMode="single" + dataKey="id" + responsiveLayout="scroll" + stateStorage="local" + stateKey="dt-state-demo-local" + emptyMessage="No customers found." + > - +
    Custom Storage
    - setFilters3(e.filters)} - selection={selectedCustomer3} onSelectionChange={e => setSelectedCustomer3(e.value)} selectionMode="single" dataKey="id" responsiveLayout="scroll" - stateStorage="custom" customSaveState={onCustomSaveState} customRestoreState={onCustomRestoreState} emptyMessage="No customers found."> + setFilters3(e.filters)} + selection={selectedCustomer3} + onSelectionChange={(e) => setSelectedCustomer3(e.value)} + selectionMode="single" + dataKey="id" + responsiveLayout="scroll" + stateStorage="custom" + customSaveState={onCustomSaveState} + customRestoreState={onCustomRestoreState} + emptyMessage="No customers found." + > - +
    @@ -200,14 +279,13 @@ const DataTableStateDemo = () => {
    ); -} +}; export default DataTableStateDemo; export const DataTableStateDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -395,7 +473,7 @@ export class DataTableStateDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -578,7 +656,7 @@ const DataTableStateDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -761,7 +839,7 @@ const DataTableStateDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -956,16 +1034,11 @@ const DataTableStateDemo = () => { } ` } - } - + }; return (
    - - { - useLiveEditorTabs({ name: 'DataTableStateDemo', sources: sources, service: 'CustomerService', data: 'customers-medium' }) - } - + {useLiveEditorTabs({ name: 'DataTableStateDemo', sources: sources, service: 'CustomerService', data: 'customers-medium' })}
    - ) -}) + ); +}); diff --git a/pages/datatable/striped.js b/pages/datatable/striped.js index f4af5f7df1..5d40ba7a21 100644 --- a/pages/datatable/striped.js +++ b/pages/datatable/striped.js @@ -12,10 +12,9 @@ const DataTableStripedDemo = () => { const productService = new ProductService(); useEffect(() => { - productService.getProductsSmall().then(data => setProducts(data)); + productService.getProductsSmall().then((data) => setProducts(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps - return (
    @@ -24,8 +23,12 @@ const DataTableStripedDemo = () => {
    -

    DataTable Striped Rows

    -

    Adding stripedRows displays rows with alternating colors.

    +

    + DataTable Striped Rows +

    +

    + Adding stripedRows displays rows with alternating colors. +

    @@ -45,14 +48,13 @@ const DataTableStripedDemo = () => {
    ); -} +}; export default DataTableStripedDemo; export const DataTableStripedDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -93,7 +95,7 @@ export class DataTableStripedDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -124,7 +126,7 @@ const DataTableStripedDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -155,7 +157,7 @@ const DataTableStripedDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -193,15 +195,11 @@ const DataTableStripedDemo = () => { } ` } - } + }; return (
    - - { - useLiveEditorTabs({ name: 'DataTableStripedDemo', sources: sources, service: 'ProductService', data: 'products-small' }) - } - + {useLiveEditorTabs({ name: 'DataTableStripedDemo', sources: sources, service: 'ProductService', data: 'products-small' })}
    - ) -}) + ); +}); diff --git a/pages/datatable/style.js b/pages/datatable/style.js index f223294699..b92daaea8e 100644 --- a/pages/datatable/style.js +++ b/pages/datatable/style.js @@ -13,28 +13,24 @@ const DataTableStyleDemo = () => { const productService = new ProductService(); useEffect(() => { - productService.getProductsSmall().then(data => setProducts(data)); + productService.getProductsSmall().then((data) => setProducts(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps const rowClass = (data) => { return { 'row-accessories': data.category === 'Accessories' - } - } + }; + }; const stockBodyTemplate = (rowData) => { const stockClassName = classNames({ - 'outofstock': rowData.quantity === 0, - 'lowstock': rowData.quantity > 0 && rowData.quantity < 10, - 'instock': rowData.quantity > 10 + outofstock: rowData.quantity === 0, + lowstock: rowData.quantity > 0 && rowData.quantity < 10, + instock: rowData.quantity > 10 }); - return ( -
    - {rowData.quantity} -
    - ); - } + return
    {rowData.quantity}
    ; + }; return (
    @@ -44,7 +40,9 @@ const DataTableStyleDemo = () => {
    -

    DataTable Styling

    +

    + DataTable Styling +

    Particular rows and cells can be styled based on data.

    @@ -65,14 +63,13 @@ const DataTableStyleDemo = () => {
    ); -} +}; export default DataTableStyleDemo; export const DataTableStyleDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -137,7 +134,7 @@ export class DataTableStyleDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -190,7 +187,7 @@ const DataTableStyleDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -243,7 +240,7 @@ const DataTableStyleDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -329,15 +326,11 @@ const DataTableStyleDemo = () => { } ` } - } + }; return (
    - - { - useLiveEditorTabs({ name: 'DataTableStyleDemo', sources: sources, service: 'ProductService', data: 'products-small', extFiles: extFiles }) - } - + {useLiveEditorTabs({ name: 'DataTableStyleDemo', sources: sources, service: 'ProductService', data: 'products-small', extFiles: extFiles })}
    - ) -}) + ); +}); diff --git a/pages/datatable/templating.js b/pages/datatable/templating.js index 054160a11f..d2b73eb9f2 100644 --- a/pages/datatable/templating.js +++ b/pages/datatable/templating.js @@ -11,34 +11,33 @@ import Head from 'next/head'; import getConfig from 'next/config'; const DataTableTemplatingDemo = () => { - const [products, setProducts] = useState([]); const productService = new ProductService(); const contextPath = getConfig().publicRuntimeConfig.contextPath; useEffect(() => { - productService.getProductsSmall().then(data => setProducts(data)); + productService.getProductsSmall().then((data) => setProducts(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps const formatCurrency = (value) => { return value.toLocaleString('en-US', { style: 'currency', currency: 'USD' }); - } + }; const imageBodyTemplate = (rowData) => { - return e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} alt={rowData.image} className="product-image" />; - } + return (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} alt={rowData.image} className="product-image" />; + }; const priceBodyTemplate = (rowData) => { return formatCurrency(rowData.price); - } + }; const ratingBodyTemplate = (rowData) => { return ; - } + }; const statusBodyTemplate = (rowData) => { return {rowData.inventoryStatus}; - } + }; const header = (
    @@ -56,7 +55,9 @@ const DataTableTemplatingDemo = () => {
    -

    DataTable Templating

    +

    + DataTable Templating +

    Custom content at header, body and footer sections are supported via templating.

    @@ -79,14 +80,13 @@ const DataTableTemplatingDemo = () => {
    ); -} +}; export default DataTableTemplatingDemo; export const DataTableTemplatingDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -164,7 +164,7 @@ export class DataTableTemplatingDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -228,7 +228,7 @@ const DataTableTemplatingDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -292,7 +292,7 @@ const DataTableTemplatingDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -382,15 +382,11 @@ const DataTableTemplatingDemo = () => { } ` } - } + }; return (
    - - { - useLiveEditorTabs({ name: 'DataTableTemplatingDemo', sources: sources, service: 'ProductService', data: 'products-small', extFiles: extFiles }) - } - + {useLiveEditorTabs({ name: 'DataTableTemplatingDemo', sources: sources, service: 'ProductService', data: 'products-small', extFiles: extFiles })}
    - ) -}) + ); +}); diff --git a/pages/datatable/virtualscroll.js b/pages/datatable/virtualscroll.js index c045f47234..9ac30bcc4b 100644 --- a/pages/datatable/virtualscroll.js +++ b/pages/datatable/virtualscroll.js @@ -9,7 +9,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const DataTableVirtualScrollDemo = () => { - const carService = new CarService(); const [cars, setCars] = useState(Array.from({ length: 100000 }).map((_, i) => carService.generateCar(i + 1))); const [virtualCars, setVirtualCars] = useState(Array.from({ length: 100000 })); @@ -37,15 +36,15 @@ const DataTableVirtualScrollDemo = () => { setVirtualCars(_virtualCars); setLazyLoading(false); }, Math.random() * 1000 + 250); - } + }; const loadingTemplate = (options) => { return ( -
    +
    - ) - } + ); + }; return (
    @@ -55,7 +54,9 @@ const DataTableVirtualScrollDemo = () => {
    -

    DataTable VirtualScroll

    +

    + DataTable VirtualScroll +

    VirtualScroller is a performant approach to handle huge data efficiently.

    @@ -89,14 +90,13 @@ const DataTableVirtualScrollDemo = () => {
    ); -} +}; export default DataTableVirtualScrollDemo; export const DataTableVirtualScrollDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -185,7 +185,7 @@ export class DataTableVirtualScrollDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState } from 'react'; @@ -261,7 +261,7 @@ const DataTableVirtualScrollDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState } from 'react'; @@ -337,7 +337,7 @@ const DataTableVirtualScrollDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -421,15 +421,11 @@ const DataTableVirtualScrollDemo = () => { } ` } - } + }; return (
    - - { - useLiveEditorTabs({ name: 'DataTableVirtualScrollDemo', sources: sources, service: 'CarService' }) - } - + {useLiveEditorTabs({ name: 'DataTableVirtualScrollDemo', sources: sources, service: 'CarService' })}
    - ) -}) + ); +}); diff --git a/pages/dataview/index.js b/pages/dataview/index.js index 3933357d42..39e6ef43b6 100644 --- a/pages/dataview/index.js +++ b/pages/dataview/index.js @@ -10,7 +10,6 @@ import Head from 'next/head'; import getConfig from 'next/config'; const DataViewDemo = () => { - const [products, setProducts] = useState(null); const [layout, setLayout] = useState('grid'); const [sortKey, setSortKey] = useState(null); @@ -18,14 +17,14 @@ const DataViewDemo = () => { const [sortField, setSortField] = useState(null); const sortOptions = [ { label: 'Price High to Low', value: '!price' }, - { label: 'Price Low to High', value: 'price' }, + { label: 'Price Low to High', value: 'price' } ]; const productService = new ProductService(); const contextPath = getConfig().publicRuntimeConfig.contextPath; useEffect(() => { - productService.getProducts().then(data => setProducts(data)); + productService.getProducts().then((data) => setProducts(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps const onSortChange = (event) => { @@ -35,24 +34,24 @@ const DataViewDemo = () => { setSortOrder(-1); setSortField(value.substring(1, value.length)); setSortKey(value); - } - else { + } else { setSortOrder(1); setSortField(value); setSortKey(value); } - } + }; const renderListItem = (data) => { return (
    - e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} alt={data.name} /> + (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} alt={data.name} />
    {data.name}
    {data.description}
    - {data.category} + + {data.category}
    ${data.price} @@ -62,7 +61,7 @@ const DataViewDemo = () => {
    ); - } + }; const renderGridItem = (data) => { return ( @@ -76,7 +75,7 @@ const DataViewDemo = () => { {data.inventoryStatus}
    - e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} alt={data.name} /> + (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} alt={data.name} />
    {data.name}
    {data.description}
    @@ -88,19 +87,16 @@ const DataViewDemo = () => {
    ); - } + }; const itemTemplate = (product, layout) => { if (!product) { return; } - if (layout === 'list') - return renderListItem(product); - else if (layout === 'grid') - return renderGridItem(product); - } - + if (layout === 'list') return renderListItem(product); + else if (layout === 'grid') return renderGridItem(product); + }; const renderHeader = () => { return ( @@ -113,7 +109,7 @@ const DataViewDemo = () => {
    ); - } + }; const header = renderHeader(); @@ -134,15 +130,13 @@ const DataViewDemo = () => {
    - +
    ); -} +}; export default DataViewDemo; diff --git a/pages/dataview/lazy.js b/pages/dataview/lazy.js index 172ea25e03..e8314e2d37 100644 --- a/pages/dataview/lazy.js +++ b/pages/dataview/lazy.js @@ -10,7 +10,6 @@ import Head from 'next/head'; import getConfig from 'next/config'; const DataViewLazyDemo = () => { - const [products, setProducts] = useState(null); const [layout, setLayout] = useState('grid'); const [loading, setLoading] = useState(true); @@ -33,7 +32,7 @@ const DataViewLazyDemo = () => { useEffect(() => { setTimeout(() => { isMounted.current = true; - productService.getProducts().then(data => { + productService.getProducts().then((data) => { datasource.current = data; setTotalRecords(data.length); setProducts(datasource.current.slice(0, rows.current)); @@ -55,18 +54,19 @@ const DataViewLazyDemo = () => { setProducts(newProducts); setLoading(false); }, 1000); - } + }; const renderListItem = (data) => { return (
    - e.target.src='https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} alt={data.name} /> + (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} alt={data.name} />
    {data.name}
    {data.description}
    - {data.category} + + {data.category}
    ${data.price} @@ -76,7 +76,7 @@ const DataViewLazyDemo = () => {
    ); - } + }; const renderGridItem = (data) => { return ( @@ -90,7 +90,7 @@ const DataViewLazyDemo = () => { {data.inventoryStatus}
    - e.target.src='https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} alt={data.name} /> + (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} alt={data.name} />
    {data.name}
    {data.description}
    @@ -102,18 +102,16 @@ const DataViewLazyDemo = () => {
    ); - } + }; const itemTemplate = (product, layout) => { if (!product) { return; } - if (layout === 'list') - return renderListItem(product); - else if (layout === 'grid') - return renderGridItem(product); - } + if (layout === 'list') return renderListItem(product); + else if (layout === 'grid') return renderGridItem(product); + }; const renderHeader = () => { let onOptionChange = (e) => { @@ -126,7 +124,7 @@ const DataViewLazyDemo = () => {
    ); - } + }; const header = renderHeader(); @@ -138,34 +136,35 @@ const DataViewLazyDemo = () => {
    -

    DataView Lazy

    -

    Lazy mode is handy to deal with large datasets, instead of loading the entire data, small chunks of data is loaded by invoking corresponding callbacks everytime paging, sorting and filtering happens. Sample belows imitates - lazy paging by using an in memory list. It is also important to assign the logical number of rows to totalRecords by doing a projection query for paginator configuration so that paginator displays the UI assuming - there are actually records of totalRecords size although in reality they aren't as in lazy mode, only the records that are displayed on the current page exist.

    -
    +

    + DataView Lazy +

    +

    + Lazy mode is handy to deal with large datasets, instead of loading the entire data, small chunks of data is loaded by invoking corresponding callbacks everytime paging, sorting and filtering happens. Sample belows imitates + lazy paging by using an in memory list. It is also important to assign the logical number of rows to totalRecords by doing a projection query for paginator configuration so that paginator displays the UI assuming there are + actually records of totalRecords size although in reality they aren't as in lazy mode, only the records that are displayed on the current page exist. +

    +
    - +
    ); -} +}; export default DataViewLazyDemo; export const DataViewLazyDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -318,7 +317,7 @@ export class DataViewLazyDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect, useRef } from 'react'; @@ -459,7 +458,7 @@ const DataViewLazyDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect, useRef } from 'react'; @@ -600,7 +599,7 @@ const DataViewLazyDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -750,7 +749,7 @@ const DataViewLazyDemo = () => { } ` } - } + }; const extFiles = { 'demo/DataViewDemo.css': { @@ -878,16 +877,11 @@ const DataViewLazyDemo = () => { } ` } - } + }; return (
    - - { - useLiveEditorTabs({ name: 'DataViewLazyDemo', sources: sources, service: 'ProductService', data: 'products', extFiles: extFiles }) - } - + {useLiveEditorTabs({ name: 'DataViewLazyDemo', sources: sources, service: 'ProductService', data: 'products', extFiles: extFiles })}
    - ) - -}) + ); +}); diff --git a/pages/deferredcontent/index.js b/pages/deferredcontent/index.js index ecd6381782..f155ef8fdb 100644 --- a/pages/deferredcontent/index.js +++ b/pages/deferredcontent/index.js @@ -10,19 +10,18 @@ import Head from 'next/head'; import getConfig from 'next/config'; const DeferredContentDemo = () => { - const toast = useRef(null); const [products, setProducts] = useState(null); const productService = new ProductService(); const onImageLoad = () => { toast.current.show({ severity: 'success', summary: 'Image Initialized', detail: 'Scroll down to load the datatable' }); - } + }; const onDataLoad = () => { - productService.getProductsSmall().then(data => setProducts(data)); + productService.getProductsSmall().then((data) => setProducts(data)); toast.current.show({ severity: 'success', summary: 'Data Initialized', detail: 'Render Completed' }); - } + }; const contextPath = getConfig().publicRuntimeConfig.contextPath; @@ -31,7 +30,6 @@ const DeferredContentDemo = () => { React Deferred Content Component -
    @@ -45,12 +43,10 @@ const DeferredContentDemo = () => {
    -
    - Scroll down to lazy load an image and the DataTable which initiates a query that is not executed on initial page load to speed up load performance. -
    +
    Scroll down to lazy load an image and the DataTable which initiates a query that is not executed on initial page load to speed up load performance.
    - e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} alt="Prime" /> + (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} alt="Prime" />
    @@ -68,7 +64,7 @@ const DeferredContentDemo = () => {
    - ) -} + ); +}; export default DeferredContentDemo; diff --git a/pages/dialog/index.js b/pages/dialog/index.js index 921ed7af8c..9594ae5492 100644 --- a/pages/dialog/index.js +++ b/pages/dialog/index.js @@ -6,7 +6,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const DialogDemo = () => { - const [displayBasic, setDisplayBasic] = useState(false); const [displayBasic2, setDisplayBasic2] = useState(false); const [displayModal, setDisplayModal] = useState(false); @@ -16,13 +15,13 @@ const DialogDemo = () => { const [position, setPosition] = useState('center'); const dialogFuncMap = { - 'displayBasic': setDisplayBasic, - 'displayBasic2': setDisplayBasic2, - 'displayModal': setDisplayModal, - 'displayMaximizable': setDisplayMaximizable, - 'displayPosition': setDisplayPosition, - 'displayResponsive': setDisplayResponsive - } + displayBasic: setDisplayBasic, + displayBasic2: setDisplayBasic2, + displayModal: setDisplayModal, + displayMaximizable: setDisplayMaximizable, + displayPosition: setDisplayPosition, + displayResponsive: setDisplayResponsive + }; const onClick = (name, position) => { dialogFuncMap[`${name}`](true); @@ -30,11 +29,11 @@ const DialogDemo = () => { if (position) { setPosition(position); } - } + }; const onHide = (name) => { dialogFuncMap[`${name}`](false); - } + }; const renderFooter = (name) => { return ( @@ -43,7 +42,7 @@ const DialogDemo = () => {
    ); - } + }; return (
    @@ -64,69 +63,85 @@ const DialogDemo = () => {
    Basic
    - onHide('displayPosition')} - draggable={false} resizable={false}> -

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco - laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    + onHide('displayPosition')} draggable={false} resizable={false}> +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est + laborum. +

    - ) -} + ); +}; export default DialogDemo; diff --git a/pages/divider/index.js b/pages/divider/index.js index c85b5d7d93..3f6a0ed034 100644 --- a/pages/divider/index.js +++ b/pages/divider/index.js @@ -26,65 +26,74 @@ const DividerDemo = () => {
    Basic
    -

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation - ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

    -

    Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi - architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione - voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi.

    +

    + Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim + ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi. +

    -

    At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati - cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. - Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus.

    +

    + At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa + qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus. +

    -

    Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur - a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat. - Donec vel volutpat ipsum. Integer nunc magna, posuere ut tincidunt eget, egestas vitae sapien. Morbi dapibus luctus odio.

    +

    + Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis + voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat. Donec vel volutpat ipsum. Integer nunc magna, posuere ut tincidunt eget, egestas vitae sapien. Morbi dapibus luctus odio. +

    Text with Dashed Style
    -

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation - ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

    Left -

    Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi - architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione - voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi.

    +

    + Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim + ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi. +

    Center -

    At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati - cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. - Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus.

    +

    + At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa + qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus. +

    Right -

    Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur - a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat. - Donec vel volutpat ipsum. Integer nunc magna, posuere ut tincidunt eget, egestas vitae sapien. Morbi dapibus luctus odio.

    +

    + Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis + voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat. Donec vel volutpat ipsum. Integer nunc magna, posuere ut tincidunt eget, egestas vitae sapien. Morbi dapibus luctus odio. +

    Content
    -

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation - ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

    @@ -93,45 +102,52 @@ const DividerDemo = () => {
    -

    Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi - architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione - voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi.

    +

    + Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim + ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi. +

    Badge -

    At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati - cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. - Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus.

    +

    + At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa + qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus. +

    -

    Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur - a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat. - Donec vel volutpat ipsum. Integer nunc magna, posuere ut tincidunt eget, egestas vitae sapien. Morbi dapibus luctus odio.

    +

    + Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis + voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat. Donec vel volutpat ipsum. Integer nunc magna, posuere ut tincidunt eget, egestas vitae sapien. Morbi dapibus luctus odio. +

    Vertical
    -

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation - ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est + laborum. +

    -

    Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi - architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione - voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi.

    +

    + Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo + enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi. +

    -

    At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati - cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. - Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus.

    +

    + At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in + culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus. +

    @@ -165,6 +181,6 @@ const DividerDemo = () => {
    ); -} +}; export default DividerDemo; diff --git a/pages/dock/index.js b/pages/dock/index.js index 96e9d8046d..4afc93f1dc 100644 --- a/pages/dock/index.js +++ b/pages/dock/index.js @@ -17,7 +17,6 @@ import Head from 'next/head'; import getConfig from 'next/config'; const DockDemo = () => { - const [displayTerminal, setDisplayTerminal] = useState(false); const [displayFinder, setDisplayFinder] = useState(false); const [images, setImages] = useState(null); @@ -34,46 +33,46 @@ const DockDemo = () => { const dockItems = [ { label: 'Finder', - icon: () => Finder e.target.src = imgErrorPath} width="100%" />, + icon: () => Finder (e.target.src = imgErrorPath)} width="100%" />, command: () => { - setDisplayFinder(true) + setDisplayFinder(true); } }, { label: 'Terminal', - icon: () => Finder e.target.src = imgErrorPath} width="100%" />, + icon: () => Finder (e.target.src = imgErrorPath)} width="100%" />, command: () => { - setDisplayTerminal(true) + setDisplayTerminal(true); } }, { label: 'App Store', - icon: () => App Store e.target.src = imgErrorPath} width="100%" />, + icon: () => App Store (e.target.src = imgErrorPath)} width="100%" />, command: () => { toast2.current.show({ severity: 'error', summary: 'An unexpected error occurred while signing in.', detail: 'UNTRUSTED_CERT_TITLE' }); } }, { label: 'Safari', - icon: () => Finder e.target.src = imgErrorPath} width="100%" />, + icon: () => Finder (e.target.src = imgErrorPath)} width="100%" />, command: () => { toast2.current.show({ severity: 'warn', summary: 'Safari has stopped working' }); } }, { label: 'Photos', - icon: () => Photos e.target.src = imgErrorPath} width="100%" />, + icon: () => Photos (e.target.src = imgErrorPath)} width="100%" />, command: () => { galleria.current.show(); } }, { label: 'GitHub', - icon: () => Settings e.target.src = imgErrorPath} width="100%" />, + icon: () => Settings (e.target.src = imgErrorPath)} width="100%" /> }, { label: 'Trash', - icon: () => trash e.target.src = imgErrorPath} width="100%" />, + icon: () => trash (e.target.src = imgErrorPath)} width="100%" />, command: () => { toast.current.show({ severity: 'info', summary: 'Empty Trash' }); } @@ -83,19 +82,19 @@ const DockDemo = () => { const dockBasicItems = [ { label: 'Finder', - icon: () => Finder e.target.src = imgErrorPath} width="100%" /> + icon: () => Finder (e.target.src = imgErrorPath)} width="100%" /> }, { label: 'App Store', - icon: () => App Store e.target.src = imgErrorPath} width="100%" /> + icon: () => App Store (e.target.src = imgErrorPath)} width="100%" /> }, { label: 'Photos', - icon: () => Photos e.target.src = imgErrorPath} width="100%" /> + icon: () => Photos (e.target.src = imgErrorPath)} width="100%" /> }, { label: 'Trash', - icon: () => trash e.target.src = imgErrorPath} width="100%" /> + icon: () => trash (e.target.src = imgErrorPath)} width="100%" /> } ]; @@ -118,8 +117,7 @@ const DockDemo = () => { { label: 'Video', icon: 'pi pi-fw pi-video' - }, - + } ] }, { @@ -153,8 +151,7 @@ const DockDemo = () => { { label: 'Justify', icon: 'pi pi-fw pi-align-justify' - }, - + } ] }, { @@ -162,13 +159,11 @@ const DockDemo = () => { items: [ { label: 'New', - icon: 'pi pi-fw pi-user-plus', - + icon: 'pi pi-fw pi-user-plus' }, { label: 'Delete', - icon: 'pi pi-fw pi-user-minus', - + icon: 'pi pi-fw pi-user-minus' }, { label: 'Search', @@ -243,7 +238,7 @@ const DockDemo = () => { const itemTemplate = (item) => { return {item.alt}; - } + }; const commandHandler = (text) => { let response; @@ -274,20 +269,18 @@ const DockDemo = () => { if (response) { TerminalService.emit('response', response); - } - else { + } else { TerminalService.emit('clear'); } - } - + }; useEffect(() => { TerminalService.on('command', commandHandler); const nodeService = new NodeService(); const galleriaService = new PhotoService(); - galleriaService.getImages().then(data => setImages(data)); - nodeService.getTreeNodes().then(data => setNodes(data)); + galleriaService.getImages().then((data) => setImages(data)); + nodeService.getTreeNodes().then((data) => setNodes(data)); PrimeReact.appendTo = 'self'; @@ -296,7 +289,7 @@ const DockDemo = () => { // reset PrimeReact.appendTo = null; - } + }; }, []); const start = ; @@ -328,7 +321,7 @@ const DockDemo = () => {
    Basic
    -
    +
    @@ -339,7 +332,7 @@ const DockDemo = () => { -
    +
    @@ -353,15 +346,13 @@ const DockDemo = () => { - +
    -
    - ) -} + ); +}; export default DockDemo; diff --git a/pages/dropdown/index.js b/pages/dropdown/index.js index 43b3aa5573..c8b06339a7 100644 --- a/pages/dropdown/index.js +++ b/pages/dropdown/index.js @@ -7,7 +7,6 @@ import Head from 'next/head'; import getConfig from 'next/config'; const DropdownDemo = () => { - const [lazyItems, setLazyItems] = useState([]); const [lazyLoading, setLazyLoading] = useState(false); const [selectedCity1, setSelectedCity1] = useState(null); @@ -43,7 +42,8 @@ const DropdownDemo = () => { const groupedCities = [ { - label: 'Germany', code: 'DE', + label: 'Germany', + code: 'DE', items: [ { label: 'Berlin', value: 'Berlin' }, { label: 'Frankfurt', value: 'Frankfurt' }, @@ -52,7 +52,8 @@ const DropdownDemo = () => { ] }, { - label: 'USA', code: 'US', + label: 'USA', + code: 'US', items: [ { label: 'Chicago', value: 'Chicago' }, { label: 'Los Angeles', value: 'Los Angeles' }, @@ -61,7 +62,8 @@ const DropdownDemo = () => { ] }, { - label: 'Japan', code: 'JP', + label: 'Japan', + code: 'JP', items: [ { label: 'Kyoto', value: 'Kyoto' }, { label: 'Osaka', value: 'Osaka' }, @@ -80,27 +82,27 @@ const DropdownDemo = () => { const onCityChange = (e) => { setSelectedCity1(e.value); - } + }; const onCityChange2 = (e) => { setSelectedCity2(e.value); - } + }; const onCountryChange = (e) => { setSelectedCountry(e.value); - } + }; const onGroupedCityChange = (e) => { setSelectedGroupedCity(e.value); - } + }; const onItemChange = (e) => { setSelectedItem(e.value); - } + }; const onLazyItemChange = (e) => { - setSelectedItem2(e.value) - } + setSelectedItem2(e.value); + }; const onLazyLoad = (event) => { setLazyLoading(true); @@ -121,42 +123,53 @@ const DropdownDemo = () => { setLazyItems(_lazyItems); setLazyLoading(false); }, Math.random() * 1000 + 250); - } + }; const selectedCountryTemplate = (option, props) => { if (option) { return (
    - {option.name} e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} className={`flag flag-${option.code.toLowerCase()}`} /> + {option.name} (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} + className={`flag flag-${option.code.toLowerCase()}`} + />
    {option.name}
    ); } - return ( - - {props.placeholder} - - ); - } + return {props.placeholder}; + }; const countryOptionTemplate = (option) => { return (
    - {option.name} e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} className={`flag flag-${option.code.toLowerCase()}`} /> + {option.name} (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} + className={`flag flag-${option.code.toLowerCase()}`} + />
    {option.name}
    ); - } + }; const groupedItemTemplate = (option) => { return (
    - {option.label} e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} className={`flag flag-${option.code.toLowerCase()}`} /> + {option.label} (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} + className={`flag flag-${option.code.toLowerCase()}`} + />
    {option.label}
    ); - } + }; return (
    @@ -181,32 +194,53 @@ const DropdownDemo = () => {
    Grouped
    - +
    Advanced with Templating, Filtering and Clear Icon
    - +
    Virtual Scroll (100000 Items)
    Virtual Scroll (100000 Items) and Lazy
    - { - return ( -
    - -
    - ) - } - }} placeholder="Select Item" /> + { + return ( +
    + +
    + ); + } + }} + placeholder="Select Item" + />
    ); -} +}; export default DropdownDemo; diff --git a/pages/editor/index.js b/pages/editor/index.js index e7eaa2c200..d0bfee2684 100644 --- a/pages/editor/index.js +++ b/pages/editor/index.js @@ -5,7 +5,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const EditorDemo = () => { - const [text1, setText1] = useState('
    Hello World!
    PrimeReact Editor Rocks

    '); const [text2, setText2] = useState(''); @@ -17,7 +16,7 @@ const EditorDemo = () => { ); - } + }; const header = renderHeader(); @@ -46,6 +45,6 @@ const EditorDemo = () => {
    ); -} +}; export default EditorDemo; diff --git a/pages/fieldset/index.js b/pages/fieldset/index.js index ce2b8b0fd4..e360497d5b 100644 --- a/pages/fieldset/index.js +++ b/pages/fieldset/index.js @@ -5,7 +5,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const FieldsetDemo = () => { - return (
    @@ -24,25 +23,27 @@ const FieldsetDemo = () => {
    Regular
    -

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat - cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est + laborum. +

    Toggleable
    -

    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat - cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

    +

    + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est + laborum. +

    - ) -} + ); +}; export default FieldsetDemo; diff --git a/pages/fileupload/index.js b/pages/fileupload/index.js index 3b05e7205c..cc52f5988a 100644 --- a/pages/fileupload/index.js +++ b/pages/fileupload/index.js @@ -11,7 +11,6 @@ import Head from 'next/head'; import getConfig from 'next/config'; const FileUploadDemo = () => { - const [totalSize, setTotalSize] = useState(0); const toast = useRef(null); const fileUploadRef = useRef(null); @@ -19,44 +18,44 @@ const FileUploadDemo = () => { const onUpload = () => { toast.current.show({ severity: 'info', summary: 'Success', detail: 'File Uploaded' }); - } + }; const onTemplateSelect = (e) => { let _totalSize = totalSize; let files = e.files; - Object.keys(files).forEach(key => { - _totalSize += (files[key].size || 0); + Object.keys(files).forEach((key) => { + _totalSize += files[key].size || 0; }); setTotalSize(_totalSize); - } + }; const onTemplateUpload = (e) => { let _totalSize = 0; - e.files.forEach(file => { - _totalSize += (file.size || 0); + e.files.forEach((file) => { + _totalSize += file.size || 0; }); setTotalSize(_totalSize); toast.current.show({ severity: 'info', summary: 'Success', detail: 'File Uploaded' }); - } + }; const onTemplateRemove = (file, callback) => { setTotalSize(totalSize - file.size); callback(); - } + }; const onTemplateClear = () => { setTotalSize(0); - } + }; const onBasicUpload = () => { toast.current.show({ severity: 'info', summary: 'Success', detail: 'File Uploaded with Basic Mode' }); - } + }; const onBasicUploadAuto = () => { toast.current.show({ severity: 'info', summary: 'Success', detail: 'File Uploaded with Auto Mode' }); - } + }; const headerTemplate = (options) => { const { className, chooseButton, uploadButton, cancelButton } = options; @@ -71,7 +70,7 @@ const FileUploadDemo = () => { `${formatedValue} / 1 MB`} style={{ width: '300px', height: '20px', marginLeft: 'auto' }}>
    ); - } + }; const itemTemplate = (file, props) => { return ( @@ -86,30 +85,32 @@ const FileUploadDemo = () => {
    - ) - } + ); + }; const emptyTemplate = () => { return (
    - - Drag and Drop Image Here + + + Drag and Drop Image Here +
    - ) - } + ); + }; const customBase64Uploader = async (event) => { - // convert file to base64 encoded + // convert file to base64 encoded const file = event.files[0]; const reader = new FileReader(); - let blob = await fetch(file.objectURL).then(r => r.blob()); //blob:url - reader.readAsDataURL(blob); + let blob = await fetch(file.objectURL).then((r) => r.blob()); //blob:url + reader.readAsDataURL(blob); reader.onloadend = function () { const base64data = reader.result; // eslint-disable-next-line no-console console.log(base64data); - } - } + }; + }; const chooseOptions = { icon: 'pi pi-fw pi-images', iconOnly: true, className: 'custom-choose-btn p-button-rounded p-button-outlined' }; const uploadOptions = { icon: 'pi pi-fw pi-cloud-upload', iconOnly: true, className: 'custom-upload-btn p-button-success p-button-rounded p-button-outlined' }; @@ -138,14 +139,27 @@ const FileUploadDemo = () => {
    Advanced
    - Drag and drop files to here to upload.

    } /> + Drag and drop files to here to upload.

    } />
    Template
    - +
    Basic
    @@ -160,7 +174,7 @@ const FileUploadDemo = () => {
    - ) -} + ); +}; export default FileUploadDemo; diff --git a/pages/floatlabel/index.js b/pages/floatlabel/index.js index 9080d7ac72..ac28459dcd 100644 --- a/pages/floatlabel/index.js +++ b/pages/floatlabel/index.js @@ -18,7 +18,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const FloatLabelDemo = () => { - const [countries, setCountries] = useState(null); const [filteredCountries, setFilteredCountries] = useState(null); const [nodes, setNodes] = useState(null); @@ -57,8 +56,7 @@ const FloatLabelDemo = () => { { cname: 'Brisbane', code: 'A-BR' }, { cname: 'Townsville', code: 'A-TO' } ] - }, - + } ] }, { @@ -78,8 +76,7 @@ const FloatLabelDemo = () => { { cname: 'Ottawa', code: 'C-OT' }, { cname: 'Toronto', code: 'C-TO' } ] - }, - + } ] }, { @@ -126,8 +123,8 @@ const FloatLabelDemo = () => { ]; useEffect(() => { - countryservice.getCountries().then(data => setCountries(data)); - nodeService.getTreeNodes().then(data => setNodes(data)); + countryservice.getCountries().then((data) => setCountries(data)); + nodeService.getTreeNodes().then((data) => setNodes(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps const searchCountry = (event) => { @@ -137,7 +134,7 @@ const FloatLabelDemo = () => { }); setFilteredCountries(results); }, 250); - } + }; return (
    @@ -219,7 +216,15 @@ const FloatLabelDemo = () => {
    - setValue10(event.value)} /> + setValue10(event.value)} + />
    @@ -260,6 +265,6 @@ const FloatLabelDemo = () => {
    ); -} +}; export default FloatLabelDemo; diff --git a/pages/formik/index.js b/pages/formik/index.js index b342427544..b4d355c502 100644 --- a/pages/formik/index.js +++ b/pages/formik/index.js @@ -22,7 +22,7 @@ const FormikFormDemo = () => { const countryservice = new CountryService(); useEffect(() => { - countryservice.getCountries().then(data => setCountries(data)); + countryservice.getCountries().then((data) => setCountries(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps const formik = useFormik({ @@ -43,8 +43,7 @@ const FormikFormDemo = () => { if (!data.email) { errors.email = 'Email is required.'; - } - else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(data.email)) { + } else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(data.email)) { errors.email = 'Invalid email address. E.g. example@email.com'; } @@ -71,7 +70,11 @@ const FormikFormDemo = () => { return isFormFieldValid(name) && {formik.errors[name]}; }; - const dialogFooter =
    ; + const dialogFooter = ( +
    +
    + ); const passwordHeader =
    Pick a password
    ; const passwordFooter = ( @@ -95,10 +98,12 @@ const FormikFormDemo = () => {

    Formik

    -

    PrimeReact components can be easily used/integrated with Formik. In this example, a register panel is simulated using Formik.

    +

    + PrimeReact components can be easily used/integrated with Formik. In this example, a register panel is simulated using Formik. +

    - +
    setShowMessage(false)} position="top" footer={dialogFooter} showHeader={false} breakpoints={{ '960px': '80vw' }} style={{ width: '30vw' }}> @@ -118,7 +123,9 @@ const FormikFormDemo = () => {
    - + {getFormErrorMessage('name')}
    @@ -126,15 +133,27 @@ const FormikFormDemo = () => { - + {getFormErrorMessage('email')}
    - - + + {getFormErrorMessage('password')}
    @@ -152,7 +171,9 @@ const FormikFormDemo = () => {
    - +
    ); -} +}; const FormikFormDoc = React.memo(() => { - const sources = { - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useEffect, useState } from 'react'; @@ -322,7 +342,7 @@ export const FormikFormDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useEffect, useState } from 'react'; @@ -502,17 +522,13 @@ export const FormikFormDemo = () => { } ` } - } + }; return (
    - - { - useLiveEditorTabs({ name: 'FormikFormDemo', sources, service: 'CountryService', data: 'countries', extFiles, dependencies: { 'formik': '^2.2.6' } }) - } - + {useLiveEditorTabs({ name: 'FormikFormDemo', sources, service: 'CountryService', data: 'countries', extFiles, dependencies: { formik: '^2.2.6' } })}
    - ) + ); }); export default FormikFormDemo; diff --git a/pages/galleria/advanced.js b/pages/galleria/advanced.js index f5d84aa3d7..ca87b962da 100644 --- a/pages/galleria/advanced.js +++ b/pages/galleria/advanced.js @@ -9,7 +9,6 @@ import Head from 'next/head'; import getConfig from 'next/config'; import { useLiveEditorTabs } from '../../components/doc/common/liveeditor'; - const GalleriaAdvancedDemo = () => { const [images, setImages] = useState(null); const [activeIndex, setActiveIndex] = useState(0); @@ -18,7 +17,7 @@ const GalleriaAdvancedDemo = () => { const [isFullScreen, setFullScreen] = useState(false); const galleriaService = new PhotoService(); const contextPath = getConfig().publicRuntimeConfig.contextPath; - const galleria = useRef(null) + const galleria = useRef(null); const responsiveOptions = [ { @@ -40,81 +39,77 @@ const GalleriaAdvancedDemo = () => { ]; useEffect(() => { - galleriaService.getImages().then(data => setImages(data)); + galleriaService.getImages().then((data) => setImages(data)); bindDocumentListeners(); return () => unbindDocumentListeners(); - },[]) // eslint-disable-line react-hooks/exhaustive-deps + }, []); // eslint-disable-line react-hooks/exhaustive-deps useEffect(() => { - setAutoPlayActive(galleria.current.isAutoPlayActive()) - },[isAutoPlayActive]); + setAutoPlayActive(galleria.current.isAutoPlayActive()); + }, [isAutoPlayActive]); const onThumbnailChange = (event) => { - setActiveIndex(event.index) - } + setActiveIndex(event.index); + }; const onItemChange = (event) => { - setActiveIndex(event.index) - } + setActiveIndex(event.index); + }; const toggleFullScreen = () => { if (isFullScreen) { closeFullScreen(); - } - else { + } else { openFullScreen(); } - } + }; const onFullScreenChange = () => { - setFullScreen(prevState => !prevState ) - } + setFullScreen((prevState) => !prevState); + }; const openFullScreen = () => { let elem = document.querySelector('.custom-galleria'); if (elem.requestFullscreen) { elem.requestFullscreen(); - } - else if (elem.mozRequestFullScreen) { /* Firefox */ + } else if (elem.mozRequestFullScreen) { + /* Firefox */ elem.mozRequestFullScreen(); - } - else if (elem.webkitRequestFullscreen) { /* Chrome, Safari & Opera */ + } else if (elem.webkitRequestFullscreen) { + /* Chrome, Safari & Opera */ elem.webkitRequestFullscreen(); - } - else if (elem.msRequestFullscreen) { /* IE/Edge */ + } else if (elem.msRequestFullscreen) { + /* IE/Edge */ elem.msRequestFullscreen(); } - } + }; const closeFullScreen = () => { if (document.exitFullscreen) { document.exitFullscreen(); - } - else if (document.mozCancelFullScreen) { + } else if (document.mozCancelFullScreen) { document.mozCancelFullScreen(); - } - else if (document.webkitExitFullscreen) { + } else if (document.webkitExitFullscreen) { document.webkitExitFullscreen(); - } - else if (document.msExitFullscreen) { + } else if (document.msExitFullscreen) { document.msExitFullscreen(); } - } + }; const bindDocumentListeners = () => { - document.addEventListener("fullscreenchange", onFullScreenChange); - document.addEventListener("mozfullscreenchange", onFullScreenChange); - document.addEventListener("webkitfullscreenchange", onFullScreenChange); - document.addEventListener("msfullscreenchange", onFullScreenChange); - } + document.addEventListener('fullscreenchange', onFullScreenChange); + document.addEventListener('mozfullscreenchange', onFullScreenChange); + document.addEventListener('webkitfullscreenchange', onFullScreenChange); + document.addEventListener('msfullscreenchange', onFullScreenChange); + }; const unbindDocumentListeners = () => { - document.removeEventListener("fullscreenchange", onFullScreenChange); - document.removeEventListener("mozfullscreenchange", onFullScreenChange); - document.removeEventListener("webkitfullscreenchange", onFullScreenChange); - document.removeEventListener("msfullscreenchange", onFullScreenChange); - } + document.removeEventListener('fullscreenchange', onFullScreenChange); + document.removeEventListener('mozfullscreenchange', onFullScreenChange); + document.removeEventListener('webkitfullscreenchange', onFullScreenChange); + document.removeEventListener('msfullscreenchange', onFullScreenChange); + }; const thumbnailTemplate = (item) => { return ( @@ -122,15 +117,15 @@ const GalleriaAdvancedDemo = () => { {item.alt}
    ); - } + }; const itemTemplate = (item) => { if (isFullScreen) { - return {item.alt} + return {item.alt}; } - return {item.alt} - } + return {item.alt}; + }; const renderFooter = () => { let autoPlayClassName = classNames('pi', { @@ -145,34 +140,36 @@ const GalleriaAdvancedDemo = () => { return (
    -
    ); - } + }; const footer = renderFooter(); const galleriaClassName = classNames('custom-galleria', { - 'fullscreen': isFullScreen + fullscreen: isFullScreen }); return ( @@ -183,7 +180,9 @@ const GalleriaAdvancedDemo = () => {
    -

    Galleria Advanced

    +

    + Galleria Advanced +

    Galleria can be extended further to implement complex requirements.

    @@ -192,25 +191,38 @@ const GalleriaAdvancedDemo = () => {
    - +
    ); -} +}; export default GalleriaAdvancedDemo; export const GalleriaAdvancedDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -420,7 +432,7 @@ export class GalleriaAdvancedDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useRef, useEffect, useState } from 'react'; @@ -610,7 +622,7 @@ const GalleriaAdvancedDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useRef, useEffect, useState } from 'react'; @@ -800,7 +812,7 @@ const GalleriaAdvancedDemo = () => { } ` }, - 'browser' : { + browser: { tabName: 'Browser Source', imports: ` @@ -998,11 +1010,10 @@ const GalleriaAdvancedDemo = () => { } ` } - - } + }; const extFiles = { - 'demo/GalleriaAdvancedDemo.css' : { + 'demo/GalleriaAdvancedDemo.css': { content: ` .galleria-demo .custom-galleria.fullscreen { display: flex; @@ -1052,15 +1063,11 @@ const GalleriaAdvancedDemo = () => { } ` } - } + }; return (
    - - { - useLiveEditorTabs({ name: 'GalleriaAdvancedDemo', sources: sources, service: 'PhotoService', data: 'photos', extFiles: extFiles }) - } - + {useLiveEditorTabs({ name: 'GalleriaAdvancedDemo', sources: sources, service: 'PhotoService', data: 'photos', extFiles: extFiles })}
    - ) -}) + ); +}); diff --git a/pages/galleria/autoplay.js b/pages/galleria/autoplay.js index cc67d726a8..9a37f75d54 100644 --- a/pages/galleria/autoplay.js +++ b/pages/galleria/autoplay.js @@ -8,8 +8,7 @@ import getConfig from 'next/config'; import { useLiveEditorTabs } from '../../components/doc/common/liveeditor'; const GalleriaAutoPlayDemo = () => { - - const [images, setImages] = useState(null) + const [images, setImages] = useState(null); const galleriaService = new PhotoService(); const contextPath = getConfig().publicRuntimeConfig.contextPath; @@ -29,16 +28,16 @@ const GalleriaAutoPlayDemo = () => { ]; useEffect(() => { - galleriaService.getImages().then(data => setImages(data)); + galleriaService.getImages().then((data) => setImages(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps const itemTemplate = (item) => { return {item.alt}; - } + }; const thumbnailTemplate = (item) => { return {item.alt}; - } + }; return (
    @@ -48,7 +47,9 @@ const GalleriaAutoPlayDemo = () => {
    -

    Galleria AutoPlay

    +

    + Galleria AutoPlay +

    AutoPlay mode is used to implement slideshows.

    @@ -57,22 +58,20 @@ const GalleriaAutoPlayDemo = () => {
    - +
    ); -} +}; export default GalleriaAutoPlayDemo; export const GalleriaAutoPlayDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -133,7 +132,7 @@ export class GalleriaAutoPlayDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -183,7 +182,7 @@ const GalleriaAutoPlayDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -233,7 +232,7 @@ const GalleriaAutoPlayDemo = () => { } ` }, - 'browser' : { + browser: { tabName: 'Browser Source', imports: ` @@ -286,16 +285,11 @@ const GalleriaAutoPlayDemo = () => { } ` } - - } + }; return (
    - - { - useLiveEditorTabs({ name: 'GalleriaAutoPlayDemo', sources: sources, service: 'PhotoService', data: 'photos' }) - } - + {useLiveEditorTabs({ name: 'GalleriaAutoPlayDemo', sources: sources, service: 'PhotoService', data: 'photos' })}
    - ) -}) + ); +}); diff --git a/pages/galleria/caption.js b/pages/galleria/caption.js index 82638e643a..c430e1c6e4 100644 --- a/pages/galleria/caption.js +++ b/pages/galleria/caption.js @@ -8,7 +8,6 @@ import getConfig from 'next/config'; import { useLiveEditorTabs } from '../../components/doc/common/liveeditor'; const GalleriaCaptionDemo = () => { - const [images, setImages] = useState(null); const galleriaService = new PhotoService(); const contextPath = getConfig().publicRuntimeConfig.contextPath; @@ -29,16 +28,16 @@ const GalleriaCaptionDemo = () => { ]; useEffect(() => { - galleriaService.getImages().then(data => setImages(data)); + galleriaService.getImages().then((data) => setImages(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps const itemTemplate = (item) => { return {item.alt}; - } + }; const thumbnailTemplate = (item) => { return {item.alt}; - } + }; const caption = (item) => { return ( @@ -47,7 +46,7 @@ const GalleriaCaptionDemo = () => {

    {item.alt}

    ); - } + }; return (
    @@ -57,7 +56,9 @@ const GalleriaCaptionDemo = () => {
    -

    Galleria Caption

    +

    + Galleria Caption +

    Caption displays a description for an item.

    @@ -66,23 +67,20 @@ const GalleriaCaptionDemo = () => {
    - +
    ); -} +}; export default GalleriaCaptionDemo; export const GalleriaCaptionDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -156,7 +154,7 @@ export class GalleriaCaptionDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -216,7 +214,7 @@ const GalleriaCaptionDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -276,7 +274,7 @@ const GalleriaCaptionDemo = () => { } ` }, - 'browser' : { + browser: { tabName: 'Browser Source', imports: ` @@ -340,16 +338,11 @@ const GalleriaCaptionDemo = () => { } ` } - - } + }; return (
    - - { - useLiveEditorTabs({ name: 'GalleriaCaptionDemo', sources: sources, service: 'PhotoService', data: 'photos' }) - } - + {useLiveEditorTabs({ name: 'GalleriaCaptionDemo', sources: sources, service: 'PhotoService', data: 'photos' })}
    - ) -}) + ); +}); diff --git a/pages/galleria/fullscreen.js b/pages/galleria/fullscreen.js index f3fab03e06..ccb874173a 100644 --- a/pages/galleria/fullscreen.js +++ b/pages/galleria/fullscreen.js @@ -9,7 +9,6 @@ import getConfig from 'next/config'; import { useLiveEditorTabs } from '../../components/doc/common/liveeditor'; const GalleriaFullScreenDemo = () => { - const [images, setImages] = useState(null); const [activeIndex, setActiveIndex] = useState(0); const galleriaService = new PhotoService(); @@ -53,16 +52,16 @@ const GalleriaFullScreenDemo = () => { ]; useEffect(() => { - galleriaService.getImages().then(data => setImages(data)); + galleriaService.getImages().then((data) => setImages(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps const itemTemplate = (item) => { return {item.alt}; - } + }; const thumbnailTemplate = (item) => { return {item.alt}; - } + }; return (
    @@ -72,7 +71,9 @@ const GalleriaFullScreenDemo = () => {
    -

    Galleria FullScreen

    +

    + Galleria FullScreen +

    In fullscreen mode content covers the whole page over a mask.

    @@ -82,40 +83,69 @@ const GalleriaFullScreenDemo = () => {
    With Thumbnails
    - +
    Without Thumbnails
    - +
    Custom Content
    - setActiveIndex(e.index)} - circular fullScreen showItemNavigators showThumbnails={false} item={itemTemplate} thumbnail={thumbnailTemplate} /> + setActiveIndex(e.index)} + circular + fullScreen + showItemNavigators + showThumbnails={false} + item={itemTemplate} + thumbnail={thumbnailTemplate} + />
    - { - images && images.map((image, index) => { - let imgEl = {image.alt} {setActiveIndex(index); galleria3.current.show()} - } /> + {images && + images.map((image, index) => { + let imgEl = ( + {image.alt} { + setActiveIndex(index); + galleria3.current.show(); + }} + /> + ); return (
    {imgEl}
    - ) - }) - } + ); + })}
    @@ -123,14 +153,13 @@ const GalleriaFullScreenDemo = () => {
    ); -} +}; export default GalleriaFullScreenDemo; export const GalleriaFullScreenDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -251,7 +280,7 @@ export class GalleriaFullScreenDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect, useRef } from 'react'; @@ -359,7 +388,7 @@ const GalleriaFullScreenDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect, useRef } from 'react'; @@ -467,7 +496,7 @@ const GalleriaFullScreenDemo = () => { } ` }, - 'browser' : { + browser: { tabName: 'Browser Source', imports: ` @@ -579,16 +608,11 @@ const GalleriaFullScreenDemo = () => { } ` } - - } + }; return (
    - - { - useLiveEditorTabs({ name: 'GalleriaFullScreenDemo', sources: sources, service: 'PhotoService', data: 'photos'}) - } - + {useLiveEditorTabs({ name: 'GalleriaFullScreenDemo', sources: sources, service: 'PhotoService', data: 'photos' })}
    - ) -}) + ); +}); diff --git a/pages/galleria/index.js b/pages/galleria/index.js index f43d33d42f..fbe58d1830 100644 --- a/pages/galleria/index.js +++ b/pages/galleria/index.js @@ -6,15 +6,14 @@ import Head from 'next/head'; import getConfig from 'next/config'; const GalleriaDemo = () => { - const [images, setImages] = useState(null); const contextPath = getConfig().publicRuntimeConfig.contextPath; const galleriaService = new PhotoService(); useEffect(() => { - galleriaService.getImages().then(data => setImages(data)); - }, []) // eslint-disable-line react-hooks/exhaustive-deps + galleriaService.getImages().then((data) => setImages(data)); + }, []); // eslint-disable-line react-hooks/exhaustive-deps const responsiveOptions = [ { @@ -32,12 +31,12 @@ const GalleriaDemo = () => { ]; const itemTemplate = (item) => { - return {item.alt} - } + return {item.alt}; + }; const thumbnailTemplate = (item) => { - return {item.alt} - } + return {item.alt}; + }; return (
    @@ -54,14 +53,13 @@ const GalleriaDemo = () => {
    - +
    ); -} +}; export default GalleriaDemo; diff --git a/pages/galleria/indicator.js b/pages/galleria/indicator.js index dc89bc3b3b..f55f196ad5 100644 --- a/pages/galleria/indicator.js +++ b/pages/galleria/indicator.js @@ -9,7 +9,6 @@ import getConfig from 'next/config'; import { useLiveEditorTabs } from '../../components/doc/common/liveeditor'; const GalleriaIndicatorDemo = () => { - const [images, setImages] = useState(null); const [images2, setImages2] = useState(null); @@ -32,24 +31,23 @@ const GalleriaIndicatorDemo = () => { ]; useEffect(() => { - galleriaService.getImages().then(data => {setImages(data); setImages2(data.slice(0, 5))}) + galleriaService.getImages().then((data) => { + setImages(data); + setImages2(data.slice(0, 5)); + }); }, []); // eslint-disable-line react-hooks/exhaustive-deps const itemTemplate = (item) => { return {item.alt}; - } + }; const thumbnailTemplate = (item) => { - return {item.alt} - } + return {item.alt}; + }; const indicatorTemplate = (index) => { - return ( - - {index + 1} - - ) - } + return {index + 1}; + }; return (
    @@ -59,7 +57,9 @@ const GalleriaIndicatorDemo = () => {
    -

    Galleria Indicator

    +

    + Galleria Indicator +

    Indicators allow quick navigation between the items.

    @@ -69,59 +69,96 @@ const GalleriaIndicatorDemo = () => {
    Indicators with Click Event
    - +
    Indicators with Hover Event
    - +
    Inside Content
    - +
    Positioned at Top
    - +
    Positioned at Left
    - +
    Positioned at Right
    - +
    Indicator Template
    - +
    ); - -} +}; export default GalleriaIndicatorDemo; export const GalleriaIndicatorDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -235,7 +272,7 @@ export class GalleriaIndicatorDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect, } from 'react'; @@ -335,7 +372,7 @@ const GalleriaIndicatorDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect, } from 'react'; @@ -435,7 +472,7 @@ const GalleriaIndicatorDemo = () => { } ` }, - 'browser' : { + browser: { tabName: 'Browser Source', imports: ` @@ -539,11 +576,10 @@ const GalleriaIndicatorDemo = () => { } ` } - - } + }; const extFiles = { - 'demo/GalleriaDemo.css' : { + 'demo/GalleriaDemo.css': { content: ` .galleria-demo .custom-indicator-galleria .indicator-text { color: #e9ecef; @@ -554,15 +590,11 @@ const GalleriaIndicatorDemo = () => { } ` } - } + }; return (
    - - { - useLiveEditorTabs({ name: 'GalleriaIndicatorDemo', sources: sources, service: 'PhotoService', data: 'photos', extFiles: extFiles }) - } - + {useLiveEditorTabs({ name: 'GalleriaIndicatorDemo', sources: sources, service: 'PhotoService', data: 'photos', extFiles: extFiles })}
    - ) -}) + ); +}); diff --git a/pages/galleria/navigator.js b/pages/galleria/navigator.js index 3d93c7ea33..0c2f57a1b2 100644 --- a/pages/galleria/navigator.js +++ b/pages/galleria/navigator.js @@ -8,38 +8,36 @@ import getConfig from 'next/config'; import { useLiveEditorTabs } from '../../components/doc/common/liveeditor'; const GalleriaNavigatorDemo = () => { - - const [images, setImages] = useState(null) - const galleriaService = new PhotoService(); - const contextPath = getConfig().publicRuntimeConfig.contextPath; - - const responsiveOptions = [ - { - breakpoint: '1024px', - numVisible: 5 - }, - { - breakpoint: '768px', - numVisible: 3 - }, - { - breakpoint: '560px', - numVisible: 1 - } - ]; - + const [images, setImages] = useState(null); + const galleriaService = new PhotoService(); + const contextPath = getConfig().publicRuntimeConfig.contextPath; + + const responsiveOptions = [ + { + breakpoint: '1024px', + numVisible: 5 + }, + { + breakpoint: '768px', + numVisible: 3 + }, + { + breakpoint: '560px', + numVisible: 1 + } + ]; useEffect(() => { - galleriaService.getImages().then(data => setImages(data)); + galleriaService.getImages().then((data) => setImages(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps const itemTemplate = (item) => { return {item.alt}; - } + }; const thumbnailTemplate = (item) => { return {item.alt}; - } + }; return (
    @@ -49,7 +47,9 @@ const GalleriaNavigatorDemo = () => {
    -

    Galleria Navigator

    +

    + Galleria Navigator +

    Combining item navigators, thumbnails and indicators provide various UI alternatives.

    @@ -59,40 +59,47 @@ const GalleriaNavigatorDemo = () => {
    Item Navigators and Thumbnails
    - +
    Item Navigators without Thumbnails
    - +
    Item Navigators on Hover
    - +
    Item Navigators and Indicators
    - +
    ); -} +}; export default GalleriaNavigatorDemo; export const GalleriaNavigatorDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -172,7 +179,7 @@ export class GalleriaNavigatorDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -242,7 +249,7 @@ const GalleriaNavigatorDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -312,7 +319,7 @@ const GalleriaNavigatorDemo = () => { } ` }, - 'browser' : { + browser: { tabName: 'Browser Source', imports: ` @@ -385,16 +392,11 @@ const GalleriaNavigatorDemo = () => { } ` } - - } + }; return (
    - - { - useLiveEditorTabs({ name: 'GalleriaNavigatorDemo', sources: sources, service: 'PhotoService', data: 'photos'}) - } - + {useLiveEditorTabs({ name: 'GalleriaNavigatorDemo', sources: sources, service: 'PhotoService', data: 'photos' })}
    - ) -}) + ); +}); diff --git a/pages/galleria/programmatic.js b/pages/galleria/programmatic.js index 8511653863..0d2bc7a620 100644 --- a/pages/galleria/programmatic.js +++ b/pages/galleria/programmatic.js @@ -9,9 +9,8 @@ import getConfig from 'next/config'; import { useLiveEditorTabs } from '../../components/doc/common/liveeditor'; const GalleriaProgrammaticDemo = () => { - const [images, setImages] = useState(null); - const [activeIndex, setActiveIndex] = useState(0) + const [activeIndex, setActiveIndex] = useState(0); const galleriaService = new PhotoService(); const contextPath = getConfig().publicRuntimeConfig.contextPath; @@ -31,25 +30,24 @@ const GalleriaProgrammaticDemo = () => { ]; useEffect(() => { - galleriaService.getImages().then(data => setImages(data)); + galleriaService.getImages().then((data) => setImages(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps const next = () => { - setActiveIndex(prevState => (prevState === images.length - 1) ? 0 : prevState + 1) - } + setActiveIndex((prevState) => (prevState === images.length - 1 ? 0 : prevState + 1)); + }; const prev = () => { - setActiveIndex(prevState => (prevState === images.length + 1) ? 0 : prevState - 1) - - } + setActiveIndex((prevState) => (prevState === images.length + 1 ? 0 : prevState - 1)); + }; const itemTemplate = (item) => { return {item.alt}; - } + }; const thumbnailTemplate = (item) => { return {item.alt}; - } + }; return (
    @@ -59,8 +57,12 @@ const GalleriaProgrammaticDemo = () => {
    -

    Galleria Programmatic

    -

    Galleria can be controlled programmatically using the activeIndex property.

    +

    + Galleria Programmatic +

    +

    + Galleria can be controlled programmatically using the activeIndex property. +

    @@ -73,23 +75,29 @@ const GalleriaProgrammaticDemo = () => {
    - setActiveIndex(e.index)} responsiveOptions={responsiveOptions} numVisible={5} - item={itemTemplate} thumbnail={thumbnailTemplate} style={{ maxWidth: '640px' }} /> + setActiveIndex(e.index)} + responsiveOptions={responsiveOptions} + numVisible={5} + item={itemTemplate} + thumbnail={thumbnailTemplate} + style={{ maxWidth: '640px' }} + />
    ); - -} +}; export default GalleriaProgrammaticDemo; export const GalleriaProgrammaticDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -169,7 +177,7 @@ export class GalleriaProgrammaticDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -235,7 +243,7 @@ const GalleriaProgrammaticDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -301,7 +309,7 @@ const GalleriaProgrammaticDemo = () => { } ` }, - 'browser' : { + browser: { tabName: 'Browser Source', imports: ` @@ -371,16 +379,11 @@ const GalleriaProgrammaticDemo = () => { } ` } - - } + }; return (
    - - { - useLiveEditorTabs({ name: 'GalleriaProgrammaticDemo', sources: sources, service: 'PhotoService', data: 'photos' }) - } - + {useLiveEditorTabs({ name: 'GalleriaProgrammaticDemo', sources: sources, service: 'PhotoService', data: 'photos' })}
    - ) -}) + ); +}); diff --git a/pages/galleria/responsive.js b/pages/galleria/responsive.js index 8e05584096..97bf0f56af 100644 --- a/pages/galleria/responsive.js +++ b/pages/galleria/responsive.js @@ -8,7 +8,6 @@ import getConfig from 'next/config'; import { useLiveEditorTabs } from '../../components/doc/common/liveeditor'; const GalleriaResponsiveDemo = () => { - const [images, setImages] = useState(null); const galleriaService = new PhotoService(); @@ -34,16 +33,16 @@ const GalleriaResponsiveDemo = () => { ]; useEffect(() => { - galleriaService.getImages().then(data => setImages(data)); + galleriaService.getImages().then((data) => setImages(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps const itemTemplate = (item) => { - return {item.alt} - } + return {item.alt}; + }; const thumbnailTemplate = (item) => { - return {item.alt} - } + return {item.alt}; + }; return (
    @@ -53,8 +52,12 @@ const GalleriaResponsiveDemo = () => {
    -

    Galleria Responsive

    -

    Galleria responsiveness is defined with the responsiveOptions property.

    +

    + Galleria Responsive +

    +

    + Galleria responsiveness is defined with the responsiveOptions property. +

    @@ -62,22 +65,20 @@ const GalleriaResponsiveDemo = () => {
    - +
    ); -} +}; export default GalleriaResponsiveDemo; export const GalleriaResponsiveDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -142,7 +143,7 @@ export class GalleriaResponsiveDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -197,7 +198,7 @@ const GalleriaResponsiveDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -252,7 +253,7 @@ const GalleriaResponsiveDemo = () => { } ` }, - 'browser' : { + browser: { tabName: 'Browser Source', imports: ` @@ -310,16 +311,11 @@ const GalleriaResponsiveDemo = () => { } ` } - - } + }; return (
    - - { - useLiveEditorTabs({ name: 'GalleriaResponsiveDemo', sources: sources, service: 'PhotoService', data: 'photos'}) - } - + {useLiveEditorTabs({ name: 'GalleriaResponsiveDemo', sources: sources, service: 'PhotoService', data: 'photos' })}
    - ) -}) + ); +}); diff --git a/pages/galleria/thumbnail.js b/pages/galleria/thumbnail.js index 2de65cac30..8e7e3e3a8b 100644 --- a/pages/galleria/thumbnail.js +++ b/pages/galleria/thumbnail.js @@ -8,7 +8,6 @@ import getConfig from 'next/config'; import { useLiveEditorTabs } from '../../components/doc/common/liveeditor'; const GalleriaThumbnailDemo = () => { - const [images, setImages] = useState(null); const galleriaService = new PhotoService(); const contextPath = getConfig().publicRuntimeConfig.contextPath; @@ -40,16 +39,16 @@ const GalleriaThumbnailDemo = () => { ]; useEffect(() => { - galleriaService.getImages().then(data => setImages(data)); + galleriaService.getImages().then((data) => setImages(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps const itemTemplate = (item) => { - return {item.alt} - } + return {item.alt}; + }; const thumbnailTemplate = (item) => { - return {item.alt} - } + return {item.alt}; + }; return (
    @@ -59,7 +58,9 @@ const GalleriaThumbnailDemo = () => {
    -

    Galleria Thumbnail

    +

    + Galleria Thumbnail +

    Thumbnails represent a smaller version of the actual content.

    @@ -69,40 +70,35 @@ const GalleriaThumbnailDemo = () => {
    Positioned at Bottom
    - +
    Positioned at Left
    - +
    Positioned at Right
    - +
    Positioned at Top
    - +
    ); -} +}; export default GalleriaThumbnailDemo; export const GalleriaThumbnailDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -193,7 +189,7 @@ export class GalleriaThumbnailDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect, memo } from 'react'; @@ -273,7 +269,7 @@ const GalleriaThumbnailDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect, memo } from 'react'; @@ -353,7 +349,7 @@ const GalleriaThumbnailDemo = () => { } ` }, - 'browser' : { + browser: { tabName: 'Browser Source', imports: ` @@ -435,16 +431,11 @@ const GalleriaThumbnailDemo = () => { } ` } - - } + }; return (
    - - { - useLiveEditorTabs({ name: 'GalleriaThumbnailDemo', sources: sources, service: 'PhotoService', data: 'photos' }) - } - + {useLiveEditorTabs({ name: 'GalleriaThumbnailDemo', sources: sources, service: 'PhotoService', data: 'photos' })}
    - ) -}) + ); +}); diff --git a/pages/gmap/index.js b/pages/gmap/index.js index 22420eed37..c2d49793d1 100644 --- a/pages/gmap/index.js +++ b/pages/gmap/index.js @@ -49,7 +49,6 @@ const removeGoogleMaps = () => { }; const GMapDemo = () => { - const [googleMapsReady, setGoogleMapsReady] = useState(false); const [dialogVisible, setDialogVisible] = useState(false); const [markerTitle, setMarkerTitle] = useState(''); @@ -67,13 +66,13 @@ const GMapDemo = () => { return () => { removeGoogleMaps(); - } - }, []) + }; + }, []); const onMapClick = (event) => { setDialogVisible(true); - setSelectedPosition(event.latLng) - } + setSelectedPosition(event.latLng); + }; const onOverlayClick = (event) => { let isMarker = event.overlay.getTitle !== undefined; @@ -86,15 +85,14 @@ const GMapDemo = () => { event.map.setCenter(event.overlay.getPosition()); toast.current.show({ severity: 'info', summary: 'Marker Selected', detail: title }); - } - else { + } else { toast.current.show({ severity: 'info', summary: 'Shape Selected', detail: '' }); } - } + }; const handleDragEnd = (event) => { toast.current.show({ severity: 'info', summary: 'Marker Dragged', detail: event.overlay.getTitle() }); - } + }; const addMarker = () => { let newMarker = new google.maps.Marker({ @@ -110,39 +108,54 @@ const GMapDemo = () => { setDialogVisible(false); setDraggableMarker(false); setMarkerTitle(''); - } + }; const onMapReady = (event) => { - setOverlays( - [ - new google.maps.Marker({ position: { lat: 36.879466, lng: 30.667648 }, title: "Konyaalti" }), - new google.maps.Marker({ position: { lat: 36.883707, lng: 30.689216 }, title: "Ataturk Park" }), - new google.maps.Marker({ position: { lat: 36.885233, lng: 30.702323 }, title: "Oldtown" }), - new google.maps.Polygon({ - paths: [ - { lat: 36.9177, lng: 30.7854 }, { lat: 36.8851, lng: 30.7802 }, { lat: 36.8829, lng: 30.8111 }, { lat: 36.9177, lng: 30.8159 } - ], strokeOpacity: 0.5, strokeWeight: 1, fillColor: '#1976D2', fillOpacity: 0.35 - }), - new google.maps.Circle({ center: { lat: 36.90707, lng: 30.56533 }, fillColor: '#1976D2', fillOpacity: 0.35, strokeWeight: 1, radius: 1500 }), - new google.maps.Polyline({ path: [{ lat: 36.86149, lng: 30.63743 }, { lat: 36.86341, lng: 30.72463 }], geodesic: true, strokeColor: '#FF0000', strokeOpacity: 0.5, strokeWeight: 2 }) - ] - ); - } + setOverlays([ + new google.maps.Marker({ position: { lat: 36.879466, lng: 30.667648 }, title: 'Konyaalti' }), + new google.maps.Marker({ position: { lat: 36.883707, lng: 30.689216 }, title: 'Ataturk Park' }), + new google.maps.Marker({ position: { lat: 36.885233, lng: 30.702323 }, title: 'Oldtown' }), + new google.maps.Polygon({ + paths: [ + { lat: 36.9177, lng: 30.7854 }, + { lat: 36.8851, lng: 30.7802 }, + { lat: 36.8829, lng: 30.8111 }, + { lat: 36.9177, lng: 30.8159 } + ], + strokeOpacity: 0.5, + strokeWeight: 1, + fillColor: '#1976D2', + fillOpacity: 0.35 + }), + new google.maps.Circle({ center: { lat: 36.90707, lng: 30.56533 }, fillColor: '#1976D2', fillOpacity: 0.35, strokeWeight: 1, radius: 1500 }), + new google.maps.Polyline({ + path: [ + { lat: 36.86149, lng: 30.63743 }, + { lat: 36.86341, lng: 30.72463 } + ], + geodesic: true, + strokeColor: '#FF0000', + strokeOpacity: 0.5, + strokeWeight: 2 + }) + ]); + }; const onHide = (event) => { setDialogVisible(false); - } + }; const options = { center: { lat: 36.890257, lng: 30.707417 }, zoom: 12 }; - const footer =
    -
    ; - + const footer = ( +
    +
    + ); return (
    @@ -153,8 +166,7 @@ const GMapDemo = () => {

    GMap

    -

    GMap component provides integration with Google Maps API. This sample demontrates - various uses cases like binding, overlays and events. Click the map to add a new item.

    +

    GMap component provides integration with Google Maps API. This sample demontrates various uses cases like binding, overlays and events. Click the map to add a new item.

    @@ -163,28 +175,41 @@ const GMapDemo = () => {
    - { - googleMapsReady && ( -
    - -
    - ) - } + {googleMapsReady && ( +
    + +
    + )}
    -
    -
    setMarkerTitle(e.target.value)} />
    +
    + +
    +
    + setMarkerTitle(e.target.value)} /> +
    -
    Lat
    -
    +
    + Lat +
    +
    + +
    -
    Lng
    -
    +
    + Lng +
    +
    + +
    -
    -
    setDraggableMarker(event.checked)} />
    +
    + +
    +
    + setDraggableMarker(event.checked)} /> +
    @@ -192,6 +217,6 @@ const GMapDemo = () => {
    ); -} +}; export default GMapDemo; diff --git a/pages/icons/index.js b/pages/icons/index.js index 958a0446a5..76f04e95f9 100644 --- a/pages/icons/index.js +++ b/pages/icons/index.js @@ -18,19 +18,16 @@ const IconsPage = () => { } if (icons) { - setFilteredIcons(icons.filter(it => it.icon.tags[0].indexOf(event.target.value) !== -1)); + setFilteredIcons(icons.filter((it) => it.icon.tags[0].indexOf(event.target.value) !== -1)); } - } + }; useEffect(() => { - (new IconService()).getIcons().then(data => { + new IconService().getIcons().then((data) => { data.sort((icon1, icon2) => { - if(icon1.properties.name < icon2.properties.name) - return -1; - else if(icon1.properties.name < icon2.properties.name) - return 1; - else - return 0; + if (icon1.properties.name < icon2.properties.name) return -1; + else if (icon1.properties.name < icon2.properties.name) return 1; + else return 0; }); setIcons(data); @@ -47,37 +44,40 @@ const IconsPage = () => {

    Icons

    -

    PrimeReact components internally use PrimeIcons library, the official icons suite from PrimeTek.

    +

    + PrimeReact components internally use PrimeIcons library, the official icons suite from PrimeTek. +

    Download

    PrimeIcons is available at npm, run the following command to download it to your project.

    - -{` + + {` npm install primeicons `} - +

    Then import the library.

    - -{` + + {` import 'primeicons/primeicons.css'; `} - +
    Getting Started
    -

    PrimeIcons use the pi pi-{icon} syntax such as pi pi-check. - A standalone icon can be displayed using an element such as i or span

    +

    + PrimeIcons use the pi pi-{icon} syntax such as pi pi-check. A standalone icon can be displayed using an element such as i or span +

    - -{` + + {` `} - + @@ -85,37 +85,37 @@ import 'primeicons/primeicons.css';
    Size

    Size of the icons can easily be changed using font-size property.

    - -{` + + {` `} - + - -{` + + {` `} - + - +
    Spinning Animation

    Special pi-spin class applies infinite rotate to an icon.

    - -{` + + {` `} - + - +
    Constants

    PrimeIcons constants API is provided to easily choose an icon e.g. when defining a menu model.

    - -{` + + {` import { PrimeIcons } from 'primereact/api'; import { Menu } from 'primereact/menu'; @@ -141,29 +141,32 @@ const MenuDemo = () => { return } `} - +
    List of Icons
    -

    Here is the current list of PrimeIcons, more icons will be added periodically. You may also request new icons at the issue tracker.

    +

    + Here is the current list of PrimeIcons, more icons will be added periodically. You may also request new icons at the issue tracker. +

    - { - filteredIcons && filteredIcons.map(iconMeta => { + {filteredIcons && + filteredIcons.map((iconMeta) => { const { icon, properties } = iconMeta; - return icon.tags.indexOf('deprecate') === -1 && ( -
    - -
    pi-{properties.name}
    -
    + return ( + icon.tags.indexOf('deprecate') === -1 && ( +
    + +
    pi-{properties.name}
    +
    + ) ); - }) - } + })}
    ); -} +}; export default IconsPage; diff --git a/pages/image/index.js b/pages/image/index.js index d125f16ebc..37d3ad1b0d 100644 --- a/pages/image/index.js +++ b/pages/image/index.js @@ -7,7 +7,6 @@ import Head from 'next/head'; import getConfig from 'next/config'; const ImageDemo = () => { - const contextPath = getConfig().publicRuntimeConfig.contextPath; return ( @@ -20,7 +19,9 @@ const ImageDemo = () => {

    Image

    -

    Displays an image with preview and tranformation options. For multiple image, see Galleria.

    +

    + Displays an image with preview and tranformation options. For multiple image, see Galleria. +

    @@ -38,7 +39,7 @@ const ImageDemo = () => {
    - ) -} + ); +}; export default ImageDemo; diff --git a/pages/index.js b/pages/index.js index 987b5323e1..1171e8c61f 100644 --- a/pages/index.js +++ b/pages/index.js @@ -18,25 +18,21 @@ import { useEffect, useState } from 'react'; export default function Home(props) { const contextPath = getConfig().publicRuntimeConfig.contextPath; const [tableTheme, setTableTheme] = useState('lara-light-indigo'); - const rootClassName = classNames('landing', {'landing-light': !props.dark, 'landing-dark': props.dark, 'landing-news-active': props.newsActive}); + const rootClassName = classNames('landing', { 'landing-light': !props.dark, 'landing-dark': props.dark, 'landing-news-active': props.newsActive }); const toggleColorScheme = () => { const darkMode = !props.dark; - const newTheme = darkMode ? 'lara-dark-indigo': 'lara-light-indigo'; + const newTheme = darkMode ? 'lara-dark-indigo' : 'lara-light-indigo'; props.onThemeChange(newTheme, darkMode); }; useEffect(() => { - if (props.dark) - setTableTheme(tableTheme.replace('light','dark')); - else - setTableTheme(tableTheme.replace('dark','light')); + if (props.dark) setTableTheme(tableTheme.replace('light', 'dark')); + else setTableTheme(tableTheme.replace('dark', 'light')); }, [props.dark]); // eslint-disable-line react-hooks/exhaustive-deps useEffect(() => { - if (props.dark) - props.onThemeChange('lara-dark-indigo', true); - else - props.onThemeChange('lara-light-indigo', false); + if (props.dark) props.onThemeChange('lara-dark-indigo', true); + else props.onThemeChange('lara-light-indigo', false); }, []); // eslint-disable-line react-hooks/exhaustive-deps return ( @@ -84,4 +80,4 @@ export default function Home(props) { Home.getLayout = function getLayout(page) { return page; -} +}; diff --git a/pages/inplace/index.js b/pages/inplace/index.js index 6253c50a54..79b1eff698 100644 --- a/pages/inplace/index.js +++ b/pages/inplace/index.js @@ -10,16 +10,14 @@ import Head from 'next/head'; import getConfig from 'next/config'; const InplaceDemo = () => { - const [text, setText] = useState(''); const [products, setProducts] = useState([]); const productService = new ProductService(); const contextPath = getConfig().publicRuntimeConfig.contextPath; - const onOpen = () => { - productService.getProductsSmall().then(data => setProducts(data)); - } + productService.getProductsSmall().then((data) => setProducts(data)); + }; return (
    @@ -40,9 +38,7 @@ const InplaceDemo = () => {
    Input
    - - {text || 'Click to Edit'} - + {text || 'Click to Edit'} setText(e.target.value)} autoFocus /> @@ -57,15 +53,13 @@ const InplaceDemo = () => { - Nature e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} /> + Nature (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} />
    Lazy Data
    - - View Data - + View Data @@ -80,7 +74,7 @@ const InplaceDemo = () => {
    - ) -} + ); +}; export default InplaceDemo; diff --git a/pages/inputgroup/index.js b/pages/inputgroup/index.js index 99130d6021..4f51b66ccc 100644 --- a/pages/inputgroup/index.js +++ b/pages/inputgroup/index.js @@ -9,7 +9,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const InputGroupDemo = () => { - const [checked1, setChecked1] = useState(false); const [checked2, setChecked2] = useState(false); const [radioValue1, setRadioValue1] = useState(''); @@ -138,6 +137,6 @@ const InputGroupDemo = () => {
    ); -} +}; export default InputGroupDemo; diff --git a/pages/inputmask/index.js b/pages/inputmask/index.js index cfea4ce8df..6a31035051 100644 --- a/pages/inputmask/index.js +++ b/pages/inputmask/index.js @@ -5,7 +5,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const InputMaskDemo = () => { - const [val1, setVal1] = useState(); const [val2, setVal2] = useState(); const [val3, setVal3] = useState(); @@ -66,6 +65,6 @@ const InputMaskDemo = () => {
    ); -} +}; export default InputMaskDemo; diff --git a/pages/inputnumber/index.js b/pages/inputnumber/index.js index c5e4ec8049..e8132c59f2 100644 --- a/pages/inputnumber/index.js +++ b/pages/inputnumber/index.js @@ -5,7 +5,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const InputNumberDemo = () => { - const [value1, setValue1] = useState(42723); const [value2, setValue2] = useState(58151); const [value3, setValue3] = useState(2351.35); @@ -23,7 +22,7 @@ const InputNumberDemo = () => { const [value15, setValue15] = useState(10); const [value16, setValue16] = useState(20); const [value17, setValue17] = useState(20); - const [value18, setValue18] = useState(10.50); + const [value18, setValue18] = useState(10.5); const [value19, setValue19] = useState(25); const [value20, setValue20] = useState(50); @@ -129,8 +128,20 @@ const InputNumberDemo = () => {
    - setValue18(e.value)} showButtons buttonLayout="horizontal" step={0.25} - decrementButtonClassName="p-button-danger" incrementButtonClassName="p-button-success" incrementButtonIcon="pi pi-plus" decrementButtonIcon="pi pi-minus" mode="currency" currency="EUR" /> + setValue18(e.value)} + showButtons + buttonLayout="horizontal" + step={0.25} + decrementButtonClassName="p-button-danger" + incrementButtonClassName="p-button-success" + incrementButtonIcon="pi pi-plus" + decrementButtonIcon="pi pi-minus" + mode="currency" + currency="EUR" + />
    @@ -140,9 +151,22 @@ const InputNumberDemo = () => {
    - - setValue19(e.value)} mode="decimal" showButtons buttonLayout="vertical" style={{ width: '4rem' }} - decrementButtonClassName="p-button-secondary" incrementButtonClassName="p-button-secondary" incrementButtonIcon="pi pi-plus" decrementButtonIcon="pi pi-minus" /> + + setValue19(e.value)} + mode="decimal" + showButtons + buttonLayout="vertical" + style={{ width: '4rem' }} + decrementButtonClassName="p-button-secondary" + incrementButtonClassName="p-button-secondary" + incrementButtonIcon="pi pi-plus" + decrementButtonIcon="pi pi-minus" + />
    @@ -151,6 +175,6 @@ const InputNumberDemo = () => {
    ); -} +}; export default InputNumberDemo; diff --git a/pages/inputswitch/index.js b/pages/inputswitch/index.js index 76a08d8cd6..5dbb4e2f4d 100644 --- a/pages/inputswitch/index.js +++ b/pages/inputswitch/index.js @@ -5,7 +5,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const InputSwitchDemo = () => { - const [checked1, setChecked1] = useState(false); const [checked2, setChecked2] = useState(true); @@ -36,6 +35,6 @@ const InputSwitchDemo = () => {
    ); -} +}; export default InputSwitchDemo; diff --git a/pages/inputtext/index.js b/pages/inputtext/index.js index 3a168e18d8..147199cbe3 100644 --- a/pages/inputtext/index.js +++ b/pages/inputtext/index.js @@ -5,12 +5,11 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const InputTextDemo = () => { - - const [value1,setValue1] = useState(''); - const [value2,setValue2] = useState(''); - const [value3,setValue3] = useState(''); - const [value4,setValue4] = useState(''); - const [value5,setValue5] = useState(''); + const [value1, setValue1] = useState(''); + const [value2, setValue2] = useState(''); + const [value3, setValue3] = useState(''); + const [value4, setValue4] = useState(''); + const [value5, setValue5] = useState(''); return (
    @@ -35,7 +34,7 @@ const InputTextDemo = () => {
    Floating Label
    - setValue2(e.target.value)} /> + setValue2(e.target.value)} /> @@ -53,16 +52,24 @@ const InputTextDemo = () => {
    Help Text
    - + - Enter your username to reset your password. + + Enter your username to reset your password. +
    Invalid
    - + - Username is not available. + + Username is not available. +
    Disabled
    @@ -79,7 +86,7 @@ const InputTextDemo = () => {
    - ) -} + ); +}; export default InputTextDemo; diff --git a/pages/inputtextarea/index.js b/pages/inputtextarea/index.js index 2b9a2979be..c911011b6d 100644 --- a/pages/inputtextarea/index.js +++ b/pages/inputtextarea/index.js @@ -5,7 +5,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const InputTextareaDemo = () => { - const [value1, setValue1] = useState(''); const [value2, setValue2] = useState(''); const [value3, setValue3] = useState(''); @@ -40,7 +39,7 @@ const InputTextareaDemo = () => {
    - ) -} + ); +}; export default InputTextareaDemo; diff --git a/pages/invalid/index.js b/pages/invalid/index.js index 75dd0eb81b..38c0733860 100644 --- a/pages/invalid/index.js +++ b/pages/invalid/index.js @@ -18,7 +18,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const InvalidDemo = () => { - const [countries, setCountries] = useState(null); const [filteredCountries, setFilteredCountries] = useState(null); const [nodes, setNodes] = useState(null); @@ -64,8 +63,7 @@ const InvalidDemo = () => { { cname: 'Brisbane', code: 'A-BR' }, { cname: 'Townsville', code: 'A-TO' } ] - }, - + } ] }, { @@ -85,8 +83,7 @@ const InvalidDemo = () => { { cname: 'Ottawa', code: 'C-OT' }, { cname: 'Toronto', code: 'C-TO' } ] - }, - + } ] }, { @@ -123,8 +120,8 @@ const InvalidDemo = () => { ]; useEffect(() => { - countryservice.getCountries().then(data => setCountries(data)); - nodeService.getTreeNodes().then(data => setNodes(data)); + countryservice.getCountries().then((data) => setCountries(data)); + nodeService.getTreeNodes().then((data) => setNodes(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps const searchCountry = (event) => { @@ -134,7 +131,7 @@ const InvalidDemo = () => { }); setFilteredCountries(results); }, 250); - } + }; return (
    @@ -180,7 +177,16 @@ const InvalidDemo = () => {
    - setValue10(e.value)} className="p-invalid" /> + setValue10(e.value)} + className="p-invalid" + />
    @@ -209,6 +215,6 @@ const InvalidDemo = () => {
    ); -} +}; export default InvalidDemo; diff --git a/pages/keyfilter/index.js b/pages/keyfilter/index.js index f85c0e5234..3a5b30a55e 100644 --- a/pages/keyfilter/index.js +++ b/pages/keyfilter/index.js @@ -5,7 +5,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const KeyFilterDemo = () => { - return (
    @@ -61,7 +60,7 @@ const KeyFilterDemo = () => {
    - ) -} + ); +}; export default KeyFilterDemo; diff --git a/pages/knob/index.js b/pages/knob/index.js index 51a1534294..f5d2e3b708 100644 --- a/pages/knob/index.js +++ b/pages/knob/index.js @@ -6,7 +6,6 @@ import { Button } from '../../components/lib/button/Button'; import Head from 'next/head'; const KnobDemo = () => { - const [value1, setValue1] = useState(0); const [value2, setValue2] = useState(50); const [value3, setValue3] = useState(75); @@ -25,14 +24,14 @@ const KnobDemo = () => { setValue10(value); setDisabledIncrementBtn(value === 100); setDisabledDecrementBtn(false); - } + }; const decrement = () => { const value = value10 - 1; setValue10(value); setDisabledIncrementBtn(false); setDisabledDecrementBtn(value === 0); - } + }; return (
    @@ -74,7 +73,7 @@ const KnobDemo = () => {
    Template
    - setValue6(e.value)} /> + setValue6(e.value)} />
    Stroke
    @@ -86,7 +85,7 @@ const KnobDemo = () => {
    Color
    - setValue9(e.value)} /> + setValue9(e.value)} />
    @@ -101,7 +100,7 @@ const KnobDemo = () => {
    - ) -} + ); +}; export default KnobDemo; diff --git a/pages/landing/blocksection.js b/pages/landing/blocksection.js index 714e48a938..954d1b1167 100644 --- a/pages/landing/blocksection.js +++ b/pages/landing/blocksection.js @@ -6,7 +6,7 @@ const BlockSection = () => { const [animationClass, setAnimationClass] = useState(''); useEffect(() => { - setAnimationClass("blocks-animation"); + setAnimationClass('blocks-animation'); }, []); // eslint-disable-line react-hooks/exhaustive-deps return ( @@ -384,6 +384,6 @@ const BlockSection = () => { ); -} +}; export default BlockSection; diff --git a/pages/landing/componentsection.js b/pages/landing/componentsection.js index 8ecac2b596..96919011c7 100644 --- a/pages/landing/componentsection.js +++ b/pages/landing/componentsection.js @@ -23,7 +23,7 @@ let chartData = { data: [40, 59, 40, 50, 56, 40, 70], fill: true, borderColor: '#03C4E8', - tension: .4, + tension: 0.4, backgroundColor: 'rgba(3, 196, 232, .2)' } ] @@ -41,7 +41,7 @@ let chartOptions = { display: false }, min: 0, - max: 100, + max: 100 }, x: { ticks: { @@ -55,31 +55,33 @@ const ComponentSection = () => { const [category, setCategory] = useState('C'); const [nodes, setNodes] = useState(null); const [switchValue, setSwitchValue] = useState(true); - const [rangeValues, setRangeValues] = useState([20,80]); + const [rangeValues, setRangeValues] = useState([20, 80]); const [dateValue, setDateValue] = useState(null); const [selectButtonValue, setSelectButtonValue] = useState(1); const [activeTabIndex, setActiveTabIndex] = useState(0); const nodeService = new NodeService(); const contextPath = getConfig().publicRuntimeConfig.contextPath; const items = [ - {label: 'Home', icon: 'pi pi-fw pi-home'}, - {label: 'Calendar', icon: 'pi pi-fw pi-calendar'}, - {label: 'Settings', icon: 'pi pi-fw pi-cog'} + { label: 'Home', icon: 'pi pi-fw pi-home' }, + { label: 'Calendar', icon: 'pi pi-fw pi-calendar' }, + { label: 'Settings', icon: 'pi pi-fw pi-cog' } ]; const selectButtonOptions = [ - {name: 'Prime', value: 1}, - {name: 'React', value: 2}, - {name: 'Themes', value: 3} + { name: 'Prime', value: 1 }, + { name: 'React', value: 2 }, + { name: 'Themes', value: 3 } ]; useEffect(() => { - nodeService.getTreeNodes().then(data => setNodes(data)); + nodeService.getTreeNodes().then((data) => setNodes(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps return (
    Components
    -

    Over 80 React UI Components with top-notch quality to help you implement all your UI requirements in style.

    +

    + Over 80 React UI Components with top-notch quality to help you implement all your UI requirements in style. +

    @@ -114,38 +122,38 @@ const ComponentSection = () => {
    - setActiveTabIndex(e.index)}/> + setActiveTabIndex(e.index)} />
    • avatar 1 Darrel Steward - + 15%
    • avatar 2 Albert Flores - + 85%
    • avatar 3 Kathryn Murphy - + 50%
    • avatar 4 Cody Fisher - + 75%
    • avatar 5 Brandon Atkinson - + 60%
    @@ -153,8 +161,8 @@ const ComponentSection = () => {
    ); -} +}; export default ComponentSection; diff --git a/pages/landing/designersection.js b/pages/landing/designersection.js index 36da77d84b..ac31ba515d 100644 --- a/pages/landing/designersection.js +++ b/pages/landing/designersection.js @@ -13,15 +13,15 @@ import { useRef, useState } from 'react'; const DesignerSection = (props) => { const contextPath = getConfig().publicRuntimeConfig.contextPath; - const [font,setFont] = useState('-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol'); + const [font, setFont] = useState('-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol'); const fonts = [ - {label: 'Arial', value: 'Arial,Helvetica Neue,Helvetica,sans-serif'}, - {label: 'System', value: '-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol'}, - {label: 'Trebuches MS', value: 'Trebuchet MS,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Tahoma,sans-serif'}, - {label: 'Verdana', value: 'Verdana,Geneva,sans-serif'}, + { label: 'Arial', value: 'Arial,Helvetica Neue,Helvetica,sans-serif' }, + { label: 'System', value: '-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol' }, + { label: 'Trebuches MS', value: 'Trebuchet MS,Lucida Grande,Lucida Sans Unicode,Lucida Sans,Tahoma,sans-serif' }, + { label: 'Verdana', value: 'Verdana,Geneva,sans-serif' } ]; - const [size,setSize] = useState('normal'); - const [inputStyle,setInputStyle] = useState('outlined'); + const [size, setSize] = useState('normal'); + const [inputStyle, setInputStyle] = useState('outlined'); const [selectedCity, setSelectedCity] = useState(null); const cities = [ { name: 'New York', code: 'NY' }, @@ -29,19 +29,19 @@ const DesignerSection = (props) => { { name: 'London', code: 'LDN' }, { name: 'Paris', code: 'PRS' } ]; - const [range, setRange] = useState([20,80]); + const [range, setRange] = useState([20, 80]); const [checkboxValue, setCheckboxValue] = useState([1]); const editor = useRef(null); const changeTheme = (color, darker) => { editor.current.style.setProperty('--dd-primary', color); editor.current.style.setProperty('--dd-primary-darker', darker); - } + }; const changeFont = (value) => { editor.current.style.setProperty('--dd-font', value); setFont(value); - } + }; const editorClassName = classNames('p-4 designer-demo', { 'p-input-filled': inputStyle === 'filled', @@ -51,13 +51,11 @@ const DesignerSection = (props) => { const onCheckboxChange = (e) => { let _checkboxValue = [...checkboxValue]; - if (e.checked) - _checkboxValue.push(e.value); - else - _checkboxValue.splice(_checkboxValue.indexOf(e.value), 1); + if (e.checked) _checkboxValue.push(e.value); + else _checkboxValue.splice(_checkboxValue.indexOf(e.value), 1); setCheckboxValue(_checkboxValue); - } + }; const designerLogo = props.dark ? 'designer-light.svg' : 'designer-dark.svg'; @@ -65,38 +63,43 @@ const DesignerSection = (props) => {
    Theme Designer

    Designer is the ultimate tool to create your own PrimeReact experience powered by a SASS based theme engine with 500+ variables and a Visual Designer.

    -
    +
    -
    +
    {designerLogo}
    Primary
    - - - - + + + +
    Font - changeFont(e.value)}> + changeFont(e.value)}> Size
    setSize('small')} checked={size === 'small'} /> - +
    setSize('normal')} checked={size === 'normal'} /> - +
    setSize('large')} checked={size === 'large'} /> - +
    @@ -104,11 +107,15 @@ const DesignerSection = (props) => {
    setInputStyle(e.value)} checked={inputStyle === 'outlined'} /> - +
    setInputStyle(e.value)} checked={inputStyle === 'filled'} /> - +
    @@ -118,18 +125,24 @@ const DesignerSection = (props) => {
    -
    +
    - +
    - +
    - +
    $ @@ -137,7 +150,9 @@ const DesignerSection = (props) => {
    - +
    @@ -150,18 +165,24 @@ const DesignerSection = (props) => { setSelectedCity(e.value)} optionLabel="name" />
    - + setRange(e.value)} range /> Checkboxes
    - +
    - +
    @@ -177,6 +198,6 @@ const DesignerSection = (props) => {
    ); -} +}; export default DesignerSection; diff --git a/pages/landing/featuressection.js b/pages/landing/featuressection.js index 22299a3c8b..90117fb9e1 100644 --- a/pages/landing/featuressection.js +++ b/pages/landing/featuressection.js @@ -7,59 +7,59 @@ const FeaturesSection = (props) => {
    Features

    PrimeReact is the most complete solution for your UI requirements.

    -
    +
    - components icon + components icon
    80+ UI Components

    The ultimate set of UI Components to assist you with 80+ impressive React Components.

    - components icon + components icon
    Community

    Connect with the other open source community members, collaborate and have a voice in the project roadmap.

    - components icon + components icon
    Productivity

    Boost your productivity by achieving more in less time and accomplish amazing results.

    - components icon + components icon
    Accessibility

    The ultimate set of UI Components to assist you with 80+ impressive React Components.

    - components icon + components icon
    Enterprise Support

    Exceptional support service featuring response within 1 business day and option to request enhancements and new features for the library.

    - components icon + components icon
    Mobile

    First class support for responsive design led by touch optimized elements.

    - components icon + components icon
    Themes

    Built on a design-agnostic api, choose from a vast amount of themes such as material, bootstrap, custom or develop your own.

    - components icon + components icon
    Typescript

    Top-notch support for Typescript with types and tooling assistance.

    @@ -67,6 +67,6 @@ const FeaturesSection = (props) => {
    ); -} +}; export default FeaturesSection; diff --git a/pages/landing/footersection.js b/pages/landing/footersection.js index cacafa50b1..c5c3532f6f 100644 --- a/pages/landing/footersection.js +++ b/pages/landing/footersection.js @@ -16,7 +16,9 @@ const FooterSection = (props) => {
  • - Examples + + Examples +
  • @@ -24,10 +26,14 @@ const FooterSection = (props) => {
    • Support
    • - Forum + + Forum +
    • - Discord + + Discord +
    • @@ -40,25 +46,39 @@ const FooterSection = (props) => { @@ -71,7 +91,9 @@ const FooterSection = (props) => {
    • - Designer + + Designer +
    • @@ -102,6 +124,6 @@ const FooterSection = (props) => { ); -} +}; export default FooterSection; diff --git a/pages/landing/getstartedsection.js b/pages/landing/getstartedsection.js index 05d80a1ad2..4c77bacd03 100644 --- a/pages/landing/getstartedsection.js +++ b/pages/landing/getstartedsection.js @@ -4,14 +4,18 @@ const GetStartedSection = () => { return (
      - Get Started + + Get Started +
      - npm i primereact primeicons + + npm i primereact primeicons +
      ); -} +}; export default GetStartedSection; diff --git a/pages/landing/headersection.js b/pages/landing/headersection.js index a3e7f58c9e..b8058d8d44 100644 --- a/pages/landing/headersection.js +++ b/pages/landing/headersection.js @@ -6,50 +6,48 @@ import { classNames } from '../../components/lib/utils/ClassNames'; const HeaderSection = (props) => { const contextPath = getConfig().publicRuntimeConfig.contextPath; const [menuActive, setMenuActive] = useState(false); - const colorSchemeIcon = classNames('pi', {'pi-sun': props.dark, 'pi-moon': !props.dark}); + const colorSchemeIcon = classNames('pi', { 'pi-sun': props.dark, 'pi-moon': !props.dark }); const containerElement = useRef(null); const changeColorScheme = () => { props.onToggleColorScheme(); - } - const headerClassName = classNames('landing-header pad-section', {'landing-header-active': menuActive}); + }; + const headerClassName = classNames('landing-header pad-section', { 'landing-header-active': menuActive }); const scrollListener = useRef(); const bindScrollListener = () => { scrollListener.current = () => { if (containerElement && containerElement.current) { - if (window.scrollY > 0) - containerElement.current.classList.add('landing-header-sticky'); - else - containerElement.current.classList.remove('landing-header-sticky'); + if (window.scrollY > 0) containerElement.current.classList.add('landing-header-sticky'); + else containerElement.current.classList.remove('landing-header-sticky'); } - } + }; window.addEventListener('scroll', scrollListener.current); - } + }; const unbindScrollListener = () => { if (scrollListener.current) { window.removeEventListener('scroll', scrollListener.current); scrollListener.current = null; } - } + }; useEffect(() => { bindScrollListener(); return function unbind() { unbindScrollListener(); - } + }; }, []); useEffect(() => { if (scrollListener.current) { scrollListener.current(); } - }); + }); return (
      - primereact logo + primereact logo
      @@ -98,6 +96,6 @@ const HeaderSection = (props) => {
      ); -} +}; export default HeaderSection; diff --git a/pages/landing/herosection.js b/pages/landing/herosection.js index 617ab84436..305d7b656b 100644 --- a/pages/landing/herosection.js +++ b/pages/landing/herosection.js @@ -6,10 +6,10 @@ import GetStartedSection from './getstartedsection'; const HeroSection = () => { const contextPath = getConfig().publicRuntimeConfig.contextPath; - const [animationClass, setAnimationClass] = useState(""); + const [animationClass, setAnimationClass] = useState(''); useEffect(() => { - setAnimationClass("hero-animation"); + setAnimationClass('hero-animation'); document.body.classList.remove('blocked-scroll'); }, []); // eslint-disable-line react-hooks/exhaustive-deps @@ -18,7 +18,7 @@ const HeroSection = () => {
      -
      window.location.href = 'https://www.primefaces.org/store'}> +
      (window.location.href = 'https://www.primefaces.org/store')}>
      primereact templates
      @@ -27,7 +27,10 @@ const HeroSection = () => {
      -
      window.location.href = 'https://www.primefaces.org/designer-react'}> +
      (window.location.href = 'https://www.primefaces.org/designer-react')} + >
      primereact templates
      @@ -38,7 +41,7 @@ const HeroSection = () => {
      -
      window.location.href = 'https://github.com/primefaces/primereact'}> +
      (window.location.href = 'https://github.com/primefaces/primereact')}>
      primereact core
      @@ -57,7 +60,7 @@ const HeroSection = () => {
      -
      window.location.href = 'https://www.primefaces.org/primeflex'}> +
      (window.location.href = 'https://www.primefaces.org/primeflex')}>
      primereact icons
      @@ -68,7 +71,7 @@ const HeroSection = () => {
      -
      window.location.href = 'https://www.primefaces.org/primeblocks-react'}> +
      (window.location.href = 'https://www.primefaces.org/primeblocks-react')}>
      primereact templates
      @@ -101,6 +104,6 @@ const HeroSection = () => {
      ); -} +}; export default HeroSection; diff --git a/pages/landing/templatesection.js b/pages/landing/templatesection.js index 4ad0d07994..520f326843 100644 --- a/pages/landing/templatesection.js +++ b/pages/landing/templatesection.js @@ -3,10 +3,10 @@ import { useEffect, useState } from 'react'; const TemplateSection = (props) => { const contextPath = getConfig().publicRuntimeConfig.contextPath; - const [animationClass, setAnimationClass] = useState(""); + const [animationClass, setAnimationClass] = useState(''); useEffect(() => { - setAnimationClass("templates-animation"); + setAnimationClass('templates-animation'); }, []); // eslint-disable-line react-hooks/exhaustive-deps return ( @@ -20,201 +20,172 @@ const TemplateSection = (props) => {
      -
      - -
      - +
      - Atlantis Preview - -
      -
      - template-text -
      - -
      - +
      +
      - Serenity Preview - -
      - -
      -
      -
      - - - - - - - - - - - - - - - - - - - - - - - - - - + + Atlantis Preview + +
      +
      + template-text +
      +
      -
      - - - - - - - - - - - - - - - - - - - - - - - - - - + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + + + + + + + + + + + + + + + + + + + + + + + + +
      -
      - ); -} +}; export default TemplateSection; diff --git a/pages/landing/themesection.js b/pages/landing/themesection.js index 7e7fcacc50..028c76fd45 100644 --- a/pages/landing/themesection.js +++ b/pages/landing/themesection.js @@ -14,14 +14,14 @@ const ThemeSection = (props) => { const [customers, setCustomers] = useState(null); const [selectedCustomers, setSelectedCustomers] = useState(null); const [filters, setFilters] = useState({ - 'global': { value: null, matchMode: FilterMatchMode.CONTAINS }, - 'name': { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.STARTS_WITH }] }, + global: { value: null, matchMode: FilterMatchMode.CONTAINS }, + name: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.STARTS_WITH }] }, 'country.name': { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.STARTS_WITH }] }, - 'representative': { value: null, matchMode: FilterMatchMode.IN }, - 'date': { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.DATE_IS }] }, - 'balance': { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.EQUALS }] }, - 'status': { operator: FilterOperator.OR, constraints: [{ value: null, matchMode: FilterMatchMode.EQUALS }] }, - 'activity': { value: null, matchMode: FilterMatchMode.BETWEEN } + representative: { value: null, matchMode: FilterMatchMode.IN }, + date: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.DATE_IS }] }, + balance: { operator: FilterOperator.AND, constraints: [{ value: null, matchMode: FilterMatchMode.EQUALS }] }, + status: { operator: FilterOperator.OR, constraints: [{ value: null, matchMode: FilterMatchMode.EQUALS }] }, + activity: { value: null, matchMode: FilterMatchMode.BETWEEN } }); const [globalFilterValue, setGlobalFilterValue] = useState(''); const [loading, setLoading] = useState(true); @@ -30,30 +30,33 @@ const ThemeSection = (props) => { const changeTheme = (name, color) => { let newTheme = name + '-' + (props.dark ? 'dark' : 'light') + '-' + color; props.onThemeChange(newTheme); - } + }; useEffect(() => { - customerService.getCustomersLarge().then(data => { setCustomers(getCustomers(data)); setLoading(false) }); + customerService.getCustomersLarge().then((data) => { + setCustomers(getCustomers(data)); + setLoading(false); + }); }, []); // eslint-disable-line react-hooks/exhaustive-deps const getCustomers = (data) => { - return [...data || []].map(d => { + return [...(data || [])].map((d) => { d.date = new Date(d.date); return d; }); - } + }; const formatDate = (value) => { return value.toLocaleDateString('en-US', { day: '2-digit', month: '2-digit', - year: 'numeric', + year: 'numeric' }); - } + }; const formatCurrency = (value) => { return value.toLocaleString('en-US', { style: 'currency', currency: 'USD' }); - } + }; const onGlobalFilterChange = (e) => { const value = e.target.value; @@ -62,7 +65,7 @@ const ThemeSection = (props) => { setFilters(_filters); setGlobalFilterValue(value); - } + }; const renderHeader = () => { return ( @@ -73,47 +76,59 @@ const ThemeSection = (props) => {
      - ) - } + ); + }; const countryBodyTemplate = (rowData) => { return ( - flag e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} className={`flag flag-${rowData.country.code}`} width={30} /> + flag (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} + className={`flag flag-${rowData.country.code}`} + width={30} + /> {rowData.country.name} ); - } + }; const representativeBodyTemplate = (rowData) => { const representative = rowData.representative; return ( - {representative.name} e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} width={32} style={{ verticalAlign: 'middle' }} /> + {representative.name} (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} + width={32} + style={{ verticalAlign: 'middle' }} + /> {representative.name} ); - } + }; const dateBodyTemplate = (rowData) => { return formatDate(rowData.date); - } + }; const balanceBodyTemplate = (rowData) => { return formatCurrency(rowData.balance); - } + }; const statusBodyTemplate = (rowData) => { return {rowData.status}; - } + }; const activityBodyTemplate = (rowData) => { - return ; - } + return ; + }; const actionBodyTemplate = () => { return ; - } + }; const header = renderHeader(); @@ -122,26 +137,46 @@ const ThemeSection = (props) => {
      Themes

      Crafted on a design-agnostic infrastructure, choose from a vast amount of themes such as material, bootstrap, tailwind, primeone or develop your own.

      - - - - more... + + + + + more... +
      -
      +
      - setSelectedCustomers(e.value)} - filters={filters} filterDisplay="menu" loading={loading} responsiveLayout="scroll" - globalFilterFields={['name', 'country.name', 'representative.name', 'balance', 'status']} emptyMessage="No customers found." - currentPageReportTemplate="Showing {first} to {last} of {totalRecords} entries"> + dataKey="id" + rowHover + selection={selectedCustomers} + onSelectionChange={(e) => setSelectedCustomers(e.value)} + filters={filters} + filterDisplay="menu" + loading={loading} + responsiveLayout="scroll" + globalFilterFields={['name', 'country.name', 'representative.name', 'balance', 'status']} + emptyMessage="No customers found." + currentPageReportTemplate="Showing {first} to {last} of {totalRecords} entries" + > - + @@ -150,6 +185,6 @@ const ThemeSection = (props) => {
      ); -} +}; export default ThemeSection; diff --git a/pages/landing/userssection.js b/pages/landing/userssection.js index 1016e21fc9..bac9bf0f61 100644 --- a/pages/landing/userssection.js +++ b/pages/landing/userssection.js @@ -72,6 +72,6 @@ const UsersSection = (props) => {
      ); -} +}; export default UsersSection; diff --git a/pages/listbox/index.js b/pages/listbox/index.js index d6a1bbf307..e4748bbde4 100644 --- a/pages/listbox/index.js +++ b/pages/listbox/index.js @@ -6,7 +6,6 @@ import Head from 'next/head'; import getConfig from 'next/config'; const ListBoxDemo = () => { - const [selectedCity, setSelectedCity] = useState(null); const [selectedCountries, setSelectedCountries] = useState(null); const [selectedGroupedCity, setSelectedGroupedCity] = useState(null); @@ -36,7 +35,8 @@ const ListBoxDemo = () => { const groupedCities = [ { - label: 'Germany', code: 'DE', + label: 'Germany', + code: 'DE', items: [ { label: 'Berlin', value: 'Berlin' }, { label: 'Frankfurt', value: 'Frankfurt' }, @@ -45,7 +45,8 @@ const ListBoxDemo = () => { ] }, { - label: 'USA', code: 'US', + label: 'USA', + code: 'US', items: [ { label: 'Chicago', value: 'Chicago' }, { label: 'Los Angeles', value: 'Los Angeles' }, @@ -54,7 +55,8 @@ const ListBoxDemo = () => { ] }, { - label: 'Japan', code: 'JP', + label: 'Japan', + code: 'JP', items: [ { label: 'Kyoto', value: 'Kyoto' }, { label: 'Osaka', value: 'Osaka' }, @@ -69,20 +71,30 @@ const ListBoxDemo = () => { const countryTemplate = (option) => { return (
      - {option.name} e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} className={`flag flag-${option.code.toLowerCase()}`} /> + {option.name} (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} + className={`flag flag-${option.code.toLowerCase()}`} + />
      {option.name}
      ); - } + }; const groupedItemTemplate = (option) => { return (
      - {option.name} e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} className={`flag flag-${option.code.toLowerCase()}`} /> + {option.name} (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} + className={`flag flag-${option.code.toLowerCase()}`} + />
      {option.label}
      ); - } + }; return (
      @@ -106,12 +118,31 @@ const ListBoxDemo = () => { setSelectedCity(e.value)} optionLabel="name" style={{ width: '15rem' }} />
      Grouped
      - setSelectedGroupedCity(e.value)} optionLabel="label" optionGroupLabel="label" optionGroupChildren="items" - optionGroupTemplate={groupedItemTemplate} style={{ width: '15rem' }} listStyle={{ maxHeight: '250px' }} /> + setSelectedGroupedCity(e.value)} + optionLabel="label" + optionGroupLabel="label" + optionGroupChildren="items" + optionGroupTemplate={groupedItemTemplate} + style={{ width: '15rem' }} + listStyle={{ maxHeight: '250px' }} + />
      Advanced with Templating, Filtering and Multiple Selection
      - setSelectedCountries(e.value)} multiple filter optionLabel="name" filterPlaceholder="Search countries" - itemTemplate={countryTemplate} style={{ width: '15rem' }} listStyle={{ maxHeight: '250px' }} /> + setSelectedCountries(e.value)} + multiple + filter + optionLabel="name" + filterPlaceholder="Search countries" + itemTemplate={countryTemplate} + style={{ width: '15rem' }} + listStyle={{ maxHeight: '250px' }} + />
      Virtual Scroll (100000 Items)
      setSelectedItem(e.value)} style={{ width: '15rem' }} listStyle={{ height: '250px' }} /> @@ -121,6 +152,6 @@ const ListBoxDemo = () => {
      ); -} +}; export default ListBoxDemo; diff --git a/pages/locale/index.js b/pages/locale/index.js index 207ba3b5ca..10f8fa75b8 100644 --- a/pages/locale/index.js +++ b/pages/locale/index.js @@ -3,7 +3,6 @@ import { CodeHighlight } from '../../components/doc/common/codehighlight'; import Head from 'next/head'; const LocaleDemo = () => { - return (
      @@ -15,23 +14,29 @@ const LocaleDemo = () => {

      The Locale API allows setting i18n and l7n options globally for the components.

      Getting Started
      -

      By using the locale, addLocale, updateLocaleOption, updateLocaleOptions, localeOption and localeOptions methods, locale objects can be used in the whole application or in certain pages.

      - -{` +

      + By using the locale, addLocale, updateLocaleOption, updateLocaleOptions, localeOption and localeOptions methods, locale objects can be used in the whole application or in certain pages. +

      + + {` import { locale, addLocale, updateLocaleOption, updateLocaleOptions, localeOption, localeOptions } from 'primereact/api'; `} - +
      -

      The current locale can be set with locale method.

      - -{` +

      + The current locale can be set with locale method. +

      + + {` locale('en'); `} - +
      -

      New locale values can be added using addLocale method for the application.

      - -{` +

      + New locale values can be added using addLocale method for the application. +

      + + {` addLocale('es', { firstDayOfWeek: 1, dayNames: ['domingo', 'lunes', 'martes', 'miércoles', 'jueves', 'viernes', 'sábado'], @@ -45,18 +50,20 @@ addLocale('es', { locale('es'); `} - +

      Locale values can be changed dynamically. (Note: please don't forget to update main or current component with state management or forceUpdate method of React.)

      - -{` + + {`
      - ) -} + ); +}; export default LocaleDemo; diff --git a/pages/megamenu/index.js b/pages/megamenu/index.js index bc835061fb..98ba63d6fb 100644 --- a/pages/megamenu/index.js +++ b/pages/megamenu/index.js @@ -7,10 +7,10 @@ import Head from 'next/head'; import getConfig from 'next/config'; const MegaMenuDemo = () => { - const items = [ { - label: 'Videos', icon: 'pi pi-fw pi-video', + label: 'Videos', + icon: 'pi pi-fw pi-video', items: [ [ { @@ -35,7 +35,8 @@ const MegaMenuDemo = () => { ] }, { - label: 'Users', icon: 'pi pi-fw pi-users', + label: 'Users', + icon: 'pi pi-fw pi-users', items: [ [ { @@ -45,7 +46,7 @@ const MegaMenuDemo = () => { { label: 'User 2', items: [{ label: 'User 2.1' }, { label: 'User 2.2' }] - }, + } ], [ { @@ -70,7 +71,8 @@ const MegaMenuDemo = () => { ] }, { - label: 'Events', icon: 'pi pi-fw pi-calendar', + label: 'Events', + icon: 'pi pi-fw pi-calendar', items: [ [ { @@ -95,7 +97,8 @@ const MegaMenuDemo = () => { ] }, { - label: 'Settings', icon: 'pi pi-fw pi-cog', + label: 'Settings', + icon: 'pi pi-fw pi-cog', items: [ [ { @@ -122,8 +125,8 @@ const MegaMenuDemo = () => { ]; const contextPath = getConfig().publicRuntimeConfig.contextPath; - const start = logo e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} height="40">; - const end = ; + const start = logo (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} height="40">; + const end = ; return (
      @@ -155,6 +158,6 @@ const MegaMenuDemo = () => {
      ); -} +}; export default MegaMenuDemo; diff --git a/pages/mention/index.js b/pages/mention/index.js index b6a68853bc..4fdb5449ca 100644 --- a/pages/mention/index.js +++ b/pages/mention/index.js @@ -6,7 +6,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const MentionDemo = () => { - const [customers, setCustomers] = useState([]); const [suggestions, setSuggestions] = useState([]); const [multipleSuggestions, setMultipleSuggestions] = useState([]); @@ -15,11 +14,11 @@ const MentionDemo = () => { const customerservice = new CustomerService(); useEffect(() => { - customerservice.getCustomersSmall().then(data => { - data.forEach(d => d['nickname'] = `${d.name.replace(/\s+/g, '').toLowerCase()}_${d.id}`); + customerservice.getCustomersSmall().then((data) => { + data.forEach((d) => (d['nickname'] = `${d.name.replace(/\s+/g, '').toLowerCase()}_${d.id}`)); setCustomers(data); }); - }, []) // eslint-disable-line react-hooks/exhaustive-deps + }, []); // eslint-disable-line react-hooks/exhaustive-deps const onSearch = (event) => { //in a real application, make a request to a remote url with the query and return suggestions, for demo we filter at client side @@ -29,8 +28,7 @@ const MentionDemo = () => { if (!query.trim().length) { suggestions = [...customers]; - } - else { + } else { suggestions = customers.filter((customer) => { return customer.nickname.toLowerCase().startsWith(query.toLowerCase()); }); @@ -38,7 +36,7 @@ const MentionDemo = () => { setSuggestions(suggestions); }, 250); - } + }; const onMultipleSearch = (event) => { const trigger = event.trigger; @@ -51,8 +49,7 @@ const MentionDemo = () => { if (!query.trim().length) { suggestions = [...customers]; - } - else { + } else { suggestions = customers.filter((customer) => { return customer.nickname.toLowerCase().startsWith(query.toLowerCase()); }); @@ -60,16 +57,14 @@ const MentionDemo = () => { setMultipleSuggestions(suggestions); }, 250); - } - else if (trigger === '#') { + } else if (trigger === '#') { setTimeout(() => { const query = event.query; let suggestions; if (!query.trim().length) { suggestions = [...tagSuggestions]; - } - else { + } else { suggestions = tagSuggestions.filter((tag) => { return tag.toLowerCase().startsWith(query.toLowerCase()); }); @@ -78,34 +73,33 @@ const MentionDemo = () => { setMultipleSuggestions(suggestions); }, 250); } - } + }; const itemTemplate = (suggestion) => { const src = 'images/avatar/' + suggestion.representative.image; return (
      - {suggestion.name} e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} width="32" style={{ verticalAlign: 'middle' }} /> + {suggestion.name} (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} width="32" style={{ verticalAlign: 'middle' }} /> {suggestion.name} @{suggestion.nickname}
      ); - } + }; const multipleItemTemplate = (suggestion, options) => { const trigger = options.trigger; if (trigger === '@' && suggestion.nickname) { return itemTemplate(suggestion); - } - else if (trigger === '#' && !suggestion.nickname) { + } else if (trigger === '#' && !suggestion.nickname) { return {suggestion}; } return null; - } + }; return (
      @@ -125,22 +119,28 @@ const MentionDemo = () => {
      Basic
      - +
      Auto Resize
      - +
      Multiple Trigger
      - +
      - ) -} + ); +}; export default MentionDemo; diff --git a/pages/menu/index.js b/pages/menu/index.js index 1a0e82dd1a..7f3a200d97 100644 --- a/pages/menu/index.js +++ b/pages/menu/index.js @@ -8,7 +8,6 @@ import Head from 'next/head'; import Link from 'next/link'; const MenuDemo = () => { - const menu = useRef(null); const toast = useRef(null); @@ -86,7 +85,7 @@ const MenuDemo = () => {
      - ) -} + ); +}; export default MenuDemo; diff --git a/pages/menubar/index.js b/pages/menubar/index.js index 2b292fe168..944567b71e 100644 --- a/pages/menubar/index.js +++ b/pages/menubar/index.js @@ -7,7 +7,6 @@ import Head from 'next/head'; import getConfig from 'next/config'; const MenubarDemo = () => { - const items = [ { label: 'File', @@ -24,8 +23,7 @@ const MenubarDemo = () => { { label: 'Video', icon: 'pi pi-fw pi-video' - }, - + } ] }, { @@ -60,8 +58,7 @@ const MenubarDemo = () => { { label: 'Justify', icon: 'pi pi-fw pi-align-justify' - }, - + } ] }, { @@ -70,13 +67,11 @@ const MenubarDemo = () => { items: [ { label: 'New', - icon: 'pi pi-fw pi-user-plus', - + icon: 'pi pi-fw pi-user-plus' }, { label: 'Delete', - icon: 'pi pi-fw pi-user-minus', - + icon: 'pi pi-fw pi-user-minus' }, { label: 'Search', @@ -137,7 +132,7 @@ const MenubarDemo = () => { ]; const contextPath = getConfig().publicRuntimeConfig.contextPath; - const start = logo e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} height="40" className="mr-2">; + const start = logo (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} height="40" className="mr-2">; const end = ; return ( @@ -162,6 +157,6 @@ const MenubarDemo = () => {
      ); -} +}; export default MenubarDemo; diff --git a/pages/menumodel/index.js b/pages/menumodel/index.js index aa78ae6887..47ee09d06b 100644 --- a/pages/menumodel/index.js +++ b/pages/menumodel/index.js @@ -3,31 +3,29 @@ import { CodeHighlight } from '../../components/doc/common/codehighlight'; import Head from 'next/head'; const MenuModelDemo = () => { - return ( -
      - - MenuModel - PrimeReact - - -
      -
      -

      MenuModel API

      -

      PrimeReact menus components share a common api to specify the menuitems and submenus.

      -
      + return ( +
      + + MenuModel - PrimeReact + + +
      +
      +

      MenuModel API

      +

      PrimeReact menus components share a common api to specify the menuitems and submenus.

      - -
      - ) -} + + +
      + ); +}; export default MenuModelDemo; const MenuModelDoc = memo(() => { - - return (
      -

      MenuItem

      +

      MenuItem

      Core of the API is the MenuItem class that defines various options such as the label, icon and children of an item in a menu.

      {` @@ -45,7 +43,7 @@ const items = [ ] `} - +

      MenuItem provides the following properties. Note that not all of them may be utilized by the corresponding menu component.

      @@ -138,8 +136,8 @@ const items = [

      Template

      Used to create custom menuitem elements.

      - -{` + + {` const items = [ { @@ -157,10 +155,10 @@ const items = ]; `} - + - - {` + + {` template: (item, options) => { // item: Current item object. // options.onClick: Click event for the default element. @@ -173,12 +171,12 @@ template: (item, options) => { // Note: Extra options may come according to the components. } `} - + -

      Command

      -

      The function to invoke when an item is clicked is defined using the command property.

      - - {` +

      Command

      +

      The function to invoke when an item is clicked is defined using the command property.

      + + {` const items = [ { @@ -192,12 +190,12 @@ const items = ]; `} - +

      Navigation

      Navigation is specified using url property for external links or using command function for internal router.

      - -{` + + {` const items = [ { @@ -215,7 +213,7 @@ const items = ]; `} - +
      - ) -}) + ); +}); diff --git a/pages/messages/index.js b/pages/messages/index.js index cf4d459816..aaf5d93645 100644 --- a/pages/messages/index.js +++ b/pages/messages/index.js @@ -23,9 +23,11 @@ const MessagesDemo = () => { ]); msgs3.current.show({ - severity: 'info', sticky: true, content: ( + severity: 'info', + sticky: true, + content: ( - logo e.target.src='https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} width="32" /> + logo (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} width="32" />
      Always bet on Prime.
      ) @@ -39,11 +41,11 @@ const MessagesDemo = () => { { severity: 'warn', summary: 'Warning', detail: 'Message Content', sticky: true }, { severity: 'error', summary: 'Error', detail: 'Message Content', sticky: true } ]); - } + }; const clearMessages = () => { msgs2.current.clear(); - } + }; return (
      @@ -92,12 +94,16 @@ const MessagesDemo = () => {
      Validation Message
      - +
      - +
      @@ -106,14 +112,16 @@ const MessagesDemo = () => {
      - Username is not available. + + Username is not available. +
      - ) -} + ); +}; export default MessagesDemo; diff --git a/pages/multiselect/index.js b/pages/multiselect/index.js index 3cb92dd03c..36953d4379 100644 --- a/pages/multiselect/index.js +++ b/pages/multiselect/index.js @@ -7,7 +7,6 @@ import Head from 'next/head'; import getConfig from 'next/config'; const MultiSelectDemo = () => { - const [lazyItems, setLazyItems] = useState([]); const [lazyLoading, setLazyLoading] = useState(false); const [selectedCities1, setSelectedCities1] = useState(null); @@ -44,7 +43,8 @@ const MultiSelectDemo = () => { const groupedCities = [ { - label: 'Germany', code: 'DE', + label: 'Germany', + code: 'DE', items: [ { label: 'Berlin', value: 'Berlin' }, { label: 'Frankfurt', value: 'Frankfurt' }, @@ -53,7 +53,8 @@ const MultiSelectDemo = () => { ] }, { - label: 'USA', code: 'US', + label: 'USA', + code: 'US', items: [ { label: 'Chicago', value: 'Chicago' }, { label: 'Los Angeles', value: 'Los Angeles' }, @@ -62,7 +63,8 @@ const MultiSelectDemo = () => { ] }, { - label: 'Japan', code: 'JP', + label: 'Japan', + code: 'JP', items: [ { label: 'Kyoto', value: 'Kyoto' }, { label: 'Osaka', value: 'Osaka' }, @@ -74,31 +76,40 @@ const MultiSelectDemo = () => { useEffect(() => { setLazyItems(Array.from({ length: 100000 })); - setLazyLoading(false) + setLazyLoading(false); }, []); // eslint-disable-line react-hooks/exhaustive-deps - const countryTemplate = (option) => { return (
      - {option.name} e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} className={`flag flag-${option.code.toLowerCase()}`} /> + {option.name} (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} + className={`flag flag-${option.code.toLowerCase()}`} + />
      {option.name}
      ); - } + }; const selectedCountriesTemplate = (option) => { if (option) { return (
      - {option.name} e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} className={`flag flag-${option.code.toLowerCase()}`} /> + {option.name} (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} + className={`flag flag-${option.code.toLowerCase()}`} + />
      {option.name}
      ); } - return "Select Countries"; - } + return 'Select Countries'; + }; const onLazyLoad = (event) => { setLazyLoading(true); @@ -119,7 +130,7 @@ const MultiSelectDemo = () => { setLazyItems(_lazyItems); setLazyLoading(false); }, Math.random() * 1000 + 250); - } + }; const panelFooterTemplate = () => { const selectedItems = selectedCountries; @@ -129,16 +140,21 @@ const MultiSelectDemo = () => { {length} item{length > 1 ? 's' : ''} selected.
      ); - } + }; const groupedItemTemplate = (option) => { return (
      - {option.label} e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} className={`flag flag-${option.code.toLowerCase()}`} /> + {option.label} (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} + className={`flag flag-${option.code.toLowerCase()}`} + />
      {option.label}
      ); - } + }; return (
      @@ -164,32 +180,79 @@ const MultiSelectDemo = () => { setSelectedCities2(e.value)} optionLabel="name" placeholder="Select a City" display="chip" />
      Grouped
      - setSelectedGroupedCities(e.value)} optionLabel="label" optionGroupLabel="label" optionGroupChildren="items" - optionGroupTemplate={groupedItemTemplate} placeholder="Select Cities" /> + setSelectedGroupedCities(e.value)} + optionLabel="label" + optionGroupLabel="label" + optionGroupChildren="items" + optionGroupTemplate={groupedItemTemplate} + placeholder="Select Cities" + />
      Advanced with Templating and Filtering
      - setSelectedCountries(e.value)} optionLabel="name" placeholder="Select Countries" filter className="multiselect-custom" - itemTemplate={countryTemplate} selectedItemTemplate={selectedCountriesTemplate} panelFooterTemplate={panelFooterTemplate} /> + setSelectedCountries(e.value)} + optionLabel="name" + placeholder="Select Countries" + filter + className="multiselect-custom" + itemTemplate={countryTemplate} + selectedItemTemplate={selectedCountriesTemplate} + panelFooterTemplate={panelFooterTemplate} + />
      Virtual Scroll (100000 Items)
      - { setSelectedItems1(e.value); setSelectAll(e.value.length === items.length) }} selectAll={selectAll} onSelectAll={(e) => { setSelectAll(!e.checked); setSelectedItems1(e.checked ? [] : items.map(item => item.value)) }} virtualScrollerOptions={{ itemSize: 43 }} maxSelectedLabels={3} placeholder="Select Item" /> + { + setSelectedItems1(e.value); + setSelectAll(e.value.length === items.length); + }} + selectAll={selectAll} + onSelectAll={(e) => { + setSelectAll(!e.checked); + setSelectedItems1(e.checked ? [] : items.map((item) => item.value)); + }} + virtualScrollerOptions={{ itemSize: 43 }} + maxSelectedLabels={3} + placeholder="Select Item" + />
      Virtual Scroll (100000 Items) and Lazy
      - setSelectedItems2(e.value)} virtualScrollerOptions={{ - lazy: true, onLazyLoad: onLazyLoad, itemSize: 43, showLoader: true, loading: lazyLoading, delay: 250, loadingTemplate: (options) => { - return ( -
      - -
      - ) - } - }} maxSelectedLabels={3} placeholder="Select Item" showSelectAll={false} /> + setSelectedItems2(e.value)} + virtualScrollerOptions={{ + lazy: true, + onLazyLoad: onLazyLoad, + itemSize: 43, + showLoader: true, + loading: lazyLoading, + delay: 250, + loadingTemplate: (options) => { + return ( +
      + +
      + ); + } + }} + maxSelectedLabels={3} + placeholder="Select Item" + showSelectAll={false} + />
      ); -} +}; export default MultiSelectDemo; diff --git a/pages/multistatecheckbox/index.js b/pages/multistatecheckbox/index.js index b9d493be97..b3778207bd 100644 --- a/pages/multistatecheckbox/index.js +++ b/pages/multistatecheckbox/index.js @@ -5,7 +5,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const MultiStateCheckboxDemo = () => { - const [value, setValue] = useState('public'); const options = [ { value: 'public', icon: 'pi pi-globe' }, @@ -40,6 +39,6 @@ const MultiStateCheckboxDemo = () => {
      ); -} +}; export default MultiStateCheckboxDemo; diff --git a/pages/orderlist/index.js b/pages/orderlist/index.js index 595de31f19..f2b4e8167a 100644 --- a/pages/orderlist/index.js +++ b/pages/orderlist/index.js @@ -7,20 +7,19 @@ import Head from 'next/head'; import getConfig from 'next/config'; const OrderListDemo = () => { - const [products, setProducts] = useState([]); const productService = new ProductService(); const contextPath = getConfig().publicRuntimeConfig.contextPath; useEffect(() => { - productService.getProductsSmall().then(data => setProducts(data)); + productService.getProductsSmall().then((data) => setProducts(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps const itemTemplate = (item) => { return (
      - e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} alt={item.name} /> + (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} alt={item.name} />
      {item.name}
      @@ -33,7 +32,7 @@ const OrderListDemo = () => {
      ); - } + }; return (
      @@ -52,14 +51,13 @@ const OrderListDemo = () => {
      - setProducts(e.value)}> + setProducts(e.value)}>
      ); -} +}; export default OrderListDemo; diff --git a/pages/organizationchart/index.js b/pages/organizationchart/index.js index 9446039c22..0e22252746 100644 --- a/pages/organizationchart/index.js +++ b/pages/organizationchart/index.js @@ -6,116 +6,126 @@ import Head from 'next/head'; import getConfig from 'next/config'; const OrganizationChartDemo = () => { - const [selection, setSelection] = useState([]); const contextPath = getConfig().publicRuntimeConfig.contextPath; - const data1 = [{ - label: 'CEO', - type: 'person', - className: 'p-person', - expanded: true, - data: { name: 'Walter White', avatar: 'walter.jpg' }, - children: [ - { - label: 'CFO', - type: 'person', - className: 'p-person', - expanded: true, - data: { name: 'Saul Goodman', 'avatar': 'saul.jpg' }, - children: [{ - label: 'Tax', - className: 'department-cfo' - }, + const data1 = [ + { + label: 'CEO', + type: 'person', + className: 'p-person', + expanded: true, + data: { name: 'Walter White', avatar: 'walter.jpg' }, + children: [ { - label: 'Legal', - className: 'department-cfo' - }], - }, - { - label: 'COO', - type: 'person', - className: 'p-person', - expanded: true, - data: { name: 'Mike E.', avatar: 'mike.jpg' }, - children: [{ - label: 'Operations', - className: 'department-coo' - }] - }, - { - label: 'CTO', - type: 'person', - className: 'p-person', - expanded: true, - data: { name: 'Jesse Pinkman', avatar: 'jesse.jpg' }, - children: [{ - label: 'Development', - className: 'department-cto', + label: 'CFO', + type: 'person', + className: 'p-person', expanded: true, - children: [{ - label: 'Analysis', - className: 'department-cto' - }, - { - label: 'Front End', - className: 'department-cto' - }, - { - label: 'Back End', - className: 'department-cto' - }] + data: { name: 'Saul Goodman', avatar: 'saul.jpg' }, + children: [ + { + label: 'Tax', + className: 'department-cfo' + }, + { + label: 'Legal', + className: 'department-cfo' + } + ] }, { - label: 'QA', - className: 'department-cto' + label: 'COO', + type: 'person', + className: 'p-person', + expanded: true, + data: { name: 'Mike E.', avatar: 'mike.jpg' }, + children: [ + { + label: 'Operations', + className: 'department-coo' + } + ] }, { - label: 'R&D', - className: 'department-cto' - }] - } - ] - }]; - - const data2 = [{ - label: 'F.C Barcelona', - expanded: true, - children: [ - { - label: 'F.C Barcelona', - expanded: true, - children: [ - { - label: 'Chelsea FC' - }, - { - label: 'F.C. Barcelona' - } - ] - }, - { - label: 'Real Madrid', - expanded: true, - children: [ - { - label: 'Bayern Munich' - }, - { - label: 'Real Madrid' - } - ] - } - ] - }]; + label: 'CTO', + type: 'person', + className: 'p-person', + expanded: true, + data: { name: 'Jesse Pinkman', avatar: 'jesse.jpg' }, + children: [ + { + label: 'Development', + className: 'department-cto', + expanded: true, + children: [ + { + label: 'Analysis', + className: 'department-cto' + }, + { + label: 'Front End', + className: 'department-cto' + }, + { + label: 'Back End', + className: 'department-cto' + } + ] + }, + { + label: 'QA', + className: 'department-cto' + }, + { + label: 'R&D', + className: 'department-cto' + } + ] + } + ] + } + ]; + const data2 = [ + { + label: 'F.C Barcelona', + expanded: true, + children: [ + { + label: 'F.C Barcelona', + expanded: true, + children: [ + { + label: 'Chelsea FC' + }, + { + label: 'F.C. Barcelona' + } + ] + }, + { + label: 'Real Madrid', + expanded: true, + children: [ + { + label: 'Bayern Munich' + }, + { + label: 'Real Madrid' + } + ] + } + ] + } + ]; const nodeTemplate = (node) => { - if (node.type === "person") { + if (node.type === 'person') { return (
      {node.label}
      - {node.data.avatar} e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} style={{ width: '32px' }} /> + {node.data.avatar} (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} style={{ width: '32px' }} />
      {node.data.name}
      @@ -123,7 +133,7 @@ const OrganizationChartDemo = () => { } return node.label; - } + }; return (
      @@ -143,8 +153,7 @@ const OrganizationChartDemo = () => {
      Advanced
      - setSelection(event.data)} className="company"> + setSelection(event.data)} className="company">
      Basic
      @@ -153,7 +162,7 @@ const OrganizationChartDemo = () => {
      - ) -} + ); +}; export default OrganizationChartDemo; diff --git a/pages/overlaypanel/index.js b/pages/overlaypanel/index.js index 27f346c451..0869f11384 100644 --- a/pages/overlaypanel/index.js +++ b/pages/overlaypanel/index.js @@ -11,7 +11,6 @@ import Head from 'next/head'; import getConfig from 'next/config'; const OverlayPanelDemo = () => { - const [products, setProducts] = useState(null); const [selectedProduct, setSelectedProduct] = useState(null); const productService = new ProductService(); @@ -20,7 +19,6 @@ const OverlayPanelDemo = () => { const isMounted = useRef(false); const contextPath = getConfig().publicRuntimeConfig.contextPath; - useEffect(() => { if (isMounted.current && selectedProduct) { op.current.hide(); @@ -30,24 +28,24 @@ const OverlayPanelDemo = () => { useEffect(() => { isMounted.current = true; - productService.getProductsSmall().then(data => setProducts(data)); + productService.getProductsSmall().then((data) => setProducts(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps const formatCurrency = (value) => { return value.toLocaleString('en-US', { style: 'currency', currency: 'USD' }); - } + }; const onProductSelect = (e) => { setSelectedProduct(e.value); - } + }; const imageBody = (rowData) => { - return e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} alt={rowData.image} className="product-image" /> - } + return (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} alt={rowData.image} className="product-image" />; + }; const priceBody = (rowData) => { return formatCurrency(rowData.price); - } + }; return (
      @@ -70,8 +68,7 @@ const OverlayPanelDemo = () => {
      - ) -} + ); +}; export default OverlayPanelDemo; diff --git a/pages/paginator/index.js b/pages/paginator/index.js index dfa851dea1..1b74f3fba9 100644 --- a/pages/paginator/index.js +++ b/pages/paginator/index.js @@ -23,79 +23,81 @@ const PaginatorDemo = () => { const [customRows3, setCustomRows3] = useState(10); const [contentFirst, setContentFirst] = useState(0); const [currentPage, setCurrentPage] = useState(1); - const [pageInputTooltip, setPageInputTooltip] = useState('Press \'Enter\' key to go to this page.'); + const [pageInputTooltip, setPageInputTooltip] = useState("Press 'Enter' key to go to this page."); const contextPath = getConfig().publicRuntimeConfig.contextPath; - const onBasicPageChange = (event) => { setBasicFirst(event.first); setBasicRows(event.rows); - } + }; const onCustomPageChange1 = (event) => { setCustomFirst1(event.first); setCustomRows1(event.rows); setCurrentPage(event.page + 1); - } + }; const onCustomPageChange2 = (event) => { setCustomFirst2(event.first); setCustomRows2(event.rows); - } + }; const onCustomPageChange3 = (event) => { setCustomFirst3(event.first); setCustomRows3(event.rows); - } + }; const onContentPageChange = (event) => { setContentFirst(event.first); - } + }; const onPageInputKeyDown = (event, options) => { if (event.key === 'Enter') { const page = parseInt(currentPage); if (page < 0 || page > options.totalPages) { setPageInputTooltip(`Value must be between 1 and ${options.totalPages}.`); - } - else { + } else { const first = currentPage ? options.rows * (page - 1) : 0; setCustomFirst1(first); - setPageInputTooltip('Press \'Enter\' key to go to this page.'); + setPageInputTooltip("Press 'Enter' key to go to this page."); } } - } + }; const onPageInputChange = (event) => { setCurrentPage(event.target.value); - } + }; const leftContent = - ) + ); }, - 'NextPageLink': (options) => { + NextPageLink: (options) => { return ( - ) + ); }, - 'PageLinks': (options) => { + PageLinks: (options) => { if ((options.view.startPage === options.page && options.view.startPage !== 0) || (options.view.endPage === options.page && options.page + 1 !== options.totalPages)) { const className = classNames(options.className, { 'p-disabled': true }); - return ...; + return ( + + ... + + ); } return ( @@ -103,9 +105,9 @@ const PaginatorDemo = () => { {options.page + 1} - ) + ); }, - 'RowsPerPageDropdown': (options) => { + RowsPerPageDropdown: (options) => { const dropdownOptions = [ { label: 10, value: 10 }, { label: 20, value: 20 }, @@ -115,18 +117,17 @@ const PaginatorDemo = () => { return ; }, - 'CurrentPageReport': (options) => { + CurrentPageReport: (options) => { return ( - Go to onPageInputKeyDown(e, options)} onChange={onPageInputChange} /> + Go to onPageInputKeyDown(e, options)} onChange={onPageInputChange} /> - ) + ); } }; const template2 = { layout: 'RowsPerPageDropdown CurrentPageReport PrevPageLink NextPageLink', - 'RowsPerPageDropdown': (options) => { + RowsPerPageDropdown: (options) => { const dropdownOptions = [ { label: 5, value: 5 }, { label: 10, value: 10 }, @@ -136,39 +137,43 @@ const PaginatorDemo = () => { return ( - Items per page: + + Items per page:{' '} + ); }, - 'CurrentPageReport': (options) => { + CurrentPageReport: (options) => { return ( {options.first} - {options.last} of {options.totalRecords} - ) + ); } }; const template3 = { layout: 'RowsPerPageDropdown PrevPageLink PageLinks NextPageLink CurrentPageReport', - 'RowsPerPageDropdown': (options) => { + RowsPerPageDropdown: (options) => { return (
      - Items per page: + + Items per page:{' '} +
      ); }, - 'CurrentPageReport': (options) => { + CurrentPageReport: (options) => { return ( {options.first} - {options.last} of {options.totalRecords} - ) + ); } - } + }; return (
      @@ -196,12 +201,18 @@ const PaginatorDemo = () => {
      Left and Right Content
      - +
      - {contentFirst} e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} /> + {contentFirst} (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} />
      @@ -209,6 +220,6 @@ const PaginatorDemo = () => {
      ); -} +}; export default PaginatorDemo; diff --git a/pages/panel/index.js b/pages/panel/index.js index 0c933a75f6..4f287ed96d 100644 --- a/pages/panel/index.js +++ b/pages/panel/index.js @@ -6,7 +6,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const PanelDemo = () => { - const template = (options) => { const toggleIcon = options.collapsed ? 'pi pi-chevron-down' : 'pi pi-chevron-up'; const className = `${options.className} justify-content-start`; @@ -18,12 +17,10 @@ const PanelDemo = () => { - - Header - + Header
      - ) - } + ); + }; return (
      @@ -42,32 +39,32 @@ const PanelDemo = () => {
      Regular
      -

      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat - cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

      +

      + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

      Toggleable
      -

      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat - cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

      +

      + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

      Template
      -

      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat - cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

      +

      + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

      - ) -} + ); +}; export default PanelDemo; diff --git a/pages/panelmenu/index.js b/pages/panelmenu/index.js index 4e865d359f..6d687e477b 100644 --- a/pages/panelmenu/index.js +++ b/pages/panelmenu/index.js @@ -5,7 +5,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const PanelMenuDemo = () => { - const items = [ { label: 'File', @@ -146,6 +145,6 @@ const PanelMenuDemo = () => {
      ); -} +}; export default PanelMenuDemo; diff --git a/pages/password/index.js b/pages/password/index.js index 75de3bf71f..ec3b0963de 100644 --- a/pages/password/index.js +++ b/pages/password/index.js @@ -6,7 +6,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const PasswordDemo = () => { - const [value1, setValue1] = useState(''); const [value2, setValue2] = useState(''); const [value3, setValue3] = useState(''); @@ -60,6 +59,6 @@ const PasswordDemo = () => {
      ); -} +}; export default PasswordDemo; diff --git a/pages/picklist/index.js b/pages/picklist/index.js index d12aa0cbdd..0a50cf5ebf 100644 --- a/pages/picklist/index.js +++ b/pages/picklist/index.js @@ -7,26 +7,25 @@ import Head from 'next/head'; import getConfig from 'next/config'; const PickListDemo = () => { - const [source, setSource] = useState([]); const [target, setTarget] = useState([]); const productService = new ProductService(); const contextPath = getConfig().publicRuntimeConfig.contextPath; useEffect(() => { - productService.getProductsSmall().then(data => setSource(data)); + productService.getProductsSmall().then((data) => setSource(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps const onChange = (event) => { setSource(event.source); setTarget(event.target); - } + }; const itemTemplate = (item) => { return (
      - e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} alt={item.name} /> + (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} alt={item.name} />
      {item.name}
      @@ -39,7 +38,7 @@ const PickListDemo = () => {
      ); - } + }; return (
      @@ -58,15 +57,25 @@ const PickListDemo = () => {
      - +
      ); -} +}; export default PickListDemo; diff --git a/pages/progressbar/index.js b/pages/progressbar/index.js index 10b7a71420..bd660ad138 100644 --- a/pages/progressbar/index.js +++ b/pages/progressbar/index.js @@ -6,7 +6,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const ProgressBarDemo = () => { - const [value1, setValue1] = useState(0); const toast = useRef(null); const interval = useRef(null); @@ -17,7 +16,7 @@ const ProgressBarDemo = () => { {value}/100 ); - } + }; useEffect(() => { let val = value1; @@ -38,7 +37,7 @@ const ProgressBarDemo = () => { clearInterval(interval.current); interval.current = null; } - } + }; }, []); // eslint-disable-line react-hooks/exhaustive-deps return ( @@ -77,6 +76,6 @@ const ProgressBarDemo = () => {
      ); -} +}; export default ProgressBarDemo; diff --git a/pages/progressspinner/index.js b/pages/progressspinner/index.js index 8b04dae23e..3d80273c90 100644 --- a/pages/progressspinner/index.js +++ b/pages/progressspinner/index.js @@ -5,7 +5,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const ProgressSpinnerDemo = () => { - return (
      @@ -34,6 +33,6 @@ const ProgressSpinnerDemo = () => {
      ); -} +}; export default ProgressSpinnerDemo; diff --git a/pages/radiobutton/index.js b/pages/radiobutton/index.js index 56b86a3f00..7151832804 100644 --- a/pages/radiobutton/index.js +++ b/pages/radiobutton/index.js @@ -5,8 +5,12 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const RadioButtonDemo = () => { - - const categories = [{ name: 'Accounting', key: 'A' }, { name: 'Marketing', key: 'M' }, { name: 'Production', key: 'P' }, { name: 'Research', key: 'R' }]; + const categories = [ + { name: 'Accounting', key: 'A' }, + { name: 'Marketing', key: 'M' }, + { name: 'Production', key: 'P' }, + { name: 'Research', key: 'R' } + ]; const [city, setCity] = useState(null); const [selectedCategory, setSelectedCategory] = useState(categories[1]); @@ -46,22 +50,20 @@ const RadioButtonDemo = () => {
      Dynamic Values, Preselection, Value Binding and Disabled Option
      - { - categories.map((category) => { - return ( -
      - setSelectedCategory(e.value)} checked={selectedCategory.key === category.key} disabled={category.key === 'R'} /> - -
      - ) - }) - } + {categories.map((category) => { + return ( +
      + setSelectedCategory(e.value)} checked={selectedCategory.key === category.key} disabled={category.key === 'R'} /> + +
      + ); + })}
      - ) -} + ); +}; export default RadioButtonDemo; diff --git a/pages/rating/index.js b/pages/rating/index.js index 31aa064c04..85f3c2e2a2 100644 --- a/pages/rating/index.js +++ b/pages/rating/index.js @@ -5,7 +5,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const RatingDemo = () => { - const [val1, setVal1] = useState(null); const [val2, setVal2] = useState(null); @@ -42,7 +41,7 @@ const RatingDemo = () => { - ) -} + ); +}; export default RatingDemo; diff --git a/pages/reactfinalform/index.js b/pages/reactfinalform/index.js index 5ed82bda45..1c28f4f48f 100644 --- a/pages/reactfinalform/index.js +++ b/pages/reactfinalform/index.js @@ -22,7 +22,7 @@ const ReactFinalFormDemo = () => { const countryservice = new CountryService(); useEffect(() => { - countryservice.getCountries().then(data => setCountries(data)); + countryservice.getCountries().then((data) => setCountries(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps const validate = (data) => { @@ -34,8 +34,7 @@ const ReactFinalFormDemo = () => { if (!data.email) { errors.email = 'Email is required.'; - } - else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(data.email)) { + } else if (!/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i.test(data.email)) { errors.email = 'Invalid email address. E.g. example@email.com'; } @@ -62,7 +61,11 @@ const ReactFinalFormDemo = () => { return isFormFieldValid(meta) && {meta.error}; }; - const dialogFooter =
      ; + const dialogFooter = ( +
      +
      + ); const passwordHeader =
      Pick a password
      ; const passwordFooter = ( @@ -86,11 +89,12 @@ const ReactFinalFormDemo = () => {

      React Final Form

      -

      PrimeReact components can be easily used/integrated with React Final Form. In this example, a register panel is simulated using React Final Form.

      - +

      + PrimeReact components can be easily used/integrated with React Final Form. In this example, a register panel is simulated using React Final Form. +

      - +
      @@ -107,62 +111,94 @@ const ReactFinalFormDemo = () => {
      Register
      -
      ( - - ( -
      - - - - - {getFormErrorMessage(meta)} -
      - )} /> - ( -
      - - - - - - {getFormErrorMessage(meta)} -
      - )} /> - ( -
      - - - - - {getFormErrorMessage(meta)} -
      - )} /> - ( -
      - - - - -
      - )} /> - ( -
      - - - - -
      - )} /> - ( -
      - - -
      - )} /> - -
      @@ -170,12 +206,11 @@ const ReactFinalFormDemo = () => { ); -} +}; const ReactFinalFormDoc = React.memo(() => { - const sources = { - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useEffect, useState } from 'react'; @@ -332,7 +367,7 @@ export const ReactFinalFormDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useEffect, useState } from 'react'; @@ -516,17 +551,13 @@ export const ReactFinalFormDemo = () => { } ` } - } + }; return (
      - - { - useLiveEditorTabs({ name: 'ReactFinalFormDemo', sources, service: 'CountryService', data: 'countries', extFiles, dependencies: { 'final-form': '^4.20.2', 'react-final-form': '^6.5.3' } }) - } - + {useLiveEditorTabs({ name: 'ReactFinalFormDemo', sources, service: 'CountryService', data: 'countries', extFiles, dependencies: { 'final-form': '^4.20.2', 'react-final-form': '^6.5.3' } })}
      - ) + ); }); export default ReactFinalFormDemo; diff --git a/pages/reacthookform/index.js b/pages/reacthookform/index.js index 6ffb1cc8a3..22e57bbd8c 100644 --- a/pages/reacthookform/index.js +++ b/pages/reacthookform/index.js @@ -27,13 +27,18 @@ const ReactHookFormDemo = () => { date: null, country: null, accept: false - } + }; useEffect(() => { - countryservice.getCountries().then(data => setCountries(data)); + countryservice.getCountries().then((data) => setCountries(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps - const { control, formState: { errors }, handleSubmit, reset } = useForm({ defaultValues }); + const { + control, + formState: { errors }, + handleSubmit, + reset + } = useForm({ defaultValues }); const onSubmit = (data) => { setFormData(data); @@ -43,10 +48,14 @@ const ReactHookFormDemo = () => { }; const getFormErrorMessage = (name) => { - return errors[name] && {errors[name].message} + return errors[name] && {errors[name].message}; }; - const dialogFooter =
      ; + const dialogFooter = ( +
      +
      + ); const passwordHeader =
      Pick a password
      ; const passwordFooter = ( @@ -70,7 +79,9 @@ const ReactHookFormDemo = () => {

      React Hook Form

      -

      PrimeReact components can be easily used/integrated with React Hook Form. In this example, a register panel is simulated using React Hook Form.

      +

      + PrimeReact components can be easily used/integrated with React Hook Form. In this example, a register panel is simulated using React Hook Form. +

      @@ -93,55 +104,69 @@ const ReactHookFormDemo = () => {
      - ( - - )} /> - + } + /> + {getFormErrorMessage('name')}
      - ( - - )} /> - + } + /> + {getFormErrorMessage('email')}
      - ( - - )} /> - + } + /> + {getFormErrorMessage('password')}
      - ( - field.onChange(e.value)} dateFormat="dd/mm/yy" mask="99/99/9999" showIcon /> - )} /> + field.onChange(e.value)} dateFormat="dd/mm/yy" mask="99/99/9999" showIcon />} />
      - ( - field.onChange(e.value)} options={countries} optionLabel="name" /> - )} /> + field.onChange(e.value)} options={countries} optionLabel="name" />} />
      - ( - field.onChange(e.checked)} checked={field.value} className={classNames({ 'p-invalid': fieldState.invalid })} /> - )} /> - + field.onChange(e.checked)} checked={field.value} className={classNames({ 'p-invalid': fieldState.invalid })} />} + /> +
      ); -} +}; const ReactHookFormDoc = React.memo(() => { - const sources = { - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useEffect, useState } from 'react'; @@ -299,7 +323,7 @@ export const ReactHookFormDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useEffect, useState } from 'react'; @@ -467,17 +491,13 @@ export const ReactHookFormDemo = () => { } ` } - } + }; return (
      - - { - useLiveEditorTabs({ name: 'ReactHookFormDemo', sources, service: 'CountryService', data: 'countries', extFiles, dependencies: { 'react-hook-form': '^7.8.4' } }) - } - + {useLiveEditorTabs({ name: 'ReactHookFormDemo', sources, service: 'CountryService', data: 'countries', extFiles, dependencies: { 'react-hook-form': '^7.8.4' } })}
      - ) + ); }); export default ReactHookFormDemo; diff --git a/pages/ripple/index.js b/pages/ripple/index.js index 092ba1aac9..88da463c32 100644 --- a/pages/ripple/index.js +++ b/pages/ripple/index.js @@ -5,7 +5,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const RippleDemo = () => { - return (
      @@ -45,6 +44,6 @@ const RippleDemo = () => {
      ); -} +}; export default RippleDemo; diff --git a/pages/scrollpanel/index.js b/pages/scrollpanel/index.js index 28a9f056bb..d2ab4fc34c 100644 --- a/pages/scrollpanel/index.js +++ b/pages/scrollpanel/index.js @@ -5,7 +5,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const ScrollPanelDemo = () => { - return (
      @@ -26,48 +25,33 @@ const ScrollPanelDemo = () => {
      - The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. His beloved - son Michael has just come home from the war, but does not intend to become part of his father's business. Through - Michael's life the nature of the family business becomes clear. The business of the family is just like the head - of the family, kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands - against the good of the family. - The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. His beloved - son Michael has just come home from the war, but does not intend to become part of his father's business. Through Michael's - life the nature of the family business becomes clear. The business of the family is just like the head of the family, kind - and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the - family. + The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. His beloved son Michael has just come home from the war, but does not intend to become part of his + father's business. Through Michael's life the nature of the family business becomes clear. The business of the family is just like the head of the family, kind and benevolent to those who give respect, but given to + ruthless violence whenever anything stands against the good of the family. The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. His beloved son Michael has + just come home from the war, but does not intend to become part of his father's business. Through Michael's life the nature of the family business becomes clear. The business of the family is just like the head of + the family, kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the family.
      - The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. His beloved - son Michael has just come home from the war, but does not intend to become part of his father's business. Through - Michael's life the nature of the family business becomes clear. The business of the family is just like the head - of the family, kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands - against the good of the family. - The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. His beloved - son Michael has just come home from the war, but does not intend to become part of his father's business. Through Michael's - life the nature of the family business becomes clear. The business of the family is just like the head of the family, kind - and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the - family. + The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. His beloved son Michael has just come home from the war, but does not intend to become part of his + father's business. Through Michael's life the nature of the family business becomes clear. The business of the family is just like the head of the family, kind and benevolent to those who give respect, but given to + ruthless violence whenever anything stands against the good of the family. The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. His beloved son Michael has + just come home from the war, but does not intend to become part of his father's business. Through Michael's life the nature of the family business becomes clear. The business of the family is just like the head of + the family, kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the family.
      - The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. His beloved - son Michael has just come home from the war, but does not intend to become part of his father's business. Through - Michael's life the nature of the family business becomes clear. The business of the family is just like the head - of the family, kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands - against the good of the family. - The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. His beloved - son Michael has just come home from the war, but does not intend to become part of his father's business. Through Michael's - life the nature of the family business becomes clear. The business of the family is just like the head of the family, kind - and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the - family. + The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. His beloved son Michael has just come home from the war, but does not intend to become part of his + father's business. Through Michael's life the nature of the family business becomes clear. The business of the family is just like the head of the family, kind and benevolent to those who give respect, but given to + ruthless violence whenever anything stands against the good of the family. The story begins as Don Vito Corleone, the head of a New York Mafia family, oversees his daughter's wedding. His beloved son Michael has + just come home from the war, but does not intend to become part of his father's business. Through Michael's life the nature of the family business becomes clear. The business of the family is just like the head of + the family, kind and benevolent to those who give respect, but given to ruthless violence whenever anything stands against the good of the family.
      @@ -77,7 +61,7 @@ const ScrollPanelDemo = () => {
      - ) -} + ); +}; export default ScrollPanelDemo; diff --git a/pages/scrolltop/index.js b/pages/scrolltop/index.js index 500f0a070b..ea1bf405f0 100644 --- a/pages/scrolltop/index.js +++ b/pages/scrolltop/index.js @@ -6,7 +6,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const ScrollTopDemo = () => { - return (
      @@ -31,17 +30,11 @@ const ScrollTopDemo = () => {
      Element

      - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - Vitae et leo duis ut diam. - Ultricies mi quis hendrerit dolor magna eget est lorem. Amet consectetur adipiscing elit ut. - Nam libero justo laoreet sit amet. Pharetra massa massa ultricies mi quis hendrerit dolor magna. - Est ultricies integer quis auctor elit sed vulputate. Consequat ac felis donec et. Tellus orci ac auctor augue mauris. - Semper feugiat nibh sed pulvinar proin gravida hendrerit lectus a. Tincidunt arcu non sodales neque sodales. - Metus aliquam eleifend mi in nulla posuere sollicitudin aliquam ultrices. Sodales ut etiam sit amet nisl purus. - Cursus sit amet dictum sit amet. Tristique senectus et netus et malesuada fames ac turpis egestas. - Et tortor consequat id porta nibh venenatis cras sed. Diam maecenas ultricies mi eget mauris. - Eget egestas purus viverra accumsan in nisl nisi. Suscipit adipiscing bibendum est ultricies integer. - Mattis aliquam faucibus purus in massa tempor nec. + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Vitae et leo duis ut diam. Ultricies mi quis hendrerit dolor magna eget est lorem. Amet + consectetur adipiscing elit ut. Nam libero justo laoreet sit amet. Pharetra massa massa ultricies mi quis hendrerit dolor magna. Est ultricies integer quis auctor elit sed vulputate. Consequat ac felis donec et. Tellus + orci ac auctor augue mauris. Semper feugiat nibh sed pulvinar proin gravida hendrerit lectus a. Tincidunt arcu non sodales neque sodales. Metus aliquam eleifend mi in nulla posuere sollicitudin aliquam ultrices. Sodales ut + etiam sit amet nisl purus. Cursus sit amet dictum sit amet. Tristique senectus et netus et malesuada fames ac turpis egestas. Et tortor consequat id porta nibh venenatis cras sed. Diam maecenas ultricies mi eget mauris. + Eget egestas purus viverra accumsan in nisl nisi. Suscipit adipiscing bibendum est ultricies integer. Mattis aliquam faucibus purus in massa tempor nec.

      @@ -50,6 +43,6 @@ const ScrollTopDemo = () => {
      ); -} +}; export default ScrollTopDemo; diff --git a/pages/selectbutton/index.js b/pages/selectbutton/index.js index 4da5094c37..902b03d51f 100644 --- a/pages/selectbutton/index.js +++ b/pages/selectbutton/index.js @@ -5,7 +5,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const SelectButtonDemo = () => { - const [value1, setValue1] = useState('Off'); const [value2, setValue2] = useState(null); const [value3, setValue3] = useState(null); @@ -24,7 +23,7 @@ const SelectButtonDemo = () => { const justifyTemplate = (option) => { return ; - } + }; return (
      @@ -57,6 +56,6 @@ const SelectButtonDemo = () => {
      ); -} +}; export default SelectButtonDemo; diff --git a/pages/setup/index.js b/pages/setup/index.js index 84e2d69e91..c6245915f5 100644 --- a/pages/setup/index.js +++ b/pages/setup/index.js @@ -1,5 +1,5 @@ import React from 'react'; -import Link from 'next/link'; +import Link from 'next/link'; import { CodeHighlight } from '../../components/doc/common/codehighlight'; import Head from 'next/head'; import getConfig from 'next/config'; @@ -22,39 +22,53 @@ const SetupPage = () => {

      Module Loader

      -

      PrimeReact is available at npm, if you have an existing application run the following commands to download it to your project.

      +

      + PrimeReact is available at npm, if you have an existing application run the following commands to download it to your project. +

      - -{` + + {` // with npm npm install primereact primeicons // with yarn yarn add primereact primeicons `} - -

      Please note that {`react >= 17.0.0`} and {`react-dom >= 17.0.0`} are peer dependencies and some components have optional dependencies.

      +
      +

      + Please note that {`react >= 17.0.0`} and {`react-dom >= 17.0.0`} are peer dependencies and some components have{' '} + + optional dependencies + + . +

      Import path is available in the documentation of the corresponding component.

      - -{` + + {` // import { ComponentName } from 'primereact/{componentname}'; import { Dialog } from 'primereact/dialog'; import { Button } from 'primereact/button'; `} - - -

      Finally you'll be able to utilize the component in your application. See the Styles section to apply styling.

      - -{` + + +

      + Finally you'll be able to utilize the component in your application. See the{' '} + + Styles + {' '} + section to apply styling. +

      + + {` setState(false)}> // content
      -
      Ripple
      -

      Ripple is an optional animation for the supported components such as buttons. It is disabled by default and needs to be enabled at - your app's entry file (e.g. App.js) using the PrimeReact variable. +

      + Ripple is an optional animation for the supported components such as buttons. It is disabled by default and needs to be enabled at your app's entry file (e.g. App.js) using the PrimeReact variable.

      - -{` + + {` import PrimeReact from 'primereact/api'; PrimeReact.ripple = true; `} - +
      Outlined vs Filled Input Styles
      -

      Input fields come in two styles, default is outlined with borders around the field whereas filled alternative adds a background color - to the field. Applying p-input-filled to an ancestor of an input enables the filled style. If you prefer to use filled inputs in the entire application, - use a global container such as the document body or the application element to apply the style class. Note that in case you add it to the application element, components that are teleported to the document body such as Dialog - will not be able to display filled inputs as they are not a descendant of the application root element in the DOM tree, to resolve this case set inputStyle to 'filled' at PrimeReact configuration as well.

      - -{` +

      + Input fields come in two styles, default is outlined with borders around the field whereas filled alternative adds a background color to the field. Applying p-input-filled to an ancestor of an input enables + the filled style. If you prefer to use filled inputs in the entire application, use a global container such as the document body or the application element to apply the style class. Note that in case you add it to the application + element, components that are teleported to the document body such as Dialog will not be able to display filled inputs as they are not a descendant of the application root element in the DOM tree, to resolve this case set + inputStyle to 'filled' at PrimeReact configuration as well. +

      + + {` import PrimeReact from 'primereact/api'; PrimeReact.inputStyle = 'filled'; `} - +
      ZIndex Layering
      -

      ZIndexes are managed automatically to make sure layering of overlay components work seamlessly when combining multiple components. Still there may be cases where you'd like to configure - the configure default values such as a custom layout where header section is fixed. In a case like this, dropdown needs to be displayed below the application header but a modal dialog should be displayed above. PrimeReact configuration - offers the zIndex property to customize the default values for components categories. Default values are described below and can be customized when setting up PrimeReact.

      - -{` +

      + ZIndexes are managed automatically to make sure layering of overlay components work seamlessly when combining multiple components. Still there may be cases where you'd like to configure the configure default values such as a + custom layout where header section is fixed. In a case like this, dropdown needs to be displayed below the application header but a modal dialog should be displayed above. PrimeReact configuration offers the zIndex property + to customize the default values for{' '} + + components categories + + . Default values are described below and can be customized when setting up PrimeReact. +

      + + {` import PrimeReact from 'primereact/api'; PrimeReact.zIndex = { @@ -289,50 +322,58 @@ PrimeReact.zIndex = { toast: 1200 // toast } `} - +

      The ZIndex of all components is increased according to their groups in harmony with each other. If false, each group increments its ZIndex within itself.

      - -{` + + {` import PrimeReact from 'primereact/api'; PrimeReact.autoZIndex = true; `} - +
      AppendTo
      -

      On the all overlay components, the panels can be mounted into its component or DOM element instance using this option. Valid values are any DOM Element and 'self'. The self value is used to render a panel where component is located. - The appendTo property of any overlay component can be used to customize it.

      - -{` +

      + On the all overlay components, the panels can be mounted into its component or DOM element instance using this option. Valid values are any DOM Element and 'self'. The self value is used to render a panel where component is + located. The appendTo property of any overlay component can be used to customize it. +

      + + {` import PrimeReact from 'primereact/api'; PrimeReact.appendTo = 'self'; // Default value is null(document.body). `} - +
      cssTransition
      -

      Used to determine whether the react-transition-group API is enabled in all overlay components.

      - -{` +

      + Used to determine whether the react-transition-group API is enabled in all overlay components. +

      + + {` import PrimeReact from 'primereact/api'; PrimeReact.cssTransition = false; // Default value is true. `} - +
      nullSortOrder
      -

      Used to determine how NULL values are sorted. A value of 1 means sort like Excel with all NULL values at the bottom of the list. - A value of -1 sorts NULL at the top of the list in ascending mode and at the bottom of the list in descending mode.

      - -{` +

      + Used to determine how NULL values are sorted. A value of 1 means sort like Excel with all NULL values at the bottom of the list. A value of -1 sorts NULL at the top of the list in ascending mode and at the bottom of + the list in descending mode. +

      + + {` import PrimeReact from 'primereact/api'; PrimeReact.nullSortOrder = -1; // Default value is 1 for Excel like sorting. `} - +
      Locale
      -

      PrimeReact provides a Locale API to support i18n and l7n, visit the Locale documentation for more information.

      +

      + PrimeReact provides a Locale API to support i18n and l7n, visit the Locale documentation for more information. +

      Browser Support
      @@ -341,31 +382,31 @@ PrimeReact.nullSortOrder = -1; // Default value is 1 for Excel like sorting.
      - edge + edge Edge
      - firefox + firefox Firefox
      - chrome + chrome Chrome
      - safari + safari Safari
      - opera + opera Opera
      @@ -385,19 +426,37 @@ PrimeReact.nullSortOrder = -1; // Default value is 1 for Excel like sorting.

      Samples

      Quickstart
      -

      An example application based on create-react-app is available at github.

      +

      + An{' '} + + example application + {' '} + based on create-react-app is available at github. +

      Typescript
      -

      Typescript is fully supported as type definition files are provided in the npm package of PrimeReact. A sample typescript-primereact application with create-react-app is available as at github.

      +

      + Typescript is fully supported as type definition files are provided in the npm package of PrimeReact. A sample{' '} + + typescript-primereact + {' '} + application with create-react-app is available as at github. +

      Next.js
      -

      A sample application based on Next.js is available at github.

      +

      + A{' '} + + sample application + {' '} + based on Next.js is available at github. +

      ); -} +}; export default SetupPage; diff --git a/pages/sidebar/index.js b/pages/sidebar/index.js index 8cdd380ed7..f8e43c239e 100644 --- a/pages/sidebar/index.js +++ b/pages/sidebar/index.js @@ -6,7 +6,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const SidebarDemo = () => { - const [visibleLeft, setVisibleLeft] = useState(false); const [visibleRight, setVisibleRight] = useState(false); const [visibleTop, setVisibleTop] = useState(false); @@ -75,9 +74,8 @@ const SidebarDemo = () => { - - ) -} + ); +}; export default SidebarDemo; diff --git a/pages/skeleton/index.js b/pages/skeleton/index.js index 6e20132fdb..412b0aedac 100644 --- a/pages/skeleton/index.js +++ b/pages/skeleton/index.js @@ -1,18 +1,17 @@ -import React from "react"; +import React from 'react'; import { Skeleton } from '../../components/lib/skeleton/Skeleton'; import { DataTable } from '../../components/lib/datatable/DataTable'; import { Column } from '../../components/lib/column/Column'; import SkeletonDoc from '../../components/doc/skeleton'; -import { DocActions } from "../../components/doc/common/docactions"; +import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const SkeletonDemo = () => { - const products = Array.from({ length: 5 }); const bodyTemplate = () => { - return - } + return ; + }; return (
      @@ -143,11 +142,10 @@ const SkeletonDemo = () => {
      - ); -} +}; export default SkeletonDemo; diff --git a/pages/slidemenu/index.js b/pages/slidemenu/index.js index 0f79ee9bf9..5148ca11e6 100644 --- a/pages/slidemenu/index.js +++ b/pages/slidemenu/index.js @@ -6,7 +6,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const SlideMenuDemo = () => { - const menu = useRef(null); const items = [ { @@ -24,8 +23,7 @@ const SlideMenuDemo = () => { { label: 'Video', icon: 'pi pi-fw pi-video' - }, - + } ] }, { @@ -60,8 +58,7 @@ const SlideMenuDemo = () => { { label: 'Justify', icon: 'pi pi-fw pi-align-justify' - }, - + } ] }, { @@ -70,13 +67,11 @@ const SlideMenuDemo = () => { items: [ { label: 'New', - icon: 'pi pi-fw pi-user-plus', - + icon: 'pi pi-fw pi-user-plus' }, { label: 'Delete', - icon: 'pi pi-fw pi-user-minus', - + icon: 'pi pi-fw pi-user-minus' }, { label: 'Search', @@ -166,7 +161,7 @@ const SlideMenuDemo = () => { - ) -} + ); +}; export default SlideMenuDemo; diff --git a/pages/slider/index.js b/pages/slider/index.js index d94bee6043..55513e7397 100644 --- a/pages/slider/index.js +++ b/pages/slider/index.js @@ -6,7 +6,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const SliderDemo = () => { - const [value1, setValue1] = useState(null); const [value2, setValue2] = useState(50); const [value3, setValue3] = useState(20); @@ -44,7 +43,9 @@ const SliderDemo = () => {
      Decimal Step: {value4}
      setValue4(e.value)} step={0.5} /> -
      Range: [{value5[0]}, {value5[1]}]
      +
      + Range: [{value5[0]}, {value5[1]}] +
      setValue5(e.value)} range />
      Vertical: {value6}
      @@ -55,6 +56,6 @@ const SliderDemo = () => { ); -} +}; export default SliderDemo; diff --git a/pages/speeddial/index.js b/pages/speeddial/index.js index d9a3ff2552..4e25d7d6f8 100644 --- a/pages/speeddial/index.js +++ b/pages/speeddial/index.js @@ -8,7 +8,6 @@ import Head from 'next/head'; import Link from 'next/link'; const SpeedDialDemo = () => { - const toast = useRef(null); const items = [ @@ -42,14 +41,14 @@ const SpeedDialDemo = () => { - ) + ); } }, { label: 'React Website', icon: 'pi pi-external-link', command: () => { - window.location.href = 'https://facebook.github.io/react/' + window.location.href = 'https://facebook.github.io/react/'; } } ]; @@ -125,7 +124,7 @@ const SpeedDialDemo = () => { - ) -} + ); +}; export default SpeedDialDemo; diff --git a/pages/splitbutton/index.js b/pages/splitbutton/index.js index 85ecfd7c80..9e37d307f6 100644 --- a/pages/splitbutton/index.js +++ b/pages/splitbutton/index.js @@ -7,7 +7,6 @@ import Head from 'next/head'; import Link from 'next/link'; const SplitButtonDemo = () => { - const toast = useRef(null); const items = [ { @@ -28,7 +27,7 @@ const SplitButtonDemo = () => { label: 'React Website', icon: 'pi pi-external-link', command: () => { - window.location.href = 'https://facebook.github.io/react/' + window.location.href = 'https://facebook.github.io/react/'; } }, { @@ -48,7 +47,7 @@ const SplitButtonDemo = () => { const save = () => { toast.current.show({ severity: 'success', summary: 'Success', detail: 'Data Saved' }); - } + }; return (
      @@ -137,7 +136,7 @@ const SplitButtonDemo = () => {
      - ) -} + ); +}; export default SplitButtonDemo; diff --git a/pages/splitter/index.js b/pages/splitter/index.js index 1f6e28e427..f59761c805 100644 --- a/pages/splitter/index.js +++ b/pages/splitter/index.js @@ -5,7 +5,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const SplitterDemo = () => { - return (
      @@ -24,24 +23,16 @@ const SplitterDemo = () => {
      Horizontal
      - - Panel 1 - - - Panel 2 - + Panel 1 + Panel 2
      Vertical
      - - Panel 1 - - - Panel 2 - + Panel 1 + Panel 2
      @@ -74,7 +65,7 @@ const SplitterDemo = () => {
      - ) -} + ); +}; export default SplitterDemo; diff --git a/pages/steps/index.js b/pages/steps/index.js index 7681f07599..1adc774b9e 100644 --- a/pages/steps/index.js +++ b/pages/steps/index.js @@ -6,7 +6,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const StepsDemo = () => { - const [activeIndex, setActiveIndex] = useState(1); const toast = useRef(null); @@ -37,7 +36,6 @@ const StepsDemo = () => { } ]; - return (
      @@ -67,6 +65,6 @@ const StepsDemo = () => {
      ); -} +}; export default StepsDemo; diff --git a/pages/styleclass/index.js b/pages/styleclass/index.js index 9fc8b63ecf..23f2c2f174 100644 --- a/pages/styleclass/index.js +++ b/pages/styleclass/index.js @@ -7,7 +7,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const StyleClassDemo = () => { - const toggleBtnRef = useRef(null); const openBtnRef = useRef(null); const closeBtnRef = useRef(null); @@ -50,7 +49,7 @@ const StyleClassDemo = () => { - ) -} + ); +}; export default StyleClassDemo; diff --git a/pages/support/index.js b/pages/support/index.js index 32aa226370..c48a1cd05a 100644 --- a/pages/support/index.js +++ b/pages/support/index.js @@ -22,8 +22,10 @@ const SupportPage = () => {
      Community Support
      -

      Forum and Discord are where the community users gather to seek support, post topics and discuss the technology. PrimeTek does not - guarantee response at forum and discord although they are monitored and maintained by our staff. If you need to secure our response within 1 business day, you may consider PrimeReact PRO support.

      +

      + Forum and Discord are where the community users gather to seek support, post topics and discuss the technology. + PrimeTek does not guarantee response at forum and discord although they are monitored and maintained by our staff. If you need to secure our response within 1 business day, you may consider PrimeReact PRO support. +

      @@ -31,11 +33,14 @@ const SupportPage = () => {
      PrimeReact PRO Support
      -

      PrimeReact PRO is a term based commercial support service. With the exclusive services of Pro account, - you no longer need to post your questions in the community forum and your issues to community issue tracker. - With PrimeReact PRO, it's easy to support, tune and add features to PrimeReact as if it were an in-house framework.

      +

      + PrimeReact PRO is a term based commercial support service. With the exclusive services of Pro account, you no longer need to post your questions in the community forum and your issues to community issue tracker. With + PrimeReact PRO, it's easy to support, tune and add features to PrimeReact as if it were an in-house framework. +

      - GET A QUOTE + + GET A QUOTE +
      @@ -48,8 +53,7 @@ const SupportPage = () => {
       
      Access to pro.primefaces.org
      -

      PRO means high-touch support. Contact us directly from a private JIRA with unlimited support tickets! -

      +

      PRO means high-touch support. Contact us directly from a private JIRA with unlimited support tickets!

      @@ -85,7 +89,9 @@ const SupportPage = () => {
       
      Theme Designer
      -

      Designer is the ultimate tool to create your own PrimeReact experience powered by a SASS based theme engine with 500+ variables and a Visual Designer.

      +

      + Designer is the ultimate tool to create your own PrimeReact experience powered by a SASS based theme engine with 500+ variables and a Visual Designer.{' '} +

      @@ -103,7 +109,9 @@ const SupportPage = () => {
       
      PrimeBlocks
      -

      An enterprise license for all of the ready to use UI blocks to build spectacular applications in no time.

      +

      + An enterprise license for all of the ready to use UI blocks to build spectacular applications in no time. +

      @@ -149,7 +157,10 @@ const SupportPage = () => {
      Enhancement Credits
      -

      New feature and enhancement requests are not available in core services and provided via a credit model instead. When you have a feature request we provide an estimate, if you confirm we deliver your request within an estimated timeframe and deduct the amount of work from your credits.

      +

      + New feature and enhancement requests are not available in core services and provided via a credit model instead. When you have a feature request we provide an estimate, if you confirm we deliver your request within an + estimated timeframe and deduct the amount of work from your credits. +

      @@ -208,11 +219,14 @@ const SupportPage = () => {
      -

      You can purchase additional credits along with the subscription and also anytime during your subscription period. If your subscription term ends with unused credits, they will be added to your new subscription term in case you extend.

      +

      + You can purchase additional credits along with the subscription and also anytime during your subscription period. If your subscription term ends with unused credits, they will be added to your new subscription term in case you + extend. +

      ); -} +}; export default SupportPage; diff --git a/pages/tabmenu/index.js b/pages/tabmenu/index.js index 0ba4887fbf..282750fde3 100644 --- a/pages/tabmenu/index.js +++ b/pages/tabmenu/index.js @@ -6,7 +6,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const TabMenuDemo = () => { - const [activeIndex, setActiveIndex] = useState(3); const items = [ @@ -52,6 +51,6 @@ const TabMenuDemo = () => { ); -} +}; export default TabMenuDemo; diff --git a/pages/tabview/index.js b/pages/tabview/index.js index 940195b024..2b9aa44312 100644 --- a/pages/tabview/index.js +++ b/pages/tabview/index.js @@ -9,7 +9,6 @@ import Head from 'next/head'; import getConfig from 'next/config'; const TabViewDemo = () => { - const [activeIndex1, setActiveIndex1] = useState(1); const [activeIndex2, setActiveIndex2] = useState(0); const scrollableTabs = Array.from({ length: 50 }, (_, i) => ({ title: `Tab ${i + 1}`, content: `Tab ${i + 1} Content` })); @@ -31,19 +30,17 @@ const TabViewDemo = () => { { label: 'Upload', icon: 'pi pi-upload' } ]; - return ( - - ) + return ; }; const tabHeaderIITemplate = (options) => { return (
      - e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} shape="circle" className="mx-2" /> + (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} shape="circle" className="mx-2" /> Amy Elsner
      - ) - } + ); + }; return (
      @@ -64,19 +61,24 @@ const TabViewDemo = () => {
      Default
      -

      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation - ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

      +

      + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea + commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim + id est laborum. +

      -

      Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi - architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione - voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi.

      +

      + Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. + Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi. +

      -

      At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati - cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. - Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus.

      +

      + At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt + in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo + minus. +

      @@ -91,19 +93,24 @@ const TabViewDemo = () => { setActiveIndex1(e.index)}> -

      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation - ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

      +

      + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea + commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim + id est laborum. +

      -

      Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi - architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione - voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi.

      +

      + Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. + Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi. +

      -

      At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati - cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. - Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus.

      +

      + At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt + in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo + minus. +

      @@ -112,19 +119,24 @@ const TabViewDemo = () => {
      Disabled
      -

      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation - ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

      +

      + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea + commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim + id est laborum. +

      -

      Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi - architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione - voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi.

      +

      + Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. + Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi. +

      -

      At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati - cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. - Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus.

      +

      + At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt + in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo + minus. +

      @@ -134,19 +146,24 @@ const TabViewDemo = () => {
      Header Icons
      -

      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation - ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

      +

      + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea + commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim + id est laborum. +

      -

      Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi - architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione - voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi.

      +

      + Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. + Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi. +

      -

      At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati - cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. - Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus.

      +

      + At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt + in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo + minus. +

      @@ -155,19 +172,24 @@ const TabViewDemo = () => {
      Custom Headers
      -

      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation - ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

      +

      + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea + commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim + id est laborum. +

      -

      Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi - architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione - voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi.

      +

      + Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. + Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi. +

      -

      At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati - cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. - Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus.

      +

      + At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt + in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo + minus. +

      @@ -176,19 +198,24 @@ const TabViewDemo = () => {
      Closable
      -

      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation - ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

      +

      + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea + commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim + id est laborum. +

      -

      Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi - architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione - voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi.

      +

      + Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. + Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Consectetur, adipisci velit, sed quia non numquam eius modi. +

      -

      At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati - cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. - Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus.

      +

      + At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt + in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo + minus. +

      @@ -207,7 +234,7 @@ const TabViewDemo = () => {

      {tab.content}

      - ) + ); })} @@ -215,7 +242,7 @@ const TabViewDemo = () => { - ) -} + ); +}; export default TabViewDemo; diff --git a/pages/tag/index.js b/pages/tag/index.js index cc6ded572b..d0db6e157b 100644 --- a/pages/tag/index.js +++ b/pages/tag/index.js @@ -48,6 +48,6 @@ const TagDemo = () => { ); -} +}; export default TagDemo; diff --git a/pages/terminal/index.js b/pages/terminal/index.js index ccc110d9b7..8a5ca63fd5 100644 --- a/pages/terminal/index.js +++ b/pages/terminal/index.js @@ -6,7 +6,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const TerminalDemo = () => { - const commandHandler = (text) => { let response; let argsIndex = text.indexOf(' '); @@ -36,20 +35,18 @@ const TerminalDemo = () => { if (response) { TerminalService.emit('response', response); - } - else { + } else { TerminalService.emit('clear'); } - } + }; useEffect(() => { TerminalService.on('command', commandHandler); return () => { TerminalService.off('command', commandHandler); - } - }, []) - + }; + }, []); return (
      @@ -68,14 +65,16 @@ const TerminalDemo = () => {
      -

      Enter "date" to display the current date, "greet {'{0}'}" for a message, "random" to get a random number and "clear" to clear all commands.

      +

      + Enter "date" to display the current date, "greet {'{0}'}" for a message, "random" to get a random number and "clear" to clear all commands. +

      - ) -} + ); +}; export default TerminalDemo; diff --git a/pages/theming/index.js b/pages/theming/index.js index 9f22da0205..ce1748f366 100644 --- a/pages/theming/index.js +++ b/pages/theming/index.js @@ -10,7 +10,7 @@ import css from 'styled-jsx/css'; const ThemingPage = () => { const contextPath = getConfig().publicRuntimeConfig.contextPath; - const {className, styles} = css.resolve` + const { className, styles } = css.resolve` .p-panel > :global(.p-panel-header) { background-color: #54b5a6; color: #ffffff; @@ -32,18 +32,19 @@ const ThemingPage = () => {
      Architecture
      - Architecture -

      PrimeReact is a design agnostic library so unlike other UI libraries it does not enforce a certain styling such as material or bootstrap. In order to achieve this, styling has been - separated into two parts, core and theme. Core resides inside PrimeReact to implement the structure of the components such as positioning whereas theme brings the colors, paddings - and margins. vVarious free themes and premium themes are available along with premium templates that provide an application layout as well. All the free themes are built with - the Theme Designer and the npm package brings the compiled CSS output of the theme whereas SCSS is kept as a premium feature - in the designer.

      + Architecture +

      + PrimeReact is a design agnostic library so unlike other UI libraries it does not enforce a certain styling such as material or bootstrap. In order to achieve this, styling has been separated into two parts, core and theme. Core + resides inside PrimeReact to implement the structure of the components such as positioning whereas theme brings the colors, paddings and margins. vVarious free themes and premium themes are available along with premium templates + that provide an application layout as well. All the free themes are built with the Theme Designer and the npm package brings the compiled CSS output of the theme whereas + SCSS is kept as a premium feature in the designer. +

      Free Themes
      -

      PrimeReact ships with various free themes to choose from. The list below states all the available themes in the npm distribution with import paths.

      - -{` +

      PrimeReact ships with various free themes to choose from. The list below states all the available themes in the npm distribution with import paths.

      + + {` primereact/resources/themes/bootstrap4-light-blue/theme.css primereact/resources/themes/bootstrap4-light-purple/theme.css primereact/resources/themes/bootstrap4-dark-blue/theme.css @@ -86,49 +87,61 @@ primereact/resources/themes/luna-green/theme.css primereact/resources/themes/luna-pink/theme.css primereact/resources/themes/rhea/theme.css `} - +
      Designer
      -

      CSS of the themes share the same license as PrimeReact which is MIT, this means the generated CSS can be customized per your needs however this should be avoided if your customizations - are not simple. For instance even to change a primary color, since there is no variable a find and replace should be performed various times. On the other hand, this can be achieved - by changing a single variable e.g. $primaryColor. Visit the SASS API for the documentation of available customization options.

      - -

      Designer is the ultimate tool to create your own PrimeReact experience powered by a SASS based theme engine - with 500+ variables and a Visual Designer. PrimeReact only ships the generated CSS of Material, Bootstrap, Tailwind and PrimeOne themes whereas Designer provides - full access to the whole SASS structure and the variables of these pre-built themes for easier customization. In addition, designer provides exclusive premium themes to subscribers including Soho, Viva, Mira and Nano that are not available in core PrimeReact distribution at NPM.

      +

      + CSS of the themes share the same license as PrimeReact which is MIT, this means the generated CSS can be customized per your needs however this should be avoided if your customizations are not simple. For instance even to change a + primary color, since there is no variable a find and replace should be performed various times. On the other hand, this can be achieved by changing a single variable e.g. $primaryColor. Visit the{' '} + SASS API for the documentation of available customization options. +

      + +

      + Designer is the ultimate tool to create your own PrimeReact experience powered by a SASS based theme engine with 500+ variables and a Visual Designer. PrimeReact only + ships the generated CSS of Material, Bootstrap, Tailwind and PrimeOne themes whereas Designer provides full access to the whole SASS structure and the variables of these pre-built themes for easier + customization. In addition, designer provides exclusive premium themes to subscribers including Soho, Viva, Mira and Nano that are not available in core PrimeReact distribution at NPM. +

      Whether you have your own style guide or just need a custom theme, Designer is the right tool to design and bring them to existence.

      -

      Visit Designer Website for more information and live demos.

      +

      + Visit Designer Website for more information and live demos. +

      PrimeReact Designer
      Scoped Styling
      -

      Designer themes apply a global skin to the library, in case you need to change the style of a particular component, you may use a named class, CSS Modules or a CSS-in-JS solution like styled-jsx. - A video tutorial that goes through the alternatives below is available.

      +

      + Designer themes apply a global skin to the library, in case you need to change the style of a particular component, you may use a named class, CSS Modules or a CSS-in-JS solution like styled-jsx. A video tutorial that goes through + the alternatives below is available. +

      Named Class
      -

      A named class is bound to the className prop of a component and the CSS is included with an import. Note that, the css still is still bundled globally so prefer this approach - if your application doesn't have a built-in solution to do CSS scoping.

      +

      + A named class is bound to the className prop of a component and the CSS is included with an import. Note that, the css still is still bundled globally so prefer this approach if your application doesn't have a built-in solution to + do CSS scoping. +

      custompanel.css - -{` + + {` .mypanel .p-panel-header { background-color: #07c4e8; color: #ffffff; } `} - + -

      Then use mypanel class as the className of your panel.

      - -{` +

      + Then use mypanel class as the className of your panel. +

      + + {` import React from 'react'; import { Panel } from 'primereact/panel'; import './custompanel.css'; @@ -144,31 +157,33 @@ export default function PanelDemo() { ) } `} - +
      -

      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat - cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

      +

      + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

      CSS Modules
      -

      CSS modules allow importing a css file to your react component and refer the classes inside using a variable. Unfortunately CSS modules do not support cascaded classes to be applied to external components however attribute selectors - can be used as a common workaround. NextJS has built-in support for CSS modules allowing css files with .module.css suffix to be interpreted as modules.

      +

      + CSS modules allow importing a css file to your react component and refer the classes inside using a variable. Unfortunately CSS modules do not support cascaded classes to be applied to external components however attribute + selectors can be used as a common workaround. NextJS has built-in support for CSS modules allowing css files with .module.css suffix to be interpreted as modules. +

      paneldemo.module.css - -{` + + {` .mypanel > [class~="p-panel-header"] { background-color: #07c4e8; color: #ffffff; } `} - + - -{` + + {` import React from 'react'; import { Panel } from 'primereact/panel'; import stylesModule from './paneldemo.module.css'; @@ -184,21 +199,23 @@ export default function PanelDemo() { ) } `} - + -

      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat - cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

      +

      + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

      CSS-in-JS
      -

      CSS-in-JS solutions are also popular to implement scoped css, as an example we'll be using styled-jsx to customize our panel. Note that use of :global does not make the styling global and only - removes the namespacing from the inner element as it is enough to scope the main container element, in this case .p-panel.

      +

      + CSS-in-JS solutions are also popular to implement scoped css, as an example we'll be using styled-jsx to customize our panel. Note that use of :global does not make the + styling global and only removes the namespacing from the inner element as it is enough to scope the main container element, in this case .p-panel. +

      -{` + {` import React from 'react'; import { Panel } from 'primereact/panel'; import css from 'styled-jsx/css'; @@ -224,43 +241,45 @@ export default function PanelDemo() { ) } `} - + -

      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. - Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. - Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat - cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

      +

      + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo + consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. +

      Scaling
      -

      PrimeReact utilizes rem units to make sure the components blend in with the rest of your UI perfectly. This also enables scaling, for example changing the size of the components - is easy as configuring the font size of your document. Code below sets the scale of the components based on 16px. If you reqire bigger or smaller components, just - change this variable and components will scale accordingly.

      +

      + PrimeReact utilizes rem units to make sure the components blend in with the rest of your UI perfectly. This also enables scaling, for example changing the size of the components is easy as configuring the font size of your + document. Code below sets the scale of the components based on 16px. If you reqire bigger or smaller components, just change this variable and components will scale accordingly. +

      - -{` + + {` html { font-size: 16px; } `} - + -

      Some commonly used components such as inputs, buttons and datatable also provide per component scaling with special classes. Components with specific scaling options - are documented in their own documentation.

      - -{` +

      Some commonly used components such as inputs, buttons and datatable also provide per component scaling with special classes. Components with specific scaling options are documented in their own documentation.

      + + {` ;
      -{` + {`
      `} -
      +

      In addition to PrimeFlex, PrimeReact has a couple of css utility classes on its own as well.

      @@ -331,10 +350,12 @@ html {
      CSS Variables
      -

      Each PrimeReact theme exports numerous CSS variables, refer to Colors page for more details.

      +

      + Each PrimeReact theme exports numerous CSS variables, refer to Colors page for more details. +

      ); -} +}; export default ThemingPage; diff --git a/pages/tieredmenu/index.js b/pages/tieredmenu/index.js index cada25610f..000b149c43 100644 --- a/pages/tieredmenu/index.js +++ b/pages/tieredmenu/index.js @@ -6,8 +6,7 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const TieredMenuDemo = () => { - - const menu = useRef(null) + const menu = useRef(null); const items = [ { @@ -25,7 +24,7 @@ const TieredMenuDemo = () => { { label: 'Video', icon: 'pi pi-fw pi-video' - }, + } ] }, { @@ -60,8 +59,7 @@ const TieredMenuDemo = () => { { label: 'Justify', icon: 'pi pi-fw pi-align-justify' - }, - + } ] }, { @@ -70,13 +68,11 @@ const TieredMenuDemo = () => { items: [ { label: 'New', - icon: 'pi pi-fw pi-user-plus', - + icon: 'pi pi-fw pi-user-plus' }, { label: 'Delete', - icon: 'pi pi-fw pi-user-minus', - + icon: 'pi pi-fw pi-user-minus' }, { label: 'Search', @@ -166,6 +162,6 @@ const TieredMenuDemo = () => { ); -} +}; export default TieredMenuDemo; diff --git a/pages/timeline/index.js b/pages/timeline/index.js index b7f214711b..1f35b53ba9 100644 --- a/pages/timeline/index.js +++ b/pages/timeline/index.js @@ -8,7 +8,6 @@ import Head from 'next/head'; import getConfig from 'next/config'; const TimelineDemo = () => { - const contextPath = getConfig().publicRuntimeConfig.contextPath; const events1 = [ { status: 'Ordered', date: '15/10/2020 10:30', icon: 'pi pi-shopping-cart', color: '#9C27B0', image: 'game-controller.jpg' }, @@ -17,9 +16,7 @@ const TimelineDemo = () => { { status: 'Delivered', date: '16/10/2020 10:00', icon: 'pi pi-check', color: '#607D8B' } ]; - const events2 = [ - '2020', '2021', '2022', '2023' - ]; + const events2 = ['2020', '2021', '2022', '2023']; const customizedMarker = (item) => { return ( @@ -32,9 +29,11 @@ const TimelineDemo = () => { const customizedContent = (item) => { return ( - {item.image && e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png'} alt={item.name} width={200} className="shadow-1" />} -

      Lorem ipsum dolor sit amet, consectetur adipisicing elit. Inventore sed consequuntur error repudiandae numquam deserunt - quisquam repellat libero asperiores earum nam nobis, culpa ratione quam perferendis esse, cupiditate neque quas!

      + {item.image && (e.target.src = 'https://www.primefaces.org/wp-content/uploads/2020/05/placeholder.png')} alt={item.name} width={200} className="shadow-1" />} +

      + Lorem ipsum dolor sit amet, consectetur adipisicing elit. Inventore sed consequuntur error repudiandae numquam deserunt quisquam repellat libero asperiores earum nam nobis, culpa ratione quam perferendis esse, cupiditate neque + quas! +

      ); @@ -96,7 +95,6 @@ const TimelineDemo = () => { ); - -} +}; export default TimelineDemo; diff --git a/pages/toast/index.js b/pages/toast/index.js index 576dbadf09..6c7f3a35f9 100644 --- a/pages/toast/index.js +++ b/pages/toast/index.js @@ -6,7 +6,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const ToastDemo = () => { - const toast = useRef(null); const toastTL = useRef(null); const toastBL = useRef(null); @@ -15,39 +14,41 @@ const ToastDemo = () => { const showSuccess = () => { toast.current.show({ severity: 'success', summary: 'Success Message', detail: 'Message Content', life: 3000 }); - } + }; const showInfo = () => { toast.current.show({ severity: 'info', summary: 'Info Message', detail: 'Message Content', life: 3000 }); - } + }; const showWarn = () => { toast.current.show({ severity: 'warn', summary: 'Warn Message', detail: 'Message Content', life: 3000 }); - } + }; const showError = () => { toast.current.show({ severity: 'error', summary: 'Error Message', detail: 'Message Content', life: 3000 }); - } + }; const showTopLeft = () => { toastTL.current.show({ severity: 'info', summary: 'Info Message', detail: 'Message Content', life: 3000 }); - } + }; const showBottomLeft = () => { toastBL.current.show({ severity: 'warn', summary: 'Warn Message', detail: 'Message Content', life: 3000 }); - } + }; const showBottomRight = () => { toastBR.current.show({ severity: 'success', summary: 'Success Message', detail: 'Message Content', life: 3000 }); - } + }; const showSticky = () => { toast.current.show({ severity: 'info', summary: 'Sticky Message', detail: 'Message Content', sticky: true }); - } + }; const showConfirm = () => { toastBC.current.show({ - severity: 'warn', sticky: true, content: ( + severity: 'warn', + sticky: true, + content: (
      @@ -65,7 +66,7 @@ const ToastDemo = () => {
      ) }); - } + }; const showMultiple = () => { toast.current.show([ @@ -73,11 +74,11 @@ const ToastDemo = () => { { severity: 'info', summary: 'Message 2', detail: 'Message 2 Content', life: 3000 }, { severity: 'info', summary: 'Message 3', detail: 'Message 3 Content', life: 3000 } ]); - } + }; const clear = () => { toast.current.clear(); - } + }; return (
      @@ -126,7 +127,7 @@ const ToastDemo = () => {
      - ) -} + ); +}; export default ToastDemo; diff --git a/pages/togglebutton/index.js b/pages/togglebutton/index.js index e1acc8a67f..64a51b9801 100644 --- a/pages/togglebutton/index.js +++ b/pages/togglebutton/index.js @@ -5,7 +5,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const ToggleButtonDemo = () => { - const [checked1, setChecked1] = useState(false); const [checked2, setChecked2] = useState(false); @@ -37,6 +36,6 @@ const ToggleButtonDemo = () => {
      ); -} +}; export default ToggleButtonDemo; diff --git a/pages/toolbar/index.js b/pages/toolbar/index.js index c77fcac782..833a9e978b 100644 --- a/pages/toolbar/index.js +++ b/pages/toolbar/index.js @@ -21,7 +21,7 @@ const ToolbarDemo = () => { label: 'React Website', icon: 'pi pi-external-link', command: () => { - window.location.href = 'https://reactjs.org/' + window.location.href = 'https://reactjs.org/'; } }, { @@ -40,7 +40,6 @@ const ToolbarDemo = () => { } ]; - const leftContents = ( - - ; - } + return ( +
      + + +
      + ); + }; - const header = "File Viewer"; - const footer =
      ; + const header = 'File Viewer'; + const footer = ( +
      +
      + ); return (
      @@ -35,7 +40,9 @@ const TreeTableTemplatingDemo = () => {
      -

      TreeTable Templating

      +

      + TreeTable Templating +

      Custom content at header, body and footer sections are supported via templating.

      @@ -55,15 +62,14 @@ const TreeTableTemplatingDemo = () => {
      - ) -} + ); +}; export default TreeTableTemplatingDemo; const TreeTableTemplatingDemoDoc = memo(() => { - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, { Component } from 'react'; @@ -114,7 +120,7 @@ export class TreeTableTemplatingDemo extends Component { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, { useState, useEffect } from 'react'; @@ -156,7 +162,7 @@ const TreeTableTemplatingDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, { useState, useEffect } from 'react'; @@ -198,7 +204,7 @@ const TreeTableTemplatingDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -247,15 +253,11 @@ const TreeTableTemplatingDemo = () => { } ` } - } + }; return (
      - - { - useLiveEditorTabs({ name: 'TreeTableTemplatingDemo', sources: sources, service: 'NodeService', data: 'treetablenodes' }) - } - + {useLiveEditorTabs({ name: 'TreeTableTemplatingDemo', sources: sources, service: 'NodeService', data: 'treetablenodes' })}
      - ) -}) + ); +}); diff --git a/pages/treetable/toggle.js b/pages/treetable/toggle.js index fd5a8cdeb4..dc2520749d 100644 --- a/pages/treetable/toggle.js +++ b/pages/treetable/toggle.js @@ -25,17 +25,16 @@ const TreeTableColTogglerDemo = () => { const nodeservice = new NodeService(); useEffect(() => { - nodeservice.getTreeTableNodes().then(data => setNodes(data)); + nodeservice.getTreeTableNodes().then((data) => setNodes(data)); }, []); // eslint-disable-line react-hooks/exhaustive-deps const onColumnToggle = (event) => { setCols(event.value); - } + }; const header = (
      - +
      ); @@ -43,7 +42,6 @@ const TreeTableColTogglerDemo = () => { return ; }); - return (
      @@ -52,7 +50,9 @@ const TreeTableColTogglerDemo = () => {
      -

      TreeTable Column Toggler

      +

      + TreeTable Column Toggler +

      MultiSelect component can be used to implement column toggler functionality.

      @@ -70,16 +70,14 @@ const TreeTableColTogglerDemo = () => {
      - ) -} + ); +}; export default TreeTableColTogglerDemo; const TreeTableColTogglerDemoDoc = memo(() => { - - const sources = { - 'class': { + class: { tabName: 'Class Source', content: ` import React, {Component} from 'react'; @@ -145,7 +143,7 @@ const TreeTableColTogglerDemoDoc = memo(() => { } ` }, - 'hooks': { + hooks: { tabName: 'Hooks Source', content: ` import React, {useState, useEffect} from 'react'; @@ -202,7 +200,7 @@ const TreeTableColTogglerDemo = () => { } ` }, - 'ts': { + ts: { tabName: 'TS Source', content: ` import React, {useState, useEffect} from 'react'; @@ -259,7 +257,7 @@ const TreeTableColTogglerDemo = () => { } ` }, - 'browser': { + browser: { tabName: 'Browser Source', imports: ` @@ -323,15 +321,11 @@ const TreeTableColTogglerDemo = () => { } ` } - } + }; return (
      - - { - useLiveEditorTabs({ name: 'TreeTableColTogglerDemo', sources: sources, service: 'NodeService', data: 'treetablenodes' }) - } - + {useLiveEditorTabs({ name: 'TreeTableColTogglerDemo', sources: sources, service: 'NodeService', data: 'treetablenodes' })}
      - ) -}) + ); +}); diff --git a/pages/tristatecheckbox/index.js b/pages/tristatecheckbox/index.js index 9df9402cf1..c769bb073e 100644 --- a/pages/tristatecheckbox/index.js +++ b/pages/tristatecheckbox/index.js @@ -5,7 +5,6 @@ import { DocActions } from '../../components/doc/common/docactions'; import Head from 'next/head'; const TriStateCheckboxDemo = () => { - const [value, setValue] = useState(null); return ( @@ -35,6 +34,6 @@ const TriStateCheckboxDemo = () => {
      ); -} +}; export default TriStateCheckboxDemo; diff --git a/pages/uikit/index.js b/pages/uikit/index.js index b93ea436f8..75739e8ab4 100644 --- a/pages/uikit/index.js +++ b/pages/uikit/index.js @@ -12,21 +12,20 @@ const UIKitPage = (props) => {
      -
      - PrimeNG Designer +
      + PrimeNG Designer
      -
      +
      - PrimeNG Designer + PrimeNG Designer
      UP-TO-DATE
      Best Features of Figma
      -

      PrimeOne for Figma uses the latest powerful features like components, variants, auto layout, styles and interactive components. - It'll always follow the best practices.

      - +

      PrimeOne for Figma uses the latest powerful features like components, variants, auto layout, styles and interactive components. It'll always follow the best practices.

      +
      • @@ -52,7 +51,7 @@ const UIKitPage = (props) => {
        ENTERPRISE GRADE
        Powerful System

        Save countless hours on every project with a carefully designed system that uses Prime UI Suite components. Start producing design results in no time.

        - +
        • @@ -73,18 +72,18 @@ const UIKitPage = (props) => {
      - PrimeNG Designer + PrimeNG Designer
      - PrimeNG Designer + PrimeNG Designer
      DARK MODE
      Two Themes

      PrimeOne is designed based on Lara Blue Light and Lara Blue Dark themes. Easily change the themes of your designs using Figma's Swap Library feature.

      - +
      • @@ -100,17 +99,25 @@ const UIKitPage = (props) => {
      -
      +
      Pricing
      Choose the right plan for your business. Whether you are an individual or a member of a team, UI Kit is available for affordable prices.
      @@ -148,7 +155,9 @@ const UIKitPage = (props) => {

    - Buy Now + + Buy Now + @@ -186,7 +195,9 @@ const UIKitPage = (props) => {
    - Buy Now + + Buy Now + @@ -224,14 +235,16 @@ const UIKitPage = (props) => {
    - Contact Us + + Contact Us + -
    +
    Frequently Asked Questions
    @@ -249,7 +262,13 @@ const UIKitPage = (props) => {
    We're a reseller, are we able to purchase a license on behalf of our client?
    -

    Yes, after the purchase, please contact us so we can transfer the license to your client.

    +

    + Yes, after the purchase, please{' '} + + contact us + {' '} + so we can transfer the license to your client. +

    Does the enterprise license include contractors within the organization?

    Yes, contractors are also able to use the UI Kit within your company.

    @@ -262,8 +281,13 @@ const UIKitPage = (props) => {
    How can I get support?
    -

    Support is provided by PrimeTek via - a dedicated forum channel monitored by PrimeTek support staff.

    +

    + Support is provided by PrimeTek via + + a dedicated forum channel monitored + {' '} + by PrimeTek support staff. +

    What does lifetime support mean?

    Support service at the forum does not have a time limit.

    @@ -276,6 +300,6 @@ const UIKitPage = (props) => {
    ); -} +}; export default UIKitPage; diff --git a/pages/virtualscroller/index.js b/pages/virtualscroller/index.js index 1ee205f106..cd4d8f2c1d 100644 --- a/pages/virtualscroller/index.js +++ b/pages/virtualscroller/index.js @@ -38,20 +38,24 @@ const VirtualScrollerDemo = () => { setLazyItems(_lazyItems); setLazyLoading(false); }, Math.random() * 1000 + 250); - } + }; const basicItemTemplate = (item, options) => { const className = classNames('scroll-item p-2', { - 'odd': options.odd + odd: options.odd }); const style = options.props.orientation === 'horizontal' ? { width: '50px' } : { height: '50px' }; - return
    {item}
    ; - } + return ( +
    + {item} +
    + ); + }; const basicLoadingTemplate = (options) => { const className = classNames('scroll-item p-2', { - 'odd': options.odd + odd: options.odd }); return ( @@ -59,28 +63,30 @@ const VirtualScrollerDemo = () => {
    ); - } + }; const multiItemTemplate = (items, options) => { const className = classNames('scroll-item p-2', { - 'odd': options.odd + odd: options.odd }); return (
    - { - items.map((item, i) => { - return
    {item}
    - }) - } + {items.map((item, i) => { + return ( +
    + {item} +
    + ); + })}
    ); - } + }; const itemTemplate = (item, options) => { const { index, count, first, last, even, odd } = options; const className = classNames('custom-scroll-item scroll-item', { - 'odd': odd + odd: odd }); return ( @@ -93,26 +99,40 @@ const VirtualScrollerDemo = () => {
    {`Even: ${even}`}
    {`Odd: ${odd}`}
    - ) - } + ); + }; const loadingTemplate = (options) => { const className = classNames('custom-scroll-item scroll-item', { - 'odd': options.odd + odd: options.odd }); return (
    -
    -
    -
    -
    -
    -
    -
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    ); - } + }; return (
    @@ -182,8 +202,7 @@ const VirtualScrollerDemo = () => {
    Lazy
    - +
    @@ -194,7 +213,7 @@ const VirtualScrollerDemo = () => {
    - ) -} + ); +}; export default VirtualScrollerDemo; diff --git a/service/CarService.js b/service/CarService.js index b9d39455c9..61159e5c4d 100644 --- a/service/CarService.js +++ b/service/CarService.js @@ -1,5 +1,4 @@ export class CarService { - brands = ['Vapid', 'Carson', 'Kitano', 'Dabver', 'Ibex', 'Morello', 'Akira', 'Titan', 'Dover', 'Norma']; colors = ['Black', 'White', 'Red', 'Blue', 'Silver', 'Green', 'Yellow']; @@ -11,12 +10,12 @@ export class CarService { brand: this.generateBrand(), color: this.generateColor(), year: this.generateYear() - } + }; } generateVin() { - let text = ""; - let possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + let text = ''; + let possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; for (let i = 0; i < 5; i++) { text += possible.charAt(Math.floor(Math.random() * possible.length)); diff --git a/service/CountryService.js b/service/CountryService.js index ccc9c783de..58463cf260 100644 --- a/service/CountryService.js +++ b/service/CountryService.js @@ -1,13 +1,13 @@ import getConfig from 'next/config'; export class CountryService { - constructor() { this.contextPath = getConfig().publicRuntimeConfig.contextPath; } getCountries() { - return fetch(this.contextPath + '/data/countries.json').then(res => res.json()) - .then(d => d.data); + return fetch(this.contextPath + '/data/countries.json') + .then((res) => res.json()) + .then((d) => d.data); } } diff --git a/service/CustomerService.js b/service/CustomerService.js index b2e895ac22..106488ea78 100644 --- a/service/CustomerService.js +++ b/service/CustomerService.js @@ -1,33 +1,40 @@ import getConfig from 'next/config'; export class CustomerService { - constructor() { this.contextPath = getConfig().publicRuntimeConfig.contextPath; } getCustomersSmall() { - return fetch(this.contextPath + '/data/customers-small.json').then(res => res.json()) - .then(d => d.data); + return fetch(this.contextPath + '/data/customers-small.json') + .then((res) => res.json()) + .then((d) => d.data); } getCustomersMedium() { - return fetch(this.contextPath + '/data/customers-medium.json').then(res => res.json()) - .then(d => d.data); + return fetch(this.contextPath + '/data/customers-medium.json') + .then((res) => res.json()) + .then((d) => d.data); } getCustomersLarge() { - return fetch(this.contextPath + '/data/customers-large.json').then(res => res.json()) - .then(d => d.data); + return fetch(this.contextPath + '/data/customers-large.json') + .then((res) => res.json()) + .then((d) => d.data); } getCustomersXLarge() { - return fetch(this.contextPath + '/data/customers-xlarge.json').then(res => res.json()) - .then(d => d.data); + return fetch(this.contextPath + '/data/customers-xlarge.json') + .then((res) => res.json()) + .then((d) => d.data); } getCustomers(params) { - const queryParams = params ? Object.keys(params).map(k => encodeURIComponent(k) + '=' + encodeURIComponent(params[k])).join('&') : ''; - return fetch('https://www.primefaces.org/data/customers?' + queryParams).then(res => res.json()) + const queryParams = params + ? Object.keys(params) + .map((k) => encodeURIComponent(k) + '=' + encodeURIComponent(params[k])) + .join('&') + : ''; + return fetch('https://www.primefaces.org/data/customers?' + queryParams).then((res) => res.json()); } } diff --git a/service/EventService.js b/service/EventService.js index 23fe2837eb..981224e29b 100644 --- a/service/EventService.js +++ b/service/EventService.js @@ -1,14 +1,13 @@ import getConfig from 'next/config'; export class EventService { - constructor() { this.contextPath = getConfig().publicRuntimeConfig.contextPath; } getEvents() { - return fetch(this.contextPath + '/data/events.json').then(res => res.json()) - .then(d => d.data); + return fetch(this.contextPath + '/data/events.json') + .then((res) => res.json()) + .then((d) => d.data); } - } diff --git a/service/IconService.js b/service/IconService.js index 1cb2641913..8bd75e6d2d 100644 --- a/service/IconService.js +++ b/service/IconService.js @@ -1,7 +1,6 @@ import getConfig from 'next/config'; export class IconService { - constructor() { this.icons = []; this.selectedIcon = null; @@ -9,13 +8,14 @@ export class IconService { } getIcons() { - return fetch(this.contextPath + '/data/icons.json', { headers: { 'Cache-Control' : 'no-cache' } }).then(res => res.json()) - .then(d => d.icons); + return fetch(this.contextPath + '/data/icons.json', { headers: { 'Cache-Control': 'no-cache' } }) + .then((res) => res.json()) + .then((d) => d.icons); } - getIcon(id){ + getIcon(id) { if (this.icons) { - this.selectedIcon = this.icons.find(x => x.properties.id === id); + this.selectedIcon = this.icons.find((x) => x.properties.id === id); return this.selectedIcon; } } diff --git a/service/NewsService.js b/service/NewsService.js index 0b77988565..28c63e4dae 100644 --- a/service/NewsService.js +++ b/service/NewsService.js @@ -1,10 +1,10 @@ async function fetchNews() { try { - const response = await fetch('https://www.primefaces.org/cdn/news/primereact.json', {cache: 'no-store'}); + const response = await fetch('https://www.primefaces.org/cdn/news/primereact.json', { cache: 'no-store' }); return response.json(); } catch { return null; } } -export default fetchNews; \ No newline at end of file +export default fetchNews; diff --git a/service/NodeService.js b/service/NodeService.js index d17e1ad7c0..05a464edd0 100644 --- a/service/NodeService.js +++ b/service/NodeService.js @@ -1,18 +1,19 @@ import getConfig from 'next/config'; export class NodeService { - constructor() { this.contextPath = getConfig().publicRuntimeConfig.contextPath; } getTreeTableNodes() { - return fetch(this.contextPath + '/data/treetablenodes.json').then(res => res.json()) - .then(d => d.root); + return fetch(this.contextPath + '/data/treetablenodes.json') + .then((res) => res.json()) + .then((d) => d.root); } getTreeNodes() { - return fetch(this.contextPath + '/data/treenodes.json').then(res => res.json()) - .then(d => d.root); + return fetch(this.contextPath + '/data/treenodes.json') + .then((res) => res.json()) + .then((d) => d.root); } } diff --git a/service/PhotoService.js b/service/PhotoService.js index 466e69196d..756774dcee 100644 --- a/service/PhotoService.js +++ b/service/PhotoService.js @@ -1,13 +1,13 @@ import getConfig from 'next/config'; export class PhotoService { - constructor() { this.contextPath = getConfig().publicRuntimeConfig.contextPath; } getImages() { - return fetch(this.contextPath + '/data/photos.json').then(res => res.json()) - .then(d => d.data); + return fetch(this.contextPath + '/data/photos.json') + .then((res) => res.json()) + .then((d) => d.data); } } diff --git a/service/ProductService.js b/service/ProductService.js index 4764ac6ebe..b3c6416549 100644 --- a/service/ProductService.js +++ b/service/ProductService.js @@ -1,20 +1,25 @@ import getConfig from 'next/config'; export class ProductService { - - constructor() { + constructor() { this.contextPath = getConfig().publicRuntimeConfig.contextPath; } getProductsSmall() { - return fetch(this.contextPath + '/data/products-small.json').then(res => res.json()).then(d => d.data); - } + return fetch(this.contextPath + '/data/products-small.json') + .then((res) => res.json()) + .then((d) => d.data); + } - getProducts() { - return fetch(this.contextPath + '/data/products.json').then(res => res.json()).then(d => d.data); + getProducts() { + return fetch(this.contextPath + '/data/products.json') + .then((res) => res.json()) + .then((d) => d.data); } getProductsWithOrdersSmall() { - return fetch(this.contextPath + '/data/products-orders-small.json').then(res => res.json()).then(d => d.data); - } + return fetch(this.contextPath + '/data/products-orders-small.json') + .then((res) => res.json()) + .then((d) => d.data); + } } diff --git a/service/VersionService.js b/service/VersionService.js index 80fe9035a7..146e266e59 100644 --- a/service/VersionService.js +++ b/service/VersionService.js @@ -1,7 +1,7 @@ export class VersionService { - getVersions() { - return fetch('https://www.primefaces.org/primereact/versions.json').then(res => res.json()) - .then(d => d.versions); + return fetch('https://www.primefaces.org/primereact/versions.json') + .then((res) => res.json()) + .then((d) => d.versions); } }